←  Pytania dotyczące pluginów

AMXX.pl: Support AMX Mod X i SourceMod

»

Index out of bounds - Przyczyny ? [Ukochan...

  • +
  • -
ex0 - zdjęcie ex0 23.06.2014

Tak jak w temacie, chciałem zapytać o główne przyczyny tego błędu ?

Brak miejsca w tabeli ?
Zapełniona pamięć pluginu ?
A może nie zjadł plugin kolacji i grymasi ?

Co o tym możecie mi powiedzieć ?

 

if(ma_perk[b] && cod_get_user_perk(a) != 0 && random_num(1,4)==1)

Ogólnie rozchodzi się o to powyżej.
Co go tutaj boli ?

A cały plug wygląda tak:

 

new bool:ma_perk[33]

public plugin_init()
{
	register_plugin(perk_name, "1.0", "MasterOfGames")
	
	cod_register_perk(perk_name, perk_desc)
	
	RegisterHam(Ham_Killed, "player", "Kill")
}
public cod_perk_enabled(id)
{
	ma_perk[id] = true
}
public cod_perk_disabled(id)
{	
	ma_perk[id] = false
}
public Kill(a, b)
{
	if(ma_perk[b] && cod_get_user_perk(a) != 0 && random_num(1,4)==1)
	{
		cod_set_user_perk(b, cod_get_user_perk(a))
		cod_set_user_perk(a, 0)
	}
}

Biblioteki:
 

#include <amxmodx>
#include <amxmisc>
#include <codmod>
#include <hamsandwich>


Pozdrawiam ! :)

Odpowiedz

Handlarz - zdjęcie Handlarz 23.06.2014

Jak dla mnie to to

cod_get_user_perk(a) != 0 
Odpowiedz

  • +
  • -
Zabijaka Gryps - zdjęcie Zabijaka Gryps 23.06.2014

Jak dla mnie to to
 

cod_get_user_perk(a) != 0 

Co niby w tym jest nie tak??

@topic
Spróbuj standardowego lekarstwa na problem wychodzenia indexów poza granice, czyli sprawdzenia podłączenia.
if(is_user_connected(a) && is_user_connected(b) && ma_perk[b] && cod_get_user_perk(a) != 0 && random_num(1,4)==1)
Odpowiedz

  • +
  • -
BlackPerfum - zdjęcie BlackPerfum 23.06.2014

is_user_connected(a)

po co sprawdzasz 2x czy gracz martwy jest podłączony do serwera

cod_get_user_perk(a) != 0

Odpowiedz

  • +
  • -
ex0 - zdjęcie ex0 23.06.2014

 

is_user_connected(a)

po co sprawdzasz 2x czy gracz martwy jest podłączony do serwera

cod_get_user_perk(a) != 0

 

Czyli wystarczy po prostu zastosować standardowe sprawdzanie gracza z pojedynczym sprawdzeniem if_user tak?

// Okej Działa jak natura przykazała.

Natomiast przy okazji tego tematu co w tej funkcji należy zgwałcić aby nie wyskakiwał ten sam błąd?

Ponownie zastosować sprawdzenie?

Krzyczy o new Float jak coś.

public TakeDamage(this, idinflictor, idattacker, Float:damage, damagebits)
{
	new Float:ile = reborn[idattacker]*3.0
        if(!is_user_connected(idattacker))
                return HAM_IGNORED;
        
        if(get_user_team(this) != get_user_team(idattacker) && damagebits & DMG_BULLET)
                cod_inflict_damage(idattacker, this, ile, 0.0, idinflictor, damagebits);
        
        return HAM_IGNORED;
}

 

Odpowiedz

  • +
  • -
BlackPerfum - zdjęcie BlackPerfum 23.06.2014

Tak gdyż gracz nie podłączony nie ma żadnego perka.
Tzn:
if(is_user_connected(b) && ma_perk[b] && cod_get_user_perk(a) != 0 && !random(4))
public TakeDamage(this, idinflictor, idattacker, Float:damage, damagebits)
{
        if(!is_user_connected(idattacker))     return HAM_IGNORED;
        
	new Float:ile = float(reborn[idattacker])*3.0
        if(get_user_team(this) != get_user_team(idattacker) && damagebits & DMG_BULLET)
                cod_inflict_damage(idattacker, this, ile, 0.0, idinflictor, damagebits);
        
        return HAM_IGNORED;
}

Użytkownik BlackPerfum edytował ten post 23.06.2014 07:48
Odpowiedz

  • +
  • -
Zabijaka Gryps - zdjęcie Zabijaka Gryps 23.06.2014

is_user_connected(a)

po co sprawdzasz 2x czy gracz martwy jest podłączony do serwera

cod_get_user_perk(a) != 0

A czy aby pobranie perka niepodłączonego gracza nie wyrzuci erroru?
Odpowiedz

  • +
  • -
BlackPerfum - zdjęcie BlackPerfum 23.06.2014

Ależ nie
Odpowiedz