Help Падение сервера при смене карты

Статус
В этой теме нельзя размещать новые ответы.

Top4ik

Пользователь
Регистрация
10 Фев 2020
Сообщения
54
Симпатии
4
OS
Linux
Amx Mod X
AMXX 1.9.0
Билд
8308
Metamod
v1.21p37
Meta модули
Код:
Currently running plugins:
 [  1] SafeNameAndChat, v1.1, 2017.02.01, by WPMG.PRoSToC0der, see http://snac.wpmg.ru/
 [  2] Reunion, v0.1.0.92, 2018-02-11, by The Legion, see 
 [  3] ReAuthCheck, v0.1.6, 2017-03-08, by Adidasman, see Dedicated-Server.RU
 [  4] VoiceTranscoder, v2017RC3, 2017.02.12, by WPMG.PRoSToC0der, see http://vtc.wpmg.ru/
 [  5] AMX Mod X, v1.9.0.5249, Dec 18 2018, by AMX Mod X Dev Team, see AMX Mod X - Half-Life Scripting for Pros!
 [  6] Rechecker, v2.5, Oct 21 2017, by s1lent, see Dedicated-Server.RU
 [  7] WHBlocker, v1.5.696, 2018-11-04, by s1lent, see Серверы Half-Life 1 и Adrenaline Gamer, форум, статьи, трюки от профессионалов || Half-Life 1 & Adrenaline Gamer servers, forum, articles, game tricks from experts
 [  8] ReSemiclip, v2.3.9, 13/02/17, by s1lent & Adidasman, see Dedicated-Server.RU
 [  9] CStrike, v1.9.0.5249, Sep 10 2018, by AMX Mod X Dev Team, see AMX Mod X - Half-Life Scripting for Pros!
 [ 10] CSX, v1.9.0.5249, Sep 10 2018, by AMX Mod X Dev Team, see AMX Mod X - Half-Life Scripting for Pros!
 [ 11] MySQL, v1.9.0.5249, Sep 10 2018, by AMX Mod X Dev Team, see AMX Mod X - Half-Life Scripting for Pros!
 [ 12] SQLite, v1.9.0.5249, Sep 10 2018, by AMX Mod X Dev Team, see AMX Mod X - Half-Life Scripting for Pros!
 [ 13] Engine, v1.9.0.5249, Sep 10 2018, by AMX Mod X Dev Team, see AMX Mod X - Half-Life Scripting for Pros!
 [ 14] ReAPI, v5.10.0.186-dev, 2019-08-29, by Asmodai & s1lent, see s1lentq/reapi
 [ 15] ReAimDetector, v0.2.2, 2018-02-06, by ReHLDS Team, see Dedicated-Server.RU
 [ 16] SxGeo, v2.2, May 13 2018, by s1lent, see s1lentq/sxgeo
 [ 17] FakeMeta, v1.9.0.5249, Sep 10 2018, by AMX Mod X Dev Team, see AMX Mod X - Half-Life Scripting for Pros!
 [ 18] Ham Sandwich, v1.9.0.5249, Sep 10 2018, by AMX Mod X Dev Team, see AMX Mod X - Half-Life Scripting for Pros!
 [ 19] Fun, v1.9.0.5249, Sep 10 2018, by AMX Mod X Dev Team, see AMX Mod X - Half-Life Scripting for Pros!
