aslain.dev
0%
01 Hizmetler 02 Hakkımda 03 Projeler 04 Stack 05 Blog 06 İletişim
← Tüm makaleler Metin2

Metin2 Kostuumsysteem: installatie en nieuwe kostuums

Het Metin2 kostuumsysteem is een functie die op een moderne Metin2-server bijna onmisbaar is geworden, omdat spelers er het uiterlijk van hun harnas en wapens mee kunnen veranderen terwijl de statistieken behouden blijven. De logica is eenvoudig: een item dat in een apart kostuumslot wordt gedragen verandert het model van het personage maar geeft geen bonussen; de echte bonussen komen nog steeds van het onderliggende harnas. In dit artikel lopen we stap voor stap door hoe je het systeem server-side activeert, hoe je item_proto configureert en hoe je vanaf nul een nieuw body- of wapenkostuum definieert.

Hoe het kostuumsysteem werkt

Kostuums worden afgehandeld via een apart itemtype en uitrustingsslot, zowel op de client als op de server. De kernbouwstenen zijn:

  • Itemtype: ITEM_COSTUME — kostuumitems worden met dit type gemarkeerd in plaats van een gewoon harnas (ITEM_ARMOR).
  • SubType: COSTUME_BODY (lichaam-/harnasuiterlijk) en COSTUME_WEAPON (wapenuiterlijk). In de meeste sources zitten de subtypes haar (COSTUME_HAIR) en rijdier (COSTUME_MOUNT) in dezelfde enum.
  • Uitrustingsslot: het uitrustingsvenster van het personage heeft een aparte WEAR_COSTUME / WEAR_COSTUME_WEAPON positie.

Wanneer een speler een kostuum draagt, leest de server de uiterlijkwaarde uit het value-veld van het kostuum en meldt aan nabije spelers dat het model is veranderd. De bonusberekening staat los van het kostuumslot, en daarom moet je geen bonussen in de value-velden van een kostuum plaatsen.

Het systeem activeren in de serversource

In de meeste Metin2-sources wordt het kostuumsysteem geregeld door een compileervlag. Open de betreffende define in common/service.h:

// common/service.h
#define ENABLE_COSTUME_SYSTEM

Na het activeren van de define moeten zowel game als db (en de client, als je die bouwt) opnieuw worden gecompileerd. Als je source al met kostuumondersteuning komt, kun je deze stap overslaan; voer grep -r "COSTUME_BODY" common/ uit om snel te controleren of het systeem al bestaat.

cd /usr/metin2/server/source
grep -rn "COSTUME_BODY" common/length.h common/item.h

item_proto: het kostuumitem definiëren

Een nieuw bodykostuum definieer je vrijwel exact zoals een gewoon harnas; het verschil zit in het itemtype en de draagvlaggen. Vul je SQL-regel in (of de tekstregel, als je item_proto.txt compileert) volgens deze logica:

  • type = ITEM_COSTUME
  • subtype = COSTUME_BODY (gebruik COSTUME_WEAPON voor wapens)
  • antiflag: voor een geslachts-/klassebeperking voeg je vlaggen toe zoals ANTI_MUSA of ANTI_FEMALE — als een model bijvoorbeeld alleen voor vrouwelijke personages is gemaakt, markeer dan de mannelijke klassen als anti.
  • wearflag = WEARABLE_COSTUME — dit zorgt dat het item in het juiste slot terechtkomt.
  • value0 = voor een body de model-/vormwaarde die het personage aanneemt (overeenkomend met het .gr2-setnummer in je client).
  • limittype / limitvalue: voor een tijdgebonden kostuum gebruik je LIMIT_REAL_TIME met een duur in seconden.

Als je het via de database toevoegt, ziet een voorbeeldquery er zo uit (vnum en naam naar eigen inhoud):

INSERT INTO player.item_proto
  (vnum, name, type, subtype, weapon, wearflag, antiflag, value0)
VALUES
  (85000, 'Kostuumharnas (Rood)', 27, 0, 0, 16384, 0, 101);

Hier komt type=27 overeen met de constante ITEM_COSTUME in je source, en subtype=0 met COSTUME_BODY. Controleer deze numerieke waarden tegen je eigen item.h — de volgorde van de enum kan tussen versies verschillen, dus ga er niet vanuit.

Clientzijde: model en itemkoppeling

Zelfs als de server het item herkent, verschijnt het kostuum niet zonder de visuele bestanden op de client. Wat je nodig hebt:

  • item_proto (client): dezelfde vnum-, type- en subtype-waarden moeten ook in het clientpack bestaan.
  • item_list.txt: hierin worden het icoon en het modelpad van het kostuum gekoppeld.
  • Modelbestanden: voor een bodykostuum de .gr2 mesh/motion-set van het personage; voor een wapenkostuum het bijbehorende wapenmodel, in het pack geplaatst.

Bij een bodykostuum bepaalt de value0-waarde welk personagemodel de client laadt, dus deze waarde moet exact overeenkomen tussen client en server. Komen ze niet overeen, dan draagt de speler het kostuum maar verandert het uiterlijk niet, of wordt het verkeerde model geladen.

Testen en veelgemaakte fouten

Hercompileer na het toevoegen van het nieuwe kostuum item_proto (of ververs de DB-cache) en test het op je personage:

/item 85000

Gebruik het GM-commando om het item in je inventaris te zetten, sleep het naar het kostuumslot en bevestig dat het uiterlijk verandert. De meest voorkomende problemen zijn:

  • Item gaat niet naar het kostuumslot: verkeerde wearflag. Controleer of de juiste bit voor WEARABLE_COSTUME is gezet.
  • Het wordt gedragen maar het uiterlijk verandert niet: value0 komt niet overeen met de client, of de define ENABLE_COSTUME_SYSTEM staat uit.
  • Het kan door het verkeerde geslacht worden gedragen: ontbrekende antiflag. Voeg anti-vlaggen toe voor klassen zonder model.
  • Bonussen komen niet van het harnas: je hebt per ongeluk bonussen op het kostuumitem gezet; bonussen komen van het onderliggende harnas, het kostuum mag alleen uiterlijk leveren.

Veelgestelde vragen

Heeft elke Metin2-source een kostuumsysteem?

De meeste moderne sources leveren het kant-en-klaar, maar oudere "vanilla" sources moeten het soms handmatig toevoegen. Je kunt het snel controleren door te zoeken naar de constanten ITEM_COSTUME en COSTUME_BODY in common/item.h.

Kunnen er bonussen aan een kostuum worden toegevoegd?

Technisch kun je bonussen in de value-velden invoeren, maar het wordt afgeraden. Het doel van een kostuum is puur uiterlijk; bonussen op het harnas houden is correct, zowel voor de balans als voor de verwachtingen van spelers. Wil je toch een bonuskostuum, behandel dat dan als een aparte, bewuste ontwerpkeuze.

Hoe maak ik een tijdgebonden (gehuurd) kostuum?

Zet limittype op LIMIT_REAL_TIME en schrijf de duur in seconden in limitvalue; het kostuum wordt na de opgegeven tijd onbruikbaar. Dit is een gangbare methode voor huurkostuums in de item shop.

Wil je het kostuumsysteem soepel op je eigen server integreren? Heb je hulp nodig bij het bewerken van de Metin2-serversource, item- en systeemontwikkeling, neem dan contact met me op — laten we samen een oplossing plannen die bij je project past.

Devamı için