Стаж: 10 лет
Сообщений: 108
Благодарностей: 20
Полезность: 41
Прошу не бить палками, первый опыт;) Возникла небольшая проблема с заменой оружия на голд, как реализовать замену w_ моделей на reapi?
Код:
plugin_init(){ register_event("TextMsg", "evNewRound", "a", "2=#Game_will_restart_in", "2=#Game_Commencing"); register_event("HLTV", "evRoundStart", "a", "1=0", "2=0"); RegisterHam(Ham_Item_Deploy, "weapon_deagle","HookItemDeploy", true); RegisterHam(Ham_Item_Deploy, "weapon_ak47", "HookItemDeploy", true); RegisterHam(Ham_Item_Deploy, "weapon_awp", "HookItemDeploy", true); RegisterHam(Ham_Item_Deploy, "weapon_m4a1", "HookItemDeploy", true); HookPlayer_Spawn = RegisterHookChain(RG_CBasePlayer_Spawn, "CBasePlayer_Spawn", true); EnableHookChain(HookPlayer_Spawn); } public CBasePlayer_Spawn(const id) { if(is_bonus_spawn(id)) { #if defined GIVE_PISTOL switch(iPistol[id]) { case 0: { rg_give_item(id, "weapon_deagle", GT_REPLACE); rg_set_user_bpammo(id, WEAPON_DEAGLE, 35); } case 1: { rg_give_item(id, "weapon_usp", GT_REPLACE); rg_set_user_bpammo(id, WEAPON_USP, 100); } case 2: { rg_give_item(id, "weapon_glock18", GT_REPLACE); rg_set_user_bpammo(id, WEAPON_GLOCK18, 120); } } #endif if (!g_bMapsBlock) { #if defined GIVE_HEGRENADE rg_give_item(id, "weapon_hegrenade", GT_APPEND); #endif #if defined GIVE_FlASHBANG rg_give_item(id, "weapon_flashbang", GT_APPEND); rg_give_item(id, "weapon_flashbang", GT_APPEND); #endif #if defined GIVE_SMOKE rg_give_item(id, "weapon_smokegrenade", GT_APPEND); #endif #if defined GIVE_ARMOR rg_set_user_armor(id, 100, ARMOR_VESTHELM); #endif } } } public HookItemDeploy(weapon) { new id = get_member(weapon, m_pPlayer); if (!is_user_connected(id) || !IsUserVip(id)) { return HAM_IGNORED; } new iIndex = 0; switch(get_member(weapon, m_iId)){ case WEAPON_DEAGLE: iIndex = Deagle; case WEAPON_AWP: iIndex = Awp; case WEAPON_AK47: iIndex = Ak47; case WEAPON_M4A1: iIndex = M4A1; default: return HAM_IGNORED; } if (iIndex){ set_entvar(id, var_viewmodel, szGoldV[iIndex]); set_entvar(id, var_weaponmodel, szGoldP[iIndex]); } return HAM_IGNORED; } Код:
#include <amxmodx> #include <reapi> #include <hamsandwich> /* ########### Настройка плагина ############ */ #define ACCESS_FLAG ADMIN_LEVEL_H // Флаги доступа к вип системе, вип меню, выдача амуниции и др. /* ***** Настройка функционала плагина. Для откл. закоментируйте строку ***** */ #define SHOW_DAMAGER // Вкл/выкл дамагер для випов #define HP_ADD // Вкл/выкл прибавление ХП для випов (Вампирка) //#define ADMIN_LOADER // Совместимость с Admin Loader от неугомона (https://www.neugomon.ru/threads/486/) #define SAY_WEAPONS // Позволяет включить чат команды "/ak47", "/m4a1", "/famas", "/awp", "/b51" //#define AUTO_MENU // Автоматически открывать в начале рануда Вип меню, включения происходит с WEAPONSRND раунда, по ум. отключено #define VIP_SHOW_INFO // Оповещение при заходе вип игрока на сервер #define VIP_TAB // Вип в табе #define GIVE_PISTOL // Выдавать пистолет на спавне #define GIVE_HEGRENADE // Выдавать взрывную гранату на спавне #define GIVE_FlASHBANG // Выдавать две световые гранаты на спавне #define GIVE_SMOKE // Выдавать дымовую гранату на спавне #define GIVE_ARMOR // Выдавать броню и шлем на спавне #define GIVE_DEFUSEKIT // Выдавать набор сапёра /* **** Конец настройки **** */ #define VIPMENU 1 // C какого раунда можно открыть вип меню, для откл. закоментируйте строку (Для тех у кого есть разминка перед основными раундами) #define WEAPONSRND 2 // C какого раунда доступно оружие #define AWPM249RND 3 // С какого раунда доступны AWP и пулемет #if defined HP_ADD /* Настройка прибавления хп для випов */ //#define HP_MAP_BLOCK // Отключать вампирку на картах BLOCK_MAPS #define HP_ADD_ACCESS ADMIN_LEVEL_H // С каким флагом доступена вампирка #define HP_OFF 1 // C какого раунда включать прибавление ХП (0 - откл. функцию) #define HP_MAX 100.0 // макс. кол-во HP #define HP_BODY 10.0 // за убийство в тело #define HP_HS 15.0 // за убийство в голову #endif #if defined SHOW_DAMAGER /* Настройка дамагера */ //#define DMG_MAP_BLOCK // Отключать дамагер на картах BLOCK_MAPS //#define DAMAGER_ACCESS ADMIN_LEVEL_H // С каким флагом доступен дамагер //#define DAMAGER_OFF // Возможность откл. дамагер в вип меню #endif #if defined VIP_SHOW_INFO //#define CONNECTED_SOUND "misc/vip.wav" // Дополненине к VIP_SHOW_INFO, звук при заходе вип игрока на сервер, по ум. отключено #endif #define PREFIX "^1[^4Сервер^1]" // Тег чата #define BLOCK_MAPS "awp_", "aim_", "fy_", "35hp", "$2000$","$7000$", "fy_", "cs_deagle5" // Блокируемые карты /* ########### Конец настройки плагина ############# */ #if !defined MAX_NAME_LENGTH #define MAX_NAME_LENGTH 32 #endif #define IsUserVip(%1) (get_user_flags(%1) & ACCESS_FLAG) #define MenuKey (1<<0)|(1<<1)|(1<<2)|(1<<3)|(1<<4)|(1<<5)|(1<<6)|(1<<7) #pragma semicolon 1 #if defined ADMIN_LOADER native admin_expired(index); #endif new iPistol[MAX_CLIENTS+1], bool:g_bUseWeapon[MAX_CLIENTS+1]; new HookChain:HookPlayer_Spawn, HookChain:HookPlayer_Killed, HookChain:HookPlayer_TakeDamage; new g_iRound, bool:g_bMapsBlock; enum _:eGoldList{ Deagle, Awp, Ak47, M4A1 }; new szGoldV[eGoldList][32] = { "models/test/v_deagle.mdl", "models/test/v_awp.mdl", "models/test/v_ak47.mdl", "models/test/v_m4a1.mdl" }; new szGoldP[eGoldList][32] = { "models/test/p_deagle.mdl", "models/test/p_awp.mdl", "models/test/p_ak47.mdl", "models/test/p_m4a1.mdl" }; new szGoldW[eGoldList][32] = { "models/test/w_deagle.mdl", "models/test/w_awp.mdl", "models/test/w_ak47.mdl", "models/test/w_m4a1.mdl" }; #if defined DAMAGER_OFF new bool:g_bUseDamager[MAX_CLIENTS+1]; #endif #if defined VIP_TAB new Msg_ScoreAttrib; #endif #if defined HP_ADD new g_iSyncMsgAddHP; #endif #if defined SHOW_DAMAGER new g_iSyncMsgDamage; #endif public plugin_precache(){ for(new i = 0; i < sizeof(szGoldV); i++) if (szGoldV[i][0]) precache_model(szGoldV[i]); for(new i = 0; i < sizeof(szGoldP); i++) if (szGoldP[i][0]) precache_model(szGoldP[i]); for(new i = 0; i < sizeof(szGoldW); i++) if (szGoldW[i][0]) precache_model(szGoldW[i]); } public plugin_init() { register_plugin("[ReAPI] VIP System", "1.3.1", "pUzzlik"); register_event("TextMsg", "evNewRound", "a", "2=#Game_will_restart_in", "2=#Game_Commencing"); register_event("HLTV", "evRoundStart", "a", "1=0", "2=0"); RegisterHam(Ham_Item_Deploy, "weapon_deagle","HookItemDeploy", true); RegisterHam(Ham_Item_Deploy, "weapon_ak47", "HookItemDeploy", true); RegisterHam(Ham_Item_Deploy, "weapon_awp", "HookItemDeploy", true); RegisterHam(Ham_Item_Deploy, "weapon_m4a1", "HookItemDeploy", true); // RegisterHookChain(RG_CWeaponBox_SetModel, "CWeaponBox_SetModel", true); HookPlayer_Spawn = RegisterHookChain(RG_CBasePlayer_Spawn, "CBasePlayer_Spawn", true); EnableHookChain(HookPlayer_Spawn); #if defined HP_ADD HookPlayer_Killed = RegisterHookChain(RG_CBasePlayer_Killed, "CBasePlayer_Killed", true); EnableHookChain(HookPlayer_Killed); g_iSyncMsgAddHP = CreateHudSyncObj(); #endif #if defined SHOW_DAMAGER HookPlayer_TakeDamage = RegisterHookChain(RG_CBasePlayer_TakeDamage, "CBasePlayer_TakeDamage", true); EnableHookChain(HookPlayer_TakeDamage); g_iSyncMsgDamage = CreateHudSyncObj(); #endif register_clcmd("weaponmenu", "ShowMenu"); register_clcmd("vipmenu", "ShowMenu"); register_clcmd("say /vipmenu", "ShowMenu"); register_clcmd("say_team /vipmenu", "ShowMenu"); #if defined SAY_WEAPONS register_clcmd("say", "hook_say"); register_clcmd("say_team", "hook_say"); #endif register_menucmd(register_menuid("Vip Menu"), MenuKey, "MenuHandler"); #if defined VIP_TAB Msg_ScoreAttrib = get_user_msgid("ScoreAttrib"); #endif } public plugin_cfg() { new map[32]; rh_get_mapname(map, charsmax(map)); new BlockMap[][] = { BLOCK_MAPS }; for(new i; i < sizeof BlockMap; i++) if(containi(map, BlockMap[i]) != -1) { DisableHookChain(HookPlayer_Spawn); #if defined HP_MAP_BLOCK DisableHookChain(HookPlayer_Killed); #endif #if defined DMG_MAP_BLOCK DisableHookChain(HookPlayer_TakeDamage); #endif g_bMapsBlock = true; } } public evNewRound() g_iRound = 0; public evRoundStart() { arrayset(g_bUseWeapon, false, sizeof(g_bUseWeapon)); g_iRound++; } public client_putinserver(id) { if(IsUserVip(id)) { #if defined DAMAGER_OFF if(id > 0 || id < 33) { new sUserInfo[16]; get_user_info(id, "_dmg", sUserInfo, charsmax(sUserInfo)); if(sUserInfo[0] && equal(sUserInfo, "off")) g_bUseDamager[id] = false; else g_bUseDamager[id] = true; } #endif #if defined VIP_SHOW_INFO new name[MAX_NAME_LENGTH]; get_entvar(id, var_netname, name, charsmax(name)); new players[MAX_CLIENTS], num; get_players(players, num, "ch"); for(new i; i < num ; i++) { client_print_color(players[i], -3, "%s ^1На сервер зашёл ^3VIP ^1клиент ^4%s", PREFIX, name); #if defined CONNECTED_SOUND client_cmd(players[i], "spk %s", CONNECTED_SOUND); #endif } #endif } } #if defined HP_ADD public CBasePlayer_Killed(const pevVictim, pevAttacker) { #if HP_OFF > 0 if(HP_OFF >= g_iRound) return; #endif if( is_user_connected(pevAttacker) && get_user_flags(pevAttacker) & HP_ADD_ACCESS && pevVictim != pevAttacker) { static Float:attackerHp, Float:addHp; attackerHp = Float:get_entvar(pevAttacker, var_health); addHp = get_member(pevVictim, m_bHeadshotKilled) ? HP_HS : HP_BODY; attackerHp += addHp; set_entvar(pevAttacker, var_health, attackerHp > HP_MAX ? HP_MAX : attackerHp); if(attackerHp >= HP_MAX) return; set_hudmessage(0, 255, 0, -1.0, 0.15, 0, 1.0, 1.0, 0.1, 0.1, -1); ShowSyncHudMsg(pevAttacker, g_iSyncMsgAddHP, "Добавлено +%d HP", floatround(addHp)); } } #endif #if defined SHOW_DAMAGER public CBasePlayer_TakeDamage(const pevVictim, pevInflictor, pevAttacker, Float:damage, bitsDamageType) { #if defined DAMAGER_OFF if(pevAttacker < 1 || pevAttacker > 32 || !g_bUseDamager[pevAttacker]) return; #endif if( is_user_connected(pevAttacker) && get_user_flags(pevAttacker) && rg_is_player_can_takedamage(pevVictim, pevAttacker)) { set_hudmessage(0, 100, 200, -1.0, 0.55, 2, 0.1, 4.0, 0.02, 0.02, -1); ShowSyncHudMsg(pevAttacker, g_iSyncMsgDamage, "%d", floatround(damage)); } } #endif public CBasePlayer_Spawn(const id) { if(is_bonus_spawn(id)) { #if defined GIVE_PISTOL switch(iPistol[id]) { case 0: { rg_give_item(id, "weapon_deagle", GT_REPLACE); rg_set_user_bpammo(id, WEAPON_DEAGLE, 35); } case 1: { rg_give_item(id, "weapon_usp", GT_REPLACE); rg_set_user_bpammo(id, WEAPON_USP, 100); } case 2: { rg_give_item(id, "weapon_glock18", GT_REPLACE); rg_set_user_bpammo(id, WEAPON_GLOCK18, 120); } } #endif if (!g_bMapsBlock) { #if defined GIVE_HEGRENADE rg_give_item(id, "weapon_hegrenade", GT_APPEND); #endif #if defined GIVE_FlASHBANG rg_give_item(id, "weapon_flashbang", GT_APPEND); rg_give_item(id, "weapon_flashbang", GT_APPEND); #endif #if defined GIVE_SMOKE rg_give_item(id, "weapon_smokegrenade", GT_APPEND); #endif #if defined GIVE_ARMOR rg_set_user_armor(id, 100, ARMOR_VESTHELM); #endif } #if defined GIVE_DEFUSEKIT new TeamName:team = get_member(id, m_iTeam); if(team == TEAM_CT) rg_give_defusekit (id, true); #endif #if defined VIP_TAB message_begin(MSG_BROADCAST, Msg_ScoreAttrib); write_byte(id); write_byte(4); message_end(); #endif #if defined AUTO_MENU if(g_iRound >= WEAPONSRND) ShowMenu(id); #endif } } #if defined SAY_WEAPONS public hook_say(id) { static szMsg[32]; read_args(szMsg, charsmax(szMsg)); remove_quotes(szMsg); static const szChoosedWP[][] = { "/ak47", "/m4a1", "/famas", "/awp", "/b51" }; for(new a; a < sizeof szChoosedWP; a++) { if(!strcmp(szMsg, szChoosedWP[a])) { if(!is_allow_use(id)) break; return MenuHandler(id, a); } } return HC_CONTINUE; } #endif public ShowMenu(id) { if(!is_allow_use(id)) return HC_CONTINUE; static szMenu[512], iLen, key, name[MAX_NAME_LENGTH]; get_entvar(id, var_netname, name, charsmax(name)); key = MENU_KEY_0|MENU_KEY_1|MENU_KEY_2|MENU_KEY_3|MENU_KEY_4|MENU_KEY_5; iLen = formatex(szMenu, charsmax(szMenu), "\rVIP меню ^n\wПривет, [\y%s\w]^n", name); #if defined ADMIN_LOADER new exp = admin_expired(id); if(exp > 0) { new sys = get_systime(); if((exp - sys) / 86400 > 0) iLen += formatex(szMenu[iLen], charsmax(szMenu) - iLen, "\yВипки осталось: \w%d дн.!^n^n", (exp - sys) / 86400); else iLen += formatex(szMenu[iLen], charsmax(szMenu) - iLen, "\yВипки осталось: \w1 день!^n^n"); } else if(exp == 0) iLen += formatex(szMenu[iLen], charsmax(szMenu) - iLen, "\yДействие вип: \wне ограничено!^n^n"); #else iLen += formatex(szMenu[iLen], charsmax(szMenu) - iLen, "^n"); #endif if(g_iRound < WEAPONSRND) iLen += formatex(szMenu[iLen], charsmax(szMenu) - iLen, "\r1. \dВзять M4A1 \r[%d раунд]^n\r2. \dВзять AK47 \r[%d раунд]^n", WEAPONSRND, WEAPONSRND); else if(g_bUseWeapon[id]) iLen += formatex(szMenu[iLen], charsmax(szMenu) - iLen, "\r1. \dВзять M4A1^n\r2. \dВзять AK47^n"); else iLen += formatex(szMenu[iLen], charsmax(szMenu) - iLen, "\r1. \wВзять M4A1^n\r2. \wВзять AK47^n"); if(g_iRound < AWPM249RND) iLen += formatex(szMenu[iLen], charsmax(szMenu) - iLen, "\r3. \dВзять AWP \r[%d раунд]^n", AWPM249RND); else if(g_bUseWeapon[id]) iLen += formatex(szMenu[iLen], charsmax(szMenu) - iLen, "\r3. \dВзять AWP^n"); else iLen += formatex(szMenu[iLen], charsmax(szMenu) - iLen, "\r3. \wВзять AWP^n"); if(g_iRound < WEAPONSRND) iLen += formatex(szMenu[iLen], charsmax(szMenu) - iLen, "\r4. \dВзять Famas \r[%d раунд]^n", WEAPONSRND); else if(g_bUseWeapon[id]) iLen += formatex(szMenu[iLen], charsmax(szMenu) - iLen, "\r4. \dВзять Famas^n"); else iLen += formatex(szMenu[iLen], charsmax(szMenu) - iLen, "\r4. \wВзять Famas^n"); if(g_iRound < AWPM249RND) iLen += formatex(szMenu[iLen], charsmax(szMenu) - iLen, "\r5. \dВзять Пулемет \r[%d раунд]^n^n", AWPM249RND); else if(g_bUseWeapon[id]) iLen += formatex(szMenu[iLen], charsmax(szMenu) - iLen, "\r5. \dВзять Пулемет^n^n"); else iLen += formatex(szMenu[iLen], charsmax(szMenu) - iLen, "\r5. \wВзять Пулемет^n^n"); #if defined GIVE_PISTOL key |= MENU_KEY_6; iLen += formatex(szMenu[iLen], charsmax(szMenu) - iLen, "\r6. \yПистолет при спавне \d[\w%s\d]^n", iPistol[id] == 0 ? "Deagle" : iPistol[id] == 1 ? "USP" : "Glock"); #if defined DAMAGER_OFF key |= MENU_KEY_7; iLen += formatex(szMenu[iLen], charsmax(szMenu) - iLen, "\r7. \yДамагер \d[\w%s\d]^n^n", g_bUseDamager[id] ? "ON" : "OFF"); #endif #endif #if !defined GIVE_PISTOL #if defined DAMAGER_OFF key |= MENU_KEY_6; iLen += formatex(szMenu[iLen], charsmax(szMenu) - iLen, "\r6. \yДамагер \d[\w%s\d]^n^n", g_bUseDamager[id] ? "ON" : "OFF"); #endif #endif formatex(szMenu[iLen], charsmax(szMenu) - iLen, "\r0. \rВыход"); set_member(id, m_iMenu, Menu_OFF); return show_menu(id, key, szMenu, -1, "Vip Menu"); } public MenuHandler(id, key) { if(key <= 4) { if(g_bUseWeapon[id]) return client_print_color(id, 0, "%s Вы ^3уже брали ^1оружие в этом раунде!", PREFIX); if(g_iRound < WEAPONSRND) return client_print_color(id, 0, "%s Этот раунд на ^3пистолетах^1!", PREFIX); if((key == 2)||(key == 4)) if(g_iRound < AWPM249RND) return client_print_color(id, 0, "%s Оружие доступно только с^3 %d ^1раунда!", PREFIX, AWPM249RND); g_bUseWeapon[id] = true; } static const szChoosedBP[] = { 90, 90, 30, 90, 250 }; static const szChoosedWP[][] = { "weapon_m4a1", "weapon_ak47", "weapon_awp", "weapon_famas", "weapon_m249" }; #if defined GIVE_PISTOL switch(key) { case 5: { iPistol[id] >= 2 ? (iPistol[id] = 0) : iPistol[id]++; ShowMenu(id); } #if defined DAMAGER_OFF case 6: ShowDamage(id); #endif } #endif #if !defined GIVE_PISTOL #if defined DAMAGER_OFF switch(key) { case 5: ShowDamage(id); } #endif #endif if(key > 4) return HC_CONTINUE; return rg_give_items(id, szChoosedWP[key], szChoosedBP[key]); } public HookItemDeploy(weapon) { new id = get_member(weapon, m_pPlayer); if (!is_user_connected(id) || !IsUserVip(id)) { return HAM_IGNORED; } new iIndex = 0; switch(get_member(weapon, m_iId)){ case WEAPON_DEAGLE: iIndex = Deagle; case WEAPON_AWP: iIndex = Awp; case WEAPON_AK47: iIndex = Ak47; case WEAPON_M4A1: iIndex = M4A1; default: return HAM_IGNORED; } if (iIndex){ set_entvar(id, var_viewmodel, szGoldV[iIndex]); set_entvar(id, var_weaponmodel, szGoldP[iIndex]); } return HAM_IGNORED; } #if defined DAMAGER_OFF public ShowDamage(id) { g_bUseDamager[id] = !g_bUseDamager[id]; if(g_bUseDamager[id]) client_cmd(id, "setinfo _dmg on"); else client_cmd(id, "setinfo _dmg off"); client_print_color(id, 0, "%s Вы ^3%s ^1дамагер.", PREFIX, g_bUseDamager[id] ? "включили" : "отключили"); } #endif stock rg_give_items(id,currWeaponName[],ammoAmount) { rg_give_item(id, currWeaponName, GT_DROP_AND_REPLACE); rg_set_user_bpammo(id, rg_get_weapon_info(currWeaponName, WI_ID), ammoAmount); return HC_CONTINUE; } bool:is_bonus_spawn(id) { if(!is_user_alive(id)) return false; if(!IsUserVip(id)) return false; return true; } bool:is_allow_use(id) { if(!is_user_alive(id)) { client_print_color(id, -2, "%s ^3Меню доступно только живым^1!", PREFIX); return false; } if(!IsUserVip(id)) { client_print_color(id, 0, "%s Только ^4VIP-игрок ^1может пользоваться этой командой!", PREFIX); return false; } if(g_bMapsBlock) { client_print_color(id, 0, "%s На данной карте брать оружие ^3запрещено^1!", PREFIX); return false; } #if defined VIPMENU if(VIPMENU > g_iRound) { client_print_color(id, -2, "%s Разминочный раунд. ^3Запрещено ^1пользоваться командой!", PREFIX); return false; } #endif return true; }
Отредактировал: Xramer, - 5.10.2018, 18:30
https://vk.com/cs_kykyepta ip: 193.26.217.42:27449