Advertisement
Guest User

Untitled

a guest
Jun 25th, 2018
79
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 15.85 KB | None | 0 0
  1. using GrandTheftMultiplayer.Server.API;
  2. using GrandTheftMultiplayer.Server.Constant;
  3. using GrandTheftMultiplayer.Server.Elements;
  4. using GrandTheftMultiplayer.Shared;
  5. using GrandTheftMultiplayer.Shared.Math;
  6. using Newtonsoft.Json;
  7. using System;
  8. using System.Collections.Generic;
  9. using System.Linq;
  10. using DesignatedLife;
  11.  
  12. // ReSharper disable UseObjectOrCollectionInitializer
  13.  
  14. public class Garages : Script
  15. {
  16. // private Client _player = null;
  17.  
  18. public Garages() { }
  19.  
  20. public Garages(Client player)
  21. {
  22. // _player = player;
  23. API.onClientEventTrigger += GarageHandler;
  24. }
  25.  
  26. private List<Garage> _garageList;
  27.  
  28. public void Load()
  29. {
  30. _garageList = new List<Garage>();
  31. var db = new GtavEntities();
  32. var rows = db.garages.Where(v => v.active);
  33.  
  34. foreach (var garage in rows)
  35. {
  36. var position = new Vector3().fromJson(garage.point_coord);
  37. var exitPosition = new Vector3().fromJson(garage.exit_coord);
  38. var heading = (garage.exit_heading);
  39. var license = "";
  40.  
  41. if (garage.license != null)
  42. license = garage.license;
  43.  
  44. _garageList.Add(new Garage(garage.garage_id, position, exitPosition, garage.exit_heading, garage.exit_heading, garage.type, garage.visible, license));
  45. }
  46.  
  47. foreach (var garage in _garageList)
  48. {
  49. if (garage.Type == "Car") {
  50. var CarGaragePed = API.createPed(PedHash.JewelSec01, new Vector3(garage.Position.X, garage.Position.Y, garage.Position.Z), garage.Exit_heading, 0);
  51. // API.setEntityData(GaragePed, "Garage", true);
  52. API.setEntityData(CarGaragePed, "GaragePoint", true);
  53. CarGaragePed.setData("GARAGE_ID", garage.ID);
  54. CarGaragePed.setData("LICENSE", garage.License);
  55. }
  56. if (garage.Type == "Air")
  57. {
  58. var AirGaragePed = API.createPed(PedHash.Pilot01SMM, new Vector3(garage.Position.X, garage.Position.Y, garage.Position.Z), garage.Exit_heading, 0);
  59. API.setEntityData(AirGaragePed, "GaragePoint", true);
  60. AirGaragePed.setData("GARAGE_ID", garage.ID);
  61. AirGaragePed.setData("LICENSE", garage.License);
  62. }
  63. if (garage.Type == "Car")
  64. {
  65. var BoatGaragePed = API.createPed(PedHash.BoatStaff01F, new Vector3(garage.Position.X, garage.Position.Y, garage.Position.Z), garage.Exit_heading, 0);
  66. API.setEntityData(BoatGaragePed, "GaragePoint", true);
  67. BoatGaragePed.setData("GARAGE_ID", garage.ID);
  68. BoatGaragePed.setData("LICENSE", garage.License);
  69. }
  70.  
  71.  
  72. if (garage.IsVisible) {
  73. if (garage.Type == "Car")
  74. new BlipManager().CreateBlip(garage.Position, 473, 38, "Garage");
  75. else if (garage.Type == "Air")
  76. new BlipManager().CreateBlip(garage.Position, 359, 46, "Garage - Flugzeuge");
  77. else if (garage.Type == "Ship")
  78. new BlipManager().CreateBlip(garage.Position, 356, 84, "Garage - Boote");
  79. }
  80. }
  81. }
  82.  
  83.  
  84. #region ColshapeHandlers
  85.  
  86. private void GeneralGarageHandler(Client player, String type)
  87. {
  88.  
  89. if (player == null) return;
  90. if (MenuManager.HasOpenMenu(player))
  91. MenuManager.CloseMenu(player);
  92. if (type == "GaragePoint")
  93. {
  94. CreateGarageMenu(player);
  95. return;
  96. }
  97. else
  98. {
  99. player.sendNotification("Fehler", "Es ist ein Fehler aufgetreten.", true);
  100. }
  101. }
  102.  
  103. private void GarageHandler(Client player, string eventName, params object[] arguments)
  104. {
  105. if (player == null) return;
  106. GeneralGarageHandler(player, "GaragePoint");
  107. }
  108.  
  109. private void OnGarageExitHandler(Client player, String type)
  110. {
  111. if (player == null) return;
  112. // GeneralServiceHandler(player, "ACLSServicePoint");
  113.  
  114. MenuManager.CloseMenu(player);
  115. API.resetEntityData(player, "GARAGE_ID");
  116. API.resetEntityData(player, "GARAGE_POS");
  117. API.resetEntityData(player, "GARAGE_TYPE");
  118. API.resetEntityData(player, "GARAGE_EXIT_CORD");
  119. API.resetEntityData(player, "GARAGE_EXIT_HEAD");
  120. }
  121.  
  122. /*
  123. private void OnEntityGarageHandler(Client player, String type)
  124. {
  125. if (player == null) return;
  126.  
  127. string license = API.getEntityData(player, "LICENSE");
  128. if (license != "" && !Licenses.HasLicense(player, license))
  129. {
  130. API.sendNotificationToPlayer(player, "Du hast keine Rechte um auf diese Garage zuzugreifen.", true);
  131. return;
  132. }
  133.  
  134. if (API.isPlayerInAnyVehicle(player) && PlayerVehicle.HasVehicleKey(API.getPlayerVehicle(player), player))
  135. {
  136. API.sendNotificationToPlayer(player, "Du musst aussteigen, um dein Fahrzeug einzuparken.", true);
  137. return;
  138. }
  139.  
  140. if (!API.isPlayerInAnyVehicle(player))
  141. {
  142. CreateGarageMenu(player, API.getEntityData(player, "GARAGE_ID"));
  143. }
  144. }
  145. */
  146. #endregion
  147.  
  148.  
  149. #region Menu
  150.  
  151. public void GarageMenu(Client player)
  152. {
  153. if (player == null) return;
  154. string license = API.getEntityData(player, "LICENSE");
  155. if (license != "" && !Licenses.HasLicense(player, license))
  156. {
  157. GarageHandler(player, "GaragePoint");
  158. return;
  159. }
  160. else
  161. {
  162. player.sendNotification("Kein Zugriff!", "Du hast keine Berechtigung für diese Garage.", true);
  163. return;
  164. }
  165. }
  166. private void CreateGarageMenu(Client player)
  167. {
  168.  
  169. if (MenuManager.HasOpenMenu(player)) MenuManager.CloseMenu(player);
  170.  
  171. var menu = new Menu("MainMenu", "Garage", "Mögliche Optionen:", 0, 0, Menu.MenuAnchor.MiddleRight, false, true, false);
  172. menu.BannerColor = new Color(0, 175, 175, 64);
  173. menu.Callback = GarageMenuManager;
  174.  
  175.  
  176. var db = new GtavEntities();
  177. var id = 0;
  178. var garage = db.garages.FirstOrDefault(g => g.garage_id == id);
  179.  
  180. API.setEntityData(player, "GARAGE_ID", id);
  181. API.setEntityData(player, "GARAGE_POS", garage.point_coord);
  182. API.setEntityData(player, "GARAGE_TYPE", garage.type);
  183.  
  184. List<String> CoordsPos = new List<String>();
  185. List<int> CoordsHead = new List<int>();
  186. var garageExits = db.garage_exitcoords.Where(ge => ge.garage_id == id && ge.active == true);
  187. foreach (var exitCoord in garageExits)
  188. {
  189. CoordsPos.Add(exitCoord.exit_coord.ToString());
  190. CoordsHead.Add(exitCoord.exit_heading);
  191. }
  192.  
  193. API.setEntityData(player, "GARAGE_EXIT_CORD", CoordsPos);
  194. API.setEntityData(player, "GARAGE_EXIT_HEAD", CoordsHead);
  195.  
  196. var menupoint = new MenuItem("Einparken", "", "parkIn");
  197. menupoint.RightLabel = ">";
  198. menupoint.ExecuteCallback = true;
  199. menu.Add(menupoint);
  200.  
  201. menupoint = new MenuItem("Ausparken", "", "parkOut");
  202. menupoint.RightLabel = "<";
  203. menupoint.ExecuteCallback = true;
  204. menu.Add(menupoint);
  205.  
  206. MenuManager.OpenMenu(player, menu);
  207. }
  208.  
  209. private void CreateParkInMenu(Client player)
  210. {
  211. if (MenuManager.HasOpenMenu(player)) MenuManager.CloseMenu(player);
  212.  
  213. var menu = new Menu("ParkInMenu", "Garage", "Welches Fahrzeug einparken?", 0, 0, Menu.MenuAnchor.MiddleRight, false, true, false);
  214. menu.BannerColor = new Color(0, 175, 175, 64);
  215. menu.Callback = GarageMenuManager;
  216.  
  217. var count = 0;
  218. foreach (var vehicle in API.getAllVehicles())
  219. {
  220. if (!(API.getEntityPosition(vehicle).DistanceTo(player.position) < 20)) continue;
  221. if (!PlayerVehicle.HasVehicleKey(vehicle, player)) continue;
  222.  
  223. var vehicleId = vehicle.Value.ToString();
  224. string vName = API.getEntityData(vehicle, "DISPLAY_NAME");
  225. var menupoint = new MenuItem(vName, "", vehicleId);
  226. menupoint.ExecuteCallback = true;
  227. menu.Add(menupoint);
  228. count++;
  229. }
  230.  
  231. if (count <= 0)
  232. {
  233. API.sendNotificationToPlayer(player, "Keine Fahrzeuge in der Nähe zum Einparken!", true);
  234. return;
  235. }
  236.  
  237. MenuManager.OpenMenu(player, menu);
  238. }
  239.  
  240. public void CreateParkOutMenu(Client player)
  241. {
  242. if (MenuManager.HasOpenMenu(player)) MenuManager.CloseMenu(player);
  243.  
  244. var menu = new Menu("ParkOutMenu", "Garage", "Welches Fahrzeug ausparken?", 0, 0, Menu.MenuAnchor.MiddleRight, false, true, false);
  245. menu.BannerColor = new Color(0, 175, 175, 64);
  246. menu.Callback = GarageMenuManager;
  247.  
  248. int garageId = API.getEntityData(player, "GARAGE_ID");
  249. string type = API.getEntityData(player, "GARAGE_TYPE");
  250. var userId = Player.GetUserID(player);
  251.  
  252. var db = new GtavEntities();
  253. var rows = db.vehicles.Where(v => v.user_id == userId && v.type == type && (v.garage == garageId || v.garage == 0) && v.active == 0 && v.impound == 0);
  254.  
  255. if (!rows.Any())
  256. {
  257. API.sendPictureNotificationToPlayer(player, "Du besitzt aktuell keine Fahrzeuge zum Ausparken.", "CHAR_BLANK_ENTRY", 0, 0, "~g~Garage", "");
  258. return;
  259. }
  260.  
  261. if (rows.Count() > 10) menu.FastChangeIndex = true;
  262. foreach (var row in rows)
  263. {
  264. var description = "";
  265. if (row.repair_state != null && row.fuel_current != null)
  266. {
  267. var repairState = ((int)Math.Round((double)(100 * row.repair_state) / 1000)).ToString();
  268. var fuelState = Convert.ToInt32(row.fuel_current).ToString() + " / " + Convert.ToInt32(row.fuel_max);
  269. description = "Zustand: " + repairState + "% \nTank: " + fuelState + "l";
  270. }
  271. var licPlate = row.license;
  272. var menupoint = new MenuItem(row.name, description, row.vehicle_id.ToString());
  273. menupoint.ExecuteCallback = true;
  274. menupoint.RightLabel = licPlate;
  275. menu.Add(menupoint);
  276. }
  277.  
  278. MenuManager.OpenMenu(player, menu);
  279.  
  280. }
  281.  
  282. #endregion
  283.  
  284.  
  285. #region Function
  286.  
  287. private void ParkoutVehicle(Client player, string vehicleId)
  288. {
  289. var userId = Player.GetUserID(player);
  290. var count = 0;
  291. var rangeCheck = 2;
  292.  
  293. var db1 = new GtavEntities();
  294.  
  295. int garageId = API.getEntityData(player, "GARAGE_ID");
  296.  
  297. List<String> garageExitCoords = API.getEntityData(player, "GARAGE_EXIT_CORD");
  298. List<int> garageExitHeading = API.getEntityData(player, "GARAGE_EXIT_HEAD");
  299. var garageExitsCounts = garageExitCoords.Count;
  300.  
  301. var vId = Convert.ToInt32(vehicleId);
  302. var vehicleClassdb = db1.vehicles.First(v => v.vehicle_id == vId);
  303.  
  304. foreach (var exitCoord in garageExitCoords)
  305. {
  306. var garagePosition = new Vector3().fromJson(exitCoord.ToString());
  307. var garageHeading = Convert.ToInt32(garageExitHeading[count]);
  308.  
  309. count++;
  310.  
  311. var vehicleClass = API.getVehicleClass(API.vehicleNameToModel(vehicleClassdb.hash));
  312. if (vehicleClass == 20)
  313. {
  314. garageExitsCounts = 1;
  315. rangeCheck = 6;
  316. }
  317.  
  318. var allVehicles = API.getAllVehicles();
  319. if (allVehicles.Any(allVehicle => API.getEntityPosition(allVehicle).DistanceTo(garagePosition) < rangeCheck))
  320. {
  321. if (garageExitsCounts == count)
  322. {
  323. API.sendNotificationToPlayer(player, "Es ist kein Ausparkpunkt frei!", true);
  324. return;
  325. }
  326. continue;
  327. }
  328.  
  329. var db = new GtavEntities();
  330. db.vehicles.Where(v => v.vehicle_id == vId).Where(v => v.user_id == userId).ToList().ForEach(v => { v.active = 1; v.garage = 0; });
  331. if (db.SaveChanges() <= 0)
  332. {
  333. API.sendPictureNotificationToPlayer(player, "Es ist ein Fehler aufgetreten.", "CHAR_BLANK_ENTRY", 0, 0, "~g~Garage", "");
  334. return;
  335. }
  336.  
  337. var vehicleMods = new List<string>();
  338. var neonColor = "";
  339. var rows = db.vehicle_mods.Where(v => v.vehicle_id == vId).OrderByDescending(v => v.mod_type).Select(v => new { v.mod_type, v.mod });
  340. foreach (var row in rows)
  341. {
  342. if (row.mod_type == 88)
  343. neonColor = row.mod;
  344. else
  345. vehicleMods.Add(API.toJson(new VehicleMod(row.mod_type.ToString(), row.mod)));
  346. }
  347.  
  348. var garageVehicle = db.vehicles.FirstOrDefault(v => v.vehicle_id == vId);
  349. // ReSharper disable once PossibleNullReferenceException
  350. var trunk = JsonConvert.DeserializeObject<List<string>>(garageVehicle.trunk);
  351.  
  352. var vehicle = new PlayerVehicle().Create(
  353. API.getHashKey(garageVehicle.hash),
  354. garagePosition,
  355. new Vector3(0, 0, garageHeading),
  356. garageVehicle.color1,
  357. garageVehicle.color2,
  358. userId,
  359. API.getPlayerName(player),
  360. trunk,
  361. garageVehicle.weight,
  362. Convert.ToInt32(garageVehicle.fuel_current),
  363. Convert.ToInt32(garageVehicle.fuel_max),
  364. garageVehicle.fuel_type,
  365. garageVehicle.license,
  366. garageVehicle.vehicle_id.ToString(),
  367. vehicleMods,
  368. Convert.ToInt32(garageVehicle.repair_state),
  369. Convert.ToInt32(garageVehicle.driven),
  370. garageVehicle.buy_date.ToString(),
  371. neonColor
  372. );
  373.  
  374. API.sendPictureNotificationToPlayer(player, "Das Fahrzeug wurde erfolgreich ausgeparkt.", "CHAR_BLANK_ENTRY", 0, 0, "~g~Garage", "");
  375. if (API.hasEntityData(player, "GARAGE_SIT_IN") && API.getEntityData(player, "GARAGE_SIT_IN") == "1")
  376. {
  377. API.resetEntityData(player, "GARAGE_SIT_IN");
  378. DimensionManager.JoinDimension(player, 0);
  379. API.setPlayerIntoVehicle(player, vehicle, -1);
  380. API.resetEntityData(player, "HOUSE_USING_ID");
  381. }
  382. API.sendNativeToAllPlayers(0x75DBEC174AEEAD10, vehicle, true);
  383. return;
  384. }
  385. }
  386.  
  387. private void ParkVehicle(Client player, string vehicleId)
  388. {
  389. var vehicle = new NetHandle(Convert.ToInt32(vehicleId));
  390. API.setEntityData(vehicle, "GARAGE_ID", API.getEntityData(player, "GARAGE_ID"));
  391. PlayerVehicle.ParkVehicle(player, vehicle);
  392. }
  393.  
  394. #endregion
  395.  
  396.  
  397. #region MenuHandler
  398.  
  399. private void GarageMenuManager(Client player, Menu menu, MenuItem menuItem, int itemIndex, bool forced, dynamic data)
  400. {
  401. switch (menu.Id)
  402. {
  403. case "MainMenu":
  404. switch (menuItem.Id)
  405. {
  406. case "parkIn":
  407. MenuManager.CloseMenu(player);
  408. CreateParkInMenu(player);
  409. break;
  410. case "parkOut":
  411. MenuManager.CloseMenu(player);
  412. CreateParkOutMenu(player);
  413. break;
  414. default:
  415. MenuManager.CloseMenu(player);
  416. break;
  417. }
  418. break;
  419.  
  420. case "ParkInMenu":
  421. switch (menuItem.Id)
  422. {
  423. case "close":
  424. MenuManager.CloseMenu(player);
  425. break;
  426. default:
  427. MenuManager.CloseMenu(player);
  428. ParkVehicle(player, menuItem.Id);
  429. break;
  430. }
  431. break;
  432.  
  433. case "ParkOutMenu":
  434. switch (menuItem.Id)
  435. {
  436. case "close":
  437. MenuManager.CloseMenu(player);
  438. break;
  439. default:
  440. MenuManager.CloseMenu(player);
  441. ParkoutVehicle(player, menuItem.Id);
  442. break;
  443. }
  444. break;
  445.  
  446. default:
  447. MenuManager.CloseMenu(player);
  448. break;
  449. }
  450. }
  451.  
  452. #endregion
  453. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement