←  Bugi

AMXX.pl: Support AMX Mod X i SourceMod

»

CoD Nowy
moc klasy - wybuch po smierci buguje sie c...

  • +
  • -
tytusek - zdjęcie tytusek 23.03.2016

Witam, mam pewną klasę co wybucha po smierci, dodalem robienie logów przy wybuchu i co mnie zdziwiło czasami jest kilka krotnie wywołana ta funkcja co nie dość że zwiększa obciążenie serva to zadaje x tyle dmg

 

Jakieś propozycje ?

public Death()

{
new id = read_data(2);
if(ma_klase[id])
Eksploduj(id);
}
 
public Eksploduj(id)
{
new Float:fOrigin[3], iOrigin[3];
entity_get_vector( id, EV_VEC_origin, fOrigin);
iOrigin[0] = floatround(fOrigin[0]);
iOrigin[1] = floatround(fOrigin[1]);
iOrigin[2] = floatround(fOrigin[2]);
 
message_begin(MSG_BROADCAST,SVC_TEMPENTITY, iOrigin);
write_byte(TE_EXPLOSION);
write_coord(iOrigin[0]);
write_coord(iOrigin[1]);
write_coord(iOrigin[2]);
write_short(sprite_blast);
write_byte(32);
write_byte(20);
write_byte(0);
message_end();
 
message_begin( MSG_BROADCAST, SVC_TEMPENTITY, iOrigin );
write_byte( TE_BEAMCYLINDER );
write_coord( iOrigin[0] );
write_coord( iOrigin[1] );
write_coord( iOrigin[2] );
write_coord( iOrigin[0] );
write_coord( iOrigin[1] + 300 );
write_coord( iOrigin[2] + 300 );
write_short( sprite_white );
write_byte( 0 ); // startframe
write_byte( 0 ); // framerate
write_byte( 10 ); // life
write_byte( 10 ); // width
write_byte( 255 ); // noise
write_byte( 255 ); // r, g, b
write_byte( 100 );// r, g, b
write_byte( 100 ); // r, g, b
write_byte( 128 ); // brightness
write_byte( 8 ); // speed
message_end();
 
new entlist[33], name[33];
new numfound = find_sphere_class(id, "player", 200.0 , entlist, 32);
get_user_name(id, name, 32)
 
for (new i=0; i<=numfound; i++)
{
new pid = entlist[i];
 
if (is_user_alive(pid) && get_user_team(id) != get_user_team(pid))
cod_inflict_damage(id, pid, 80.0, 0.7);
                log_to_file("wybuch.log", "gracz %s wybuchl", name)
}
 
return PLUGIN_CONTINUE;
}
 


