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

Game, db, client și sursă: ce este fiecare și când ai nevoie de compilare

2 noiembrie 2026 6 min de citit

Până acum ai lucrat cu fișiere text, questuri și baza de date. Pe forumuri vei auzi însă des: „trebuie să modifici în sursă și să recompilezi”. Sună complicat, iar mulți încep să schimbe lucruri la întâmplare. Lecția aceasta îți face ordine în cap: ce piese are un server Metin2, din ce sunt construite și când ai nevoie de compilare (de cele mai multe ori, nu ai).

Pe scurt: game și db sunt programe gata construite din cod sursă C++. Fișierele TXT, questurile și baza de date le dau „datele”. Clientul e alt program, pe Windows. Recompilezi doar când schimbi comportamentul programului, nu datele lui.

Nivel: Avansat. Ce trebuie să știi înainte: structura serverfiles, conectarea prin SSH și WinSCP și să ai un server de test. Nu ai nevoie să știi programare pentru lecția asta.

Cuvinte pe care le vei întâlni

CuvântCe înseamnă
Cod sursăTextul programului, scris de programatori (fișiere .cpp și .h). Calculatorul nu îl poate rula direct.
CompilareTransformarea codului sursă într-un program care rulează. Ca o rețetă transformată în prăjitură.
Binar (executabil)Programul rezultat după compilare. De exemplu fișierul game.
Librărie (bibliotecă)O bucată de cod gata compilată, folosită de mai multe programe. Fișiere .a.
CoreUn proces game pornit, cu propriul CONFIG (un canal, auth, game99).

Piesele serverului, pe rând

Gândește-te la un restaurant. Bucătarul e game, cămara e db plus MySQL, iar chelnerul care vorbește cu clienții e clientul jocului.

PiesăCe faceUnde o găsești (în pachetul verificat)
gameToată logica jocului: monștri, lupte, drop, questuri, hărți. Același program rulează ca auth, ca fiecare canal și ca game99.share/bin/game, iar fiecare core are un link spre el
dbIntermediarul dintre game și MySQL. Ține datele personajelor în memorie și le salvează.share/bin/db, cu link în folderul db/
ClientulProgramul de pe Windows: grafică, interfață, sunete. Trimite și primește mesaje de la game.Pe calculatorul jucătorului (de exemplu Metin2Distribute.exe)
Sursa serveruluiCodul C++ din care se construiesc game și db.Un folder separat, nu pe serverul live
Sursa clientuluiCodul C++ al clientului, deschis cu Visual Studio.Pe calculatorul tău Windows

În pachetul pe care l-am verificat, auth, fiecare canal și game99 sunt de fapt același fișier game, folosit prin legături (link-uri) din folderele lor. De aceea, când înlocuiești share/bin/game, schimbi toate core-urile deodată. Ținem minte asta pentru lecția despre pus binarele pe server.

Cum arată sursa serverului

Sursa pe care am verificat-o are această structură:

text
server-src/
  Makefile        <- „rețeta generală” care le construiește pe toate
  libthecore/     <- funcții de bază: rețea, jurnale (log), timp
  libpoly/        <- calcule de geometrie pentru hărți
  libgame/        <- bucăți comune de logică
  libsql/         <- legătura cu MySQL
  liblua/         <- limbajul Lua, pentru questuri (Lua 5.0.3)
  libserverkey/   <- verificare de cheie (specific pachetului)
  common/         <- fișiere comune game și db (tables.h, length.h)
  game/src/       <- codul programului game
  db/src/         <- codul programului db
  etc/            <- librării externe: boost, cryptopp, mysql

Bucata game/src/quest/ conține și sursa compilatorului de questuri qc. Alte pachete pot avea foldere în plus sau în minus, ori pot folosi alt sistem de construcție (CMake în loc de Makefile). Uită-te la ce ai tu.

Ca să afli singur ce sistem folosește sursa ta, caută „rețetele” de construcție:

sh
find /usr/home/sursa -maxdepth 3 \( -name Makefile -o -name CMakeLists.txt \)

/usr/home/sursa e un exemplu: pune calea unde ai copiat sursa. Dacă vezi Makefile, sursa se construiește cu gmake (despre asta în lecțiile următoare).

Când NU ai nevoie de compilare

Aceasta e partea cea mai importantă. Majoritatea modificărilor de pe un server nu cer compilare:

Vrei să schimbiCe modificiCompilezi?
Dropul unui monstru sau cufărFișierele TXT de dropNu
HP, EXP, prețul unui itemmob_proto, item_protoNu (restart sau reîncărcare)
Un quest nouFișierul .questDoar questul, cu qc
Iconițe, texte în clientFișierele din pack-urile clientuluiNu, faci update de client
Canale, porturiCONFIGNu
O formulă din joc (de exemplu cum se calculează daunele)Codul C++ din game/srcDa, compilezi game
Un sistem nou care trimite date noi la clientC++ în game și în clientDa, pe amândouă

Regula simplă: dacă poți face ceva din fișiere sau questuri, fă-l acolo. Codul C++ e ultima soluție, nu prima.

Ce ai nevoie ca să compilezi

  1. Sursa exactă din care s-a construit game-ul tău. O sursă „asemănătoare” de pe un forum poate produce un program care nu se înțelege cu clientul sau cu baza ta de date.
  2. Un server de test, separat. Nu compila și nu testa niciodată direct pe serverul cu jucători.
  3. Un sistem potrivit cu binarele pe care le ai deja (vezi mai jos).

Binarele din pachetul verificat sunt pe 32 de biți (i386), construite pentru FreeBSD 13.0. Verifici la tine cu:

sh
file /usr/home/game/share/bin/game

Ce ar trebui să vezi: ceva de forma ELF 32-bit LSB executable, Intel i386 ... for FreeBSD 13.0. Notează rezultatul. Vei avea nevoie de el în lecția despre mediul de compilare.

Greșeli des întâlnite

  • Recompilezi pentru o schimbare de drop. Pierzi timp și riști să strici ceva. Dropul e în fișiere TXT.
  • Descarci „o sursă” de pe internet și o pui peste serverul tău. Dacă nu e exact sursa pachetului tău, structurile de date pot fi diferite și poți strica personaje.
  • Crezi că auth e alt program. În multe pachete e același game, pornit cu alt CONFIG.
  • Schimbi serverul și uiți de client. Dacă modificarea schimbă ce se trimite între ele, trebuie compilate amândouă.

Întrebări frecvente

Pachetul meu nu are sursă. Pot totuși să-l administrez?

Da. Poți face aproape tot din fișiere, questuri și baza de date. Fără sursă nu poți schimba doar logica internă a programului.

Sursa trebuie să stea pe serverul live?

Nu e nevoie. E mai sigur s-o ții pe serverul de test, unde compilezi. Pe live ajunge doar binarul verificat.

Ce e fișierul .sln pe care l-am găsit?

E o „soluție” Visual Studio, de pe Windows. Poate fi pentru client sau pentru unelte. În sursa verificată există și un m2server.2008.sln, vechi, pentru Windows; pe FreeBSD folosești Makefile-urile.

Ce urmează

Mergi mai departe cu pregătirea mediului de compilare pe FreeBSD. 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