ZP Kill Rewards. Выпадание мешков при режимах

Статус
В этой теме нельзя размещать новые ответы.
Сообщения
452
Реакции
78
Помог
4 раз(а)
Ошибка
Выпадание мешков из людей при режимах, с неправильным кол.-вом ammo
ОС
Linux
Билд
Protocol version 48 
Exe version 1.1.2.7/Stdio (cstrike)
Exe build: 13:12:29 Aug 29 2013 (6153)
ReGamedll
-
Список метамодулей
[ 1] AMX Mod X RUN - amxmodx.so v1.8.2 ini Start ANY 
[ 2] dproto_EF RUN - dproto.so v0.9.582 ini Start Never
[ 3] LocalizeBug Fix RUN - localizebugfix.s v2.4 ini Start Never
[ 4] VoiceTranscoder RUN - vtc.so v2017RC3 ini ANY
[ 5] WHBlocker RUN - whblocker_mm_i38 v1.5.620 ini ANY
[ 6] CStrike RUN - cstrike_amxx_i38 v1.8.2 pl1 ANY
[ 7] CSX RUN - csx_amxx_i386.so v1.8.2 pl1 ANY
[ 8] FakeMeta RUN - fakemeta_amxx_i3 v1.8.2 pl1 ANY
[ 9] MySQL RUN - mysql_amxx_i386. v1.8.2 pl1 ANY
[10] Engine RUN - engine_amxx_i386 v1.8.2 pl1 ANY
[11] Fun RUN - fun_amxx_i386.so v1.8.2 pl1 ANY
[12] Ham Sandwich RUN - hamsandwich_amxx v1.8.2 pl1 ANY
12 plugins, 12 running
Список плагинов
[ 1] Admin Loader 1.5.4 neygomon admin_loader_fo running 
[ 2] FreshBans 1.3.6 kanagava fresh_bans.amxx running
[ 3] Admin Commands 1.8.2 AMXX Dev Team admincmd.amxx running
[ 4] Slots Reservation 1.8.2 AMXX Dev Team adminslots.amxx running
[ 5] Menus Front-End 17.10.30 AMXX Dev Team & amxmodmenu_rbs. running
[ 6] Commands Menu 1.8.2 AMXX Dev Team cmdmenu.amxx running
[ 7] Players Menu 1.8.2 AMXX Dev Team plmenu.amxx running
[ 8] [182] MapsMenu RBS 17.10.30 AMXX Dev Team & mapsmenu_rbs.am running
[ 9] Admin Chat 1.8.2 AMXX Dev Team adminchat.amxx running
[ 10] Scrolling Message 1.8.2 AMXX Dev Team scrollmsg.amxx running
[ 11] Info. Messages 1.8.2 AMXX Dev Team imessage.amxx running
[ 12] Admin Votes 1.8.2 AMXX Dev Team adminvote.amxx running
[ 13] [182] Chat RBS 17.10.30 SKAJIbnEJIb chat_rbs.amxx running
[ 14] Reset Score 1.0 SKAJIbnEJIb resetscore_rbs. running
[ 15] NextMap 15.07.15 SKAJIbnEJIb & AM nextmap.amxx running
[ 16] MapChooser RBS 15.07.15 SKAJIbnEJIb & UF mapchooser_rbs. running
[ 17] TimeLeft 15.07.15 SKAJIbnEJIb & AM timeleft.amxx running
[ 18] Pause Plugins 1.8.2 AMXX Dev Team pausecfg.amxx running
[ 19] Stats Configuration 1.8.2 AMXX Dev Team statscfg.amxx running
[ 20] StatsX 1.8.1.3746 AMXX Dev Team statsx.amxx running
[ 21] adminka 1.0 next adminka.amxx running
[ 22] Team Join Management 0.3 Exolent team_join.amxx running
[ 23] [ZP: Bank] Auto Ammo S 1.0 Leo_[BH] zp_save_csr.amx running
[ 24] [ZP] Sub-Plugin: Parac 1.1 Random1, 93()|29 zp_sub_parachut running
[ 25] Damager 0.11b Subb98 damager.amxx running
[ 26] No Radio Flood 1.2 Starsailor/Freed blockgreen.amxx running
[ 27] Choose knifes 1.0 CHyC/4e/l zp_addon_knife. running
[ 28] [ZP] LaserMine 2.8.1 SandStriker / Sh zpa_lasermine_2 debug
[ 29] [ZP] Addon: Extended G 2.0 [ru]In1ernal Err zp_ammo_exx.amx running
[ 30] Zp Addon: New Score 1.5 kiryxapro zp_score_new.am running
[ 31] [ZPA] Count Down 0.0.2 qwerty zpa_addon_count running
[ 32] [ZP] Antiblock 0.1 Maslyak zp_new_antibloc running
[ 33] [ZP] AmmoChange 1.0 ZETA [M|E|N] zp_ammochange.a running
[ 34] [ZP] Respawn zombies 1.0 kiryxapro zpa_respawn_con running
[ 35] ammo donate/dhud 1.5 user/zobie-dead zp_ammo_donate. running
[ 36] [ZP] Addon: APs Leader 1.2 Kiske zp_addon_aps_le running
[ 37] [ZP] Addon: Grenade St 1.1 rapara13 zp_addon_grenad running
[ 38] [ZP] Addon: Death Spri 1.4 eXcalibur.007 zp_addon_death_ running
[ 39] Zombie Plague Advance 1.6.1 MeRcyLeZZ, @bdul zombie_plague_a debug
[ 40] [ZP] Class - Hunter 1.1 HoRRoR zp_zcls_hunter. running
[ 41] [ZP] Class - Jumper 1.0 HoRRoR, twistede zp_zcls_jumperr running
[ 42] [ZP] Class - Ghost 1.3 HoRRoR, Fry! zp_zcls_ghost.a running
[ 43] [ZP] Class - Tank 1.0 HoRRoR zp_zcls_tank.am running
[ 44] [ZP] Class - Warlock 1.2 HoRRoR zp_zcls_warlock running
[ 45] [ZP] Class - Necro 1.1 HoRRoR zp_zcls_necro.a running
[ 46] [ZPA] Addon: Kill Rewa 2.1 freelanser & WIL zpa_addon_kill_ running
[ 47] [ZPA] Addon: Best Play 2.2 ^ zpa_addon_best_ running
[ 48] [ZP] Extra Drag 0.1 4eRT zp_extra_drag_a running
[ 49] [ZP] Extra Item : Leap 1.5.7 Fry! zp_extra_leap.a running
[ 50] [ZP] Extra: Anti-Infec 1.0 MeRcyLeZZ zp_extra_human_ running
[ 51] [ZP] Extra Item: Force v1.6 lucas_7_94 shield_force.am running
[ 52] [ZP] Extra Item: No Re 0.1.0 fezh zp_extra_no_rec running
[ 53] [ZP] Extra: SandBags 1.1 LARP zp_extra_sandba running
[ 54] [ZP] Extra Item: Multi 1.0 pharse zp_extra_multij running
[ 55] [ZP] Extra: K1A Specia 1.0 Crock / =) (Popr azp_weapon_k1as running
[ 56] [ZP] Extra: HK416 1.0 Crock / =) (Popr azp_extra_hk416 running
[ 57] [ZP] Extra: Thompson C 1.0 Crock / =) (Popr azp_weapon_thom running
[ 58] [CSO] Extra: Ethereal 1.0 Crock / =) (Popr zp_extra_ethere running
[ 59] [ZP] Extra: MG36 1.0 Crock / =) (Popr azp_weapon_mg36 running
[ 60] [ZP] Extra: Blaster [S 1.0 Crock / =) (Popr azp_weapon_sfgu running
[ 61] [ZP] Extra: VSK94 1.0 Crock / =) (Popr azp_weapon_vsk9 running
[ 62] ZM VIP 1.6 aaarnas zm_vip.amxx
running
[ 63] [ZP] Extra: Anti-Infec 1.0 MeRcyLeZZ zm_vip_extra_hu running
[ 64] Extra Item Bazooka 1.0 B!gBud zm_vip_extra_ba running
[ 65] [ZP] Extra: Golden Dea 1.1 AlejandroSk zm_vip_extra_go running
[ 66] [ZP] Extra Item: Playe 1.6 Zombie Lurker zm_vip_extra_pl running
[ 67] [ZP] Pack Of Granades 1.4 alan_el_more zm_vip_pack_gre running
[ 68] M24-Grenade 1.0 Barney/Faktor zm_vip_extra_m2 running
[ 69] [ZP] Extra: CrossBow 1.0 Crock / =) (Popr zm_vip_weapon_c running
[ 70] [ZP] Kill Bomb For Zom 1.0 @bdul! zm_vip_zkill_bo running
[ 71] [ZP] Buy Health 1.0 Next zm_vip_extra_bu running
71 plugins, 71 running
Исходный код
#include <amxmodx>
#include <amxmisc>
#include <fakemeta_util>
#include <zombie_plague_advance>
#include <hamsandwich>
#include <fakemeta>
#include <engine>

#define zp_give_user_ammo_packs(%0,%1) zp_set_user_ammo_packs(%0, zp_get_user_ammo_packs(%0) + %1)

#define PLUGIN "[ZPA] Addon: Kill Rewards"
#define VERSION "2.1"
#define AUTHOR "freelanser & WILL BE"

new const item_class_name[] = "ammo"

/* Here you can change the model */
new g_model[] = "models/pza_mok.mdl"

/* Here is the sound, when you take it */
new sound[] = { "pza_ammo_sound.wav" }

public plugin_precache()
{
precache_model(g_model)
precache_sound(sound)
}

public plugin_init()
{
register_plugin(PLUGIN, VERSION, AUTHOR)

register_forward(FM_Touch, "fwd_Touch")

RegisterHam(Ham_Killed, "player", "fw_PlayerKilled")

register_event("HLTV", "EVENT_round_start", "a", "1=0", "2=0")
}

public EVENT_round_start()
{
deleteAllItems()
}

public deleteAllItems()
{
new ent = FM_NULLENT
static string_class[] = "classname"
while ((ent = engfunc(EngFunc_FindEntityByString, ent, string_class, item_class_name)))
set_pev(ent, pev_flags, FL_KILLME)
}

public addItem(origin[3])
{
new ent = fm_create_entity("info_target")
set_pev(ent, pev_classname, item_class_name)

engfunc(EngFunc_SetModel,ent, g_model)

set_pev(ent,pev_mins,Float:{-10.0,-10.0,0.0})
set_pev(ent,pev_maxs,Float:{10.0,10.0,25.0})
set_pev(ent,pev_size,Float:{-10.0,-10.0,0.0,10.0,10.0,25.0})
engfunc(EngFunc_SetSize,ent,Float:{-10.0,-10.0,0.0},Float:{10.0,10.0,25.0})

set_pev(ent,pev_solid,SOLID_BBOX)
set_pev(ent,pev_movetype,MOVETYPE_TOSS)

new Float:fOrigin[3]
IVecFVec(origin, fOrigin)
set_pev(ent, pev_origin, fOrigin)

set_pev(ent,pev_renderfx,kRenderFxGlowShell)

new Float:velocity[3];
pev(ent,pev_velocity,velocity);
velocity[2] = random_float(265.0,285.0);
set_pev(ent,pev_velocity,velocity)

switch(random_num(1,4))
{
case 1: set_pev(ent,pev_rendercolor,Float:{0.0,0.0,255.0})
case 2: set_pev(ent,pev_rendercolor,Float:{0.0,255.0,0.0})
case 3: set_pev(ent,pev_rendercolor,Float:{255.0,0.0,0.0})
case 4: set_pev(ent,pev_rendercolor,Float:{255.0,255.0,255.0})
}
}

public fwd_Touch(toucher, touched)
{
if (!is_user_alive(toucher) || !pev_valid(touched))
return FMRES_IGNORED

new classname[32]
pev(touched, pev_classname, classname, 31)

if (!equal(classname, item_class_name))
return FMRES_IGNORED

if(!zp_get_user_nemesis(toucher) && zp_is_nemesis_round() || !zp_get_user_survivor(toucher) && zp_is_survivor_round() || !zp_get_user_sniper(toucher) && zp_is_sniper_round() || !zp_get_user_assassin(toucher) && zp_is_assassin_round())
{
zp_give_user_ammo_packs(toucher, 20);
}
else
zp_give_user_ammo_packs(toucher, 2);

emit_sound(toucher, CHAN_AUTO, sound, 1.0, ATTN_NORM, 0, PITCH_NORM)
set_pev(touched, pev_effects, EF_NODRAW)
set_pev(touched, pev_solid, SOLID_NOT)

return FMRES_IGNORED
}

public fw_PlayerKilled(victim, attacker, shouldgib)
{
new origin[3]
get_user_origin(victim , origin)

addItem(origin)
}
Приветствую всех! Не могу разобраться в определенном участке кода. Суть плагина: с игроков при убийстве выпадает мешок с ammo, я немного переделал под свои нужды, выставил в каких случаях и сколько должно выпадать с мешка ammo. Проблема заключается в том, что при
Код:
if(!zp_get_user_nemesis(toucher) && zp_is_nemesis_round() || !zp_get_user_survivor(toucher) && zp_is_survivor_round() || !zp_get_user_sniper(toucher) && zp_is_sniper_round() || !zp_get_user_assassin(toucher) && zp_is_assassin_round())
выпадают мешки с игроков в 20 ammo, а должно быть (к примеру): режим Немезиды, убив Немезиду выпадает мешок с 20 ammo, Немезида убив человека выпадает мешок с 2 ammo. Прошу наставления на путь истинный :)
 
В этой теме было размещено решение! Перейти к решению.

Вложения

Сообщения
2,713
Реакции
2,995
Помог
59 раз(а)
И только в режиме Special-Round такие сладости валятся? или в целом, на протяжении игры?
Немезида убив человека
1) этот момент я не увидел где отлавливается. А, нигде :derisive: :pardon:.
По идее в моменте убийства - должно определяться кол-во AmmoPack в мешке.

