Автор часто видел как люди просили сделать возможным использовать функции cstrike модуля через fakemeta.
После чего он сделал аналоги функций через модуль fakemeta (stock функции), но кроме четырех. Для того что бы ими пользоваться необходим небольшой плагин.
Преобразованные функции:
fm_cs_get_user_deaths(client)
fm_cs_set_user_deaths(client, deaths)
fm_cs_get_hostage_follow(entity)
fm_cs_set_hostage_follow(entity)
fm_cs_get_hostage_id(entity)
fm_cs_get_user_bpammo(client, weapon)
fm_cs_set_user_bpammo(client, weapon, ammo)
fm_cs_get_user_defuse(client)
fm_cs_set_user_defuse(client, defusekit=1, r=0, g=160, b=0, icon[]="defuser", flash=0)
fm_cs_get_user_buyzone(client)
fm_cs_get_user_hasprim(client)
fm_cs_get_user_model(client, model[], len)
fm_cs_set_user_model(client, const model[])
fm_cs_reset_user_model(client)
fm_cs_get_user_money(client)
fm_cs_set_user_money(client, money, flash=1)
fm_cs_get_user_nvg(client)
fm_cs_set_user_nvg(client, nvgoggles=1)
fm_cs_get_user_plant(client)
fm_cs_set_user_plant(client, plant=1, showbombicon=1)
fm_cs_set_user_team(client, {CsTeams,_}:team, {CsInternalModel,_}:model=CS_DONTCHANGE)
CsTeams:fm_cs_get_user_team(client, &{CsInternalModel,_}:model=CS_DONTCHANGE)
fm_cs_get_user_vip(client)
fm_cs_set_user_vip(client, vip=1, model=1, scoreboard=1)
fm_cs_get_user_tked(client)
fm_cs_set_user_tked(client, tk=1, subtract=1)
fm_cs_get_user_driving(client)
fm_cs_get_user_shield(client)
fm_cs_get_user_stationary(client)
fm_cs_get_user_armor(client, &CsArmorType:armortype)
fm_cs_set_user_armor(client, armorvalue, CsArmorType:armortype)
fm_cs_get_weapon_burst(entity)
fm_cs_set_weapon_burst(entity, burstmode=1)
fm_cs_get_weapon_silen(entity)
fm_cs_set_weapon_silen(entity, silence=1, draw_animation=1)
fm_cs_get_weapon_ammo(entity)
fm_cs_set_weapon_ammo(entity, clip)
fm_cs_get_weapon_id(entity)
fm_cs_user_spawn(client)
fm_cs_get_armoury_type(entity)
fm_cs_set_armoury_type(entity, type)
fm_cs_get_user_mapzones(client)
fm_cs_set_user_mapzones(client, mapzones)
fm_cs_get_user_submodel(client)
fm_cs_set_user_submodel(client, value)
Float:fm_cs_get_user_lastactivity(client)
fm_cs_set_user_lastactivity(client, Float:value)
fm_cs_get_user_hostagekills(client)
fm_cs_set_user_hostagekills(client, value)
Float:fm_cs_get_hostage_lastuse(entity)
fm_cs_set_hostage_lastuse(entity, Float:value)
Float:fm_cs_get_hostage_nextuse(entity)
fm_cs_set_hostage_nextuse(entity, Float:value)
Float:fm_cs_get_c4_explode_time(entity)
fm_cs_set_c4_explode_time(entity, Float:value)
bool:fm_cs_get_c4_defusing(entity)
fm_cs_set_c4_defusing(entity, bool:defusing)
Функции для которых необходим плагин:
fm_cs_get_no_knives();
fm_cs_set_no_knives(noknives=0);
fm_cs_set_user_zoom(client, type, mode);
fm_cs_get_user_zoom(client);
Как использовать дополнительный плагин:
При использовании данного плагина, важно что бы он был в списке плагинов в plugins.ini выше того, который использует его функции.
Автор рекомендует поместить его в самое начало, что бы потом случайно не переместить его ниже.
А в плагине где идет использование функции, необходимо включить инклюд:
#include <fm_cstrike_plugin>
Требования:
- Fakemeta module
- HamSandwich module
Файлы:
Содержимое файлов:
fm_cstrike.inc
[spoiler]
#if defined _fm_cstrike_included || defined _cstrike_included[/spoiler]
#endinput
#endif
#define _cstrike_included
#define _fm_cstrike_included
#include <amxmodx>
#include <fakemeta>
#include <hamsandwich>
#define EXTRAOFFSET 5
#define EXTRAOFFSET_WEAPONS 4
#define ACTUAL_EXTRA_OFFSET 20
// "weapon_*" offsets
#define OFFSET_WEAPONID 43
#define OFFSET_WEAPONCLIP 52
#define OFFSET_SILENCER_FIREMODE 74
// "player" offsets
#define OFFSET_ARMORTYPE 112
#define OFFSET_TEAM 114
#define OFFSET_MONEY 115
#define OFFSET_PRIMWEAPON 116
#define OFFSET_LASTACTIVITY 124
#define OFFSET_INTERALMODEL 126
#define OFFSET_NVGOGGLES 129
#define OFFSET_BOMB_DEFUSE 193
#define OFFSET_ISVIP 209
#define OFFSET_TKED 216
#define OFFSET_HOSTAGEKILLS 217
#define OFFSET_MAPZONE 235
#define OFFSET_DRIVING 350
#define OFFSET_STATIONARY 362
enum
{
OFFSET_AMMO_AWP = 377,
OFFSET_AMMO_SCOUT, // AK47, G3SG1
OFFSET_AMMO_M249,
OFFSET_AMMO_M4A1, // FAMAS, AUG, SG550, GALIL, SG552
OFFSET_AMMO_M3, // XM1014
OFFSET_AMMO_USP, // UMP45, MAC10
OFFSET_AMMO_FIVESEVEN, // P90
OFFSET_AMMO_DEAGLE,
OFFSET_AMMO_P228,
OFFSET_AMMO_GLOCK18, // MP5NAVY, TMP, ELITE
OFFSET_AMMO_FLASHBANG,
OFFSET_AMMO_HEGRENADE,
OFFSET_AMMO_SMOKEGRENADE,
OFFSET_AMMO_C4
};
#define OFFSET_SHIELD 510
#define OFFSET_DEATHS 555
// "hostage_entity" offsets
#define OFFSET_HOSTAGEFOLLOW 86
#define OFFSET_HOSTAGENEXTUSE 100
#define OFFSET_HOSTAGELASTUSE 483
#define OFFSET_HOSTAGEID 487
// "armoury_entity" offsets
#define OFFSET_CSATYPE 34
// C4 offsets
#define OFFSET_C4_EXPLODETIME 100
#define OFFSET_C4_DEFUSING 0x181
stock fm_cs_get_user_deaths(client)
{
return get_pdata_int(client, OFFSET_DEATHS, EXTRAOFFSET);
}
stock fm_cs_set_user_deaths(client, deaths)
{
set_pdata_int(client, OFFSET_DEATHS, deaths, EXTRAOFFSET);
static ScoreInfo;
if( ScoreInfo || (ScoreInfo = get_user_msgid("ScoreInfo")) )
{
emessage_begin(MSG_BROADCAST, ScoreInfo);
ewrite_byte(client);
ewrite_short(get_user_frags(client));
ewrite_short(deaths);
ewrite_short(0);
ewrite_short(_:fm_cs_get_user_team(client));
emessage_end();
}
}
stock fm_cs_get_hostage_foll(entity)
{
return get_pdata_int(entity, OFFSET_HOSTAGEFOLLOW, EXTRAOFFSET);
}
stock fm_cs_set_hostage_foll(entity, followentity=0)
{
set_pdata_int(entity, OFFSET_HOSTAGEFOLLOW, followentity, EXTRAOFFSET);
}
stock fm_cs_get_hostage_id(entity)
{
return get_pdata_int(entity, OFFSET_HOSTAGEID, EXTRAOFFSET);
}
static const _CSW_to_offset[] =
{
0, OFFSET_AMMO_P228, OFFSET_AMMO_SCOUT, OFFSET_AMMO_HEGRENADE, OFFSET_AMMO_M3, OFFSET_AMMO_C4, OFFSET_AMMO_USP, OFFSET_AMMO_SMOKEGRENADE,
OFFSET_AMMO_GLOCK18, OFFSET_AMMO_FIVESEVEN, OFFSET_AMMO_USP, OFFSET_AMMO_M4A1, OFFSET_AMMO_M4A1, OFFSET_AMMO_M4A1, OFFSET_AMMO_USP, OFFSET_AMMO_GLOCK18,
OFFSET_AMMO_AWP, OFFSET_AMMO_GLOCK18, OFFSET_AMMO_M249, OFFSET_AMMO_M3, OFFSET_AMMO_M4A1, OFFSET_AMMO_GLOCK18, OFFSET_AMMO_SCOUT, OFFSET_AMMO_FLASHBANG,
OFFSET_AMMO_DEAGLE, OFFSET_AMMO_M4A1, OFFSET_AMMO_SCOUT, 0, OFFSET_AMMO_FIVESEVEN
};
stock fm_cs_get_user_bpammo(client, weapon)
{
return get_pdata_int(client, _CSW_to_offset[weapon], EXTRAOFFSET);
}
stock fm_cs_set_user_bpammo(client, weapon, ammo)
{
set_pdata_int(client, _CSW_to_offset[weapon], ammo, EXTRAOFFSET);
}
#define HAS_DEFUSE_KIT (1<<16)
stock fm_cs_get_user_defuse(client)
{
return (get_pdata_int(client, OFFSET_BOMB_DEFUSE, EXTRAOFFSET) & HAS_DEFUSE_KIT) ? 1 : 0;
}
stock fm_cs_set_user_defuse(client, defusekit=1, r=0, g=160, b=0, icon[]="defuser", flash=0)
{
static StatusIcon;
new kit = get_pdata_int(client, OFFSET_BOMB_DEFUSE, EXTRAOFFSET);
if( defusekit && !(kit & HAS_DEFUSE_KIT) )
{
set_pev(client, pev_body, 1);
set_pdata_int(client, OFFSET_BOMB_DEFUSE, (kit | HAS_DEFUSE_KIT), EXTRAOFFSET);
if( StatusIcon || (StatusIcon = get_user_msgid("StatusIcon")) )
{
emessage_begin(MSG_ONE_UNRELIABLE, StatusIcon, _, client);
ewrite_byte((flash == 1) ? 2 : 1);
ewrite_string(icon);
ewrite_byte(r);
ewrite_byte(g);
ewrite_byte(b);
emessage_end();
}
}
else if( !defusekit && (kit & HAS_DEFUSE_KIT) )
{
set_pev(client, pev_body, 0);
set_pdata_int(client, OFFSET_BOMB_DEFUSE, (kit & ~HAS_DEFUSE_KIT), EXTRAOFFSET);
if( StatusIcon || (StatusIcon = get_user_msgid("StatusIcon")) )
{
emessage_begin(MSG_ONE_UNRELIABLE, StatusIcon, _, client);
ewrite_byte(0);
ewrite_string("defuser");
emessage_end();
}
}
}
stock fm_cs_get_user_buyzone(client)
{
return (fm_cs_get_user_mapzones(client) & CS_MAPZONE_BUY) ? 1 : 0;
}
stock fm_cs_get_user_hasprim(client)
{
return get_pdata_int(client, OFFSET_PRIMWEAPON, EXTRAOFFSET);
}
stock fm_cs_get_user_model(client, model[], len)
{
engfunc(EngFunc_InfoKeyValue, engfunc(EngFunc_GetInfoKeyBuffer, client), "model", model, len);
}
stock fm_cs_set_user_model(client, const model[])
{
engfunc(EngFunc_SetClientKeyValue, client, engfunc(EngFunc_GetInfoKeyBuffer, client), "model", model);
}
stock fm_cs_reset_user_model(client)
{
dllfunc(DLLFunc_ClientUserInfoChanged, client, engfunc(EngFunc_GetInfoKeyBuffer, client));
}
stock fm_cs_get_user_money(client)
{
return get_pdata_int(client, OFFSET_MONEY, EXTRAOFFSET);
}
stock fm_cs_set_user_money(client, money, flash=1)
{
set_pdata_int(client, OFFSET_MONEY, money, EXTRAOFFSET);
static Money;
if( Money || (Money = get_user_msgid("Money")) )
{
emessage_begin(MSG_ONE_UNRELIABLE, Money, _, client);
ewrite_long(money);
ewrite_byte(flash ? 1 : 0);
emessage_end();
}
}
#define HAS_NVGOGGLES (1<<0)
stock fm_cs_get_user_nvg(client)
{
return (get_pdata_int(client, OFFSET_NVGOGGLES, EXTRAOFFSET) & HAS_NVGOGGLES) ? 1 : 0;
}
stock fm_cs_set_user_nvg(client, nvgoggles=1)
{
new kit = get_pdata_int(client, OFFSET_NVGOGGLES, EXTRAOFFSET);
if( nvgoggles && !(kit & HAS_NVGOGGLES) )
{
set_pdata_int(client, OFFSET_NVGOGGLES, (kit | HAS_NVGOGGLES), EXTRAOFFSET);
}
else if( !nvgoggles && (kit & HAS_NVGOGGLES) )
{
set_pdata_int(client, OFFSET_NVGOGGLES, (kit & ~HAS_NVGOGGLES), EXTRAOFFSET);
}
}
#define CAN_PLANT_BOMB (1<<8)
stock fm_cs_get_user_plant(client)
{
return (get_pdata_int(client, OFFSET_BOMB_DEFUSE, EXTRAOFFSET) & CAN_PLANT_BOMB) ? 1 : 0;
}
stock fm_cs_set_user_plant(client, plant=1, showbombicon=1)
{
static StatusIcon;
new kit = get_pdata_int(client, OFFSET_BOMB_DEFUSE, EXTRAOFFSET);
if( plant && !(kit & CAN_PLANT_BOMB) )
{
set_pdata_int(client, OFFSET_BOMB_DEFUSE, (kit | CAN_PLANT_BOMB), EXTRAOFFSET);
if( showbombicon && (StatusIcon || (StatusIcon = get_user_msgid("StatusIcon"))) )
{
emessage_begin(MSG_ONE_UNRELIABLE, StatusIcon, _, client);
ewrite_byte(1);
ewrite_string("c4");
ewrite_byte(0);
ewrite_byte(160);
ewrite_byte(0);
emessage_end();
}
}
else if( !plant && (kit & CAN_PLANT_BOMB) )
{
set_pdata_int(client, OFFSET_BOMB_DEFUSE, (kit & ~CAN_PLANT_BOMB), EXTRAOFFSET);
if( StatusIcon || (StatusIcon = get_user_msgid("StatusIcon")) )
{
emessage_begin(MSG_ONE_UNRELIABLE, StatusIcon, _, client);
ewrite_byte(0);
ewrite_string("c4");
emessage_end();
}
}
}
enum CsTeams
{
CS_TEAM_UNASSIGNED, // 0
CS_TEAM_T, // 1
CS_TEAM_CT, // 2
CS_TEAM_SPECTATOR // 3
};
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
};
stock fm_cs_set_user_team(client, {CsTeams,_}:team, {CsInternalModel,_}:model=CS_DONTCHANGE)
{
new CsTeams:oldteam = fm_cs_get_user_team(client);
if( oldteam != team )
{
switch( oldteam )
{
case CS_TEAM_T:
{
if( is_user_alive(client) && (pev(client, pev_weapons) & (1<<CSW_C4)) )
{
engclient_cmd(client, "drop", "weapon_c4");
}
}
case CS_TEAM_CT:
{
fm_cs_set_user_defuse(client, 0);
}
}
}
set_pdata_int(client, OFFSET_TEAM, _:team, EXTRAOFFSET);
if( model != CS_DONTCHANGE )
{
set_pdata_int(client, OFFSET_INTERALMODEL, _:model, EXTRAOFFSET);
}
dllfunc(DLLFunc_ClientUserInfoChanged, client, engfunc(EngFunc_GetInfoKeyBuffer, client));
static const team_names[CsTeams][] =
{
"UNASSIGNED",
"TERRORIST",
"CT",
"SPECTATOR"
};
static TeamInfo;
if( TeamInfo || (TeamInfo = get_user_msgid("TeamInfo")) )
{
emessage_begin(MSG_BROADCAST, TeamInfo);
ewrite_byte(client);
ewrite_string(team_names[team]);
emessage_end();
}
}
stock CsTeams:fm_cs_get_user_team(client, &{CsInternalModel,_}:model=CS_DONTCHANGE)
{
model = CsInternalModel:get_pdata_int(client, OFFSET_INTERALMODEL, EXTRAOFFSET);
return CsTeams:get_pdata_int(client, OFFSET_TEAM, EXTRAOFFSET);
}
#define PLAYER_IS_VIP (1<<8)
stock fm_cs_get_user_vip(client)
{
return (get_pdata_int(client, OFFSET_ISVIP, EXTRAOFFSET) & PLAYER_IS_VIP) ? 1 : 0;
}
#define SCOREATTRIB_NOTHING 0
#define SCOREATTRIB_DEAD (1<<0)
#define SCOREATTRIB_BOMB (1<<1)
#define SCOREATTRIB_VIP (1<<2)
stock fm_cs_set_user_vip(client, vip=1, model=1, scoreboard=1)
{
static ScoreAttrib;
new isvip = fm_cs_get_user_vip(client);
if( vip && !isvip )
{
set_pdata_int(client, OFFSET_ISVIP, (isvip | PLAYER_IS_VIP), EXTRAOFFSET);
if( model )
{
set_pdata_int(client, OFFSET_INTERALMODEL, _:CS_CT_VIP, EXTRAOFFSET);
dllfunc(DLLFunc_ClientUserInfoChanged, client, engfunc(EngFunc_GetInfoKeyBuffer, client));
}
if( scoreboard )
{
if( ScoreAttrib || (ScoreAttrib = get_user_msgid("ScoreAttrib")) )
{
emessage_begin(MSG_BROADCAST, ScoreAttrib);
ewrite_byte(client);
ewrite_byte(SCOREATTRIB_VIP);
emessage_end();
}
}
}
else if( !vip && isvip )
{
if( model )
{
static const CsInternalModel:models[4] =
{
CS_CT_GIGN,
CS_CT_GSG9,
CS_CT_SAS,
CS_CT_URBAN
};
set_pdata_int(client, OFFSET_INTERALMODEL, models[random(sizeof(models))], EXTRAOFFSET);
dllfunc(DLLFunc_ClientUserInfoChanged, client, engfunc(EngFunc_GetInfoKeyBuffer, client));
}
if( scoreboard )
{
if( ScoreAttrib || (ScoreAttrib = get_user_msgid("ScoreAttrib")) )
{
emessage_begin(MSG_BROADCAST, ScoreAttrib);
ewrite_byte(client);
ewrite_byte(is_user_alive(client) ? SCOREATTRIB_NOTHING : SCOREATTRIB_DEAD);
emessage_end();
}
}
}
}
stock fm_cs_get_user_tked(client)
{
return get_pdata_int(client, OFFSET_TKED, EXTRAOFFSET);
}
stock fm_cs_set_user_tked(client, tk=1, subtract=1)
{
set_pdata_int(client, OFFSET_TKED, tk ? 1 : 0, EXTRAOFFSET);
if( subtract )
{
new frags = get_user_frags(client) - subtract;
set_pev(client, pev_frags, float(frags));
static ScoreInfo;
if( ScoreInfo || (ScoreInfo = get_user_msgid("ScoreInfo")) )
{
emessage_begin(MSG_BROADCAST, ScoreInfo);
ewrite_byte(client);
ewrite_short(frags);
ewrite_short(fm_cs_get_user_deaths(client));
ewrite_short(0);
ewrite_short(_:fm_cs_get_user_team(client));
emessage_end();
}
}
}
stock fm_cs_get_user_driving(client)
{
return get_pdata_int(client, OFFSET_DRIVING, EXTRAOFFSET);
}
#define HAS_SHIELD (1<<24)
stock fm_cs_get_user_shield(client)
{
return (get_pdata_int(client, OFFSET_SHIELD, EXTRAOFFSET) & HAS_SHIELD) ? 1 : 0;
}
stock fm_cs_get_user_stationary(client)
{
return get_pdata_int(client, OFFSET_STATIONARY, EXTRAOFFSET);
}
enum CsArmorType
{
CS_ARMOR_NONE,
CS_ARMOR_KEVLAR,
CS_ARMOR_VESTHELM
};
stock fm_cs_get_user_armor(client, &CsArmorType:armortype)
{
armortype = CsArmorType:get_pdata_int(client, OFFSET_ARMORTYPE, EXTRAOFFSET);
static Float:armorvalue;
pev(client, pev_armorvalue, armorvalue);
return floatround(armorvalue);
}
stock fm_cs_set_user_armor(client, armorvalue, CsArmorType:armortype)
{
set_pdata_int(client, OFFSET_ARMORTYPE, _:armortype, EXTRAOFFSET);
set_pev(client, pev_armorvalue, float(armorvalue));
if( armortype != CS_ARMOR_NONE )
{
static ArmorType;
if( ArmorType || (ArmorType = get_user_msgid("ArmorType")) )
{
emessage_begin(MSG_ONE_UNRELIABLE, ArmorType, _, client);
ewrite_byte((armortype == CS_ARMOR_VESTHELM) ? 1 : 0);
emessage_end();
}
}
}
#define GLOCK18_SEMIAUTOMATIC 0
#define GLOCK18_BURST 2
#define FAMAS_AUTOMATIC 0
#define FAMAS_BURST 16
stock fm_cs_get_weapon_burst(entity)
{
new firemode = get_pdata_int(entity, OFFSET_SILENCER_FIREMODE, EXTRAOFFSET_WEAPONS);
switch( fm_cs_get_weapon_id(entity) )
{
case CSW_GLOCK18:
{
if( firemode == GLOCK18_BURST ) return 1;
}
case CSW_FAMAS:
{
if( firemode == FAMAS_BURST ) return 1;
}
}
return 0;
}
stock fm_cs_set_weapon_burst(entity, burstmode=1)
{
new weapon = fm_cs_get_weapon_id(entity);
if( weapon != CSW_GLOCK18 && weapon != CSW_FAMAS ) return;
static TextMsg;
static const messages[3][] =
{
"#Switch_To_BurstFire",
"#Switch_To_SemiAuto",
"#Switch_To_FullAuto"
};
static type;
new firemode = get_pdata_int(entity, OFFSET_SILENCER_FIREMODE, EXTRAOFFSET_WEAPONS);
switch( weapon )
{
case CSW_GLOCK18:
{
if( burstmode && firemode == GLOCK18_SEMIAUTOMATIC )
{
type = 0;
firemode = GLOCK18_BURST;
}
else if( !burstmode && firemode == GLOCK18_BURST )
{
type = 1;
firemode = GLOCK18_SEMIAUTOMATIC;
}
else return;
}
case CSW_FAMAS:
{
if( burstmode && firemode == FAMAS_AUTOMATIC )
{
type = 0;
firemode = FAMAS_BURST;
}
else if( !burstmode && firemode == FAMAS_BURST )
{
type = 2;
firemode = FAMAS_AUTOMATIC;
}
else return;
}
}
set_pdata_int(entity, OFFSET_SILENCER_FIREMODE, firemode, EXTRAOFFSET_WEAPONS);
new client = pev(entity, pev_owner);
if( is_user_alive(client) )
{
if( TextMsg || (TextMsg = get_user_msgid("TextMsg")) )
{
emessage_begin(MSG_ONE_UNRELIABLE, TextMsg, _, client);
ewrite_byte(4);
ewrite_string(messages[type]);
emessage_end();
}
}
}
#define M4A1_SILENCED (1<<2)
#define M4A1_ATTACHSILENCEANIM 6
#define M4A1_DETACHSILENCEANIM 13
#define USP_SILENCED (1<<0)
#define USP_ATTACHSILENCEANIM 7
#define USP_DETACHSILENCEANIM 15
stock fm_cs_get_weapon_silen(entity)
{
new weapon = fm_cs_get_weapon_id(entity);
if( weapon != CSW_M4A1 && weapon != CSW_USP ) return;
new silencemode = get_pdata_int(entity, OFFSET_SILENCER_FIREMODE, EXTRAOFFSET_WEAPONS);
switch( weapon )
{
case CSW_M4A1:
{
return (silencemode & M4A1_SILENCED);
}
case CSW_USP:
{
return (silencemode & USP_SILENCED);
}
}
return 0;
}
stock fm_cs_set_weapon_silen(entity, silence=1, draw_animation=1)
{
new weapon = fm_cs_get_weapon_id(entity);
if( weapon != CSW_M4A1 && weapon != CSW_USP ) return;
new silencemode = get_pdata_int(entity, OFFSET_SILENCER_FIREMODE, EXTRAOFFSET_WEAPONS);
static animation;
switch( weapon )
{
case CSW_M4A1:
{
if( silence && !(silencemode & M4A1_SILENCED) )
{
silencemode |= M4A1_SILENCED;
animation = M4A1_ATTACHSILENCEANIM;
}
else if( !silence && (silencemode & M4A1_SILENCED) )
{
silencemode &= ~M4A1_SILENCED;
animation = M4A1_DETACHSILENCEANIM;
}
else return;
}
case CSW_USP:
{
if( silence && !(silencemode & USP_SILENCED) )
{
silencemode |= USP_SILENCED;
animation = USP_ATTACHSILENCEANIM;
}
else if( !silence && (silencemode & USP_SILENCED) )
{
silencemode &= ~USP_SILENCED;
animation = USP_DETACHSILENCEANIM;
}
else return;
}
}
set_pdata_int(entity, OFFSET_SILENCER_FIREMODE, silencemode, EXTRAOFFSET_WEAPONS);
if( draw_animation )
{
new client = pev(entity, pev_owner);
if( pev_valid(client) )
{
set_pev(client, pev_weaponanim, animation);
}
}
}
stock fm_cs_get_weapon_ammo(entity)
{
return get_pdata_int(entity, OFFSET_WEAPONCLIP, EXTRAOFFSET_WEAPONS);
}
stock fm_cs_set_weapon_ammo(entity, clip)
{
set_pdata_int(entity, OFFSET_WEAPONCLIP, clip, EXTRAOFFSET_WEAPONS);
}
stock fm_cs_get_weapon_id(entity)
{
return get_pdata_int(entity, OFFSET_WEAPONID, EXTRAOFFSET_WEAPONS);
}
stock fm_cs_user_spawn(client)
{
ExecuteHamB(Ham_CS_RoundRespawn, client);
}
#define CSA_MP5NAVY 0
#define CSA_TMP 1
#define CSA_P90 2
#define CSA_MAC10 3
#define CSA_AK47 4
#define CSA_SG552 5
#define CSA_M4A1 6
#define CSA_AUG 7
#define CSA_SCOUT 8
#define CSA_G3SG1 9
#define CSA_AWP 10
#define CSA_M3 11
#define CSA_XM1014 12
#define CSA_M249 13
#define CSA_FLASHBANG 14
#define CSA_HEGRENADE 15
#define CSA_VEST 16
#define CSA_VESTHELM 17
#define CSA_SMOKEGRENADE 18
stock const _CSA_to_CSW[] =
{
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
};
stock const _CSW_to_CSA[] =
{
-1, -1, CSA_SCOUT, CSA_HEGRENADE, CSA_XM1014, -1, CSA_MAC10, CSA_AUG, CSA_SMOKEGRENADE,
-1, -1, -1, -1, -1, -1, -1, -1, CSA_AWP, CSA_MP5NAVY, CSA_M249, CSA_M3, CSA_M4A1, CSA_TMP,
CSA_G3SG1, CSA_FLASHBANG, -1, CSA_SG552, CSA_AK47, CSA_P90, CSA_VEST, CSA_VESTHELM
};
stock fm_cs_get_armoury_type(entity)
{
new CSA_type = get_pdata_int(entity, OFFSET_CSATYPE, EXTRAOFFSET_WEAPONS);
return (0 <= CSA_type < sizeof(_CSA_to_CSW)) ? _CSA_to_CSW[CSA_type] : -1;
}
stock fm_cs_set_armoury_type(entity, type)
{
if( !(0 <= type < sizeof(_CSW_to_CSA)) ) return;
new CSA_type = _CSW_to_CSA[type];
if( CSA_type == -1 ) return;
set_pdata_int(entity, OFFSET_CSATYPE, CSA_type, EXTRAOFFSET_WEAPONS);
}
#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)
stock fm_cs_get_user_mapzones(client)
{
return get_pdata_int(client, OFFSET_MAPZONE, EXTRAOFFSET);
}
stock fm_cs_set_user_mapzones(client, mapzones)
{
set_pdata_int(client, OFFSET_MAPZONE, mapzones, EXTRAOFFSET);
}
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
};
stock fm_cs_get_user_submodel(client)
{
return pev(client, pev_body);
}
stock fm_cs_set_user_submodel(client, value)
{
set_pev(client, pev_body, value);
}
stock Float:fm_cs_get_user_lastactivity(client)
{
return get_pdata_float(client, OFFSET_LASTACTIVITY, EXTRAOFFSET);
}
stock fm_cs_set_user_lastactivity(client, Float:value)
{
set_pdata_float(client, OFFSET_LASTACTIVITY, value, EXTRAOFFSET);
}
stock fm_cs_get_user_hostagekills(client)
{
return get_pdata_int(client, OFFSET_HOSTAGEKILLS, EXTRAOFFSET);
}
stock fm_cs_set_user_hostagekills(client, value)
{
set_pdata_int(client, OFFSET_HOSTAGEKILLS, value, EXTRAOFFSET);
}
stock Float:fm_cs_get_hostage_lastuse(entity)
{
return get_pdata_float(entity, OFFSET_HOSTAGELASTUSE, EXTRAOFFSET);
}
stock fm_cs_set_hostage_lastuse(entity, Float:value)
{
set_pdata_float(entity, OFFSET_HOSTAGELASTUSE, value, EXTRAOFFSET);
}
stock Float:fm_cs_get_hostage_nextuse(entity)
{
return get_pdata_float(entity, OFFSET_HOSTAGENEXTUSE, EXTRAOFFSET);
}
stock fm_cs_set_hostage_nextuse(entity, Float:value)
{
set_pdata_float(entity, OFFSET_HOSTAGENEXTUSE, value, EXTRAOFFSET);
}
stock Float:fm_cs_get_c4_explode_time(entity)
{
return get_pdata_float(entity, OFFSET_C4_EXPLODETIME, EXTRAOFFSET);
}
stock fm_cs_set_c4_explode_time(entity, Float:value)
{
set_pdata_float(entity, OFFSET_C4_EXPLODETIME, value, EXTRAOFFSET);
}
stock bool:fm_cs_get_c4_defusing(entity)
{
return bool:get_pdata_int(entity, OFFSET_C4_DEFUSING, ACTUAL_EXTRA_OFFSET);
}
stock fm_cs_set_c4_defusing(entity, bool:defusing)
{
set_pdata_int(entity, OFFSET_C4_DEFUSING, _:defusing, ACTUAL_EXTRA_OFFSET);
}
fm_cstrike_plugin.inc
[spoiler]
#if defined _fm_cstrike_plugin_included[/spoiler]
#endinput
#endif
#define _fm_cstrike_plugin_included
#if AMXX_VERSION_NUM >= 175
#pragma reqlib fm_cstrike
#if !defined AMXMODX_NOAUTOLOAD
#pragma loadlib fm_cstrike
#endif
#else
#pragma library fm_cstrike
#endif
native fm_cs_get_no_knives();
native fm_cs_set_no_knives(noknives=0);
native fm_cs_set_user_zoom(client, type, mode);
native fm_cs_get_user_zoom(client);
fm_cstrike.sma
[spoiler]#include <amxmodx>
#include <amxmisc>
#include <fakemeta>
#define EXTRAOFFSET 5
// "player" offsets
#define OFFSET_ZOOMTYPE 363
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
};
#define CS_FIRST_ZOOM 0x28
#define CS_SECOND_AWP_ZOOM 0xA
#define CS_SECOND_NONAWP_ZOOM 0xF
#define CS_AUGSG552_ZOOM 0x37
#define CS_NO_ZOOM 0x5A
new g_zooming[33];
new bool:g_noknives;
new bool:g_precachedknife;
new ResetHUD;
public plugin_init()
{
register_plugin("Fakemeta Cstrike", "0.1", "Exolent");
register_forward(FM_MessageBegin, "FwdMessageBegin");
register_forward(FM_PlayerPreThink, "FwdPlayerPreThink");
register_forward(FM_CreateNamedEntity, "FwdCreateNamedEntity");
ResetHUD = get_user_msgid("ResetHUD");
}
public plugin_natives()
{
register_library("fm_cstrike");
register_native("fm_cs_get_no_knives", "_get_no_knives");
register_native("fm_cs_set_no_knives", "_set_no_knives");
register_native("fm_cs_get_user_zoom", "_get_user_zoom");
register_native("fm_cs_set_user_zoom", "_set_user_zoom");
}
public _get_no_knives(plugin, params)
{
return g_noknives ? 1 : 0;
}
public _set_no_knives(plugin, params)
{
g_noknives = bool:get_param(1);
}
public _get_user_zoom(plugin, params)
{
new value = get_pdata_int(get_param(1), OFFSET_ZOOMTYPE, EXTRAOFFSET);
switch( value )
{
case CS_NO_ZOOM:
{
return CS_SET_NO_ZOOM;
}
case CS_FIRST_ZOOM:
{
return CS_SET_FIRST_ZOOM;
}
case CS_SECOND_AWP_ZOOM, CS_SECOND_NONAWP_ZOOM:
{
return CS_SET_SECOND_ZOOM;
}
case CS_AUGSG552_ZOOM:
{
return CS_SET_AUGSG552_ZOOM;
}
}
return 0;
}
public _set_user_zoom(plugin, params)
{
new client = get_param(1);
new type = get_param(2);
g_zooming[client] = 0;
if( type == CS_RESET_ZOOM )
{
set_pdata_int(client, OFFSET_ZOOMTYPE, CS_NO_ZOOM, EXTRAOFFSET);
return;
}
static value;
switch( type )
{
case CS_SET_NO_ZOOM:
{
value = CS_NO_ZOOM;
}
 
Не проще сунуть в свой плагин, ну или в инклуд?