Advertisement
CaveDweller_

Intel

Jun 10th, 2014
377
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Pawn 5.36 KB | None | 0 0
  1. /*
  2.  
  3. The MIT License (MIT)
  4.  
  5. Copyright (c) 2014 James Monger
  6.  
  7. Permission is hereby granted, free of charge, to any person obtaining a copy
  8. of this software and associated documentation files (the "Software"), to deal
  9. in the Software without restriction, including without limitation the rights
  10. to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
  11. copies of the Software, and to permit persons to whom the Software is
  12. furnished to do so, subject to the following conditions:
  13.  
  14. The above copyright notice and this permission notice shall be included in
  15. all copies or substantial portions of the Software.
  16.  
  17. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
  18. IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
  19. FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
  20. AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
  21. LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
  22. OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
  23. THE SOFTWARE.
  24.  
  25. */
  26.  
  27.  
  28. #include    <YSI\y_hooks>
  29. #include    <YSI\y_master>
  30. #include    <YSI\y_commands>
  31.  
  32. forward INTEL_OnPlayerClaim(playerid, name[], level);
  33.  
  34. #define     MAX_INTEL_SPAWNS        50
  35. #define     INVALID_INTEL_ID        -1
  36. #define     INTEL_OBJECT_ID         1429
  37. #define     INTEL_REFRESH_RATE      1
  38. #define     INTEL_CLAIM_RANGE       5
  39. #define     INTEL_MESSAGE_COLOR     0x5CD147FF
  40. #define     INTEL_MESSAGE_COLOR_EMBED       "5CD147"
  41.  
  42. new bool: PlayerCanClaimIntel[MAX_PLAYERS char];
  43.  
  44. new StoredIntelSpawns = 0;
  45.  
  46. new CurrentIntelObject;
  47.  
  48. enum IntelSpawnInfo
  49. {
  50.     Name[40],
  51.     Float:PositionX,
  52.     Float:PositionY,
  53.     Float:PositionZ,
  54.     Float:AngleX,
  55.     Float:AngleY,
  56.     Float:AngleZ,
  57.     Level
  58. };
  59.  
  60. new IntelSpawns[MAX_INTEL_SPAWNS][IntelSpawnInfo];
  61.  
  62. new CurrentIntelId;
  63.  
  64. hook OnGameModeInit()
  65. {
  66.     CurrentIntelId = -1;
  67. }
  68.  
  69. forward INTEL_GetClaimPermission(playerid);
  70. public INTEL_GetClaimPermission(playerid)
  71. {
  72.     return PlayerCanClaimIntel{playerid};
  73. }
  74.  
  75. forward INTEL_SetClaimPermission(playerid, bool: canClaim);
  76. public INTEL_SetClaimPermission(playerid, bool: canClaim)
  77. {
  78.     PlayerCanClaimIntel{playerid} = canClaim;
  79.    
  80.     #if defined INTEL_DEBUG_MODE
  81.         if (canClaim)
  82.             printf("INTEL_SetClaimPermission: Claim permission set to true for player %d", playerid);
  83.         else
  84.             printf("INTEL_SetClaimPermission: Claim permission set to false for player %d", playerid);
  85.     #endif
  86.     return 1;
  87. }
  88.  
  89. forward INTEL_AddIntelSpawn(IntelName[], Float:IntelPositionX, Float:IntelPositionY, Float:IntelPositionZ, Float:IntelAngleX, Float:IntelAngleY, Float:IntelAngleZ, IntelLevel);
  90. public INTEL_AddIntelSpawn(IntelName[], Float:IntelPositionX, Float:IntelPositionY, Float:IntelPositionZ, Float:IntelAngleX, Float:IntelAngleY, Float:IntelAngleZ, IntelLevel)
  91. {
  92.     if (StoredIntelSpawns >= MAX_INTEL_SPAWNS)
  93.     {
  94.         #if defined INTEL_DEBUG_MODE
  95.             printf("INTEL_AddIntelSpawn: Intel limit reached!");
  96.         #endif
  97.         return INVALID_INTEL_ID;
  98.     }
  99.    
  100.     new intelId = StoredIntelSpawns;
  101.    
  102.     format(IntelSpawns[intelId][Name], 40, "%s", IntelName);
  103.     IntelSpawns[intelId][PositionX] = IntelPositionX;
  104.     IntelSpawns[intelId][PositionY] = IntelPositionY;
  105.     IntelSpawns[intelId][PositionZ] = IntelPositionZ;
  106.     IntelSpawns[intelId][AngleX] = IntelAngleX;
  107.     IntelSpawns[intelId][AngleY] = IntelAngleY;
  108.     IntelSpawns[intelId][AngleZ] = IntelAngleZ;
  109.     IntelSpawns[intelId][Level] = IntelLevel;
  110.    
  111.     #if defined INTEL_DEBUG_MODE
  112.         printf("INTEL_AddIntelSpawn: Intel id %d (%s) added", intelId, IntelName);
  113.     #endif
  114.    
  115.     StoredIntelSpawns++;
  116.    
  117.     return intelId;
  118. }
  119.  
  120. new SpawnNewIntelTimer;
  121.  
  122. forward INTEL_SpawnNewIntel();
  123. public INTEL_SpawnNewIntel()
  124. {
  125.     KillTimer(SpawnNewIntelTimer);
  126.     if (StoredIntelSpawns > -1)
  127.     {
  128.         new intelId = random(StoredIntelSpawns);
  129.  
  130.         new string[128];
  131.         format(string, sizeof(string), "Some new intel has been discovered: {FFFFFF}%s{" INTEL_MESSAGE_COLOR_EMBED "}! It will last for %d minutes! Use /claimintel to claim it.", IntelSpawns[intelId][Name], INTEL_REFRESH_RATE);
  132.         SendClientMessageToAll(INTEL_MESSAGE_COLOR, string);
  133.        
  134.         CurrentIntelObject = CreateObject(INTEL_OBJECT_ID, IntelSpawns[intelId][PositionX], IntelSpawns[intelId][PositionY], IntelSpawns[intelId][PositionZ], IntelSpawns[intelId][AngleX], IntelSpawns[intelId][AngleY], IntelSpawns[intelId][AngleZ]);
  135.        
  136.         CurrentIntelId = intelId;
  137.        
  138.         SpawnNewIntelTimer = SetTimer("INTEL_SpawnNewIntel", (INTEL_REFRESH_RATE * 60000), false);
  139.     }
  140.     return 1;
  141. }
  142.  
  143. YCMD:claimintel(playerid, params[], help)
  144. {  
  145.     if (CurrentIntelId == -1)
  146.     {
  147.         SendClientMessage(playerid, INTEL_MESSAGE_COLOR, "There is no intel to be claimed!");
  148.         return 1;
  149.     }
  150.    
  151.     if (!INTEL_GetClaimPermission(playerid))
  152.     {
  153.         SendClientMessage(playerid, INTEL_MESSAGE_COLOR, "You don't have the relevant permissions to claim intel.");
  154.         return 1;
  155.     }
  156.    
  157.     if (IsPlayerInRangeOfPoint(playerid, INTEL_CLAIM_RANGE, IntelSpawns[CurrentIntelId][PositionX], IntelSpawns[CurrentIntelId][PositionY], IntelSpawns[CurrentIntelId][PositionZ]))
  158.     {
  159.         DestroyObject(CurrentIntelObject);
  160.         CallRemoteFunction("INTEL_OnPlayerClaim", "dsd", playerid, IntelSpawns[CurrentIntelId][Name], IntelSpawns[CurrentIntelId][Level]);
  161.         INTEL_SpawnNewIntel();
  162.     }
  163.     else
  164.     {
  165.         SendClientMessage(playerid, INTEL_MESSAGE_COLOR, "You're too far from the intel!");
  166.     }
  167.     return 1;
  168. }
  169.  
  170. hook OnPlayerDisconnect(playerid)
  171. {
  172.     INTEL_SetClaimPermission(playerid, false);
  173. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement