Guest User

SimpleDMZones - Yuryfury

a guest
Jun 7th, 2013
256
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Pawn 4.99 KB | None | 0 0
  1. //==================================================Include==================================================
  2. #include <a_samp>
  3.  
  4. //==================================================Native==================================================
  5.  
  6. /*
  7. native CreateDeathmatchZone(Float:minx,Float:miny,Float:maxx,Float:maxy);
  8. native DestroyDeathmatchZone(dmzoneid);
  9. native IsPlayerInDMZone(playerid,dmzoneid);
  10. native IsPlayerInAnyDMZone(playerid);
  11. native GetPlayerDMZone(playerid)
  12. */
  13.  
  14. //==================================================Define==================================================
  15. #define MAX_DM_ZONES 100
  16. #define DMZoneCheckTime 500
  17.  
  18. //==================================================Forward==================================================
  19. forward OnPlayerEnterDeathmatchZone(playerid,dmzoneid);
  20. forward OnPlayerLeaveDeathmatchZone(playerid,dmzoneid);
  21. forward DeathmatchZoneCheck();
  22.  
  23. //==================================================New & Enum==================================================
  24. enum DMINFO
  25. {
  26.     Created,
  27.  
  28.     Float:minX,
  29.     Float:minY,
  30.     Float:minZ,
  31.     Float:maxX,
  32.     Float:maxY,
  33.     Float:maxZ,
  34. };
  35. new DMZone[MAX_DM_ZONES][DMINFO];
  36.  
  37. new PlayerDMZone[MAX_PLAYERS];
  38. new LastPlayerDMZone[MAX_PLAYERS];
  39.  
  40. new DeathmatchZoneCheckTimer;
  41.  
  42. //==================================================Stock/Functions==================================================
  43. stock IsPlayerInArea(playerid, Float:min_x, Float:min_y, Float:max_x, Float:max_y)
  44. {
  45.     new Float:X, Float:Y, Float:Z;
  46.     GetPlayerPos(playerid, X, Y, Z);
  47.     if(X <= max_x && X >= min_x && Y <= max_y && Y >= min_y) return 1;
  48.     return 0;
  49. }
  50.  
  51. stock CreateDeathmatchZone(Float:minx,Float:miny,Float:maxx,Float:maxy)
  52. {
  53.     new dmzoneid;
  54.     for (new i = 1; i<MAX_DM_ZONES; i++)
  55.     {
  56.         if(DMZone[i][Created]==0)
  57.         {
  58.             dmzoneid=i;
  59.             break;
  60.         }
  61.     }
  62.     DMZone[dmzoneid][Created]=1;
  63.     DMZone[dmzoneid][minX]=minx;
  64.     DMZone[dmzoneid][minY]=miny;
  65.     DMZone[dmzoneid][maxX]=maxx;
  66.     DMZone[dmzoneid][maxY]=maxy;
  67.  
  68.     return dmzoneid;
  69. }
  70.  
  71. stock DestroyDeathmatchZone(dmzoneid)
  72. {
  73.     DMZone[dmzoneid][Created]=0;
  74.     DMZone[dmzoneid][minX]=0;
  75.     DMZone[dmzoneid][minY]=0;
  76.     DMZone[dmzoneid][maxX]=0;
  77.     DMZone[dmzoneid][maxY]=0;
  78. }
  79.  
  80. stock GetPlayerDMZone(playerid)
  81. {
  82.     return PlayerDMZone[playerid];
  83. }
  84.  
  85. stock IsPlayerInDMZone(playerid,dmzoneid)
  86. {
  87.     if(PlayerDMZone[playerid]==dmzoneid) return 1;
  88.     return 0;
  89. }
  90.  
  91. stock IsPlayerInAnyDMZone(playerid)
  92. {
  93.     if(PlayerDMZone[playerid]!=0) return 1;
  94.     return 0;
  95. }
  96.  
  97. //==================================================OnFilterScriptInit & OnFilterScriptExit==================================================
  98. public OnFilterScriptInit()
  99. {
  100.     print("\n--------------------------------------");
  101.     print("*Simple Deathmatch Zones*");
  102.     print("By: Yuryfury");
  103.     print("...Loaded!");
  104.     print("--------------------------------------\n");
  105.  
  106.     DeathmatchZoneCheckTimer = SetTimer("DeathmatchZoneCheck",DMZoneCheckTime,1);
  107.     return 1;
  108. }
  109.  
  110. #if defined _ALS_OnFilterScriptInit
  111.   #undef OnFilterScriptInit
  112. #else
  113.   #define _ALS_OnFilterScriptInit
  114. #endif
  115. #define OnFilterScriptInit Hooked_OnFilterScriptInit
  116.  
  117. forward Hooked_OnFilterScriptInit();
  118.  
  119. public OnFilterScriptExit()
  120. {
  121.     KillTimer(DeathmatchZoneCheckTimer);
  122.     for (new i = 0; i<MAX_PLAYERS; i++)
  123.     {
  124.         PlayerDMZone[i]=0;
  125.     }
  126.     return 1;
  127. }
  128.  
  129. #if defined _ALS_OnFilterScriptExit
  130.   #undef OnFilterScriptExit
  131. #else
  132.   #define _ALS_OnFilterScriptExit
  133. #endif
  134. #define OnFilterScriptExit Hooked_OnFilterScriptExit
  135.  
  136. forward Hooked_OnFilterScriptExit();
  137.  
  138. //==================================================Checkpoint Check==================================================
  139. public DeathmatchZoneCheck()
  140. {
  141.     for (new j = 0; j<MAX_PLAYERS; j++)
  142.     {
  143.         if(IsPlayerConnected(j))
  144.         {
  145.             LastPlayerDMZone[j]=PlayerDMZone[j];
  146.             PlayerDMZone[j]=0;
  147.             for (new i = 1; i<MAX_DM_ZONES; i++)
  148.             {
  149.                 if(DMZone[i][Created]==1)
  150.                 {
  151.                     if(IsPlayerInArea(j,DMZone[i][minX],DMZone[i][minY],DMZone[i][maxX],DMZone[i][maxY]))
  152.                     {
  153.                         PlayerDMZone[j]=i;
  154.                         if(PlayerDMZone[j]!=LastPlayerDMZone[j])
  155.                         {
  156.                             OnPlayerEnterDeathmatchZone(j,i);
  157.                         }
  158.                         break;
  159.                     }
  160.                 }
  161.             }
  162.             if(LastPlayerDMZone[j]!=0 && PlayerDMZone[j]==0)
  163.             {
  164.                 OnPlayerLeaveDeathmatchZone(j,LastPlayerDMZone[j]);
  165.             }
  166.         }
  167.     }
  168.     return 1;
  169. }
  170.  
  171. //==================================================OnPlayerConnect & OnPlayerDisconnect==================================================
  172. public OnPlayerConnect(playerid)
  173. {
  174.     PlayerDMZone[playerid]=0;
  175.     return 1;
  176. }
  177.  
  178. public OnPlayerDisconnect(playerid, reason)
  179. {
  180.     PlayerDMZone[playerid]=0;
  181.     return 1;
  182. }
  183.  
  184. //==================================================OnPlayerDeath==================================================
  185. public OnPlayerDeath(playerid, killerid, reason)
  186. {
  187.     PlayerDMZone[playerid]=0;
  188.     return 1;
  189. }
Advertisement
Add Comment
Please, Sign In to add comment