gangshipment.pwn 9.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255
  1. /*
  2. Shipment System by Dom
  3. */
  4. #include <YSI\y_hooks>
  5. #define MAX_SHIPMENT_POINTS 4
  6. new SHIPMENT_MATS_NEEDED = 60;
  7. #define SHIPMENT_TYPE_ARMS 1
  8. #define SHIPMENT_TYPE_DRUGS 2
  9. new Float:arrShipPositions[2][3] = {
  10. {-1450.52, 1506.85, 0.0}, // large container ship with stairs
  11. {-2329.41, 1524.87, 0.75} // container ship nearer to Gant Bridge
  12. };
  13. new Float:arrDeliverPositions[MAX_SHIPMENT_POINTS][3] = {
  14. {-2686.3425,-2196.2932,-0.7420}, // Whetstone - Chilliad Beach
  15. {-1722.5935,230.6965,-0.6083}, // SF Docks
  16. {2289.6096,-2433.3176,-0.5133}, // Ocean Docks
  17. {2960.0776,-538.0289,-0.0771} // east beach
  18. };
  19. new Float:arrShipmentTrucks[MAX_SHIPMENT_POINTS][3] = {
  20. {-2650.3557,-2260.4309,6.7077}, // Whetstone - Chilliad Beach
  21. {-1725.7112,219.3324,3.6448}, // SF Docks
  22. {2294.1125,-2393.9399,13.5469}, // Ocean Docks
  23. {2912.3601,-554.3483,11.1824} // east beach
  24. };
  25. CMD:gshipmentstocks(playerid, params[]) {
  26. if(PlayerInfo[playerid][pAdmin] < 3) return SendClientMessageEx(playerid, COLOR_GRAD2, "You are not authorized to use this command.");
  27. szMiscArray[0] = 0;
  28. format(szMiscArray, sizeof(szMiscArray), "Stock needed: %d", SHIPMENT_MATS_NEEDED);
  29. SendClientMessage(playerid, COLOR_WHITE, szMiscArray);
  30. for(new i = 0; i < MAX_SHIPMENT_POINTS; i++) {
  31. format(szMiscArray, sizeof(szMiscArray), "%s: %i", GetStockPointName(i), arrGangShipmentData[i][gs_iStock]);
  32. SendClientMessage(playerid, COLOR_WHITE, szMiscArray);
  33. }
  34. return 1;
  35. }
  36. LoadShipment(playerid) {
  37. SetPVarInt(playerid, "LoadShipmentTime", 5);
  38. TogglePlayerControllable(playerid, 0);
  39. SetPVarInt(playerid, "IsFrozen", 1);
  40. SetTimerEx("OnLoadShipment", 1000, false, "i", playerid);
  41. return 1;
  42. }
  43. DeliverShipment(playerid, iShipmentPoint) {
  44. arrGangShipmentData[iShipmentPoint][gs_iStock]++;
  45. szMiscArray[0] = 0;
  46. GivePlayerCash(playerid, 20000);
  47. SendClientMessage(playerid, COLOR_WHITE, "You have been given $20,000 for completing your assigned delivery.");
  48. DeletePVar(playerid, "DeliveringShipment");
  49. DeletePVar(playerid, "ShipmentCallActive");
  50. ClearCheckpoint(playerid);
  51. if(arrGangShipmentData[iShipmentPoint][gs_iStock] >= SHIPMENT_MATS_NEEDED) {
  52. arrGangShipmentData[iShipmentPoint][gs_iVehicle] = CreateVehicle(482, arrShipmentTrucks[iShipmentPoint][0], arrShipmentTrucks[iShipmentPoint][1], arrShipmentTrucks[iShipmentPoint][2], 0, random(128), random(128), 60 * 5);
  53. arrGangShipmentData[iShipmentPoint][gs_iStock] -= SHIPMENT_MATS_NEEDED;
  54. foreach(new i : Player) {
  55. if((0 <= PlayerInfo[i][pMember] < MAX_GROUPS) && arrGroupData[PlayerInfo[i][pMember]][g_iGroupType] == GROUP_TYPE_CRIMINAL) {
  56. format(szMiscArray, sizeof(szMiscArray), "{FF0000}Alert: {FFFFFF}An unknown shipment has been delivered to %s", GetStockPointName(iShipmentPoint));
  57. SendClientMessageEx(playerid, COLOR_YELLOW, szMiscArray);
  58. }
  59. }
  60. }
  61. g_mysql_SaveMOTD();
  62. return 1;
  63. }
  64. /*ReturnShipmentType(iShipmentPoint) {
  65. switch(iShipmentPoint) {
  66. case 0, 1: return SHIPMENT_TYPE_ARMS;
  67. case 2, 3: return SHIPMENT_TYPE_DRUGS;
  68. }
  69. return -1;
  70. }*/
  71. GetStockPointName(iShipmentPoint) {
  72. new szReturn[20];
  73. switch(iShipmentPoint) {
  74. case 0: szReturn = "Whetstone Beach";
  75. case 1: szReturn = "San Fierro Docks";
  76. case 2: szReturn = "Los Santos Airport";
  77. case 3: szReturn = "East Beach";
  78. }
  79. return szReturn;
  80. }
  81. forward ShipmentConvo(playerid, iStage);
  82. public ShipmentConvo(playerid, iStage) {
  83. switch(iStage) {
  84. case 1: {
  85. SendClientMessageEx(playerid, COLOR_YELLOW, "(cellphone) Unknown Caller says: Ayo ese I've got a job for ya.");
  86. SetTimerEx("ShipmentConvo", 3000, false, "ii", playerid, 2);
  87. }
  88. case 2: {
  89. SendClientMessageEx(playerid, COLOR_YELLOW, "(cellphone) Unknown Caller says: I need an overseas shipment taken care of homie.");
  90. SendClientMessageEx(playerid, COLOR_YELLOW, "(cellphone) Unknown Caller says: Can I trust you with my shit?");
  91. SetTimerEx("ShipmentConvo", 5000, false, "ii", playerid, 3);
  92. }
  93. case 3: {
  94. SendClientMessageEx(playerid, COLOR_YELLOW, "(cellphone) Unknown Caller says: I'm sending you the coordinates right now.");
  95. SendClientMessageEx(playerid, COLOR_YELLOW, "(cellphone) Unknown Caller says: Get a boat and head over there ASAP!");
  96. SendClientMessageEx(playerid, COLOR_GRAD2, " They hung up.");
  97. SendClientMessageEx(playerid, COLOR_LIGHTBLUE, "Get a boat and head to the location marked on your minimap.");
  98. new rand = random(2);
  99. SetPlayerCheckpoint(playerid, arrShipPositions[rand][0], arrShipPositions[rand][1], arrShipPositions[rand][2], 4);
  100. gPlayerCheckpointStatus[playerid] = CHECKPOINT_LOADSHIPMENT;
  101. }
  102. }
  103. return 1;
  104. }
  105. forward OnLoadShipment(playerid);
  106. public OnLoadShipment(playerid) {
  107. new iLoadTime = GetPVarInt(playerid, "LoadShipmentTime");
  108. szMiscArray[0] = 0;
  109. SetPVarInt(playerid, "LoadShipmentTime", iLoadTime - 1);
  110. format(szMiscArray, sizeof(szMiscArray), "~n~~n~~n~~n~~n~~n~~n~~n~~n~~w~%d seconds left", iLoadTime);
  111. GameTextForPlayer(playerid, szMiscArray, 1100, 3);
  112. if(iLoadTime > 0) return SetTimerEx("OnLoadShipment", 1000, false, "i", playerid);
  113. new rand = random(4);
  114. SetPlayerCheckpoint(playerid, arrDeliverPositions[rand][0], arrDeliverPositions[rand][1], arrDeliverPositions[rand][2], 4);
  115. SetPVarInt(playerid, "DeliveringShipment", 1);
  116. gPlayerCheckpointStatus[playerid] = CHECKPOINT_DELIVERSHIPMENT;
  117. SendClientMessageEx(playerid, COLOR_YELLOW, "Follow your way to the marker to deliver your shipment.");
  118. DeletePVar(playerid, "LoadShipmentTime");
  119. DeletePVar(playerid, "IsFrozen");
  120. TogglePlayerControllable(playerid, 1);
  121. return 1;
  122. }
  123. hook OnPlayerEnterCheckpoint(playerid) {
  124. switch(gPlayerCheckpointStatus[playerid]) {
  125. case CHECKPOINT_LOADSHIPMENT: {
  126. if(IsABoat(GetPlayerVehicleID(playerid))) {
  127. if(GetPVarType(playerid, "ShipmentCallActive") == 1) {
  128. for(new i = 0; i < MAX_SHIPMENT_POINTS; i++) {
  129. if(IsPlayerInRangeOfPoint(playerid, 5.0, arrShipPositions[i][0], arrShipPositions[i][1], arrShipPositions[i][2]))
  130. return LoadShipment(playerid);
  131. }
  132. }
  133. }
  134. else SendClientMessageEx(playerid, COLOR_WHITE, "You must be in a boat");
  135. }
  136. case CHECKPOINT_DELIVERSHIPMENT: {
  137. if(IsABoat(GetPlayerVehicleID(playerid))) {
  138. if(GetPVarType(playerid, "DeliveringShipment") == 1) {
  139. for(new i = 0; i < MAX_SHIPMENT_POINTS; i++) {
  140. if(IsPlayerInRangeOfPoint(playerid, 5.0, arrDeliverPositions[i][0], arrDeliverPositions[i][1], arrDeliverPositions[i][2]))
  141. return DeliverShipment(playerid, i);
  142. }
  143. }
  144. }
  145. else SendClientMessageEx(playerid, COLOR_WHITE, "You must be in a boat");
  146. }
  147. }
  148. return 1;
  149. }
  150. CMD:delivershipment(playerid, params[]) {
  151. new iVehID = GetPlayerVehicleID(playerid);
  152. new iGroupID = PlayerInfo[playerid][pMember];
  153. szMiscArray[0] = 0;
  154. if(!IsACriminal(playerid)) return SendClientMessageEx(playerid, COLOR_WHITE, "You are not in a criminal organization.");
  155. if(!IsAGangShipmentTruck(iVehID) || !iVehID) return SendClientMessageEx(playerid, COLOR_WHITE, "You are not in a shipment truck!");
  156. if(IsPlayerInRangeOfPoint(playerid, 5.0, arrGroupData[iGroupID][g_fCratePos][0], arrGroupData[iGroupID][g_fCratePos][1], arrGroupData[iGroupID][g_fCratePos][2])) {
  157. for(new v = 0; v < MAX_SHIPMENT_POINTS; v++) {
  158. if(iVehID == arrGangShipmentData[v][gs_iVehicle]) {
  159. RemovePlayerFromVehicle(playerid);
  160. GenerateShipmentStock(iGroupID, SHIPMENT_TYPE_ARMS);
  161. DestroyVehicle(iVehID);
  162. arrGangShipmentData[v][gs_iVehicle] = INVALID_VEHICLE_ID;
  163. SendClientMessageEx(playerid, COLOR_WHITE, "You have delivered your shipment to your group.");
  164. format(szMiscArray, sizeof(szMiscArray), "%s has delivered a shipment.", GetPlayerNameEx(playerid));
  165. GroupLog(iGroupID, szMiscArray);
  166. break;
  167. }
  168. }
  169. }
  170. return 1;
  171. }
  172. CMD:editshipment(playerid, params[])
  173. {
  174. if(PlayerInfo[playerid][pAdmin] < 99999) return SendClientMessageEx(playerid, COLOR_GRAD2, "You are not authorized to use this command.");
  175. new val;
  176. if(sscanf(params, "d", val) || val <= 0) return SendClientMessageEx(playerid, COLOR_GRAD2, "USAGE: /editshipment [value]");
  177. format(szMiscArray, sizeof(szMiscArray), "You have edited the mats needed for gang shipments to: %d (Previously: %d)", val, SHIPMENT_MATS_NEEDED);
  178. SendClientMessageEx(playerid, COLOR_GRAD2, szMiscArray);
  179. format(szMiscArray, sizeof(szMiscArray), "%s has edited the mats needed for gang shipments to: %d (Previously: %d)", val, SHIPMENT_MATS_NEEDED);
  180. Log("logs/admin.log", szMiscArray);
  181. SHIPMENT_MATS_NEEDED = val;
  182. g_mysql_SaveMOTD();
  183. return 1;
  184. }
  185. forward LoadGangShipmentData(i);
  186. public LoadGangShipmentData(i)
  187. {
  188. szMiscArray[0] = 0;
  189. for(new j = 0; j != MAX_SHIPMENT_POINTS; j++)
  190. {
  191. format(szMiscArray, sizeof(szMiscArray), "gs_iStock%d", j);
  192. arrGangShipmentData[j][gs_iStock] = cache_get_field_content_int(i, szMiscArray, MainPipeline);
  193. }
  194. SHIPMENT_MATS_NEEDED = cache_get_field_content_int(i, "SHIPMENT_MATS_NEEDED", MainPipeline);
  195. }
  196. forward SaveGangShipmentData(size, query[]);
  197. public SaveGangShipmentData(size, query[])
  198. {
  199. szMiscArray[0] = 0;
  200. for(new j = 0; j != MAX_SHIPMENT_POINTS; j++)
  201. format(szMiscArray, sizeof(szMiscArray), "%s`gs_iStock%d` = '%d', ", szMiscArray, j, arrGangShipmentData[j][gs_iStock]);
  202. format(query, size, "%s, %s `SHIPMENT_MATS_NEEDED` = '%d',", query, szMiscArray, SHIPMENT_MATS_NEEDED);
  203. }