467 lines
16 KiB
PHP
Executable File
467 lines
16 KiB
PHP
Executable File
// vim: set ts=4 sw=4 tw=99 noet:
|
|
//
|
|
// AMX Mod X, based on AMX Mod by Aleksander Naszko ("OLO").
|
|
// Copyright (C) The AMX Mod X Development Team.
|
|
//
|
|
// This software is licensed under the GNU General Public License, version 3 or higher.
|
|
// Additional exceptions apply. For full license details, see LICENSE.txt or visit:
|
|
// https://alliedmods.net/amxmodx-license
|
|
|
|
//
|
|
// Counter-Strike Functions
|
|
//
|
|
|
|
#if defined _cstrike_included
|
|
#endinput
|
|
#endif
|
|
#define _cstrike_included
|
|
|
|
#if AMXX_VERSION_NUM >= 175
|
|
#pragma reqlib cstrike
|
|
#if !defined AMXMODX_NOAUTOLOAD
|
|
#pragma loadlib cstrike
|
|
#endif
|
|
#else
|
|
#pragma library cstrike
|
|
#endif
|
|
|
|
/* Returns player deaths.
|
|
*/
|
|
native cs_get_user_deaths(index);
|
|
|
|
/* Sets player deaths.
|
|
*/
|
|
native cs_set_user_deaths(index, newdeaths);
|
|
|
|
/* Returns index of entity (does not have to be a player) which hostage is following. 0 is hostage doesn't follow anything.
|
|
* Note: this native does not work on Condition Zero, which has a different hostage AI than CS.
|
|
*/
|
|
native cs_get_hostage_foll(index);
|
|
|
|
/* Set hostage to follow entity specified in followedindex. Does not have to be a player. If followedindex is 0 the hostage will stop following.
|
|
* Note: this native does not work on Condition Zero, which has a different hostage AI than CS.
|
|
*/
|
|
native cs_set_hostage_foll(index, followedindex = 0);
|
|
|
|
/* Get unique hostage id.
|
|
*/
|
|
native cs_get_hostage_id(index);
|
|
|
|
/* Get amount of ammo in backpack on a user for a specific weapon.
|
|
* Look in amxconst.inc for weapon types: CSW_*.
|
|
* Weapons on the same line uses the same ammo type:
|
|
* awm
|
|
* scout, ak, g3
|
|
* para
|
|
* famas, m4a1, aug, sg550, galil, sg552
|
|
* m3, xm
|
|
* usp, ump, mac
|
|
* fiveseven, p90
|
|
* deagle
|
|
* p228
|
|
* glock, mp5, tmp, elites
|
|
* flash
|
|
* he
|
|
* smoke
|
|
*/
|
|
native cs_get_user_bpammo(index, weapon);
|
|
|
|
/* Restock/remove ammo in a user's backpack.
|
|
*/
|
|
native cs_set_user_bpammo(index, weapon, amount);
|
|
|
|
/* Returns 1 if user has a defuse kit.
|
|
*/
|
|
native cs_get_user_defuse(index);
|
|
|
|
/* If defusekit is 1, the user will have a defuse kit.
|
|
* You can specify a different colour for the defuse kit icon showing on hud. Default is the normal green.
|
|
* You can specify an icon. Default is "defuser". Set flash to 1 if you want the icon to flash red.
|
|
*/
|
|
native cs_set_user_defuse(index, defusekit = 1, r = 0, g = 160, b = 0, icon[] = "defuser", flash = 0);
|
|
|
|
/* Is user in buyzone? Returns 1 when true, 0 when false.
|
|
*/
|
|
native cs_get_user_buyzone(index);
|
|
|
|
/* Returns 1 when user has a primary weapon OR a shield in inventory, else 0.
|
|
*/
|
|
native cs_get_user_hasprim(index);
|
|
|
|
/* Get user model.
|
|
*/
|
|
native cs_get_user_model(index, model[], len);
|
|
|
|
/* Set user model.
|
|
*/
|
|
native cs_set_user_model(index, const model[]);
|
|
|
|
/* Use to reset model to standard selected model.
|
|
*/
|
|
native cs_reset_user_model(index);
|
|
|
|
/* Returns users money.
|
|
*/
|
|
native cs_get_user_money(index);
|
|
|
|
/* Gives money to user. If flash is 1, the difference between new and old amount will flash red or green.
|
|
*/
|
|
native cs_set_user_money(index, money, flash = 1);
|
|
|
|
/* Does user have night vision goggles?
|
|
*/
|
|
native cs_get_user_nvg(index);
|
|
|
|
/* Set nvgoggles to 1 to give night vision goggles to index. Set it to 0 to remove them.
|
|
*/
|
|
native cs_set_user_nvg(index, nvgoggles = 1);
|
|
|
|
/* Returns 1 if user has the "skill" to plant bomb, else 0. Normally this would only be true for a terrorist carrying a bomb.
|
|
*/
|
|
native cs_get_user_plant(index);
|
|
|
|
/* If plant is 1, a user will be set to be able to plant bomb within the usual bomb target areas if having one.
|
|
* You should use this if you give a player a weapon_c4, or he won't be able to plant it
|
|
* without dropping it and picking it up again (only possible for terrorists).
|
|
* If showbombicon is 1, the green C4 icon will be shown on user hud (if plant "skill" was enabled).
|
|
*/
|
|
native cs_set_user_plant(index, plant = 1, showbombicon = 1);
|
|
|
|
/* Set user team without killing player.
|
|
* If model is anything other than CS_DONTCHANGE, that will be set as player's model.
|
|
*/
|
|
enum CsInternalModel {
|
|
CS_DONTCHANGE = 0,
|
|
CS_CT_URBAN = 1,
|
|
CS_T_TERROR = 2,
|
|
CS_T_LEET = 3,
|
|
CS_T_ARCTIC = 4,
|
|
CS_CT_GSG9 = 5,
|
|
CS_CT_GIGN = 6,
|
|
CS_CT_SAS = 7,
|
|
CS_T_GUERILLA = 8,
|
|
CS_CT_VIP = 9,
|
|
CZ_T_MILITIA = 10,
|
|
CZ_CT_SPETSNAZ = 11
|
|
};
|
|
native cs_set_user_team(index, {CsTeams,_}:team, {CsInternalModel,_}:model = CS_DONTCHANGE);
|
|
|
|
/* Get team directly from player's entity.
|
|
* 1 = terrorist
|
|
* 2 = counter-terrorist
|
|
* 3 = spectator
|
|
*/
|
|
enum CsTeams {
|
|
CS_TEAM_UNASSIGNED = 0,
|
|
CS_TEAM_T = 1,
|
|
CS_TEAM_CT = 2,
|
|
CS_TEAM_SPECTATOR = 3
|
|
};
|
|
native CsTeams:cs_get_user_team(index, &{CsInternalModel,_}:model = CS_DONTCHANGE);
|
|
|
|
/* Is user vip? Returns 1 if true, 0 if false.
|
|
*/
|
|
native cs_get_user_vip(index);
|
|
|
|
/* If vip = 1, user is set to vip.
|
|
* If model = 1, then user's model will be changed to VIP model or random CT model if vip = 0.
|
|
* If scoreboard = 1, then scoreboard will be updated to show that user is VIP.
|
|
* This shouldn't be used for players on teams other than CT.
|
|
* NOTE: this is mostly useful for unsetting vips, so they can change teams and/or buy items properly.
|
|
* It does not alter game play; the one being VIP at start of round will retain internal status as VIP; terrorists
|
|
* can terminate him and accomplish their objective, etc.
|
|
*/
|
|
native cs_set_user_vip(index, vip = 1, model = 1, scoreboard = 1);
|
|
|
|
/* Returns 1 of specified user has tk:ed (team killed).
|
|
*/
|
|
native cs_get_user_tked(index);
|
|
|
|
/* Returns 1 of specified user has TKed (team killed).
|
|
* tk = 1: player has TKed
|
|
* tk = 0: player hasn't TKed
|
|
* Set subtract to how many frags to subtract. Set subtract to negative value to add frags.
|
|
*/
|
|
native cs_set_user_tked(index, tk = 1, subtract = 1);
|
|
|
|
/* Returns different values depending on if user is driving a vehicle - and if so at what speed.
|
|
* 0: no driving
|
|
* 1: driving, but standing still
|
|
* 2-4: driving, different positive speeds
|
|
* 5: driving, negative speed (backing)
|
|
* Note: these values were tested quickly, they may differ.
|
|
*/
|
|
native cs_get_user_driving(index);
|
|
|
|
/* Returns 1 if user has a shield, else 0.
|
|
*/
|
|
native cs_get_user_shield(index);
|
|
|
|
/* Returns 1 if user is using a stationary gun, else 0.
|
|
*/
|
|
native cs_get_user_stationary(index);
|
|
|
|
/* Returns armor value and sets by reference the armor type in second parameter.
|
|
*/
|
|
enum CsArmorType {
|
|
CS_ARMOR_NONE = 0, // no armor
|
|
CS_ARMOR_KEVLAR = 1, // armor
|
|
CS_ARMOR_VESTHELM = 2 // armor and helmet
|
|
};
|
|
native cs_get_user_armor(index, &CsArmorType:armortype);
|
|
|
|
/* Use this instead of fun's set_user_armor.
|
|
* Appropriate message to update client's HUD will be sent if armortype is kevlar or vesthelm.
|
|
*/
|
|
native cs_set_user_armor(index, armorvalue, CsArmorType:armortype);
|
|
|
|
/* Returns 1 if specified weapon is in burst mode.
|
|
*/
|
|
native cs_get_weapon_burst(index);
|
|
|
|
/* If burstmode = 1, weapon will be changed to burst mode, 0 and non-burst mode (semiautomatic/automatic) will be activated.
|
|
* Only GLOCK and FAMAS can enter/leave burst mode.
|
|
*/
|
|
native cs_set_weapon_burst(index, burstmode = 1);
|
|
|
|
/* Returns 1 if weapon is silenced, else 0.
|
|
*/
|
|
native cs_get_weapon_silen(index);
|
|
|
|
/* If silence = 1, weapon will be silenced, 0 and silencer will be removed. Only USP and M4A1 can be silenced.
|
|
*/
|
|
native cs_set_weapon_silen(index, silence = 1, draw_animation = 1);
|
|
|
|
/* Returns amount of ammo in weapon's clip.
|
|
*/
|
|
native cs_get_weapon_ammo(index);
|
|
|
|
/* Set amount of ammo in weapon's clip.
|
|
*/
|
|
native cs_set_weapon_ammo(index, newammo);
|
|
|
|
/* Get weapon type. Corresponds to CSW_* in amxconst.inc: 1 is CSW_P228, 2 is CSW_SCOUT and so on...
|
|
*/
|
|
native cs_get_weapon_id(index);
|
|
|
|
/* Returns 1 if no knives mode is enabled, else 0.
|
|
*/
|
|
native cs_get_no_knives();
|
|
|
|
/* Enabled no knives mode by calling this with value 1. Disabled with 0.
|
|
* No knives mode means that player will not be given a knife when spawning.
|
|
* You can still give knives (ie through fun's give_item).
|
|
*/
|
|
native cs_set_no_knives(noknives = 0);
|
|
|
|
/* Spawns a Counter-Strike player
|
|
*/
|
|
native cs_user_spawn(player);
|
|
|
|
/* Get what weapon type (CSW_*) an armoury_entity is.
|
|
*/
|
|
native cs_get_armoury_type(index);
|
|
|
|
/* Set an armoury_entity to be of specified type. You will have to set the appropriate model.
|
|
* The second argument, type, should be a CSW_* constant. Not all weapons are supported by Counter-strike.
|
|
* 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);
|
|
|
|
#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);
|
|
|
|
/* Zoom type enum. Used for get/set_user_zoom() natives.
|
|
*/
|
|
enum
|
|
{
|
|
CS_RESET_ZOOM = 0, // Reset any zoom blocking (when using this type, mode has no effect)
|
|
CS_SET_NO_ZOOM, // Disable any sort of zoom (ie: to disable zoom in all weapons use this with mode=0)
|
|
CS_SET_FIRST_ZOOM, // Set first zoom (awp style)
|
|
CS_SET_SECOND_ZOOM, // Set second zoom (awp style)
|
|
CS_SET_AUGSG552_ZOOM, // Set aug/sg552 zoom style
|
|
};
|
|
/* Sets a weapon zoom type on a player, any zoom type will work for all weapons, so you can even set an awp zoom to pistols :D
|
|
* The 2nd param has to be one of the above zoom types in the enum. Mode can only be 0 or 1.
|
|
* If mode=0 (blocking mode), the user will be forced to use the zoom type set by the native, and wont be able to change it (even by changing weapon)
|
|
* until the native resets the zoom with CS_RESET_ZOOM.
|
|
* If mode=1 the user will be able to restore back to a normal view by changing weapon.
|
|
*/
|
|
native cs_set_user_zoom(index, type, mode);
|
|
|
|
/* Returns how a user is zooming during the native call. Values correspond to the above enum, but will return 0 if an error occurred.
|
|
*/
|
|
native cs_get_user_zoom(index);
|
|
|
|
/* Returns the submodel setting of the player.
|
|
* If this is 1, then the user has a backpack or defuser on their model (depending on team)
|
|
*/
|
|
native cs_get_user_submodel(index);
|
|
|
|
/* Sets the submodel setting of the player.
|
|
* If this is 1, then the user has a backpack or defuser on their model (depending on team)
|
|
* 0 removes it.
|
|
*/
|
|
native cs_set_user_submodel(index, value);
|
|
|
|
/* Gets or sets the user's last activity time. This is the time that CS's internal afk kicker
|
|
* checks to see who has been afk too long.
|
|
*/
|
|
native Float:cs_get_user_lastactivity(index);
|
|
|
|
native cs_set_user_lastactivity(index, Float:value);
|
|
|
|
/* Gets or sets the number of hostages that a user has killed.
|
|
*/
|
|
native cs_get_user_hostagekills(index);
|
|
|
|
native cs_set_user_hostagekills(index, value);
|
|
|
|
/* Gets or sets the time that the hostage was last used.
|
|
*/
|
|
native Float:cs_get_hostage_lastuse(index);
|
|
|
|
native cs_set_hostage_lastuse(index, Float:value);
|
|
|
|
/* Gets or sets the time which the hostage can next be used.
|
|
*/
|
|
native Float:cs_get_hostage_nextuse(index);
|
|
|
|
native cs_set_hostage_nextuse(index, Float:value);
|
|
|
|
/* Gets or sets the time in which the C4 will explode.
|
|
*/
|
|
native Float:cs_get_c4_explode_time(index);
|
|
|
|
native cs_set_c4_explode_time(index, Float:value);
|
|
|
|
/* Gets or sets whether the C4 is being defused.
|
|
*/
|
|
native bool:cs_get_c4_defusing(c4index);
|
|
|
|
native cs_set_c4_defusing(c4index, bool:defusing);
|
|
|
|
/**
|
|
* Creates an entity using Counter-Strike's custom CreateNamedEntity wrapper.
|
|
*
|
|
* @note Unlike other mods CS keeps track of entities using a custom hashtable.
|
|
* This function adds entities to this hashtable, providing benefits over
|
|
* the default CreateNamedEntity (used by create_entity() for example):
|
|
* - Storing entities in a hashtable allows CS to improve classname lookup
|
|
* performance compared to functions like FindEntityByString (used by
|
|
* find_ent_by_class() for example) that usually have to loop
|
|
* through all entities incrementally.
|
|
* - As CS exclusively uses the hashtable for classname lookup, entities
|
|
* created using the default engine functions will not be found by the
|
|
* game. For example "weaponbox" entities are supposed to be
|
|
* automatically cleaned up on round restart but are not considered if
|
|
* they have not been added to the hashtable.
|
|
* @note The faster hashtable lookup can be utilized with cs_find_ent_by_class()
|
|
*
|
|
* @param classname Entity class name
|
|
*
|
|
* @return Index of the created entity, 0 otherwise.
|
|
*/
|
|
native cs_create_entity(const classname[]);
|
|
|
|
/**
|
|
* Finds an entity in the world using Counter-Strike's custom FindEntityByString
|
|
* wrapper.
|
|
*
|
|
* @note Unlike other mods CS keeps track of entities using a custom hashtable.
|
|
* This function utilizes the hasthable and allows for considerably faster
|
|
* classname lookup compared to the default FindEntityByString (used by
|
|
* find_ent_by_class() for example).
|
|
* @note This exclusively considers entities in the hashtable, created by the
|
|
* game itself or using cs_create_entity().
|
|
*
|
|
* @param start_index Entity index to start searching from. -1 to start from
|
|
* the first entity
|
|
* @param classname Classname to search for
|
|
*
|
|
* @return Entity index > 0 if found, 0 otherwise
|
|
*/
|
|
native cs_find_ent_by_class(start_index, const classname[]);
|
|
|
|
/**
|
|
* Called when CS internally fires a command to a player. It does this for a few
|
|
* functions, most notably rebuy/autobuy functionality. This is also used to pass
|
|
* commands to CZ bots internally.
|
|
*
|
|
* @param id Client index.
|
|
* @param cmd Command string.
|
|
* @return PLUGIN_HANDLED to block, PLUGIN_CONTINUE for normal operation.
|
|
*/
|
|
forward CS_InternalCommand(id, const cmd[]);
|
|
|
|
|
|
/**
|
|
* The following constants are used with CS_OnBuy[Attempt] forwards.
|
|
*/
|
|
#define CSI_P228 CSW_P228
|
|
#define CSI_SCOUT CSW_SCOUT
|
|
#define CSI_HEGRENADE CSW_HEGRENADE
|
|
#define CSI_XM1014 CSW_XM1014
|
|
#define CSI_C4 CSW_C4
|
|
#define CSI_MAC10 CSW_MAC10
|
|
#define CSI_AUG CSW_AUG
|
|
#define CSI_SMOKEGRENADE CSW_SMOKEGRENADE
|
|
#define CSI_ELITE CSW_ELITE
|
|
#define CSI_FIVESEVEN CSW_FIVESEVEN
|
|
#define CSI_UMP45 CSW_UMP45
|
|
#define CSI_SG550 CSW_SG550
|
|
#define CSI_GALIL CSW_GALIL
|
|
#define CSI_FAMAS CSW_FAMAS
|
|
#define CSI_USP CSW_USP
|
|
#define CSI_GLOCK18 CSW_GLOCK18
|
|
#define CSI_AWP CSW_AWP
|
|
#define CSI_MP5NAVY CSW_MP5NAVY
|
|
#define CSI_M249 CSW_M249
|
|
#define CSI_M3 CSW_M3
|
|
#define CSI_M4A1 CSW_M4A1
|
|
#define CSI_TMP CSW_TMP
|
|
#define CSI_G3SG1 CSW_G3SG1
|
|
#define CSI_FLASHBANG CSW_FLASHBANG
|
|
#define CSI_DEAGLE CSW_DEAGLE
|
|
#define CSI_SG552 CSW_SG552
|
|
#define CSI_AK47 CSW_AK47
|
|
#define CSI_P90 CSW_P90
|
|
#define CSI_SHIELDGUN CSW_SHIELDGUN
|
|
#define CSI_VEST CSW_VEST // Custom
|
|
#define CSI_VESTHELM CSW_VESTHELM // Custom
|
|
#define CSI_DEFUSER 33 // Custom
|
|
#define CSI_NVGS 34 // Custom
|
|
#define CSI_PRIAMMO 36 // Custom
|
|
#define CSI_SECAMMO 37 // Custom
|
|
|
|
/**
|
|
* Called when a player attempts to purchase an item.
|
|
* This is ususally called right away on buy commands issued by a player.
|
|
*
|
|
* @note Return PLUGIN_CONTINUE to allow the purchase or return a higher action to deny.
|
|
*
|
|
* @param index Player index.
|
|
* @param item Item index, see CSI_* constants.
|
|
*/
|
|
forward CS_OnBuyAttempt(index, item);
|
|
|
|
/**
|
|
* Called when a player purchases an item.
|
|
* This usually called right before a player gets the purchased item.
|
|
*
|
|
* @note Return PLUGIN_CONTINUE to allow the purchase or return a higher action to deny.
|
|
*
|
|
* @param index Player index.
|
|
* @param item Item index, see CSI_* constants.
|
|
*/
|
|
forward CS_OnBuy(index, item);
|