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

Metin2 pet-systeem: gids voor het toevoegen van pets

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 met type = USE en een subtype in de trant van USE_PET.
  • Pet-model — komt overeen met een vnum in mob_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 (bijvoorbeeld APPLY_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_bonus veel 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 juiste pack-map op de client.
  • 2. mob_proto-entry: voeg de pet toe aan mob_proto onder een nieuwe vnum, 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 de vnum en 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 nieuwe vnum oproept.
  • 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 vnum bestaat op de server maar het modelpad komt aan de clientzijde niet overeen — hij verschijnt maar blijft onzichtbaar. mob_proto moet 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.

Devamı için