Advertisement
Guest User

easy_greenzone.inc

a guest
Apr 5th, 2019
315
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Pawn 9.33 KB | None | 0 0
  1. /*==============================================================================
  2.                             EASY GREEN ZONE
  3.                         easy_greenzone.inc v1.1
  4.                         Author: Nikita Shtimenko - whale (a.k.a Twixxx / Twixyck)
  5.  
  6. Copyright (c) 2019 Nikita Shtimenko (whale)
  7.  
  8. This software is provided 'as-is', without any express or implied warranty.
  9. In no event will the authors be held liable for any damages arising from the
  10. use of this software.
  11.  
  12. Permission is granted to anyone to use this software for
  13. any purpose, including commercial applications, and to alter it and
  14. redistribute it freely, subject to the following restrictions:
  15.  
  16. 1.  The origin of this software must not be misrepresented; you must not
  17.     claim that you wrote the original software. If you use this software in
  18.     a product, an acknowledgment in the product documentation would be
  19.     appreciated but is not required.
  20.  
  21. 2.  Altered source versions must be plainly marked as such, and must not be
  22.     misrepresented as being the original software.
  23.  
  24. 3.  This notice may not be removed or altered from any source distribution.
  25. ==============================================================================*/
  26. #if defined _eg_included
  27.     #endinput
  28. #endif
  29. #define _eg_included
  30.  
  31. #if !defined Streamer_IncludeFileVersion
  32.     #error easy_greenzone.inc requires streamer.inc to work.
  33. #endif
  34.  
  35. #if !defined _FOREACH_LOCAL_VERSION
  36.     #error easy_greenzone.inc requires foreach.inc to work.
  37. #endif
  38.  
  39. #if !defined EG_MAX_GREEN_ZONES
  40.     #error EG_MAX_GREEN_ZONES must be defined.
  41. #endif
  42.  
  43. #if !defined EG_FIRE_KEY_TRIGGER_DELAY
  44.     #error EG_FIRE_KEY_TRIGGER_DELAY must be defined.
  45. #endif
  46.  
  47. #if defined EG_INVALID_GREENZONE_ID
  48.     #undef EG_INVALID_GREENZONE_ID
  49. #endif
  50. #define EG_INVALID_GREENZONE_ID -1
  51.  
  52. #if defined EG_MAX_WEAPON_SLOT
  53.     #undef EG_MAX_WEAPON_SLOT
  54. #endif
  55. #define EG_MAX_WEAPON_SLOT 12
  56.  
  57. #if !defined PRESSED
  58.     #define PRESSED(%0) \
  59.         (((newkeys & (%0)) == (%0)) && ((oldkeys & (%0)) != (%0)))
  60. #endif
  61.  
  62. #define GetPlayerGreenZoneId(%0)    eg_playerGreenZoneId[%0]
  63.  
  64. static
  65.     Iterator:eg_greenZones<EG_MAX_GREEN_ZONES>,
  66.     eg_playerGreenZoneId[MAX_PLAYERS] = {EG_INVALID_GREENZONE_ID, ...},
  67.     eg_playerLastFireKeyTick[MAX_PLAYERS] = {0, ...},
  68.     eg_playerWeapon[MAX_PLAYERS][EG_MAX_WEAPON_SLOT],
  69.     eg_playerWeaponAmmo[MAX_PLAYERS][EG_MAX_WEAPON_SLOT];
  70.  
  71. #if defined GetPlayerGreenZoneId
  72.     #undef GetPlayerGreenZoneId
  73. #endif
  74. #define GetPlayerGreenZoneId(%0)       eg_playerGreenZoneId[%0]
  75.  
  76. public OnPlayerConnect(playerid)
  77. {
  78.     eg_playerGreenZoneId[playerid] = EG_INVALID_GREENZONE_ID;
  79.     eg_playerLastFireKeyTick[playerid] = 0;
  80.  
  81.     for(new i = 0; i < EG_MAX_WEAPON_SLOT; i++)
  82.     {
  83.         eg_playerWeapon[playerid][i] = 0;
  84.         eg_playerWeaponAmmo[playerid][i] = 0;
  85.     }
  86.  
  87.     #if defined eg_OnPlayerConnect
  88.         eg_OnPlayerConnect(playerid);
  89.     #endif
  90.     return 1;
  91. }
  92. #if defined _ALS_OnPlayerConnect
  93.     #undef OnPlayerConnect
  94. #else
  95.     #define _ALS_OnPlayerConnect
  96. #endif
  97. #define OnPlayerConnect eg_OnPlayerConnect
  98. #if defined eg_OnPlayerConnect
  99. forward eg_OnPlayerConnect(playerid);
  100. #endif
  101.  
  102. public OnPlayerEnterDynamicArea(playerid, areaid)
  103. {
  104.     if(Iter_Contains(eg_greenZones, areaid))
  105.     {
  106.         eg_playerGreenZoneId[playerid] = areaid;
  107.  
  108.         for(new i = 0; i < EG_MAX_WEAPON_SLOT; i++)
  109.             GetPlayerWeaponData(playerid, i, eg_playerWeapon[playerid][i], eg_playerWeaponAmmo[playerid][i]);
  110.  
  111.         ResetPlayerWeapons(playerid);
  112.  
  113.     #if defined OnPlayerEnterGreenZone
  114.         OnPlayerEnterGreenZone(playerid, areaid);
  115.     #endif
  116.     }
  117.  
  118.     #if defined eg_OnPlayerEnterDynamicArea
  119.         eg_OnPlayerEnterDynamicArea(playerid, areaid);
  120.     #endif
  121.     return 1;
  122. }
  123. #if defined _ALS_OnPlayerEnterDynamicArea
  124.     #undef OnPlayerEnterDynamicArea
  125. #else
  126.     #define _ALS_OnPlayerEnterDynamicArea
  127. #endif
  128. #define OnPlayerEnterDynamicArea eg_OnPlayerEnterDynamicArea
  129. #if defined eg_OnPlayerEnterDynamicArea
  130. forward eg_OnPlayerEnterDynamicArea(playerid, areaid);
  131. #endif
  132.  
  133. public OnPlayerLeaveDynamicArea(playerid, areaid)
  134. {
  135.     if(Iter_Contains(eg_greenZones, areaid))
  136.     {
  137.         for(new i = 0; i < EG_MAX_WEAPON_SLOT; i++)
  138.         {
  139.             if(eg_playerWeapon[playerid][i] != WEAPON_FIST && eg_playerWeaponAmmo[playerid][i] > 0)
  140.                 GivePlayerWeapon(playerid, eg_playerWeapon[playerid][i], eg_playerWeaponAmmo[playerid][i]);
  141.  
  142.             eg_playerWeapon[playerid][i] = 0;
  143.             eg_playerWeaponAmmo[playerid][i] = 0;
  144.         }
  145.  
  146.         eg_playerGreenZoneId[playerid] = EG_INVALID_GREENZONE_ID;
  147.  
  148.     #if defined OnPlayerLeaveGreenZone
  149.         OnPlayerLeaveGreenZone(playerid, areaid);
  150.     #endif
  151.     }
  152.  
  153.     #if defined eg_OnPlayerLeaveDynamicArea
  154.         eg_OnPlayerLeaveDynamicArea(playerid, areaid);
  155.     #endif
  156.     return 1;
  157. }
  158. #if defined _ALS_OnPlayerLeaveDynamicArea
  159.     #undef OnPlayerLeaveDynamicArea
  160. #else
  161.     #define _ALS_eg_OnPlayerLeaveDynamicArea
  162. #endif
  163. #define OnPlayerLeaveDynamicArea eg_OnPlayerLeaveDynamicArea
  164. #if defined eg_OnPlayerLeaveDynamicArea
  165. forward eg_OnPlayerLeaveDynamicArea(playerid, areaid);
  166. #endif
  167.  
  168. stock bool:IsPlayerInGreenZone(const playerid, const green_zone_id)
  169. {
  170.     return eg_playerGreenZoneId[playerid] == green_zone_id;
  171. }
  172.  
  173. stock bool:IsPlayerInAnyGreenZone(const playerid)
  174. {
  175.     return eg_playerGreenZoneId[playerid] != EG_INVALID_GREENZONE_ID;
  176. }
  177.  
  178. public OnPlayerKeyStateChange(playerid, newkeys, oldkeys)
  179. {
  180.     if(PRESSED(KEY_FIRE))
  181.     {
  182.         if(GetPlayerState(playerid) == PLAYER_STATE_ONFOOT)
  183.         {
  184.             if(IsPlayerInAnyGreenZone(playerid))
  185.             {
  186.                 if(gettime() - eg_playerLastFireKeyTick[playerid] < EG_FIRE_KEY_TRIGGER_DELAY)
  187.                     return 1;
  188.  
  189.                 eg_playerLastFireKeyTick[playerid] = gettime();
  190.  
  191.                 #if defined OnPlayerPressFireKeyInGreenZone
  192.                     OnPlayerPressFireKeyInGreenZone(playerid);
  193.                 #endif
  194.             }
  195.         }
  196.     }
  197.  
  198.     #if defined eg_OnPlayerKeyStateChange
  199.         eg_OnPlayerKeyStateChange(playerid, newkeys, oldkeys);
  200.     #endif
  201.     return 1;
  202. }
  203. #if defined _ALS_OnPlayerKeyStateChange
  204.     #undef OnPlayerKeyStateChange
  205. #else
  206.     #define _ALS_OnPlayerKeyStateChange
  207. #endif
  208. #define OnPlayerKeyStateChange eg_OnPlayerKeyStateChange
  209. #if defined eg_OnPlayerKeyStateChange
  210. forward eg_OnPlayerKeyStateChange(playerid, newkeys, oldkeys);
  211. #endif
  212.  
  213. stock eg_DestroyDynamicArea(areaid)
  214. {
  215.     if(Iter_Contains(eg_greenZones, areaid))
  216.         Iter_Remove(eg_greenZones, areaid);
  217.  
  218.     return DestroyDynamicArea(areaid);
  219. }
  220. #if defined _ALS_DestroyDynamicArea
  221.     #undef DestroyDynamicArea
  222. #else
  223.     #define _ALS_DestroyDynamicArea
  224. #endif
  225. #define DestroyDynamicArea eg_DestroyDynamicArea
  226.  
  227. stock CreateCircleGreenZone(Float:x, Float:y, Float:size, worldid = -1, interiorid = -1)
  228. {
  229.     if(Iter_Count(eg_greenZones) + 1 == EG_MAX_GREEN_ZONES)
  230.         return EG_INVALID_GREENZONE_ID;
  231.  
  232.     new
  233.         easy_greenzoneId = CreateDynamicCircle(x, y, size, worldid, interiorid);
  234.  
  235.     Iter_Add(eg_greenZones, easy_greenzoneId);
  236.     return easy_greenzoneId;
  237. }
  238.  
  239. stock CreateCylinderGreenZone(Float:x, Float:y, Float:minz, Float:maxz, Float:size, worldid = -1, interiorid = -1)
  240. {
  241.     if(Iter_Count(eg_greenZones) + 1 == EG_MAX_GREEN_ZONES)
  242.         return EG_INVALID_GREENZONE_ID;
  243.  
  244.     new
  245.         easy_greenzoneId = CreateDynamicCylinder(x, y, minz, maxz, size, worldid, interiorid);
  246.  
  247.     Iter_Add(eg_greenZones, easy_greenzoneId);
  248.     return easy_greenzoneId;
  249. }
  250.  
  251. stock CreateSphereGreenZone(Float:x, Float:y, Float:z, Float:size, worldid = -1, interiorid = -1)
  252. {
  253.     if(Iter_Count(eg_greenZones) + 1 == EG_MAX_GREEN_ZONES)
  254.         return EG_INVALID_GREENZONE_ID;
  255.  
  256.     new
  257.         easy_greenzoneId = CreateDynamicSphere(x, y, z, size, worldid, interiorid);
  258.  
  259.     Iter_Add(eg_greenZones, easy_greenzoneId);
  260.     return easy_greenzoneId;
  261. }
  262.  
  263. stock CreateRectangleGreenZone(Float:minx, Float:miny, Float:maxx, Float:maxy, wolrid = -1, interiorid = -1)
  264. {
  265.     if(Iter_Count(eg_greenZones) + 1 == EG_MAX_GREEN_ZONES)
  266.         return EG_INVALID_GREENZONE_ID;
  267.  
  268.     new
  269.         easy_greenzoneId = CreateDynamicRectangle(minx, miny, maxx, maxy, worldid, interiorid);
  270.  
  271.     Iter_Add(eg_greenZones, easy_greenzoneId);
  272.     return easy_greenzoneId;
  273. }
  274.  
  275. stock CreateCuboidGreenZone(Float:minx, Float:miny, Float:minz, Float:maxx, Float:maxy, Float:maxz, worldid = -1, interiorid = -1)
  276. {
  277.     if(Iter_Count(eg_greenZones) + 1 == EG_MAX_GREEN_ZONES)
  278.         return EG_INVALID_GREENZONE_ID;
  279.  
  280.     new
  281.         easy_greenzoneId = CreateDynamicCuboid(minx, miny, minz, maxx, maxy, maxz, worldid, interiorid);
  282.  
  283.     Iter_Add(eg_greenZones, easy_greenzoneId);
  284.     return easy_greenzoneId;
  285. }
  286.  
  287. stock CreateCubeGreenZone(Float:minx, Float:miny, Float:minz, Float:maxx, Float:maxy, Float:maxz, worldid = -1, interiorid = -1)
  288. {
  289.     if(Iter_Count(eg_greenZones) + 1 == EG_MAX_GREEN_ZONES)
  290.         return EG_INVALID_GREENZONE_ID;
  291.  
  292.     new
  293.         easy_greenzoneId = CreateDynamicCube(minx, miny, minz, maxx, maxy, maxz, worldid, interiorid);
  294.  
  295.     Iter_Add(eg_greenZones, easy_greenzoneId);
  296.     return easy_greenzoneId;
  297. }
  298.  
  299. stock CreatePolygonGreenZone(Float:points[], Float:minz = -FLOAT_INFINITY, Float:maxz = FLOAT_INFINITY, maxpoints = sizeof points, worldid = -1, interiorid = -1)
  300. {
  301.     if(Iter_Count(eg_greenZones) + 1 == EG_MAX_GREEN_ZONES)
  302.         return EG_INVALID_GREENZONE_ID;
  303.  
  304.     new
  305.         easy_greenzoneId = CreateDynamicPolygon(points, minz, maxz, maxpoints, worldid, interiorid);
  306.  
  307.     Iter_Add(eg_greenZones, easy_greenzoneId);
  308.     return easy_greenzoneId;
  309. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement