Het Metin2 pet-systeem is de manier waarop je de metgezellen beheert die je personage volgen, passieve bonussen geven en zelfs kunnen levelen. Op klassieke servers is een pet puur cosmetisch, terwijl een modern pet-systeem voeding, levels, bonussen en soms vaardigheden meebrengt. In deze gids leg ik uit hoe het systeem werkt, waar pet-bonussen vandaan komen, het voedingsmechanisme, en de precieze stappen om een gloednieuw pet-model aan je server toe te voegen.
Hoe het pet-systeem werkt
In Metin2 is een pet in de praktijk een speciale mob-entry. Het personage activeert de pet via een oproepvoorwerp in de inventaris (een ei, een fluit of een halsband); dit is een voorwerp van het type USE, en bij gebruik verschijnt er een tijdelijke entiteit die aan de speler gekoppeld is. De pet wordt niet als vijand op de grond aangemaakt, maar als een NPC die zijn eigenaar volgt.
- Oproepvoorwerp — gedefinieerd in
item_proto, meestal mettype = USEen een subtype in de trant vanUSE_PET. - Pet-model — komt overeen met een
vnuminmob_proto; de visuals komen uit een.gr2-modelbestand aan de clientzijde. - Gedrag — de spawn-code koppelt de pet aan zijn eigenaar; hij valt niet aan, maar blijft simpelweg in de buurt (behalve bij battle-pet-varianten).
De nieuwere pet-systemen (de uitbreiding die meestal het "pet system" wordt genoemd) leggen bovenop deze basisstructuur levels, een hongerbalk, een tijdsduur en bonussen. Die lagen worden grotendeels aangestuurd door de quest-engine (Lua) en een paar extra tabellen.
Waar pet-bonussen vandaan komen
Pet-bonussen zijn tijdelijke stat-verhogingen die worden toegepast op de speler die de pet draagt. Je kunt ze op twee manieren aansluiten:
- Voorwerp-bonussen — definieer bonussen rechtstreeks op het oproepvoorwerp via
item_proto(bijvoorbeeldAPPLY_MAX_HP,APPLY_ATT_SPEED). Ze gelden zolang de pet actief is. - Quest-gebaseerde bonussen — wil je bonussen die meeschalen met het pet-level, dan is ze toevoegen vanuit een Lua-quest via aanroepen als
apply_bonusveel flexibeler.
Het onderstaande voorbeeld is vereenvoudigde quest-logica die de speler een aanvalsbonus geeft op basis van het pet-level wanneer deze wordt opgeroepen:
quest pet_bonus begin
state start begin
when 53001.use begin
local lvl = pc.getqf("pet_level")
-- +5 aanvalswaarde per level
apply.apply("ATT_GRADE_BONUS", lvl * 5, 60 * 30)
chat("Je pet versterkt je!")
end
end
end
Het belangrijkste punt: koppel de duur van de bonus aan de duur van de pet en pas de bonus consistent opnieuw toe wanneer de pet wordt opgeroepen of teruggeroepen. Anders kan een speler het misbruiken door de pet steeds opnieuw op te roepen.
Het voedingsmechanisme
Voeding is het deel van het pet-systeem dat de speler bezighoudt. De logica is: de pet heeft een honger-/verzadigingswaarde die na verloop van tijd daalt, en de speler vult die aan met een speciaal pet-voer-voorwerp. Daalt de verzadiging naar nul, dan stopt de pet met het geven van bonussen of verdwijnt hij.
- Sla de verzadigingswaarde op in een quest-flag op de speler:
pc.setqf("pet_food", 100). - Laat de waarde regelmatig dalen met een timer (quest
when … with timer). - Wanneer het pet-voer-voorwerp wordt gebruikt, verhoog je de waarde en voorkom je dat deze het maximum (bv. 100) overschrijdt.
quest pet_feed begin
state start begin
when 53010.use begin
local food = pc.getqf("pet_food")
food = math.min(food + 25, 100)
pc.setqf("pet_food", food)
item.remove()
chat("Pet-verzadiging: "..food.."/100")
end
end
end
Je kunt voeding combineren met het level-systeem: naarmate de pet wordt gevoerd, verdient hij een kleine pet_exp-waarde, levelt bij bepaalde drempels en groeien zijn bonussen. Deze cyclus zet de speler ertoe aan om regelmatig voor de pet te zorgen.
Stappen om een nieuw pet-model toe te voegen
Een visueel nieuwe pet aan je server toevoegen vereist bestanden aan zowel de client- als de serverzijde. De volgorde is als volgt:
- 1. Modelbestanden: plaats de
.gr2-model- en animatiebestanden van de nieuwe pet, samen met de textuur (.dds)-bestanden, in de juistepack-map op de client. - 2. mob_proto-entry: voeg de pet toe aan
mob_protoonder een nieuwevnum, als NPC/pet-type met de juiste snelheids- en groottewaarden. De server moet deze entry correct lezen. - 3. Client-definitie: laat de client-side
mob_proto(of.txt-definitie) en het modelpad overeenkomen; de koppeling tussen devnumen het.gr2-bestand moet kloppen. - 4. Oproepvoorwerp: maak een nieuwe
item_proto-entry en koppel die bij gebruik aan de quest of code die de pet met deze nieuwevnumoproept. - 5. Lokalisatie: voeg de naam/beschrijving van de pet en het voorwerp toe in de
locale-bestanden.
Ga bij het testen stap voor stap te werk: verschijnt het voorwerp eerst in de inventaris; verschijnt de pet vervolgens bij gebruik; zijn daarna het model en de animatie correct; en werkt ten slotte de bonus-/voedingscyclus. Elke stap isoleren maakt het debuggen veel makkelijker.
Veelgemaakte fouten
- Onzichtbare pet: de
vnumbestaat op de server maar het modelpad komt aan de clientzijde niet overeen — hij verschijnt maar blijft onzichtbaar.mob_protomoet aan beide kanten consistent zijn. - Bonus blijft permanent: de bonus wordt niet gewist wanneer de pet wordt teruggeroepen. Koppel de duur aan de levensduur van de pet en reset de bonus bij het terugroepen.
- proto-mismatch: de
item_proto/mob_proto-versies van client en server verschillen; dit uit zich als een "onbekend voorwerp" of een crash. Distribueer altijd dezelfde proto naar beide kanten.
Veelgestelde vragen
Kan een pet het personage schaden of aanvallen?
Een standaard pet volgt alleen zijn eigenaar en valt niet aan. Wil je een "battle pet", dan moet je een apart gedrag (mob-AI) definiëren en de pet zo coderen dat hij vijanden aanvalt; dat is een ander ontwikkelwerk dan de klassieke volgende pet.
Verdwijnt de pet als ik hem niet voer?
Dat hangt volledig af van je systeemontwerp. Een veelgebruikte aanpak is dat de pet stopt met bonussen geven zodra de verzadiging nul bereikt; op sommige servers wordt de pet volledig teruggeroepen. Jij bepaalt de logica in de Lua-quest.
Is een pet-level-systeem verplicht?
Nee. Voor een eenvoudige cosmetische pet zijn alleen een oproepvoorwerp en een model voldoende. Levels, voeding en bonuslagen zijn optionele functies die worden toegevoegd om de betrokkenheid van spelers te vergroten.
Wil je een solide, exploit-bestendig pet-systeem voor je server? Ik kan de hele flow bouwen en testen — het toevoegen van een pet-model, het voedingsmechanisme en de bonussen — van begin tot eind. Neem contact op om over je project te praten.