diff --git a/dlls/cstrike/cstrike.cpp b/dlls/cstrike/cstrike.cpp index 7d23efbf..282567aa 100755 --- a/dlls/cstrike/cstrike.cpp +++ b/dlls/cstrike/cstrike.cpp @@ -580,10 +580,29 @@ static cell AMX_NATIVE_CALL cs_get_user_inside_buyzone(AMX *amx, cell *params) / // Make into edict pointer edict_t *pPlayer = MF_GetPlayerEdict(params[1]); + + // This offset is 0 when outside, 1 when inside. + if ((int)*((int *)pPlayer->pvPrivateData + OFFSET_MAPZONE) & PLAYER_IN_BUYZONE) + return 1; - return (int)*((int *)pPlayer->pvPrivateData + OFFSET_BUYZONE); // This offset is 0 when outside, 1 when inside. + return 0; } +static cell AMX_NATIVE_CALL cs_get_user_mapzones(AMX *amx, cell *params) // cs_get_user_mapzones(index); = 1 param +{ + // Is user inside a special zone? + // params[1] = user index + + // Valid entity should be within range + CHECK_PLAYER(params[1]); + + // Make into edict pointer + edict_t *pPlayer = MF_GetPlayerEdict(params[1]); + + return (int)*((int *)pPlayer->pvPrivateData + OFFSET_MAPZONE); +} + + static cell AMX_NATIVE_CALL cs_get_user_plant(AMX *amx, cell *params) // cs_get_user_plant(index); = 1 param { // Can user plant a bomb if he has one? @@ -1404,6 +1423,7 @@ AMX_NATIVE_INFO cstrike_Exports[] = { {"cs_get_user_team", cs_get_user_team}, {"cs_set_user_team", cs_set_user_team}, {"cs_get_user_buyzone", cs_get_user_inside_buyzone}, + {"cs_get_user_mapzones", cs_get_user_mapzones}, {"cs_get_user_plant", cs_get_user_plant}, {"cs_set_user_plant", cs_set_user_plant}, {"cs_get_user_defuse", cs_get_user_defusekit}, diff --git a/dlls/cstrike/cstrike.h b/dlls/cstrike/cstrike.h index 1c8d87e9..0cb15fe6 100755 --- a/dlls/cstrike/cstrike.h +++ b/dlls/cstrike/cstrike.h @@ -74,7 +74,7 @@ #define OFFSET_DEFUSE_PLANT 193 + EXTRAOFFSET #define OFFSET_VIP 209 + EXTRAOFFSET #define OFFSET_TK 216 + EXTRAOFFSET // 040926 - #define OFFSET_BUYZONE 235 + EXTRAOFFSET + #define OFFSET_MAPZONE 235 + EXTRAOFFSET #define OFFSET_ISDRIVING 350 + EXTRAOFFSET // 040926 #define OFFSET_STATIONARY 362 + EXTRAOFFSET // 040927 (363 works also!) @@ -115,7 +115,7 @@ #define OFFSET_DEFUSE_PLANT 219 + EXTRAOFFSET // +26 #define OFFSET_VIP 242 + EXTRAOFFSET // +27 #define OFFSET_TK 249 + EXTRAOFFSET // +33 040927 - #define OFFSET_BUYZONE 268 + EXTRAOFFSET // +27 + #define OFFSET_MAPZONE 268 + EXTRAOFFSET // +27 #define OFFSET_ISDRIVING 386 + EXTRAOFFSET // 040927 #define OFFSET_STATIONARY 400 + EXTRAOFFSET // 040927 (401 works also) @@ -214,6 +214,8 @@ #define PLAYER_IS_VIP (1<<8) +#define PLAYER_IN_BUYZONE (1<<0) + #define TEAM_UNASSIGNED 0 #define TEAM_T 1 #define TEAM_CT 2 diff --git a/plugins/include/cstrike.inc b/plugins/include/cstrike.inc index 4fcba883..66eace9d 100755 --- a/plugins/include/cstrike.inc +++ b/plugins/include/cstrike.inc @@ -257,4 +257,15 @@ native cs_get_armoury_type(index); * Supported weapons/items: CSW_MP5NAVY, CSW_TMP, CSW_P90, CSW_MAC10, CSW_AK47, CSW_SG552, CSW_M4A1, CSW_AUG, CSW_SCOUT * CSW_G3SG1, CSW_AWP, CSW_M3, CSW_XM1014, CSW_M249, CSW_FLASHBANG, CSW_HEGRENADE, CSW_VEST, CSW_VESTHELM, CSW_SMOKEGRENADE */ -native cs_set_armoury_type(index, type); \ No newline at end of file +native cs_set_armoury_type(index, type); + +#define CS_MAPZONE_BUY (1<<0) +#define CS_MAPZONE_BOMBTARGET (1<<1) +#define CS_MAPZONE_HOSTAGE_RESCUE (1<<2) +#define CS_MAPZONE_ESCAPE (1<<3) +#define CS_MAPZONE_VIP_SAFETY (1<<4) + +/* Returns in bitwise form if the user is in a specific map zone. + * NOTE: If user can't plant (cs_get_user_plant(index) is 0) then cs_get_user_mapzones(index) & CS_MAPZONE_BOMBTARGET will return 0 too. + */ +native cs_get_user_mapzones(index);