L 03/18/2016 - 22:23:36: gracz AntyDrabek wybuchl
L 03/18/2016 - 22:23:36: gracz AntyDrabek wybuchl
L 03/18/2016 - 22:23:36: gracz AntyDrabek wybuchl
L 03/18/2016 - 22:26:44: gracz AntyDrabek wybuchl
L 03/18/2016 - 22:51:51: gracz Bogdan wybuchl
L 03/18/2016 - 22:56:40: gracz Bogdan wybuch´
L 03/18/2016 - 22:56:40: gracz Bogdan wybuch´
L 03/18/2016 - 22:56:40: gracz Bogdan wybuch´
L 03/18/2016 - 22:56:40: gracz Bogdan wybuch´
L 03/18/2016 - 22:56:40: gracz Bogdan wybuch´
L 03/18/2016 - 22:56:40: gracz Bogdan wybuch´
L 03/18/2016 - 22:56:40: gracz Bogdan wybuch´
L 03/18/2016 - 22:56:40: gracz Bogdan wybuch´
L 03/18/2016 - 22:56:40: gracz Bogdan wybuch´
L 03/18/2016 - 22:56:40: gracz Bogdan wybuch´
L 03/18/2016 - 22:56:40: gracz Bogdan wybuch´
L 03/18/2016 - 22:56:40: gracz Bogdan wybuch´
L 03/18/2016 - 22:56:40: gracz Bogdan wybuch´
L 03/18/2016 - 22:56:40: gracz Bogdan wybuch´
L 03/18/2016 - 22:56:40: gracz Bogdan wybuch´
L 03/18/2016 - 22:56:40: gracz Bogdan wybuch´
L 03/18/2016 - 22:56:40: gracz Bogdan wybuch´
L 03/18/2016 - 22:56:40: gracz Bogdan wybuch´
L 03/18/2016 - 22:56:40: gracz Bogdan wybuch´
L 03/18/2016 - 22:56:40: gracz Bogdan wybuch´
L 03/18/2016 - 22:56:40: gracz Bogdan wybuch´
L 03/18/2016 - 22:56:40: gracz Bogdan wybuch´
L 03/18/2016 - 22:56:40: gracz Bogdan wybuch´
L 03/18/2016 - 22:56:40: gracz Bogdan wybuch´
L 03/18/2016 - 22:56:40: gracz Bogdan wybuch´
L 03/18/2016 - 22:56:40: gracz Bogdan wybuch´
L 03/18/2016 - 22:56:40: gracz Bogdan wybuch´
L 03/18/2016 - 22:56:40: gracz Bogdan wybuch´
L 03/18/2016 - 22:56:40: gracz Bogdan wybuch´
L 03/18/2016 - 22:56:40: gracz Bogdan wybuch´
L 03/18/2016 - 22:56:40: gracz Bogdan wybuch´
L 03/18/2016 - 22:56:40: gracz Bogdan wybuch´
L 03/18/2016 - 22:56:40: gracz Bogdan wybuch´
L 03/18/2016 - 22:56:40: gracz Bogdan wybuch´
L 03/18/2016 - 22:56:40: gracz Bogdan wybuch´
L 03/18/2016 - 22:56:40: gracz Bogdan wybuch´
L 03/18/2016 - 22:56:40: gracz Bogdan wybuch´
L 03/18/2016 - 22:56:40: gracz Bogdan wybuch´
L 03/18/2016 - 22:56:40: gracz Bogdan wybuch´
L 03/18/2016 - 22:56:40: gracz Bogdan wybuch´
L 03/18/2016 - 22:56:40: gracz Bogdan wybuch´
L 03/18/2016 - 22:56:40: gracz Bogdan wybuch´
L 03/18/2016 - 22:56:40: gracz Bogdan wybuch´
L 03/18/2016 - 22:56:40: gracz Bogdan wybuch´
L 03/18/2016 - 22:56:40: gracz Bogdan wybuch´
L 03/18/2016 - 23:00:18: gracz Bogdan wybuchl
L 03/18/2016 - 23:00:18: gracz Bogdan wybuchl
L 03/18/2016 - 23:00:35: gracz paswirski_Irlandia Pl wybuchl
L 03/18/2016 - 23:00:50: gracz Bogdan wybuchl

 

Odpowiedz

  • +
  • -
wonsz żeczny - zdjęcie wonsz żeczny 23.03.2016

for (new i=0; i<=numfound; i++)
{ 

Wydaję mi się, że to może być powodem lecz również wydaję mi się, że się mylę.

 

Zadawanie obrażeń i logi pokażą się w zależności od wartości numfound.

 

Chociaż jeśli efekt wyświetla się również tyle razy to mit obalony :X

 

Można też dać tak:

public Death()
{

	new id = read_data(2);

	if( ma_klase[id] && !eksplodowal[ id ] )
	{
	Eksploduj(id)
	}
}
 

I oczywiście gdzieś na końcu publica Eskloduj 

	eksplodowal[ id ] = true

Różnie to w pawnie jest :D

Odpowiedz

  • +
  • -
tytusek - zdjęcie tytusek 24.03.2016

 

for (new i=0; i<=numfound; i++)
{ 

Wydaję mi się, że to może być powodem lecz również wydaję mi się, że się mylę.

 

Zadawanie obrażeń i logi pokażą się w zależności od wartości numfound.

 

Chociaż jeśli efekt wyświetla się również tyle razy to mit obalony :X

 

Można też dać tak:

public Death()
{

	new id = read_data(2);

	if( ma_klase[id] && !eksplodowal[ id ] )
	{
	Eksploduj(id)
	}
}
 

I oczywiście gdzieś na końcu publica Eskloduj 

	eksplodowal[ id ] = true

Różnie to w pawnie jest :D

 

nie pomogło :/

Odpowiedz

  • +
  • -
Linux' - zdjęcie Linux' 24.03.2016

Przede wszystkim do death dodaj sprawdzanie czy gracz jest podłączony, od tego bym zaczął. Poza tym nie widzę tu by funkcja rzekomo wykonywana była kilkukrotnie. Jeżeli umieszczasz logi w pętli z obrażeniami to będą one wykonywane tyle razy ile zostaną zadane obrażenia, wszystkim osobą w określonej odległości. Przenieś dodawanie logów przed pętle i wtedy sprawdź, ile razy się pojawiają po wybuchu.

Odpowiedz