Metin2 guild war is de kern-PvP-mechaniek waarbij twee gildes elkaar formeel de oorlog verklaren, onder een set regels kill-scores opbouwen, en waarbij de winnaar de inzetpot en ranglijstpunten opstrijkt. Goed geconfigureerd geeft het je server een levendige rivaliteit en een sociaal doel, de klok rond; slecht geconfigureerd wordt het een functie die permanent open blijft staan, misbruikt kan worden of nooit echt wordt afgerond. In dit artikel loop ik stap voor stap door de oorlogstypes, hoe een oorlog wordt verklaard en geaccepteerd, de score- en inzetregels, de warp war maps en het instellen van de beloningen voor het winnende gilde.
Guild war types
De meeste Metin2-bronnen ondersteunen drie verschillende oorlogstypes, en welke je aanbiedt bepaalt het karakter van je server:
- Normale oorlog (score-oorlog): De oorlog vindt plaats in de open wereld. Waar leden van de twee gildes elkaar ook doden, de kill telt mee voor de score. Het eerste gilde dat de vooraf bepaalde scorelimiet bereikt, wint. Het is het makkelijkst op te zetten maar gevoelig voor inmenging van derden in de open wereld.
- Warp war (arena/uitnodigingsoorlog): Leden van beide gildes worden naar een aparte oorlogsmap geteleporteerd. Ze vechten in een afgesloten gebied zonder inmenging van buitenaf, wat dit het eerlijkste en populairste type maakt.
- Vlaggenoorlog (CTF): Gebouwd rond het veroveren van symbool-/vlagpunten op de map; het beloont gebiedscontrole in plaats van pure kills. Minder vaak gebruikt, maar het geeft een eigen gevoel.
Alle drie delen hetzelfde skelet: verklaring, acceptatie, scoretelling en uitslag. Ze verschillen alleen in waar de oorlog plaatsvindt en hoe de score wordt verdiend.
Een oorlog verklaren en de acceptatieflow
Een oorlog wordt gestart vanuit het in-game gildemenu. De gildeleider van het aanvallende gilde selecteert het doelgilde, kiest het oorlogstype en voert het eventuele inzetbedrag in. Het systeem stuurt een oorlogsuitnodiging naar de leider van het doelgilde; accepteert de andere leider binnen een tijdsvenster, dan begint de oorlog, anders verloopt het verzoek. Deze logica van "tweezijdige goedkeuring" is belangrijk omdat ze voorkomt dat iemand een oorlog kan afdwingen.
Om de verklaring geldig te laten zijn, gelden meestal twee voorwaarden: beide gildes moeten het minimum aantal leden halen, en de leider moet genoeg yang hebben om het inzetbedrag te dekken. Je vindt deze regels in de guild war-configuratie van je bron; de relevante code zit doorgaans in guild.cpp, guild_manager.cpp en, aan de questkant, questlua_guild.cpp.
Score- en inzetregels configureren
De kernregels van een oorlog staan in een configuratietabel met een aparte rij voor elk oorlogstype. De naam verschilt per bron maar de logica is dezelfde: per type definieer je een inzetlimiet, een minimum aantal leden en een winscore. Een voorbeeldtabel ziet er zo uit:
// voor elk type: { winscore, min_leden, inzetlimiet }
const SGuildWarInfo c_aGuildWarInfo[GUILD_WAR_TYPE_MAX_NUM] =
{
// NORMAL : 100 score, minstens 7 leden, max inzet 5.000.000 yang
{ 100, 7, 5000000 },
// WARP : 100 score, minstens 10 leden, max inzet 10.000.000 yang
{ 100, 10, 10000000 },
// CTF : 100 score, minstens 10 leden, max inzet 10.000.000 yang
{ 100, 10, 10000000 },
};
Schaal deze waarden naar de populatie van je server. Op een kleine server betekent een eis min_leden = 10 dat geen enkel gilde ooit oorlog kan verklaren, dus een laag minimum (zeg 3–5) bij de start is realistischer. Test de winscore ook met een testgilde: 100 score kan tussen drukke gildes enkele minuten duren, terwijl het tussen kleine gildes vermoeiend lang kan aanslepen.
De arena: warp war maps
Het hart van warp war zijn de speciale oorlogsmaps waar het gevecht plaatsvindt. Dit zijn aparte map-indexen, geïsoleerd van de open wereld en alleen tijdens de oorlog toegewezen aan de twee gildes. De bron houdt een pool van oorlogsmaps bij zodat meerdere oorlogen tegelijk kunnen lopen; bij het starten van een oorlog wordt een vrije map uit de pool gehuurd en bij het einde teruggegeven. De typische stappen zijn:
- Registreer de oorlogsmaps in de
CONFIG/atlas-configuratie van je server; elke map moet met zijn eigen index geladen en gesloten zijn voor gewone spelers. - Teleporteer de gildes naar twee aparte spawnpunten op de map; laat afstand tussen de spawns zodat er geen onmiddellijk contact is.
- Teleporteer aan het einde van de oorlog alle spelers terug naar hun oorspronkelijke locatie en geef de map terug aan de pool.
Het aantal gelijktijdige oorlogen wordt beperkt door hoeveel maps je definieert. Reserveer je op een drukke server niet genoeg oorlogsmaps, dan krijgen gildes een foutmelding "momenteel geen vrije oorlogsarena". Documenteer welke map-indexen voor oorlog gereserveerd zijn; voeg deze maps niet toe aan de normale portaal-/teleportlijst, anders kunnen spelers de arena binnensluipen.
Beloningen en gilderanglijstpunten
Het deel dat spelers motiveert, is de uitslag. Er zijn twee kern-beloningsmechanismen:
- Inzetpot: Leggen beide gildes hetzelfde bedrag in, dan gaat de hele pot naar de opslag van het winnende gilde. Dit voegt een tastbaar gevoel van een weddenschap toe; maar zet je de inzetlimiet te hoog, dan kan één oorlog de economie verstoren.
- Gilderanglijstpunten (ladder): Het winnende gilde wint ranglijstpunten en het verliezende verliest ze. Deze score als gilderanglijst op een website publiceren geeft oorlogen prestige en maakt de rivaliteit blijvend.
Daarnaast kun je aan de questkant reageren op de oorlogsuitslag en extra beloningen uitdelen. Het voorbeeld hieronder geeft de leider van het winnende gilde een symbolische beloningskist:
when button or info begin
local winnaar = guild.get_guild_id() -- gilde in de context
if winnaar == arg1 then -- arg1: id van winnend gilde
pc.give_item2(50300, 1) -- beloningskist (voorbeeld-vnum)
notice_all("Guild war gewonnen door "..guild.get_name().."!")
end
end
Vervang de item-vnum en functienamen altijd door de echte waarden uit je eigen bron; het blok hierboven toont alleen de logica. Houd beloningen bescheiden: regent het bij elke oorlog waardevolle items, dan verlaagt dat hun waarde en zet het spelers ertoe aan nepoorlogen te ensceneren puur voor de buit.
Balanceren en veelgemaakte fouten
Nadat je het guild war-systeem hebt ingeschakeld, komen de meest voorkomende problemen uit de configuratie:
- Nepoorlogen: Twee gildes van dezelfde eigenaar verklaren elkaar voortdurend de oorlog om beloningen te farmen. Inzetten en beloningen laag houden, plus een zelfde-IP/zelfde-speler-controle toevoegen, ontmoedigt dit.
- Minimum aantal leden te hoog: Geen enkel gilde kan aan de eis voldoen en het systeem blijft ongebruikt. Stem het af op je populatie.
- Inmenging van buitenaf bij open-wereldoorlogen: Bij een normale oorlog kunnen derde gildes ertussen springen en de balans verstoren. Wil je eerlijke competitie, maak dan warp war de standaard.
- Oorlogsmap-lek: Belanden oorlogsmap-indexen in de normale teleportlijst, dan komen spelers de arena binnen. Houd deze maps altijd gesloten.
- Scoremisbruik: Je kunt het farmen van score beperken door dezelfde speler steeds opnieuw te doden met een korte kill-cooldown.
Voer na elke wijziging een volledige oorlog van begin tot eind uit met twee testgildes: verklaring, acceptatie, teleport, scoretelling, uitslag en beloning. Live gaan zonder deze end-to-end test is de gemeenschappelijke oorzaak van de meeste guild war-storingen.
Veelgestelde vragen
Ik verklaar een guild war maar hij start niet, waarom?
Er zijn meestal twee redenen: óf een van de gildes haalt het minimum aantal leden niet, óf de leider van het doelgilde heeft de uitnodiging niet geaccepteerd voordat die verliep. Verlaag de waarde min_leden in de configuratietabel, probeer opnieuw en controleer of het acceptatievenster daadwerkelijk opent.
In een warp war worden we niet naar de map geteleporteerd, wat is er mis?
Meestal zijn de oorlogsmaps niet correct in de serverconfiguratie geladen, of is er geen gereserveerde oorlogsmap meer over. Zorg dat de oorlogsmap-indexen gedefinieerd zijn in je atlas/CONFIG-bestand en dat je genoeg maps hebt gereserveerd voor het aantal gelijktijdige oorlogen.
Het winnende gilde krijgt de inzet niet, hoe los ik dat op?
De inzetoverdracht hangt aan de code die de oorlogsuitslag verwerkt; controleer of de inzetlimiet correct is gedefinieerd en of de winvoorwaarde (de scorelimiet bereiken) echt wordt getriggerd. Eindigt de oorlog op tijd voordat de scorelimiet is bereikt, dan behandelen sommige bronnen de uitslag als gelijkspel en betalen de pot terug.
Wil je een eerlijk, stabiel guild war-systeem op je server opzetten? We kunnen samen werken aan warp war maps, score-/inzetbalans en ranglijstpunt-integratie. Om over je project te praten, neem contact met me op.