Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- //==================================================Include==================================================
- #include <a_samp>
- //==================================================Native==================================================
- /*
- native CreateDeathmatchZone(Float:minx,Float:miny,Float:maxx,Float:maxy);
- native DestroyDeathmatchZone(dmzoneid);
- native IsPlayerInDMZone(playerid,dmzoneid);
- native IsPlayerInAnyDMZone(playerid);
- native GetPlayerDMZone(playerid)
- */
- //==================================================Define==================================================
- #define MAX_DM_ZONES 100
- #define DMZoneCheckTime 500
- //==================================================Forward==================================================
- forward OnPlayerEnterDeathmatchZone(playerid,dmzoneid);
- forward OnPlayerLeaveDeathmatchZone(playerid,dmzoneid);
- forward DeathmatchZoneCheck();
- //==================================================New & Enum==================================================
- enum DMINFO
- {
- Created,
- Float:minX,
- Float:minY,
- Float:minZ,
- Float:maxX,
- Float:maxY,
- Float:maxZ,
- };
- new DMZone[MAX_DM_ZONES][DMINFO];
- new PlayerDMZone[MAX_PLAYERS];
- new LastPlayerDMZone[MAX_PLAYERS];
- new DeathmatchZoneCheckTimer;
- //==================================================Stock/Functions==================================================
- stock IsPlayerInArea(playerid, Float:min_x, Float:min_y, Float:max_x, Float:max_y)
- {
- new Float:X, Float:Y, Float:Z;
- GetPlayerPos(playerid, X, Y, Z);
- if(X <= max_x && X >= min_x && Y <= max_y && Y >= min_y) return 1;
- return 0;
- }
- stock CreateDeathmatchZone(Float:minx,Float:miny,Float:maxx,Float:maxy)
- {
- new dmzoneid;
- for (new i = 1; i<MAX_DM_ZONES; i++)
- {
- if(DMZone[i][Created]==0)
- {
- dmzoneid=i;
- break;
- }
- }
- DMZone[dmzoneid][Created]=1;
- DMZone[dmzoneid][minX]=minx;
- DMZone[dmzoneid][minY]=miny;
- DMZone[dmzoneid][maxX]=maxx;
- DMZone[dmzoneid][maxY]=maxy;
- return dmzoneid;
- }
- stock DestroyDeathmatchZone(dmzoneid)
- {
- DMZone[dmzoneid][Created]=0;
- DMZone[dmzoneid][minX]=0;
- DMZone[dmzoneid][minY]=0;
- DMZone[dmzoneid][maxX]=0;
- DMZone[dmzoneid][maxY]=0;
- }
- stock GetPlayerDMZone(playerid)
- {
- return PlayerDMZone[playerid];
- }
- stock IsPlayerInDMZone(playerid,dmzoneid)
- {
- if(PlayerDMZone[playerid]==dmzoneid) return 1;
- return 0;
- }
- stock IsPlayerInAnyDMZone(playerid)
- {
- if(PlayerDMZone[playerid]!=0) return 1;
- return 0;
- }
- //==================================================OnFilterScriptInit & OnFilterScriptExit==================================================
- public OnFilterScriptInit()
- {
- print("\n--------------------------------------");
- print("*Simple Deathmatch Zones*");
- print("By: Yuryfury");
- print("...Loaded!");
- print("--------------------------------------\n");
- DeathmatchZoneCheckTimer = SetTimer("DeathmatchZoneCheck",DMZoneCheckTime,1);
- return 1;
- }
- #if defined _ALS_OnFilterScriptInit
- #undef OnFilterScriptInit
- #else
- #define _ALS_OnFilterScriptInit
- #endif
- #define OnFilterScriptInit Hooked_OnFilterScriptInit
- forward Hooked_OnFilterScriptInit();
- public OnFilterScriptExit()
- {
- KillTimer(DeathmatchZoneCheckTimer);
- for (new i = 0; i<MAX_PLAYERS; i++)
- {
- PlayerDMZone[i]=0;
- }
- return 1;
- }
- #if defined _ALS_OnFilterScriptExit
- #undef OnFilterScriptExit
- #else
- #define _ALS_OnFilterScriptExit
- #endif
- #define OnFilterScriptExit Hooked_OnFilterScriptExit
- forward Hooked_OnFilterScriptExit();
- //==================================================Checkpoint Check==================================================
- public DeathmatchZoneCheck()
- {
- for (new j = 0; j<MAX_PLAYERS; j++)
- {
- if(IsPlayerConnected(j))
- {
- LastPlayerDMZone[j]=PlayerDMZone[j];
- PlayerDMZone[j]=0;
- for (new i = 1; i<MAX_DM_ZONES; i++)
- {
- if(DMZone[i][Created]==1)
- {
- if(IsPlayerInArea(j,DMZone[i][minX],DMZone[i][minY],DMZone[i][maxX],DMZone[i][maxY]))
- {
- PlayerDMZone[j]=i;
- if(PlayerDMZone[j]!=LastPlayerDMZone[j])
- {
- OnPlayerEnterDeathmatchZone(j,i);
- }
- break;
- }
- }
- }
- if(LastPlayerDMZone[j]!=0 && PlayerDMZone[j]==0)
- {
- OnPlayerLeaveDeathmatchZone(j,LastPlayerDMZone[j]);
- }
- }
- }
- return 1;
- }
- //==================================================OnPlayerConnect & OnPlayerDisconnect==================================================
- public OnPlayerConnect(playerid)
- {
- PlayerDMZone[playerid]=0;
- return 1;
- }
- public OnPlayerDisconnect(playerid, reason)
- {
- PlayerDMZone[playerid]=0;
- return 1;
- }
- //==================================================OnPlayerDeath==================================================
- public OnPlayerDeath(playerid, killerid, reason)
- {
- PlayerDMZone[playerid]=0;
- return 1;
- }
Advertisement
Add Comment
Please, Sign In to add comment