Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- //
- // RC BARNSTORM - A demonstration vehicle vs vehicle script for SA-MP 0.2
- // -- by kyeman (SA-MP team) 2007
- //
- // This script demonstrates the following :-
- // - An automatic vehicle observer mode switchable via a key press.
- // - Text drawing and the use of GTA ~k~ key constants.
- // - Use of RC vehicles
- // - Dynamic creation and destruction of vehicles
- // - The OnPlayerKeyStateChange event/callback and determining
- // if a key has just been pressed.
- // - Bypassing SA-MP's class selection with SetSpawnInfo
- using SampSharp.GameMode;
- using SampSharp.GameMode.Controllers;
- using SampSharp.GameMode.World;
- using System;
- using SampSharp.GameMode.Events;
- using SampSharp.GameMode.Definitions;
- using SampSharp.GameMode.Display;
- using SampSharp.GameMode.SAMP;
- namespace Barron
- {
- public class GameMode : BaseMode
- {
- SpawnPoint[] SpawnLocations = new[]
- {
- new SpawnPoint(-205.7703,-119.6655,2.4094,342.0546),
- new SpawnPoint(-202.1386,-54.1213,2.4111,95.6799),
- new SpawnPoint(-197.2334,7.5293,2.4034,16.0852),
- new SpawnPoint(-135.7348,61.7265,2.4112,354.3534),
- new SpawnPoint(-73.7883,73.4238,2.4082,260.5399),
- new SpawnPoint(-6.9850,27.9988,2.4112,201.7691),
- new SpawnPoint(0.6782,-16.0898,2.4076,161.7720),
- new SpawnPoint(-46.3365,-88.3937,2.4092,180.7382),
- new SpawnPoint(-72.4389,-127.2939,2.4107,113.5616),
- new SpawnPoint(-128.1940,-144.1725,2.4094,78.9676),
- new SpawnPoint(-266.0189,-50.6718,2.4125,223.8079),
- new SpawnPoint(-244.2617,-1.0468,2.1038,257.3333),
- new SpawnPoint(-93.3146,-32.4889,2.4085,186.0631),
- new SpawnPoint(-130.7054,-93.4983,2.4124,73.8375),
- new SpawnPoint(-117.4049,4.2989,2.4112,337.1284),
- new SpawnPoint(-26.1622,135.8739,2.4094,248.1580),
- new SpawnPoint(45.5705,86.7586,2.0753,147.3342),
- new SpawnPoint(54.9881,2.2997,1.1132,95.7173),
- new SpawnPoint(-248.9905,-119.3982,2.4083,303.7859),
- new SpawnPoint(-60.1321,55.5239,2.4038,325.2209),
- new SpawnPoint(-60.9184,47.9302,5.7706,342.8299),
- new SpawnPoint(-70.0303,-22.0071,2.4113,165.2789),
- new SpawnPoint(-138.3093,-83.2640,2.4152,4.0455),
- new SpawnPoint(-25.5989,94.6100,2.4041,150.8322),
- new SpawnPoint(-161.0327,-70.5945,2.4042,142.9221),
- new SpawnPoint(-54.8308,-139.6148,2.4119,258.7639)
- };
- TextDraw observerTD = null;
- void ObserverSwitchToNextVehicle(Player player)
- {
- foreach(Player next in BasePlayer.GetAll<Player>())
- {
- if(next == player.observing) continue;
- if(next.vehicle == null) continue;
- player.SpectateVehicle(next.vehicle);
- player.observing = next;
- }
- if(player.observing != null && player.observing.vehicle != null)
- {
- player.SpectateVehicle(player.observing.vehicle);
- }
- }
- protected override void OnPlayerKeyStateChanged(BasePlayer sender, KeyStateChangedEventArgs e)
- {
- Player player = sender as Player;
- player.GetKeys(out Keys keys, out int _, out int _);
- if (player.State == PlayerState.Spectating && keys == Keys.Sprint)
- {
- player.ToggleSpectating(false);
- player.observing = null;
- player.SendClientMessage(0xFFFFFFFF, "Leaving spectate");
- return;
- }
- if (player.State == PlayerState.Spectating && keys == Keys.Fire)
- {
- ObserverSwitchToNextVehicle(player);
- }
- base.OnPlayerKeyStateChanged(player, e);
- }
- protected override void OnPlayerConnected(BasePlayer sender, EventArgs e)
- {
- Player player = sender as Player;
- player.GameText("~w~SA-MP: ~r~RC Barnstorm", 5000, 5);
- base.OnPlayerConnected(player, e);
- }
- protected override void OnPlayerDisconnected(BasePlayer sender, DisconnectEventArgs e)
- {
- Player player = sender as Player;
- if(player.vehicle != null)
- {
- player.vehicle.Dispose();
- player.vehicle = null;
- }
- base.OnPlayerDisconnected(player, e);
- }
- protected override void OnPlayerSpawned(BasePlayer sender, SpawnEventArgs e)
- {
- Player player = sender as Player;
- SpawnPoint spawn = SpawnLocations[new Random().Next(SpawnLocations.Length)];
- player.vehicle = BaseVehicle.Create(VehicleModelType.RCBaron, spawn.position, spawn.angle, -1, -1, 10);
- player.PutInVehicle(player.vehicle);
- // player.ForceClassSelection();
- observerTD.Hide(player);
- player.SetWorldBounds(200.0f, -300.0f, 200.0f, -200.0f);
- base.OnPlayerSpawned(player, e);
- }
- protected override void OnPlayerDied(BasePlayer sender, DeathEventArgs e)
- {
- Player player = sender as Player;
- player.RemoveFromVehicle();
- player.vehicle.Dispose();
- player.vehicle = null;
- BasePlayer.SendDeathMessageToAll(e.Killer, player, e.DeathReason);
- foreach(Player observer in BasePlayer.GetAll<Player>())
- {
- if(observer.observing != player) continue;
- ObserverSwitchToNextVehicle(observer);
- }
- base.OnPlayerDied(player, e);
- }
- protected override void OnPlayerRequestClass(BasePlayer sender, RequestClassEventArgs e)
- {
- Player player = sender as Player;
- player.ToggleSpectating(true);
- ObserverSwitchToNextVehicle(player);
- observerTD.Show(player);
- SpawnPoint spawn = SpawnLocations[new Random().Next(SpawnLocations.Length)];
- player.SetSpawnInfo(BasePlayer.NoTeam, 0, spawn.position, spawn.angle);
- base.OnPlayerRequestClass(player, e);
- }
- protected override void OnInitialized(EventArgs e)
- {
- Console.WriteLine("Running: RC BARNSTORM by kyeman 2007");
- SetGameModeText("RC Barnstorm");
- ShowPlayerMarkers(PlayerMarkersMode.Off);
- ShowNameTags(true);
- Server.SetWorldTime(7);
- Server.SetWeather(5);
- AddPlayerClass(0, new Vector3(0.0, 0.0, 4.0), 0.0f);
- 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");
- observerTD.UseBox = true;
- observerTD.Font = TextDrawFont.Slim;
- observerTD.Shadow = 0;
- observerTD.Outline = 1;
- observerTD.BackColor = Color.Black;
- observerTD.ForeColor = Color.White;
- base.OnInitialized(e);
- }
- /*
- protected override void OnPlayerUpdate(BasePlayer sender, PlayerUpdateEventArgs e)
- {
- Player player = sender as Player;
- if (player.State == PlayerState.Spectating)
- {
- player.GetKeys(out Keys unused, out int upOrDown, out int leftOrRight);
- if(upOrDown > 0)
- {
- player.SendClientMessage("DOWN");
- }
- if(upOrDown < 0)
- {
- player.SendClientMessage("UP");
- }
- if(leftOrRight > 0)
- {
- player.SendClientMessage("RIGHT");
- }
- if(leftOrRight < 0)
- {
- player.SendClientMessage("LEFT");
- }
- }
- base.OnPlayerUpdate(player, e);
- }
- */
- protected override void LoadControllers(ControllerCollection controllers)
- {
- base.LoadControllers(controllers);
- controllers.Override(new PlayerController());
- }
- }
- public class SpawnPoint
- {
- public Vector3 position = Vector3.Zero;
- public float angle = 0.0f;
- public SpawnPoint(Vector3 position, float angle)
- {
- this.position = position;
- this.angle = angle;
- }
- public SpawnPoint(double x, double y, double z, double angle)
- {
- this.position = new Vector3(x, y, z);
- this.angle = Convert.ToSingle(angle);
- }
- public SpawnPoint(float x, float y, float z, float angle)
- {
- this.position = new Vector3(x, y, z);
- this.angle = angle;
- }
- }
- public class Player : BasePlayer
- {
- public Player observing = null;
- public BaseVehicle vehicle = null;
- }
- public class PlayerController : BasePlayerController
- {
- public override void RegisterTypes()
- {
- Player.Register<Player>();
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement