Skocz do zawartości

Witamy w Nieoficjalnym polskim support'cie AMX Mod X

Witamy w Nieoficjalnym polskim support'cie AMX Mod X, jak w większości społeczności internetowych musisz się zarejestrować aby móc odpowiadać lub zakładać nowe tematy, ale nie bój się to jest prosty proces w którym wymagamy minimalnych informacji.
  • Rozpoczynaj nowe tematy i odpowiedaj na inne
  • Zapisz się do tematów i for, aby otrzymywać automatyczne uaktualnienia
  • Dodawaj wydarzenia do kalendarza społecznościowego
  • Stwórz swój własny profil i zdobywaj nowych znajomych
  • Zdobywaj nowe doświadczenia

Dołączona grafika Dołączona grafika

Guest Message by DevFuse
 

Zdjęcie

[ROZWIĄZANE] Skrócenie kodu - prostszy zapis


Najlepsza odpowiedź Seba , 30.10.2013 23:22

	new Float:dmgbase, div
	
	if(poziom_gracza[attacker] <= 50)
	{
		dmgbase = 25.0
		div = 1
	}
	else if(poziom_gracza[attacker] <= 200)
	{
		dmgbase = 30.0
		div = 2
	}
	else if(poziom_gracza[attacker] <= 500)
	{
		dmgbase = 45.0
		div = 3
	}	
	
	new Float:dmg = ( dmgbase+float(inteligencja_gracza[attacker])/div)-redukcja_obrazen_gracza_rakieta[pid]/div;	
	ExecuteHam(Ham_TakeDamage, pid, ent, attacker, (dmg <= 1.0) ? 2.0 : dmg, 1);
Przejdź do postu


  • Zamknięty Temat jest zamknięty
5 odpowiedzi w tym temacie

#1 palarie

    Banned

  • Zbanowany

Reputacja: 19
Początkujący

  • Postów:76
  • Lokalizacja:Polska
Offline

Napisano 30.10.2013 21:15

Witam.

Chciałbym się dowiedzieć czy da radę zapisać poniższy kod w prostszy sposób (z cod moda):

if (poziom_gracza[attacker] <=50)
	{
	new Float: dmg = ( 25.0+float(inteligencja_gracza[attacker]))-redukcja_obrazen_gracza_rakieta[pid];
	if( dmg <= 1.0 )
	dmg = 2.0;
	ExecuteHam(Ham_TakeDamage, pid, ent, attacker, dmg , 1);
        }
else if (poziom_gracza[attacker] <=200)
	{
	new Float: dmg = ( 30.0+float(inteligencja_gracza[attacker])/2)-(redukcja_obrazen_gracza_rakieta[pid])/2;
	if( dmg <= 1.0 )
	dmg = 2.0;
				
	ExecuteHam(Ham_TakeDamage, pid, ent, attacker, dmg , 1);
	}
	else if (poziom_gracza[attacker] <=500)
	{
	new Float: dmg = ( 45.0+float(inteligencja_gracza[attacker])/3)-(redukcja_obrazen_gracza_rakieta[pid])/3;
	if( dmg <= 1.0 )
	dmg = 2.0;
	ExecuteHam(Ham_TakeDamage, pid, ent, attacker, dmg , 1);
	}

Chodzi głównie o to, aby za każdym razem nie powtarzać tego:

if( dmg <= 1.0 )
    dmg = 2.0;

Pobierz najnowszą wersję CS 1.6 PrO [Professional Edition]!
Temat z opisem i screenamiCS 1.6 PrO
Oficjalna strona: CS 1.6 Download

#2 Vasto_Lorde

    Wszechmogący

  • Power User

Reputacja: 256
Wszechwidzący

  • Postów:633
  • GG:
  • Steam:steam
  • Imię:Maćko
  • Lokalizacja:Poznań
Offline

Napisano 30.10.2013 23:01

if(dmg <= 1.0)
     dmg=2.0;

To możesz zamienić na to:

dmg=dmg<=1.0 ? 2.0 : dmg

Efekt jest ten same ale nie wiem czy jest on szybszy.

 

