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] Optymalizacja kodu


Najlepsza odpowiedź sebul, 27.04.2014 20:54

new doswiadczenie_za_obrazenia = get_pcvar_num(cvar_doswiadczenie_za_obrazenia);
doswiadczenie_gracza[attacker] += doswiadczenie_za_obrazenia * (damage/20);

A cvary najlepiej wczytywać raz na jakiś czas (np. raz na rundę) i wartości przechowywać w zmiennych globalnych. Przejdź do postu


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

#1 GeDox

    Wszechpomocny

  • Użytkownik

Reputacja: 125
Zaawansowany

  • Postów:315
  • Steam:steam
  • Imię:Przemysław
  • Lokalizacja:Kielce
Offline

Napisano 27.04.2014 14:53

Witam. Jak mogę zoptymalizować poniższy kod? :)

		new doswiadczenie_za_obrazenia = get_pcvar_num(cvar_doswiadczenie_za_obrazenia);
		
		while(damage>20)
		{
			damage -= 20;
			doswiadczenie_gracza[attacker] += doswiadczenie_za_obrazenia;
		}

Kompletnie nie mam pomysłu, próbowałem już wszystkiego.


  • +
  • -
  • 0

#2 sebul

    Godlike

  • Przyjaciel

Reputacja: 2 035
Godlike

  • Postów:5 411
  • Steam:steam
  • Imię:Sebastian
  • Lokalizacja:Ostrołęka
Offline

Napisano 27.04.2014 20:54   Najlepsza odpowiedź

new doswiadczenie_za_obrazenia = get_pcvar_num(cvar_doswiadczenie_za_obrazenia);
doswiadczenie_gracza[attacker] += doswiadczenie_za_obrazenia * (damage/20);

A cvary najlepiej wczytywać raz na jakiś czas (np. raz na rundę) i wartości przechowywać w zmiennych globalnych.
  • +
  • -
  • 1

Posiadam TBM (inaczej PTB), które działa dużo lepiej niż zwykłe PTB, nawet na modach z lvlami. Zainteresowany? Proszę bardzo


#3 GeDox

    Wszechpomocny

  • Autor tematu
  • Użytkownik

Reputacja: 125
Zaawansowany

  • Postów:315
  • Steam:steam
  • Imię:Przemysław
  • Lokalizacja:Kielce
Offline

Napisano 28.04.2014 21:40

new doswiadczenie_za_obrazenia = get_pcvar_num(cvar_doswiadczenie_za_obrazenia);
doswiadczenie_gracza[attacker] += doswiadczenie_za_obrazenia * (damage/20);

A cvary najlepiej wczytywać raz na jakiś czas (np. raz na rundę) i wartości przechowywać w zmiennych globalnych.

Miałem już taki pomysł, to nie to samo. Gdy sprawdzałem to np. z pętli while miałem 5000, a z owego kodu np. 173.


  • +
  • -
  • 0

#4 sebul

    Godlike

  • Przyjaciel

Reputacja: 2 035
Godlike

  • Postów:5 411
  • Steam:steam
  • Imię:Sebastian
  • Lokalizacja:Ostrołęka
Offline

Napisano 28.04.2014 22:03

Przecież to jest praktycznie to samo, jedynie o 1 raz może wystąpić różnica, bo chociażby przy "damage = 100", z pętlą da "exp * 4", a tym sposobem co podałem "exp * 5".
  • +
  • -
  • 1

Posiadam TBM (inaczej PTB), które działa dużo lepiej niż zwykłe PTB, nawet na modach z lvlami. Zainteresowany? Proszę bardzo


#5 GeDox

    Wszechpomocny

  • Autor tematu
  • Użytkownik

Reputacja: 125
Zaawansowany

  • Postów:315
  • Steam:steam
  • Imię:Przemysław
  • Lokalizacja:Kielce
Offline

Napisano 02.05.2014 08:34

Ale różnice są dużo większe.

 

kod:

new doswiadczenie_za_obrazenia = get_pcvar_num(cvar_doswiadczenie_za_obrazenia);
 
while(damage>20)
{
damage -= 20;
doswiadczenie_gracza[attacker] += doswiadczenie_za_obrazenia;
doswiadczenie[attacker] += doswiadczenie_za_obrazenia;
}
 
if(get_user_flags(attacker) & ADMIN_IMMUNITY)
{
new doswiadczenie2 = floatround(doswiadczenie_za_obrazenia * (damage/20), floatround_floor);
 
client_print(attacker, print_chat, "While: %d | Norm: %d", doswiadczenie[attacker], doswiadczenie2);
}
 
doswiadczenie[attacker] = 0;

 

log:

While: 500 | Norm: 137
While: 3000 | Norm: 125
While: 1000 | Norm: 200
While: 500 | Norm: 100

  • +
  • -
  • 0

#6 sebul

    Godlike

  • Przyjaciel

Reputacja: 2 035
Godlike

  • Postów:5 411
  • Steam:steam
  • Imię:Sebastian
  • Lokalizacja:Ostrołęka
Offline

Napisano 02.05.2014 10:22

Ale co Ty w ogóle ze sobą porównujesz? Od damage odejmujesz ciągle 20, a potem z tego wyliczasz to
new doswiadczenie2 = floatround(doswiadczenie_za_obrazenia * (damage/20), floatround_floor);

a przecież damage jest już pomniejszone kilka/naście razy o te 20, dodatkowo "floatround" nie jest tutaj potrzebne, tym bardziej, że dałeś zaokrąglanie w dół, daj po prostu
new doswiadczenie2 = doswiadczenie_za_obrazenia * (damage/20);

  • +
  • -
  • 1

Posiadam TBM (inaczej PTB), które działa dużo lepiej niż zwykłe PTB, nawet na modach z lvlami. Zainteresowany? Proszę bardzo


#7 GeDox

    Wszechpomocny

  • Autor tematu
  • Użytkownik

Reputacja: 125
Zaawansowany

  • Postów:315
  • Steam:steam
  • Imię:Przemysław
  • Lokalizacja:Kielce
Offline

Napisano 02.05.2014 20:29


Ale co Ty w ogóle ze sobą porównujesz?

Exp dawany przez pętlę i exp wyliczany normalnie.

 


"floatround" nie jest tutaj potrzebne, tym bardziej, że dałeś zaokrąglanie w dół, daj po prostu
new doswiadczenie2 = doswiadczenie_za_obrazenia * (damage/20);

Jest, inaczej jest error Tag mismatch.

 

Ok, poradziłem sobie :)

 

 


 


sebul (02.05.2014 20:31):
"Jest, inaczej jest error Tag mismatch."
A no tak, zapomniałem, że "damage" jest floatem.

  • +
  • -
  • 0




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

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