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.


Dodatki SourceMod















