Скриптер
Участник
Пользователь
- Сообщения
- 102
- Реакции
- 77
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
Награда за убийство зомби.
#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
}
}
}
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)
Заменить case на этот:На чистой версии без каких либо доп. плагинов при взрыве хае около зомби появляется ошибка, иногда сервер падает
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(граната поджигает зомби) при взрыве зомби не получают урона, но при горение урон наносится, сервер не падает и ошибок нет
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;
}
Ломаю голову как вшить этот плагин в основной мод,чтобы все по кварам было, это реально вообще?Код:#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 } } }
C++
Так проще через квары, зашел сменил цифру и все) поэтому и спросил реально или нетMaloi, что мешает просто использовать апи и использовать отдельный плагин?
В старом био такой плагин был в самом моде и редактировался кварами, захотелось сделать так же, но не получаетсяMaloi, а как связано вшить в мод (что я не рекомендую делать) и добавить квар в плагине?
так и делал, даже плагин скомпилировался, потом начинаю играть, убиваю зм, и сервер прилег поспать)Maloi, Нужно лишь добавить квар, по аналогии других кваров.
Спасибо большое))