Înapoi la blogToate tutorialele Metin2
Tutoriale Metin2 · Lecția 70 din 99

Recompense pentru activitățile de breaslă: războaie, premii săptămânale și abuzuri

2 noiembrie 2026 7 min de citit

Breslele țin jucătorii pe server: au prieteni, au un scop, au rivali. E firesc să vrei să le răsplătești activitatea, de exemplu războaiele câștigate sau un clasament săptămânal. Problema e că orice premiu automat poate fi „fabricat”: doi prieteni fac două bresle, se luptă între ele de 50 de ori și iau premiul de 50 de ori. În această lecție înveți ce oferă serverul din start, ce limite pui și cum dai un premiu săptămânal o singură dată pe breaslă.

Pe scurt: premiile de breaslă trebuie să aibă limite (pe zi sau pe săptămână), reguli de participare (număr minim de membri, adversari diferiți) și un premiu care nu poate fi transformat ușor în yang. Verifică totul pe server și testează scenariile de abuz.

Cuvinte pe care le vei întâlni

CuvântCe înseamnă
Breaslă (guild)Un grup permanent de jucători, cu un lider (maestru).
Război de breaslă (GvG)O luptă organizată între două bresle.
Ladder pointsPunctele breslei în clasament, schimbate de războaie.
Breaslă falsă (alt)O breaslă creată doar ca să piardă intenționat.
Event flagO valoare globală a serverului, setată cu game.set_event_flag.

Pasul 1: Ce oferă serverul din start

În pachetul verificat există deja câteva lucruri:

  • Războaie de breaslă cu puncte de clasament (ladder). În sursa verificată, o breaslă poate porni un război doar dacă are ladder points peste 0 și cel puțin 8 membri.
  • Pariuri pe războaie, prin guild_war_bet.quest, la NPC-urile observatoare.
  • Questuri de administrare: creare, nivel, schimbarea maestrului (guild_create.quest, guild_manage.quest, change_guild_master.quest), plus clădirile breslei.

Un detaliu important găsit în sursă: pe serverul de test sau dacă event flag-ul guild_war_test e diferit de 0, verificarea de 8 membri nu se mai face. E util la teste, dar dacă îl lași activ pe serverul real, oricine poate porni războaie cu bresle de 1–2 membri. Verifică-l înainte de lansare.

Pasul 2: Unde apar abuzurile

AbuzulCum aratăCum îl limitezi
Războaie aranjateAceleași două bresle se luptă de zeci de oriPremiu doar pentru primul război cu același adversar pe zi
Bresle falseO breaslă cu 1–2 membri creată ca să piardăNumăr minim de membri și nivel minim al breslei
Schimbarea maestruluiPremiul „pe maestru” se ia din nou după schimbareLimita se ține pe breaslă, nu pe maestru
Yang nelimitatFiecare victorie dă yangPremii mici, limitate pe săptămână, de preferat nevandabile
Membri mutațiJucătorii trec dintr-o breaslă în alta după premiuCondiții de vechime sau premii pe breaslă, nu pe jucător

Regula de bază, ca la toate premiile: un premiu trebuie să coste mai mult efort decât valorează la vânzare. Altfel cineva găsește o cale să-l fabrice.

Pasul 3: Un premiu săptămânal, o dată pe breaslă

Exemplul de mai jos permite maestrului breslei să ia un premiu o dată pe săptămână, dacă breasla are un nivel minim. Limita se ține pe breaslă, nu pe personaj, așa că nici schimbarea maestrului nu o ocolește.

lua
when NPC_BRESLE.chat."Premiul saptamanal al breslei" with pc.has_guild() and pc.is_guild_master() begin
    local id = pc.get_guild()
    local sapt = math.floor(get_global_time() / 604800)
    local cheie = "gpremiu_" .. id
    if guild.level(id) < 5 then
        say("Breasla ta trebuie sa aiba cel putin nivelul 5.")
        return
    end
    if game.get_event_flag(cheie) == sapt then
        say("Breasla ta si-a luat deja premiul in aceasta saptamana.")
        return
    end
    if not pc.enough_inventory(PREMIU) then
        say("Fa loc in inventar si revino.")
        return
    end
    game.set_event_flag(cheie, sapt)
    pc.give_item2(PREMIU, 1)
    say("Premiul breslei " .. guild.name(id) .. " a fost acordat.")
