#if defined _fm_cstrike_included || defined _cstrike_included #endinput #endif #define _cstrike_included #define _fm_cstrike_included #include #include #include #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<