[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
GeDox
27.04.2014
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.
Najlepsza odpowiedź
sebul
27.04.2014
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.
GeDox
28.04.2014
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.
sebul
28.04.2014
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".
GeDox
02.05.2014
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
sebul
02.05.2014
Ale co Ty w ogóle ze sobą porównujesz? Od damage odejmujesz ciągle 20, a potem z tego wyliczasz to
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 = 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);
GeDox
02.05.2014
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