←  Pytania

AMXX.pl: Support AMX Mod X i SourceMod

»

[ROZWIĄZANE] Obrazenia dla druzyny TT - do...


Best Answer dasiek 06.11.2014 13:37

taki zapis

if(damagebits & DMG_BULLET)
	{	
		if(get_user_team(id)== 1)
		{		
			SetHamParamFloat(4, damage*2)
		}	
	}		
	if(damagebits & DMG_HE)
	{
		if(get_user_team(id)==1)
		{
				SetHamParamFloat(4, damage*2)
		}
	}

możesz bez problemu zastąpić

if(get_user_team(id)==1){
	if(damagebits & DMG_BULLET || damagebits & DMG_HE){
		SetHamParamFloat(4, damage*2)
	}
}

(miejsce klamer nie ma znaczenia) 

 

Dlaczego? 

-Mniej ifów.

-Obecnie kod wykonuje się dla konkretnych obrażeń , sprawdzenia obrażeń wykonują się nawet, kiedy jest się w CT. W założeniach jest żeby działało dla VIP'a (co się wykonuje) oraz dla TT. myślę że mój zapis jest swojego rodzaju "optymalizacją". 

-2 razy wykonujesz to samo (damage *2) w 2 ifach. wrzucone w 1.

 

Taka uwaga dot. samego algorytmu.

Go to the full post
Locked

  • +
  • -
Dziobak?'s Photo Dziobak? 06.11.2014

Chciałbym się zapytać czy ten kod jest poprawnie napisany. Ten kod ma za zadanie:

- szansa 2/10 na większe obrażenia dla drużyny TT (VIP)

- szansa 2/10 na większe obrażenia z HE dla drużyny TT (VIP)

#define DMG_HE (1<<24)
#define DMG_BULLET (1<<1)
RegisterHam(Ham_TakeDamage, "player", "fwTakeDamage");	
public fwTakeDamage(id, this, idinflictor, idattacker, Float:damage, damagebits)
{
	if(!is_user_connected(idattacker) && !Vip[idattacker])
		return HAM_IGNORED;
               
	if(random_num(2, 10)!=1)
		return HAM_IGNORED;

	if(damagebits & DMG_BULLET)
	{	
		if(get_user_team(id)== 1)
		{		
			SetHamParamFloat(4, damage*2)
		}	
	}		
	if(damagebits & DMG_HE)
	{
		if(get_user_team(id)==1)
		{
				SetHamParamFloat(4, damage*2)
		}
	}	
	return HAM_IGNORED;
}

Jeżeli ktoś uważa że źle napisany, nie będzie działać to proszę o napisanie co byście jak napisali swoim zdaniem.

Quote

  • +
  • -
Best Answer dasiek's Photo dasiek 06.11.2014

taki zapis

if(damagebits & DMG_BULLET)
	{	
		if(get_user_team(id)== 1)
		{		
			SetHamParamFloat(4, damage*2)
		}	
	}		
	if(damagebits & DMG_HE)
	{
		if(get_user_team(id)==1)
		{
				SetHamParamFloat(4, damage*2)
		}
	}

możesz bez problemu zastąpić

if(get_user_team(id)==1){
	if(damagebits & DMG_BULLET || damagebits & DMG_HE){
		SetHamParamFloat(4, damage*2)
	}
}

(miejsce klamer nie ma znaczenia) 

 

Dlaczego? 

-Mniej ifów.

-Obecnie kod wykonuje się dla konkretnych obrażeń , sprawdzenia obrażeń wykonują się nawet, kiedy jest się w CT. W założeniach jest żeby działało dla VIP'a (co się wykonuje) oraz dla TT. myślę że mój zapis jest swojego rodzaju "optymalizacją". 

-2 razy wykonujesz to samo (damage *2) w 2 ifach. wrzucone w 1.

 

Taka uwaga dot. samego algorytmu.

Quote

  • +
  • -
Dziobak?'s Photo Dziobak? 06.11.2014

Dzięki, nie pomyślałem o tym :)

Quote
Locked