Metin2 EXP-instellingen zijn een van de meest bepalende balansen die het karakter van een server vastleggen: is de ervaringscurve te steil, dan lopen spelers al op de eerste maps vast en haken ze af; is hij te vlak, dan is er geen gevoel van prestatie en is de content binnen een dag op. In deze gids ontleed ik het ervaringssysteem in zijn onderdelen — de leveltabel exp.csv, de basis-exp in mob_proto, de level-gap-straf en de serverrate — en leg ik uit hoe je een levelcurve ontwerpt die zowel speelbaar als houdbaar is.
Wat is exp.csv en hoe wordt het gelezen?
In de data-map van de server bevat exp.csv de ervaring die nodig is om naar het volgende level te gaan, één regel per level. De game core laadt deze tabel bij het opstarten in het geheugen; zodra een personage genoeg exp verzamelt, gaat het een level omhoog en kijkt het naar de volgende regel. Het bestand is een eenvoudige lijst met één kolom, waarbij het regelnummer overeenkomt met het level:
1500
4000
9000
20000
36000
...
Hier is de eerste regel de exp die nodig is om van level 1 naar level 2 te gaan, de tweede regel voor level 2 naar 3, enzovoort. De lengte van de tabel bepaalt feitelijk ook de levelcap: als er geen regels meer over zijn, kan het personage niet verder levelen. Wil je de cap verhogen, dan moet je zowel nieuwe regels aan exp.csv toevoegen als ervoor zorgen dat de constante van het type PLAYER_MAX_LEVEL in de source dat toestaat.
De levelcurve ontwerpen
Een goede curve is geen stapel cijfers — het is een verhaal over tempo. De klassieke Metin2-curve is exponentieel: elk level is merkbaar duurder dan het vorige. Daardoor stromen de eerste levels snel voorbij terwijl de laatste levels een echt doel worden. Bij het ontwerpen van een curve houd ik een paar principes aan:
- Een zachte start: de eerste 30 levels moeten in minuten voorbijgaan zodat een nieuwe speler aan de systemen went en niet meteen afhaakt.
- Tier-muren: de curve bewust verzwaren op bepaalde levels (bijvoorbeeld de drempels waar nieuwe maps opengaan) stuurt spelers naar verse content.
- Geen plotselinge sprongen: kost één level vijf keer zoveel als het vorige, dan voelt de speler dat hij tegen een muur loopt. Houd het groeitempo geleidelijk.
In plaats van de curve met de hand te schrijven, is hem met een formule genereren veel consistenter. Een eenvoudig exponentieel model bouw je zo:
# exp.csv genereren met Python (voorbeeldmodel)
basis = 1500
for level in range(1, 105):
nodig = int(basis * (level ** 2.6))
print(nodig)
Door de exponent (hier 2.6) en de basis te veranderen, stem je af hoe steil de curve is. De gegenereerde uitvoer rechtstreeks in exp.csv schrijven en op een testserver proberen is veel sneller dan de cijfers op het oog balanceren.
mob_proto: de echte bron van ervaring
De leveltabel beantwoordt de vraag "hoeveel exp is er nodig"; het antwoord op "waar komt die exp vandaan" staat in mob_proto. De regel van elk monster bevat een exp-kolom, de basiservaring die het bij overlijden geeft. De curve en de mob-exp moeten elkaar aanvullen: combineer een dure curve met lage mob-exp en het spel wordt een grind; doe het omgekeerde en spelers bereiken het maxlevel binnen enkele uren.
In de praktijk trek je aan een van twee hendels: of je houdt de curve (exp.csv) vast en schaal je de mob-exp, of je laat de mob-exp met rust en verzacht je de curve. Beide tegelijk veranderen maakt de balans lastig te volgen; per keer één variabele afstemmen is veel voorspelbaarder.
De level-gap-straf: waarom geeft een level-1-mob geen exp aan een level 99?
Een onzichtbaar maar cruciaal deel van de EXP-afstemming is de level-gap-straf die de game core toepast bij het berekenen van beloningen. Wanneer een monster sterft, schaalt de core de gegeven ervaring op basis van het levelverschil tussen het aanvallende personage en het monster. Dood je een mob ver onder je level, dan ontvang je slechts een kleine fractie van zijn basis-exp; dit mechanisme voorkomt "powerleveling" op laaglevel-spots en houdt de economie in balans.
Dit gedrag is geïmplementeerd in de server-source, binnen de beloningsfunctie, via een ratiotabel. Op private servers is het verzachten van deze curve (zelfs bij grote levelverschillen redelijke exp geven) een veelvoorkomende aanpassing — maar wees voorzichtig: verwijder de straf volledig en je opent de deur voor hooglevel-spelers die hun laaglevel-vrienden in minuten omhoog vliegen. Daarmee wordt je hele leveltempo zinloos.
De serverrate (EXP-rate) en config
Wat spelers bedoelen met een "x1-, x5-, x50-server" is de globale multiplier die boven op de basiservaring wordt toegepast. Het officiële gedrag is x1; private servers passen deze multiplier meestal toe in de source via een variabele op het beloningsmoment (bijv. een afgeleide van g_iExpRate) of via configuratie. De multiplier toepassen is technisch makkelijk; het echte werk is de juiste rate kiezen:
- Lage rate (x1–x5): voor langlevende, "klassieke" servers die spelers traag maar betrokken houden. De content gaat maanden mee.
- Midden-rate (x10–x50): de populairste categorie. Het vermindert de grind maar laat toch een gevoel van progressie.
- Hoge rate (x100+): voor snelle, PvP-gerichte servers. Hier is levelen geen obstakel meer maar een formaliteit; alle balans verschuift naar items en PvP.
Behandel de multiplier als een strategische, niet enkel numerieke beslissing: de rate moet de ervaring weerspiegelen die je server belooft. De rate na de lancering verlagen maakt de community boos, dus hem vooraf met echte spelers op een testserver proberen en vroeg een keuze maken is de gezondste aanpak.
Party, premium en tijdelijke bonussen
Er stapelen nog een paar lagen op de basis-exp en de multiplier. De core geeft spelers die in een party jagen een kleine bonus op basis van het aantal leden en verdeelt de ervaring onder de leden, wat groepsspel aanmoedigt. Premium-accounts en items als ervaringsringen voegen een apart percentage toe. Daar bovenop komen de tijdelijke exp-events die je tijdens periodes als weekends draait.
De valkuil hier is het stapelen van bonussen: als x50-rate + premium + ring + een weekend-event op elkaar stapelen, kan de effectieve rate ver boven je ontwerp uitkomen. Houd bij het plannen van de curve ook rekening met het scenario met maximale bonussen; anders kan de server die je "traag" had ontworpen op eventdagen in een uur uitgespeeld zijn.
Veelgestelde vragen
Ik heb exp.csv aangepast maar in-game verandert er niets, waarom?
De game core leest deze tabel alleen bij het opstarten. Na het opslaan van het bestand moet je de betreffende core/channel herstarten. Zorg ook dat het bestand in de juiste data-map staat en dat elke regel één geldig getal bevat; een kapotte regel kan alles na dat punt zinloos maken.
Kan ik de levelcap verhogen door alleen regels aan exp.csv toe te voegen?
Niet op zichzelf. Regels toevoegen aan exp.csv verlengt de tabel, maar het maximumlevel wordt ook begrensd door een constante in de source. Als die twee niet overeenkomen, blijft het personage op een bepaald level steken. Om de cap echt te verhogen moet je mogelijk ook de source bijwerken.
Trekt een server met hoge rate meer spelers?
Het trekt in eerste instantie de aandacht, maar houdt spelers op zichzelf niet vast. Een zeer hoge rate maakt levelen betekenisloos en spelers bereiken snel het punt "niets meer te doen". Houdbaarheid komt uit de balans tussen de rate en de hoeveelheid content — systemen, PvP, events.
Wil je een gebalanceerde ervaringscurve voor je server opzetten? Van het ontwerp van exp.csv tot mob_proto-schaling en het afstemmen van de level-gap-straf, we kunnen het hele exp-systeem samen plannen. Neem contact op en laten we over het tempo van je server praten.