19 plugins
Плагины
Код:
FreshBans          1.4.0b      kanagava          fresh_bans_1.4.  running  
Admin Base         1.9.0.5249  AMXX Dev Team     admin.amxx       running  
Gag Me             2.3.4       Radius            gag_me.amxx      running  
New Kick Menu      1.4.2       Radius            newkickmenu.amx  running  
Admin Commands     1.9.0.5249  AMXX Dev Team     admincmd.amxx    running  
Players Menu       1.7         neugomon          players_menu.am  running  
Maps Menu          1.9.0.5249  AMXX Dev Team     mapsmenu.amxx    running  
c4 timer           1.1         cheap_suit        c4timer.amxx     running  
Stats Configurati  1.9.0.5249  AMXX Dev Team     statscfg.amxx    running  
Say Me & Hp        1.0         Hypa_[KZ]         say_me_and_hp.a  running
Nice Killer        1.7         Got Milk? / HoHo  nice_killer.amx  running  
Show Damage        1.0         neygomon          damager.amxx     running  
Anti Flood         1.9.0.5249  AMXX Dev Team     antiflood.amxx   running  
[#] CS:GO Main Mo  1.1 [FIX]   x FR3NZYMOV x     csgo_main_mode.  running  
[CS:GO MOD] BuyMe  2.0         Danakt Frost      csgo_buymenu.am  running  
[CS:GO MOD] Kill   0.9         Spection          csgo_killassist  running  
[CS:GO MOD] Team   1.0         neygomon          csgo_teambalanc  running  
[CS:GO MOD] Fix S  1.0         xPaw, Justick     csgo_fix_smoke.  running  
[CS:GO MOD] Drop   0.14        Avalanche         csgo_dropgrenad  running  
[CS:GO MOD] BuyMe  0.2         Danakt Frost      csgo_buyweapons  running  
[CS:GO MOD] Assau  1.6         hellmonja         csgo_assault_sc  running  
[CS:GO MOD] Short  1.0         EFFx, HamletEagl  csgo_throw_nade  running  
[CS:GO MOD] Weapo  1.2         ConnorMcLeod      csgo_weapons.am  running  
[CS:GO MOD] Custo  1.3.2       neugomon          csgo_players.am  running  
[CS:GO MOD] Ranks  1.0         kikizon / x FR3N  csgo_ranks_syst  running  
[CS:GO MOD] Advan  1.4.1       neygomon          csgo_gagmenu.am  running  
AK-47 | Asiimov    1.0.0       Vaqtincha         AK47_Asiimov.am  running  
AK-47 | Fire Serp  1.0.0       Vaqtincha         AK47_FireSerpen  running  
AK-47 | Blood Spo  1.0.0       Vaqtincha         AK47_BloodSport  running  
AK-47 | Neon Revo  1.0.0       Vaqtincha         AK47_NeonRevolu  running
AWP | Medusa       1.0.0       Vaqtincha         AWP_Medusa.amxx  running  
AWP | Neo-Noir     1.0.0       Vaqtincha         AWP_NeoNoir.amx  running  
AWP | Fever Dream  1.0.0       Vaqtincha         AWP_FeverDream.  running  
AWP | Dragon Lore  1.0.0       Vaqtincha         AWP_DragonLore.  running  
Deagle | Blaze     1.0.0       Vaqtincha         Deagle_Blaze.am  running  
Deagle | Code Red  1.0.0       Vaqtincha         Deagle_CodeRed.  running  
Deagle | Crimson   1.0.0       Vaqtincha         Deagle_Crimson.  running  
Deagle | Kumicho   1.0.0       Vaqtincha         Deagle_Dragon.a  running  
M4A1 | Nightmare   1.0.0       Vaqtincha         M4A1_Nightmare.  running  
M4A1 | Chantico F  1.0.0       Vaqtincha         M4A1_ChanticoFi  running  
M4A1 | Hyper Beas  1.0.0       Vaqtincha         M4A1_HyperBeast  running  
M4A1 | Decimator   1.0.0       Vaqtincha         M4A1_Decimator.  running  
USP | Orion        1.0.0       Vaqtincha         USP_Orion.amxx   running  
USP | Cortex       1.0.0       Vaqtincha         USP_Cortex.amxx  running  
USP | Neo-Noir     1.0.0       Vaqtincha         USP_NeoNoir.amx  running  
USP | Kill Confir  1.0.0       Vaqtincha         USP_KillConfirm  running  
Glock-18 | Fade    1.0.0       Vaqtincha         Glock18_Fade.am  running  
Glock-18 | Water   1.0.0       Vaqtincha         Glock18_Water.a  running  
Glock-18 | Moonri  1.0.0       Vaqtincha         Glock18_Moonris  running  
Glock-18 | Wastel  1.0.0       Vaqtincha         Glock18_Wastela  running
V.I.P Custom KNIF  1.0.0       Vaqtincha         custom_knife.am  running  
V.I.P Custom DEAG  1.0.0       Vaqtincha         custom_deagle.a  running  
V.I.P Custom M4A1  1.0.0       Vaqtincha         custom_m4a1.amx  running  
V.I.P Custom AK-4  1.0.0       Vaqtincha         custom_ak47.amx  running  
V.I.P Custom AWP   1.0.0       Vaqtincha         custom_awp.amxx  running  
Всего 55 плагинов, из них 55 запущены
Amxx Модули
Код:
CStrike                 1.9.0.5249  AMX Mod X Dev Team   running    
CSX                     1.9.0.5249  AMX Mod X Dev Team   running    
nVault                  1.9.0.5249  AMX Mod X Dev Team   running    
MySQL                   1.9.0.5249  AMX Mod X Dev Team   running    
SQLite                  1.9.0.5249  AMX Mod X Dev Team   running    
Engine                  1.9.0.5249  AMX Mod X Dev Team   running    
ReAPI                   5.10.0.186  Asmodai & s1lent     running    
Sockets                 1.9.0.5249  AMX Mod X Dev Team   running    
ReAimDetector           0.2.2       ReHLDS Team          running    
SxGeo                   2.2         s1lent               running    
FakeMeta                1.9.0.5249  AMX Mod X Dev Team   running    
Ham Sandwich            1.9.0.5249  AMX Mod X Dev Team   running    
RegEx                   1.9.0.5249  AMX Mod X Dev Team   running    
Fun                     1.9.0.5249  AMX Mod X Dev Team   running    
Всего 14 модулей
Ошибка
Код:
Server shutdown
L 04/05/2020 - 12:53:09: Log file closed
L 04/05/2020 - 12:53:09: [META] (debug:3) Calling cs.so:Sys_Error()
L 04/05/2020 - 12:53:09: FATAL ERROR (shutting down): Host_Error: PF_setmodel_I: no precache: models/w_backpack.mdl[/CODE]
[/SPOILER]
Когда меня карту,то периодически спустя n-ое время сервер падает с ошибкой
Код:
L 04/05/2020 - 12:53:09: Server shutdown
L 04/05/2020 - 12:53:09: Log file closed
L 04/05/2020 - 12:53:09: [META] (debug:3) Calling cs.so:Sys_Error()
L 04/05/2020 - 12:53:09: FATAL ERROR (shutting down): Host_Error: PF_setmodel_I: no precache: models/w_backpack.mdl
Пробовал отключать плагины по очереди,но без полезно!(буду честен,отключал не все,отключал только те которые писали на форумах) Не могу понять что такое?!
 

perfectblood0

Команда форума
Администратор
Регистрация
29 Окт 2017
Сообщения
2.578
Симпатии
914
Пол
Женский
Какой то плагин использует модель, которой нет
 

Top4ik

Пользователь
Регистрация
10 Фев 2020
Сообщения
54
Симпатии
4
Какой то плагин использует модель, которой нет
Да я тоже читал,я тоже встречал такой вариант,но не могу понять что это за плагин,ведь как я понимаю модель
это что то связанно с рюкзаком или что то в этом роде,но такого плагина у меня нету,не могу понять
 

perfectblood0

Команда форума
Администратор
Регистрация
29 Окт 2017
Сообщения
2.578
Симпатии
914
Пол
Женский
Csgomod скорее всего
 

Top4ik

Пользователь
Регистрация
10 Фев 2020
Сообщения
54
Симпатии
4
Csgomod скорее всего
Вот исходник,там не нашел "строчки с w_bacpack.mdl"
Код:
#include <amxmodx>
#include <amxmisc>
#include <cstrike>
#include <fun>
#include <fakemeta>
#include <engine>
#include <colorchat>
#include <hamsandwich>
#include <fakemeta_util>

#pragma tabsize 0

#define DEMONAME    "Public_CS_GO"

#define fm_create_entity(%1) engfunc(EngFunc_CreateNamedEntity, engfunc(EngFunc_AllocString, %1))
#define fm_find_ent_by_class(%1,%2) engfunc(EngFunc_FindEntityByString, %1, "classname", %2)

#define ADVERT_ALL        // Показывать всем. Для показа только мервым и спектаторам закомментируйте
#define REPEAT_TIME 20.0    // Время между сообщениями

new adMessages[256][192];
new ad_count, iMessgCount;

new bool:g_bAllowRecord[33];

const XoWeapon             = 4;
const XoPlayer                 = 5;
const m_pPlayer         = 41;
const m_flNextPrimaryAttack    = 46;
const m_flTimeWeaponIdle    = 48;
const m_fInSpecialReload     = 55;
const m_flNextAttack         = 83;
const m_pActiveItem         = 373;
const m_iId         = 43;

new const wpns_without_inspect = (1 << CSW_C4) | (1 << CSW_HEGRENADE) | (1 << CSW_FLASHBANG) | (1 << CSW_SMOKEGRENADE);
new const wpns_scoped = (1 << CSW_AUG) | (1 << CSW_AWP) | (1 << CSW_G3SG1) | (1 << CSW_SCOUT) | (1 << CSW_SG550) | (1 << CSW_SG552);

new Float:g_flOrigin[3], Float:g_flAngles[3], g_fwdSetModel

new g_deagle_overide[33];

new inspect_anim[] =
{
    0,    //null
    7,    //p228
    0,    //shield
    5,    //scout
    0,    //hegrenade
    7,    //xm1014
    0,    //c4
    6,    //mac10
    6,    //aug
    0,    //smoke grenade
    16,    //elites
    6,    //fiveseven
    6,    //ump45
    5,    //sg550
    6,    //galil
    6,    //famas
    16,    //usp
    13,    //glock
    6,    //awp
    6,    //mp5
    5,    //m249
    7,    //m3
    15,    //m4a1
    6,    //tmp
    6,    //g3sg1
    0,    //flashbang
    6,    //deagle
    6,    //sg552
    6,    //ak47
    8,    //knife
    6    //p90
}

new Float:idle_calltime[] =
{
    0.0,    //null
    6.5,    //p228
    0.0,    //shield
    5.3,    //scout
    0.0,    //hegrenade
    4.6,    //xm1014
    0.0,    //c4
    5.3,    //mac10
    4.4,    //aug
    0.0,    //smoke grenade
    4.6,    //elites
    6.5,    //fiveseven
    6.9,    //ump45
    5.3,    //sg550
    4.6,    //galil
    6.4,    //famas
    6.5,    //usp
    6.5,    //glock
    5.0,    //awp
    7.7,    //mp5
    6.9,    //m249
    5.6,    //m3
    5.1,    //m4a1
    7.4,    //tmp
    4.5,    //g3sg1
    0.0,    //flashbang
    5.7,    //deagle
    4.4,    //sg552
    4.6,    //ak47
    6.3,    //knife
    5.4    //p90
}
new weapon_classnames[][] =
{
    "weapon_p228",
    "weapon_elite",
    "weapon_fiveseven",
    "weapon_usp",
    "weapon_glock18",
    "weapon_deagle",
    "weapon_ak47",
    "weapon_m4a1",
    "weapon_awp",
    "weapon_mp5navy",
    "weapon_ump45",
    "weapon_galil",
    "weapon_famas",
    "weapon_sg552",
    "weapon_aug",
    "weapon_mac10",
    "weapon_tmp",
    "weapon_scout",
    "weapon_m3",
    "weapon_xm1014",
    "weapon_g3sg1",
    "weapon_sg550",
    "weapon_m249",
    "weapon_knife",
    "weapon_p90"
    
}

new keys = (1<<0|1<<1|1<<2|1<<3|1<<4|1<<5|1<<6|1<<7|1<<8|1<<9)
new KnifeId[33];

new Trie:g_tReplaceInfoMsg;

new KNIFE_V_MODEL1[] = "models/csgo/skins/knife/v_bayonet.mdl"
new KNIFE_V_MODEL2[] = "models/csgo/skins/knife/v_falchion.mdl"
new KNIFE_V_MODEL3[] = "models/csgo/skins/knife/v_gut.mdl"
new KNIFE_V_MODEL4[] = "models/csgo/skins/knife/v_karambit.mdl"
new KNIFE_V_MODEL5[] = "models/csgo/skins/knife/v_m9bayonet.mdl"
new KNIFE_V_MODEL6[] = "models/csgo/skins/knife/v_butterfly.mdl"
new KNIFE_V_MODEL7[] = "models/csgo/skins/knife/v_stiletto.mdl"
new KNIFE_V_MODEL8[] = "models/csgo/skins/knife/v_knives_ct.mdl"
new KNIFE_V_MODEL9[] = "models/csgo/skins/knife/v_knives_t.mdl"

new KNIFE_P_MODEL1[] = "models/csgo/skins/knife/p_bayonet.mdl"
new KNIFE_P_MODEL2[] = "models/csgo/skins/knife/p_falchion.mdl"
new KNIFE_P_MODEL3[] = "models/csgo/skins/knife/p_gut.mdl"
new KNIFE_P_MODEL4[] = "models/csgo/skins/knife/p_karambit.mdl"
new KNIFE_P_MODEL5[] = "models/csgo/skins/knife/p_m9bayonet.mdl"
new KNIFE_P_MODEL6[] = "models/csgo/skins/knife/p_butterfly.mdl"
new KNIFE_P_MODEL7[] = "models/csgo/skins/knife/p_stiletto.mdl"
new KNIFE_P_MODEL8[] = "models/csgo/skins/knife/p_knives_ct.mdl"
new KNIFE_P_MODEL9[] = "models/csgo/skins/knife/p_knives_t.mdl"

new W_BOMB_MODEL[] = "models/csgo/default/w_c4.mdl"

new g_Sounds[][] =
{
    // ak47 sounds
    "sound/weapons/csgo_mod/ak47/boltpull.wav",
    "sound/weapons/csgo_mod/ak47/clipin.wav",
    "sound/weapons/csgo_mod/ak47/clipout.wav",
    "sound/weapons/csgo_mod/ak47/draw.wav",
    
    // aug sounds
    "sound/weapons/csgo_mod/aug/boltpull.wav",
    "sound/weapons/csgo_mod/aug/boltrelease.wav",
    "sound/weapons/csgo_mod/aug/clipin.wav",
    "sound/weapons/csgo_mod/aug/clipout.wav",
    "sound/weapons/csgo_mod/aug/cliptap.wav",
    "sound/weapons/csgo_mod/aug/draw.wav",
    
    // awp sounds
    "sound/weapons/csgo_mod/awp/boltdown.wav",
    "sound/weapons/csgo_mod/awp/boltup.wav",
    "sound/weapons/csgo_mod/awp/clipin.wav",
    "sound/weapons/csgo_mod/awp/clipout.wav",
    "sound/weapons/csgo_mod/awp/cliptap.wav",
    "sound/weapons/csgo_mod/awp/draw.wav",
    
    // beretta sounds
    "sound/weapons/csgo_mod/berettas/slide.wav",
    "sound/weapons/csgo_mod/berettas/taunt_tap.wav",
    "sound/weapons/csgo_mod/berettas/clipin.wav",
    "sound/weapons/csgo_mod/berettas/clipout.wav",
    "sound/weapons/csgo_mod/berettas/hammer.wav",
    "sound/weapons/csgo_mod/berettas/draw.wav",
    
    // butterfly sounds
    "sound/weapons/csgo_mod/butterfly/backstab.wav",
    "sound/weapons/csgo_mod/butterfly/deploy_end.wav",
    "sound/weapons/csgo_mod/butterfly/deploy_start.wav",
    "sound/weapons/csgo_mod/butterfly/inspect_end.wav",
    "sound/weapons/csgo_mod/butterfly/inspect_flip1.wav",
    "sound/weapons/csgo_mod/butterfly/inspect_flip2.wav",
    "sound/weapons/csgo_mod/butterfly/inspect_flip3.wav",
    "sound/weapons/csgo_mod/butterfly/inspect_start.wav",
    
    // c4 bomb sounds
    "sound/weapons/csgo_mod/c4/disarmfinish.wav",
    "sound/weapons/csgo_mod/c4/disarmstart.wav",
    "sound/weapons/csgo_mod/c4/draw.wav",
    "sound/weapons/csgo_mod/c4/initiate.wav",
    "sound/weapons/csgo_mod/c4/plant_quiet.wav",
    "sound/weapons/csgo_mod/c4/press1.wav",
    "sound/weapons/csgo_mod/c4/press2.wav",
    "sound/weapons/csgo_mod/c4/press3.wav",
    "sound/weapons/csgo_mod/c4/press4.wav",
    "sound/weapons/csgo_mod/c4/press5.wav",
    "sound/weapons/csgo_mod/c4/press6.wav",
    "sound/weapons/csgo_mod/c4/press7.wav",
    
    // deagle sounds
    "sound/weapons/csgo_mod/deagle/slideback.wav",
    "sound/weapons/csgo_mod/deagle/slideforward.wav",
    "sound/weapons/csgo_mod/deagle/clipin.wav",
    "sound/weapons/csgo_mod/deagle/clipout.wav",
    "sound/weapons/csgo_mod/deagle/inspect_roll.wav",
    "sound/weapons/csgo_mod/deagle/draw.wav",
    
    // falchion sounds
    "sound/weapons/csgo_mod/falchion/catch.wav",
    "sound/weapons/csgo_mod/falchion/deploy_end.wav",
    "sound/weapons/csgo_mod/falchion/deploy_start.wav",
    "sound/weapons/csgo_mod/falchion/inspect_end.wav",
    "sound/weapons/csgo_mod/falchion/inspect_start.wav",
    
    // famas sounds
    "sound/weapons/csgo_mod/famas/boltback.wav",
    "sound/weapons/csgo_mod/famas/boltforward.wav",
    "sound/weapons/csgo_mod/famas/cliphit.wav",
    "sound/weapons/csgo_mod/famas/clipin.wav",
    "sound/weapons/csgo_mod/famas/clipout.wav",
    "sound/weapons/csgo_mod/famas/draw.wav",
    
    // fiveseven sounds
    "sound/weapons/csgo_mod/fiveseven/slideback.wav",
    "sound/weapons/csgo_mod/fiveseven/sliderelease.wav",
    "sound/weapons/csgo_mod/fiveseven/clipin.wav",
    "sound/weapons/csgo_mod/fiveseven/clipout.wav",
    "sound/weapons/csgo_mod/fiveseven/draw.wav",
    
    // g3sg1 sounds
    "sound/weapons/csgo_mod/g3sg1/slideback.wav",
    "sound/weapons/csgo_mod/g3sg1/slideforward.wav",
    "sound/weapons/csgo_mod/g3sg1/clipin.wav",
    "sound/weapons/csgo_mod/g3sg1/clipout.wav",
    "sound/weapons/csgo_mod/g3sg1/draw.wav",
    
    // galil sounds
    "sound/weapons/csgo_mod/galil/boltback.wav",
    "sound/weapons/csgo_mod/galil/boltrelease.wav",
    "sound/weapons/csgo_mod/galil/clipin.wav",
    "sound/weapons/csgo_mod/galil/clipout.wav",
    "sound/weapons/csgo_mod/galil/draw.wav",
    
    // glock18 sounds
    "sound/weapons/csgo_mod/glock18/slideback.wav",
    "sound/weapons/csgo_mod/glock18/sliderelease.wav",
    "sound/weapons/csgo_mod/glock18/clipin.wav",
    "sound/weapons/csgo_mod/glock18/clipout.wav",
    "sound/weapons/csgo_mod/glock18/draw.wav",
    
    // grenades sounds
    "sound/weapons/csgo_mod/grenades/draw.wav",
    "sound/weapons/csgo_mod/grenades/pinpull.wav",
    "sound/weapons/csgo_mod/grenades/throw.wav",
    
    // knife sounds
    "sound/weapons/csgo_mod/knife/deploy.wav",
    
    // m4a1-s sounds
    "sound/weapons/csgo_mod/m4a1s/boltback.wav",
    "sound/weapons/csgo_mod/m4a1s/boltforward.wav",
    "sound/weapons/csgo_mod/m4a1s/boltpull.wav",
    "sound/weapons/csgo_mod/m4a1s/clipin.wav",
    "sound/weapons/csgo_mod/m4a1s/clipout.wav",
    "sound/weapons/csgo_mod/m4a1s/m4a1_deploy.wav",
    "sound/weapons/csgo_mod/m4a1s/m4a1_silencer_screw_1.wav",
    "sound/weapons/csgo_mod/m4a1s/m4a1_silencer_screw_2.wav",
    "sound/weapons/csgo_mod/m4a1s/m4a1_silencer_screw_3.wav",
    "sound/weapons/csgo_mod/m4a1s/m4a1_silencer_screw_4.wav",
    "sound/weapons/csgo_mod/m4a1s/m4a1_silencer_screw_5.wav",
    "sound/weapons/csgo_mod/m4a1s/m4a1_silencer_screw_off_end.wav",
    "sound/weapons/csgo_mod/m4a1s/m4a1_silencer_screw_on_start.wav",
    
    // mac-10 sounds
    "sound/weapons/csgo_mod/mac10/boltback.wav",
    "sound/weapons/csgo_mod/mac10/boltforward.wav",
    "sound/weapons/csgo_mod/mac10/clipin.wav",
    "sound/weapons/csgo_mod/mac10/clipout.wav",
    "sound/weapons/csgo_mod/mac10/draw.wav",
    
    // mp5sd sounds
    "sound/weapons/csgo_mod/mp5/slideback.wav",
    "sound/weapons/csgo_mod/mp5/slideforward.wav",
    "sound/weapons/csgo_mod/mp5/clipin.wav",
    "sound/weapons/csgo_mod/mp5/clipout.wav",
    "sound/weapons/csgo_mod/mp5/draw.wav",
    
    // mp9 sounds
    "sound/weapons/csgo_mod/mp9/slideback.wav",
    "sound/weapons/csgo_mod/mp9/slideforward.wav",
    "sound/weapons/csgo_mod/mp9/clipin.wav",
    "sound/weapons/csgo_mod/mp9/clipout.wav",
    "sound/weapons/csgo_mod/mp9/draw.wav",
    
    // negev sounds
    "sound/weapons/csgo_mod/negev/chain.wav",
    "sound/weapons/csgo_mod/negev/coverup.wav",
    "sound/weapons/csgo_mod/negev/coverdown.wav",
    "sound/weapons/csgo_mod/negev/pump.wav",
    "sound/weapons/csgo_mod/negev/boxin.wav",
    "sound/weapons/csgo_mod/negev/boxout.wav",
    "sound/weapons/csgo_mod/negev/draw.wav",
    
    // nova sounds
    "sound/weapons/csgo_mod/nova/bolt.wav",
    "sound/weapons/csgo_mod/nova/draw.wav",
    "sound/weapons/csgo_mod/nova/insert.wav",
    
    // p90 sounds
    "sound/weapons/csgo_mod/p90/boltback.wav",
    "sound/weapons/csgo_mod/p90/boltrelease.wav",
    "sound/weapons/csgo_mod/p90/clipin.wav",
    "sound/weapons/csgo_mod/p90/clipout.wav",
    "sound/weapons/csgo_mod/p90/tap.wav",
    
    // p250 sounds
    "sound/weapons/csgo_mod/p250/slideback.wav",
    "sound/weapons/csgo_mod/p250/sliderelease.wav",
    "sound/weapons/csgo_mod/p250/clipin.wav",
    "sound/weapons/csgo_mod/p250/clipout.wav",
    "sound/weapons/csgo_mod/p250/draw.wav",
    
    // scar-20 sounds
    "sound/weapons/csgo_mod/scar20/boltback.wav",
    "sound/weapons/csgo_mod/scar20/boltforward.wav",
    "sound/weapons/csgo_mod/scar20/clipin.wav",
    "sound/weapons/csgo_mod/scar20/clipout.wav",
    
    // sg553 sounds
    "sound/weapons/csgo_mod/sg553/pull.wav",
    "sound/weapons/csgo_mod/sg553/release.wav",
    "sound/weapons/csgo_mod/sg553/clipin.wav",
    "sound/weapons/csgo_mod/sg553/clipout.wav",
    "sound/weapons/csgo_mod/sg553/draw.wav",
    
    // stiletto sounds
    "sound/weapons/csgo_mod/stiletto/deploy.wav",
    "sound/weapons/csgo_mod/stiletto/flip_1.wav",
    "sound/weapons/csgo_mod/stiletto/flip_2.wav",
    "sound/weapons/csgo_mod/stiletto/flip_3.wav",
    "sound/weapons/csgo_mod/stiletto/flip_4.wav",
    
    // ssg-08 sounds
    "sound/weapons/csgo_mod/ssg08/boltback.wav",
    "sound/weapons/csgo_mod/ssg08/boltrelease.wav",
    "sound/weapons/csgo_mod/ssg08/clipin.wav",
    "sound/weapons/csgo_mod/ssg08/clipout.wav",
    "sound/weapons/csgo_mod/ssg08/cliptap.wav",
    "sound/weapons/csgo_mod/ssg08/draw.wav",
    
    // ump45 sounds
    "sound/weapons/csgo_mod/ump45/boltslap.wav",
    "sound/weapons/csgo_mod/ump45/boltrelease.wav",
    "sound/weapons/csgo_mod/ump45/clipin.wav",
    "sound/weapons/csgo_mod/ump45/clipout.wav",
    "sound/weapons/csgo_mod/ump45/draw.wav",
    
    // usp sounds
    "sound/weapons/csgo_mod/usp/clipin.wav",
    "sound/weapons/csgo_mod/usp/clipout.wav",
    "sound/weapons/csgo_mod/usp/draw.wav",
    "sound/weapons/csgo_mod/usp/draw_slide.wav",
    "sound/weapons/csgo_mod/usp/silencer_screw1.wav",
    "sound/weapons/csgo_mod/usp/silencer_screw2.wav",
    "sound/weapons/csgo_mod/usp/silencer_screw3.wav",
    "sound/weapons/csgo_mod/usp/silencer_screw4.wav",
    "sound/weapons/csgo_mod/usp/silencer_screw5.wav",
    "sound/weapons/csgo_mod/usp/silencer_screw_off_end.wav",
    "sound/weapons/csgo_mod/usp/silencer_screw_on_start.wav",
    
    // xm1014 sounds
    "sound/weapons/csgo_mod/xm1014/draw.wav",
    "sound/weapons/csgo_mod/xm1014/insert.wav",
    "sound/weapons/csgo_mod/xm1014/movement1.wav"
}

public plugin_init()
{
    register_plugin("[#] CS:GO Main Mode", "1.1 [FIX]", "x FR3NZYMOV x");
    
    // server menu client commands
    register_clcmd("say /menu", "ClCmd_ServerMenu");
    register_clcmd("say_team /menu", "ClCmd_ServerMenu");
    register_clcmd("menu", "ClCmd_ServerMenu");
    register_clcmd("/menu", "ClCmd_ServerMenu");
    register_clcmd("chooseteam", "ClCmd_ServerMenu");
    
    // reset score client commands
    register_clcmd("say /rs", "ClCmd_ResetScore");
    register_clcmd("say /resetscore", "ClCmd_ResetScore");
    register_clcmd("say_team /rs", "ClCmd_ResetScore");
    register_clcmd("say_team /resetscore", "ClCmd_ResetScore");
    
    // price motd client commands
    register_clcmd("say /price","ClCmd_PriceMotd");
    register_clcmd("say_team /price","ClCmd_PriceMotd");
    
    // demo record client commands
    register_clcmd("joinclass", "ClCmd_StartDemo");
    register_clcmd("menuselect", "ClCmd_StartDemo");
    
    // hook radio menu's
    register_clcmd("radio1", "ClCmd_HookRadio");
    register_clcmd("radio2", "ClCmd_HookRadio");
    register_clcmd("radio3", "ClCmd_HookRadio");
    
    // hook spray button
    register_impulse(201, "Impulse_HookSpray");
    
    // task for adverts in chat
    set_task(REPEAT_TIME, "Msg_AdvertChat", .flags="b");

    // handles for menus
    register_menucmd(register_menuid("Show_KnifeMenu"), keys, "Handle_KnifeMenu");
    register_menucmd(register_menuid("Show_ServerMenu"), keys, "Handle_ServerMenu");
    register_menucmd(register_menuid("Show_PlayerMenu"), keys, "Handle_PlayerMenu");
    register_menucmd(register_menuid("Show_ShopMenu"), keys, "Handle_ShopMenu");
    register_menucmd(register_menuid("Show_AdminMenu"), keys, "Handle_AdminMenu");
    register_menucmd(register_menuid("Show_EliteMenu"), keys, "Handle_EliteMenu");
    register_menucmd(register_menuid("Show_StyleMenu"), keys, "Handle_StyleMenu");
    register_menucmd(register_menuid("Show_MafiozeMenu"), keys, "Handle_MafiozeMenu");
    register_menucmd(register_menuid("Show_BackroomMenu"), keys, "Handle_BackroomMenu");
    register_menucmd(register_menuid("Show_BackroomMenu"), keys, "Handle_BackroomMenu");
    
    register_event("CurWeapon", "give_item1", "be", "1=1");
    register_event("CurWeapon", "give_item2", "be", "1=1");
    register_event("CurWeapon", "give_item3", "be", "1=1");
    register_event("CurWeapon", "give_item4", "be", "1=1");
    register_event("CurWeapon", "give_item5", "be", "1=1");
    register_event("CurWeapon", "give_item6", "be", "1=1");
    register_event("CurWeapon", "give_item7", "be", "1=1");
    register_event("CurWeapon", "give_item8", "be", "1=1");

    // impulse for inspect weapon (button F)
    register_impulse(100, "Inspect_Weapon");
    
    for(new i = 0; i < sizeof weapon_classnames; i++)
    RegisterHam(Ham_Weapon_PrimaryAttack, weapon_classnames[i], "Fw_Weapon_PrimaryAttack", 1);

    // two anim inspect's for deagle
    RegisterHam(Ham_Item_Deploy, "weapon_deagle", "Fw_Deagle_Disable");
    RegisterHam(Ham_Weapon_Reload, "weapon_deagle", "Fw_Deagle_Disable");
    
    // not inspect weapons on scope
    RegisterHam(Ham_Weapon_SecondaryAttack, "weapon_aug", "Fw_Weapon_SecondaryAttack");
    RegisterHam(Ham_Weapon_SecondaryAttack, "weapon_awp", "Fw_Weapon_SecondaryAttack");
    RegisterHam(Ham_Weapon_SecondaryAttack, "weapon_g3sg1", "Fw_Weapon_SecondaryAttack");
    RegisterHam(Ham_Weapon_SecondaryAttack, "weapon_scout", "Fw_Weapon_SecondaryAttack");
    RegisterHam(Ham_Weapon_SecondaryAttack, "weapon_sg550", "Fw_Weapon_SecondaryAttack");
    RegisterHam(Ham_Weapon_SecondaryAttack, "weapon_sg552", "Fw_Weapon_SecondaryAttack");
    
    // detecting map with bomb
    if(fm_find_ent_by_class(FM_NULLENT, "info_bomb_target") || fm_find_ent_by_class(FM_NULLENT, "func_bomb_target"))
    {
    // event planting/defusing bomb
    register_event("BarTime", "Event_PlantBomb", "be", "1=3")
    register_event("BarTime", "Event_DefuseBomb", "be", "1=5", "1=10")

    // log event planting/defusing bomb
    register_logevent("LogEvent_RoundEnd",2,"1=Round_End")
    register_logevent("LogEvent_PlantBomb",3,"2=Defused_The_Bomb")
    register_logevent("LogEvent_DefuseBomb",3,"2=Planted_The_Bomb")
    }
    
    // replace message
    register_message(get_user_msgid("TextMsg"), "Msg_MessageText");
    
    g_tReplaceInfoMsg = TrieCreate();
    Msg_ReplaceMessage();
}

public plugin_precache()
{
    // precache knife v_ models
    precache_model(KNIFE_V_MODEL1)
    precache_model(KNIFE_V_MODEL2)
    precache_model(KNIFE_V_MODEL3)
    precache_model(KNIFE_V_MODEL4)
    precache_model(KNIFE_V_MODEL5)
    precache_model(KNIFE_V_MODEL6)
    precache_model(KNIFE_V_MODEL7)
    precache_model(KNIFE_V_MODEL8)
    precache_model(KNIFE_V_MODEL9)
    
    // precache knife p_ models
    precache_model(KNIFE_P_MODEL1)
    precache_model(KNIFE_P_MODEL2)
    precache_model(KNIFE_P_MODEL3)
    precache_model(KNIFE_P_MODEL4)
    precache_model(KNIFE_P_MODEL5)
    precache_model(KNIFE_P_MODEL6)
    precache_model(KNIFE_P_MODEL7)
    precache_model(KNIFE_P_MODEL8)
    precache_model(KNIFE_P_MODEL9)
    
    // precache c4 model
    precache_model(W_BOMB_MODEL)
    
    // precache sounds
    for(new i; i < sizeof(g_Sounds); i++)
    {
        precache_generic(g_Sounds[i]);
    }
}
public plugin_cfg()
{
    new configsdir[64], filename[64], file;
    get_localinfo("amxx_configsdir", configsdir,charsmax(configsdir));
    formatex(filename, charsmax(filename), "%s/csgo/csgo_adverts.ini",configsdir);

    file = fopen(filename,"r");

    if(file)
    {
        new string[512], message[192];
        while((ad_count < 256) && !feof(file))
        {
            fgets(file, string, charsmax(string));

            if((string[0] != ';') && (string[0] != '/') && parse(string, message, charsmax(message)))
            {
                format_color(message, charsmax(message));
                copy(adMessages[ad_count], 192, message);
                ad_count++;
            }
        }
        fclose(file);
    }
    else
        log_amx("* Файла ^"%s^" не существует *", filename);
}

public ClCmd_HookRadio(id)
{
    client_print(id, print_center, "* Радио сообщения недоступны *")
    return PLUGIN_HANDLED;
}

public Impulse_HookSpray(id)
{
    client_print(id, print_center, "* Рисование спрея недоступно *")
    return PLUGIN_HANDLED;
}

public Msg_AdvertChat()
{   
    if(!ad_count) return;
#if defined ADVERT_ALL
    client_print_color(0, 0, "%s", adMessages[iMessgCount == ad_count ? (iMessgCount = 0) : iMessgCount++]);
#else
    static players[32], pcount;
    get_players(players, pcount, "bch");
    for(new i; i < pcount; i++)
    {
        client_print_color(players[i], 0, "%s", adMessages[iMessgCount == ad_count ? (iMessgCount = 0) : iMessgCount++]);
    }
#endif   
}

public client_putinserver(id)
{
    // if player connected
    KnifeId[id] = 8
}

public ClCmd_StartDemo(id)
{
    // start rec demo
    if(g_bAllowRecord[id])
    {
        Msg_StartDemo(id);
        g_bAllowRecord[id] = false;
    }
}
public Msg_StartDemo(id)
{
    // chat message of rec demo
    if(!is_user_connected(id))
    return;
        
    client_cmd(id, "stop; record ^"%s^"", DEMONAME);   
    new datee[30];get_time("%d.%m.%Y | %H:%M:%S", datee, charsmax(datee));
    SendMsg(id, "* Идет запись демо %s.dem *", DEMONAME);
    SendMsg(id, "* Время записи: ^4%s^1 *", datee);
}
public Msg_ReplaceMessage()
{
    // replace messages
    TrieSetString(g_tReplaceInfoMsg, "#Game_Commencing",                    "* Игра началась *");
    TrieSetString(g_tReplaceInfoMsg, "#Game_will_restart_in",                "* Рестарт игры произойдет через %s секунд *");
    TrieSetString(g_tReplaceInfoMsg, "#CTs_Win",                        "* Контр-Террористы победили *");
    TrieSetString(g_tReplaceInfoMsg, "#Terrorists_Win",                    "* Террористы победили *");
    TrieSetString(g_tReplaceInfoMsg, "#Round_Draw",                        "* Раунд закончился вничью *");
    TrieSetString(g_tReplaceInfoMsg, "#Target_Bombed",                    "* Цель уничтожена *");
    TrieSetString(g_tReplaceInfoMsg, "#Target_Saved",                    "* Цель спасена *");
    TrieSetString(g_tReplaceInfoMsg, "#Hostages_Not_Rescued",                "* Не удалось спасти заложников *");
    TrieSetString(g_tReplaceInfoMsg, "#All_Hostages_Rescued",                "* Все заложники спасены *");
    TrieSetString(g_tReplaceInfoMsg, "#VIP_Escaped",                    "* VIP-игрок спасен *");
    TrieSetString(g_tReplaceInfoMsg, "#VIP_Assassinated",                    "* VIP-игрок убит *");
    TrieSetString(g_tReplaceInfoMsg, "#C4_Arming_Cancelled",                "* Бомба может быть установлена только в зоне установки бомбы *");
    TrieSetString(g_tReplaceInfoMsg, "#C4_Plant_Must_Be_On_Ground",                "* Для установки бобмы Вы должны находиться на земле *");
    TrieSetString(g_tReplaceInfoMsg, "#Defusing_Bomb_With_Defuse_Kit",            "* Обезвреживание бомбы с набором сапёра *");
    TrieSetString(g_tReplaceInfoMsg, "#Defusing_Bomb_Without_Defuse_Kit",            "* Обезвреживание бомбы без набора сапёра *");
    TrieSetString(g_tReplaceInfoMsg, "#Weapon_Cannot_Be_Dropped",                "* Нельзя выбросить данное оружие *");
    TrieSetString(g_tReplaceInfoMsg, "#C4_Plant_At_Bomb_Spot",                "* Бомба может быть установлена только в зоне установки бомбы *");
    TrieSetString(g_tReplaceInfoMsg, "#Cannot_Carry_Anymore",                "* Вы не можете взять больше *");
    TrieSetString(g_tReplaceInfoMsg, "#Already_Have_Kevlar",                "* У вас уже имеется бронежилет *");
    TrieSetString(g_tReplaceInfoMsg, "#Already_Have_Kevlar_Helmet",                "* У вас уже имеется бронежилет и шлем *");
    TrieSetString(g_tReplaceInfoMsg, "#Switch_To_BurstFire",                "* Переключен в режим пулеметного огня *");
    TrieSetString(g_tReplaceInfoMsg, "#Switch_To_FullAuto",                    "* Переключен в автоматический режим *");
    TrieSetString(g_tReplaceInfoMsg, "#Switch_To_SemiAuto",                    "* Переключен в полуавтоматический режим *");
    TrieSetString(g_tReplaceInfoMsg, "#Already_Own_Weapon",                    "* У вас уже имеется данное оружие *");
    TrieSetString(g_tReplaceInfoMsg, "#Command_Not_Available",                "* Данное действие недоступно в Вашем местонахождении *");
    TrieSetString(g_tReplaceInfoMsg, "#Got_bomb",                        "* Вы подобрали бомбу *");
    TrieSetString(g_tReplaceInfoMsg, "#Game_bomb_pickup",                    "* %s подобрал бомбу *");
    TrieSetString(g_tReplaceInfoMsg, "#Game_bomb_drop",                    "* %s выбросил бомбу *");
    TrieSetString(g_tReplaceInfoMsg, "#Bomb_Planted",                    "* Бомба установлена *");
    TrieSetString(g_tReplaceInfoMsg, "#Bomb_Defused",                    "* Бомба обезврежена *");
    TrieSetString(g_tReplaceInfoMsg, "#Cant_buy",                        "* %s секунд уже истекли.^rПокупка арсенала запрещена *");
    TrieSetString(g_tReplaceInfoMsg, "#Name_change_at_respawn",                "* Ваше имя будет изменено после следующего возрождения *");
    TrieSetString(g_tReplaceInfoMsg, "#Auto_Team_Balance_Next_Round",            "* Автоматический баланс команды наступит в следующем раунде *");
}

public Msg_MessageText()
{
    new szMsg[192], szArg3[32];
    get_msg_arg_string(2, szMsg, charsmax(szMsg));
    if(TrieGetString(g_tReplaceInfoMsg, szMsg, szMsg, charsmax(szMsg)))
    {
        if(get_msg_args() > 2)
        {
            get_msg_arg_string(3, szArg3, charsmax(szArg3));
            replace(szMsg, charsmax(szMsg), "%s", szArg3);
        }
        set_msg_arg_string(2, szMsg);
    }
}

public plugin_end()
{
    TrieDestroy(g_tReplaceInfoMsg);
}

public ClCmd_PriceMotd(id,level,cid)
{
    // price motd
    if (!cmd_access(id,level,cid,1))
    return PLUGIN_CONTINUE
    
    show_motd(id,"pricelist.txt","Покупка привилегий")
    return PLUGIN_CONTINUE   
}

public ClCmd_ResetScore(id)
{
    // reset score
    cs_set_user_deaths(id, 0)
    set_user_frags(id, 0)
    cs_set_user_deaths(id, 0)
    set_user_frags(id, 0)

    // chat message of reseting score
    client_print(id, print_chat, "* Вы обнулили свой счет! *")
    client_cmd(id,"spk buttons/bell1.wav")
}

// unregister fwd (save resourse & CPU)
public LogEvent_RoundEnd()
{
    if(g_fwdSetModel)
        unregister_forward(FM_SetModel, g_fwdSetModel, 0)
}

// register fwd
public Event_PlantBomb()
    g_fwdSetModel = register_forward(FM_SetModel, "fw_SetModel", 0)

// fix bomb angles by voed
public LogEvent_PlantBomb()
{
    new id = get_loguser_index()
    if(is_user_connected(id)) // fix error logs
    {
        new Float:flAngles[3], ent
        pev(id, pev_v_angle, flAngles)

        ent = fm_find_ent_by_model(FM_NULLENT, "grenade", W_BOMB_MODEL)
        if(pev_valid(ent))
        {
            flAngles[0]=0.0
            flAngles[1]+=90.0
            set_pev(ent, pev_angles, flAngles)
        }
    }
}

// find bomb save angles/origin
public Event_DefuseBomb()
{
    new ent = fm_find_ent_by_model(FM_NULLENT, "grenade", W_BOMB_MODEL)
    if(pev_valid(ent))
    {
        pev(ent, pev_origin, g_flOrigin)
        pev(ent, pev_angles, g_flAngles)
    }
}

// create bomb
public LogEvent_DefuseBomb()
{
    new ent = fm_create_entity("grenade")
    if(!pev_valid(ent))
        return

    set_pev(ent, pev_origin, g_flOrigin)
    set_pev(ent, pev_angles, g_flAngles)
    dllfunc(DLLFunc_Spawn, ent)

    engfunc(EngFunc_SetModel, ent, W_BOMB_MODEL)
    set_pev(ent, pev_skin, 1) // * spec model
    set_pev(ent, pev_movetype, MOVETYPE_NONE)
    set_pev(ent, pev_solid, SOLID_NOT)
    set_pev(ent, pev_spawnflags, pev(ent, pev_spawnflags) | SF_NORESPAWN)
}
public fw_SetModel(ent, const model[])
{
    if(!pev_valid(ent) || !equal(model, "models/w_c4.mdl"))
        return FMRES_IGNORED

    engfunc(EngFunc_SetModel, ent, W_BOMB_MODEL)
    set_pev(ent, pev_skin, 0)
    return FMRES_SUPERCEDE
}

public ClCmd_ServerMenu(id) return Show_ServerMenu(id);

Show_ServerMenu(id)
{
    // main server menu
    new szMenu[512]
    new iLen = 0
    iLen = format(szMenu[iLen], 511, "\yМеню Сервера^n^n");
    
    iLen += format(szMenu[iLen], 511 - iLen, "\r[1]\w Меню \yигрока^n");
    iLen += format(szMenu[iLen], 511 - iLen, "\r[2]\w Магазин \yскинов^n");
    iLen += format(szMenu[iLen], 511 - iLen, "\r[3]\w Сменить \yкоманду^n^n");
    iLen += format(szMenu[iLen], 511 - iLen, "\r[4]\w Топ-15 \yигроков сервера^n");
    if(get_user_flags(id) & ADMIN_RESERVATION)
    {
    iLen += format(szMenu[iLen], 511 - iLen, "\r[5]\w Меню \yадминистратора^n^n");
    }
    else
    {
    iLen += format(szMenu[iLen], 511 - iLen, "\r[5]\d Меню администратора^n^n");   
    }
    
    format(szMenu[iLen], 511 - iLen, "\r[0]\w Выход");
    return show_menu(id, keys, szMenu, -1, "Show_ServerMenu");
}

public Handle_ServerMenu(id, iKey)
{
switch(iKey)
{
case 0:
{
    return Show_PlayerMenu(id);
}
case 1:
{
    return Show_ShopMenu(id);
}
case 2:
{
    if(is_user_alive(id))
    {
        client_cmd(id, "jointeam");
        return PLUGIN_HANDLED;
    }
    else
    {
        client_print(id, print_chat, "* Только живые игроки могут менять команду! *");
        client_cmd(id, "spk buttons/blip2.wav");
        return PLUGIN_HANDLED;
    }
}
case 3:
{
    client_cmd(id, "say /top15");
    return PLUGIN_HANDLED;
}
case 4:
{
    if(get_user_flags(id) & ADMIN_RESERVATION)
    {
        return Show_AdminMenu(id);
    }
    else
    {
        client_print(id, print_chat, "* Только Администратор имеет доступ к меню! *");
        client_cmd(id, "spk buttons/blip2.wav");
        return PLUGIN_HANDLED;
    }
}
case 9:
{
    return PLUGIN_HANDLED;
    }
}
return Show_ServerMenu(id);
}

Show_PlayerMenu(id)
{
    // player menu
    new szMenu[512]
    new iLen = 0
    iLen = format(szMenu[iLen], 511, "\yМеню Игрока^n^n");
    
    iLen += format(szMenu[iLen], 511 - iLen, "\r[1]\w Обнулить \yсчёт^n");
    iLen += format(szMenu[iLen], 511 - iLen, "\r[2]\w Забанить \yигрока^n");
    iLen += format(szMenu[iLen], 511 - iLen, "\r[3]\w Заглушить \yигрока^n");
    iLen += format(szMenu[iLen], 511 - iLen, "\r[4]\w Цены на \yпривилегии^n^n");
    
    iLen += format(szMenu[iLen], 511 - iLen, "\r[9]\w Назад^n");
    iLen += format(szMenu[iLen], 511 - iLen, "\r[0]\w Выход^n");
    return show_menu(id, keys, szMenu, -1, "Show_PlayerMenu");
}

public Handle_PlayerMenu(id, iKey)
{
switch(iKey)
{
case 0:
{
    client_cmd(id, "say /rs");
    return PLUGIN_HANDLED;
}
case 1:
{
    client_cmd(id, "say /voteban");
    return PLUGIN_HANDLED;
}
case 2:
{
    client_cmd(id, "say /mute");
    return PLUGIN_HANDLED;
}
case 3:
{
    client_cmd(id, "say /price");
    return PLUGIN_HANDLED;
}
case 8:
{
    return Show_ServerMenu(id);
}
case 9:
{
    return PLUGIN_HANDLED;
    }
}
return Show_PlayerMenu(id);
}

Show_ShopMenu(id)
{
    // block menu on awp_, aim_, fy_, 35hp_ maps
    new mapname[32];
    get_mapname(mapname, charsmax(mapname));   
    
    new maps[][] = { "awp", "aim", "35hp", "fy", "$" };
    for(new i; i < sizeof maps; i++)
    {
    if(containi(mapname, maps[i]) != -1)
    {
        client_print(id, print_chat, "* Меню не доступно на этой карте! *");   
        return PLUGIN_HANDLED
        }
    }
    // skins shop menu
    new szMenu[512]
    new iLen = 0
    iLen = format(szMenu[iLen], 511, "\yМагазин Скинов^n^n");
    if(get_user_flags(id) & ADMIN_LEVEL_A)
    {
    iLen += format(szMenu[iLen], 511 - iLen, "\r[1]\w Элитный \yнабор^n");
    }
    else
    {
    iLen += format(szMenu[iLen], 511 - iLen, "\r[1]\d Элитный набор \R\r[Не куплено]^n");
    }
    if(get_user_flags(id) & ADMIN_LEVEL_B)
    {
    iLen += format(szMenu[iLen], 511 - iLen, "\r[2]\w Стильный \yнабор^n");
    }
    else
    {
    iLen += format(szMenu[iLen], 511 - iLen, "\r[2]\d Стильный набор \R\r[Не куплено]^n");
    }
    if(get_user_flags(id) & ADMIN_LEVEL_C)
    {
    iLen += format(szMenu[iLen], 511 - iLen, "\r[3]\w Мафиозный \yнабор^n");
    }
    else
    {
    iLen += format(szMenu[iLen], 511 - iLen, "\r[3]\d Мафиозный набор \R\r[Не куплено]^n");
    }
    if(get_user_flags(id) & ADMIN_LEVEL_D)
    {
    iLen += format(szMenu[iLen], 511 - iLen, "\r[4]\w Засекреченный \yнабор^n");
    }
    else
    {
    iLen += format(szMenu[iLen], 511 - iLen, "\r[4]\d Засекреченный набор \R\r[Не куплено]^n");
    }
    if(get_user_flags(id) & ADMIN_LEVEL_E)
    {
    iLen += format(szMenu[iLen], 511 - iLen, "\r[5]\w Ножевой \yнабор скинов^n^n");
    }
    else
    {
    iLen += format(szMenu[iLen], 511 - iLen, "\r[5]\d Ножевой набор скинов \R\r[Не куплено]^n^n");
    }
    iLen += format(szMenu[iLen], 511 - iLen, "\r[9]\w Назад^n");
    iLen += format(szMenu[iLen], 511 - iLen, "\r[0]\w Выход^n");
    return show_menu(id, keys, szMenu, -1, "Show_ShopMenu");
}

public Handle_ShopMenu(id, iKey)
{
switch(iKey)
{
case 0:
{
    if(get_user_flags(id) & ADMIN_LEVEL_A)
    {
    if(!is_user_alive(id))
    {
        return PLUGIN_HANDLED;
    }
    return Show_EliteMenu(id);
}
else
{
    return PLUGIN_HANDLED;
    }
}
case 1:
{
    if(get_user_flags(id) & ADMIN_LEVEL_C)
    {
    if(!is_user_alive(id))
    {
        return PLUGIN_HANDLED;
    }
    return Show_StyleMenu(id);
}
else
{
    return PLUGIN_HANDLED;
    }
}
case 2:
{
    if(get_user_flags(id) & ADMIN_LEVEL_C)
    {
    if(!is_user_alive(id))
    {
        return PLUGIN_HANDLED;
    }
    return Show_MafiozeMenu(id);
}
else
{
    return PLUGIN_HANDLED;
    }
}
case 3:
{
    if(get_user_flags(id) & ADMIN_LEVEL_D)
    {
    if(!is_user_alive(id))
    {
        return PLUGIN_HANDLED;
    }
    return Show_BackroomMenu(id);
}
else
{
    return PLUGIN_HANDLED;
    }
}
case 4:
{
    if(get_user_flags(id) & ADMIN_LEVEL_E)
    {
    return Show_KnifeMenu(id);
}
else
{
    return PLUGIN_HANDLED;
    }
}
case 8:
{
    return Show_ServerMenu(id);
}
case 9:
{
    return PLUGIN_HANDLED;
    }
}
return Show_ShopMenu(id);
}

public Show_EliteMenu(id)
{
    // block menu on awp_, aim_, fy_, 35hp_ maps
    new mapname[32];
    get_mapname(mapname, charsmax(mapname));   
    
    new maps[][] = { "awp", "aim", "35hp", "fy", "$" };
    for(new i; i < sizeof maps; i++)
    {
    if(containi(mapname, maps[i]) != -1)
    {
        client_print(id, print_chat, "* Меню не доступно на этой карте! *");   
        return PLUGIN_HANDLED
        }
    }
    new szMenu[512]
    new iLen = 0
    iLen = format(szMenu[iLen], 511, "\yЭлитиный Набор Скинов:\R\rЦена:^n^n");
    if(cs_get_user_money(id) >= 4750)
    {
    iLen += format(szMenu[iLen], 511 - iLen, "\r[1]\w AWP Neo-Noir\R\r4750$^n");
    }
    else
    {
    iLen += format(szMenu[iLen], 511 - iLen, "\r[1]\d AWP Neo-Noir\R\r4750$^n");
    }
    if(cs_get_user_money(id) >= 3100)
    {
    iLen += format(szMenu[iLen], 511 - iLen, "\r[2]\w M4A1-S Chantico Fire\R\r3100$^n");
    }
    else
    {
    iLen += format(szMenu[iLen], 511 - iLen, "\r[2]\d M4A1-S Chantico Fire\R\r3100$^n");
    }
    if(cs_get_user_money(id) >= 2500)
    {
    iLen += format(szMenu[iLen], 511 - iLen, "\r[3]\w AK-47 Fire Serpent\R\r2500$^n");
    }
    else
    {
    iLen += format(szMenu[iLen], 511 - iLen, "\r[3]\d AK-47 Fire Serpent\R\r2500$^n");
    }
    if(cs_get_user_money(id) >= 650)
    {
    iLen += format(szMenu[iLen], 511 - iLen, "\r[4]\w Deagle Kumicho Dragon\R\r650$^n");
    }
    else
    {
    iLen += format(szMenu[iLen], 511 - iLen, "\r[4]\d Deagle Kumicho Dragon\R\r650$^n");
    }
    if(cs_get_user_money(id) >= 500)
    {
    iLen += format(szMenu[iLen], 511 - iLen, "\r[5]\w USP Orion\R\r500$^n");
    }
    else
    {
    iLen += format(szMenu[iLen], 511 - iLen, "\r[5]\d USP Orion\R\r500$^n");
    }
    if(cs_get_user_money(id) >= 400)
    {
    iLen += format(szMenu[iLen], 511 - iLen, "\r[6]\w Glock-18 Fade\R\r400$^n^n");
    }
    else
    {
    iLen += format(szMenu[iLen], 511 - iLen, "\r[6]\d Glock-18 Fade\R\r400$^n^n");
    }
    iLen += format(szMenu[iLen], 511 - iLen, "\r[9]\w Назад^n");
    iLen += format(szMenu[iLen], 511 - iLen, "\r[0]\w Выход^n");
    return show_menu(id, keys, szMenu, -1, "Show_EliteMenu");
}

public Handle_EliteMenu(id, iKey)
{
switch(iKey)
{
    case 0:
    {   
    client_cmd(id, "awp_noir");
    return PLUGIN_HANDLED;
    }
    case 1:
    {   
    client_cmd(id, "m4a1_fire");
    return PLUGIN_HANDLED;
    }
    case 2:
    {   
    client_cmd(id, "ak47_fireserpent");
    return PLUGIN_HANDLED;
    }
    case 3:
    {
    client_cmd(id, "deagle_dragon");
    return PLUGIN_HANDLED;
    }
    case 4:
    {
    client_cmd(id, "usp_orion");
    return PLUGIN_HANDLED;
    }
    case 5:
    {
    client_cmd(id, "glock_fade");
    return PLUGIN_HANDLED;
    }
    case 8:
    {
    return Show_ShopMenu(id);
    }
    case 9:
    {
    return PLUGIN_HANDLED;
        }
    }
    return Show_EliteMenu(id);
    }

public Show_StyleMenu(id)
{
    // block menu on awp_, aim_, fy_, 35hp_ maps
    new mapname[32];
    get_mapname(mapname, charsmax(mapname));   
    
    new maps[][] = { "awp", "aim", "35hp", "fy", "$" };
    for(new i; i < sizeof maps; i++)
    {
    if(containi(mapname, maps[i]) != -1)
    {
        client_print(id, print_chat, "* Меню не доступно на этой карте! *");   
        return PLUGIN_HANDLED
        }
    }
    new szMenu[512]
    new iLen = 0
    iLen = format(szMenu[iLen], 511, "\yСтильный Набор Скинов:\R\rЦена:^n^n");
    if(cs_get_user_money(id) >= 4750)
    {
    iLen += format(szMenu[iLen], 511 - iLen, "\r[1]\w AWP Fever Dream\R\r4750$^n");
    }
    else
    {
    iLen += format(szMenu[iLen], 511 - iLen, "\r[1]\d AWP Fever Dream\R\r4750$^n");
    }
    if(cs_get_user_money(id) >= 3100)
    {
    iLen += format(szMenu[iLen], 511 - iLen, "\r[2]\w M4A1-S Nightmare\R\r3100$^n");
    }
    else
    {
    iLen += format(szMenu[iLen], 511 - iLen, "\r[2]\d M4A1-S Nightmare\R\r3100$^n");
    }
    if(cs_get_user_money(id) >= 2500)
    {
    iLen += format(szMenu[iLen], 511 - iLen, "\r[3]\w AK-47 Blood Sport\R\r2500$^n");
    }
    else
    {
    iLen += format(szMenu[iLen], 511 - iLen, "\r[3]\d AK-47 Blood Sport\R\r2500$^n");
    }
    if(cs_get_user_money(id) >= 650)
    {
    iLen += format(szMenu[iLen], 511 - iLen, "\r[4]\w Deagle Code Red\R\r650$^n");
    }
    else
    {
    iLen += format(szMenu[iLen], 511 - iLen, "\r[4]\d Deagle Code Red\R\r650$^n");
    }
    if(cs_get_user_money(id) >= 500)
    {
    iLen += format(szMenu[iLen], 511 - iLen, "\r[5]\w USP Cortex\R\r500$^n");
    }
    else
    {
    iLen += format(szMenu[iLen], 511 - iLen, "\r[5]\d USP Cortex\R\r500$^n");
    }
    if(cs_get_user_money(id) >= 400)
    {
    iLen += format(szMenu[iLen], 511 - iLen, "\r[6]\w Glock-18 Moonrise\R\r400$^n^n");
    }
    else
    {
    iLen += format(szMenu[iLen], 511 - iLen, "\r[6]\d Glock-18 Moonrise\R\r400$^n^n");
    }
    iLen += format(szMenu[iLen], 511 - iLen, "\r[9]\w Назад^n");
    iLen += format(szMenu[iLen], 511 - iLen, "\r[0]\w Выход^n");
    return show_menu(id, keys, szMenu, -1, "Show_StyleMenu");
}

public Handle_StyleMenu(id, iKey)
{
switch(iKey)
{
    case 0:
    {   
    client_cmd(id, "awp_dream");
    return PLUGIN_HANDLED;
    }
    case 1:
    {   
    client_cmd(id, "m4a1_nightmare");
    return PLUGIN_HANDLED;
    }
    case 2:
    {
    client_cmd(id, "ak47_blood");
    return PLUGIN_HANDLED;
    }
    case 3:
    {
    client_cmd(id, "deagle_codered");
    return PLUGIN_HANDLED;
    }
    case 4:
    {
    client_cmd(id, "usp_cortex");
    return PLUGIN_HANDLED;
    }
    case 5:
    {   
    client_cmd(id, "glock_moon");
    return PLUGIN_HANDLED;
    }
    case 8:
    {
    return Show_ShopMenu(id);
    }
    case 9:
    {
    return PLUGIN_HANDLED;
        }
    }
    return Show_StyleMenu(id);
}
public Show_MafiozeMenu(id)
{
    // block menu on awp_, aim_, fy_, 35hp_ maps
    new mapname[32];
    get_mapname(mapname, charsmax(mapname));   
    
    new maps[][] = { "awp", "aim", "35hp", "fy", "$" };
    for(new i; i < sizeof maps; i++)
    {
    if(containi(mapname, maps[i]) != -1)
    {
        client_print(id, print_chat, "* Меню не доступно на этой карте! *");   
        return PLUGIN_HANDLED
        }
    }
    new szMenu[512]
    new iLen = 0
    iLen = format(szMenu[iLen], 511, "\yМафиозный Набор Скинов:\R\rЦена:^n^n");
    if(cs_get_user_money(id) >= 4750)
    {
    iLen += format(szMenu[iLen], 511 - iLen, "\r[1]\w AWP Dragon Lore\R\r4750$^n");
    }
    else
    {
    iLen += format(szMenu[iLen], 511 - iLen, "\r[1]\d AWP Dragon Lore\R\r4750$^n");
    }
    if(cs_get_user_money(id) >= 3100)
    {
    iLen += format(szMenu[iLen], 511 - iLen, "\r[2]\w M4A1-S Hyper Beast\R\r3100$^n");
    }
    else
    {
    iLen += format(szMenu[iLen], 511 - iLen, "\r[2]\d M4A1-S Hyper Beast\R\r3100$^n");
    }
    if(cs_get_user_money(id) >= 2500)
    {
    iLen += format(szMenu[iLen], 511 - iLen, "\r[3]\w AK-47 Neon Revolution\R\r2500$^n");
    }
    else
    {
    iLen += format(szMenu[iLen], 511 - iLen, "\r[3]\d AK-47 Neon Revolution\R\r2500$^n");
    }
    if(cs_get_user_money(id) >= 650)
    {
    iLen += format(szMenu[iLen], 511 - iLen, "\r[4]\w Deagle Blaze\R\r650$^n");
    }
    else
    {
    iLen += format(szMenu[iLen], 511 - iLen, "\r[4]\d Deagle Blaze\R\r650$^n");
    }
    if(cs_get_user_money(id) >= 500)
    {
    iLen += format(szMenu[iLen], 511 - iLen, "\r[5]\w USP Kill Confirmed\R\r500$^n");
    }
    else
    {
    iLen += format(szMenu[iLen], 511 - iLen, "\r[5]\d USP Kill Confirmed\R\r500$^n");
    }
    if(cs_get_user_money(id) >= 400)
    {
    iLen += format(szMenu[iLen], 511 - iLen, "\r[6]\w Glock-18 Wasteland Rebel\R\r400$^n^n");
    }
    else
    {
    iLen += format(szMenu[iLen], 511 - iLen, "\r[6]\d Glock-18 Wasteland Rebel\R\r400$^n^n");
    }
    iLen += format(szMenu[iLen], 511 - iLen, "\r[9]\w Назад^n");
    iLen += format(szMenu[iLen], 511 - iLen, "\r[0]\w Выход^n");
    return show_menu(id, keys, szMenu, -1, "Show_MafiozeMenu");
}

public Handle_MafiozeMenu(id, iKey)
{
switch(iKey)
{
    case 0:
    {   
    client_cmd(id, "awp_lore");
    return PLUGIN_HANDLED;
    }
    case 1:
    {
    client_cmd(id, "m4a1_beast");
    return PLUGIN_HANDLED;
    }
    case 2:
    {   
    client_cmd(id, "ak47_neon");
    return PLUGIN_HANDLED;
    }
    case 3:
    {   
    client_cmd(id, "deagle_blaze");
    return PLUGIN_HANDLED;
    }
    case 4:
    {
    client_cmd(id, "usp_confirmed");
    return PLUGIN_HANDLED;
    }
    case 5:
    {
    client_cmd(id, "glock_wasteland");
    return PLUGIN_HANDLED;
    }
    case 8:
    {
    return Show_ShopMenu(id);
    }
    case 9:
    {
    return PLUGIN_HANDLED;
        }
    }
    return Show_MafiozeMenu(id);
}

public Show_BackroomMenu(id)
{
    // block menu on awp_, aim_, fy_, 35hp_ maps   
    new mapname[32];
    get_mapname(mapname, charsmax(mapname));   
    
    new maps[][] = { "awp", "aim", "35hp", "fy", "$" };
    for(new i; i < sizeof maps; i++)
    {
    if(containi(mapname, maps[i]) != -1)
    {
        client_print(id, print_chat, "* Меню не доступно на этой карте! *");   
        return PLUGIN_HANDLED
        }
    }
    new szMenu[512]
    new iLen = 0
    iLen = format(szMenu[iLen], 511, "\yЗасекреченный Набор Скинов:\R\rЦена:^n^n");
    if(cs_get_user_money(id) >= 4750)
    {
    iLen += format(szMenu[iLen], 511 - iLen, "\r[1]\w AWP Medusa\R\r4750$^n");
    }
    else
    {
    iLen += format(szMenu[iLen], 511 - iLen, "\r[1]\d AWP Medusa\R\r4750$^n");
    }
    if(cs_get_user_money(id) >= 3100)
    {
    iLen += format(szMenu[iLen], 511 - iLen, "\r[2]\w M4A1-S Decimator\R\r3100$^n");
    }
    else
    {
    iLen += format(szMenu[iLen], 511 - iLen, "\r[2]\d M4A1-S Decimator\R\r3100$^n");
    }
    if(cs_get_user_money(id) >= 2500)
    {
    iLen += format(szMenu[iLen], 511 - iLen, "\r[3]\w AK-47 Asiimov\R\r2500$^n");
    }
    else
    {
    iLen += format(szMenu[iLen], 511 - iLen, "\r[3]\d AK-47 Asiimov\R\r2500$^n");
    }
    if(cs_get_user_money(id) >= 650)
    {
    iLen += format(szMenu[iLen], 511 - iLen, "\r[4]\w Deagle Crimson Web\R\r650$^n");
    }
    else
    {
    iLen += format(szMenu[iLen], 511 - iLen, "\r[4]\d Deagle Crimson Web\R\r650$^n");
    }
    if(cs_get_user_money(id) >= 500)
    {
    iLen += format(szMenu[iLen], 511 - iLen, "\r[5]\w USP Neo-Noir\R\r500$^n");
    }
    else
    {
    iLen += format(szMenu[iLen], 511 - iLen, "\r[5]\d USP Neo-Noir\R\r500$^n");
    }
    if(cs_get_user_money(id) >= 400)
    {
    iLen += format(szMenu[iLen], 511 - iLen, "\r[6]\w Glock-18 Water Elemental\R\r400$^n^n");
    }
    else
    {
    iLen += format(szMenu[iLen], 511 - iLen, "\r[6]\d Glock-18 Water Elemental\R\r400$^n^n");
    }
    iLen += format(szMenu[iLen], 511 - iLen, "\r[9]\w Назад^n");
    iLen += format(szMenu[iLen], 511 - iLen, "\r[0]\w Выход^n");
    return show_menu(id, keys, szMenu, -1, "Show_BackroomMenu");
}

public Handle_BackroomMenu(id, iKey)
{
switch(iKey)
{
    case 0:
    {   
    client_cmd(id, "awp_medusa");
    return PLUGIN_HANDLED;
    }
    case 1:
    {   
    client_cmd(id, "m4a1_decimator");
    return PLUGIN_HANDLED;
    }
    case 2:
    {   
    client_cmd(id, "ak47_asiimov");
    return PLUGIN_HANDLED;
    }
    case 3:
    {
    client_cmd(id, "deagle_crimson");
    return PLUGIN_HANDLED;
    }
    case 4:
    {
    client_cmd(id, "usp_noir");
    return PLUGIN_HANDLED;
    }
    case 5:
    {
    client_cmd(id, "glock_water");
    return PLUGIN_HANDLED;
    }
    case 8:
    {
    return Show_ShopMenu(id);
    }
    case 9:
    {
    return PLUGIN_HANDLED;
        }
    }
    return Show_BackroomMenu(id);
}

public Show_AdminMenu(id)
{
    // main admin menu
    new szMenu[512]
    new iLen = 0
    iLen = format(szMenu[iLen], 511, "\yМеню Администратора^n^n");
    
    iLen += format(szMenu[iLen], 511 - iLen, "\r[1]\w Заглушить \yигрока^n");
    iLen += format(szMenu[iLen], 511 - iLen, "\r[2]\w Кикнуть \yигрока^n");
    iLen += format(szMenu[iLen], 511 - iLen, "\r[3]\w Забанить \yигрока^n^n");
    iLen += format(szMenu[iLen], 511 - iLen, "\r[4]\w Сменить \yкарту^n");
    iLen += format(szMenu[iLen], 511 - iLen, "\r[5]\w Голосование за смену \yкарты^n");
    if(get_user_flags(id) & ADMIN_KICK)
    {
    iLen += format(szMenu[iLen], 511 - iLen, "\r[6]\w Стукнуть/\wУбить \yигрока^n");
    }
    else
    {
    iLen += format(szMenu[iLen], 511 - iLen, "\r[6]\d Стукнуть/Убить \yигрока^n");
    }
    if(get_user_flags(id) & ADMIN_KICK)
    {
    iLen += format(szMenu[iLen], 511 - iLen, "\r[7]\w Команда \yигрока^n^n");
    }
    else
    {
    iLen += format(szMenu[iLen], 511 - iLen, "\r[7]\d Команда \yигрока^n^n");
    }
    iLen += format(szMenu[iLen], 511 - iLen, "\r[9]\w Назад^n");
    iLen += format(szMenu[iLen], 511 - iLen, "\r[0]\w Выход^n");
    return show_menu(id, keys, szMenu, -1, "Show_AdminMenu");
}

public Handle_AdminMenu(id, iKey)
{
switch(iKey)
{
    case 0:
    {
    client_cmd(id, "amx_gagmenu");
    return PLUGIN_HANDLED;
    }
    case 1:
    {
    client_cmd(id, "amx_kickmenu");
    return PLUGIN_HANDLED;
    }
    case 2:
    {
    client_cmd(id, "amx_banmenu");
    return PLUGIN_HANDLED;
    }
    case 3:
    {
    client_cmd(id, "amx_mapmenu");
    return PLUGIN_HANDLED;
    }
    case 4:
    {
    client_cmd(id, "amx_votemapmenu");
    return PLUGIN_HANDLED;
    }
    case 5:
    {
    if(get_user_flags(id) & ADMIN_KICK)
    {
    client_cmd(id, "amx_slapmenu");
    return PLUGIN_HANDLED;
    }
    else
    {
    client_print(id, print_chat, "* Только Админ может пользоваться этой командой! *");
    client_cmd(id, "spk buttons/blip2.wav");
    return PLUGIN_HANDLED;
        }
    }
    case 6:
    {
    if(get_user_flags(id) & ADMIN_KICK)
    {
    client_cmd(id, "amx_teammenu");
    return PLUGIN_HANDLED;
    }
    else
    {
    client_print(id, print_chat, "* Только Админ может пользоваться этой командой! *");
    client_cmd(id, "spk buttons/blip2.wav");
    return PLUGIN_HANDLED;
        }
    }
    case 8:
    {
    return Show_ServerMenu(id);
    }
    case 9:
    {
    return PLUGIN_HANDLED;
        }
    }
    return Show_AdminMenu(id);
}

Show_KnifeMenu(id)
{
    // knife menu
    new szMenu[512]
    new iLen = 0
    iLen = format(szMenu[iLen], 511, "\yНожевой Набор^n^n")
    if(KnifeId[id] == 1)
    {
    iLen += format(szMenu[iLen], 511 - iLen, "\r[1]\d Bayonet Autotronic \r[+]^n");
    }
    else
    {
    iLen += format(szMenu[iLen], 511 - iLen, "\r[1]\w Bayonet Autotronic^n");
    }
    if(KnifeId[id] == 2)
    {
    iLen += format(szMenu[iLen], 511 - iLen, "\r[2]\d Falchion Slaughter \r[+]^n");
    }
    else
    {
    iLen += format(szMenu[iLen], 511 - iLen, "\r[2]\w Falchion Slaughter^n");
    }
    if(KnifeId[id] == 3)
    {
    iLen += format(szMenu[iLen], 511 - iLen, "\r[3]\d Gut Case Hardened \r[+]^n");
    }
    else
    {
    iLen += format(szMenu[iLen], 511 - iLen, "\r[3]\w Gut Case Hardened^n");
    }
    if(KnifeId[id] == 4)
    {
    iLen += format(szMenu[iLen], 511 - iLen, "\r[4]\d Karambit Waves \r[+]^n");
    }
    else
    {
    iLen += format(szMenu[iLen], 511 - iLen, "\r[4]\w Karambit Waves^n");
    }
    if(KnifeId[id] == 5)
    {
    iLen += format(szMenu[iLen], 511 - iLen, "\r[5]\d M9 Bayonet Sapphire \r[+]^n");
    }
    else
    {
    iLen += format(szMenu[iLen], 511 - iLen, "\r[5]\w M9 Bayonet Sapphire^n");
    }
    if(KnifeId[id] == 6)
    {
    iLen += format(szMenu[iLen], 511 - iLen, "\r[6]\d Butterfly Fade \r[+]^n");
    }
    else
    {
    iLen += format(szMenu[iLen], 511 - iLen, "\r[6]\w Butterfly Fade^n");
    }
    if(KnifeId[id] == 7)
    {
    iLen += format(szMenu[iLen], 511 - iLen, "\r[7]\d Stiletto Crimson Web \r[+]^n^n");
    }
    else
    {
    iLen += format(szMenu[iLen], 511 - iLen, "\r[7]\w Stiletto Crimson Web^n^n");
    }
    if(KnifeId[id] == 8)
    {
    iLen += format(szMenu[iLen], 511 - iLen, "\r[8]\d Стандарт \r[+]^n^n");
    }
    else
    {
    iLen += format(szMenu[iLen], 511 - iLen, "\r[8]\w Стандарт^n^n");
    }
    iLen += format(szMenu[iLen], 511 - iLen, "\r[9]\w Назад^n");
    iLen += format(szMenu[iLen], 511 - iLen, "\r[0]\w Выход^n");
    return show_menu(id, keys, szMenu, -1, "Show_KnifeMenu");
}

public Handle_KnifeMenu(id, iKey)
{
switch(iKey)
{
    case 0:
    {
    if(KnifeId[id] == 1)
    {
    client_print(id, print_chat, "* У вас уже выбран этот Нож! *");
    return PLUGIN_HANDLED;
    }
    else
    {
    KnifeId[id] = 1
    give_item1(id)
    client_print(id, print_chat, "* Вы взяли Нож Bayonet Autotronic *");
    return PLUGIN_HANDLED;
        }
    }
    case 1:
    {
    if(KnifeId[id] == 2)
    {
    client_print(id, print_chat, "* У вас уже выбран этот Нож! *");
    return PLUGIN_HANDLED;
    }
    else
    {
    KnifeId[id] = 2
    give_item2(id)
    client_print(id, print_chat, "* Вы взяли Нож Falchion Slaughter *");
    return PLUGIN_HANDLED;
        }
    }
    case 2:
    {
    if(KnifeId[id] == 3)
    {
    client_print(id, print_chat, "* У вас уже выбран этот Нож! *");
    return PLUGIN_HANDLED;
    }
    else
    {
    KnifeId[id] = 3
    give_item3(id)
    client_print(id, print_chat, "* Вы взяли Нож Gut Case Hardened *");
    return PLUGIN_HANDLED;
        }
    }
    case 3:
    {
    if(KnifeId[id] == 4)
    {
    client_print(id, print_chat, "* У вас уже выбран этот Нож! *");
    return PLUGIN_HANDLED;
    }
    else
    {
    KnifeId[id] = 4
    give_item4(id)
    client_print(id, print_chat, "* Вы взяли Нож Karambit Waves *");
    return PLUGIN_HANDLED;
        }
    }
    case 4:
    {
    if(KnifeId[id] == 5)
    {
    client_print(id, print_chat, "* У вас уже выбран этот Нож! *");
    return PLUGIN_HANDLED;
    }
    else
    {
    KnifeId[id] = 5
    give_item5(id)
    client_print(id, print_chat, "* Вы взяли Нож M9 Bayonet Sapphire *");
    return PLUGIN_HANDLED;
        }
    }
    case 5:
    {
    if(KnifeId[id] == 6)
    {
    client_print(id, print_chat, "* У вас уже выбран этот Нож! *");
    return PLUGIN_HANDLED;
    }
    else
    {
    KnifeId[id] = 6
    give_item6(id)
    client_print(id, print_chat, "* Вы взяли Нож Butterfly Fade *");
    return PLUGIN_HANDLED;
        }
    }
    case 6:
    {
    if(KnifeId[id] == 7)
    {
    client_print(id, print_chat, "* У вас уже выбран этот Нож! *");
    return PLUGIN_HANDLED;
    }
    else
    {
    KnifeId[id] = 7
    give_item7(id)
    client_print(id, print_chat, "* Вы взяли Нож Stiletto Crimson Web *");
    return PLUGIN_HANDLED;
        }
    }
    case 7:
    {
    if(KnifeId[id] == 8)
    {
    client_print(id, print_chat, "* У вас уже выбран этот Нож! *");
    return PLUGIN_HANDLED;
    }   
    if(get_user_team(id) == 1)
    {
    KnifeId[id] = 8
    give_item8(id)
    client_print(id, print_chat, "* Вы взяли Стандартный Нож*");
    return PLUGIN_HANDLED;
    }
    else
    {
    KnifeId[id] = 8
    give_item8(id)
    client_print(id, print_chat, "* Вы взяли Стандартный Нож *");
    return PLUGIN_HANDLED;
        }
    }
    case 8:
    {
    return Show_ShopMenu(id);
    }
    case 9:
    {
    return PLUGIN_HANDLED;
        }
    }
    return Show_KnifeMenu(id);
}

public give_item1(id)
{
    if(get_user_weapon(id) != CSW_KNIFE)
    return
    
    if(KnifeId[id] == 1)
    {
        set_pev(id, pev_viewmodel2, KNIFE_V_MODEL1)
        set_pev(id, pev_weaponmodel2, KNIFE_P_MODEL1)
    }
}

public give_item2(id)
{
    if(get_user_weapon(id) != CSW_KNIFE)
    return
    
    if(KnifeId[id] == 2)
    {
        set_pev(id, pev_viewmodel2, KNIFE_V_MODEL2)
        set_pev(id, pev_weaponmodel2, KNIFE_P_MODEL2)
    }
}

public give_item3(id)
{
    if(get_user_weapon(id) != CSW_KNIFE)
    return
    
    if(KnifeId[id] == 3)
    {
        set_pev(id, pev_viewmodel2, KNIFE_V_MODEL3)
        set_pev(id, pev_weaponmodel2, KNIFE_P_MODEL3)
    }
}

public give_item4(id)
{
    if(get_user_weapon(id) != CSW_KNIFE)
    return
    
    if(KnifeId[id] == 4)
    {
        set_pev(id, pev_viewmodel2, KNIFE_V_MODEL4)
        set_pev(id, pev_weaponmodel2, KNIFE_P_MODEL4)
    }
}

public give_item5(id)
{
if(get_user_weapon(id) != CSW_KNIFE)
    return
    
    if(KnifeId[id] == 5)
    {
        set_pev(id, pev_viewmodel2, KNIFE_V_MODEL5)
        set_pev(id, pev_weaponmodel2, KNIFE_P_MODEL5)
    }
}
public give_item6(id)
{
    if(get_user_weapon(id) != CSW_KNIFE)
        return
    
    if(KnifeId[id] == 6)
    {
        set_pev(id, pev_viewmodel2, KNIFE_V_MODEL6)
        set_pev(id, pev_weaponmodel2, KNIFE_P_MODEL6)
    }
}
public give_item7(id)
{
    if(get_user_weapon(id) != CSW_KNIFE)
        return
    
    if(KnifeId[id] == 7)
    {
        set_pev(id, pev_viewmodel2, KNIFE_V_MODEL7)
        set_pev(id, pev_weaponmodel2, KNIFE_P_MODEL7)
    }
}
public give_item8(id)
{
    if(get_user_weapon(id) != CSW_KNIFE)
        return
    
    if(KnifeId[id] == 8)
    {
        if(get_user_team(id) == 1)
        {
            set_pev(id, pev_viewmodel2, KNIFE_V_MODEL9)
            set_pev(id, pev_weaponmodel2, KNIFE_P_MODEL9)
            }
        else
        {
            set_pev(id, pev_viewmodel2, KNIFE_V_MODEL8)
            set_pev(id, pev_weaponmodel2, KNIFE_P_MODEL8)
        }
    }
}

public Fw_Weapon_PrimaryAttack(weapon)
{
    static id;
    id = get_pdata_cbase(weapon, m_pPlayer, XoWeapon);
    
    if(!is_user_alive(id))
        return
    
    new wpn_id = get_user_weapon(id);
    static model[32];
    pev(id, pev_viewmodel2, model, 31);
        switch(wpn_id)
        {
            case CSW_DEAGLE:
                g_deagle_overide[id] = 1;
            case CSW_AWP, CSW_SCOUT, CSW_M3:
                set_pdata_float(weapon, m_flTimeWeaponIdle, 1.5, XoWeapon);
            case CSW_KNIFE:
                set_pdata_float(weapon, m_flTimeWeaponIdle, 1.0, XoWeapon);
            default:
                set_pdata_float(weapon, m_flTimeWeaponIdle, 2.0, XoWeapon);
    }
}

public Fw_Weapon_SecondaryAttack(weapon)
{
    static id;
    id = get_pdata_cbase(weapon, m_pPlayer, XoWeapon);
    new wpn_id = get_user_weapon(id);
    
    if(wpns_scoped & (1 << wpn_id) && cs_get_user_zoom(id) <= 1)
    {
        set_pev(id, pev_weaponanim, 0);
    
        message_begin(MSG_ONE_UNRELIABLE, SVC_WEAPONANIM, {0, 0, 0}, id);
        write_byte(0);
        write_byte(pev(id, pev_body));
        message_end();
    }
}

public Fw_Deagle_Disable(weapon)
{
    static id;
    id = get_pdata_cbase(weapon, m_pPlayer, XoWeapon);
    remove_task(id)
}

public Deagle_Overide(id)
    g_deagle_overide[id] = 1;

public Inspect_Weapon(id)
{
    if(!is_user_alive(id) || !is_user_connected(id))
        return PLUGIN_HANDLED
        
    if(cs_get_user_shield(id))
        return PLUGIN_HANDLED
        
    if(cs_get_user_zoom(id) > 1)
        return PLUGIN_HANDLED

    static weapon; weapon = get_pdata_cbase(id, m_pActiveItem);

    if(weapon <= 0 || !pev_valid(weapon))
        return PLUGIN_CONTINUE

    new wpn_id = get_pdata_int(weapon, m_iId, 4);

    if(wpns_without_inspect & (1 << wpn_id))
        return PLUGIN_HANDLED

    
    static Float:flNextAttack; flNextAttack = get_pdata_float(id, m_flNextAttack, XoPlayer);
    static Float:flNextPrimaryAttack; flNextPrimaryAttack = get_pdata_float(weapon, m_flNextPrimaryAttack, XoWeapon);

    if(flNextAttack <= 0 && flNextPrimaryAttack <= 0)
    {   
        static model[32]; pev(id, pev_viewmodel2, model, 31);
            
            new anim = inspect_anim[wpn_id];
            new current_anim = pev(get_pdata_cbase(weapon, m_pPlayer, XoWeapon), pev_weaponanim);

            switch (wpn_id)
            {
                case CSW_USP: if(cs_get_weapon_silen(weapon)) anim = 17;
                case CSW_M4A1:if(cs_get_weapon_silen(weapon)) anim = 14;
                case CSW_DEAGLE: // random inspect (seq 6 / 7)
                {
                    if(wpn_id == CSW_DEAGLE && g_deagle_overide[id] == 1)
                    {
                        anim = random_num(6, 7);

                        new Float:f_temp;
                        if(anim == 7) f_temp = 8.53;
                        else f_temp = idle_calltime[CSW_DEAGLE]
                        
                        play_inspect(id, anim);
                        remove_task(id);
                        g_deagle_overide[id] = 0;
                        set_task(f_temp, "Deagle_Overide", id);
                        return PLUGIN_CONTINUE
                    }
                }
            }
            
            if(wpn_id == CSW_KNIFE && (current_anim == 8))
                return PLUGIN_HANDLED
            
            if(!get_pdata_int(weapon, m_fInSpecialReload, 4) && current_anim != anim)
            {
                play_inspect(id, anim);
                set_pdata_float(weapon, m_flTimeWeaponIdle, idle_calltime[wpn_id], XoWeapon);
                
            }
        }
    
    return PLUGIN_CONTINUE
}

// gets a player id that triggered certain logevents, by VEN
stock get_loguser_index()
{
    static loguser[80], name[32]
    read_logargv(0, loguser, charsmax(loguser))
    parse_loguser(loguser, name, charsmax(name))

    return get_user_index(name)
}

stock format_color(message[], msglen)
{
    new string[256], len = charsmax(string);

    copy(string, len, message);

    replace_all(string, len, "!n", "^1");
    replace_all(string, len, "!t", "^3");
    replace_all(string, len, "!g", "^4");

    formatex(message, msglen, "^1%s", string);
}

play_inspect(id, anim)
{
    set_pev(id, pev_weaponanim, anim);
    
    message_begin(MSG_ONE_UNRELIABLE, SVC_WEAPONANIM, {0, 0, 0}, id);
    write_byte(anim);
    write_byte(pev(id, pev_body));
    message_end();   
}

SendMsg(id, const MSG[], any:...)
{
    new szMsg[190]; vformat(szMsg, charsmax(szMsg), MSG, 3);
    message_begin(MSG_ONE_UNRELIABLE, 76, .player = id);
    write_byte(id);
    write_string(szMsg);
    message_end();
}
 

Top4ik

Пользователь
Регистрация
10 Фев 2020
Сообщения
54
Симпатии
4
Нашел это строчку в исходнике csgo_weapons.sma
Код:
// #define DONT_BLOCK_PRECACHE

#include <amxmodx>
#include <fakemeta_stocks>
#include <hamsandwich>

#pragma semicolon 1

const MAX_MODEL_LENGTH = 64;

new const m_rgpPlayerItems_CBasePlayer[6] = {367, 368, ...};
const m_pActiveItem = 373;

const XO_WEAPON = 4;
const m_pPlayer = 41;

new Trie:g_tszWorldModels; // handles new models strings (all excepted v_ and w_ models)
new Trie:g_tiPrecacheReturns; // handles all new models precache returns integers
new Trie:g_tiszViewModels;
new Trie:g_tiszWeaponModels;

public plugin_precache()
{
    new szModelsFile[128];
    get_localinfo("amxx_configsdir", szModelsFile, charsmax(szModelsFile));
    add(szModelsFile, charsmax(szModelsFile), "/csgo/csgo_weapons.ini");

    new iFile = fopen(szModelsFile, "rt");
    if(!iFile)
    {
        return;
    }

    new szDatas[192], szOldModel[MAX_MODEL_LENGTH], szNewModel[MAX_MODEL_LENGTH];
    new szWeaponClass[32], Trie:tRegisterWeaponDeploy = TrieCreate(), iId;

    new Trie:tWeaponsIds = TrieCreate();
    TrieSetCell(tWeaponsIds, "p228", CSW_P228);
    TrieSetCell(tWeaponsIds, "scout", CSW_SCOUT);
    TrieSetCell(tWeaponsIds, "hegrenade", CSW_HEGRENADE);
    TrieSetCell(tWeaponsIds, "xm1014", CSW_XM1014);
    TrieSetCell(tWeaponsIds, "c4", CSW_C4);
    TrieSetCell(tWeaponsIds, "mac10", CSW_MAC10);
    TrieSetCell(tWeaponsIds, "aug", CSW_AUG);
    TrieSetCell(tWeaponsIds, "smokegrenade", CSW_SMOKEGRENADE);
    TrieSetCell(tWeaponsIds, "elite", CSW_ELITE);
    TrieSetCell(tWeaponsIds, "fiveseven", CSW_FIVESEVEN);
    TrieSetCell(tWeaponsIds, "ump45", CSW_UMP45);
    TrieSetCell(tWeaponsIds, "sg550", CSW_SG550);
    TrieSetCell(tWeaponsIds, "galil", CSW_GALIL);
    TrieSetCell(tWeaponsIds, "famas", CSW_FAMAS);
    TrieSetCell(tWeaponsIds, "usp", CSW_USP);
    TrieSetCell(tWeaponsIds, "glock18", CSW_GLOCK18);
    TrieSetCell(tWeaponsIds, "awp", CSW_AWP);
    TrieSetCell(tWeaponsIds, "mp5navy", CSW_MP5NAVY);
    TrieSetCell(tWeaponsIds, "m249", CSW_M249);
    TrieSetCell(tWeaponsIds, "m3", CSW_M3);
    TrieSetCell(tWeaponsIds, "m4a1", CSW_M4A1);
    TrieSetCell(tWeaponsIds, "tmp", CSW_TMP);
    TrieSetCell(tWeaponsIds, "g3sg1", CSW_G3SG1);
    TrieSetCell(tWeaponsIds, "flashbang", CSW_FLASHBANG);
    TrieSetCell(tWeaponsIds, "deagle", CSW_DEAGLE);
    TrieSetCell(tWeaponsIds, "sg552", CSW_SG552);
    TrieSetCell(tWeaponsIds, "ak47", CSW_AK47);
    TrieSetCell(tWeaponsIds, "knife", CSW_KNIFE);
    TrieSetCell(tWeaponsIds, "p90", CSW_P90);

    new c, bool:bServerDeactivateRegistered, iExtPos, bShieldModel;
    while(!feof(iFile))
    {
        fgets(iFile, szDatas, charsmax(szDatas));
        trim(szDatas);
        if(!(c=szDatas[0]) || c == ';' || c == '#' || (c == '/' && szDatas[1] == '/'))
        {
            continue;
        }

        if(        parse(szDatas, szOldModel, charsmax(szOldModel), szNewModel, charsmax(szNewModel)) == 2
        &&    file_exists(szNewModel)    )
        {
            // models/[p/v]_
            // models/shield/[p/v]_shield_
            bShieldModel = equal(szOldModel, "models/shield/", 14);
            if( ( (c=szOldModel[bShieldModel ? 14 : 7]) == 'p' || c == 'v' ) && szOldModel[bShieldModel ? 15 : 8] == '_' )
            {
                if( equal(szOldModel[9], "mp5", 3 ) )
                {
                    copy(szWeaponClass, charsmax(szWeaponClass), "weapon_mp5navy");
                }
                else
                {
                    iExtPos = strlen(szOldModel) - 4;
                    szOldModel[ iExtPos ] = EOS;
                    formatex(szWeaponClass, charsmax(szWeaponClass), "weapon_%s", szOldModel[bShieldModel ? 23 : 9]);
                    szOldModel[ iExtPos ] = '.';
                }
                
                if( !TrieGetCell(tWeaponsIds, szWeaponClass[7], iId) )
                {
                    continue;
                }

                if( c == 'v' )
                {
                    if( !g_tiszViewModels )
                    {
                        g_tiszViewModels = TrieCreate();
                    }

                    TrieSetCell(g_tiszViewModels, szOldModel, EF_AllocString( szNewModel ) );
                }
                else
                {
                    if( !g_tiszWeaponModels )
                    {
                        g_tiszWeaponModels = TrieCreate();
                    }
                    
                    TrieSetCell(g_tiszWeaponModels, szOldModel, EF_AllocString( szNewModel ) );
                }
                
                if( !TrieKeyExists(tRegisterWeaponDeploy, szWeaponClass) )
                {
                    TrieSetCell
                    (
                        tRegisterWeaponDeploy,
                        szWeaponClass,
                        RegisterHam(Ham_Item_Deploy, szWeaponClass, "OnCBasePlayerWeapon_Deploy_P", true)
                    );
                }
            }
            else
            {
                if( !bServerDeactivateRegistered && equal(szOldModel, "models/w_backpack.mdl") )
                {
                    bServerDeactivateRegistered = true;
                    register_forward(FM_ServerDeactivate, "OnServerDeactivate");
                }

                if( !g_tszWorldModels )
                {
                    g_tszWorldModels = TrieCreate();
                }
                else if( TrieKeyExists(g_tszWorldModels, szOldModel) )
                {
                    new szModel[MAX_MODEL_LENGTH];
                    TrieGetString(g_tszWorldModels, szOldModel, szModel, charsmax(szModel));
                    log_amx("%s world model is already set to %s, can't set it to %s !!", szWeaponClass, szModel, szNewModel);
                    continue;
                }
                TrieSetString(g_tszWorldModels, szOldModel, szNewModel);
            }

            if( !g_tiPrecacheReturns )
            {
                g_tiPrecacheReturns = TrieCreate();
            }
            TrieSetCell(g_tiPrecacheReturns, szOldModel, EF_PrecacheModel(szNewModel));
#if defined DONT_BLOCK_PRECACHE
            EF_PrecacheModel(szOldModel);
#endif
        }
    }
    fclose(iFile);

    TrieDestroy(tRegisterWeaponDeploy);
    TrieDestroy(tWeaponsIds);

    if( g_tiPrecacheReturns )
    {
        register_forward(FM_PrecacheModel, "OnPrecacheModel");

        if( g_tszWorldModels )
        {
            register_forward(FM_SetModel, "OnSetModel");
        }
    }
}

public plugin_init()
{
    register_plugin("[CS:GO MOD] Weapons Replace", "1.2", "ConnorMcLeod");
}

public OnServerDeactivate()
{
    static bool:bDontPassThisTwice = false;
    if( bDontPassThisTwice ) // unregister this would be waste of time
    {
        return;
    }
    bDontPassThisTwice = true;

    new id, c4 = FM_NULLENT;
    while( (c4 = EF_FindEntityByString(c4, "classname", "weapon_c4")) > 0 )
    {
        id = get_pdata_cbase(c4, m_pPlayer);
        if( id > 0 )
        {
            // can't use set_pdata_cbase on players at this point
            set_pdata_int(id, m_rgpPlayerItems_CBasePlayer[5], 0);
            set_pdata_int(id, m_pActiveItem, 0);
            // tried to remove c4 entity but server just stucks
        }
    }
}

public OnPrecacheModel(const szModel[])
{
    static iReturn;
    if( TrieGetCell(g_tiPrecacheReturns, szModel, iReturn) )
    {
        forward_return(FMV_CELL, iReturn);
        return FMRES_SUPERCEDE;
    }
    return FMRES_IGNORED;
}

public OnCBasePlayerWeapon_Deploy_P( iWeapon )
{
    new id = get_pdata_cbase(iWeapon, m_pPlayer, XO_WEAPON);
    if( pev_valid(id) == 2 && get_pdata_cbase(id, m_pActiveItem) == iWeapon )
    {
        new iszNewModel, szOldModel[MAX_MODEL_LENGTH];
        if( g_tiszViewModels )
        {
            pev(id, pev_viewmodel2, szOldModel, charsmax(szOldModel));
            if( TrieGetCell(g_tiszViewModels, szOldModel, iszNewModel) )
            {
                set_pev(id, pev_viewmodel, iszNewModel);
            }
        }
        if( g_tiszWeaponModels )
        {
            pev(id, pev_weaponmodel2, szOldModel, charsmax(szOldModel));
            if( TrieGetCell(g_tiszWeaponModels, szOldModel, iszNewModel) )
            {
                set_pev(id, pev_weaponmodel, iszNewModel);
            }
        }
    }
}

public OnSetModel(const iEnt, const szModel[])
{
    new szNewModel[MAX_MODEL_LENGTH];
    if( TrieGetString(g_tszWorldModels, szModel, szNewModel, charsmax(szNewModel)) )
    {
        EF_SetModel(iEnt, szNewModel);
        return FMRES_SUPERCEDE;
    }
    return FMRES_IGNORED;
}
if( !bServerDeactivateRegistered && equal(szOldModel, "models/w_backpack.mdl") )
Как быть как исправить эту проблему?
 

perfectblood0

Команда форума
Администратор
Регистрация
29 Окт 2017
Сообщения
2.578
Симпатии
914
Пол
Женский
Нашел это строчку в исходнике csgo_weapons.sma
Код:
// #define DONT_BLOCK_PRECACHE

#include <amxmodx>
#include <fakemeta_stocks>
#include <hamsandwich>

#pragma semicolon 1

const MAX_MODEL_LENGTH = 64;

new const m_rgpPlayerItems_CBasePlayer[6] = {367, 368, ...};
const m_pActiveItem = 373;

const XO_WEAPON = 4;
const m_pPlayer = 41;

new Trie:g_tszWorldModels; // handles new models strings (all excepted v_ and w_ models)
new Trie:g_tiPrecacheReturns; // handles all new models precache returns integers
new Trie:g_tiszViewModels;
new Trie:g_tiszWeaponModels;

public plugin_precache()
{
    new szModelsFile[128];
    get_localinfo("amxx_configsdir", szModelsFile, charsmax(szModelsFile));
    add(szModelsFile, charsmax(szModelsFile), "/csgo/csgo_weapons.ini");

    new iFile = fopen(szModelsFile, "rt");
    if(!iFile)
    {
        return;
    }

    new szDatas[192], szOldModel[MAX_MODEL_LENGTH], szNewModel[MAX_MODEL_LENGTH];
    new szWeaponClass[32], Trie:tRegisterWeaponDeploy = TrieCreate(), iId;

    new Trie:tWeaponsIds = TrieCreate();
    TrieSetCell(tWeaponsIds, "p228", CSW_P228);
    TrieSetCell(tWeaponsIds, "scout", CSW_SCOUT);
    TrieSetCell(tWeaponsIds, "hegrenade", CSW_HEGRENADE);
    TrieSetCell(tWeaponsIds, "xm1014", CSW_XM1014);
    TrieSetCell(tWeaponsIds, "c4", CSW_C4);
    TrieSetCell(tWeaponsIds, "mac10", CSW_MAC10);
    TrieSetCell(tWeaponsIds, "aug", CSW_AUG);
    TrieSetCell(tWeaponsIds, "smokegrenade", CSW_SMOKEGRENADE);
    TrieSetCell(tWeaponsIds, "elite", CSW_ELITE);
    TrieSetCell(tWeaponsIds, "fiveseven", CSW_FIVESEVEN);
    TrieSetCell(tWeaponsIds, "ump45", CSW_UMP45);
    TrieSetCell(tWeaponsIds, "sg550", CSW_SG550);
    TrieSetCell(tWeaponsIds, "galil", CSW_GALIL);
    TrieSetCell(tWeaponsIds, "famas", CSW_FAMAS);
    TrieSetCell(tWeaponsIds, "usp", CSW_USP);
    TrieSetCell(tWeaponsIds, "glock18", CSW_GLOCK18);
    TrieSetCell(tWeaponsIds, "awp", CSW_AWP);
    TrieSetCell(tWeaponsIds, "mp5navy", CSW_MP5NAVY);
    TrieSetCell(tWeaponsIds, "m249", CSW_M249);
    TrieSetCell(tWeaponsIds, "m3", CSW_M3);
    TrieSetCell(tWeaponsIds, "m4a1", CSW_M4A1);
    TrieSetCell(tWeaponsIds, "tmp", CSW_TMP);
    TrieSetCell(tWeaponsIds, "g3sg1", CSW_G3SG1);
    TrieSetCell(tWeaponsIds, "flashbang", CSW_FLASHBANG);
    TrieSetCell(tWeaponsIds, "deagle", CSW_DEAGLE);
    TrieSetCell(tWeaponsIds, "sg552", CSW_SG552);
    TrieSetCell(tWeaponsIds, "ak47", CSW_AK47);
    TrieSetCell(tWeaponsIds, "knife", CSW_KNIFE);
    TrieSetCell(tWeaponsIds, "p90", CSW_P90);

    new c, bool:bServerDeactivateRegistered, iExtPos, bShieldModel;
    while(!feof(iFile))
    {
        fgets(iFile, szDatas, charsmax(szDatas));
        trim(szDatas);
        if(!(c=szDatas[0]) || c == ';' || c == '#' || (c == '/' && szDatas[1] == '/'))
        {
            continue;
        }

        if(        parse(szDatas, szOldModel, charsmax(szOldModel), szNewModel, charsmax(szNewModel)) == 2
        &&    file_exists(szNewModel)    )
        {
            // models/[p/v]_
            // models/shield/[p/v]_shield_
            bShieldModel = equal(szOldModel, "models/shield/", 14);
            if( ( (c=szOldModel[bShieldModel ? 14 : 7]) == 'p' || c == 'v' ) && szOldModel[bShieldModel ? 15 : 8] == '_' )
            {
                if( equal(szOldModel[9], "mp5", 3 ) )
                {
                    copy(szWeaponClass, charsmax(szWeaponClass), "weapon_mp5navy");
                }
                else
                {
                    iExtPos = strlen(szOldModel) - 4;
                    szOldModel[ iExtPos ] = EOS;
                    formatex(szWeaponClass, charsmax(szWeaponClass), "weapon_%s", szOldModel[bShieldModel ? 23 : 9]);
                    szOldModel[ iExtPos ] = '.';
                }
                
                if( !TrieGetCell(tWeaponsIds, szWeaponClass[7], iId) )
                {
                    continue;
                }

                if( c == 'v' )
                {
                    if( !g_tiszViewModels )
                    {
                        g_tiszViewModels = TrieCreate();
                    }

                    TrieSetCell(g_tiszViewModels, szOldModel, EF_AllocString( szNewModel ) );
                }
                else
                {
                    if( !g_tiszWeaponModels )
                    {
                        g_tiszWeaponModels = TrieCreate();
                    }
                    
                    TrieSetCell(g_tiszWeaponModels, szOldModel, EF_AllocString( szNewModel ) );
                }
                
                if( !TrieKeyExists(tRegisterWeaponDeploy, szWeaponClass) )
                {
                    TrieSetCell
                    (
                        tRegisterWeaponDeploy,
                        szWeaponClass,
                        RegisterHam(Ham_Item_Deploy, szWeaponClass, "OnCBasePlayerWeapon_Deploy_P", true)
                    );
                }
            }
            else
            {
                if( !bServerDeactivateRegistered && equal(szOldModel, "models/w_backpack.mdl") )
                {
                    bServerDeactivateRegistered = true;
                    register_forward(FM_ServerDeactivate, "OnServerDeactivate");
                }

                if( !g_tszWorldModels )
                {
                    g_tszWorldModels = TrieCreate();
                }
                else if( TrieKeyExists(g_tszWorldModels, szOldModel) )
                {
                    new szModel[MAX_MODEL_LENGTH];
                    TrieGetString(g_tszWorldModels, szOldModel, szModel, charsmax(szModel));
                    log_amx("%s world model is already set to %s, can't set it to %s !!", szWeaponClass, szModel, szNewModel);
                    continue;
                }
                TrieSetString(g_tszWorldModels, szOldModel, szNewModel);
            }

            if( !g_tiPrecacheReturns )
            {
                g_tiPrecacheReturns = TrieCreate();
            }
            TrieSetCell(g_tiPrecacheReturns, szOldModel, EF_PrecacheModel(szNewModel));
#if defined DONT_BLOCK_PRECACHE
            EF_PrecacheModel(szOldModel);
#endif
        }
    }
    fclose(iFile);

    TrieDestroy(tRegisterWeaponDeploy);
    TrieDestroy(tWeaponsIds);

    if( g_tiPrecacheReturns )
    {
        register_forward(FM_PrecacheModel, "OnPrecacheModel");

        if( g_tszWorldModels )
        {
            register_forward(FM_SetModel, "OnSetModel");
        }
    }
}

public plugin_init()
{
    register_plugin("[CS:GO MOD] Weapons Replace", "1.2", "ConnorMcLeod");
}

public OnServerDeactivate()
{
    static bool:bDontPassThisTwice = false;
    if( bDontPassThisTwice ) // unregister this would be waste of time
    {
        return;
    }
    bDontPassThisTwice = true;

    new id, c4 = FM_NULLENT;
    while( (c4 = EF_FindEntityByString(c4, "classname", "weapon_c4")) > 0 )
    {
        id = get_pdata_cbase(c4, m_pPlayer);
        if( id > 0 )
        {
            // can't use set_pdata_cbase on players at this point
            set_pdata_int(id, m_rgpPlayerItems_CBasePlayer[5], 0);
            set_pdata_int(id, m_pActiveItem, 0);
            // tried to remove c4 entity but server just stucks
        }
    }
}

public OnPrecacheModel(const szModel[])
{
    static iReturn;
    if( TrieGetCell(g_tiPrecacheReturns, szModel, iReturn) )
    {
        forward_return(FMV_CELL, iReturn);
        return FMRES_SUPERCEDE;
    }
    return FMRES_IGNORED;
}

public OnCBasePlayerWeapon_Deploy_P( iWeapon )
{
    new id = get_pdata_cbase(iWeapon, m_pPlayer, XO_WEAPON);
    if( pev_valid(id) == 2 && get_pdata_cbase(id, m_pActiveItem) == iWeapon )
    {
        new iszNewModel, szOldModel[MAX_MODEL_LENGTH];
        if( g_tiszViewModels )
        {
            pev(id, pev_viewmodel2, szOldModel, charsmax(szOldModel));
            if( TrieGetCell(g_tiszViewModels, szOldModel, iszNewModel) )
            {
                set_pev(id, pev_viewmodel, iszNewModel);
            }
        }
        if( g_tiszWeaponModels )
        {
            pev(id, pev_weaponmodel2, szOldModel, charsmax(szOldModel));
            if( TrieGetCell(g_tiszWeaponModels, szOldModel, iszNewModel) )
            {
                set_pev(id, pev_weaponmodel, iszNewModel);
            }
        }
    }
}

public OnSetModel(const iEnt, const szModel[])
{
    new szNewModel[MAX_MODEL_LENGTH];
    if( TrieGetString(g_tszWorldModels, szModel, szNewModel, charsmax(szNewModel)) )
    {
        EF_SetModel(iEnt, szNewModel);
        return FMRES_SUPERCEDE;
    }
    return FMRES_IGNORED;
}

Как быть как исправить эту проблему?
Скачать какую нибудь модель бомбы и закинуть её по этому пути.
 

Vaqtincha

aggressive
Разработчик
Скриптер
Регистрация
28 Янв 2018
Сообщения
962
Симпатии
684
Пол
Мужской
Top4ik, Раскомментируй первую строку либо добавь исключение эту модельку (в функции OnPrecscheModel l
perfectblood0, Моделька дефольная и она присутствует. Просто на этом плагине встроен свой антипрекешер
Судя по коду автор плагина (а он кстати вдохновил своим скиллом кодинга) пытался это исправить. Но я думаю ради одной модельки того не стоит.
 
Последнее редактирование:

Top4ik

Пользователь
Регистрация
10 Фев 2020
Сообщения
54
Симпатии
4
Скачать какую нибудь модель бомбы и закинуть её по этому пути.
Сделал так же,проблема не ушла(
Top4ik, Раскомментируй первую строку либо добавь исключение эту модельку (в функции OnPrecscheModel l
perfectblood0, Моделька дефольная и она присутствует. Просто на этом плагине встроен свой антипрекешер
Судя по коду автор плагина (а он кстати вдохновил своим скиллом кодинга) пытался это исправить. Но я думаю ради одной модельки того не стоит.
Подскажите более подробно пожалуйста,как это сделать,в скриптинге я полный нуль!
Top4ik, Раскомментируй первую строку либо добавь исключение эту модельку (в функции OnPrecscheModel l
perfectblood0, Моделька дефольная и она присутствует. Просто на этом плагине встроен свой антипрекешер
Судя по коду автор плагина (а он кстати вдохновил своим скиллом кодинга) пытался это исправить. Но я думаю ради одной модельки того не стоит.
а как же тогда решить эту проблему,сервер падает постоянно,я не знаю как быть уже
 

Vaqtincha

aggressive
Разработчик
Скриптер
Регистрация
28 Янв 2018
Сообщения
962
Симпатии
684
Пол
Мужской
Top4ik,
C++:
// #define DONT_BLOCK_PRECACHE

#include <amxmodx>
#include <fakemeta_stocks>
#include <hamsandwich>

#pragma semicolon 1

const MAX_MODEL_LENGTH = 64;

const m_pActiveItem = 373;

const XO_WEAPON = 4;
const m_pPlayer = 41;

new Trie:g_tszWorldModels; // handles new models strings (all excepted v_ and w_ models)
new Trie:g_tiPrecacheReturns; // handles all new models precache returns integers
new Trie:g_tiszViewModels;
new Trie:g_tiszWeaponModels;

public plugin_precache()
{
    new szModelsFile[128];
    get_localinfo("amxx_configsdir", szModelsFile, charsmax(szModelsFile));
    add(szModelsFile, charsmax(szModelsFile), "/csgo/csgo_weapons.ini");

    new iFile = fopen(szModelsFile, "rt");
    if(!iFile)
    {
        return;
    }

    new szDatas[192], szOldModel[MAX_MODEL_LENGTH], szNewModel[MAX_MODEL_LENGTH];
    new szWeaponClass[32], Trie:tRegisterWeaponDeploy = TrieCreate(), iId;

    new Trie:tWeaponsIds = TrieCreate();
    TrieSetCell(tWeaponsIds, "p228", CSW_P228);
    TrieSetCell(tWeaponsIds, "scout", CSW_SCOUT);
    TrieSetCell(tWeaponsIds, "hegrenade", CSW_HEGRENADE);
    TrieSetCell(tWeaponsIds, "xm1014", CSW_XM1014);
    TrieSetCell(tWeaponsIds, "c4", CSW_C4);
    TrieSetCell(tWeaponsIds, "mac10", CSW_MAC10);
    TrieSetCell(tWeaponsIds, "aug", CSW_AUG);
    TrieSetCell(tWeaponsIds, "smokegrenade", CSW_SMOKEGRENADE);
    TrieSetCell(tWeaponsIds, "elite", CSW_ELITE);
    TrieSetCell(tWeaponsIds, "fiveseven", CSW_FIVESEVEN);
    TrieSetCell(tWeaponsIds, "ump45", CSW_UMP45);
    TrieSetCell(tWeaponsIds, "sg550", CSW_SG550);
    TrieSetCell(tWeaponsIds, "galil", CSW_GALIL);
    TrieSetCell(tWeaponsIds, "famas", CSW_FAMAS);
    TrieSetCell(tWeaponsIds, "usp", CSW_USP);
    TrieSetCell(tWeaponsIds, "glock18", CSW_GLOCK18);
    TrieSetCell(tWeaponsIds, "awp", CSW_AWP);
    TrieSetCell(tWeaponsIds, "mp5navy", CSW_MP5NAVY);
    TrieSetCell(tWeaponsIds, "m249", CSW_M249);
    TrieSetCell(tWeaponsIds, "m3", CSW_M3);
    TrieSetCell(tWeaponsIds, "m4a1", CSW_M4A1);
    TrieSetCell(tWeaponsIds, "tmp", CSW_TMP);
    TrieSetCell(tWeaponsIds, "g3sg1", CSW_G3SG1);
    TrieSetCell(tWeaponsIds, "flashbang", CSW_FLASHBANG);
    TrieSetCell(tWeaponsIds, "deagle", CSW_DEAGLE);
    TrieSetCell(tWeaponsIds, "sg552", CSW_SG552);
    TrieSetCell(tWeaponsIds, "ak47", CSW_AK47);
    TrieSetCell(tWeaponsIds, "knife", CSW_KNIFE);
    TrieSetCell(tWeaponsIds, "p90", CSW_P90);

    new c, iExtPos, bShieldModel;
    while(!feof(iFile))
    {
        fgets(iFile, szDatas, charsmax(szDatas));
        trim(szDatas);
        if(!(c=szDatas[0]) || c == ';' || c == '#' || (c == '/' && szDatas[1] == '/'))
        {
            continue;
        }

        if(        parse(szDatas, szOldModel, charsmax(szOldModel), szNewModel, charsmax(szNewModel)) == 2
        &&    file_exists(szNewModel)    )
        {
            // models/[p/v]_
            // models/shield/[p/v]_shield_
            bShieldModel = equal(szOldModel, "models/shield/", 14);
            if( ( (c=szOldModel[bShieldModel ? 14 : 7]) == 'p' || c == 'v' ) && szOldModel[bShieldModel ? 15 : 8] == '_' )
            {
                if( equal(szOldModel[9], "mp5", 3 ) )
                {
                    copy(szWeaponClass, charsmax(szWeaponClass), "weapon_mp5navy");
                }
                else
                {
                    iExtPos = strlen(szOldModel) - 4;
                    szOldModel[ iExtPos ] = EOS;
                    formatex(szWeaponClass, charsmax(szWeaponClass), "weapon_%s", szOldModel[bShieldModel ? 23 : 9]);
                    szOldModel[ iExtPos ] = '.';
                }
                
                if( !TrieGetCell(tWeaponsIds, szWeaponClass[7], iId) )
                {
                    continue;
                }

                if( c == 'v' )
                {
                    if( !g_tiszViewModels )
                    {
                        g_tiszViewModels = TrieCreate();
                    }

                    TrieSetCell(g_tiszViewModels, szOldModel, EF_AllocString( szNewModel ) );
                }
                else
                {
                    if( !g_tiszWeaponModels )
                    {
                        g_tiszWeaponModels = TrieCreate();
                    }
                    
                    TrieSetCell(g_tiszWeaponModels, szOldModel, EF_AllocString( szNewModel ) );
                }
                
                if( !TrieKeyExists(tRegisterWeaponDeploy, szWeaponClass) )
                {
                    TrieSetCell
                    (
                        tRegisterWeaponDeploy,
                        szWeaponClass,
                        RegisterHam(Ham_Item_Deploy, szWeaponClass, "OnCBasePlayerWeapon_Deploy_P", true)
                    );
                }
            }
            else
            {
                if( !g_tszWorldModels )
                {
                    g_tszWorldModels = TrieCreate();
                }
                else if( TrieKeyExists(g_tszWorldModels, szOldModel) )
                {
                    new szModel[MAX_MODEL_LENGTH];
                    TrieGetString(g_tszWorldModels, szOldModel, szModel, charsmax(szModel));
                    log_amx("%s world model is already set to %s, can't set it to %s !!", szWeaponClass, szModel, szNewModel);
                    continue;
                }
                TrieSetString(g_tszWorldModels, szOldModel, szNewModel);
            }

            if( !g_tiPrecacheReturns )
            {
                g_tiPrecacheReturns = TrieCreate();
            }
            TrieSetCell(g_tiPrecacheReturns, szOldModel, EF_PrecacheModel(szNewModel));
#if defined DONT_BLOCK_PRECACHE
            EF_PrecacheModel(szOldModel);
#endif
        }
    }
    fclose(iFile);

    TrieDestroy(tRegisterWeaponDeploy);
    TrieDestroy(tWeaponsIds);

    if( g_tiPrecacheReturns )
    {
        register_forward(FM_PrecacheModel, "OnPrecacheModel");

        if( g_tszWorldModels )
        {
            register_forward(FM_SetModel, "OnSetModel");
        }
    }
}

public plugin_init()
{
    register_plugin("[CS:GO MOD] Weapons Replace", "1.2", "ConnorMcLeod");
}

public OnPrecacheModel(const szModel[])
{
    static iReturn;
    if( TrieGetCell(g_tiPrecacheReturns, szModel, iReturn) && !equali(szModel, "models/w_backpack.mdl"))
    {
        forward_return(FMV_CELL, iReturn);
        return FMRES_SUPERCEDE;
    }
    return FMRES_IGNORED;
}

public OnCBasePlayerWeapon_Deploy_P( iWeapon )
{
    new id = get_pdata_cbase(iWeapon, m_pPlayer, XO_WEAPON);
    if( pev_valid(id) == 2 && get_pdata_cbase(id, m_pActiveItem) == iWeapon )
    {
        new iszNewModel, szOldModel[MAX_MODEL_LENGTH];
        if( g_tiszViewModels )
        {
            pev(id, pev_viewmodel2, szOldModel, charsmax(szOldModel));
            if( TrieGetCell(g_tiszViewModels, szOldModel, iszNewModel) )
            {
                set_pev(id, pev_viewmodel, iszNewModel);
            }
        }
        if( g_tiszWeaponModels )
        {
            pev(id, pev_weaponmodel2, szOldModel, charsmax(szOldModel));
            if( TrieGetCell(g_tiszWeaponModels, szOldModel, iszNewModel) )
            {
                set_pev(id, pev_weaponmodel, iszNewModel);
            }
        }
    }
}

public OnSetModel(const iEnt, const szModel[])
{
    new szNewModel[MAX_MODEL_LENGTH];
    if( TrieGetString(g_tszWorldModels, szModel, szNewModel, charsmax(szNewModel)) )
    {
        EF_SetModel(iEnt, szNewModel);
        return FMRES_SUPERCEDE;
    }
    return FMRES_IGNORED;
}
 

Вложения

Top4ik

Пользователь
Регистрация
10 Фев 2020
Сообщения
54
Симпатии
4
Top4ik,
C++:
// #define DONT_BLOCK_PRECACHE

#include <amxmodx>
#include <fakemeta_stocks>
#include <hamsandwich>

#pragma semicolon 1

const MAX_MODEL_LENGTH = 64;

const m_pActiveItem = 373;

const XO_WEAPON = 4;
const m_pPlayer = 41;

new Trie:g_tszWorldModels; // handles new models strings (all excepted v_ and w_ models)
new Trie:g_tiPrecacheReturns; // handles all new models precache returns integers
new Trie:g_tiszViewModels;
new Trie:g_tiszWeaponModels;

public plugin_precache()
{
    new szModelsFile[128];
    get_localinfo("amxx_configsdir", szModelsFile, charsmax(szModelsFile));
    add(szModelsFile, charsmax(szModelsFile), "/csgo/csgo_weapons.ini");

    new iFile = fopen(szModelsFile, "rt");
    if(!iFile)
    {
        return;
    }

    new szDatas[192], szOldModel[MAX_MODEL_LENGTH], szNewModel[MAX_MODEL_LENGTH];
    new szWeaponClass[32], Trie:tRegisterWeaponDeploy = TrieCreate(), iId;

    new Trie:tWeaponsIds = TrieCreate();
    TrieSetCell(tWeaponsIds, "p228", CSW_P228);
    TrieSetCell(tWeaponsIds, "scout", CSW_SCOUT);
    TrieSetCell(tWeaponsIds, "hegrenade", CSW_HEGRENADE);
    TrieSetCell(tWeaponsIds, "xm1014", CSW_XM1014);
    TrieSetCell(tWeaponsIds, "c4", CSW_C4);
    TrieSetCell(tWeaponsIds, "mac10", CSW_MAC10);
    TrieSetCell(tWeaponsIds, "aug", CSW_AUG);
    TrieSetCell(tWeaponsIds, "smokegrenade", CSW_SMOKEGRENADE);
    TrieSetCell(tWeaponsIds, "elite", CSW_ELITE);
    TrieSetCell(tWeaponsIds, "fiveseven", CSW_FIVESEVEN);
    TrieSetCell(tWeaponsIds, "ump45", CSW_UMP45);
    TrieSetCell(tWeaponsIds, "sg550", CSW_SG550);
    TrieSetCell(tWeaponsIds, "galil", CSW_GALIL);
    TrieSetCell(tWeaponsIds, "famas", CSW_FAMAS);
    TrieSetCell(tWeaponsIds, "usp", CSW_USP);
    TrieSetCell(tWeaponsIds, "glock18", CSW_GLOCK18);
    TrieSetCell(tWeaponsIds, "awp", CSW_AWP);
    TrieSetCell(tWeaponsIds, "mp5navy", CSW_MP5NAVY);
    TrieSetCell(tWeaponsIds, "m249", CSW_M249);
    TrieSetCell(tWeaponsIds, "m3", CSW_M3);
    TrieSetCell(tWeaponsIds, "m4a1", CSW_M4A1);
    TrieSetCell(tWeaponsIds, "tmp", CSW_TMP);
    TrieSetCell(tWeaponsIds, "g3sg1", CSW_G3SG1);
    TrieSetCell(tWeaponsIds, "flashbang", CSW_FLASHBANG);
    TrieSetCell(tWeaponsIds, "deagle", CSW_DEAGLE);
    TrieSetCell(tWeaponsIds, "sg552", CSW_SG552);
    TrieSetCell(tWeaponsIds, "ak47", CSW_AK47);
    TrieSetCell(tWeaponsIds, "knife", CSW_KNIFE);
    TrieSetCell(tWeaponsIds, "p90", CSW_P90);

    new c, iExtPos, bShieldModel;
    while(!feof(iFile))
    {
        fgets(iFile, szDatas, charsmax(szDatas));
        trim(szDatas);
        if(!(c=szDatas[0]) || c == ';' || c == '#' || (c == '/' && szDatas[1] == '/'))
        {
            continue;
        }

        if(        parse(szDatas, szOldModel, charsmax(szOldModel), szNewModel, charsmax(szNewModel)) == 2
        &&    file_exists(szNewModel)    )
        {
            // models/[p/v]_
            // models/shield/[p/v]_shield_
            bShieldModel = equal(szOldModel, "models/shield/", 14);
            if( ( (c=szOldModel[bShieldModel ? 14 : 7]) == 'p' || c == 'v' ) && szOldModel[bShieldModel ? 15 : 8] == '_' )
            {
                if( equal(szOldModel[9], "mp5", 3 ) )
                {
                    copy(szWeaponClass, charsmax(szWeaponClass), "weapon_mp5navy");
                }
                else
                {
                    iExtPos = strlen(szOldModel) - 4;
                    szOldModel[ iExtPos ] = EOS;
                    formatex(szWeaponClass, charsmax(szWeaponClass), "weapon_%s", szOldModel[bShieldModel ? 23 : 9]);
                    szOldModel[ iExtPos ] = '.';
                }
               
                if( !TrieGetCell(tWeaponsIds, szWeaponClass[7], iId) )
                {
                    continue;
                }

                if( c == 'v' )
                {
                    if( !g_tiszViewModels )
                    {
                        g_tiszViewModels = TrieCreate();
                    }

                    TrieSetCell(g_tiszViewModels, szOldModel, EF_AllocString( szNewModel ) );
                }
                else
                {
                    if( !g_tiszWeaponModels )
                    {
                        g_tiszWeaponModels = TrieCreate();
                    }
                   
                    TrieSetCell(g_tiszWeaponModels, szOldModel, EF_AllocString( szNewModel ) );
                }
               
                if( !TrieKeyExists(tRegisterWeaponDeploy, szWeaponClass) )
                {
                    TrieSetCell
                    (
                        tRegisterWeaponDeploy,
                        szWeaponClass,
                        RegisterHam(Ham_Item_Deploy, szWeaponClass, "OnCBasePlayerWeapon_Deploy_P", true)
                    );
                }
            }
            else
            {
                if( !g_tszWorldModels )
                {
                    g_tszWorldModels = TrieCreate();
                }
                else if( TrieKeyExists(g_tszWorldModels, szOldModel) )
                {
                    new szModel[MAX_MODEL_LENGTH];
                    TrieGetString(g_tszWorldModels, szOldModel, szModel, charsmax(szModel));
                    log_amx("%s world model is already set to %s, can't set it to %s !!", szWeaponClass, szModel, szNewModel);
                    continue;
                }
                TrieSetString(g_tszWorldModels, szOldModel, szNewModel);
            }

            if( !g_tiPrecacheReturns )
            {
                g_tiPrecacheReturns = TrieCreate();
            }
            TrieSetCell(g_tiPrecacheReturns, szOldModel, EF_PrecacheModel(szNewModel));
#if defined DONT_BLOCK_PRECACHE
            EF_PrecacheModel(szOldModel);
#endif
        }
    }
    fclose(iFile);

    TrieDestroy(tRegisterWeaponDeploy);
    TrieDestroy(tWeaponsIds);

    if( g_tiPrecacheReturns )
    {
        register_forward(FM_PrecacheModel, "OnPrecacheModel");

        if( g_tszWorldModels )
        {
            register_forward(FM_SetModel, "OnSetModel");
        }
    }
}

public plugin_init()
{
    register_plugin("[CS:GO MOD] Weapons Replace", "1.2", "ConnorMcLeod");
}

public OnPrecacheModel(const szModel[])
{
    static iReturn;
    if( TrieGetCell(g_tiPrecacheReturns, szModel, iReturn) && !equali(szModel, "models/w_backpack.mdl"))
    {
        forward_return(FMV_CELL, iReturn);
        return FMRES_SUPERCEDE;
    }
    return FMRES_IGNORED;
}

public OnCBasePlayerWeapon_Deploy_P( iWeapon )
{
    new id = get_pdata_cbase(iWeapon, m_pPlayer, XO_WEAPON);
    if( pev_valid(id) == 2 && get_pdata_cbase(id, m_pActiveItem) == iWeapon )
    {
        new iszNewModel, szOldModel[MAX_MODEL_LENGTH];
        if( g_tiszViewModels )
        {
            pev(id, pev_viewmodel2, szOldModel, charsmax(szOldModel));
            if( TrieGetCell(g_tiszViewModels, szOldModel, iszNewModel) )
            {
                set_pev(id, pev_viewmodel, iszNewModel);
            }
        }
        if( g_tiszWeaponModels )
        {
            pev(id, pev_weaponmodel2, szOldModel, charsmax(szOldModel));
            if( TrieGetCell(g_tiszWeaponModels, szOldModel, iszNewModel) )
            {
                set_pev(id, pev_weaponmodel, iszNewModel);
            }
        }
    }
}

public OnSetModel(const iEnt, const szModel[])
{
    new szNewModel[MAX_MODEL_LENGTH];
    if( TrieGetString(g_tszWorldModels, szModel, szNewModel, charsmax(szNewModel)) )
    {
        EF_SetModel(iEnt, szNewModel);
        return FMRES_SUPERCEDE;
    }
    return FMRES_IGNORED;
}
Огромное спасибо,пока всё хорошо,вроде перестал падать,вот что значит голова и руки золотые!От души благодарен!
 
Статус
В этой теме нельзя размещать новые ответы.
Сверху Снизу