Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- /*==============================================================================
- EASY GREEN ZONE
- easy_greenzone.inc v1.1
- Author: Nikita Shtimenko - whale (a.k.a Twixxx / Twixyck)
- Copyright (c) 2019 Nikita Shtimenko (whale)
- This software is provided 'as-is', without any express or implied warranty.
- In no event will the authors be held liable for any damages arising from the
- use of this software.
- Permission is granted to anyone to use this software for
- any purpose, including commercial applications, and to alter it and
- redistribute it freely, subject to the following restrictions:
- 1. The origin of this software must not be misrepresented; you must not
- claim that you wrote the original software. If you use this software in
- a product, an acknowledgment in the product documentation would be
- appreciated but is not required.
- 2. Altered source versions must be plainly marked as such, and must not be
- misrepresented as being the original software.
- 3. This notice may not be removed or altered from any source distribution.
- ==============================================================================*/
- #if defined _eg_included
- #endinput
- #endif
- #define _eg_included
- #if !defined Streamer_IncludeFileVersion
- #error easy_greenzone.inc requires streamer.inc to work.
- #endif
- #if !defined _FOREACH_LOCAL_VERSION
- #error easy_greenzone.inc requires foreach.inc to work.
- #endif
- #if !defined EG_MAX_GREEN_ZONES
- #error EG_MAX_GREEN_ZONES must be defined.
- #endif
- #if !defined EG_FIRE_KEY_TRIGGER_DELAY
- #error EG_FIRE_KEY_TRIGGER_DELAY must be defined.
- #endif
- #if defined EG_INVALID_GREENZONE_ID
- #undef EG_INVALID_GREENZONE_ID
- #endif
- #define EG_INVALID_GREENZONE_ID -1
- #if defined EG_MAX_WEAPON_SLOT
- #undef EG_MAX_WEAPON_SLOT
- #endif
- #define EG_MAX_WEAPON_SLOT 12
- #if !defined PRESSED
- #define PRESSED(%0) \
- (((newkeys & (%0)) == (%0)) && ((oldkeys & (%0)) != (%0)))
- #endif
- #define GetPlayerGreenZoneId(%0) eg_playerGreenZoneId[%0]
- static
- Iterator:eg_greenZones<EG_MAX_GREEN_ZONES>,
- eg_playerGreenZoneId[MAX_PLAYERS] = {EG_INVALID_GREENZONE_ID, ...},
- eg_playerLastFireKeyTick[MAX_PLAYERS] = {0, ...},
- eg_playerWeapon[MAX_PLAYERS][EG_MAX_WEAPON_SLOT],
- eg_playerWeaponAmmo[MAX_PLAYERS][EG_MAX_WEAPON_SLOT];
- #if defined GetPlayerGreenZoneId
- #undef GetPlayerGreenZoneId
- #endif
- #define GetPlayerGreenZoneId(%0) eg_playerGreenZoneId[%0]
- public OnPlayerConnect(playerid)
- {
- eg_playerGreenZoneId[playerid] = EG_INVALID_GREENZONE_ID;
- eg_playerLastFireKeyTick[playerid] = 0;
- for(new i = 0; i < EG_MAX_WEAPON_SLOT; i++)
- {
- eg_playerWeapon[playerid][i] = 0;
- eg_playerWeaponAmmo[playerid][i] = 0;
- }
- #if defined eg_OnPlayerConnect
- eg_OnPlayerConnect(playerid);
- #endif
- return 1;
- }
- #if defined _ALS_OnPlayerConnect
- #undef OnPlayerConnect
- #else
- #define _ALS_OnPlayerConnect
- #endif
- #define OnPlayerConnect eg_OnPlayerConnect
- #if defined eg_OnPlayerConnect
- forward eg_OnPlayerConnect(playerid);
- #endif
- public OnPlayerEnterDynamicArea(playerid, areaid)
- {
- if(Iter_Contains(eg_greenZones, areaid))
- {
- eg_playerGreenZoneId[playerid] = areaid;
- for(new i = 0; i < EG_MAX_WEAPON_SLOT; i++)
- GetPlayerWeaponData(playerid, i, eg_playerWeapon[playerid][i], eg_playerWeaponAmmo[playerid][i]);
- ResetPlayerWeapons(playerid);
- #if defined OnPlayerEnterGreenZone
- OnPlayerEnterGreenZone(playerid, areaid);
- #endif
- }
- #if defined eg_OnPlayerEnterDynamicArea
- eg_OnPlayerEnterDynamicArea(playerid, areaid);
- #endif
- return 1;
- }
- #if defined _ALS_OnPlayerEnterDynamicArea
- #undef OnPlayerEnterDynamicArea
- #else
- #define _ALS_OnPlayerEnterDynamicArea
- #endif
- #define OnPlayerEnterDynamicArea eg_OnPlayerEnterDynamicArea
- #if defined eg_OnPlayerEnterDynamicArea
- forward eg_OnPlayerEnterDynamicArea(playerid, areaid);
- #endif
- public OnPlayerLeaveDynamicArea(playerid, areaid)
- {
- if(Iter_Contains(eg_greenZones, areaid))
- {
- for(new i = 0; i < EG_MAX_WEAPON_SLOT; i++)
- {
- if(eg_playerWeapon[playerid][i] != WEAPON_FIST && eg_playerWeaponAmmo[playerid][i] > 0)
- GivePlayerWeapon(playerid, eg_playerWeapon[playerid][i], eg_playerWeaponAmmo[playerid][i]);
- eg_playerWeapon[playerid][i] = 0;
- eg_playerWeaponAmmo[playerid][i] = 0;
- }
- eg_playerGreenZoneId[playerid] = EG_INVALID_GREENZONE_ID;
- #if defined OnPlayerLeaveGreenZone
- OnPlayerLeaveGreenZone(playerid, areaid);
- #endif
- }
- #if defined eg_OnPlayerLeaveDynamicArea
- eg_OnPlayerLeaveDynamicArea(playerid, areaid);
- #endif
- return 1;
- }
- #if defined _ALS_OnPlayerLeaveDynamicArea
- #undef OnPlayerLeaveDynamicArea
- #else
- #define _ALS_eg_OnPlayerLeaveDynamicArea
- #endif
- #define OnPlayerLeaveDynamicArea eg_OnPlayerLeaveDynamicArea
- #if defined eg_OnPlayerLeaveDynamicArea
- forward eg_OnPlayerLeaveDynamicArea(playerid, areaid);
- #endif
- stock bool:IsPlayerInGreenZone(const playerid, const green_zone_id)
- {
- return eg_playerGreenZoneId[playerid] == green_zone_id;
- }
- stock bool:IsPlayerInAnyGreenZone(const playerid)
- {
- return eg_playerGreenZoneId[playerid] != EG_INVALID_GREENZONE_ID;
- }
- public OnPlayerKeyStateChange(playerid, newkeys, oldkeys)
- {
- if(PRESSED(KEY_FIRE))
- {
- if(GetPlayerState(playerid) == PLAYER_STATE_ONFOOT)
- {
- if(IsPlayerInAnyGreenZone(playerid))
- {
- if(gettime() - eg_playerLastFireKeyTick[playerid] < EG_FIRE_KEY_TRIGGER_DELAY)
- return 1;
- eg_playerLastFireKeyTick[playerid] = gettime();
- #if defined OnPlayerPressFireKeyInGreenZone
- OnPlayerPressFireKeyInGreenZone(playerid);
- #endif
- }
- }
- }
- #if defined eg_OnPlayerKeyStateChange
- eg_OnPlayerKeyStateChange(playerid, newkeys, oldkeys);
- #endif
- return 1;
- }
- #if defined _ALS_OnPlayerKeyStateChange
- #undef OnPlayerKeyStateChange
- #else
- #define _ALS_OnPlayerKeyStateChange
- #endif
- #define OnPlayerKeyStateChange eg_OnPlayerKeyStateChange
- #if defined eg_OnPlayerKeyStateChange
- forward eg_OnPlayerKeyStateChange(playerid, newkeys, oldkeys);
- #endif
- stock eg_DestroyDynamicArea(areaid)
- {
- if(Iter_Contains(eg_greenZones, areaid))
- Iter_Remove(eg_greenZones, areaid);
- return DestroyDynamicArea(areaid);
- }
- #if defined _ALS_DestroyDynamicArea
- #undef DestroyDynamicArea
- #else
- #define _ALS_DestroyDynamicArea
- #endif
- #define DestroyDynamicArea eg_DestroyDynamicArea
- stock CreateCircleGreenZone(Float:x, Float:y, Float:size, worldid = -1, interiorid = -1)
- {
- if(Iter_Count(eg_greenZones) + 1 == EG_MAX_GREEN_ZONES)
- return EG_INVALID_GREENZONE_ID;
- new
- easy_greenzoneId = CreateDynamicCircle(x, y, size, worldid, interiorid);
- Iter_Add(eg_greenZones, easy_greenzoneId);
- return easy_greenzoneId;
- }
- stock CreateCylinderGreenZone(Float:x, Float:y, Float:minz, Float:maxz, Float:size, worldid = -1, interiorid = -1)
- {
- if(Iter_Count(eg_greenZones) + 1 == EG_MAX_GREEN_ZONES)
- return EG_INVALID_GREENZONE_ID;
- new
- easy_greenzoneId = CreateDynamicCylinder(x, y, minz, maxz, size, worldid, interiorid);
- Iter_Add(eg_greenZones, easy_greenzoneId);
- return easy_greenzoneId;
- }
- stock CreateSphereGreenZone(Float:x, Float:y, Float:z, Float:size, worldid = -1, interiorid = -1)
- {
- if(Iter_Count(eg_greenZones) + 1 == EG_MAX_GREEN_ZONES)
- return EG_INVALID_GREENZONE_ID;
- new
- easy_greenzoneId = CreateDynamicSphere(x, y, z, size, worldid, interiorid);
- Iter_Add(eg_greenZones, easy_greenzoneId);
- return easy_greenzoneId;
- }
- stock CreateRectangleGreenZone(Float:minx, Float:miny, Float:maxx, Float:maxy, wolrid = -1, interiorid = -1)
- {
- if(Iter_Count(eg_greenZones) + 1 == EG_MAX_GREEN_ZONES)
- return EG_INVALID_GREENZONE_ID;
- new
- easy_greenzoneId = CreateDynamicRectangle(minx, miny, maxx, maxy, worldid, interiorid);
- Iter_Add(eg_greenZones, easy_greenzoneId);
- return easy_greenzoneId;
- }
- stock CreateCuboidGreenZone(Float:minx, Float:miny, Float:minz, Float:maxx, Float:maxy, Float:maxz, worldid = -1, interiorid = -1)
- {
- if(Iter_Count(eg_greenZones) + 1 == EG_MAX_GREEN_ZONES)
- return EG_INVALID_GREENZONE_ID;
- new
- easy_greenzoneId = CreateDynamicCuboid(minx, miny, minz, maxx, maxy, maxz, worldid, interiorid);
- Iter_Add(eg_greenZones, easy_greenzoneId);
- return easy_greenzoneId;
- }
- stock CreateCubeGreenZone(Float:minx, Float:miny, Float:minz, Float:maxx, Float:maxy, Float:maxz, worldid = -1, interiorid = -1)
- {
- if(Iter_Count(eg_greenZones) + 1 == EG_MAX_GREEN_ZONES)
- return EG_INVALID_GREENZONE_ID;
- new
- easy_greenzoneId = CreateDynamicCube(minx, miny, minz, maxx, maxy, maxz, worldid, interiorid);
- Iter_Add(eg_greenZones, easy_greenzoneId);
- return easy_greenzoneId;
- }
- stock CreatePolygonGreenZone(Float:points[], Float:minz = -FLOAT_INFINITY, Float:maxz = FLOAT_INFINITY, maxpoints = sizeof points, worldid = -1, interiorid = -1)
- {
- if(Iter_Count(eg_greenZones) + 1 == EG_MAX_GREEN_ZONES)
- return EG_INVALID_GREENZONE_ID;
- new
- easy_greenzoneId = CreateDynamicPolygon(points, minz, maxz, maxpoints, worldid, interiorid);
- Iter_Add(eg_greenZones, easy_greenzoneId);
- return easy_greenzoneId;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement