public override void onDisabled(ShapeBase obj, string lastState) { Player player = obj.getId(); player.setImageTrigger(0, false); GameBaseData item = (((GameBaseData)(player.getMountedImage(Constants.WeaponSlot)))["item"]); if (item.isObject()) { int amount = player.getInventory(item["image.ammo"]); if (amount.AsBool()) { player.Throw(item["image.clip"], 1); } } player.tossPatch(); player.playDeathCry(); player.playDeathAnimation(); //If it's a player check..... GameConnection client = player["client"]; if (client.isObject()) { //todo Remove the console.commandToClient since the default one now shows in the Util class. console.commandToClient(client, console.addTaggedString("toggleVehicleMapToggle"), new[] { "false" }); } //Util._commandToClient(client, "toggleVehicleMap", false.AsString()); int ctov = iGlobal["$CorpseTimeoutValue"]; player.schedule((ctov - 1000).AsString(), "startFade", "1000", "0", "true"); player.schedule(ctov.AsString(), "delete"); }
public virtual void mountPlayer(Vehicle vehicle, Player player) { if (!vehicle.isObject() || vehicle.getDamageState() == "Destroyed") { return; } player.startFade(1000, 0, true); this.schedule("1000", "setMountVehicle", vehicle, player); player.schedule("1500", "startFade", "1000", "0", "false"); }
public override void onDisabled(ShapeBase obj, string lastState) { //console.print("### AI DEAD ###!"); Player npc = obj.ID; Util.cancelAll(npc); ScriptObject aimanager = null; aimanager = npc["aiManager"]; if (!aimanager.isObject()) { console.error("Bad aiManager"); return; } npc.setImageTarget(0, false); SimObject item = ((SimObject)npc.getMountedImage(iGlobal["$WeaponSlot"]))["item"]; if (item.isObject()) { //string item = console.GetVarString(ShapeBase.getMountedImage(npc, WeaponSlot).AsString() + ".item"); if (r.Next(1, 100) > 80) { int amount = npc.getInventory(item["image.ammo"]); if (amount.AsBool()) { npc.Throw(item["image.clip"], 1); } } } npc.tossPatch(); npc.playDeathCry(); npc.playDeathAnimation(); int ctov = 2000; if (AI.lastcount > 0) { AI.spawnAI(aimanager); } npc.schedule((ctov - 1000).AsString(), "startFade", "1000", "0", "true"); Util._schedule("1", "0", "SafeDeleteCallback", npc); }
public override void doDismount(Player obj) { Player player = obj.getId(); Vehicle vehicle = player["mVehicle"]; if (!vehicle.isObject()) { return; } if (!player.isMounted()) { return; } Point3F vvel = vehicle.getVelocity(); VehicleData vdb = vehicle.getDataBlock(); int maxDismountSpeed = vdb["maxDismountSpeed"].AsInt(); if ((vvel.len() <= maxDismountSpeed)) //|| (forced)) { TransformF pos = player.getTransform(); TransformF rot = pos; TransformF oldpos = pos.copy(); List <Point3F> vecs = new List <Point3F> { new Point3F(-1, 0, 0), new Point3F(0, 0, 1), new Point3F(0, 0, -1), new Point3F(1, 0, 0), new Point3F(0, -1, 0), new Point3F(0, 0, 0) }; Point3F impulsevec = new Point3F(0, 0, 0); TransformF r = math.MatrixMulVector(player.getTransform(), vecs[0]); vecs[0] = r.GetPosition(); pos.mPositionX = 0; pos.mPositionY = 0; pos.mPositionZ = 0; const int numofAttempts = 5; int success = -1; for (int i = 0; i < numofAttempts; i++) { Point3F vectorscale = vecs[i].vectorScale(3); pos = oldpos + new TransformF(vectorscale); if (!player.checkDismountPoint(oldpos.GetPosition(), pos.GetPosition())) { continue; } success = i; impulsevec = vecs[i].copy(); break; } //if ((forced) && (success == -1)) if (success == -1) { pos = oldpos.copy(); } player["mountVehicle"] = false.AsString(); player.schedule("4000", "mountVehicles", "true"); player.unmount(); player.setTransform(new TransformF(pos.mPositionX, pos.mPositionY, pos.mPositionZ, rot.mOrientationX, rot.mOrientationY, rot.mOrientationZ, rot.MAngle)); Point3F velo = impulsevec.vectorScale(player["mass"].AsFloat()); velo.z = 1; player.applyImpulse(pos.GetPosition(), velo); Point3F vel = player.getVelocity(); float vec = Point3F.vectorDot(vel, vel.normalizeSafe()); if (vec > 50) { float scale = 50 / vec; player.setVelocity(vel.vectorScale(scale)); } } else { message.MessageClient(player["client"], "msgUnmount", @"\c2Cannot exit %1 while moving.", console.GetVarString(vdb + ".nameTag")); } }
public virtual void mountPlayer(Vehicle vehicle, Player player) { if (!vehicle.isObject() || vehicle.getDamageState() == "Destroyed") return; player.startFade(1000, 0, true); this.schedule("1000", "setMountVehicle", vehicle, player); player.schedule("1500", "startFade", "1000", "0", "false"); }