Albo (teraz mnie oświeciło) możesz zrobić tak:

if(poziom_gracza[attacker] <= 50)
     new Float: dmg=(25.0+float(inteligencja_gracza[attacker]))-redukcja_obrazen_gracza_rakieta[pid];
else if(poziom_gracza[attacker]<=200)
     new Float: dmg=(30.0+float(inteligencja_gracza[attacker])/2)-(redukcja_obrazen_gracza_rakieta[pid])/2;
else if(poziom_gracza[attacker]<=500)
     new Float: dmg=(45.0+float(inteligencja_gracza[attacker])/3)-(redukcja_obrazen_gracza_rakieta[pid])/3;
 
if(dmg<=1.0)
     dmg=2.0;
ExecuteHam(Ham_TakeDamage, pid, ent, attacker, dmg , 1);

Ewentualnie zamienić ostatniego ifa na to co podałem wyżej.


  • +
  • -
  • 1

#3 Seba

    Wszechobecny

  • Zbanowany

Reputacja: 198
Profesjonalista

  • Postów:424
  • Lokalizacja:Internet
Offline

Napisano 30.10.2013 23:22   Najlepsza odpowiedź

	new Float:dmgbase, div
	
	if(poziom_gracza[attacker] <= 50)
	{
		dmgbase = 25.0
		div = 1
	}
	else if(poziom_gracza[attacker] <= 200)
	{
		dmgbase = 30.0
		div = 2
	}
	else if(poziom_gracza[attacker] <= 500)
	{
		dmgbase = 45.0
		div = 3
	}	
	
	new Float:dmg = ( dmgbase+float(inteligencja_gracza[attacker])/div)-redukcja_obrazen_gracza_rakieta[pid]/div;	
	ExecuteHam(Ham_TakeDamage, pid, ent, attacker, (dmg <= 1.0) ? 2.0 : dmg, 1);

Użytkownik Seba edytował ten post 30.10.2013 23:23


#4 Misiaczek ;c

    /dev/null

  • Moderator

Reputacja: 1 678
Godlike

  • Postów:2 496
  • GG:
  • Steam:steam
  • Imię:Michał
  • Lokalizacja:Halemba
Offline

Napisano 31.10.2013 11:48

	new Float:dmgbase, div
	switch (poziom_gracza[attacker]) {
		case 1 .. 50: {
			dmgbase = 25.0
			div = 1
		}
		case 51 .. 200 {
			dmgbase = 30.0
			div = 2
		}
		case 201 .. 500: {
			dmgbase = 45.0
			div = 3
		}
	}
	new Float:dmg = ( dmgbase+float(inteligencja_gracza[attacker])/div)-redukcja_obrazen_gracza_rakieta[pid]/div;	
	ExecuteHam(Ham_TakeDamage, pid, ent, attacker, (dmg <= 1.0) ? 2.0 : dmg, 1);

  • +
  • -
  • 2

#5 Seba

    Wszechobecny

  • Zbanowany

Reputacja: 198
Profesjonalista

  • Postów:424
  • Lokalizacja:Internet
Offline

Napisano 31.10.2013 14:34

O ile dobrze pamietam to switch w pawnie powoduje wiecej problemow niz korzysci. Krzykaczom z gory od razu proponuje skompilowac np. to

new a 
switch (a) {
case 1 .. 10000: {
 
}
case 10001 .. 100000: {
 
}
}
;]

Użytkownik Seba edytował ten post 31.10.2013 14:36


#6 palarie

    Banned

  • Autor tematu
  • Zbanowany

Reputacja: 19
Początkujący

  • Postów:76
  • Lokalizacja:Polska
Offline

Napisano 31.10.2013 16:38

Dzięki za pomoc, rozwiązanie Seby najbardziej mi przypadło.


Pobierz najnowszą wersję CS 1.6 PrO [Professional Edition]!
Temat z opisem i screenamiCS 1.6 PrO
Oficjalna strona: CS 1.6 Download




Użytkownicy przeglądający ten temat: 0

0 użytkowników, 0 gości, 0 anonimowych