Guest User

PPC_Convoys

a guest
Sep 11th, 2012
173
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 15.39 KB | None | 0 0
  1. forward Convoy_Timer(Convoy);
  2. Convoys_Init()
  3. {
  4. for (new i; i < MAX_CONVOYS; i++)
  5. {
  6. AConvoys[i][ConvoyTextLeader] = TextDrawCreate(320.0, 1.0, " ");
  7. TextDrawSetShadow(AConvoys[i][ConvoyTextLeader], 1);
  8. TextDrawAlignment(AConvoys[i][ConvoyTextLeader], 2);
  9. TextDrawUseBox(AConvoys[i][ConvoyTextLeader], 1);
  10. TextDrawBoxColor(AConvoys[i][ConvoyTextLeader] ,0x00000066);
  11.  
  12. AConvoys[i][ConvoyTextMember] = TextDrawCreate(320.0, 1.0, " ");
  13. TextDrawSetShadow(AConvoys[i][ConvoyTextLeader], 1);
  14. TextDrawAlignment(AConvoys[i][ConvoyTextMember], 2);
  15. TextDrawUseBox(AConvoys[i][ConvoyTextMember], 1);
  16. TextDrawBoxColor(AConvoys[i][ConvoyTextMember] ,0x00000066);
  17. }
  18. }
  19. Convoy_Create(playerid, Convoy)
  20. {
  21. new Name[24], Msg[128];
  22. GetPlayerName(playerid, Name, sizeof(Name));
  23. if (Convoy_PlayerAllowed(playerid))
  24. {
  25. AConvoys[Convoy][Status] = CONVOY_OPEN;
  26. AConvoys[Convoy][Members][0] = playerid;
  27. APlayerData[playerid][InConvoy] = true;
  28. APlayerData[playerid][ConvoyID] = Convoy;
  29. for (new i = 1; i < CONVOY_MAX_MEMBERS; i++)
  30. AConvoys[Convoy][Members][i] = -1;
  31. AConvoys[Convoy][ConvoyTimer] = SetTimerEx("Convoy_Timer", 1000, true, "i", Convoy);
  32. format(Msg, 128, TXT_PlayerStartsConvoy, Name);
  33. SendClientMessageToAll(0xFFFFFFFF, Msg);
  34. }
  35. }
  36. Convoy_Join(playerid, Convoy)
  37. {
  38. new Name[24], Msg[128];
  39. GetPlayerName(playerid, Name, sizeof(Name));
  40. if (Convoy_PlayerAllowed(playerid))
  41. {
  42. if (Convoy_CountMembers(Convoy) < CONVOY_MAX_MEMBERS)
  43. {
  44. format(Msg, 128, TXT_PlayerJoinedConvoy, Name);
  45. Convoy_SendMessage(Convoy, Msg);
  46. SendClientMessage(playerid, 0xFFFFFFFF, TXT_YouJoinedConvoy);
  47. for (new i; i < CONVOY_MAX_MEMBERS; i++)
  48. {
  49. if (AConvoys[Convoy][Members][i] == -1)
  50. {
  51. AConvoys[Convoy][Members][i] = playerid;
  52. break;
  53. }
  54. }
  55. APlayerData[playerid][InConvoy] = true;
  56. APlayerData[playerid][ConvoyID] = Convoy;
  57. if (Convoy_CountMembers(Convoy) == CONVOY_MAX_MEMBERS)
  58. AConvoys[Convoy][Status] = CONVOY_FULL;
  59. TextDrawSetString(APlayerData[playerid][MissionText], TXT_WaitingLeaderJob);
  60. }
  61. else
  62. SendClientMessage(playerid, 0xFFFFFFFF, TXT_ConvoyFull);
  63. }
  64. }
  65. Convoy_Leave(playerid)
  66. {
  67. new Convoy, NumMembers, MemberID;
  68. if (APlayerData[playerid][InConvoy] == false)
  69. return 1;
  70. Convoy = APlayerData[playerid][ConvoyID];
  71. NumMembers = Convoy_CountMembers(Convoy);
  72. if (NumMembers == 1)
  73. {
  74. Convoy_Cancel(Convoy);
  75. return 1;
  76. }
  77. APlayerData[playerid][InConvoy] = false;
  78. APlayerData[playerid][ConvoyID] = 0;
  79. TextDrawHideForPlayer(playerid, AConvoys[Convoy][ConvoyTextLeader]);
  80. TextDrawHideForPlayer(playerid, AConvoys[Convoy][ConvoyTextMember]);
  81. if (APlayerData[playerid][JobStarted] == false)
  82. TextDrawSetString(APlayerData[playerid][MissionText], Trucker_NoJobText);
  83. if (AConvoys[Convoy][Members][0] == playerid)
  84. {
  85. for (new j = 1; j < CONVOY_MAX_MEMBERS; j++)
  86. {
  87. MemberID = AConvoys[Convoy][Members][j];
  88. if (MemberID != -1)
  89. {
  90. TextDrawHideForPlayer(MemberID, AConvoys[Convoy][ConvoyTextMember]);
  91. AConvoys[Convoy][Members][0] = MemberID;
  92. AConvoys[Convoy][Members][j] = -1;
  93. return 1;
  94. }
  95. }
  96. }
  97. else
  98. {
  99. for (new i = 1; i < CONVOY_MAX_MEMBERS; i++)
  100. {
  101. if (AConvoys[Convoy][Members][i] == playerid)
  102. {
  103. AConvoys[Convoy][Members][i] = -1;
  104. Trucker_EndJob(playerid);
  105.  
  106. return 1;
  107. }
  108. }
  109. }
  110. return 1;
  111. }
  112. Convoy_Cancel(Convoy)
  113. {
  114. new MemberID;
  115. for (new i; i < CONVOY_MAX_MEMBERS; i++)
  116. {
  117. MemberID = AConvoys[Convoy][Members][i];
  118. if (MemberID != -1)
  119. {
  120. APlayerData[MemberID][InConvoy] = false;
  121. APlayerData[MemberID][ConvoyID] = 0;
  122. TextDrawHideForPlayer(MemberID, AConvoys[Convoy][ConvoyTextLeader]);
  123. TextDrawHideForPlayer(MemberID, AConvoys[Convoy][ConvoyTextMember]);
  124. Trucker_EndJob(MemberID);
  125. AConvoys[Convoy][Members][i] = -1;
  126. SendClientMessage(MemberID, 0xFFFFFFFF, TXT_LeaderCancelledConvoy);
  127. }
  128. }
  129. AConvoys[Convoy][LoadID] = 0;
  130. AConvoys[Convoy][Location1] = 0;
  131. AConvoys[Convoy][Location2] = 0;
  132. AConvoys[Convoy][Status] = CONVOY_EMPTY;
  133. AConvoys[Convoy][ConvoyStep] = 0;
  134. AConvoys[Convoy][TrailerModel] = 0;
  135. AConvoys[Convoy][LeaderInformedTrailers] = false;
  136. KillTimer(AConvoys[Convoy][ConvoyTimer]);
  137. }
  138. Convoy_StartMemberJob(playerid, Convoy)
  139. {
  140. new StartLoc[50], EndLoc[50], Load[50], RouteText[255], Float:x, Float:y, Float:z, LoadMsg[128];
  141. APlayerData[playerid][JobStarted] = true;
  142. APlayerData[playerid][LoadID] = AConvoys[Convoy][LoadID];
  143. APlayerData[playerid][JobLoc1] = AConvoys[Convoy][Location1];
  144. APlayerData[playerid][JobLoc2] = AConvoys[Convoy][Location2];
  145. APlayerData[playerid][VehicleID] = GetPlayerVehicleID(playerid);
  146. APlayerData[playerid][TrailerID] = GetVehicleTrailer(GetPlayerVehicleID(playerid));
  147. APlayerData[playerid][JobStep] = 1;
  148. format(StartLoc, 50, ALocations[APlayerData[playerid][JobLoc1]][LocationName]);
  149. format(EndLoc, 50, ALocations[APlayerData[playerid][JobLoc2]][LocationName]);
  150. format(Load, 50, ALoads[APlayerData[playerid][LoadID]][LoadName]);
  151. format(RouteText, 255, TXT_HaulingCargoFromToPickup, Load, StartLoc, EndLoc);
  152. TextDrawSetString(APlayerData[playerid][MissionText], RouteText);
  153. x = ALocations[APlayerData[playerid][JobLoc1]][LocX];
  154. y = ALocations[APlayerData[playerid][JobLoc1]][LocY];
  155. z = ALocations[APlayerData[playerid][JobLoc1]][LocZ];
  156. SetPlayerCheckpoint(playerid, x, y, z, 7);
  157. APlayerData[playerid][VehicleTimerTime] = Job_TimeToFailMission;
  158. format(LoadMsg, 128, TXT_PickupCargoAt, Load, StartLoc);
  159. SendClientMessage(playerid, 0xFFFFFFFF, LoadMsg);
  160. SendClientMessage(playerid, 0xFFFFFFFF, TXT_MeetOtherConvoyMembers);
  161. }
  162. Convoy_UpdateMemberJob(playerid)
  163. {
  164. new StartLoc[50], EndLoc[50], Load[50], RouteText[255], Float:x, Float:y, Float:z, UnloadMsg[128];
  165. APlayerData[playerid][JobStep] = 3;
  166. format(StartLoc, 50, ALocations[APlayerData[playerid][JobLoc1]][LocationName]);
  167. format(EndLoc, 50, ALocations[APlayerData[playerid][JobLoc2]][LocationName]);
  168. format(Load, 50, ALoads[APlayerData[playerid][LoadID]][LoadName]);
  169. format(RouteText, 255, TXT_HaulingCargoFromToDeliver, Load, StartLoc, EndLoc);
  170. TextDrawSetString(APlayerData[playerid][MissionText], RouteText);
  171. x = ALocations[APlayerData[playerid][JobLoc2]][LocX];
  172. y = ALocations[APlayerData[playerid][JobLoc2]][LocY];
  173. z = ALocations[APlayerData[playerid][JobLoc2]][LocZ];
  174. SetPlayerCheckpoint(playerid, x, y, z, 7);
  175. format(UnloadMsg, 128, TXT_DeliverCargoTo, Load, EndLoc);
  176. SendClientMessage(playerid, 0xFFFFFFFF, UnloadMsg);
  177. }
  178. public Convoy_Timer(Convoy)
  179. {
  180. new LeaderID, MemberID;
  181. Convoy_UpdateTextDraws(Convoy);
  182. LeaderID = AConvoys[Convoy][Members][0];
  183. switch (AConvoys[Convoy][ConvoyStep])
  184. {
  185. case 0:
  186. {
  187. new bool:AllSameTrailer = true;
  188. if (APlayerData[LeaderID][JobStarted] == true)
  189. {
  190. AConvoys[Convoy][LoadID] = APlayerData[LeaderID][LoadID];
  191. AConvoys[Convoy][Location1] = APlayerData[LeaderID][JobLoc1];
  192. AConvoys[Convoy][Location2] = APlayerData[LeaderID][JobLoc2];
  193. AConvoys[Convoy][TrailerModel] = GetVehicleModel(GetVehicleTrailer(GetPlayerVehicleID(LeaderID)));
  194. if (AConvoys[Convoy][TrailerModel] != 0)
  195. {
  196. for (new i = 1; i < CONVOY_MAX_MEMBERS; i++)
  197. {
  198. MemberID = AConvoys[Convoy][Members][i];
  199. if (MemberID != -1)
  200. {
  201. if (GetVehicleModel(GetVehicleTrailer(GetPlayerVehicleID(MemberID))) != AConvoys[Convoy][TrailerModel])
  202. {
  203. switch (AConvoys[Convoy][TrailerModel])
  204. {
  205. case VehicleTrailerCargo, VehicleTrailerCargo2: TextDrawSetString(APlayerData[MemberID][MissionText], TXT_MemberNeedsCargoTrailer);
  206. case VehicleTrailerOre: TextDrawSetString(APlayerData[MemberID][MissionText], TXT_MemberNeedsOreTrailer);
  207. case VehicleTrailerFluids: TextDrawSetString(APlayerData[MemberID][MissionText], TXT_MemberNeedsFluidsTrailer);
  208. }
  209. AllSameTrailer = false;
  210. }
  211. }
  212. }
  213. }
  214. else
  215. {
  216. for (new i = 1; i < CONVOY_MAX_MEMBERS; i++)
  217. {
  218. MemberID = AConvoys[Convoy][Members][i];
  219. if (MemberID != -1)
  220. {
  221. new vModel = GetVehicleModel(GetPlayerVehicleID(MemberID));
  222. switch (vModel)
  223. {
  224. case VehicleFlatbed, VehicleDFT30: AllSameTrailer = true;
  225. default:
  226. {
  227. TextDrawSetString(APlayerData[MemberID][MissionText], "Você precisa de um Flatbed ou DFT-30");
  228. AllSameTrailer = false;
  229. }
  230. }
  231. }
  232. }
  233. }
  234. if (AllSameTrailer == true)
  235. {
  236. SendClientMessage(LeaderID, 0xFFFFFFFF, TXT_AllMembersSameTrailer);
  237. for (new i = 1; i < CONVOY_MAX_MEMBERS; i++)
  238. {
  239. MemberID = AConvoys[Convoy][Members][i];
  240. if (MemberID != -1)
  241. Convoy_StartMemberJob(MemberID, Convoy);
  242. }
  243. AConvoys[Convoy][ConvoyStep] = 1;
  244. AConvoys[Convoy][Status] = CONVOY_CLOSED;
  245. }
  246. else
  247. {
  248. if (AConvoys[Convoy][LeaderInformedTrailers] == false)
  249. {
  250. SendClientMessage(LeaderID, 0xFFFFFFFF, TXT_AllMembersNotSameTrailer);
  251. AConvoys[Convoy][LeaderInformedTrailers] = true;
  252. }
  253. }
  254. }
  255. }
  256. case 1:
  257. {
  258. new bool:AllMembersLoaded = true;
  259. for (new i; i < CONVOY_MAX_MEMBERS; i++)
  260. {
  261. MemberID = AConvoys[Convoy][Members][i];
  262. if (MemberID != -1)
  263. if (APlayerData[MemberID][JobStep] != 2)
  264. AllMembersLoaded = false;
  265. }
  266. if (AllMembersLoaded == true)
  267. {
  268. SendClientMessage(LeaderID, 0xFFFFFFFF, TXT_AllMembersLoadedCargo);
  269. for (new i; i < CONVOY_MAX_MEMBERS; i++)
  270. {
  271. MemberID = AConvoys[Convoy][Members][i];
  272. if (MemberID != -1)
  273. Convoy_UpdateMemberJob(MemberID);
  274. }
  275. AConvoys[Convoy][ConvoyStep] = 2;
  276. }
  277. }
  278. case 2:
  279. {
  280. new bool:AllMembersUnloaded = true;
  281. for (new i; i < CONVOY_MAX_MEMBERS; i++)
  282. {
  283. MemberID = AConvoys[Convoy][Members][i];
  284. if (MemberID != -1)
  285. if (APlayerData[MemberID][JobStep] != 4)
  286. AllMembersUnloaded = false;
  287. }
  288. if (AllMembersUnloaded == true)
  289. AConvoys[Convoy][ConvoyStep] = 3;
  290. }
  291. case 3:
  292. {
  293. new Float:x1, Float:y1, Float:x2, Float:y2, Float:Distance, Message[128], Payment, Bonus, NumMembers, Name[24], BonusMsg[128];
  294. NumMembers = Convoy_CountMembers(Convoy);
  295. GetPlayerName(LeaderID, Name, sizeof(Name));
  296. x1 = ALocations[APlayerData[LeaderID][JobLoc1]][LocX];
  297. y1 = ALocations[APlayerData[LeaderID][JobLoc1]][LocY];
  298. x2 = ALocations[APlayerData[LeaderID][JobLoc2]][LocX];
  299. y2 = ALocations[APlayerData[LeaderID][JobLoc2]][LocY];
  300. Distance = floatsqroot(((x2 - x1) * (x2 - x1)) + ((y2 - y1) * (y2 - y1)));
  301. Payment = floatround((Distance * ALoads[APlayerData[LeaderID][LoadID]][PayPerUnit]), floatround_floor);
  302. if (RandomBonusMission[MissionFinished] == false)
  303. {
  304. if (RandomBonusMission[RandomLoad] == APlayerData[LeaderID][LoadID])
  305. if (RandomBonusMission[RandomStartLoc] == APlayerData[LeaderID][JobLoc1])
  306. if (RandomBonusMission[RandomEndLoc] == APlayerData[LeaderID][JobLoc2])
  307. {
  308. Payment = Payment * 2;
  309. RandomBonusMission[MissionFinished] = true;
  310. format(BonusMsg, 128, "{00BBFF}O Comboio do líder {FFBB00}%s{00BBFF} finalizou a missão bonus.", Name);
  311. SendClientMessageToAll(0xFFFFFFFF, BonusMsg);
  312. }
  313. }
  314. Bonus = (NumMembers * 30) + 100;
  315. Payment = (Payment * Bonus) / 100;
  316. for (new i; i < CONVOY_MAX_MEMBERS; i++)
  317. {
  318. MemberID = AConvoys[Convoy][Members][i];
  319. if (MemberID != -1)
  320. {
  321. RewardPlayer(MemberID, Payment, 5);
  322. APlayerData[MemberID][StatsConvoyJobs]++;
  323. PlayerFile_Save(MemberID);
  324. Trucker_EndJob(MemberID);
  325. format(Message, 128, TXT_FinishedConvoy, Payment);
  326. SendClientMessage(MemberID, 0xFFFFFFFF, Message);
  327. if (i != 0)
  328. TextDrawSetString(APlayerData[MemberID][MissionText], TXT_WaitingLeaderJob);
  329. }
  330. }
  331. AConvoys[Convoy][LoadID] = 0;
  332. AConvoys[Convoy][Location1] = 0;
  333. AConvoys[Convoy][Location2] = 0;
  334. AConvoys[Convoy][Status] = CONVOY_OPEN;
  335. AConvoys[Convoy][ConvoyStep] = 0;
  336. AConvoys[Convoy][TrailerModel] = 0;
  337. AConvoys[Convoy][LeaderInformedTrailers] = false;
  338. }
  339. }
  340. return 1;
  341. }
  342. Convoy_UpdateTextDraws(Convoy)
  343. {
  344. new LeaderID, MemberID, LeaderName[24], NumMembers, TextLeader[128], TextMember[128], LastMember[24], LastMemberID, Float:Distance;
  345. LeaderID = AConvoys[Convoy][Members][0];
  346. GetPlayerName(LeaderID, LeaderName, sizeof(LeaderName));
  347. NumMembers = Convoy_CountMembers(Convoy);
  348. if (NumMembers > 1)
  349. {
  350. LastMemberID = Convoy_GetFurthestMember(Convoy);
  351. GetPlayerName(LastMemberID, LastMember, sizeof(LastMember));
  352. Distance = PlayerToPlayer(LeaderID, LastMemberID);
  353. }
  354. else
  355. {
  356. format(LastMember, 24, " - ");
  357. Distance = 0.0;
  358. }
  359. format(TextLeader, 128, TXT_LeaderInfoBar, NumMembers, LastMember, Distance);
  360. TextDrawSetString(AConvoys[Convoy][ConvoyTextLeader], TextLeader);
  361. TextDrawShowForPlayer(LeaderID, AConvoys[Convoy][ConvoyTextLeader]);
  362. for (new i = 1; i < CONVOY_MAX_MEMBERS; i++)
  363. {
  364. MemberID = AConvoys[Convoy][Members][i];
  365. if (MemberID != -1)
  366. {
  367. Distance = PlayerToPlayer(LeaderID, MemberID);
  368. format(TextMember, 128, TXT_MemberInfoBar, LeaderName, Distance, NumMembers);
  369. TextDrawSetString(AConvoys[Convoy][ConvoyTextMember], TextMember);
  370. TextDrawShowForPlayer(MemberID, AConvoys[Convoy][ConvoyTextMember]);
  371. }
  372. }
  373. }
  374. Convoy_CountMembers(Convoy)
  375. {
  376. new NumMembers;
  377. for (new i; i < CONVOY_MAX_MEMBERS; i++)
  378. {
  379. if (AConvoys[Convoy][Members][i] != -1)
  380. NumMembers++;
  381. }
  382. return NumMembers;
  383. }
  384. Convoy_PlayerAllowed(playerid)
  385. {
  386. if (APlayerData[playerid][PlayerClass] == ClassTruckDriver)
  387. {
  388. if (APlayerData[playerid][InConvoy] == false)
  389. {
  390. if (APlayerData[playerid][JobStarted] == false)
  391. return true;
  392. else
  393. SendClientMessage(playerid, 0xFFFFFFFF, TXT_CannotJoinJobStarted);
  394. }
  395. else
  396. SendClientMessage(playerid, 0xFFFFFFFF, TXT_ConvoyAllreadyJoined);
  397. }
  398. else
  399. SendClientMessage(playerid, 0xFFFFFFFF, TXT_ConvoyNeedsTruckerClass);
  400. return false;
  401. }
  402. Convoy_SendMessage(Convoy, Message[])
  403. {
  404. new MemberID;
  405. for (new i; i < CONVOY_MAX_MEMBERS; i++)
  406. {
  407. MemberID = AConvoys[Convoy][Members][i];
  408. if (MemberID != -1)
  409. {
  410. SendClientMessage(MemberID, 0xFFFFFFFF, Message);
  411. }
  412. }
  413. }
  414. stock Convoy_IsLeader(playerid, Convoy)
  415. {
  416. if ((APlayerData[playerid][InConvoy] == true) && (AConvoys[Convoy][Members][0] = playerid))
  417. return true;
  418. else
  419. return false;
  420. }
  421. stock Convoy_IsMember(playerid, Convoy)
  422. {
  423. for (new i = 1; i < CONVOY_MAX_MEMBERS; i++)
  424. if (AConvoys[Convoy][Members][i] == playerid)
  425. return true;
  426. return false;
  427. }
  428. Convoy_GetFurthestMember(Convoy)
  429. {
  430. new Float:distance = 0.0, Float:distance2 = 0.0, LeaderID, MemberID, result = -1;
  431. LeaderID = AConvoys[Convoy][Members][0];
  432. for(new i = 1; i < CONVOY_MAX_MEMBERS; i++)
  433. {
  434. MemberID = AConvoys[Convoy][Members][i];
  435. if (MemberID != -1)
  436. {
  437. distance2 = PlayerToPlayer(LeaderID, MemberID);
  438. if(distance2 > distance)
  439. {
  440. distance = distance2;
  441. result = MemberID;
  442. }
  443. }
  444. }
  445. return result;
  446. }
  447. PlayerToPlayer(player1, player2)
  448. {
  449. new Float:pX, Float:pY, Float:pZ, Float:cX, Float:cY, Float:cZ, Float:distance;
  450. GetPlayerPos(player1, pX, pY, pZ);
  451. GetPlayerPos(player2, cX, cY, cZ);
  452. distance = floatsqroot(floatpower(floatabs(floatsub(cX, pX)), 2) + floatpower(floatabs(floatsub(cY, pY)), 2) + floatpower(floatabs(floatsub(cZ, pZ)), 2));
  453. return floatround(distance);
  454. }
Advertisement
Add Comment
Please, Sign In to add comment