djhonga2001

Gang Wars: ballas vs. families, knife only

Aug 11th, 2015
312
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. /* GTA V Gang War Mod (BALLAS VS. FAMILIES, KNIFE ONLY)
  2. * ALL THE CREDITS GO TO KEROSINI BY MAKING THE SCRIPT (https://www.gta5-mods.com/scripts/gangwar-zip)
  3. * After the play defines during the gametime two spawnpoints,
  4. * there will be spawnd a limited crowd of peds for each team.
  5. * Peds will goto the enemy spawnpoint and atack peds from the enemy team
  6. * The player is in Team B
  7. *
  8. * Use this Mod for getting introdused into scripting mods for GTA V :)
  9. *
  10. * Version 0.2
  11. *
  12. * (C)Tobias Rosini
  13. * tobias.rosini@hotmail.de
  14. */
  15. using GTA;
  16. using GTA.Native;
  17. using GTA.Math;
  18.  
  19. using System;
  20. using System.Collections.Generic;
  21. using System.Windows.Forms;
  22.  
  23.  
  24.  
  25. public class GangWar : Script
  26. {
  27. //RelationshipGroup Indizies
  28. int relgrpA = 0;
  29. int relgrpB = 0;
  30.  
  31. //Frequenzy divisor counter
  32. int TickCnt = 0;
  33.  
  34. //Lists for keeping references to our Peds
  35. List<Ped> managedPedsTeamA = new List<Ped>();
  36. List<Ped> managedPedsTeamB = new List<Ped>();
  37.  
  38. //List for noticing wich Ped has to be deleted
  39. List<Ped> LöschIndizies = new List<Ped>();
  40.  
  41. //Points
  42. int PointsTeamA = 0;
  43. int PointsTeamB = 0;
  44.  
  45. public GangWar()
  46. {
  47. //Events from Game
  48. Tick += OnTick;
  49. KeyDown += OnKeyDown;
  50. KeyUp += OnKeyUp;
  51.  
  52. Interval = 10;
  53.  
  54. //Defining Relationships
  55. relgrpA = World.AddRelationshipGroup("A");
  56. relgrpB = World.AddRelationshipGroup("B");
  57.  
  58. //who hates and like who
  59. World.SetRelationshipBetweenGroups(Relationship.Hate, relgrpA, relgrpB);
  60. World.SetRelationshipBetweenGroups(Relationship.Respect, relgrpA, relgrpA);
  61. World.SetRelationshipBetweenGroups(Relationship.Respect, relgrpB, relgrpB);
  62.  
  63. //Put Player in Team B
  64. Game.Player.Character.RelationshipGroup = relgrpB;
  65. //managedPedsTeamA.Add(Game.Player.Character);
  66. }
  67.  
  68. //Happens every 10 ms
  69. void OnTick(object sender, EventArgs e)
  70. {
  71. //I build here a Frequenzy divisor for things that do not have to happen so often
  72. int TickDivisor = 50;
  73. TickCnt++;
  74. if (TickCnt > TickDivisor)
  75. {
  76. TickCnt = 0;
  77. DividedTick(sender, e);//Happens every 500 ms
  78. }
  79.  
  80. //HUD
  81. UIText txtA = new UIText(
  82. PointsTeamA.ToString(),
  83. new System.Drawing.Point(0, 0),
  84. 1,
  85. System.Drawing.Color.Red);
  86. txtA.Draw();
  87.  
  88. UIText txtB = new UIText(
  89. PointsTeamB.ToString(),
  90. new System.Drawing.Point(100, 0),
  91. 1,
  92. System.Drawing.Color.Yellow);
  93. txtB.Draw();
  94. }
  95.  
  96. //Happens every 500 ms
  97. void DividedTick(object sender, EventArgs e)
  98. {
  99. CheckPeds(managedPedsTeamA);
  100. CheckPeds(managedPedsTeamB);
  101.  
  102. int livingA = 0;
  103. int livingB = 0;
  104.  
  105. foreach (Ped ped in managedPedsTeamA)
  106. if (ped.IsAlive)
  107. livingA++;
  108.  
  109. foreach (Ped ped in managedPedsTeamB)
  110. if (ped.IsAlive)
  111. livingB++;
  112.  
  113. if ((livingB + livingB) < 25)
  114. {
  115. if (livingA > livingB)
  116. CreateNewPed("B");
  117. else
  118. CreateNewPed("A");
  119. }
  120. CleanUpDeath();
  121. }
  122.  
  123. string GetManagedPedInfo(string team)
  124. {
  125. int dead = 0;
  126. int idle = 0;
  127. int walking = 0;
  128. List<Ped>l = null;
  129.  
  130. if (team == "A")
  131. l = managedPedsTeamA;
  132.  
  133. if (team == "B")
  134. l = managedPedsTeamB;
  135.  
  136. if (l != null)
  137. {
  138. foreach (Ped ped in l)
  139. {
  140. if (ped.IsDead)
  141. dead++;
  142.  
  143. if (ped.IsWalking)
  144. walking++;
  145.  
  146. if (ped.IsIdle)
  147. idle++;
  148. }
  149. }
  150.  
  151. return "Team" + team + ": " + managedPedsTeamA.Count + " | dead: " + dead.ToString() + " | idle: " + idle.ToString() + " | walking: " + walking.ToString();
  152. }
  153.  
  154. void CleanUpDeath()
  155. {
  156. while (LöschIndizies.Count > 5)
  157. {
  158. int killIndex = -1;
  159. //Durchsuche Liste A
  160. for (int i = 0; i < managedPedsTeamA.Count;i++)
  161. {
  162. if (LöschIndizies[0].Handle == managedPedsTeamA[i].Handle)
  163. {
  164. killIndex = i;
  165. }
  166. }
  167. if (killIndex != -1)
  168. {
  169. managedPedsTeamA[killIndex].Delete();
  170. managedPedsTeamA.RemoveAt(killIndex);
  171. }
  172. else
  173. {
  174. //Durchsuche Liste B
  175. for (int i = 0; i < managedPedsTeamB.Count; i++)
  176. {
  177. if (LöschIndizies[0].Handle == managedPedsTeamB[i].Handle)
  178. {
  179. killIndex = i;
  180. }
  181. }
  182. if (killIndex != -1)
  183. {
  184. managedPedsTeamB[killIndex].Delete();
  185. managedPedsTeamB.RemoveAt(killIndex);
  186. }
  187. }
  188.  
  189. //Entfernen aus Löschliste
  190. if (killIndex != -1)
  191. LöschIndizies.RemoveAt(0);
  192. }
  193.  
  194. /*
  195. //FiFo PedsToDelete Buffer
  196. while (LöschIndizies.Count > 5)
  197. {
  198. if (targetList.Count > 0)
  199. {
  200. if (LöschIndizies.Remove(targetList[0]))
  201. {
  202. //UI.Notify("delete from L-List");
  203. targetList[0].Delete();
  204. targetList.RemoveAt(0);
  205. }
  206. }
  207. }
  208. */
  209. }
  210.  
  211. void CheckPeds(List<Ped> targetList)
  212. {
  213. Ped player = Game.Player.Character;
  214.  
  215. foreach (Ped ped in targetList)
  216. {/*
  217. bool isNear = false;
  218. if (World.GetDistance(player.Position, ped.Position) < 100f)
  219. {
  220. isNear = true;
  221. //UI.Notify("nearly " + ped.Handle.ToString());
  222. }
  223.  
  224. //Cleaning Up far away Peds
  225. if (!isNear)
  226. {
  227. LöschIndizies.Add(ped);
  228. }*/
  229. //else
  230. {
  231. //setting Up Tasks: Every one who idle goto the enemy spawnpoint
  232. if (ped.IsIdle)
  233. {
  234. if (targetList == managedPedsTeamA)
  235. ped.Task.GoTo(spawnLocB);
  236. if(targetList == managedPedsTeamB)
  237. ped.Task.GoTo(spawnLocA);
  238. }
  239. }
  240.  
  241. }
  242.  
  243. }
  244.  
  245. /// <summary>
  246. /// Results true if the ped is in the List
  247. /// </summary>
  248. /// <param name="ped">The ped to check</param>
  249. /// <param name="TeamList">The List with all the Teammeber</param>
  250. /// <returns></returns>
  251. bool IsPedInTeam(Ped ped, List<Ped> TeamList)
  252. {
  253. foreach(Ped teammember in TeamList)
  254. {
  255. if (ped.Handle == teammember.Handle)
  256. return true;
  257. }
  258. return false;
  259. }
  260.  
  261. //Use this for cathing the KeyDown Event
  262. void OnKeyDown(object sender, KeyEventArgs e)
  263. {
  264. }
  265.  
  266. GTA.Math.Vector3 spawnLocA = new GTA.Math.Vector3(0, 0, 0);
  267. GTA.Math.Vector3 spawnLocB = new GTA.Math.Vector3(0, 0, 0);
  268.  
  269. //for securing that a spawnpoint has defined before each team creates its Peds
  270. bool IsSpawnLocADefined = false;
  271. bool IsSpawnLocBDefined = false;
  272.  
  273. /// <summary>
  274. /// Creates a new Ped
  275. /// </summary>
  276. /// <param name="team">Team A or B</param>
  277. void CreateNewPed(string team)
  278. {
  279. //If there are both Spawnpoints defined
  280. if (IsSpawnLocADefined && IsSpawnLocBDefined)
  281. {
  282. //depending on team we build a small list of models for a random selection
  283. List<string> model_names = new List<string>();
  284. if (team == "A")
  285. {
  286. //Tip: Google one of the strings for find lists of Modelnames
  287. model_names.Add("g_f_y_ballas_01");
  288. model_names.Add("g_m_y_ballaeast_01");
  289. model_names.Add("g_m_y_ballaorig_01");
  290. model_names.Add("g_m_y_ballasout_01");
  291. }
  292. if (team == "B")
  293. {
  294. model_names.Add("g_f_y_families_01");
  295. model_names.Add("g_m_y_famca_01");
  296. model_names.Add("g_m_y_famdnf_01");
  297. model_names.Add("g_m_y_famfor_01");
  298. }
  299.  
  300. //for random selection
  301. Random r = new Random();
  302.  
  303. //This will become the new created ped
  304. Ped ped = null;
  305.  
  306. //Yes.. the following code is uggly (to much copy paste for team A & B, nicer would be to isolated this in a new method)
  307. //if there are excepitons in the follwing lines check the spelling of your modelnames
  308. if (team == "A")
  309. {
  310. ped = GTA.World.CreatePed(model_names[r.Next(0, model_names.Count)], spawnLocA);
  311.  
  312. //Relationship
  313. if (ped != null)
  314. {
  315. managedPedsTeamA.Add(ped);
  316. ped.RelationshipGroup = relgrpA;
  317. }
  318. }
  319.  
  320. if (team == "B")
  321. {
  322. ped = GTA.World.CreatePed(model_names[r.Next(0, model_names.Count)], spawnLocB);
  323.  
  324. //Relationship
  325. if (ped != null)
  326. {
  327. managedPedsTeamB.Add(ped);
  328. ped.RelationshipGroup = relgrpB;
  329. }
  330. }
  331.  
  332. //There should be no tasks but...
  333. ped.Task.ClearAllImmediately();
  334.  
  335. //ped.Task.FightAgainst(Game.Player.Character);
  336.  
  337. //Setting Up Health and Ammo
  338. ped.Health = 50;
  339. ped.Armor = 50;
  340.  
  341. //Weapon
  342. ped.Weapons.Give(GTA.Native.WeaponHash.Knife, 1, true, true);
  343.  
  344. //blip on the GTA map
  345. Blip blip = ped.AddBlip();
  346. if (blip != null)
  347. {
  348. if (team == "A")
  349. blip.Color = BlipColor.Yellow;
  350.  
  351. if(team == "B")
  352. blip.Color = BlipColor.Green;
  353. blip.Scale = 0.5f;
  354. }
  355.  
  356. //Output for debugging
  357. //UI.Notify(ped.Handle.ToString() + " spawned for team " + team );
  358. }
  359. else
  360. //If there are not both Spawnpoints defined
  361. UI.Notify("Press H = TeamA or J = Team B to define the teams spawnlocation at your actual position");
  362. }
  363.  
  364. //Use this for cathing the KeyUp Event
  365. void OnKeyUp(object sender, KeyEventArgs e)
  366. {
  367. //Set SpawnPos for Team A
  368. if (e.KeyCode == Keys.H)
  369. {
  370. //A Reference to the Player
  371. Ped player = Game.Player.Character;
  372.  
  373. //Use this for one meter in front of the player
  374. //spawnLoc = player.Position + (player.ForwardVector * 1);
  375.  
  376. //Define the playerpos as the spawnpos for the team
  377. spawnLocA = player.Position;
  378.  
  379. //notice that location is defined
  380. IsSpawnLocADefined = true;
  381.  
  382. //A Blip for the spawn pos
  383. Blip blip = World.CreateBlip(spawnLocA, 1.5f);
  384. blip.Color = BlipColor.Red;
  385. blip.Scale = 5f;
  386. UI.Notify("Point A is ready");
  387. }
  388.  
  389. //Set SpawnPos for Team B
  390. if (e.KeyCode == Keys.J)
  391. {
  392. //for code comments see a few lines up
  393. Ped player = Game.Player.Character;
  394. spawnLocB = player.Position;
  395.  
  396. IsSpawnLocBDefined = true;
  397.  
  398. Blip blip = World.CreateBlip(spawnLocB, 1.5f);
  399. blip.Color = BlipColor.Yellow;
  400. blip.Scale = 5f;
  401.  
  402. //feedback
  403. UI.Notify("Point B is ready");
  404. }
  405. }
  406. }
Add Comment
Please, Sign In to add comment