Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- /*
- native CreateArea(Float:minX, Float:maxX, Float:minY, Float:maxY);
- native DestroyArea(areaid);
- native IsPlayerInArea(playerid, areaid);
- native GetPlayerInArea(playerid);
- native SetPlayerInArea(playerid,areaid);
- native CreatePlayerArea(playerid,Float:minX, Float:maxX, Float:minY, Float:maxY);
- native DestroyPlayerArea(playerid,areaid);
- native IsPlayerInPlayerArea(playerid, areaid);
- native GetPlayerInPlayerArea(playerid);
- native SetPlayerInPlayerArea(playerid,areaid);
- native AR_OnPlayerConnect(playerid);
- native AR_OnPlayerDisconnect(playerid);
- native AR_OnGameModeInit();
- */
- #include <a_samp>
- #define MAX_AREAS 100 // Nombre maximum d'area
- #define MAX_PLAYER_AREAS 100 // Nombre maximum de Player Area
- #define INVALID_AREA -1
- forward OnPlayerEnterArea(playerid,areaid);
- forward OnPlayerExitArea(playerid,areaid);
- forward OnPlayerEnterPlayerArea(playerid,areaid);
- forward OnPlayerExitPlayerArea(playerid,areaid);
- forward TimerVerifArea();
- enum ARInfo
- {
- Float:AminX,
- Float:AmaxX,
- Float:AminY,
- Float:AmaxY,
- Valid,
- }
- new AreaInfo[MAX_AREAS][ARInfo];
- new PlayerAreaInfo[MAX_PLAYERS][MAX_AREAS][ARInfo];
- new PlayerInArea[MAX_PLAYERS];
- new PlayerInPlayerArea[MAX_PLAYERS];
- new AreaTimer;
- /* Coeur du systeme */
- public TimerVerifArea()
- {
- for(new i=0;i<MAX_PLAYERS;i++)
- {
- if(IsPlayerConnected(i))
- {
- // Verification Area
- if(PlayerInArea[i] == INVALID_AREA)
- {
- for(new a=0;a<MAX_AREAS;a++)
- {
- if(IsPlayerInArea(i,a))
- {
- PlayerInArea[i] = a;
- OnPlayerEnterArea(i, a);
- }
- }
- }
- else
- {
- if(!IsPlayerInArea(i,PlayerInArea[i]))
- {
- OnPlayerExitArea(i, PlayerInArea[i]);
- PlayerInArea[i] = INVALID_AREA;
- }
- }
- // Verification Player Area
- if(PlayerInPlayerArea[i] == INVALID_AREA)
- {
- for(new a=0;a<MAX_PLAYER_AREAS;a++)
- {
- if(IsPlayerInPlayerArea(i,a))
- {
- PlayerInPlayerArea[i] = a;
- OnPlayerEnterPlayerArea(i, a);
- }
- }
- }
- else
- {
- if(!IsPlayerInPlayerArea(i,PlayerInPlayerArea[i]))
- {
- OnPlayerExitPlayerArea(i, PlayerInPlayerArea[i]);
- PlayerInPlayerArea[i] = INVALID_AREA;
- }
- }
- }
- }
- return 1;
- }
- /* AREA */
- stock CreateArea(Float:minX, Float:maxX, Float:minY, Float:maxY)
- {
- for(new a=0;a<MAX_AREAS;a++)
- {
- if(AreaInfo[a][Valid] == 0)
- {
- AreaInfo[a][AminX] = minX;
- AreaInfo[a][AmaxX] = maxX;
- AreaInfo[a][AminY] = minY;
- AreaInfo[a][AmaxY] = maxY;
- AreaInfo[a][Valid] = 1;
- return a;
- }
- }
- return INVALID_AREA;
- }
- stock DestroyArea(areaid)
- {
- if(areaid < 0 || areaid > MAX_AREAS) return false;
- if(AreaInfo[areaid][Valid] == 1)
- {
- AreaInfo[areaid][AminX] = 0;
- AreaInfo[areaid][AmaxX] = 0;
- AreaInfo[areaid][AminY] = 0;
- AreaInfo[areaid][AmaxY] = 0;
- AreaInfo[areaid][Valid] = 0;
- for(new i=0;i<MAX_PLAYERS;i++)
- {
- if(IsPlayerConnected(i))
- {
- if(GetPlayerInArea(i) == areaid)
- {
- PlayerInArea[i] = INVALID_AREA;
- }
- }
- }
- return true;
- }
- return false;
- }
- stock IsPlayerInArea(playerid, areaid)
- {
- if(areaid < 0 || areaid > MAX_AREAS) return false;
- if(AreaInfo[areaid][Valid] == 1)
- {
- new Float:x,Float:y,Float:z;
- GetPlayerPos(playerid, x,y,z);
- if (x > AreaInfo[areaid][AminX] && x < AreaInfo[areaid][AmaxX] && y > AreaInfo[areaid][AminY] && y < AreaInfo[areaid][AmaxY]) return true;
- }
- return false;
- }
- stock GetPlayerInArea(playerid)
- {
- return PlayerInArea[playerid];
- }
- stock SetPlayerInArea(playerid,areaid)
- {
- if(areaid < 0 || areaid > MAX_AREAS) return false;
- if(AreaInfo[areaid][Valid] == 1)
- {
- new Float:x = floatsub(AreaInfo[areaid][AmaxX],floatdiv(floatsub(AreaInfo[areaid][AmaxX],AreaInfo[areaid][AminX]),2));
- new Float:y = floatsub(AreaInfo[areaid][AmaxY],floatdiv(floatsub(AreaInfo[areaid][AmaxY],AreaInfo[areaid][AminY]),2));
- SetPlayerPosFindZ(playerid,x,y,1000.0);
- }
- return false;
- }
- /* PLAYER AREA */
- stock CreatePlayerArea(playerid,Float:minX, Float:maxX, Float:minY, Float:maxY)
- {
- for(new a=0;a<MAX_PLAYER_AREAS;a++)
- {
- if(PlayerAreaInfo[playerid][a][Valid] == 0)
- {
- PlayerAreaInfo[playerid][a][AminX] = minX;
- PlayerAreaInfo[playerid][a][AmaxX] = maxX;
- PlayerAreaInfo[playerid][a][AminY] = minY;
- PlayerAreaInfo[playerid][a][AmaxY] = maxY;
- PlayerAreaInfo[playerid][a][Valid] = 1;
- return a;
- }
- }
- return INVALID_AREA;
- }
- stock DestroyPlayerArea(playerid,areaid)
- {
- if(areaid < 0 || areaid > MAX_PLAYER_AREAS) return false;
- if(PlayerAreaInfo[playerid][areaid][Valid] == 1)
- {
- PlayerAreaInfo[playerid][areaid][AminX] = 0;
- PlayerAreaInfo[playerid][areaid][AmaxX] = 0;
- PlayerAreaInfo[playerid][areaid][AminY] = 0;
- PlayerAreaInfo[playerid][areaid][AmaxY] = 0;
- PlayerAreaInfo[playerid][areaid][Valid] = 0;
- if(GetPlayerInPlayerArea(playerid) == areaid)
- {
- PlayerInPlayerArea[playerid] = INVALID_AREA;
- }
- return true;
- }
- return false;
- }
- stock GetPlayerInPlayerArea(playerid)
- {
- return PlayerInPlayerArea[playerid];
- }
- stock SetPlayerInPlayerArea(playerid,areaid)
- {
- if(areaid < 0 || areaid > MAX_PLAYER_AREAS) return false;
- if(PlayerAreaInfo[playerid][areaid][Valid] == 1)
- {
- new Float:x = floatsub(PlayerAreaInfo[playerid][areaid][AmaxX],floatdiv(floatsub(PlayerAreaInfo[playerid][areaid][AmaxX],PlayerAreaInfo[playerid][areaid][AminX]),2));
- new Float:y = floatsub(PlayerAreaInfo[playerid][areaid][AmaxY],floatdiv(floatsub(PlayerAreaInfo[playerid][areaid][AmaxY],PlayerAreaInfo[playerid][areaid][AminY]),2));
- SetPlayerPosFindZ(playerid,x,y,1000.0);
- }
- return false;
- }
- stock IsPlayerInPlayerArea(playerid, areaid)
- {
- if(areaid < 0 || areaid > MAX_PLAYER_AREAS) return false;
- if(AreaInfo[areaid][Valid] == 1)
- {
- new Float:x,Float:y,Float:z;
- GetPlayerPos(playerid, x,y,z);
- if (x > PlayerAreaInfo[playerid][areaid][AminX] && x < PlayerAreaInfo[playerid][areaid][AmaxX] && y > PlayerAreaInfo[playerid][areaid][AminY] && y < PlayerAreaInfo[playerid][areaid][AmaxY]) return true;
- }
- return false;
- }
- /* /!\ INDISPENSABLE !!! */
- AR_OnGameModeInit()
- {
- for(new a=0;a<MAX_PLAYER_AREAS;a++)
- {
- AreaInfo[a][AminX] = 0;
- AreaInfo[a][AmaxX] = 0;
- AreaInfo[a][AminY] = 0;
- AreaInfo[a][AmaxY] = 0;
- AreaInfo[a][Valid] = 0;
- }
- AreaTimer = SetTimer("TimerVerifArea",500,1);
- return 1;
- }
- stock AR_OnGameModeExit()
- {
- KillTimer(AreaTimer);
- }
- AR_OnPlayerConnect(playerid)
- {
- PlayerInArea[playerid] = INVALID_AREA;
- PlayerInPlayerArea[playerid] = INVALID_AREA;
- for(new pa=0;pa<MAX_PLAYER_AREAS;pa++)
- {
- PlayerAreaInfo[playerid][pa][AminX] = 0;
- PlayerAreaInfo[playerid][pa][AmaxX] = 0;
- PlayerAreaInfo[playerid][pa][AminY] = 0;
- PlayerAreaInfo[playerid][pa][AmaxY] = 0;
- PlayerAreaInfo[playerid][pa][Valid] = 0;
- }
- return 1;
- }
- AR_OnPlayerDisconnect(playerid)
- {
- PlayerInArea[playerid] = INVALID_AREA;
- PlayerInPlayerArea[playerid] = INVALID_AREA;
- for(new pa=0;pa<MAX_PLAYER_AREAS;pa++)
- {
- PlayerAreaInfo[playerid][pa][AminX] = 0;
- PlayerAreaInfo[playerid][pa][AmaxX] = 0;
- PlayerAreaInfo[playerid][pa][AminY] = 0;
- PlayerAreaInfo[playerid][pa][AmaxY] = 0;
- PlayerAreaInfo[playerid][pa][Valid] = 0;
- }
- return 1;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement