Для примера я возьму скачанный из интернета плагин оружия Ethereal.
На всякий случай создайте копию .sma файла.
Начнём.
Открываем через блокнот .sma файл оружия и сразу убираем инклуд zombieplague
[pawn]
- #include <zombieplague>
Дальше нажимаем сверху "Правка -> Найти" или сочетание клавиш CTRL+F.
У вас вылезет окно поиска там вводим "zp" проверяем чтобы не стояла галочка "С учётом регистра"
Ставим точку где написано "Вниз" и нажимаем "Найти далее".
У нас находит в register_plugin название плагина, его можно не трогать. Дальше идут квары их тоже не трогаем, а вот строчку [pawn]
- g_itemid_ethereal = zp_register_extra_item("Ethereal", 3549, ZP_TEAM_HUMAN)
плагина где создаются переменные, мы ищем и стираем переменную g_itemid_ethereal.
Снова нажимаем найти далее и у нас находит паблик zp_user_humanized_post(id)
его, мы тоже стираем и нажимаем найти далее. Паблик zp_user_infected_post(id)
так же удаляем и ищем снова. Паблик zp_extra_item_selected тоже полностью удаляем, но сначала смотрим, что у нас здесь написано
[pawn]
- public zp_extra_item_selected(id, itemid)
- {
- if(itemid == g_itemid_ethereal)
- {
- drop_weapons(id, 1);
- new iWep2 = give_item(id,"weapon_ump45")
- if( iWep2 > 0 )
- {
- cs_set_weapon_ammo( iWep2, get_pcvar_num(cvar_clip_ethereal) )
- cs_set_user_bpammo (id, CSW_UMP45, get_pcvar_num(cvar_ethereal_ammo))
- UTIL_PlayWeaponAnimation(id, 2)
- }
- g_has_ethereal[id] = true;
- }
- }
Как видим здесь сразу в zp_extra_item_selected вставлена выдача оружия, так сделано не во всех плагинах в некоторых выдача может быть вот в таком виде
[pawn]
- public zp_extra_item_selected(id, itemid)
- {
- if(itemid != g_itemid_ethereal)
- return
- give_ethereal(id)
- }
Вот такой вид гораздо удобнее, чем первый
потому, что нужно просто скопировать give_ethereal(id)
и создать register_clcmd("say /give_ethereal", "give_ethereal")
Но у нас сделано по другому, поэтому делаем вот так.
Копируем всё, что находится в zp_extra_item_selected
копируем только то, что внутри, создаем новый паблик в самом конце, называем его как-нибудь типо give_ethereal и вставляем в него то, что копировали из zp_extra_item_selected вот пример
[pawn]
- public give_ethereal(id, itemid)
- {
- drop_weapons(id, 1);
- new iWep2 = give_item(id,"weapon_ump45")
- if( iWep2 > 0 )
- {
- cs_set_weapon_ammo( iWep2, get_pcvar_num(cvar_clip_ethereal) )
- cs_set_user_bpammo (id, CSW_UMP45, get_pcvar_num(cvar_ethereal_ammo))
- UTIL_PlayWeaponAnimation(id, 2)
- }
- g_has_ethereal[id] = true;
- }
Это готово. Теперь делаем саму команду для выдачи оружия, наверху ищем public plugin_init
и в самом низу, но не после кваров пишем это
[pawn]
- register_clcmd("give_ethereal", "give_ethereal")
Всё теперь когда игрок напишет команду в консоле give_ethereal у него в руках появится наша пушка.
Но мы ещё не закончили поэтому продолжаем.
Нажимаем найти далее и нам находит это
[pawn]
- replace_weapon_models(id, weaponid)
- {
- switch (weaponid)
- {
- case CSW_UMP45:
- {
- if (zp_get_user_zombie(id) || zp_get_user_survivor(id))
- return;
- if(g_has_ethereal[id])
- {
- set_pev(id, pev_viewmodel2, ethereal_V_MODEL)
- set_pev(id, pev_weaponmodel2, ethereal_P_MODEL)
- }
- }
- }
- }
Здесь мы стираем только эту проверку
[pawn]
- if (zp_get_user_zombie(id) || zp_get_user_survivor(id))
- return;
И ищем далее.
Дальше нам находит сток в котором есть проверка
[pawn]
- if(target > 0 && target <= g_MaxPlayers && zp_get_user_zombie(target))
И отсюда мы удаляем
[pawn]
- && zp_get_user_zombie(target)
И снова нажимаем Найти далее.
Но тут нам вылазит окно "Не удаётся найти zp"
Ну что же, это значит что больше нету функций относящихся к zombieplague, и теперь это оружие можно компилировать и спокойно ставить на паблик.
Это моя первая статья, поэтому не судите строго.