Szukaj
Opcje wyszukiwania

Szukaj na forum

Szukaj na Tibia.com

Jak na boku policzyc exp i mlvl na poziom?

Bardzo intrygujacym dla wielu uzytkownikownikow moze byc fakt w jaki to sposob CIP wymyslil wymagana ilosc doswiadczenia na poziom. Dlatego postanowilam pokazac wam jak w prosty sposob sprawdzic to. Okazuje zie ze wystarcza do tego ilosci doswiadczenia wymagane na poziomy 1-8. czyli:
lvl exp
1 0
2 100
3 200
4 400
5 800
6 1500
7 2600
8 4200

Bede teraz szukac w jak najprostszy sposob wzoru okreslajacego ta zaleznosc. Zakladam iz jest to wielomian pewnego stopnia gdyz tylko jako takowy moglby spelniac kryteria pasujace do exp na poziom. Nazwjmy wiec funkcje ta wielomianem W(x) dla ktorego:
W(1) = 0
W(2) = 100
W(3) = 200
W(4) = 400
W(5) = 800
W(6) = 1500
W(7) = 2600
W(8) = 4200

Aby sprawdzic stopien danego wielomianu najprosciej zrozniczkowac go i sprawdzic kiedy funkkcja rozniczk stanie sie funkcja liniowa. Tak oto mamy:
W'(1) = 100
W'(2) = 100
W'(3) = 200
W'(4) = 400
W'(5) = 700
W'(6) = 1100
W'(7) = 1600

Ta funkcja nie wyglada na liniowa - rozniczkujemy dalej:
W''(1) = 0
W''(2) = 100
W''(3) = 200
W''(4) = 300
W''(5) = 400
W''(6) = 500

Ta funkcja liniowa jest, ma wzor:

W''(x) = 100x - 100

A wiec poszukiwana funkcja musi byc stopnia 3

Teraz mamy 2 drogi - 2krotne calkowanie tej funkcji z obliczeniem reszty calkowania recznie, lub tez rozwiazanie ukladu rownan o 4 niewiadomych (najprosciej przez odwrocenie maciezy). Uklad ten bwedzie mial postac:

a+b+c+d=0
8a+4b+2c+d=100
27a+9b+3c+d=200
64a+16b+4c+d=400

gdzie W(x) = a*x^3 + b*x^2 + c*x + d

Po prostym odwroceniu maciezy i wyznaczenia wyznacznikow otrzymamy wynik:

a = 50/3
b = -100
c = 850/3
d = -200

Czyli postac wzoru okreslalacego ilosc doswiadczenia na poziom x ma postac:

W(x) = 50/3*x^3 - 100*x^2 + 850/3*x - 200

Moze4my go latwo sprawdzic i uwierzcie mi, ze zgadza sie z poziomami podanymi na tibia.com do samego konca. W ten proasty sposob doszlismy do faktu, jak policzyc ilosc doswiadczenia na poziom, co nigdzie jeszzcze pokazane nie zostalo. Jesli ktos bardzo bedzie chcial umiescic to w jakims swoim programie, to od razu podam wam kod funkcji dla C++:

int exp(int x) {
if (x<= 1)
return 0;
//Jesli poziom jest rowny lub nizszy najnizszemu mozliwemu to ilosc exp na niego zawsze bedzie rowna zero
else
return 50/3*x*x*x - 100*x*x + 850/3*x - 200;
//lub 50/3*x^3 - 100*x^2 + 850/3*x - 200 gdy mamy zaimplementowana biblioteke math <- update - to nie wiem czemu nie dziala
}

To tyle jesli chodzi o doswiadczenie. Natomiast otwarta sprawa pozostaje jeszcze mlvl. Jak mozna przeczytac w jakims poradniku, na 1 mlvl potrzeba spalic 400 many, atomiast na kazdy nastepny 1,1 raza wiecej dla sorca lub druida, 1,3 raza wiecej dla paladyna i 3 razy wiecej dla rycerza. Przyjme dalej wspolczynnik a, gdzie:
a = 1.1 dla maga i druida
a = 1.3 dla paladyna
a = 3 dla rycerza

Nietrudno dojsc do wzoru, iz ilosc many potrzebna na awans z mlvl x na mlvl x+1 okresli wzor:
f(x) = 400*a^x

Ale nie na tym chcialam sie skupic. Chodzi o calkowita ilosc many spalana na mlvl x+1 (bo przy takowym ladniej bedzie wzorek wygladal ;p) z mlvl 0. Wzor ten okreslmy jako g(x). Stad mamy, ze:
g(x) = f(0) + f(1) +...+ f(x) = 400 + 400*a +...+ 400*a^x
Proste przeksztalcenia:

400 + 400*a +...+ 400*a^x = z
400 *(1+a+...+a^x) = z /*(a-1)
400*(a^x+...+a+1)(a-1) = 400*(a^(x+1)-1) = z*(a-1) /a-1)
z = 400*(a^(x+1)-1)/(a-1)

Czyli ostatecznie:

g(x) = 400*(a^(x+1)-1)/(a-1)

I to koniec mego dlugiego wywodu. Uzyskalam wzory, ktorych poszukwalam, a to bylo celem mego krnabrnego przedsiewziecia. Teraz ma nedzna persona zajmie sie praktyka tego w Tibii. Prosze o komentarze i sugestie