Opracowuję prostą bitwę tekstową i mam problemy z obliczeniem, ile XP należy zdobyć po bitwie, jest kilka czynników, które chcę wziąć pod uwagę:
1) Gracze powinni oczywiście zdobyć dobre XP, jeśli pokonają kogoś na tym samym poziomie
2) Gracze powinni zdobyć świetne XP, jeśli pokonają kogoś z wyższego poziomu
3) Gracze powinni zdobyć słabe XP, jeśli pokonają kogoś z niższego poziomu
4) Powyższe powinno ładnie się skalować, tzn. Jeśli gracz A ma poziom 10 i walczy z graczem B, który ma poziom 9 lub 11, różnica nie powinna być ogromna (oczywiście zdobyliby więcej PD za pokonanie postaci na poziomie 11, ale nie spodziewaj się, że to będzie ogromne), ale jeśli miałby walczyć na poziomie 5 lub 15, ta różnica powinna być ogromna.
Mam problem z obliczeniem czegoś, co działa dobrze we wszystkich scenariuszach, obecnie moja tabela XP wygląda następująco:
Current Level XP Needed Increase from Last Level
1 30 0
2 65 35
3 106 41
4 154 48
5 210 56
...
10 672 123
W PHP mój kod wygląda jak poniżej, aby obliczyć potrzebne XP:
$offset = 30;
$multiplier = 1.17;
$base = $prevXp * $multiplier;
$xp = $base + $offset;
Próbowałem kilku różnych rzeczy, ale nie byłem pod wrażeniem żadnej z nich, chciałbym pracować z obliczaniem różnicy w XP, a następnie z użyciem pewnego mnożnika, ale nie byłem pod wrażeniem wyników.
Każda pomoc / wkład będzie mile widziane.
Odpowiedzi:
Dwie sugestie:
Wykładniki! Oblicz trochę „podstawowej nagrody xp” dla każdego poziomu. Następnie formuła zabicia to base_xp_reward * pow (1.1, target_level - poziom_ gracza). Możesz chcieć maksymalnie ograniczyć zysk, aby nieco zniweczyć exploity, i możesz chcieć dać zero XP poniżej pewnej różnicy, aby zapobiec hodowli lobbystów.
(Podstawowa nagroda za XP może być prostym wykładniczym postępem, jeśli chcesz - być może współczynnik stałej_początkowej * pow (1,25, poziom). Następnie możesz zdefiniować „exp to level” w kategoriach wielokrotności podstawowej nagrody XP. Może być łatwiej to zrównoważyć).
Alternatywnie, zróbmy to naprawdę proste. Wykonaj tę samą podstawową nagrodę za XP. Następnie oblicz tabelę ręcznie, aby uzyskać bonusy z różnych różnic poziomów. Zrób to w oparciu o stosunek, aby zabicie kogoś o jeden poziom powyżej ciebie zawsze dawało, powiedzmy, 10% dodatkowego XP w stosunku do nagrody podstawowej. A teraz nie musisz się już martwić o formułę - możesz po prostu sprawić, że liczby będą robić, co chcesz.
Formuły są przereklamowane, czasami trzeba po prostu zablokować niektóre liczby i zagrać je ze słuchu.
źródło
Formulas are overrated, sometimes you just need to jam some numbers in and play it by ear.
Powiedziałbym coś w stylu „zyskaj xp przez delt obrażeń / otrzymanych”. Więc jeśli poziom 10 o mocy 100 KM walczy z poziomem 15 o mocy 200 KM. Wydaje się to niesprawiedliwe, ale jeśli poziom 10 byłby w stanie zabić poziom 15, dostałby dwa razy więcej doświadczenia niż w przypadku walki z poziomem 10 tylko 100 KM.
Również w ten sposób nie musisz się martwić o rzeczy, takie jak gdyby dwie osoby walczyły z tym samym wrogiem za pomocą innego sprzętu. Na przykład, jeśli poziom 8 i poziom 10 walczą z poziomem 13. Jeśli poziom 8 ma lepszy ekwipunek / zbroję, otrzymałby więcej PD, niż poziom 10, ponieważ spowodowałby większe obrażenia na poziomie 13.
Ale najważniejsze: ustaw reguły, test plazy, ustaw reguły, test plazy, ustaw reguły, test plazety itp. Itp.
Nawet najlepsze gry MMO najlepszych twórców dostosowują swój system dystrybucji XP, dopóki gra będzie działać.
źródło
Tylko IMHO, najważniejszą rzeczą, aby uzyskać właściwy wynik, jest skalowanie ilości XP wymaganej do awansu. Mój przyjaciel użył wariacji Fibonacciego w swojej przeglądarce Łotr-podobny, na przykład 100XP, 100XP, 200XP, 300XP, 500XP, 800XP itp.
Słyszałem również o mechanice w niektórych grach, w których poziom jest odejmowany od XP zdobytych w każdej bitwie. Na przykład, jeśli konkretna bitwa zarobi 50XP, a są na poziomie 20, wówczas otrzymują tylko 30XP. Gdyby byli na poziomie 50 lub wyższym, nie zarobiliby nic.
źródło