Advertisement
NewbProgramming

Barron (S#)

Jul 23rd, 2017
274
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 9.17 KB | None | 0 0
  1. //
  2. //  RC BARNSTORM - A demonstration vehicle vs vehicle script for SA-MP 0.2
  3. //  -- by kyeman (SA-MP team) 2007
  4. //
  5. //  This script demonstrates the following :-
  6. //  - An automatic vehicle observer mode switchable via a key press.
  7. //  - Text drawing and the use of GTA ~k~ key constants.
  8. //  - Use of RC vehicles
  9. //  - Dynamic creation and destruction of vehicles
  10. //  - The OnPlayerKeyStateChange event/callback and determining
  11. //    if a key has just been pressed.
  12. //  - Bypassing SA-MP's class selection with SetSpawnInfo
  13.  
  14. using SampSharp.GameMode;
  15. using SampSharp.GameMode.Controllers;
  16. using SampSharp.GameMode.World;
  17. using System;
  18. using SampSharp.GameMode.Events;
  19. using SampSharp.GameMode.Definitions;
  20. using SampSharp.GameMode.Display;
  21. using SampSharp.GameMode.SAMP;
  22.  
  23. namespace Barron
  24. {
  25.     public class GameMode : BaseMode
  26.     {
  27.         SpawnPoint[] SpawnLocations = new[]
  28.         {
  29.             new SpawnPoint(-205.7703,-119.6655,2.4094,342.0546),
  30.             new SpawnPoint(-202.1386,-54.1213,2.4111,95.6799),
  31.             new SpawnPoint(-197.2334,7.5293,2.4034,16.0852),
  32.             new SpawnPoint(-135.7348,61.7265,2.4112,354.3534),
  33.             new SpawnPoint(-73.7883,73.4238,2.4082,260.5399),
  34.             new SpawnPoint(-6.9850,27.9988,2.4112,201.7691),
  35.             new SpawnPoint(0.6782,-16.0898,2.4076,161.7720),
  36.             new SpawnPoint(-46.3365,-88.3937,2.4092,180.7382),
  37.             new SpawnPoint(-72.4389,-127.2939,2.4107,113.5616),
  38.             new SpawnPoint(-128.1940,-144.1725,2.4094,78.9676),
  39.             new SpawnPoint(-266.0189,-50.6718,2.4125,223.8079),
  40.             new SpawnPoint(-244.2617,-1.0468,2.1038,257.3333),
  41.             new SpawnPoint(-93.3146,-32.4889,2.4085,186.0631),
  42.             new SpawnPoint(-130.7054,-93.4983,2.4124,73.8375),
  43.             new SpawnPoint(-117.4049,4.2989,2.4112,337.1284),
  44.             new SpawnPoint(-26.1622,135.8739,2.4094,248.1580),
  45.             new SpawnPoint(45.5705,86.7586,2.0753,147.3342),
  46.             new SpawnPoint(54.9881,2.2997,1.1132,95.7173),
  47.             new SpawnPoint(-248.9905,-119.3982,2.4083,303.7859),
  48.             new SpawnPoint(-60.1321,55.5239,2.4038,325.2209),
  49.             new SpawnPoint(-60.9184,47.9302,5.7706,342.8299),
  50.             new SpawnPoint(-70.0303,-22.0071,2.4113,165.2789),
  51.             new SpawnPoint(-138.3093,-83.2640,2.4152,4.0455),
  52.             new SpawnPoint(-25.5989,94.6100,2.4041,150.8322),
  53.             new SpawnPoint(-161.0327,-70.5945,2.4042,142.9221),
  54.             new SpawnPoint(-54.8308,-139.6148,2.4119,258.7639)
  55.         };
  56.  
  57.         TextDraw observerTD = null;
  58.  
  59.         void ObserverSwitchToNextVehicle(Player player)
  60.         {
  61.             foreach(Player next in BasePlayer.GetAll<Player>())
  62.             {
  63.                 if(next == player.observing) continue;
  64.                 if(next.vehicle == null) continue;
  65.  
  66.                 player.SpectateVehicle(next.vehicle);
  67.                 player.observing = next;
  68.             }
  69.  
  70.             if(player.observing != null && player.observing.vehicle != null)
  71.             {
  72.                 player.SpectateVehicle(player.observing.vehicle);
  73.             }
  74.         }
  75.        
  76.         protected override void OnPlayerKeyStateChanged(BasePlayer sender, KeyStateChangedEventArgs e)
  77.         {
  78.             Player player = sender as Player;
  79.  
  80.             player.GetKeys(out Keys keys, out int _, out int _);
  81.  
  82.             if (player.State == PlayerState.Spectating && keys == Keys.Sprint)
  83.             {
  84.                 player.ToggleSpectating(false);
  85.                 player.observing = null;
  86.                 player.SendClientMessage(0xFFFFFFFF, "Leaving spectate");
  87.                 return;
  88.             }
  89.             if (player.State == PlayerState.Spectating && keys == Keys.Fire)
  90.             {
  91.                 ObserverSwitchToNextVehicle(player);
  92.             }
  93.  
  94.             base.OnPlayerKeyStateChanged(player, e);
  95.         }
  96.  
  97.         protected override void OnPlayerConnected(BasePlayer sender, EventArgs e)
  98.         {
  99.             Player player = sender as Player;
  100.  
  101.             player.GameText("~w~SA-MP: ~r~RC Barnstorm", 5000, 5);
  102.  
  103.             base.OnPlayerConnected(player, e);
  104.         }
  105.  
  106.         protected override void OnPlayerDisconnected(BasePlayer sender, DisconnectEventArgs e)
  107.         {
  108.             Player player = sender as Player;
  109.  
  110.             if(player.vehicle != null)
  111.             {
  112.                 player.vehicle.Dispose();
  113.                 player.vehicle = null;
  114.             }
  115.  
  116.             base.OnPlayerDisconnected(player, e);
  117.         }
  118.  
  119.         protected override void OnPlayerSpawned(BasePlayer sender, SpawnEventArgs e)
  120.         {
  121.             Player player = sender as Player;
  122.             SpawnPoint spawn = SpawnLocations[new Random().Next(SpawnLocations.Length)];
  123.  
  124.             player.vehicle = BaseVehicle.Create(VehicleModelType.RCBaron, spawn.position, spawn.angle, -1, -1, 10);
  125.             player.PutInVehicle(player.vehicle);
  126.             // player.ForceClassSelection();
  127.             observerTD.Hide(player);
  128.             player.SetWorldBounds(200.0f, -300.0f, 200.0f, -200.0f);
  129.  
  130.             base.OnPlayerSpawned(player, e);
  131.         }
  132.  
  133.         protected override void OnPlayerDied(BasePlayer sender, DeathEventArgs e)
  134.         {
  135.             Player player = sender as Player;
  136.  
  137.             player.RemoveFromVehicle();
  138.             player.vehicle.Dispose();
  139.             player.vehicle = null;
  140.  
  141.             BasePlayer.SendDeathMessageToAll(e.Killer, player, e.DeathReason);
  142.  
  143.             foreach(Player observer in BasePlayer.GetAll<Player>())
  144.             {
  145.                 if(observer.observing != player) continue;
  146.  
  147.                 ObserverSwitchToNextVehicle(observer);
  148.             }
  149.  
  150.             base.OnPlayerDied(player, e);
  151.         }
  152.  
  153.         protected override void OnPlayerRequestClass(BasePlayer sender, RequestClassEventArgs e)
  154.         {
  155.             Player player = sender as Player;
  156.  
  157.             player.ToggleSpectating(true);
  158.             ObserverSwitchToNextVehicle(player);
  159.             observerTD.Show(player);
  160.  
  161.             SpawnPoint spawn = SpawnLocations[new Random().Next(SpawnLocations.Length)];
  162.  
  163.             player.SetSpawnInfo(BasePlayer.NoTeam, 0, spawn.position, spawn.angle);
  164.  
  165.             base.OnPlayerRequestClass(player, e);
  166.         }
  167.  
  168.         protected override void OnInitialized(EventArgs e)
  169.         {
  170.             Console.WriteLine("Running: RC BARNSTORM by kyeman 2007");
  171.  
  172.             SetGameModeText("RC Barnstorm");
  173.  
  174.             ShowPlayerMarkers(PlayerMarkersMode.Off);
  175.             ShowNameTags(true);
  176.             Server.SetWorldTime(7);
  177.             Server.SetWeather(5);
  178.  
  179.             AddPlayerClass(0, new Vector3(0.0, 0.0, 4.0), 0.0f);
  180.  
  181.             observerTD = new TextDraw(new Vector2(20.0, 400.0), "Press ~b~~k~~PED_SPRINT~ ~w~to spawn~n~Press ~b~~k~~PED_FIREWEAPON~ ~w~to switch players");
  182.             observerTD.UseBox = true;
  183.             observerTD.Font = TextDrawFont.Slim;
  184.             observerTD.Shadow = 0;
  185.             observerTD.Outline = 1;
  186.             observerTD.BackColor = Color.Black;
  187.             observerTD.ForeColor = Color.White;
  188.  
  189.             base.OnInitialized(e);
  190.         }
  191.         /*
  192.         protected override void OnPlayerUpdate(BasePlayer sender, PlayerUpdateEventArgs e)
  193.         {
  194.             Player player = sender as Player;
  195.  
  196.             if (player.State == PlayerState.Spectating)
  197.             {
  198.                 player.GetKeys(out Keys unused, out int upOrDown, out int leftOrRight);
  199.  
  200.                 if(upOrDown > 0)
  201.                 {
  202.                     player.SendClientMessage("DOWN");
  203.                 }
  204.                 if(upOrDown < 0)
  205.                 {
  206.                     player.SendClientMessage("UP");
  207.                 }
  208.                 if(leftOrRight > 0)
  209.                 {
  210.                     player.SendClientMessage("RIGHT");
  211.                 }
  212.                 if(leftOrRight < 0)
  213.                 {
  214.                     player.SendClientMessage("LEFT");
  215.                 }
  216.             }
  217.  
  218.             base.OnPlayerUpdate(player, e);
  219.         }
  220.         */
  221.         protected override void LoadControllers(ControllerCollection controllers)
  222.         {
  223.             base.LoadControllers(controllers);
  224.  
  225.             controllers.Override(new PlayerController());
  226.         }
  227.     }
  228.  
  229.     public class SpawnPoint
  230.     {
  231.         public Vector3 position = Vector3.Zero;
  232.         public float angle = 0.0f;
  233.  
  234.         public SpawnPoint(Vector3 position, float angle)
  235.         {
  236.             this.position = position;
  237.             this.angle = angle;
  238.         }
  239.  
  240.         public SpawnPoint(double x, double y, double z, double angle)
  241.         {
  242.             this.position = new Vector3(x, y, z);
  243.             this.angle = Convert.ToSingle(angle);
  244.         }
  245.  
  246.         public SpawnPoint(float x, float y, float z, float angle)
  247.         {
  248.             this.position = new Vector3(x, y, z);
  249.             this.angle = angle;
  250.         }
  251.     }
  252.  
  253.     public class Player : BasePlayer
  254.     {
  255.         public Player observing = null;
  256.         public BaseVehicle vehicle = null;
  257.     }
  258.  
  259.     public class PlayerController : BasePlayerController
  260.     {
  261.         public override void RegisterTypes()
  262.         {
  263.             Player.Register<Player>();
  264.         }
  265.     }
  266. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement