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

ZMB 0.1.2

Нет прав для скачивания
Сообщения
102
Реакции
77
После
Код:
public HC_CBasePlayer_TraceAttack_Pre(const iVictim, const iAttacker, Float: fDamage, Float: fDirection[3])    {
написать
log_amx("[0 Damage Pre] %f", fDamage);
и в конце этой же функции, перед
Код:
    return HC_CONTINUE;
}
написать
log_amx("[0 Damage Post] %f", fDamage);
 
Сообщения
317
Реакции
131
Помог
4 раз(а)
Я для себя немного переделывал, но это не из за моих правок
Код:
public HC_CBasePlayer_TraceAttack_Pre(const iVictim, const iAttacker, Float: fDamage, Float: fDirection[3])    {
    log_amx("[0 Damage Pre] %f", fDamage);
    if(!(g_bInfectionBegan))
    {
        SetHookChainReturn(ATYPE_INTEGER, 0);
       
        return HC_SUPERCEDE;
    }

    if(IsSetBit(gp_iBit[BIT_ZOMBIE], iAttacker) && IsSetBit(gp_iBit[BIT_HUMAN], iVictim))
    {
        static Float: fArmor; fArmor = get_entvar(iVictim, var_armorvalue);
       
        //if(fArmor > 0.0)
        if(g_iAliveHumans == 1 && fArmor > 0.0)
        {
            if(g_infoZombieClass[gp_iClass[iAttacker]][CLASS_FACTOR_DAMAGE])
            {
                fDamage *= g_infoZombieClass[gp_iClass[iAttacker]][CLASS_FACTOR_DAMAGE];
            }
           
            fArmor -= fDamage;
           
            set_entvar(iVictim, var_armorvalue, fArmor);
        }
        else
        {
            if(g_iAliveHumans == 1)
            {
                SetHookChainArg(3, ATYPE_FLOAT, fDamage);
               
                return HC_CONTINUE;
            }
            else
            {
                setPlayerInfect(iVictim);

                set_entvar(iAttacker, var_frags, get_entvar(iAttacker, var_frags) + 1);
                /*
                if(g_iCvar_GiveHealthIntected > 0)
                {
                    new Float: fHealth = get_entvar(iAttacker, var_health);
                   
                    if(fHealth + g_iCvar_GiveHealthIntected > g_infoZombieClass[gp_iClass[iAttacker]][CLASS_HEALTH])
                    {
                        set_entvar(iAttacker, var_health, g_infoZombieClass[gp_iClass[iAttacker]][CLASS_HEALTH]);
                    }
                    else
                    {
                        set_entvar(iAttacker, var_health, fHealth + g_infoZombieClass[gp_iClass[iAttacker]][CLASS_HEALTH]);
                    }
                }*/
            }
        }
       
        SetHookChainArg(3, ATYPE_FLOAT, 0.0);

        return HC_CONTINUE;
    }
   
    if(IsSetBit(gp_iBit[BIT_HUMAN], iAttacker) && IsSetBit(gp_iBit[BIT_ZOMBIE], iVictim))
    {
        if(g_bCvar_StateKnockbackSitZombie)
        {
            static iFlags; iFlags = get_entvar(iVictim, var_flags);
           
            if(iFlags & FL_ONGROUND && iFlags & FL_DUCKING)
            {
                return HC_CONTINUE;
            }
        }
       
        static Float: fOriginHuman[3], Float: fOriginZombie[3];
       
        get_entvar(iVictim, var_origin, fOriginZombie);
        get_entvar(iAttacker, var_origin, fOriginHuman);
       
        if(get_distance_f(fOriginHuman, fOriginZombie) > g_fCvar_MaxDistanceKnockback)
        {
            return HC_CONTINUE;
        }
       
        static Float: fVelocity[3], Float: fVelocityZ;
        get_entvar(iVictim, var_velocity, fVelocity);
       
        fVelocityZ = fVelocity[2];

        static Float: fFactorDirection = 0.0;

        fFactorDirection = getPlayerActiveWeaponKnockback(iAttacker);

        if(fFactorDirection)
        {
            UTIL_VecMulScalar(fDirection, fDamage, fDirection);
            UTIL_VecMulScalar(fDirection, fFactorDirection, fDirection);
           
            if(g_infoZombieClass[gp_iClass[iVictim]][CLASS_KNOCKBACK])
            {
                UTIL_VecMulScalar(fDirection, g_infoZombieClass[gp_iClass[iVictim]][CLASS_KNOCKBACK], fDirection);
            }

            UTIL_VecAdd(fDirection, fVelocity, fVelocity);

            fDirection[2] = fVelocityZ;
           
            set_entvar(iVictim, var_velocity, fVelocity);
        }
    }
    log_amx("[0 Damage Post] %f", fDamage);
    return HC_CONTINUE;
}

Код:
L 09/16/2018 - 18:11:40: [zmb_core.amxx] [0 Damage Pre] 31.000000
L 09/16/2018 - 18:11:40: [zmb_core.amxx] [0 Damage Post] 31.000000
L 09/16/2018 - 18:11:46: [zmb_core.amxx] [0 Damage Pre] 31.000000
L 09/16/2018 - 18:11:46: [zmb_core.amxx] [0 Damage Post] 31.000000
L 09/16/2018 - 18:11:50: [zmb_core.amxx] [0 Damage Pre] 31.000000
L 09/16/2018 - 18:11:50: [zmb_core.amxx] [0 Damage Post] 31.000000
L 09/16/2018 - 18:11:51: [zmb_core.amxx] [0 Damage Pre] 31.000000
L 09/16/2018 - 18:11:51: [zmb_core.amxx] [0 Damage Post] 31.000000
L 09/16/2018 - 18:11:51: [zmb_core.amxx] [0 Damage Pre] 31.000000
L 09/16/2018 - 18:11:51: [zmb_core.amxx] [0 Damage Post] 31.000000
L 09/16/2018 - 18:11:59: [zmb_core.amxx] [0 Damage Pre] 31.000000
L 09/16/2018 - 18:11:59: [zmb_core.amxx] [0 Damage Post] 31.000000
L 09/16/2018 - 18:11:59: [zmb_core.amxx] [0 Damage Pre] 31.000000
L 09/16/2018 - 18:11:59: [zmb_core.amxx] [0 Damage Post] 31.000000
16 Сен 2018
Стрелял с м4 во все части тела
 
Сообщения
2,751
Реакции
3,014
Помог
61 раз(а)
TraceAtttack &TakeDamage дают разный результат fDamage. Ибо одна из функций и нет просчёт брони и частей тела а так же пробиваемости.
 
Сообщения
317
Реакции
131
Помог
4 раз(а)
Награда за убийство зомби.
Код:
#include <amxmodx>
#include <zmb>
#include <reapi>

#define KILL_BONUS 2
    // 1 - гранату 'HE'
    // 2 - все гранаты 2 FLASH, 1 HE, 1 SMOKE

public plugin_init()
{
    register_plugin("ZMB kill bouns","0.1","alabamaster1337");

    RegisterHookChain(RG_CBasePlayer_Killed, "HC_CBasePlayer_Killed_Post", true);
}

public HC_CBasePlayer_Killed_Post (iVictim, iAttacker)
{
    if(is_user_zombie(iVictim))
    {
        if(is_user_human(iAttacker))
        {
            #if defined KILL_BONUS
                #if KILL_BONUS == 1
                    rg_give_item(iAttacker, "weapon_hegrenade");
                #endif
                #if KILL_BONUS == 2
                    rg_give_item(iAttacker, "weapon_flashbang");
                    rg_give_item(iAttacker, "weapon_flashbang");
                    rg_give_item(iAttacker, "weapon_hegrenade");
                    rg_give_item(iAttacker, "weapon_smokegrenade");
                #endif
            #endif
        }
    }
}
18 Сен 2018
81x08, еще кстати урон от гранат не наносится, урон не показывается в статистике(/me /top15 и т.д.) всегда 0 dmg, и на картах(типа zm_303, zm_deko2) где есть вода которая наносит dmg, наносит dmg только людям, зомби спокойно бегают
 
Сообщения
317
Реакции
131
Помог
4 раз(а)
На чистой версии без каких либо доп. плагинов при взрыве хае около зомби появляется ошибка, иногда сервер падает

Код:
L 09/20/2018 - 09:40:56: [ReAPI] SetHookChainArg: invalid argument type provided.
L 09/20/2018 - 09:40:56: [AMXX] Displaying debug trace (plugin "zmb_core_def.amxx", version "0.1.2")
L 09/20/2018 - 09:40:56: [AMXX] Run time error 10: native error (native "SetHookChainArg")
L 09/20/2018 - 09:40:56: [AMXX]    [0] zmb_core_def.sma::HC_CBasePlayer_TakeDamage_Pre (line 1609)
С плагином bio_napalm(граната поджигает зомби) при взрыве зомби не получают урона, но при горение урон наносится, сервер не падает и ошибок нет
 
Сообщения
102
Реакции
77
На чистой версии без каких либо доп. плагинов при взрыве хае около зомби появляется ошибка, иногда сервер падает
Заменить case на этот:
C++:
            case DMG_GRENADE:
            {
                if(g_infoZombieClass[gp_iClass[iVictim]][CLASS_HEDEFENCE])
                {
                    fDamage *= g_infoZombieClass[gp_iClass[iVictim]][CLASS_HEDEFENCE];
                    
                    SetHookChainArg(3, ATYPE_FLOAT, fDamage);
                    
                    return HC_SUPERCEDE;
                }
            }
С плагином bio_napalm(граната поджигает зомби) при взрыве зомби не получают урона, но при горение урон наносится, сервер не падает и ошибок нет
:dntknw:
 
Сообщения
317
Реакции
131
Помог
4 раз(а)
81x08, больше логов
стрелял с м4 в голову по зм и людям

Код:
zm m4 hs
L 09/21/2018 - 09:41:22: [zmb_core_test.amxx] HC_CBasePlayer_TraceAttack_Pre 1: 31.000000
L 09/21/2018 - 09:41:22: [zmb_core_test.amxx] HC_CBasePlayer_TraceAttack_Pre 2: 31.000000
L 09/21/2018 - 09:41:22: [zmb_core_test.amxx] HC_CBasePlayer_TraceAttack_Pre 8: 31.000000
L 09/21/2018 - 09:41:22: [zmb_core_test.amxx] HC_CBasePlayer_TraceAttack_Pre 9: 31.000000
L 09/21/2018 - 09:41:22: [zmb_core_test.amxx] HC_CBasePlayer_TraceAttack_Pre 10: 31.000000
L 09/21/2018 - 09:41:22: [zmb_core_test.amxx] HC_CBasePlayer_TraceAttack_Pre 11: 31.000000
L 09/21/2018 - 09:41:22: [zmb_core_test.amxx] HC_CBasePlayer_TakeDamage_Pre 1: 31.000000
L 09/21/2018 - 09:41:22: [zmb_core_test.amxx] HC_CBasePlayer_TakeDamage_Pre 2: 31.000000
L 09/21/2018 - 09:41:22: [zmb_core_test.amxx] HC_CBasePlayer_TakeDamage_Pre 3: 31.000000
human m4 hs
L 09/21/2018 - 09:42:05: [zmb_core_test.amxx] HC_CBasePlayer_TraceAttack_Pre 1: 31.000000
L 09/21/2018 - 09:42:05: [zmb_core_test.amxx] HC_CBasePlayer_TraceAttack_Pre 2: 31.000000
L 09/21/2018 - 09:42:05: [zmb_core_test.amxx] HC_CBasePlayer_TraceAttack_Pre 11: 31.000000
L 09/21/2018 - 09:42:05: [zmb_core_test.amxx] HC_CBasePlayer_TakeDamage_Pre 1: 124.000000
L 09/21/2018 - 09:42:05: [zmb_core_test.amxx] HC_CBasePlayer_TakeDamage_Pre 2: 124.000000
L 09/21/2018 - 09:42:05: [zmb_core_test.amxx] HC_CBasePlayer_TakeDamage_Pre 3: 124.000000
Код:
public HC_CBasePlayer_TakeDamage_Pre(const iVictim, const iWeaponId, const iAttacker, Float: fDamage, const bitsDamageType)    {
    log_amx("HC_CBasePlayer_TakeDamage_Pre 1: %f", fDamage);
    if(IsSetBit(gp_iBit[BIT_ZOMBIE], iVictim))
    {
        switch(bitsDamageType)
        {
            case DMG_FALL:
            {
                if(g_bCvar_GetZombieDamageFalling)
                {
                    SetHookChainReturn(ATYPE_INTEGER, 0);
                    
                    return HC_SUPERCEDE;
                }
            }
            case DMG_GRENADE:
            {
                if(g_infoZombieClass[gp_iClass[iVictim]][CLASS_HEDEFENCE])
                {
                    fDamage *= g_infoZombieClass[gp_iClass[iVictim]][CLASS_HEDEFENCE];
                    
                    SetHookChainArg(3, ATYPE_FLOAT, fDamage);
                    
                    return HC_SUPERCEDE;
                }
            }
        }
    }
    log_amx("HC_CBasePlayer_TakeDamage_Pre 2: %f", fDamage);
    if(IsSetBit(gp_iBit[BIT_HUMAN], iVictim) && iVictim == iAttacker)
    {
        if(bitsDamageType == DMG_GRENADE)
        {
            if(!(g_bInfectionBegan))
            {
                SetHookChainReturn(ATYPE_INTEGER, 0);
                
                return HC_SUPERCEDE;
            }
            
            if(!(g_bCvar_GetHumansDamageGrenade))
            {
                SetHookChainReturn(ATYPE_INTEGER, 0);
                
                return HC_SUPERCEDE;
            }
        }
    }
    log_amx("HC_CBasePlayer_TakeDamage_Pre 3: %f", fDamage);
    return HC_CONTINUE;
}
Код:
public HC_CBasePlayer_TraceAttack_Pre(const iVictim, const iAttacker, Float: fDamage, Float: fDirection[3])    {
    log_amx("HC_CBasePlayer_TraceAttack_Pre 1: %f", fDamage);
    if(!(g_bInfectionBegan))
    {
        SetHookChainReturn(ATYPE_INTEGER, 0);
        
        return HC_SUPERCEDE;
    }
    log_amx("HC_CBasePlayer_TraceAttack_Pre 2: %f", fDamage);
    if(IsSetBit(gp_iBit[BIT_ZOMBIE], iAttacker) && IsSetBit(gp_iBit[BIT_HUMAN], iVictim))
    {
        static Float: fArmor; fArmor = get_entvar(iVictim, var_armorvalue);
        
        if(fArmor > 0.0)
        {
            if(g_infoZombieClass[gp_iClass[iAttacker]][CLASS_FACTOR_DAMAGE])
            {
                fDamage *= g_infoZombieClass[gp_iClass[iAttacker]][CLASS_FACTOR_DAMAGE];
            }
            
            fArmor -= fDamage;
            
            set_entvar(iVictim, var_armorvalue, fArmor);
        }
        else
        {    log_amx("HC_CBasePlayer_TraceAttack_Pre 3: %f", fDamage);
            if(g_iAliveHumans == 1)
            {
                SetHookChainArg(3, ATYPE_FLOAT, fDamage);
                
                return HC_CONTINUE;
            }
            else
            {    log_amx("HC_CBasePlayer_TraceAttack_Pre 4: %f", fDamage);
                setPlayerInfect(iVictim);

                set_entvar(iAttacker, var_frags, get_entvar(iAttacker, var_frags) + 1);
                
                if(g_iCvar_GiveHealthIntected > 0)
                {
                    new Float: fHealth = get_entvar(iAttacker, var_health);
                    log_amx("HC_CBasePlayer_TraceAttack_Pre 5: %f", fDamage);
                    if(fHealth + g_iCvar_GiveHealthIntected > g_infoZombieClass[gp_iClass[iAttacker]][CLASS_HEALTH])
                    {
                        set_entvar(iAttacker, var_health, g_infoZombieClass[gp_iClass[iAttacker]][CLASS_HEALTH]);
                    }
                    else
                    {    log_amx("HC_CBasePlayer_TraceAttack_Pre 6: %f", fDamage);
                        set_entvar(iAttacker, var_health, fHealth + g_infoZombieClass[gp_iClass[iAttacker]][CLASS_HEALTH]);
                    }
                }
            }
        }
        log_amx("HC_CBasePlayer_TraceAttack_Pre 7: %f", fDamage);
        SetHookChainArg(3, ATYPE_FLOAT, 0.0);
        return HC_CONTINUE;
    }
    
    if(IsSetBit(gp_iBit[BIT_HUMAN], iAttacker) && IsSetBit(gp_iBit[BIT_ZOMBIE], iVictim))
    {    log_amx("HC_CBasePlayer_TraceAttack_Pre 8: %f", fDamage);
        if(g_bCvar_StateKnockbackSitZombie)
        {
            static iFlags; iFlags = get_entvar(iVictim, var_flags);
            
            if(iFlags & FL_ONGROUND && iFlags & FL_DUCKING)
            {
                return HC_CONTINUE;
            }
        }
        
        static Float: fOriginHuman[3], Float: fOriginZombie[3];
        
        get_entvar(iVictim, var_origin, fOriginZombie);
        get_entvar(iAttacker, var_origin, fOriginHuman);
        log_amx("HC_CBasePlayer_TraceAttack_Pre 9: %f", fDamage);
        if(get_distance_f(fOriginHuman, fOriginZombie) > g_fCvar_MaxDistanceKnockback)
        {
            return HC_CONTINUE;
        }
        
        static Float: fVelocity[3], Float: fVelocityZ;
        get_entvar(iVictim, var_velocity, fVelocity);
        
        fVelocityZ = fVelocity[2];

        static Float: fFactorDirection = 0.0;

        fFactorDirection = getPlayerActiveWeaponKnockback(iAttacker);
        log_amx("HC_CBasePlayer_TraceAttack_Pre 10: %f", fDamage);
        if(fFactorDirection)
        {
            UTIL_VecMulScalar(fDirection, fDamage, fDirection);
            UTIL_VecMulScalar(fDirection, fFactorDirection, fDirection);
            
            if(g_infoZombieClass[gp_iClass[iVictim]][CLASS_KNOCKBACK])
            {
                UTIL_VecMulScalar(fDirection, g_infoZombieClass[gp_iClass[iVictim]][CLASS_KNOCKBACK], fDirection);
            }

            UTIL_VecAdd(fDirection, fVelocity, fVelocity);

            fDirection[2] = fVelocityZ;
            
            set_entvar(iVictim, var_velocity, fVelocity);
        }
    }    log_amx("HC_CBasePlayer_TraceAttack_Pre 11: %f", fDamage);

    return HC_CONTINUE;
}
 