2) Выноси в отдельную функцию код, который упростит тебе задачу по логическому решению.
К примеру:
Код:
public fwd_Touch(toucher, touched)
{
...
    zp_give_user_ammo_packs(toucher, GetAmmoBonusCount(toucher));
...
}

const COUNT_FOR_SPECIAL = 2;
const COUNT_FOR_PLAYERS = 20;
GetAmmoBonusCount(pPlayer)
{
    if(zp_is_nemesis_round() && !zp_get_user_nemesis(pPlayer)
        || (zp_is_survivor_round() && !zp_get_user_survivor(pPlayer))
        || (zp_is_sniper_round() && !zp_get_user_sniper(pPlayer))
        || (zp_is_assassin_round() && !zp_get_user_assassin(pPlayer))
    )
        return COUNT_FOR_PLAYERS;
    else
        return COUNT_FOR_SPECIAL;
}
 
Последнее редактирование:
Сообщения
452
Реакции
78
Помог
4 раз(а)
Код:
warning 209: function "GetAmmoBonusCount" should return a value
Всегда хотел узнать, как правильно убирать ошибку с return'om?
 
Сообщения
452
Реакции
78
Помог
4 раз(а)
wopox1337, твой пример выше
 
Последнее редактирование модератором:
Сообщения
2,713
Реакции
2,995
Помог
59 раз(а)
WILL_BE, странно. Убери тогда else. люблю этот компилятор
 
Сообщения
452
Реакции
78
Помог
4 раз(а)
завтра приду, проверю
 
Сообщения
452
Реакции
78
Помог
4 раз(а)
wopox1337, что твоя версия, что моя, различий в корректной работоспособности - 0 :)
14 Дек 2017
Видимо, некорректно указал ошибку: Если в режимах (к примеру Немезида), Немезида убьет человека, а другой человек подберет мешок, то ему выпадет 20 аммо, за место корректного 2.
 
Сообщения
452
Реакции
78
Помог
4 раз(а)
Я к этому и ввиду, что не знаю как правильно это сделать, и прошу помощи у куда более опытных :)
 
Сообщения
2,713
Реакции
2,995
Помог
59 раз(а)
WILL_BE, на моменте смерти определяй убийцу (человек или Немезида и прочее).

И передавай в функцию создания пакета инфу эту. На pev пакета, допустим pev_iuser4 выставляй кол-во аммопаков, которое содержит. На таче эту инфу используй.
 
Сообщения
452
Реакции
78
Помог
4 раз(а)
wopox1337, Если правильно понимаю, то в
Код:
fw_PlayerKilled
определяю кто убийца, далее в
Код:
fwd_Touch
показываю отлов кто убил,
а вот последнее про pev не понял.
 
Сообщения
2,713
Реакции
2,995
Помог
59 раз(а)
WILL_BE, ну, к примеру, в момент смерти можем узнать кто был убитым, и соответственно информацию передать в функцию добавления мешка на карту fn addItem()
Код:
public fw_PlayerKilled(victim, attacker, shouldgib)
{
    static Float: fOrigin[3];
    pev(victim, pev_origin, fOrigin);

    addItem(fOrigin, GetAmmoBonusCount(victim));
}

про pev не понял
Создание entity( для начинающих )
вот тут можешь ознакомиться с некоторым составом PEV (Private Entity Variable - приватная переменная у entity)
весь движок почти построен на pev, по отношению как миниум к entity. Каждая entity имеет свои данные, в которые мы имеем возможность:
  • Записывать (set_pev, set_pdata_*, entity_set_*, set_entvar, set_member);
  • Читать (pev, get_pdata_*, entity_get_*, get_entvar, get_member).
различными модулями по мере необходимости. Естественно, большинство данных entity были ранее созданы для Half-Life, позже портированы, и доработаны для мода Counter-Strike. Для entity игроков - большинство PEV заняты и используются.
Но, для созданной нами entity: (она имеет больший список PEV, из за наследования класса CBaseEntity)
Код:
new ent = fm_create_entity("info_target") // создаём entity класса "info_target"
много PEV свободных. Мы их и можем использовать под наши задачи, к примеру: хранение кол-ва AmmoPack'ов в пакете.
 
Последнее редактирование:
Сообщения
2,713
Реакции
2,995
Помог
59 раз(а)
ясно, видимо не осилил WILL_BE .

Вот код.

Код:
#include <amxmodx>
#include <amxmisc>
#include <fakemeta_util>
#include <zombie_plague_advance>
#include <hamsandwich>
#include <fakemeta>
// #include <engine>

const COUNT_FOR_SPECIAL = 2;
const COUNT_FOR_PLAYERS = 20;

#define zp_give_user_ammo_packs(%0,%1)    zp_set_user_ammo_packs(%0, zp_get_user_ammo_packs(%0) + %1)
const pev_ammocount = pev_iuser4;

#define PLUGIN "[ZPA] Addon: Kill Rewards"
#define VERSION "2.1"
#define AUTHOR "freelanser & WILL BE"

new const item_class_name[] = "zAmmoPack"

/* Here you can change the model */
new g_model[] = "models/pza_mok.mdl"

/* Here is the sound, when you take it */
new sound[]   =  { "pza_ammo_sound.wav" }

public plugin_precache()
{
    precache_model(g_model)
    precache_sound(sound)
}

public plugin_init()
{
    register_plugin(PLUGIN, VERSION, AUTHOR)

    register_forward(FM_Touch, "fwd_Touch")
    RegisterHam(Ham_Killed, "player", "fw_PlayerKilled")
     register_event("HLTV", "EVENT_round_start", "a", "1=0", "2=0")
}

public EVENT_round_start()
{
    deleteAllItems()
}

public deleteAllItems()
{
    new ent = FM_NULLENT
    static string_class[] = "classname"
    while((ent = engfunc(EngFunc_FindEntityByString, ent, string_class, item_class_name)))
        set_pev(ent, pev_flags, FL_KILLME)
}

public addItem(Float: fOrigin[3], AmmoCount)
{
    new ent = fm_create_entity("info_target")
    set_pev(ent, pev_classname, item_class_name)
 
    engfunc(EngFunc_SetModel,ent, g_model)

    set_pev(ent,pev_mins,Float:{-10.0,-10.0,0.0})
    set_pev(ent,pev_maxs,Float:{10.0,10.0,25.0})
    set_pev(ent,pev_size,Float:{-10.0,-10.0,0.0,10.0,10.0,25.0})
    engfunc(EngFunc_SetSize,ent,Float:{-10.0,-10.0,0.0},Float:{10.0,10.0,25.0})

    set_pev(ent,pev_solid,SOLID_BBOX)
    set_pev(ent,pev_movetype,MOVETYPE_TOSS)
 
    set_pev(ent, pev_origin, fOrigin)
    set_pev(ent, pev_ammocount, AmmoCount)
     
    set_pev(ent, pev_renderfx, kRenderFxGlowShell)

    static Float:velocity[3];
    pev(ent,pev_velocity,velocity);
    velocity[2] = random_float(265.0,285.0);
    set_pev(ent,pev_velocity,velocity)

    switch(random_num(1,4))
    {
        case 1: set_pev(ent,pev_rendercolor,Float:{0.0,0.0,255.0})
        case 2: set_pev(ent,pev_rendercolor,Float:{0.0,255.0,0.0})
        case 3: set_pev(ent,pev_rendercolor,Float:{255.0,0.0,0.0})
        case 4: set_pev(ent,pev_rendercolor,Float:{255.0,255.0,255.0})
    }
}

public fwd_Touch(toucher, touched)
{
    if (!is_user_alive(toucher) || !pev_valid(touched))
        return FMRES_IGNORED
 
    new classname[32]
    pev(touched, pev_classname, classname, charsmax(classname))

    if (!equal(classname, item_class_name))
        return FMRES_IGNORED

    zp_give_user_ammo_packs(toucher, pev(touched, pev_ammocount));

    emit_sound(toucher, CHAN_AUTO, sound, 1.0, ATTN_NORM, 0, PITCH_NORM)
    set_pev(touched, pev_effects, EF_NODRAW)
    set_pev(touched, pev_solid, SOLID_NOT)
     
    return FMRES_IGNORED
}

public fw_PlayerKilled(victim, attacker, shouldgib)
{
    static Float: fOrigin[3];
    pev(victim, pev_origin, fOrigin);

    addItem(fOrigin, GetAmmoBonusCount(victim));
}

GetAmmoBonusCount(pPlayer)
{
    if(zp_is_nemesis_round() && !zp_get_user_nemesis(pPlayer)
        || (zp_is_survivor_round() && !zp_get_user_survivor(pPlayer))
        || (zp_is_sniper_round() && !zp_get_user_sniper(pPlayer))
        || (zp_is_assassin_round() && !zp_get_user_assassin(pPlayer))
    )
        return COUNT_FOR_PLAYERS;
    else
        return COUNT_FOR_SPECIAL;



    /* if(zp_is_nemesis_round() && !zp_get_user_nemesis(pPlayer)
        return COUNT_FOR_PLAYERS;
 
    if(zp_is_survivor_round() && !zp_get_user_survivor(pPlayer))
        return COUNT_FOR_PLAYERS;
 
    if(zp_is_sniper_round() && !zp_get_user_sniper(pPlayer))
        return COUNT_FOR_PLAYERS;
 
    if(zp_is_assassin_round() && !zp_get_user_assassin(pPlayer))
        return COUNT_FOR_PLAYERS
 
    else return COUNT_FOR_SPECIAL; */

}
 
Последнее редактирование:
Сообщения
452
Реакции
78
Помог
4 раз(а)
wopox1337, совсем забыл про тему, здоровьем занялся, благодарю.
 
Статус
В этой теме нельзя размещать новые ответы.

Пользователи, просматривающие эту тему

Сейчас на форуме нет ни одного пользователя.
Сверху Снизу