Kwarde

Folder Delivery Sytem - 2.0 [BETA]

Nov 7th, 2010
181
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Pawn 8.61 KB | None | 0 0
  1. #include <a_samp>
  2.  
  3. #define dcmd(%1,%2,%3) if ((strcmp((%3)[1], #%1, true, (%2)) == 0) && ((((%3)[(%2) + 1] == 0) && (dcmd_%1(playerid, "")))||(((%3)[(%2) + 1] == 32) && (dcmd_%1(playerid, (%3)[(%2) + 2]))))) return 1
  4.  
  5. #undef MAX_PLAYERS
  6.  
  7. #define MAX_SLOTS 500 //The max players of your server
  8.  
  9. #define COLOR_WHITE 0xFFFFFFAA
  10. #define COLOR_RED 0xFF0000AA
  11. #define COLOR_GREEN 0x00FF00AA
  12.  
  13. #define MAX_STREETS 500
  14.  
  15. new MoneyPerFolder = 150;
  16. new MinFolders = 10;
  17. new MaxFolders = 30;
  18.  
  19. enum StreetInfo__ENUM()
  20. {
  21.     sID,
  22.     Float:sMinX,
  23.     Float:sMaxX,
  24.     Float:sMinY,
  25.     Float:sMaxY,
  26.     sStreetName[65],
  27.     bool:sStreetSpawned
  28. };
  29. new StreetInfo[MAX_STREETS][StreetInfo__ENUM];
  30. new StreetCount = 0;
  31.  
  32. forward CheckPlayerInArea(playerid);
  33. forward FailDelivering(playerid);
  34.  
  35. enum pFJInfo__ENUM()
  36. {
  37.     bool:JobStarted,
  38.     CurrentStreetID,
  39.     MoneyThisRound,
  40.     CheckAreaTimer,
  41.     FailTimer,
  42.     bool:TimersStarted,
  43.     SecondsInStreet,
  44.     bool:StreetIsFlashing
  45. };
  46. new pFJInfo[MAX_SLOTS][pFJInfo__ENUM];
  47. new StreetZone[MAX_STREETS];
  48.  
  49. public OnFilterScriptInit()
  50. {
  51.     print(" ");
  52.     print("\n****************************************************");
  53.     print("* Folder Delivery Job v1.0 - By Kwarde :: Loading... *");
  54.  
  55.     AddStreet("Ganton", 2528.039, 2216.207, -1634.489, -1737.13);
  56.     AddStreet("Jefferson", 2071.699, -1381.833, 2261.841, -1223.924);
  57.     AddStreet("Playa Del Seville", 2706.773, -2068.74, 2790.435, -1906.883);
  58.     AddStreet("Verdant Bluffs", 2706.773, -2068.74, 2790.435, -1906.883);
  59.  
  60.     printf("--> %d streets loaded", StreetCount);
  61.    
  62.     print("* Folder Delivery Job v1.0 - By Kwarde :: Loaded     *");
  63.     print("****************************************************\n");
  64.     print(" ");
  65.     return 1;
  66. }
  67.  
  68. public OnPlayerCommandText(playerid, cmdtext[])
  69. {
  70.     dcmd(startfj, 7, cmdtext);
  71.     dcmd(stopfj, 6, cmdtext);
  72.    
  73.     return 0;
  74. }
  75.  
  76. public OnFilterScriptExit()
  77. {
  78.     print(" ");
  79.     print("\n******************************************************");
  80.     print("* Folder Delivery Job v1.0 - By Kwarde :: Unloading... *");
  81.    
  82.     for(new i = 0; i < MAX_STREETS; i++)
  83.         if(StreetInfo[i][sStreetSpawned])
  84.             RemoveStreet(i);
  85.    
  86.     for(new i = 0; i < MAX_SLOTS; i++)
  87.         if(IsPlayerConnected(i) && pFJInfo[i][JobStarted])
  88.  
  89.     print("******************************************************\n");
  90.     print("* Folder Delivery Job v1.0 - By Kwarde :: Unloaded     *");
  91.     print(" ");
  92.     return 1;
  93. }
  94.  
  95. public CheckPlayerInArea(playerid)
  96. {
  97.     new pTmpName[MAX_PLAYER_NAME], string[128], streetid;
  98.     GetPlayerName(playerid, pTmpName, MAX_PLAYER_NAME);
  99.     if(pFJInfo[playerid][JobStarted]){
  100.         streetid = pFJInfo[playerid][CurrentStreetID];
  101.         if(IsPlayerInArea(playerid, StreetInfo[streetid][sMinX], StreetInfo[streetid][sMinY], StreetInfo[streetid][sMaxX], StreetInfo[streetid][sMaxY])){
  102.             if(!pFJInfo[playerid][StreetIsFlashing]){
  103.                 GangZoneFlashForPlayer(playerid, StreetZone[streetid], COLOR_RED);
  104.                 pFJInfo[playerid][StreetIsFlashing] = true;
  105.             }
  106.             if(pFJInfo[playerid][SecondsInStreet] == 0)
  107.                 SendClientMessage(playerid, COLOR_GREEN, "FolderChief: Good. Now stay here 60 seconds");
  108.             pFJInfo[playerid][SecondsInStreet]++;
  109.         }
  110.         if(!IsPlayerInArea(playerid, StreetInfo[streetid][sMinX], StreetInfo[streetid][sMinY], StreetInfo[streetid][sMaxX], StreetInfo[streetid][sMaxY]) && pFJInfo[playerid][SecondsInStreet] > 0){
  111.             format(string, 128, "FolderChief: %s, don't leave there! Go back, now!", pTmpName);
  112.             SendClientMessage(playerid, COLOR_RED, string);
  113.             pFJInfo[playerid][SecondsInStreet] = 0;
  114.         }
  115.         if(!IsPlayerInArea(playerid, StreetInfo[streetid][sMinX], StreetInfo[streetid][sMinY], StreetInfo[streetid][sMaxX], StreetInfo[streetid][sMaxY]) && pFJInfo[playerid][StreetIsFlashing]){
  116.             pFJInfo[playerid][StreetIsFlashing] = false;
  117.             GangZoneStopFlashForPlayer(playerid, StreetZone[streetid]);
  118.         }
  119.     }
  120.     return 1;
  121. }
  122.  
  123. public FailDelivering(playerid)
  124. {
  125.     new pTmpName[MAX_SLOTS], string[128];
  126.     GetPlayerName(playerid, pTmpName, MAX_PLAYER_NAME);
  127.     format(string, 128, "FolderChief: %s, I told you to deliver the folders within 10 minutes, they are over. You failed...", pTmpName);
  128.     SendClientMessage(playerid, COLOR_RED, string);
  129.     StopPlayerJob(playerid);
  130.     return 1;
  131. }
  132.  
  133. stock AddStreet(streetname[], Float:MinX, Float:MinY, Float:MaxX, Float:MaxY)
  134. {
  135.     StreetCount++;
  136.     StreetInfo[StreetCount][sID] = StreetCount;
  137.     StreetInfo[StreetCount][sMinX] = MinX;
  138.     StreetInfo[StreetCount][sMinY] = MinY;
  139.     StreetInfo[StreetCount][sMaxX] = MaxX;
  140.     StreetInfo[StreetCount][sMaxY] = MaxY;
  141.     strset(StreetInfo[StreetCount][sStreetName], streetname);
  142.     StreetInfo[StreetCount][sStreetSpawned] = true;
  143.     StreetZone[StreetCount] = GangZoneCreate(MinX, MinY, MaxX, MaxY);
  144. }
  145.  
  146. stock RemoveStreet(streetid)
  147. {
  148.     StreetInfo[streetid][sID] = (-1);
  149.     StreetInfo[streetid][sMinX] = 0.0;
  150.     StreetInfo[streetid][sMinY] = 0.0;
  151.     StreetInfo[streetid][sMaxX] = 0.0;
  152.     StreetInfo[streetid][sMaxY] = 0.0;
  153.     strset(StreetInfo[streetid][sStreetName], "Invalid");
  154.     StreetInfo[StreetCount][sStreetSpawned] = false;
  155.     GangZoneDestroy(StreetZone[streetid]);
  156. }
  157.  
  158. stock strset(astr[], astrtoset[])
  159. {
  160.     strdel(astr, 0, strlen(astr));
  161.     strins(astr, astrtoset, 0, strlen(astrtoset));
  162. }
  163.  
  164. stock IsPlayerInArea(playerid, Float:MinX, Float:MinY, Float:MaxX, Float:MaxY)
  165. {
  166.     new Float:pX, Float:pY, Float:pZ;
  167.     GetPlayerPos(playerid, pX, pY, pZ);
  168.     if(pX >= MinX && pX <= MaxX && pY >= MinY && pY <= MaxY)
  169.         return true;
  170.     return false;
  171. }
  172.  
  173. stock Float:GetCenterOfGangZone(Float:MinX, Float:MinY, Float:MaxX, Float:MaxY, &Float:X, &Float:Y) //Not used yet
  174. {
  175.     new Float:xCenter, Float:yCenter;
  176.     xCenter = (( MinX + MaxX ) / 2);
  177.     yCenter = (( MinY + MaxY ) / 2);
  178.     return Float:X = xCenter, Float:Y = yCenter;
  179. }
  180.  
  181. stock StartJob(playerid)
  182. {
  183.     new pTmpName[MAX_PLAYER_NAME], RandomStreet, RandomFolders, string[128], ActivatedStreets;
  184.     GetPlayerName(playerid, pTmpName, MAX_PLAYER_NAME);
  185.     for(new i = 0; i < MAX_STREETS; i++){
  186.         if(StreetInfo[i][sStreetSpawned])
  187.             ActivatedStreets++;
  188.         if(i == 0){
  189.             StopPlayerJob(playerid);
  190.             StartJob(playerid);
  191.         }
  192.     }
  193.     RandomStreet = random(ActivatedStreets);
  194.     RandomFolders = MinFolders + random(MaxFolders - MinFolders);
  195.     pFJInfo[playerid][CurrentStreetID] = RandomStreet;
  196.     pFJInfo[playerid][MoneyThisRound] = RandomFolders * MoneyPerFolder;
  197.     format(string, 128, "FolderChief: Hi %s. We've got some folders for you.", pTmpName);
  198.     SendClientMessage(playerid, COLOR_WHITE, string);
  199.     SendClientMessage(playerid, COLOR_WHITE, "FolderChief: Here's information of your folder job this time");
  200.     format(string, 128, "FolderChief: Ammount of folders: %d. Money: $%d,-, Street: %s", RandomFolders, pFJInfo[playerid][MoneyThisRound], StreetInfo[pFJInfo[playerid][CurrentStreetID]][sStreetName]);
  201.     SendClientMessage(playerid, COLOR_WHITE, string);
  202.     SendClientMessage(playerid, COLOR_WHITE, "FolderChief: Go to the street and stay 60 seconds in the street. You've got 10 minutes. Now, go!");
  203.     pFJInfo[playerid][CheckAreaTimer] = SetTimerEx("CheckPlayerInArea", 1000, true, "i", playerid);
  204.     pFJInfo[playerid][FailTimer] = SetTimerEx("FailDelivering", 600000, false, "i", playerid);
  205.     pFJInfo[playerid][TimersStarted] = true;
  206.     pFJInfo[playerid][JobStarted] = true;
  207.     GangZoneShowForPlayer(playerid, StreetZone[pFJInfo[playerid][CurrentStreetID]], COLOR_GREEN);
  208.     return 1;
  209. }
  210.  
  211. stock StopPlayerJob(playerid)
  212.     return ResetPlayerJob(playerid);
  213.  
  214. stock ResetPlayerJob(playerid)
  215. {
  216.     GangZoneHideForPlayer(playerid, StreetZone[pFJInfo[playerid][CurrentStreetID]]);
  217.     if(pFJInfo[playerid][TimersStarted]){
  218.         KillTimer(pFJInfo[playerid][CheckAreaTimer]);
  219.         KillTimer(pFJInfo[playerid][FailTimer]);
  220.         pFJInfo[playerid][TimersStarted] = false;
  221.     }
  222.     pFJInfo[playerid][CurrentStreetID] = (-1);
  223.     pFJInfo[playerid][MoneyThisRound] = 0;
  224.     pFJInfo[playerid][CheckAreaTimer] = (-1);
  225.     pFJInfo[playerid][FailTimer] = (-1);
  226.     pFJInfo[playerid][TimersStarted] = false;
  227.     pFJInfo[playerid][SecondsInStreet] = 0;
  228.     pFJInfo[playerid][StreetIsFlashing] = false;
  229.     pFJInfo[playerid][JobStarted] = false;
  230.     return 1;
  231. }
  232.  
  233. dcmd_startfj(playerid, params[])
  234. {
  235.     #pragma unused params
  236.    
  237.     if(pFJInfo[playerid][JobStarted]) return SendClientMessage(playerid, COLOR_RED, "FolderChief: You are already doing a job. You can only do one job at once!");
  238.     StartJob(playerid);
  239.     return 1;
  240. }
  241.  
  242. dcmd_stopfj(playerid, params[])
  243. {
  244.     #pragma unused params
  245.    
  246.     if(!pFJInfo[playerid][JobStarted]) return SendClientMessage(playerid, COLOR_RED, "FolderChief: You aren't doing a folder job. How do you wanna cancel your job if you don't have one?");
  247.     SendClientMessage(playerid, COLOR_RED, "FolderChief: Okay. Your job has been stopped. Please come back any time");
  248.     StopPlayerJob(playerid);
  249.     return 1;
  250. }
Add Comment
Please, Sign In to add comment