[5.9l] Zła redukcja obrażeń po zwiększeniu...
sebul
06.12.2010
Znajdź wszystkie
player_damreduction[id] = (47.3057*(1.0-floatpower( 2.7182, -0.06798*float(player_agility[id])))/100)
zamień na
player_damreduction[id] = damachange(X, Y, Z);
Dodaj gdziekolwiek w sma, np. przed "public reset_skill(id)"
I Opcja bez zmiany sposobu obliczeń
stock Float:damachange(maxstat, skill, dziel) {
if(skill > 0)
return (47.3057*(1.0-floatpower(2.7182,-(0.06798/(maxstat/50))*float(skill)))/dziel);
return 0.0;
}
- zamiast X wpisz maksymalną wartość statystyki, czyli w standardzie jest to 50
- zamiast Y wpisz statystykę, która będzie w obliczeniach, czyli dla redukcji obrażeń będzie to "player_agility[id]"
- zamiast Z wpisz liczbę przez którą redukcja obrażeń będzie się dzielić, im większa liczba, tym mniejsza będzie redukcja, w standardzie jest 100
II Opcja ze zmianą sposobu obliczania redukcji, jak dla mnie ta opcja jest lepsza, przy większej ilości punktów dodanych w zręczność, 1 punkt daje więcej niż przy standardowych wyliczeniach
stock Float:damachange(maxstat, skill, Float:dziel) {
if(skill > 0) {
new Float:qwe = float(skill)/maxstat;
new Float:bonus = (2.0-floatpower(2.0, qwe))/(dziel*4);
if(bonus < 0.0) bonus = 0.0;
return bonus+qwe/dziel;
}
return 0.0;
}
- zamiast X wpisz maksymalną wartość statystyki, np. 50
- zamiast Y wpisz statystykę, która będzie w obliczeniach, czyli dla redukcji obrażeń będzie to "player_agility[id]"
- zamiast Z wpisz liczbę zmiennoprzecinkową, przez którą redukcja obrażeń będzie się dzielić, jeśli wpiszesz 2.0 to maksymalna wartość redukcji będzie wynosić 50%, im większa liczba, tym mniejsza będzie redukcja
ZiuTeK
06.12.2010
Skoro przy 100 levelach dzielimy ta wartosc przez 100 to analogicznie przy 200 podzielimy przez 200, przy 400 przez 400.
Po co komu te obliczenia ?
Dla 200 leveli
player_damreduction[id] = (47.3057*(1.0-floatpower( 2.7182, -0.06798*float(player_agility[id])))/200)
sebul
06.12.2010
Niestety nie łatwiej... tamte obliczenia to wyższa szkoła jazdy i tutaj samo zwiększenie dzielnika da tylko to, że będziemy mieli mniejszą wartość i tym sposobem max redukcja obrażeń, będzie wynosić przy 200 lvl, tylko ok. 24%A czy nie latwiej i prosciej bedzie zmieniac wartosc 100 ?
Skoro przy 100 levelach dzielimy ta wartosc przez 100 to analogicznie przy 200 podzielimy przez 200, przy 400 przez 400.
Po co komu te obliczenia ?
Dla 200 leveliplayer_damreduction[id] = (47.3057*(1.0-floatpower( 2.7182, -0.06798*float(player_agility[id])))/200)
A zresztą zobacz sobie to -> Google ;] i jak chcesz to się pobaw z tymi cyframi.
I jeszcze coś, jeśli by zrobić tym sposobem co podałeś, to i tak dalej przy 50 pkt zręczności miało by się praktycznie tyle samo redukcji obrażeń, co przy 100 pkt.
Użytkownik sebul edytował ten post 06.12.2010 21:19
cesik 17.02.2011
0,10197
i bedzie szlo tak?
player_damreduction[id] = (47.3057*(1.0-floatpower( 2.7182, -0,10197*float(player_agility[id])))/150)
Użytkownik cesik edytował ten post 17.02.2011 21:03
sebul
17.02.2011
Czyli musisz wpisać tam 0.04532, a dokładniej
player_damreduction[id] = (47.3057*(1.0-floatpower( 2.7182, -0.04532*float(player_agility[id])))/100)
No i pamiętaj, że przecinek tutaj działa inaczej, musi być koniecznie kropka.
Divic
18.04.2011
Ja u siebie dałem ze można we wszystki staty dac max 100 pkt ciężej jest bo nie rozwinie się każdej umiejętności
Użytkownik Divic edytował ten post 18.04.2011 14:35
sebul
02.09.2011
Pierwszy post został jeszcze poprawiony, wcześniej zapomniałem o tym, że przecież są itemy na dodanie dodatkowych punktów do statów.
sebul
01.11.2011
glut
12.02.2012
zamiast:
stock Float:damachange(maxstat, skill, Float:dziel) { if(skill > 0) { new Float:qwe = float(skill)/maxstat; new Float:bonus = (2.0-floatpower(2.0, qwe))/(dziel*4); if(bonus < 0.0) bonus = 0.0; return bonus+qwe/dziel; } return 0.0; }
dajcie
stock Float:damagereduction(maxstat, skill, Float:dziel) { if(skill > 0) { new Float:qwe = float(skill)/maxstat; new Float:bonus = (2.0-floatpower(2.0, qwe))/(dziel*4); if(bonus < 0.0) bonus = 0.0; return bonus+qwe/dziel; } return 0.0; }
ogieR8
29.12.2014
Sorry, że wracam do wątku, ale odnośnie nazwy tematu.. a gdyby tak ..
player_damreduction[id] = oblicz_redukcje(max_level, skill, Float:dzielnik)
np.
player_damreduction[id] = oblicz_redukcje(200, player_agility[id], 2.0)
i gdzieś tam na dole stock
stock Float:oblicz_redukcje(max, skill, Float:dziel) { if(skill > 0) { new Float:yyy = (max / (100 / dziel)) * 1.0 new Float:xxx = 1.0 - ((skill / yyy) / 100) return xxx; } return 1.0; }
100/dziel = maxymalny poziom redukcji w %
Chcemy 50% ? 50 = 100/x x = 2.0
Chcemy 100% redukcji ? 100=100/x x = 1.0
Czy takie wyjście jest dobre ? Pytam tych wyżej ustawionych, bo wzory raczej są dobre, ale nie wiem czy float wpuściłem w dobrych miejscach I wydaję mi się ten sposób bardziej realny. X%max_statystyki = X%max_redukcji
Nie rozumiem po co tak kombinować, proste sposoby są najlepsze, takie mam zdanie, a teraz testuje
Wyniki testu