Advertisement
NewbProgramming

Rivershell (C#)

Jul 23rd, 2017
213
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 27.29 KB | None | 0 0
  1. using System;
  2. using System.Linq;
  3. using SampSharp.GameMode;
  4. using SampSharp.GameMode.World;
  5. using SampSharp.GameMode.Controllers;
  6. using SampSharp.GameMode.SAMP;
  7. using SampSharp.GameMode.Events;
  8. using SampSharp.GameMode.Definitions;
  9.  
  10. namespace Rivershell
  11. {
  12.     public class GameMode : BaseMode
  13.     {
  14.         readonly Color OBJECTIVE_COLOR = Color.FromInteger(0xE2C063FF, ColorFormat.RGBA);
  15.         readonly Color TEAM_GREEN_COLOR = Color.FromInteger(0x77CC77FF, ColorFormat.RGBA);
  16.         readonly Color TEAM_BLUE_COLOR = Color.FromInteger(0x7777DDFF, ColorFormat.RGBA);
  17.  
  18.         readonly int RESPAWN_DELAY = 20;
  19.         readonly int SCORE_TO_WIN = 5;
  20.  
  21.         bool objectiveReached = false;
  22.  
  23.         Player greenPlayer = null;
  24.         Player bluePlayer = null;
  25.  
  26.         BaseVehicle greenVehicle = null;
  27.         BaseVehicle blueVehicle = null;
  28.  
  29.         int greenScore = 0;
  30.         int blueScore = 0;
  31.  
  32.         enum Team
  33.         {
  34.             Green,
  35.             Blue
  36.         }
  37.  
  38.         void SetPlayerToTeamColour(Player player)
  39.         {
  40.             if(player.Team == (int) Team.Green)
  41.             {
  42.                 player.Color = TEAM_GREEN_COLOR;
  43.             }
  44.             if(player.Team == (int) Team.Blue)
  45.             {
  46.                 player.Color = TEAM_BLUE_COLOR;
  47.             }
  48.         }
  49.  
  50.         void SetupPlayerForClassSelection(Player player)
  51.         {
  52.             // Set the player's orientation when they're selecting a class.
  53.             player.Position = new Vector3(1984.4445, 157.9501, 55.9384);
  54.             player.CameraPosition = new Vector3(1984.4445, 160.9501, 55.9384);
  55.             player.SetCameraLookAt(new Vector3(1984.4445, 157.9501, 55.9384));
  56.             player.Angle = 0.0f;
  57.         }
  58.  
  59.         void SetPlayerTeamFromClass(Player player, int classId)
  60.         {
  61.             // Set their team number based on the class they selected.
  62.             if (classId == 0 || classId == 1)
  63.             {
  64.                 player.Team = (int) Team.Green;
  65.             }
  66.             if (classId == 2 || classId == 3)
  67.             {
  68.                 player.Team = (int) Team.Blue;
  69.             }
  70.         }
  71.  
  72.         void ExitTheGameMode()
  73.         {
  74.             foreach(Player player in BasePlayer.GetAll<Player>())
  75.             {
  76.                 player.PlaySound(1186); // Stops the music
  77.             }
  78.  
  79.             // Console.WriteLine("Exiting Game Mode");
  80.  
  81.             Exit();
  82.         }
  83.  
  84.         protected override void OnPlayerStateChanged(BasePlayer sender, StateEventArgs e)
  85.         {
  86.             Player player = sender as Player;
  87.  
  88.             if(e.NewState == PlayerState.Driving)
  89.             {
  90.                 BaseVehicle vehicle = player.Vehicle;
  91.  
  92.                 if(player.Team == (int) Team.Green && vehicle == greenVehicle)
  93.                 {
  94.                     player.Color = OBJECTIVE_COLOR;
  95.                     player.GameText("~w~Take the ~y~boat ~w~back to the ~r~spawn!", 3000, 5);
  96.  
  97.                     player.SetCheckpoint(new Vector3(2135.7368, -179.8811, -0.5323), 10.0f);
  98.  
  99.                     greenPlayer = player;
  100.                 }
  101.                 if(player.Team == (int) Team.Blue && vehicle == blueVehicle)
  102.                 {
  103.                     player.Color = OBJECTIVE_COLOR;
  104.                     player.GameText("~w~Take the ~y~boat ~w~back to the ~r~spawn!", 3000, 5);
  105.  
  106.                     player.SetCheckpoint(new Vector3(2329.4226, 532.7426, 0.5862), 10.0f);
  107.  
  108.                     bluePlayer = player;
  109.                 }
  110.             }
  111.             if (e.NewState == PlayerState.OnFoot)
  112.             {
  113.                 if (player == greenPlayer)
  114.                 {
  115.                     SetPlayerToTeamColour(player);
  116.                     player.DisableCheckpoint();
  117.  
  118.                     greenPlayer = null;
  119.                 }
  120.  
  121.                 if (player == bluePlayer)
  122.                 {
  123.                     SetPlayerToTeamColour(player);
  124.                     player.DisableCheckpoint();
  125.  
  126.                     bluePlayer = null;
  127.                 }
  128.             }
  129.  
  130.             base.OnPlayerStateChanged(player, e);
  131.         }
  132.  
  133.         protected override void OnInitialized(EventArgs e)
  134.         {
  135.             Console.WriteLine();
  136.             Console.WriteLine("----------------------------------");
  137.             Console.WriteLine("  Rivershell by Kye 2006-2013");
  138.             Console.WriteLine("----------------------------------");
  139.             Console.WriteLine();
  140.  
  141.             SetGameModeText("Rivershell");
  142.  
  143.             ShowPlayerMarkers(PlayerMarkersMode.Off);
  144.             ShowNameTags(true);
  145.             UsePlayerPedAnimations();
  146.             EnableVehicleFriendlyFire();
  147.             SetNameTagDrawDistance(110.0f);
  148.             DisableInteriorEnterExits();
  149.             Server.SetWorldTime(17);
  150.             Server.SetWeather(11);
  151.  
  152.             // Green classes
  153.             AddPlayerClass(162, new Vector3(2117.0129, -224.4389, 8.15), 0.0f, (Weapon)31, 100, (Weapon)29, 200, (Weapon)34, 10);
  154.             AddPlayerClass(157, new Vector3(2148.6606, -224.3336, 8.15), 347.1396f, (Weapon)31, 100, (Weapon)29, 200, (Weapon)34, 10);
  155.  
  156.             // Blue classes
  157.             AddPlayerClass(154, new Vector3(2352.9873, 580.3051, 7.7813), 178.1424f, (Weapon)31, 100, (Weapon)29, 200, (Weapon)34, 10);
  158.             AddPlayerClass(138, new Vector3(2281.1504, 567.6248, 7.7813), 163.7289f, (Weapon)31, 100, (Weapon)29, 200, (Weapon)34, 10);
  159.  
  160.             // Objective vehicles
  161.             blueVehicle = CreateVehicle(453, 2184.7156, -188.5401, -0.0239, 0.0000, 114, 1, 100); // gr reefer
  162.             greenVehicle = CreateVehicle(453, 2380.0542, 535.2582, -0.0272, 178.4999, 79, 7, 100); // bl reefer
  163.  
  164.             // Green Dhingys
  165.             CreateVehicle(473, 2096.0833, -168.7771, 0.3528, 4.5000, 114, 1, 100);
  166.             CreateVehicle(473, 2103.2510, -168.7598, 0.3528, 3.1800, 114, 1, 100);
  167.             CreateVehicle(473, 2099.4966, -168.8216, 0.3528, 2.8200, 114, 1, 100);
  168.             CreateVehicle(473, 2107.1143, -168.7798, 0.3528, 3.1800, 114, 1, 100);
  169.             CreateVehicle(473, 2111.0674, -168.7609, 0.3528, 3.1800, 114, 1, 100);
  170.             CreateVehicle(473, 2114.8933, -168.7898, 0.3528, 3.1800, 114, 1, 100);
  171.             CreateVehicle(473, 2167.2217, -169.0570, 0.3528, 3.1800, 114, 1, 100);
  172.             CreateVehicle(473, 2170.4294, -168.9724, 0.3528, 3.1800, 114, 1, 100);
  173.             CreateVehicle(473, 2173.7952, -168.9217, 0.3528, 3.1800, 114, 1, 100);
  174.             CreateVehicle(473, 2177.0386, -168.9767, 0.3528, 3.1800, 114, 1, 100);
  175.             CreateVehicle(473, 2161.5786, -191.9538, 0.3528, 89.1000, 114, 1, 100);
  176.             CreateVehicle(473, 2161.6394, -187.2925, 0.3528, 89.1000, 114, 1, 100);
  177.             CreateVehicle(473, 2161.7610, -183.0225, 0.3528, 89.1000, 114, 1, 100);
  178.             CreateVehicle(473, 2162.0283, -178.5106, 0.3528, 89.1000, 114, 1, 100);
  179.             // Green Mavericks
  180.             CreateVehicle(487, 2088.7905, -227.9593, 8.3662, 0.0000, 114, 1, 100);
  181.             CreateVehicle(487, 2204.5991, -225.3703, 8.2400, 0.0000, 114, 1, 100);
  182.  
  183.             // Blue Dhingys
  184.             CreateVehicle(473, 2370.3198, 518.3151, 0.1240, 180.3600, 79, 7, 100);
  185.             CreateVehicle(473, 2362.6484, 518.3978, 0.0598, 180.3600, 79, 7, 100);
  186.             CreateVehicle(473, 2358.6550, 518.2167, 0.2730, 180.3600, 79, 7, 100);
  187.             CreateVehicle(473, 2366.5544, 518.2680, 0.1080, 180.3600, 79, 7, 100);
  188.             CreateVehicle(473, 2354.6321, 518.1960, 0.3597, 180.3600, 79, 7, 100);
  189.             CreateVehicle(473, 2350.7449, 518.1929, 0.3597, 180.3600, 79, 7, 100);
  190.             CreateVehicle(473, 2298.8977, 518.4470, 0.3597, 180.3600, 79, 7, 100);
  191.             CreateVehicle(473, 2295.6118, 518.3963, 0.3597, 180.3600, 79, 7, 100);
  192.             CreateVehicle(473, 2292.3237, 518.4249, 0.3597, 180.3600, 79, 7, 100);
  193.             CreateVehicle(473, 2289.0901, 518.4363, 0.3597, 180.3600, 79, 7, 100);
  194.             CreateVehicle(473, 2304.8232, 539.7859, 0.3597, 270.5998, 79, 7, 100);
  195.             CreateVehicle(473, 2304.6936, 535.0454, 0.3597, 270.5998, 79, 7, 100);
  196.             CreateVehicle(473, 2304.8245, 530.3308, 0.3597, 270.5998, 79, 7, 100);
  197.             CreateVehicle(473, 2304.8142, 525.7471, 0.3597, 270.5998, 79, 7, 100);
  198.  
  199.             // Blue Mavericks
  200.             CreateVehicle(487, 2260.2637, 578.5220, 8.1223, 182.3401, 79, 7, 100);
  201.             CreateVehicle(487, 2379.9792, 580.0323, 8.0178, 177.9601, 79, 7, 100);
  202.  
  203.             // Green Base Section
  204.             CreateMapObject(9090, 2148.64, -222.88, -20.60, 0.00, 0.00, 179.70);
  205.             // Green resupply hut
  206.             CreateMapObject(12991, 2140.83, -235.13, 7.13, 0.00, 0.00, -89.94);
  207.  
  208.             // Blue Base Section
  209.             CreateMapObject(9090, 2317.09, 572.27, -20.97, 0.00, 0.00, 0.00);
  210.             // Blue resupply hut
  211.             CreateMapObject(12991, 2318.73, 590.96, 6.75, 0.00, 0.00, 89.88);
  212.  
  213.             // General mapping
  214.             CreateMapObject(12991, 2140.83, -235.13, 7.13, 0.00, 0.00, -89.94);
  215.             CreateMapObject(19300, 2137.33, -237.17, 46.61, 0.00, 0.00, 180.00);
  216.             CreateMapObject(12991, 2318.73, 590.96, 6.75, 0.00, 0.00, 89.88);
  217.             CreateMapObject(19300, 2325.41, 587.93, 47.37, 0.00, 0.00, 180.00);
  218.             CreateMapObject(12991, 2140.83, -235.13, 7.13, 0.00, 0.00, -89.94);
  219.             CreateMapObject(12991, 2318.73, 590.96, 6.75, 0.00, 0.00, 89.88);
  220.             CreateMapObject(12991, 2140.83, -235.13, 7.13, 0.00, 0.00, -89.94);
  221.             CreateMapObject(12991, 2318.73, 590.96, 6.75, 0.00, 0.00, 89.88);
  222.             CreateMapObject(18228, 1887.93, -59.78, -2.14, 0.00, 0.00, 20.34);
  223.             CreateMapObject(17031, 1990.19, 541.37, -22.32, 0.00, 0.00, 0.00);
  224.             CreateMapObject(18227, 2000.82, 494.15, -7.53, 11.70, -25.74, 154.38);
  225.             CreateMapObject(17031, 1992.35, 539.80, -2.97, 9.12, 30.66, 0.00);
  226.             CreateMapObject(17031, 1991.88, 483.77, -0.66, -2.94, -5.22, 12.78);
  227.             CreateMapObject(17029, 2070.57, -235.87, -6.05, -7.20, 4.08, 114.30);
  228.             CreateMapObject(17029, 2056.50, -228.77, -19.67, 14.16, 19.68, 106.56);
  229.             CreateMapObject(17029, 2074.00, -205.33, -18.60, 16.02, 60.60, 118.86);
  230.             CreateMapObject(17029, 2230.39, -242.59, -11.41, 5.94, 7.56, 471.24);
  231.             CreateMapObject(17029, 2252.53, -213.17, -20.81, 18.90, -6.30, -202.38);
  232.             CreateMapObject(17029, 2233.04, -234.08, -19.00, 21.84, -8.88, -252.06);
  233.             CreateMapObject(17027, 2235.05, -201.49, -11.90, -11.94, -4.08, 136.32);
  234.             CreateMapObject(17029, 2226.11, -237.07, -2.45, 8.46, 2.10, 471.24);
  235.             CreateMapObject(4368, 2433.79, 446.26, 4.67, -8.04, -9.30, 61.02);
  236.             CreateMapObject(4368, 2031.23, 489.92, -13.20, -8.04, -9.30, -108.18);
  237.             CreateMapObject(17031, 2458.36, 551.10, -6.95, 0.00, 0.00, 0.00);
  238.             CreateMapObject(17031, 2465.37, 511.35, -7.70, 0.00, 0.00, 0.00);
  239.             CreateMapObject(17031, 2474.80, 457.71, -5.17, 0.00, 0.00, 172.74);
  240.             CreateMapObject(17031, 2466.03, 426.28, -5.17, 0.00, 0.00, 0.00);
  241.             CreateMapObject(791, 2310.45, -229.38, 7.41, 0.00, 0.00, 0.00);
  242.             CreateMapObject(791, 2294.00, -180.15, 7.41, 0.00, 0.00, 60.90);
  243.             CreateMapObject(791, 2017.50, -305.30, 7.29, 0.00, 0.00, 60.90);
  244.             CreateMapObject(791, 2106.45, -279.86, 20.05, 0.00, 0.00, 60.90);
  245.             CreateMapObject(706, 2159.13, -263.71, 19.22, 356.86, 0.00, -17.18);
  246.             CreateMapObject(706, 2055.75, -291.53, 13.98, 356.86, 0.00, -66.50);
  247.             CreateMapObject(791, 1932.65, -315.88, 6.77, 0.00, 0.00, -35.76);
  248.             CreateMapObject(790, 2429.40, 575.79, 10.42, 0.00, 0.00, 3.14);
  249.             CreateMapObject(790, 2403.40, 581.56, 10.42, 0.00, 0.00, 29.48);
  250.             CreateMapObject(791, 2083.44, 365.48, 13.19, 356.86, 0.00, -1.95);
  251.             CreateMapObject(791, 2040.15, 406.02, 13.33, 356.86, 0.00, -1.95);
  252.             CreateMapObject(791, 1995.36, 588.10, 7.50, 356.86, 0.00, -1.95);
  253.             CreateMapObject(791, 2126.11, 595.15, 5.99, 0.00, 0.00, -35.82);
  254.             CreateMapObject(791, 2188.35, 588.90, 6.04, 0.00, 0.00, 0.00);
  255.             CreateMapObject(791, 2068.56, 595.58, 5.99, 0.00, 0.00, 52.62);
  256.             CreateMapObject(698, 2385.32, 606.16, 9.79, 0.00, 0.00, 34.62);
  257.             CreateMapObject(698, 2309.29, 606.92, 9.79, 0.00, 0.00, -54.54);
  258.             CreateMapObject(790, 2347.14, 619.77, 9.94, 0.00, 0.00, 3.14);
  259.             CreateMapObject(698, 2255.28, 606.94, 9.79, 0.00, 0.00, -92.76);
  260.             CreateMapObject(4298, 2121.37, 544.12, -5.74, -10.86, 6.66, 3.90);
  261.             CreateMapObject(4368, 2273.18, 475.02, -15.30, 4.80, 8.10, 266.34);
  262.             CreateMapObject(18227, 2232.38, 451.61, -30.71, -18.54, -6.06, 154.38);
  263.             CreateMapObject(17031, 2228.15, 518.87, -16.51, 13.14, -1.32, -20.10);
  264.             CreateMapObject(17031, 2230.42, 558.52, -18.38, -2.94, -5.22, 12.78);
  265.             CreateMapObject(17031, 2228.97, 573.62, 5.17, 17.94, -15.60, -4.08);
  266.             CreateMapObject(17029, 2116.67, -87.71, -2.31, 5.94, 7.56, 215.22);
  267.             CreateMapObject(17029, 2078.66, -83.87, -27.30, 13.02, -53.94, -0.30);
  268.             CreateMapObject(17029, 2044.80, -36.91, -9.26, -13.74, 27.90, 293.76);
  269.             CreateMapObject(17029, 2242.41, 426.16, -15.43, -21.54, 22.26, 154.80);
  270.             CreateMapObject(17029, 2220.06, 450.07, -34.78, -1.32, 10.20, -45.84);
  271.             CreateMapObject(17029, 2252.49, 439.08, -19.47, -41.40, 20.16, 331.86);
  272.             CreateMapObject(17031, 2241.41, 431.93, -5.62, -2.22, -4.80, 53.64);
  273.             CreateMapObject(17029, 2141.10, -81.30, -2.41, 5.94, 7.56, 39.54);
  274.             CreateMapObject(17031, 2277.07, 399.31, -1.65, -2.22, -4.80, -121.74);
  275.             CreateMapObject(17026, 2072.75, -224.40, -5.25, 0.00, 0.00, -41.22);
  276.  
  277.             // Ramps
  278.             CreateMapObject(1632, 2131.97, 110.24, 0.00, 0.00, 0.00, 153.72);
  279.             CreateMapObject(1632, 2124.59, 113.69, 0.00, 0.00, 0.00, 157.56);
  280.             CreateMapObject(1632, 2116.31, 116.44, 0.00, 0.00, 0.00, 160.08);
  281.             CreateMapObject(1632, 2113.22, 108.48, 0.00, 0.00, 0.00, 340.20);
  282.             CreateMapObject(1632, 2121.21, 105.21, 0.00, 0.00, 0.00, 340.20);
  283.             CreateMapObject(1632, 2127.84, 102.06, 0.00, 0.00, 0.00, 334.68);
  284.             CreateMapObject(1632, 2090.09, 40.90, 0.00, 0.00, 0.00, 348.36);
  285.             CreateMapObject(1632, 2098.73, 39.12, 0.00, 0.00, 0.00, 348.36);
  286.             CreateMapObject(1632, 2107.17, 37.94, 0.00, 0.00, 0.00, 348.36);
  287.             CreateMapObject(1632, 2115.88, 36.47, 0.00, 0.00, 0.00, 348.36);
  288.             CreateMapObject(1632, 2117.46, 45.86, 0.00, 0.00, 0.00, 529.20);
  289.             CreateMapObject(1632, 2108.98, 46.95, 0.00, 0.00, 0.00, 529.20);
  290.             CreateMapObject(1632, 2100.42, 48.11, 0.00, 0.00, 0.00, 526.68);
  291.             CreateMapObject(1632, 2091.63, 50.02, 0.00, 0.00, 0.00, 526.80);
  292.  
  293.             base.OnInitialized(e);
  294.         }
  295.  
  296.         protected override void OnPlayerConnected(BasePlayer sender, EventArgs e)
  297.         {
  298.             Player player = sender as Player;
  299.  
  300.             player.Color = Color.FromInteger(0x888888FF, ColorFormat.RGBA);
  301.             player.GameText("~r~SA-MP: ~w~Rivershell", 2000, 5);
  302.             RemoveNeededBuildingsForPlayer(player);
  303.  
  304.             base.OnPlayerConnected(player, e);
  305.         }
  306.  
  307.         protected override void OnPlayerRequestClass(BasePlayer sender, RequestClassEventArgs e)
  308.         {
  309.             Player player = sender as Player;
  310.  
  311.             SetupPlayerForClassSelection(player);
  312.             SetPlayerTeamFromClass(player, e.ClassId);
  313.  
  314.             if(player.Team == (int) Team.Green)
  315.             {
  316.                 player.GameText("~g~GREEN ~w~TEAM", 1000, 5);
  317.             }
  318.             if(player.Team == (int) Team.Blue)
  319.             {
  320.                 player.GameText("~b~BLUE ~w~TEAM", 1000, 5);
  321.             }
  322.  
  323.             base.OnPlayerRequestClass(player, e);
  324.         }
  325.  
  326.         protected override void OnPlayerSpawned(BasePlayer sender, SpawnEventArgs e)
  327.         {
  328.             Player player = sender as Player;
  329.  
  330.             if((DateTime.Now - player.lastDeathTick) < TimeSpan.FromSeconds(RESPAWN_DELAY))
  331.             {
  332.                 player.SendClientMessage(Color.FromInteger(0xFFAAEEEE, ColorFormat.RGBA), "Waiting to respawn....");
  333.                 player.ToggleSpectating(true);
  334.  
  335.                 Player killer = player.lastKiller;
  336.  
  337.                 if(killer != null &&
  338.                     (killer.State == PlayerState.OnFoot ||
  339.                     killer.State == PlayerState.Driving ||
  340.                     killer.State == PlayerState.Passenger))
  341.                 {
  342.                     player.SpectatePlayer(killer);
  343.                 }
  344.  
  345.                 base.OnPlayerSpawned(player, e);
  346.                 return;
  347.             }
  348.  
  349.             SetPlayerToTeamColour(player);
  350.  
  351.             if(player.Team == (int) Team.Green)
  352.             {
  353.                 player.GameText( "Defend the ~g~GREEN ~w~team's ~y~Reefer~n~~w~Capture the ~b~BLUE ~w~team's ~y~Reefer", 6000, 5);
  354.             }
  355.             if(player.Team == (int) Team.Blue)
  356.             {
  357.                 player.GameText( "Defend the ~b~BLUE ~w~team's ~y~Reefer~n~~w~Capture the ~g~GREEN ~w~team's ~y~Reefer", 6000, 5);
  358.             }
  359.  
  360.             player.Health = 100.0f;
  361.             player.Armour = 100.0f;
  362.             player.SetWorldBounds(2500.0f, 1850.0f, 631.2963f, -454.9898f);
  363.  
  364.             base.OnPlayerSpawned(player, e);
  365.         }
  366.  
  367.         protected override void OnPlayerEnterCheckpoint(BasePlayer sender, EventArgs e)
  368.         {
  369.             Player player = sender as Player;
  370.  
  371.             if(objectiveReached == true)
  372.             {
  373.                 base.OnPlayerEnterCheckpoint(player, e);
  374.                 return;
  375.             }
  376.  
  377.             BaseVehicle vehicle = player.Vehicle;
  378.  
  379.             if(vehicle == greenVehicle && player.Team == (int) Team.Green)
  380.             {   // Green OBJECTIVE REACHED.
  381.                 greenScore++;
  382.                 player.Score += 5;
  383.  
  384.                 if (greenScore == SCORE_TO_WIN)
  385.                 {
  386.                     foreach(Player reciever in BasePlayer.GetAll<Player>())
  387.                     {
  388.                         reciever.GameText("~g~GREEN ~w~team wins!", 3000, 5);
  389.                         reciever.PlaySound(1185);
  390.                     }
  391.  
  392.                     objectiveReached = true;
  393.                     new Timer(TimeSpan.FromSeconds(6), false).Tick += (s, ee) => ExitTheGameMode();
  394.                 }
  395.                 else
  396.                 {
  397.                     foreach (Player reciever in BasePlayer.GetAll<Player>())
  398.                     {
  399.                         reciever.GameText("~g~GREEN ~w~team captured the ~y~boat!", 3000, 5);
  400.                     }
  401.                    
  402.                     greenVehicle.Respawn();
  403.                 }
  404.                 return;
  405.             }
  406.             if(vehicle == blueVehicle && player.Team == (int) Team.Blue)
  407.             {   // Blue OBJECTIVE REACHED.
  408.                 blueScore++;
  409.                 player.Score += 5;
  410.  
  411.                 if (blueScore == SCORE_TO_WIN)
  412.                 {
  413.                     foreach (Player reciever in BasePlayer.GetAll<Player>())
  414.                     {
  415.                         reciever.GameText("~b~BLUE ~w~team wins!", 3000, 5);
  416.                         reciever.PlaySound(1185);
  417.                     }
  418.  
  419.                     objectiveReached = true;
  420.                     new Timer(TimeSpan.FromSeconds(6), false).Tick += (s, ee) => ExitTheGameMode();
  421.                 }
  422.                 else
  423.                 {
  424.                     foreach (Player reciever in BasePlayer.GetAll<Player>())
  425.                     {
  426.                         reciever.GameText("~b~BLUE ~w~team captured the ~y~boat!", 3000, 5);
  427.                     }
  428.  
  429.                     blueVehicle.Respawn();
  430.                 }
  431.                 return;
  432.             }
  433.  
  434.             base.OnPlayerEnterCheckpoint(player, e);
  435.         }
  436.  
  437.         protected override void OnPlayerDied(BasePlayer sender, DeathEventArgs e)
  438.         {
  439.             Player player = sender as Player;
  440.             Player killer = e.Killer as Player;
  441.  
  442.             BasePlayer.SendDeathMessageToAll(killer, player, e.DeathReason);
  443.  
  444.             if(killer != null && killer.Team != player.Team)
  445.             {
  446.                 killer.Score += 1;
  447.             }
  448.  
  449.             player.lastDeathTick = DateTime.Now;
  450.             player.lastKiller = killer;
  451.  
  452.             base.OnPlayerDied(player, e);
  453.         }
  454.  
  455.         protected override void OnVehicleStreamIn(BaseVehicle vehicle, PlayerEventArgs e)
  456.         {
  457.             Player player = e.Player as Player;
  458.  
  459.             if(vehicle == blueVehicle)
  460.             {
  461.                 if(player.Team == (int) Team.Green)
  462.                 {
  463.                     vehicle.SetParametersForPlayer(player, true, true);
  464.                 }
  465.                 if(player.Team == (int) Team.Blue)
  466.                 {
  467.                     vehicle.SetParametersForPlayer(player, true, false);
  468.                 }
  469.             }
  470.             if(vehicle == greenVehicle)
  471.             {
  472.                 if(player.Team == (int) Team.Blue)
  473.                 {
  474.                     vehicle.SetParametersForPlayer(player, true, true);
  475.                 }
  476.                 if(player.Team == (int) Team.Green)
  477.                 {
  478.                     vehicle.SetParametersForPlayer(player, true, false);
  479.                 }
  480.             }
  481.  
  482.             base.OnVehicleStreamIn(vehicle, e);
  483.         }
  484.  
  485.         protected override void OnPlayerUpdate(BasePlayer sender, PlayerUpdateEventArgs e)
  486.         {
  487.             Player player = sender as Player;
  488.  
  489.             if (player.IsNPC == true)
  490.             {
  491.                 base.OnPlayerUpdate(player, e);
  492.                 return;
  493.             }
  494.  
  495.             if (player.State == PlayerState.Spectating && (DateTime.Now - player.lastDeathTick) >= TimeSpan.FromSeconds(RESPAWN_DELAY))
  496.             {
  497.                 player.ToggleSpectating(false);
  498.             }
  499.  
  500.             // Check the resupply huts
  501.             if (player.State == PlayerState.OnFoot)
  502.             {
  503.                 if (player.Position.DistanceTo(new Vector3(2140.83, -235.13, 7.13)) <= 2.5f || player.Position.DistanceTo(new Vector3(2318.73, 590.96, 6.75)) <= 2.5f)
  504.                 {
  505.                     DoResupply(player);
  506.                 }
  507.             }
  508.  
  509.             base.OnPlayerUpdate(player, e);
  510.         }
  511.  
  512.         protected override void LoadControllers(ControllerCollection controllers)
  513.         {
  514.             base.LoadControllers(controllers);
  515.  
  516.             controllers.Override(new PlayerController());
  517.         }
  518.  
  519.         BaseVehicle CreateVehicle(int modelId, double x, double y, double z, double angle, int primary, int secondary, int respawnDelay)
  520.         {
  521.             return BaseVehicle.Create((VehicleModelType) modelId, new Vector3(x, y, z), (float)angle, primary, secondary, respawnDelay);
  522.         }
  523.  
  524.         GlobalObject CreateMapObject(int modelId, double x, double y, double z, double rx, double ry, double rz)
  525.         {
  526.             return new GlobalObject(modelId, new Vector3(x, y, z), new Vector3(rx, ry, rz));
  527.         }
  528.        
  529.         void RemoveNeededBuildingsForPlayer(Player player)
  530.         {
  531.             if(player.buildingsRemoved == false)
  532.             {
  533.                 return;
  534.             }
  535.  
  536.             GlobalObject.Remove(player, 9090, new Vector3(2317.0859, 572.2656, -20.9688), 10.0f);
  537.             GlobalObject.Remove(player, 9091, new Vector3(2317.0859, 572.2656, -20.9688), 10.0f);
  538.             GlobalObject.Remove(player, 13483, new Vector3(2113.5781, -96.7344, 0.9844), 0.25f);
  539.             GlobalObject.Remove(player, 12990, new Vector3(2113.5781, -96.7344, 0.9844), 0.25f);
  540.             GlobalObject.Remove(player, 935, new Vector3(2119.8203, -84.4063, -0.0703), 0.25f);
  541.             GlobalObject.Remove(player, 1369, new Vector3(2104.0156, -105.2656, 1.7031), 0.25f);
  542.             GlobalObject.Remove(player, 935, new Vector3(2122.3750, -83.3828, 0.4609), 0.25f);
  543.             GlobalObject.Remove(player, 935, new Vector3(2119.5313, -82.8906, -0.1641), 0.25f);
  544.             GlobalObject.Remove(player, 935, new Vector3(2120.5156, -79.0859, 0.2188), 0.25f);
  545.             GlobalObject.Remove(player, 935, new Vector3(2119.4688, -69.7344, 0.2266), 0.25f);
  546.             GlobalObject.Remove(player, 935, new Vector3(2119.4922, -73.6172, 0.1250), 0.25f);
  547.             GlobalObject.Remove(player, 935, new Vector3(2117.8438, -67.8359, 0.1328), 0.25f);
  548.  
  549.             player.buildingsRemoved = true;
  550.         }
  551.  
  552.         void DoResupply(Player player)
  553.         {
  554.             if((DateTime.Now - player.lastResupply) < TimeSpan.FromSeconds(30))
  555.             {
  556.                 TimeSpan next = (TimeSpan.FromSeconds(30) - (DateTime.Now - player.lastResupply));
  557.                 player.GameText(string.Format("~r~Next resupply: {0}s", next.Seconds), 2000, 5);
  558.                 return;
  559.             }
  560.  
  561.             player.ResetWeapons();
  562.             player.GiveWeapon((Weapon) 31, 100);
  563.             player.GiveWeapon((Weapon) 29, 200);
  564.             player.GiveWeapon((Weapon) 34, 10);
  565.             player.Health = 100.0f;
  566.             player.Armour = 100.0f;
  567.             player.GameText("Resupplied", 2000, 5);
  568.             player.PlaySound(1150);
  569.  
  570.             player.lastResupply = DateTime.Now;
  571.         }
  572.     }
  573.  
  574.     public class Player : BasePlayer
  575.     {
  576.         // PVars persist through gamemode restarts, that's why I'm storing player information in them.
  577.         public bool buildingsRemoved
  578.         {
  579.             get
  580.             {
  581.                 if(PVars.Exists("BuildingsRemoved") == false)
  582.                 {
  583.                     return false;
  584.                 }
  585.                 return PVars.Get<bool>("BuildingsRemoved");
  586.             }
  587.             set
  588.             {
  589.                 PVars["BuildingsRemoved"] = value;
  590.             }
  591.         }
  592.  
  593.         public DateTime lastDeathTick
  594.         {
  595.             get
  596.             {
  597.                 if(PVars.Exists("LastDeathTick") == false)
  598.                 {
  599.                     return DateTime.MinValue;
  600.                 }
  601.                 return DateTime.Parse(PVars.Get<string>("LastDeathTick"));
  602.             }
  603.             set
  604.             {
  605.                 PVars["LastDeathTick"] = value.ToString();
  606.             }
  607.         }
  608.  
  609.         public Player lastKiller
  610.         {
  611.             get
  612.             {
  613.                 if(PVars.Exists("LastKillerName") == false)
  614.                 {
  615.                     return null;
  616.                 }
  617.                 return BasePlayer.GetAll<Player>().First(p => p.Name.ToLower() == PVars.Get<string>("LastKillerName"));
  618.             }
  619.             set
  620.             {
  621.                 PVars["LastKillerName"] = value.Name.ToLower();
  622.             }
  623.         }
  624.  
  625.         public DateTime lastResupply
  626.         {
  627.             get
  628.             {
  629.                 if (PVars.Exists("LastResupply") == false)
  630.                 {
  631.                     return DateTime.MinValue;
  632.                 }
  633.                 return DateTime.Parse(PVars.Get<string>("LastResupply"));
  634.             }
  635.             set
  636.             {
  637.                 PVars["LastResupply"] = value.ToString();
  638.             }
  639.         }
  640.  
  641.     }
  642.  
  643.     public class PlayerController : BasePlayerController
  644.     {
  645.         public override void RegisterTypes()
  646.         {
  647.             Player.Register<Player>();
  648.         }
  649.     }
  650. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement