Иконка ресурса

[ZP 4.3] Addon: Anti-Armor For First Zombie 2023-01-22

Нет прав для скачивания
Сообщения
327
Реакции
289
Помог
9 раз(а)
C++:
#include <AmxModX>
#include <ZombiePlague>
#include <ReApi>

const ZombieCount = 2;    // Количество зомби, при котором функция не будут работать.

public plugin_init() {

    RegisterHookChain(RG_CBasePlayer_TakeDamage, "CBasePlayer_TakeDamage", true);
}

public CBasePlayer_TakeDamage(iVictim, iInflictor, iAttacker, Float:flDamage, bitsDamageType) {
    if(zp_get_zombie_count() >= ZombieCount)
    // || zp_get_user_last_human(iVictim)
    //а последнего человека нельзя с одного удара заразить?    в описании это не указано
        return;

    if(zp_get_user_first_zombie(iAttacker)) {
        rg_set_user_armor(iVictim, 0, ARMOR_NONE);
        //ExecuteHamB(Ham_TakeDamage, iVictim, iInflictor, iAttacker, flDamage, bitsDamageType);
        //если поствить плагин выше плагина мода, то в мод придёт значение pev_armorvalue = ARMOR_NONE, и будет заражение сразу,
        //т.к. return HAM_SUPERCEDE там будет только при pev_armorvalue > 0
    }
}
Разве не так?
 
Сообщения
857
Реакции
144
Помог
25 раз(а)
//ExecuteHamB(Ham_TakeDamage, iVictim, iInflictor, iAttacker, flDamage, bitsDamageType); //если поствить плагин выше плагина мода, то в мод придёт значение pev_armorvalue = ARMOR_NONE, и будет заражение сразу, //т.к. return HAM_SUPERCEDE там будет только при pev_armorvalue > 0
Не знал про такое. Спасибо за наводку.
 
Сообщения
857
Реакции
144
Помог
25 раз(а)
zhorzh78, проверил, не хочет работать без хамовского тейк демеджа.

Вобщем, похоже хамовский тейк демедж через ExecuteHam все таки нужен, иначе просто не видит, что зомби наносит урон. Мб только у меня такой баг. Хз. Урон по факту проходит только по последнему игрока, то есть, когда отнимается хп. По этому и нужен хам.
 
Последнее редактирование:
Сообщения
935
Реакции
186
Помог
4 раз(а)
ImmortalAmxx, в pre отлавливал? Потому что в чистом 4.3 в pre выставляются все значения для урона
 
Сообщения
173
Реакции
5
Что-то часто появлялась ошибка:
C++:
L 03/28/2023 - 05:52:31: [AMXX] Displaying debug trace (plugin "zp43_first_zombie_antiarmor.amxx", version "1.4")
L 03/28/2023 - 05:52:31: [AMXX] Run time error 3: stack error
Попробовал сделать так:
C++:
#include <AmxModX>
#include <ZombiePlague>
#include <HamSandWich>
#include <ReApi>

const ZombieCount = 2; // Количество зомби, при котором функция не будет работать.
new bool:g_IsDamageHooked = false;

public plugin_init() {
    register_plugin("[ZPA]: Anti-Armor", "1.4", "ImmortalAmxx");
    RegisterHookChain(RG_CBasePlayer_TakeDamage, "CBasePlayer_TakeDamage", true);
}

public CBasePlayer_TakeDamage(iVictim, iInflictor, iAttacker, float:flDamage, bitsDamageType) {

    if (!is_user_connected(iAttacker) || g_IsDamageHooked || !is_user_connected(iVictim) || zp_get_zombie_count() >= ZombieCount || zp_get_user_last_human(iVictim))
        return;
       
    if (zp_get_user_first_zombie(iAttacker)) {
        g_IsDamageHooked = true;
        rg_set_user_armor(iVictim, 0, ARMOR_NONE);
        ExecuteHamB(Ham_TakeDamage, iVictim, iInflictor, iAttacker, flDamage, bitsDamageType);
        g_IsDamageHooked = false;
    }
}
Тестируем уже более 4-х дней, полёт нормальный.
 
Сообщения
953
Реакции
51
Помог
10 раз(а)
SlovePRO, эта ошибка связана с памятью, а не достаточно этого?

Код:
--RegisterHookChain(RG_CBasePlayer_TakeDamage, "CBasePlayer_TakeDamage", true);
++RegisterHookChain(RG_CBasePlayer_TakeDamage, "CBasePlayer_TakeDamage");

--ExecuteHamB(Ham_TakeDamage, iVictim, iInflictor, iAttacker, flDamage, bitsDamageType);
 
Последнее редактирование:

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

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