Advertisement
Guest User

Untitled

a guest
Jan 15th, 2018
254
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 36.16 KB | None | 0 0
  1. using SFDGameScriptInterface;using System;using System.Collections.Generic;public class Cod {
  2.     //-----------------------------------
  3.  
  4.     /*=======================================
  5.     =            Elevator Script            =
  6.     =======================================*/
  7.  
  8.     private ElevatorHandlerHelper m_elevatorA = null;
  9.  
  10.     public void ElevatorButtonPress(TriggerArgs args)
  11.     {
  12.         // find out which button
  13.         if ((args.Caller != null) && (args.Caller is IObject))
  14.         {
  15.             IObject btnPressed = (IObject)args.Caller;
  16.             m_elevatorA.ButtonPressed(btnPressed.CustomId);
  17.         }
  18.     }
  19.  
  20.     public void ElevatorArrived(TriggerArgs args)
  21.     {
  22.         // args.Caller is the elevatorAttachmentJoint, args.Sender is the elevatorPathJoint arrived at in this case
  23.         if ((args.Sender != null) && (args.Sender is IObject))
  24.         {
  25.             IObject pathJoint = (IObject)args.Sender;
  26.             m_elevatorA.ElevatorArrived(pathJoint.CustomId);
  27.         }
  28.     }
  29.  
  30.  
  31.     /*=====  End of Elevator Script  ======*/
  32.  
  33.     /*========================================
  34.     =            Script Variables            =
  35.     ========================================*/
  36.  
  37.     // The global instance of the queueUsers
  38.     static DynamicUserQueue CodUsers = DynamicUserQueue.Instace;
  39.  
  40.     // The users playing the game
  41.     static List<DynamicUser> users = new List<DynamicUser>();
  42.  
  43.     // Script name
  44.     const string scriptName = "COD";
  45.  
  46.     // The spawn area list, used to add players
  47.     static IObject[] spawns;
  48.  
  49.     // Random generator object
  50.     static Random rand = new Random();
  51.  
  52.     // Mid Tick
  53.     static IObjectTimerTrigger midTick;
  54.  
  55.     // Respawn delay
  56.     static float respawnDelay = 5000;
  57.  
  58.     // Game time
  59.     static TimeSpan globalTime = new TimeSpan(0, 0, 2, 30, 0);
  60.  
  61.     // Blacklist objects that must be deleted
  62.     string[] junkObjects = {
  63.     "Giblet00",
  64.     "Giblet01",
  65.     "Giblet02",
  66.     "Giblet03",
  67.     "Giblet04",
  68.     "ShellSmall",
  69.     "ShellShotgun",
  70.     "ShellGLauncher",
  71.     "ShellBig",
  72.     "MagSmall",
  73.     "MagAssaultRifle",
  74.     "MagDrum",
  75.     "MagSMG",
  76.     "WpnPistol",
  77.     "WpnSilencedPistol",
  78.     "WpnMagnum",
  79.     "WpnRevolver",
  80.     "WpnPumpShotgun",
  81.     "WpnTommygun",
  82.     "WpnSMG",
  83.     "WpnM60",
  84.     "WpnPipeWrench",
  85.     "PipeDebris1",
  86.     "WpnChain",
  87.     "WpnHammer",
  88.     "HammerDebris1",
  89.     "WpnKatana",
  90.     "SwordDebris1",
  91.     "WpnMachete",
  92.     "MacheteDebris1",
  93.     "WpnKnife",
  94.     "KnifeDebris1",
  95.     "WpnSawedOff",
  96.     "WpnBat",
  97.     "WpnBaton",
  98.     "BatonDebris1",
  99.     "BatonDebris2",
  100.     "WpnUzi",
  101.     "WpnSilencedUzi",
  102.     "WpnBazooka",
  103.     "WpnAxe",
  104.     "AxeDebris1",
  105.     "WpnAssaultRifle",
  106.     "WpnSniperRifle",
  107.     "WpnCarbine",
  108.     "WpnFlamethrower",
  109.     "ItemPills",
  110.     "ItemMedkit",
  111.     "ItemSlomo5",
  112.     "ItemSlomo10",
  113.     "ItemLaserSight",
  114.     "WpnGrenades",
  115.     "WpnGrenadesThrown",
  116.     "WpnGrenadePin",
  117.     "WpnMolotovs",
  118.     "WpnMolotovsThrown",
  119.     "WpnC4",
  120.     "WpnC4Thrown",
  121.     "WpnC4Detonator",
  122.     "WpnMines",
  123.     "WpnMineThrown",
  124.     "WpnFlareGun",
  125.     "WpnGrenadeLauncher"
  126.     };
  127.  
  128.     // Teleport stamina consumption
  129.     static float teleport_energy_comsume = 35f;
  130.  
  131.     /*=====  End of Script Variables  ======*/
  132.  
  133.     /*========================================
  134.     =            Script Functions            =
  135.     ========================================*/
  136.  
  137.     /**
  138.      * OnStartup listener
  139.      */
  140.     public void OnStartup(TriggerArgs args)
  141.     {
  142.         // Setup the elevator
  143.         m_elevatorA = new ElevatorHandlerHelper(GameScriptInterface.Game, "EleA", new string[] { "A", "B", "C" }, "A");
  144.  
  145.         // Setup the ticks
  146.         Utils.SetTimer("PeriodicalTick", "PeriodicalTick", -1, 20000);
  147.         Utils.SetTimer("SecTick", "SecTick", -1, 1000);
  148.         Utils.SetTimer("SlowTick", "SlowTick", -1, 500);
  149.         Utils.SetTimer("MidTick", "MidTick", -1, 250);
  150.         Utils.SetTimer("FastTick", "FastTick", -1, 75);
  151.  
  152.         CodUsers.DisplayPlayerPoints();
  153.  
  154.         // Setup the players
  155.         //PlayersLife(new TriggerArgs(null, null, false));
  156.  
  157.         // Gets all the spawn areas
  158.         spawns = GameScriptInterface.Game.GetObjectsByCustomId("SpawnArea");
  159.     }
  160.  
  161.     /**
  162.      * 20000 ms tick
  163.      */
  164.     public void PeriodicalTick(TriggerArgs args)
  165.     {
  166.         DeleteTrash();
  167.     }
  168.  
  169.     /**
  170.      * 1000 ms tick
  171.      */
  172.     public void SecTick(TriggerArgs args)
  173.     {
  174.         // Ticks the time
  175.         if (!GameScriptInterface.Game.IsGameOver)
  176.         {
  177.             GameTime(args);
  178.             CodUsers.DisplayPlayerPoints();
  179.         }
  180.     }
  181.  
  182.     /**
  183.      * 500 ms tick
  184.      */
  185.     public void SlowTick(TriggerArgs args)
  186.     {
  187.         // Update the players
  188.         CodUsers.UpdateUsers(args);
  189.     }
  190.  
  191.     /**
  192.      * 250 ms tick
  193.      */
  194.     public void MidTick(TriggerArgs args)
  195.     {
  196.  
  197.     }
  198.  
  199.     /**
  200.      * 75 ms tick
  201.      */
  202.     public void FastTick(TriggerArgs args)
  203.     {
  204.  
  205.     }
  206.  
  207.     /**
  208.      *  Deletes trash objects
  209.      *  from the map
  210.      */
  211.     public void DeleteTrash()
  212.     {
  213.         foreach (IObject obj in GameScriptInterface.Game.GetObjectsByName(junkObjects))
  214.         {
  215.             obj.Remove();
  216.         }
  217.     }
  218.  
  219.     /**
  220.      * Used to move a player to the game with a kit
  221.      */
  222.     public void KitButton(TriggerArgs args)
  223.     {
  224.         try
  225.         {
  226.             // Gets the caller and the trigger
  227.             IObjectTrigger caller = args.Caller as IObjectTrigger;
  228.             IPlayer sender = args.Sender as IPlayer;
  229.  
  230.             DynamicUser dynUser = CodUsers.DynamicUserFromIPlayer(sender);
  231.  
  232.             dynUser.GiveKit(caller.CustomId);
  233.             dynUser.SendPlayerToBattleArea();
  234.         }
  235.         catch (System.Exception e)
  236.         {
  237.             Utils.SendExceptionMessage(e, "KitButton");
  238.         }
  239.     }
  240.  
  241.     /**
  242.      * Death listener
  243.      */
  244.     public void Death(TriggerArgs args)
  245.     {
  246.         try
  247.         {
  248.             IPlayer sender = args.Sender as IPlayer;
  249.  
  250.             DynamicUser deadDynUsr = new DynamicUser(sender.GetUser());
  251.  
  252.             CodUsers.UserDied(deadDynUsr);
  253.         }
  254.         catch (System.Exception e)
  255.         {
  256.             Utils.SendExceptionMessage(e, "Death");
  257.         }
  258.     }
  259.  
  260.     /**
  261.      * Canned ammo, used in the vending machines
  262.      */
  263.     public void CannedLife(TriggerArgs args)
  264.     {
  265.         try
  266.         {
  267.             IObjectTrigger caller = args.Caller as IObjectTrigger;
  268.             IPlayer sender = args.Sender as IPlayer;
  269.             DynamicUser tempUsr = CodUsers.DynamicUserFromIPlayer(sender);
  270.  
  271.             if (tempUsr.CanUseTheLifeMachine())
  272.             {
  273.                 Utils.CreateClickableObject("CrabCan00", tempUsr.Ply.GetWorldPosition() + new Vector2(11f * tempUsr.Ply.FacingDirection, 0), "LifeCan", true);
  274.                 tempUsr.LifeMachineTime = GameScriptInterface.Game.TotalElapsedGameTime;
  275.             }
  276.             else
  277.             {
  278.                 Utils.SendMessageFromTriggerArgs(args, "Wait...");
  279.             }
  280.         }
  281.         catch (System.Exception e)
  282.         {
  283.             Utils.SendExceptionMessage(e, "CannedLife");
  284.         }
  285.     }
  286.  
  287.     /**
  288.      *
  289.      * Gives life to the player who gets
  290.      * the life can.
  291.      *
  292.      */
  293.     public void LifeCan(TriggerArgs args)
  294.     {
  295.         IPlayer sender = args.Sender as IPlayer;
  296.         IObjectActivateTrigger caller = args.Caller as IObjectActivateTrigger;
  297.         IObject obj = caller.GetHighlightObject();
  298.  
  299.         sender.GiveWeaponItem(WeaponItem.PILLS);
  300.         obj.Destroy();
  301.  
  302.         Utils.SendMessageFromTriggerArgs(args, "Chomp!");
  303.     }
  304.  
  305.     /**
  306.      * Closet ammo, spawns a desired
  307.      * kit in a box when trigered
  308.      */
  309.     public void ClosetAmmo(TriggerArgs args)
  310.     {
  311.         try
  312.         {
  313.             IObjectTrigger caller = args.Caller as IObjectTrigger;
  314.             IPlayer sender = args.Sender as IPlayer;
  315.             DynamicUser tempUsr = CodUsers.DynamicUserFromIPlayer(sender);
  316.  
  317.             if (tempUsr.CanUseTheClosetAmmo())
  318.             {
  319.                 Utils.CreateClickableObject("CardboardBox00", tempUsr.Ply.GetWorldPosition(), "ClosetGift", true);
  320.                 tempUsr.ClosetAmmoTime = GameScriptInterface.Game.TotalElapsedGameTime;
  321.             }
  322.             else
  323.             {
  324.                 Utils.SendMessageFromTriggerArgs(args, "Wait...");
  325.             }
  326.         }
  327.         catch (System.Exception e)
  328.         {
  329.             Utils.SendExceptionMessage(e, "ClosetAmmo");
  330.         }
  331.     }
  332.  
  333.     public void ClosetGift(TriggerArgs args)
  334.     {
  335.         try
  336.         {
  337.             IPlayer sender = args.Sender as IPlayer;
  338.             IObjectActivateTrigger caller = args.Caller as IObjectActivateTrigger;
  339.             IObject obj = caller.GetHighlightObject();
  340.             DynamicUser tempUsr = CodUsers.DynamicUserFromIPlayer(sender);
  341.  
  342.             tempUsr.GiveKit(tempUsr.PlyClass);
  343.             obj.Destroy();
  344.         }
  345.         catch (System.Exception e)
  346.         {
  347.             Utils.SendExceptionMessage(e, "ClosetGift");
  348.         }
  349.     }
  350.  
  351.     /**
  352.      * GameTime, used to gameover the game
  353.      */
  354.     public void GameTime(TriggerArgs args)
  355.     {
  356.         IObjectText timeRemaining = (IObjectText)GameScriptInterface.Game.GetSingleObjectByCustomId("TimeRemaining");
  357.         IObjectText timeRemainingShadow = (IObjectText)GameScriptInterface.Game.GetSingleObjectByCustomId("TimeRemainingShadow");
  358.  
  359.         timeRemaining.SetText(globalTime.ToString(@"m\:ss"));
  360.         timeRemainingShadow.SetText(globalTime.ToString(@"m\:ss"));
  361.  
  362.         if (globalTime <= TimeSpan.Zero)
  363.         {
  364.             timeRemaining.SetText("Game Over");
  365.             timeRemainingShadow.SetText("Game Over");
  366.  
  367.             CodUsers.GameOver();
  368.         }
  369.         else if (CodUsers.IsAnyPlayerInArena())
  370.         {
  371.             globalTime = globalTime.Subtract(new TimeSpan(0, 0, 0, 1, 0));
  372.         }
  373.     }
  374.  
  375.     /**
  376.      * Teleport join, used to
  377.      * teleport players through doors
  378.      */
  379.     public void TeleportJoint(TriggerArgs args)
  380.     {
  381.         IPlayer sender = (IPlayer)args.Sender;
  382.         DynamicUser dUser = CodUsers.DynamicUserFromIPlayer(sender);
  383.  
  384.         if (dUser.CanTeleport() && sender.GetModifiers().CurrentEnergy > teleport_energy_comsume)
  385.         {
  386.             // Update the teleport time
  387.             dUser.TeleportTime = GameScriptInterface.Game.TotalElapsedGameTime;
  388.  
  389.             // Consume some energy
  390.             PlayerModifiers modifiers = sender.GetModifiers();
  391.             modifiers.CurrentEnergy = modifiers.CurrentEnergy - teleport_energy_comsume;
  392.             sender.SetModifiers(modifiers);
  393.  
  394.             // Teleport from A1 to A2
  395.             IObjectActivateTrigger caller = (IObjectActivateTrigger)args.Caller;
  396.             IObject otherSide = GameScriptInterface.Game.GetSingleObjectByCustomId((caller.GetHighlightObject() as IObject).CustomId.Substring(0, 2));
  397.             sender.SetWorldPosition(otherSide.GetWorldPosition());
  398.         }
  399.     }
  400.  
  401.     /*=====  End of Script Functions  ======*/
  402.  
  403.     /*=========================================
  404.     =            Class Definitions            =
  405.     =========================================*/
  406.  
  407.     /**
  408.      * DynamicUserQueue class
  409.      * A class to respawn the
  410.      * DynamicUser and make
  411.      * deletion/creation control
  412.      */
  413.     public class DynamicUserQueue
  414.     {
  415.         // --- Singleton
  416.         private static DynamicUserQueue instance;
  417.  
  418.         private DynamicUserQueue() { }
  419.  
  420.         public static DynamicUserQueue Instace
  421.         {
  422.             get
  423.             {
  424.                 if (instance == null)
  425.                 {
  426.                     instance = new DynamicUserQueue();
  427.                     instance.dynUsers = new List<DynamicUser>();
  428.                 }
  429.                 return instance;
  430.             }
  431.         }
  432.         // --- End of Singleton
  433.  
  434.         // The dynamic users hashset
  435.         private List<DynamicUser> dynUsers;
  436.  
  437.         /**
  438.          * Adds a user to the users list
  439.          */
  440.         private void AddUser(IUser user)
  441.         {
  442.             DynamicUser din = new DynamicUser(user);
  443.             dynUsers.Add(din);
  444.             //Utils.SendMessage("There are " + dynUsers.Count.ToString() + " players...");
  445.         }
  446.  
  447.         /**
  448.          * Adds and removes users based in:
  449.          * Should a new user be added?
  450.          * Is the user dead?
  451.          * Should the user be respawned?
  452.          * Is the game over?
  453.          * Is the user in the room yet?
  454.          */
  455.         public void UpdateUsers(TriggerArgs args)
  456.         {
  457.             if (!GameScriptInterface.Game.IsGameOver)
  458.             {
  459.                 // Add new users and remove old ones
  460.                 this.SearchForNewUsers();
  461.                 this.CleanUsers();
  462.  
  463.                 // Try to respawn the users
  464.                 this.RespawnUsers();
  465.             }
  466.  
  467.  
  468.         }
  469.  
  470.         /**
  471.          * Detects new users and adds them
  472.          */
  473.         private void SearchForNewUsers()
  474.         {
  475.             // Try to add new users
  476.             foreach (IUser usr in GameScriptInterface.Game.GetActiveUsers())
  477.             {
  478.                 // Try to add it to the hashSet
  479.                 if (!Utils.IsUserServerUser(usr))
  480.                 {
  481.                     if (CodUsers.DynamicUserFromIUser(usr) == null)
  482.                     {
  483.                         AddUser(usr);
  484.                     }
  485.                 }
  486.             }
  487.         }
  488.  
  489.         /**
  490.          * Detects users that aren't not added anymore
  491.          */
  492.         private void CleanUsers()
  493.         {
  494.             foreach (DynamicUser dynUsr in dynUsers.ToArray())
  495.             {
  496.                 // Checks if the user is not in the game, if so remove it
  497.                 if (dynUsr.User.IsRemoved)
  498.                 {
  499.                     dynUsr.RemovePlayer(false, true);
  500.                     dynUsers.Remove(dynUsr);
  501.                 }
  502.  
  503.             }
  504.         }
  505.  
  506.         /**
  507.          * Detects if a user must respawn and respawns it
  508.          */
  509.         private void RespawnUsers()
  510.         {
  511.             foreach (DynamicUser dynUsr in dynUsers.ToArray())
  512.             {
  513.                 if (dynUsr.MustRespawn())
  514.                 {
  515.                     dynUsr.Respawn();
  516.                 }
  517.             }
  518.         }
  519.  
  520.         /**
  521.          * Recieves a dead user
  522.          */
  523.         public void UserDied(DynamicUser deadDynUser)
  524.         {
  525.             foreach (DynamicUser dynUsr in dynUsers.ToArray())
  526.             {
  527.                 if (dynUsr.Equals(deadDynUser))
  528.                 {
  529.                     dynUsr.Death(GameScriptInterface.Game.TotalElapsedGameTime);
  530.                 }
  531.             }
  532.             this.GameScore();
  533.         }
  534.  
  535.         public void GameScore()
  536.         {
  537.             foreach (DynamicUser dynUsr in dynUsers.ToArray())
  538.             {
  539.                 try
  540.                 {
  541.                     if (!dynUsr.isDead() && dynUsr.IsInArena)
  542.                     {
  543.                         dynUsr.Score++;
  544.                     }
  545.                 }
  546.                 catch (Exception e)
  547.                 {
  548.                     Utils.SendExceptionMessage(e, "GameScore");
  549.                 }
  550.             }
  551.         }
  552.  
  553.         /**
  554.          * Retrieves a dynamic user by an IUser
  555.          */
  556.         public DynamicUser DynamicUserFromIUser(IUser usr)
  557.         {
  558.             foreach (DynamicUser dynUsr in dynUsers.ToArray())
  559.             {
  560.                 if (dynUsr.User == usr)
  561.                 {
  562.                     return dynUsr;
  563.                 }
  564.             }
  565.             return null;
  566.         }
  567.  
  568.         /**
  569.          * Retrieves a dynamic user by an IPlayer
  570.          */
  571.         public DynamicUser DynamicUserFromIPlayer(IPlayer ply)
  572.         {
  573.             foreach (DynamicUser dynUsr in dynUsers.ToArray())
  574.             {
  575.                 if (dynUsr.Ply == ply)
  576.                 {
  577.                     return dynUsr;
  578.                 }
  579.             }
  580.             return null;
  581.         }
  582.  
  583.         public void DisplayPlayerPoints()
  584.         {
  585.             IObjectText tempTxt = null;
  586.             string tempStr;
  587.             string tempName;
  588.             string plyClass;
  589.             int i = 0;
  590.             foreach (DynamicUser dynUser in dynUsers.ToArray())
  591.             {
  592.                 tempTxt = (IObjectText)GameScriptInterface.Game.GetSingleObjectByCustomId("PlayerPoints" + i);
  593.                 tempName = dynUser.User.Name;
  594.                 plyClass = dynUser.PlyClass;
  595.                 tempStr = tempName + ": " + dynUser.Score.ToString() + " ~ " + (plyClass == "" ? "NaN" : plyClass) + ".";
  596.  
  597.                 if (tempName == "MtMercer")
  598.                 {
  599.                     tempTxt.SetTextColor(new Color((byte)rand.Next(100, 200), (byte)rand.Next(100, 200), (byte)rand.Next(100, 255)));
  600.                 }
  601.                 else
  602.                 {
  603.                     tempTxt.SetTextColor(Color.Yellow);
  604.                 }
  605.  
  606.                 if (tempStr.Length < 40)
  607.                 {
  608.                     tempTxt.SetText(tempStr);
  609.                 }
  610.                 else
  611.                 {
  612.                     tempTxt.SetText(tempStr.Substring(0, 40) + ".");
  613.                 }
  614.                 i += 1;
  615.             }
  616.             for (int j = 7; j > dynUsers.Count - 1; j--)
  617.             {
  618.                 tempTxt = (IObjectText)GameScriptInterface.Game.GetSingleObjectByCustomId("PlayerPoints" + j);
  619.                 tempTxt.SetText("");
  620.             }
  621.         }
  622.  
  623.         public bool IsAnyPlayerInArena()
  624.         {
  625.             foreach (DynamicUser dynUser in dynUsers.ToArray())
  626.             {
  627.                 if (dynUser.IsInArena)
  628.                 {
  629.                     return true;
  630.                 }
  631.             }
  632.             return false;
  633.         }
  634.  
  635.         public void GameOver()
  636.         {
  637.             DynamicUser winner = null;
  638.             foreach (DynamicUser dynUser in dynUsers.ToArray())
  639.             {
  640.                 if (winner == null || dynUser.Score > winner.Score)
  641.                 {
  642.                     winner = dynUser;
  643.                 }
  644.             }
  645.  
  646.             bool draw = false;
  647.             // Search for draws
  648.             foreach (DynamicUser dynUser in dynUsers.ToArray())
  649.             {
  650.                 if (!dynUser.Equals(winner) && dynUser.Score == winner.Score)
  651.                 {
  652.                     draw = true;
  653.                     break;
  654.                 }
  655.             }
  656.  
  657.  
  658.             GameScriptInterface.Game.SetGameOver(draw ? "DRAW" : winner.User.Name + " WINS");
  659.         }
  660.     }
  661.  
  662.     /**
  663.      * DynamicUser class
  664.      * A class to control
  665.      * the player actions
  666.      * during the game
  667.      */
  668.     public class DynamicUser
  669.     {
  670.         // The player from object
  671.         private IPlayer ply;
  672.         public IPlayer Ply
  673.         {
  674.             get
  675.             {
  676.                 return ply;
  677.             }
  678.         }
  679.         // The user of the object
  680.         private IUser user;
  681.         public IUser User
  682.         {
  683.             get
  684.             {
  685.                 return user;
  686.             }
  687.         }
  688.         // If the player is in arena
  689.         private bool isInArena;
  690.         public bool IsInArena
  691.         {
  692.             get
  693.             {
  694.                 return isInArena;
  695.             }
  696.         }
  697.         // The time that the player died
  698.         private float deathTime;
  699.         public float DeathTime
  700.         {
  701.             get
  702.             {
  703.                 return deathTime;
  704.             }
  705.             set
  706.             {
  707.                 deathTime = value;
  708.             }
  709.         }
  710.         // The player score
  711.         private int score;
  712.         public int Score
  713.         {
  714.             get
  715.             {
  716.                 return score;
  717.             }
  718.             set
  719.             {
  720.                 score = value;
  721.             }
  722.         }
  723.         // The player kit class
  724.         private string plyClass;
  725.         public string PlyClass
  726.         {
  727.             get
  728.             {
  729.                 return plyClass;
  730.             }
  731.             set
  732.             {
  733.                 plyClass = value;
  734.             }
  735.         }
  736.         // If the player can use the Life Machines
  737.         private float lifeMachineTime;
  738.         public float LifeMachineTime
  739.         {
  740.             get
  741.             {
  742.                 return lifeMachineTime;
  743.             }
  744.             set
  745.             {
  746.                 lifeMachineTime = value;
  747.             }
  748.         }
  749.         // If the player can use the teleport
  750.         private float teleportTime;
  751.         public float TeleportTime
  752.         {
  753.             get
  754.             {
  755.                 return teleportTime;
  756.             }
  757.             set
  758.             {
  759.                 teleportTime = value;
  760.             }
  761.         }
  762.         // If the player can use the closet
  763.         private float closetAmmoTime;
  764.         public float ClosetAmmoTime
  765.         {
  766.             get
  767.             {
  768.                 return closetAmmoTime;
  769.             }
  770.             set
  771.             {
  772.                 closetAmmoTime = value;
  773.             }
  774.         }
  775.         // Used to persist the game team settings
  776.         private PlayerTeam persistentTeam;
  777.  
  778.         // The constructor
  779.         // User required
  780.         public DynamicUser(IUser user)
  781.         {
  782.             // Assigns the user
  783.             this.user = user;
  784.  
  785.             // Setup the player
  786.             this.ply = user.GetPlayer();
  787.             if (this.ply != null)
  788.             {
  789.                 this.persistentTeam = ply.GetTeam();
  790.                 this.ply.SetTeam(PlayerTeam.Team3);
  791.             }
  792.  
  793.             this.deathTime = GameScriptInterface.Game.TotalElapsedGameTime;
  794.             this.lifeMachineTime = GameScriptInterface.Game.TotalElapsedGameTime;
  795.             this.teleportTime = GameScriptInterface.Game.TotalElapsedGameTime;
  796.             this.plyClass = "";
  797.         }
  798.  
  799.  
  800.         // Died event
  801.         public void Death(float time)
  802.         {
  803.             try
  804.             {
  805.                 this.deathTime = time;
  806.                 //this.ply = null;
  807.             }
  808.             catch (Exception e)
  809.             {
  810.                 Utils.SendExceptionMessage(e, "SetDeathTime");
  811.             }
  812.         }
  813.  
  814.         // Removes the player from the user object
  815.         // killing or gibing it
  816.         public void RemovePlayer(bool kill, bool gib)
  817.         {
  818.             try
  819.             {
  820.                 if (kill)
  821.                 {
  822.                     this.ply.Kill();
  823.                 }
  824.                 else if (gib)
  825.                 {
  826.                     this.ply.Gib();
  827.                 }
  828.             }
  829.             catch (System.Exception e)
  830.             {
  831.                 Utils.SendExceptionMessage(e, "DynamicPlayer.RemovePlayer");
  832.             }
  833.             finally
  834.             {
  835.                 this.ply = null;
  836.             }
  837.         }
  838.  
  839.         //Sends the user to the battle area
  840.         public void SendPlayerToBattleArea()
  841.         {
  842.             try
  843.             {
  844.                 // Gets the area
  845.                 Area area = spawns[rand.Next(0, spawns.Length)].GetAABB();
  846.  
  847.                 // Teleports the player to a random place in the arena
  848.                 ply.SetWorldPosition(new Vector2(rand.Next((int)area.Left, (int)area.Right), (int)area.Top));
  849.  
  850.                 // Independent team
  851.                 ply.SetTeam(this.persistentTeam);
  852.  
  853.                 this.isInArena = true;
  854.             }
  855.             catch (System.Exception e)
  856.             {
  857.                 Utils.SendExceptionMessage(e, "DynamicPlayer.SendPlayerToBattleArea");
  858.             }
  859.         }
  860.  
  861.         // Checks if the user must respawn
  862.         public bool MustRespawn()
  863.         {
  864.             //GameScriptInterface.Game.WriteToConsole(this.deathTime.ToString());
  865.             if (GameScriptInterface.Game.TotalElapsedGameTime - this.deathTime > respawnDelay && !Utils.IsPlayerInTheGame(this.ply))
  866.             {
  867.                 return true;
  868.             }
  869.             else
  870.             {
  871.                 return false;
  872.             }
  873.         }
  874.  
  875.         // Respawn the user
  876.         public void Respawn()
  877.         {
  878.             try
  879.             {
  880.                 // Gets the area
  881.                 Area area = GameScriptInterface.Game.GetSingleObjectByCustomId("KitsSpawn").GetAABB();
  882.                 IPlayer otherPly = GameScriptInterface.Game.CreatePlayer(new Vector2(rand.Next((int)area.Left, (int)area.Right), (int)area.Top));
  883.                 otherPly.SetUser(this.user);
  884.                 otherPly.SetProfile(this.user.GetProfile());
  885.                 if (this.ply != null)
  886.                 {
  887.                     this.ply.Gib();
  888.                 }
  889.                 this.ply = otherPly;
  890.                 this.ply.SetTeam(PlayerTeam.Team3);
  891.  
  892.                 this.isInArena = false;
  893.                 this.plyClass = "";
  894.             }
  895.             catch (Exception e)
  896.             {
  897.                 Utils.SendExceptionMessage(e, "Respawn");
  898.             }
  899.         }
  900.  
  901.         // Checks if the user can use the life machines
  902.         public bool CanUseTheLifeMachine()
  903.         {
  904.             if (GameScriptInterface.Game.TotalElapsedGameTime - this.lifeMachineTime > 10000)
  905.             {
  906.                 return true;
  907.             }
  908.             return false;
  909.         }
  910.  
  911.         // Checks if the user can use the closet ammos
  912.         public bool CanUseTheClosetAmmo()
  913.         {
  914.             if (GameScriptInterface.Game.TotalElapsedGameTime - this.closetAmmoTime > 20000)
  915.             {
  916.                 return true;
  917.             }
  918.             return false;
  919.         }
  920.  
  921.         // Checks if the player can teleport
  922.         public bool CanTeleport()
  923.         {
  924.             if (GameScriptInterface.Game.TotalElapsedGameTime - this.teleportTime > 1000)
  925.             {
  926.                 return true;
  927.             }
  928.             return false;
  929.         }
  930.  
  931.         public override int GetHashCode()
  932.         {
  933.             return user.GetHashCode();
  934.         }
  935.  
  936.         public override bool Equals(object obj)
  937.         {
  938.             if (obj != null && obj.GetType() == this.GetType())
  939.             {
  940.                 DynamicUser otherUsr = obj as DynamicUser;
  941.                 return Object.ReferenceEquals(this.user, otherUsr.User);
  942.             }
  943.             return false;
  944.         }
  945.  
  946.         public void GiveKit(string kit)
  947.         {
  948.             switch (kit)
  949.             {
  950.                 case "Bomber":
  951.                     ply.GiveWeaponItem(WeaponItem.MINES);
  952.                     ply.GiveWeaponItem(WeaponItem.SILENCEDUZI);
  953.                     ply.GiveWeaponItem(WeaponItem.HAMMER);
  954.                     ply.GiveWeaponItem(WeaponItem.SLOWMO_10);
  955.                     break;
  956.                 case "Assaulter":
  957.                     ply.GiveWeaponItem(WeaponItem.ASSAULT);
  958.                     ply.GiveWeaponItem(WeaponItem.SILENCEDUZI);
  959.                     ply.GiveWeaponItem(WeaponItem.C4);
  960.                     ply.GiveWeaponItem(WeaponItem.SLOWMO_5);
  961.                     break;
  962.                 case "Mexican":
  963.                     ply.GiveWeaponItem(WeaponItem.MACHETE);
  964.                     ply.GiveWeaponItem(WeaponItem.MAGNUM);
  965.                     ply.GiveWeaponItem(WeaponItem.SLOWMO_5);
  966.                     break;
  967.                 case "Runner":
  968.                     ply.GiveWeaponItem(WeaponItem.KATANA);
  969.                     ply.GiveWeaponItem(WeaponItem.SAWED_OFF);
  970.                     ply.GiveWeaponItem(WeaponItem.REVOLVER);
  971.                     ply.GiveWeaponItem(WeaponItem.SLOWMO_5);
  972.                     break;
  973.                 case "Marksman":
  974.                     ply.GiveWeaponItem(WeaponItem.KNIFE);
  975.                     ply.GiveWeaponItem(WeaponItem.SNIPER);
  976.                     ply.GiveWeaponItem(WeaponItem.PISTOL);
  977.                     ply.GiveWeaponItem(WeaponItem.SLOWMO_10);
  978.                     break;
  979.                 case "Technician":
  980.                     ply.GiveWeaponItem(WeaponItem.PIPE);
  981.                     ply.GiveWeaponItem(WeaponItem.SILENCEDPISTOL);
  982.                     ply.GiveWeaponItem(WeaponItem.SHOTGUN);
  983.                     ply.GiveWeaponItem(WeaponItem.GRENADES);
  984.                     ply.GiveWeaponItem(WeaponItem.SLOWMO_10);
  985.                     break;
  986.                 case "Revolutionist":
  987.                     ply.GiveWeaponItem(WeaponItem.AXE);
  988.                     ply.GiveWeaponItem(WeaponItem.SUB_MACHINEGUN);
  989.                     ply.GiveWeaponItem(WeaponItem.PISTOL);
  990.                     ply.GiveWeaponItem(WeaponItem.SLOWMO_5);
  991.                     break;
  992.                 case "The Last War":
  993.                     ply.GiveWeaponItem(WeaponItem.BAT);
  994.                     ply.GiveWeaponItem(WeaponItem.REVOLVER);
  995.                     ply.GiveWeaponItem(WeaponItem.CARBINE);
  996.                     ply.GiveWeaponItem(WeaponItem.GRENADES);
  997.                     ply.GiveWeaponItem(WeaponItem.SLOWMO_5);
  998.                     break;
  999.                 case "Guetto":
  1000.                     ply.GiveWeaponItem(WeaponItem.CHAIN);
  1001.                     ply.GiveWeaponItem(WeaponItem.UZI);
  1002.                     ply.GiveWeaponItem(WeaponItem.SHOTGUN);
  1003.                     ply.GiveWeaponItem(WeaponItem.SLOWMO_5);
  1004.                     break;
  1005.             }
  1006.             this.PlyClass = kit;
  1007.         }
  1008.  
  1009.         public bool isDead()
  1010.         {
  1011.             return this.ply == null || this.ply.IsDead;
  1012.         }
  1013.     }
  1014.  
  1015.     /**
  1016.      * Utils class
  1017.      * The functions are used
  1018.      * to automate some
  1019.      * actions in the script.
  1020.      */
  1021.     public static class Utils
  1022.     {
  1023.         /**
  1024.          * Used to set a timer trigger
  1025.          */
  1026.         public static IObjectTimerTrigger SetTimer(string method, string customId, int repeatCount, int interval)
  1027.         {
  1028.             IObjectTimerTrigger trigger = (IObjectTimerTrigger)GameScriptInterface.Game.CreateObject("TimerTrigger");
  1029.             trigger.CustomId = customId;
  1030.             trigger.SetScriptMethod(method);
  1031.             trigger.SetIntervalTime(interval);
  1032.             trigger.SetRepeatCount(repeatCount);
  1033.             trigger.SetWorldPosition(new Vector2(0, -100));
  1034.             trigger.Trigger();
  1035.             return trigger;
  1036.         }
  1037.  
  1038.         /**
  1039.          * Sends a custom message to the chat
  1040.          */
  1041.         public static void SendMessage(string msg)
  1042.         {
  1043.             GameScriptInterface.Game.RunCommand("/MSG " + msg);
  1044.         }
  1045.  
  1046.         /**
  1047.          * Sends a exception message to the console
  1048.          */
  1049.         public static void SendExceptionMessage(System.Exception e, string at)
  1050.         {
  1051.             //GameScriptInterface.Game.WriteToConsole(scriptName + " EXCEPTION: " + e + " AT: " + at);
  1052.             GameScriptInterface.Game.WriteToConsole(scriptName + " EXCEPTION: " + "" + " AT: " + at);
  1053.         }
  1054.  
  1055.         /**
  1056.          * Gets a DynamicUser object with an IPlayer object
  1057.          */
  1058.         public static DynamicUser GetUserByIPlayer(IPlayer ply)
  1059.         {
  1060.             foreach (DynamicUser usr in users.ToArray())
  1061.             {
  1062.                 if (ply.Equals(usr.User.GetPlayer()))
  1063.                 {
  1064.                     return usr;
  1065.                 }
  1066.             }
  1067.             return null;
  1068.         }
  1069.  
  1070.         /**
  1071.         * Gets a DynamicUser object with an IUser object
  1072.         */
  1073.         public static DynamicUser GetUserByIUser(IUser ply)
  1074.         {
  1075.             foreach (DynamicUser usr in users.ToArray())
  1076.             {
  1077.                 if (ply.Equals(usr.User))
  1078.                 {
  1079.                     return usr;
  1080.                 }
  1081.             }
  1082.             return null;
  1083.         }
  1084.  
  1085.         /**
  1086.          * Removes a user to user list
  1087.          * If it isn't in the map
  1088.          * Can be forced
  1089.          */
  1090.         public static void RemoveUser(IPlayer ply, bool force)
  1091.         {
  1092.             if (ply.GetUser().IsRemoved || force)
  1093.             {
  1094.                 users.Remove(Utils.GetUserByIPlayer(ply));
  1095.             }
  1096.         }
  1097.  
  1098.         /**
  1099.          * Checks if a player is in the game (the tile)
  1100.          */
  1101.         public static bool IsPlayerInTheGame(IPlayer ply)
  1102.         {
  1103.             if (ply == null)
  1104.             {
  1105.                 return false;
  1106.             }
  1107.             foreach (IPlayer other in GameScriptInterface.Game.GetPlayers())
  1108.             {
  1109.                 if (ply == other && !other.IsDead)
  1110.                 {
  1111.                     return true;
  1112.                 }
  1113.             }
  1114.             return false;
  1115.         }
  1116.  
  1117.         /**
  1118.          * Sends a work in progress
  1119.          * message for something that isn't
  1120.          * ready in the map
  1121.          */
  1122.         public static void SendWorkInProgressMessage(Vector2 whereToSend)
  1123.         {
  1124.             GameScriptInterface.Game.PlayEffect("CFTXT", whereToSend, "Beta version!\nMtMercer is working...");
  1125.         }
  1126.  
  1127.         /**
  1128.          * Generates a clicable object
  1129.          * runs the specific method when triggered
  1130.          */
  1131.  
  1132.         public static IObject CreateClickableObject(string objName, Vector2 location, string method, bool destroyTriggers)
  1133.         {
  1134.             // Creates the object
  1135.             IObject obj = (IObject)GameScriptInterface.Game.CreateObject(objName, location);
  1136.  
  1137.             // Creates a weldjoint
  1138.             IObjectWeldJoint welder = (IObjectWeldJoint)GameScriptInterface.Game.CreateObject("WeldJoint", location);
  1139.             welder.SetBodyType(BodyType.Dynamic);
  1140.  
  1141.             // The button that triggers the method
  1142.             IObjectActivateTrigger invButton = (IObjectActivateTrigger)GameScriptInterface.Game.CreateObject("ActivateTrigger", location);
  1143.             invButton.SetBodyType(BodyType.Dynamic);
  1144.             // What method will it run when trigered?
  1145.             invButton.SetScriptMethod(method);
  1146.  
  1147.             // Joins everyone
  1148.             welder.AddTargetObject(obj);
  1149.             welder.AddTargetObject(invButton);
  1150.  
  1151.             // Used to higlight the obj
  1152.             invButton.SetHighlightObject(obj);
  1153.  
  1154.             // Used to destroy the "clickable family"
  1155.             if (destroyTriggers)
  1156.             {
  1157.                 // Destroy the other objects, like the trigger
  1158.                 IObjectDestroyTargets destroyer = (IObjectDestroyTargets)GameScriptInterface.Game.CreateObject("DestroyTargets", location);
  1159.                 destroyer.SetBodyType(BodyType.Dynamic);
  1160.                 welder.AddTargetObject(destroyer);
  1161.                 destroyer.AddTriggerDestroyObject(obj);
  1162.                 destroyer.AddObjectToDestroy(welder);
  1163.                 destroyer.AddObjectToDestroy(invButton);
  1164.                 destroyer.AddObjectToDestroy(destroyer);
  1165.             }
  1166.  
  1167.             return obj;
  1168.         }
  1169.  
  1170.         /**
  1171.         * Sends a message based in
  1172.         * a triggers args
  1173.         */
  1174.         public static void SendMessageFromTriggerArgs(TriggerArgs args, string message)
  1175.         {
  1176.             IObject caller = args.Caller as IObject;
  1177.             GameScriptInterface.Game.PlayEffect("CFTXT", caller.GetWorldPosition(), message);
  1178.         }
  1179.  
  1180.         /**
  1181.          * Checks if a user is a server user
  1182.          */
  1183.         public static bool IsUserServerUser(IUser usr)
  1184.         {
  1185.             return "SERVER".Equals(usr.Name) && usr.IsHost && usr.IsSpectator;
  1186.         }
  1187.     }
  1188.  
  1189.     /*=====  End of Class Definitions  ======*/
  1190.  
  1191.     //ply.GiveWeaponItem(WeaponItem.ASSAULT);
  1192.     //ply.GiveWeaponItem(WeaponItem.UZI);
  1193.     //ply.GiveWeaponItem(WeaponItem.SLOWMO_5);
  1194.     //
  1195.     //ply.GiveWeaponItem(WeaponItem.MACHETE);
  1196.     //ply.GiveWeaponItem(WeaponItem.MAGNUM);
  1197.     //ply.GiveWeaponItem(WeaponItem.SLOWMO_5);
  1198.     //
  1199.     //ply.GiveWeaponItem(WeaponItem.KATANA);
  1200.     //ply.GiveWeaponItem(WeaponItem.SAWED_OFF);
  1201.     //ply.GiveWeaponItem(WeaponItem.REVOLVER);
  1202.     //ply.GiveWeaponItem(WeaponItem.SLOWMO_5);
  1203.     //
  1204.     //ply.GiveWeaponItem(WeaponItem.SNIPER);
  1205.     //ply.GiveWeaponItem(WeaponItem.PISTOL);
  1206.     //ply.GiveWeaponItem(WeaponItem.SLOWMO_10);
  1207.     //
  1208.     //ply.GiveWeaponItem(WeaponItem.PIPE);
  1209.     //ply.GiveWeaponItem(WeaponItem.REVOLVER);
  1210.     //ply.GiveWeaponItem(WeaponItem.SHOTGUN);
  1211.     //ply.GiveWeaponItem(WeaponItem.GRENADES);
  1212.     //ply.GiveWeaponItem(WeaponItem.SLOWMO_10);
  1213.     //
  1214.     //ply.GiveWeaponItem(WeaponItem.AXE);
  1215.     //ply.GiveWeaponItem(WeaponItem.SUB_MACHINEGUN);
  1216.     //ply.GiveWeaponItem(WeaponItem.PISTOL);
  1217.     //ply.GiveWeaponItem(WeaponItem.SLOWMO_5);
  1218.     //
  1219.     //ply.GiveWeaponItem(WeaponItem.BAT);
  1220.     //ply.GiveWeaponItem(WeaponItem.CARBINE);
  1221.     //ply.GiveWeaponItem(WeaponItem.GRENADES);
  1222.     //ply.GiveWeaponItem(WeaponItem.SLOWMO_5);
  1223.  
  1224.     //-----------------------------------
  1225. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement