←  Pytania

AMXX.pl: Support AMX Mod X i SourceMod

»

Błędy z Ham_TakeDamage

  • +
  • -
Hagis - zdjęcie 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.

 

Odpowiedz

  • +
  • -
FORMOZA - zdjęcie 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;
Odpowiedz

  • +
  • -
K!113r - zdjęcie 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.

Odpowiedz