Witam.
Z racji takiej, że jest coraz więcej tematów związanym z EXP'em na pokemodzie, postanowiłem napisać oto ten poradnik. Z samego tematu możemy się już dowiedzieć o czym będzie ten tutorial: wszystko na temat dostawanego exp'a.
Do roboty
1.
Pierwszym i jedynym plikiem, który będziemy edytować jest XP.inl. Znajdziemy go w scripting>pokemon>xp.inl. Sama nazwa tego pliku wskazuję nam, że w nim jest wszystko co związane z exp'em. Po otwarciu go szukamy funkcji:
KillXP(attacker, victim)
Cała wygląda tak:
KillXP(attacker, victim) { if(attacker==victim) return new xp_to_give = PlayersLevel(victim) if( Pokemod_FF(victim, attacker) ){ GiveXP(attacker, PlayersActive[attacker], -1*xp_to_give) poke_printlang(attacker,"POKEMOD_KILLMATE", xp_to_give) } else GiveXP(attacker, PlayersActive[attacker], xp_to_give) }
2. Teraz zajmiemy się jej dokładnym opisem (co za co odpowiada)
a)
if(attacker==victim) return
attacker - id atakującego
victim - id ofiary
Warunek sprawdza czy id atakującego jest taie same jak id ofiary, jeżeli tak to funkcja nie zostanie wykonana.
b.)
new xp_to_give = PlayersLevel(victim)
Zmienna pobierająca LEVEL aktualnie używającego pokemona ofiary
c)
if( Pokemod_FF(victim, attacker) )
Warunek sprawdzający czy nie nastąpił TeamKill. Jeżeli to nastąpi to wydarzy się wszystko co pod nim aż do:
else
d)
GiveXP(attacker, PlayersActive[attacker], -1*xp_to_give)
GiveXP - funkcja od dawania exp'a
attacker - id, któremu ma dać exp'a
PlayersActive[attacker] - pokemon (w tym przypadku aktulanie używany przez gracza)
-1*xp_to_give - -1 pomnożone przez level pokemona
poke_printlang(attacker,"POKEMOD_KILLMATE", xp_to_give)
Funkjca, która powiadamia na say'u o tym, że ktoś zabił kolegę z drużyny.
W momencie jak ktoś zabiję swojego kolegę z drużyny, zostanie o tym powiadomiony na say'u oraz zostanie mu odięty exp, ile ? -1*xp_to_give czyli -1*level aktualnie używającego pokemona gracza czyli zawsze to będzie level pokemona tylko, że na minusie.
e)
else
Dokładny opis: http://amxx.pl/topic.....-sluzy/<br />[
GiveXP(attacker, PlayersActive[attacker], xp_to_give)
GiveXP - funkcja od dawania exp'a
attacker - id, któremu ma dać exp'a
PlayersActive[attacker] - pokemon (w tym przypadku aktulanie używany przez gracza)
xp_to_give - wytłumaczone w punkcie b, zmienna pobierająca level pokemona
3. Zmiana ilości dostawanego EXP'a
W pokemodzie, dostawany exp bazuje na level'u pokemona zabitego gracza, czyli jak zabijemy gracza, który aktualnie gra Charmanderem 5 level to dostaniemy za niego 5 exp'a. Ja na swoim pokemodzie zawsze robiłem tak, że mnożyłem przez 2 i dostawało się 2 razy więcej expa, czyli jak zabiłem Charmandera 5 level to dostałem 10 exp'a. Polecam ten sposób, a jak to zrobić, już tłumaczę. W tej funkcji szukamy lininjki tuż po "else":
GiveXP(attacker, PlayersActive[attacker], xp_to_give)
Wystarczy po xp_to_give dodać *2 (xp_to_give*2) czyli całość ma wyglądać tak:
GiveXP(attacker, PlayersActive[attacker], xp_to_give*2)
A cała funkcja o tak:
KillXP(attacker, victim) { if(attacker==victim) return new xp_to_give = PlayersLevel(victim) if( Pokemod_FF(victim, attacker) ){ GiveXP(attacker, PlayersActive[attacker], -1*xp_to_give) poke_printlang(attacker,"POKEMOD_KILLMATE", xp_to_give) } else GiveXP(attacker, PlayersActive[attacker], xp_to_give*2) }
Oczywiście można też np. mnożyć przez 3 (*3), dodać 20(+20) itp.
4. Dodatkowy xp dla VIP'a
Aby VIP(osoba z odpowiednią flagą) dostawała więcej xp'a za killa wystarczy dodać jeden warunek. Można na dwa sposoby: http://amxx.pl/dokum.../get_user_flags lub http://amxx.pl/dokum...ja/f26/has_flag . Osobiście preferuję drugi sposób, gdyż sam go ciągle używam w pokemodzie, ale tak czy siak pokaże jak zrobić to każdym sposobem. Dajmy na to, że VIP będzie na flagę "t" czyli na ADMIN_LEVEL_H, a warunki powinny wyglądać następująco:
if(has_flag(attacker, "t")
lub tak:
if(get_user_flags(attacker) & ADMIN_LEVEL_H)
Teraz tylko wstawić te warunki do funkcji, dodać odpowiednią ilość dodatkowego exp'a i będzie gotowe. Jeżeli ustalimy, że nromalny gracz dostaje tyle xp'a ile wynosi lvl pokemona zabitego przez nas grasza a VIP'owi da 2x więcej to cała funkcja ma wyglądać następująco:
bądź drugim sposobem:
5. Kompilacja pokemod'a
Po zmienieniu xp.inl. wchodzicie do addons>amxmodx>scripting. Tam znajdujecie pokemod.sma. Zaznaczacie go i trzymacie naciśnięty lewy przycisk myszy. Następnie przesuwacie pokemod.sma na compile.exe. Powinno wyskoczyć czarne okienko, nie wyłączajcie go. Możecie dopiero wyłączyć jak się już skompiluje, czyli wyskoczy coś takiego jak zaznaczone na czerwono screenie:
http://imageshack.us...beztytuugv.jpg/
Nie zwracajcie na moje wraningi, u was takie nie powinny być. Gdy już się skompiluje, należy nacisnąć enter, aby wyłączyć okienko. Następnie wchodzimy do addons>amxmodx>scripting>compiled. tam jest nowo powstały plik pokemod.amxx z waszym wybranym level'em. Należy go wgrać do addons>amxmodx>plugins, zrestartować serwer i GOTOWE.
Użytkownik radim edytował ten post 09.05.2013 14:33