Сообщения
102
Реакции
77
alabamaster1337, Надо бы на своём протестить.
Скинь дамагер, и если есть телеграм, то и логин тоже (в ЛС можно). Как будет время напишу, протестим.
 
Сообщения
14
Реакции
4
Код:
#include <amxmodx>
#include <zmb>
#include <reapi>

#define KILL_BONUS 2
    // 1 - гранату 'HE'
    // 2 - все гранаты 2 FLASH, 1 HE, 1 SMOKE

public plugin_init()
{
    register_plugin("ZMB kill bouns","0.1","alabamaster1337");

    RegisterHookChain(RG_CBasePlayer_Killed, "HC_CBasePlayer_Killed_Post", true);
}

public HC_CBasePlayer_Killed_Post (iVictim, iAttacker)
{
    if(is_user_zombie(iVictim))
    {
        if(is_user_human(iAttacker))
        {
            #if defined KILL_BONUS
                #if KILL_BONUS == 1
                    rg_give_item(iAttacker, "weapon_hegrenade");
                #endif
                #if KILL_BONUS == 2
                    rg_give_item(iAttacker, "weapon_flashbang");
                    rg_give_item(iAttacker, "weapon_flashbang");
                    rg_give_item(iAttacker, "weapon_hegrenade");
                    rg_give_item(iAttacker, "weapon_smokegrenade");
                #endif
            #endif
        }
    }
}
Ломаю голову как вшить этот плагин в основной мод,чтобы все по кварам было, это реально вообще?
 

d3m37r4

111111
Сообщения
1,449
Реакции
1,175
Помог
10 раз(а)
Maloi, что мешает просто использовать апи и использовать отдельный плагин?
 

SAM

Сообщения
47
Реакции
-29
Помог
3 раз(а)
alabamaster1337, так че там же логирование идет вот и записывает че не так?
 
Сообщения
1,420
Реакции
2,511
Помог
58 раз(а)
Maloi, а как связано вшить в мод (что я не рекомендую делать) и добавить квар в плагине?
 
Сообщения
14
Реакции
4
Maloi, а как связано вшить в мод (что я не рекомендую делать) и добавить квар в плагине?
В старом био такой плагин был в самом моде и редактировался кварами, захотелось сделать так же, но не получается
 
Сообщения
209
Реакции
28
Помог
8 раз(а)
Maloi, отдельный плагин, если там есть квары, можно вписать в кфг мода и менять значение..
 
Сообщения
102
Реакции
77
Maloi, Нужно лишь добавить квар, по аналогии других кваров.
И при убийстве добавить пару условий.
 
Сообщения
1,420
Реакции
2,511
Помог
58 раз(а)
Maloi, стоит создать тему в разделе "Вопросы по созданию и модификации" со своими попытками.
 

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

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