←  Prośby o modyfikację

AMXX.pl: Support AMX Mod X i SourceMod

»

Zombie Plague Advance
Jak dodać dodatkowe obrażenia dla klasy

  • +
  • -
lexar - zdjęcie lexar 07.05.2014

Witam

Używam pluginu klasy ludzi na swoim zm i chciałbym dodać do wojownika ciemności dodatkowe obrażenia z każdej broni. Jak to zrobić?

 

Pozdrawiam

Odpowiedz

  • +
  • -
VertekS - zdjęcie VertekS 07.05.2014

Kod z dokumentacji (funkcja SetHamParamFloat:

Spoiler

W plugin init rejestrujesz odpowiednie zdarzenie poprzez RegisterHam - typu Ham_TakeDamage. Następnie w funkcji podanej w parametrze callback (fw_HamPlayerTakeDamage) modyfikujesz zdarzenie w locie poprzez którąś funkcję typu SetHamParam. W tym przypadku chcesz zmienić czwarty parametr zdarzenia Ham_TakeDamage (Float:damage) na wartość 1.0.

Odpowiedz

  • +
  • -
lexar - zdjęcie lexar 07.05.2014

Próbowałem dodać tą funkcje do klasy ale wyskakuje error zamieszczę sma

Załączone pliki

Odpowiedz

  • +
  • -
VertekS - zdjęcie VertekS 07.05.2014

Spoiler

Obrażenia zadawane przez gracza z klasą wojownik ciemności obecnie są zwiększone dwukrotnie, wartość zmieniasz tutaj:

SetHamParamFloat(4, damage * 2.0)

Po damage może być tez inne działanie matematyczne (na przykład dodawanie), jednak liczba, o którą jest zmieniona wartość obrażeń, musi być liczbą zmiennoprzecinkową (to znaczy mieć przecinek - tak jak ta wyżej). Sama liczba 2 nie przejdzie, musi to być koniecznie 2.0.

Załączone pliki

  • Załączony plik  ludzie.sma   5,06 KB   110 Ilość pobrań
Odpowiedz

  • +
  • -
lexar - zdjęcie lexar 08.05.2014

Dzięki działa ;)

Odpowiedz

  • +
  • -
lexar - zdjęcie lexar 09.05.2014

Plugin działa ale sypie errorami :/

 

[AMXX] Run time error 4: index out of bounds 
L 05/09/2014 - 22:06:52: [AMXX]    [0] klasy_ludzi.sma::fwHamPlayerTakeDamage (line 27)
 
Odpowiedz

  • +
  • -
VertekS - zdjęcie VertekS 10.05.2014

Spoiler

W jakich sytuacjach plugin powiadamia o błędach? Używasz pluginów typu Sentry Gun?

Załączone pliki

Odpowiedz

  • +
  • -
Drago36 - zdjęcie Drago36 10.05.2014

VertekS error pewnie wywala dlatego, gdyż nie ma warunku is_user_connected/alive. ;)

Więc zamiast tego:

public fwHamPlayerTakeDamage(id, inflictor, attacker, Float:damage, damagebits){
	if ( !(1 <= attacker <= max_players) )
		return HAM_IGNORED
		
	if(ma_klase[attacker] == 7 && !zp_get_user_zombie(attacker) || !zp_get_user_nemesis(attacker) || !zp_get_user_survivor(attacker))
		SetHamParamFloat(4, damage * 2.0)
		
	return HAM_IGNORED
}

Daj:

public fwHamPlayerTakeDamage(id, inflictor, attacker, Float:damage, damagebits){
	if(!is_user_connected(attacker))
		return HAM_IGNORED
		
	if(ma_klase[attacker] == 7 && !zp_get_user_zombie(attacker) || !zp_get_user_nemesis(attacker) || !zp_get_user_survivor(attacker))
		SetHamParamFloat(4, damage * 2.0)
		
	return HAM_IGNORED
}
Odpowiedz