Błędy z Ham_TakeDamage
Hagis
07.01.2014
Witam.
Napisałem sobie dość skomplikowany plugin wzorując się na innych pluginach, szczególnie na silniku Cod Mod by QTM_Peyote.
Plugin jest przystosowany do serwera zombiemod z exp modem. Jego działanie jest proste:
Za exp można kupić bonus. Po zakupie exp się traci, a bonus zapisuje. Zapis do nVault.
Każdy bonus jest oddzielnym pluginem i ma budowę bardzo podobną, a może nawet taką samą jak perki, czy klasy do Cod Moda.
Oto jeden z bonusów:
/* Plugin generated by AMXX-Studio */ #include <amxmodx> #include <amxmisc> #include <expbonuses> #include <zombieplague> #include <hamsandwich> #include <fun> #define PLUGIN "" #define VERSION "0.1" #define AUTHOR "Hagis" #define CHANCE 2 new const nazwa[] = "Instant"; new const koszt = 47000; new const druzyny[] = "Zombie"; new const opis[] = "Szansa na natychmiastowe zarazanie." new ma_item[33]; public plugin_init() { register_plugin( nazwa, VERSION, AUTHOR ); expbonus_register_item( nazwa, koszt ,opis, druzyny ); RegisterHam(Ham_TakeDamage, "player", "TakeDamage") } public expbonus_item_activate(id) { ma_item[id] = true; } public expbonus_item_deactivate(id) { ma_item[id] = false; } public TakeDamage(this, idinflictor, idattacker, Float:damage, damagebits) { if(!ma_item[idattacker] || !zp_get_user_zombie(idattacker) || zp_get_user_nemesis(idattacker)) return; if( zp_is_swarm_round() || zp_is_plague_round() ) return; if(random(CHANCE) == 0) zp_infect_user(this, idattacker, 0, 1) }
Oto, co wypisuje się w logu z errorami:
L 01/07/2014 - 17:20:41: [AMXX] Run time error 4 (plugin "bonusexp_Instant.amxx") - debug not enabled! L 01/07/2014 - 17:20:41: [AMXX] To enable debug mode, add "debug" after the plugin name in plugins.ini (without quotes).
Tak dzieje się z każdym bonusem, który zawiera RegisterHam(Ham_TakeDamage, "player", "TakeDamage")
Gdy edytują wartość damage (np. podwajam dmg), to korzystam z budowy:
#define CHANCE 15 #define BONUS 2.0 { ... } public TakeDamage(this, idinflictor, idattacker, Float:damage, damagebits) { if( !(0 < idattacker < 33) ) return if( !is_user_connected(idattacker) || !ma_item[idattacker] || zp_get_user_zombie(idattacker)) return if(random(CHANCE) == 0) { expbonus_message(idattacker, "Krytyczne uderzenie!") new Float:obrazenia = damage * BONUS; SetHamParamFloat(4, obrazenia); } return }
Jak ustawię post na 0, to sytuacja nie zmienia się. Gdzie popełniam błąd?
Wcześniej zamiast nowej wartości Float:obrazenia po prostu pisałem
damage *= Bonus;
SetHamParamFloat(4, damage);
Później zmieniłem kod dodając nową zmienną, ale obawiam się, że to też nic nie daje.
FORMOZA
07.01.2014
zamiast tych samych return w tym:
public TakeDamage(this, idinflictor, idattacker, Float:damage, damagebits)
{
if( !(0 < idattacker < 33) )
return
if( !is_user_connected(idattacker) || !ma_item[idattacker] || zp_get_user_zombie(idattacker))
return
if(random(CHANCE) == 0)
{
expbonus_message(idattacker, "Krytyczne uderzenie!")
new Float:obrazenia = damage * BONUS;
SetHamParamFloat(4, obrazenia);
}
return
}
Daj
return HAM_IGNORED;
K!113r
07.01.2014
Ktoś mnie uprzedził o 5 sekund... dodam jedynie, że jeśli masz:
L 01/07/2014 - 17:20:41: [AMXX] Run time error 4 (plugin "bonusexp_Instant.amxx") - debug not enabled!
L 01/07/2014 - 17:20:41: [AMXX] To enable debug mode, add "debug" after the plugin name in plugins.ini (without quotes).
To znak, że coś nie działa, aby poznać szczegóły dopisujesz "debug" po nazwie pluginu w plugins.ini, np.:
plałdżin.amxx debug
dzięki temu pomożesz w diagnozowaniu błędu w kodzie.