end
BucatăCe face, pe românește
with pc.has_guild() and pc.is_guild_master()Opțiunea apare doar pentru maeștrii de breaslă.
pc.get_guild()Numărul unic al breslei.
math.floor(get_global_time() / 604800)Numărul săptămânii (o săptămână are 604800 de secunde).
"gpremiu_" .. idO cheie separată pentru fiecare breaslă, de exemplu gpremiu_12.
guild.level(id) < 5Breslele foarte mici sau noi nu primesc premiul.
game.get_event_flag(cheie) == saptBreasla a luat deja în această săptămână?
game.set_event_flag(cheie, sapt)Notăm înainte să dăm premiul.
guild.name(id)Numele breslei, pentru mesaj.

Toate funcțiile de mai sus există în quest_functions din pachetul verificat și sunt folosite și de questurile de breaslă originale.

Două lucruri de știut despre event flag-uri

  1. Se salvează global și ajung cu o mică întârziere. Valoarea scrisă cu game.set_event_flag trece prin procesul db și ajunge la toate core-urile după o clipă. Două cereri făcute exact în același moment, pe core-uri diferite, ar putea trece amândouă. Pentru un premiu săptămânal mic, riscul e mic; pentru premii mari, păstrează NPC-ul pe un singur core și verifică logurile.
  2. Fiecare breaslă adaugă un event flag. La câteva sute de bresle e în regulă. Nu folosi modelul acesta pentru lucruri care se repetă la fiecare jucător.

Pentru limite pe jucător (de exemplu „fiecare membru ia o dată pe săptămână”), folosește pc.setqf, ca în lecția despre cooldown. Nu scrie semne în when login: există un bug cunoscut al motorului care poate strica datele questurilor.

Pasul 4: Premii pentru războaie

Un premiu automat la fiecare victorie e greu de făcut sigur doar din quest. Variante mai sigure pentru început:

  • Clasament săptămânal pe ladder points, cu premii date manual de echipă, după verificarea logurilor.
  • Turnee anunțate, cu reguli scrise: număr minim de membri, adversari diferiți, ore fixe.
  • Premii de prestigiu (titluri, costume, anunțuri) în loc de yang sau materiale vandabile.

Dacă vrei totuși premii automate pe victorie, limita trebuie să țină cont de adversar și de numărul de victorii pe zi. Asta înseamnă de obicei modificări în sursa C++, testate serios. Vezi intrările și ieșirile de yang ca să nu creezi o sursă nouă de inflație.

Ce ar trebui să vezi: maestrul ia premiul o dată pe săptămână; după schimbarea maestrului, noul maestru vede mesajul „deja luat”; o breaslă sub nivelul cerut primește refuz.

Cum testezi

Pe serverul de test:

  1. Creează două bresle cu personaje de test și ia premiul cu maestrul primei bresle.
  2. Încearcă din nou: trebuie să primești refuz.
  3. Schimbă maestrul și încearcă cu noul maestru: tot refuz.
  4. Încearcă cu o breaslă sub nivelul 5.
  5. Pentru teste de săptămână nouă, schimbă temporar 604800 cu o valoare mică (de exemplu 300), apoi revino.
  6. Verifică event flag-ul guild_war_test înainte de lansare.

Greșeli des întâlnite

  • Premiu pe maestru, nu pe breaslă. Se ia din nou după schimbarea maestrului.
  • Yang pentru fiecare victorie. Războaie aranjate și inflație.
  • Fără număr minim de membri sau nivel. Breslele false iau premii.
  • guild_war_test lăsat activ. Războaie cu bresle foarte mici.
  • Reguli nescrise. Jucătorii nu știu ce e permis, iar tu nu poți sancționa corect.

Întrebări frecvente

Pot da premiul tuturor membrilor breslei deodată?

Din quest, în pachetul verificat, nu există o funcție simplă care să parcurgă toți membrii breslei. Mai simplu: fiecare membru își ia singur premiul de la NPC, cu limită pe personaj și condiția să fie în breaslă.

Ce premiu e potrivit pentru bresle?

Lucruri de prestigiu sau utile breslei, nu bani. Un premiu mic, constant și greu de vândut ține breslele active fără să strice economia.

Cum aflu numele unei bresle după ID?

Cu guild.name(id), ca în exemplu.

Ce urmează

Ai terminat capitolul despre dungeon-uri, world boss și bresle. În capitolul următor, despre operarea zilnică, începi cu restaurarea unui backup pe serverul de test.

Toate lecțiile sunt în lista tutorialelor Metin2.

Server Metin2 gata de joc

Găzduire Metin2 în România, cu instalare de serverfiles, bază de date MySQL și protecție Anti-DDoS inclusă.

DiscordWhatsApp