`game` este programul care face jocul să existe: monștri, lupte, dropuri, questuri, hărți. În pachetul verificat, același fișier rulează ca `auth`, ca fiecare canal și ca `game99`. Îl compilezi atunci când schimbi ceva în codul C++ al jocului. Prima dată, însă, îl compilezi **fără nicio modificare**. Așa afli dacă mediul tău e corect, înainte să complici lucrurile.
game/src, rulezi gmake cu log salvat, verifici fișierul rezultat și îl testezi pe serverul de test: login, monstru, cufăr, NPC, schimbare de canal, relogare. Abia când sursa nemodificată trece toate testele, începi să schimbi cod.Nivel: Avansat. Ce trebuie să știi înainte: mediul de compilare (cu GAMEDIR schimbat), librăriile compilate și, ideal, compilarea db, care e mai mică și te încălzește.
Cuvinte pe care le vei întâlni
| Cuvânt | Ce înseamnă |
|---|---|
| Build | Rezultatul unei compilări (sau compilarea însăși). „Un build curat” = fără erori. |
| Simboluri de depanare | Informații puse în program (flag-ul -g) care arată, la un crash, fișierul și rândul din cod. |
OBJDIR | Folderul unde se pun fișierele intermediare .o ale lui game. |
| Cod de ieșire (exit code) | Numărul cu care se termină o comandă. 0 = fără eroare. |
Pasul 1: Citește rețeta
cd /usr/home/sursa/game/src
grep -n "^CC\|^CFLAGS\|^GAMEDIR\|^TARGET" MakefileÎn sursa verificată, CFLAGS începe cu -g -Wall -w -O2 -m32 -pipe -std=c++2a. Pe românește:
| Flag | Ce face |
|---|---|
-g | Pune simbolurile de depanare. Fără ele, un crash e aproape imposibil de citit. |
-w | Ascunde avertismentele. Erorile adevărate apar în continuare. |
-O2 | Optimizare: programul merge mai repede. |
-m32 | Program pe 32 de biți. |
-std=c++2a | Versiunea limbajului C++ folosită. |
Verifică încă o dată că GAMEDIR arată spre /usr/home/build, nu spre un server pornit.
Pasul 2: Compilează
touch Depend
gmake dep
gmake clean
gmake 2>&1 | tee /usr/home/build/game-build.logSursa verificată are peste 150 de fișiere .cpp doar în game/src, deci durează mai mult decât db. Pe un server de test cu două nuclee poți folosi gmake -j2 în loc de gmake, ca să meargă mai repede. Dacă apar erori, revino la gmake simplu: așa erorile nu se amestecă în log.
Ce ar trebui să vezi: multe rânduri compile ...cpp, apoi:
linking ../game....
Moving ../game to /usr/home/build
All done! Your game file moved to your server directory.Atenție: când trimiți rezultatul prin tee, codul de ieșire pe care îl vezi e al lui tee, nu al lui gmake. De aceea nu te baza pe el. Caută erorile direct în log:
grep -n "error" /usr/home/build/game-build.log | head -20Dacă nu apare nimic și fișierul game există în /usr/home/build, compilarea a reușit.
Pasul 3: Verifică programul
cd /usr/home/build
ls -lh game
file game
ldd game
sha256 game
mv game game-2026-11-02-nemodificatCe ar trebui să vezi:
file: aceeași arhitectură ca vechiulgame(la noiELF 32-bit ... Intel i386) și, datorită lui-g,with debug_info, not stripped.ls -lh: un fișier mare, de zeci de MB. E normal din cauza simbolurilor de depanare. În pachetul verificat,gameare în jur de 80 MB.ldd: nicio librărie cunot found.
Notează amprenta sha256 în jurnalul tău.
Pasul 4: Testul complet pe serverul de test
Un build care se termină fără erori nu înseamnă un joc care merge. Pune-l pe serverul de test (pașii exacți sunt în cum pui binarele pe server) și verifică:
- Pornesc toate core-urile, în ordine: întâi
db, apoiauth, apoi canalele. syserrdin fiecare folder de core nu are erori noi.- Te loghezi și alegi personajul.
- Omori un monstru și iei dropul.
- Deschizi un cufăr.
- Vorbești cu un NPC care are quest.
- Schimbi canalul.
- Ieși și intri din nou: totul e la locul lui.
Compară cu ce făcea vechiul game. Fiindcă n-ai modificat nimic în cod, comportamentul trebuie să fie identic.
De ce nu pornește
| Ce vezi | Ce înseamnă | Ce faci |
|---|---|---|
Shared object "..." not found | Lipsește o librărie de sistem | Rulează ldd game și instalează pachetul lipsă |
ELF ... wrong class sau Exec format error | Arhitectura nu se potrivește cu sistemul | Compilează pe un sistem cu aceeași arhitectură |
| Pornește și se oprește imediat | Problemă de configurare sau crash | Citește syserr și caută un game.core |
| Merge, dar clientul nu se conectează | Posibil mesaje diferite între game și client | Vezi protocolul game–client |
Pentru restul problemelor de pornire, lecția serverul nu pornește rămâne valabilă.
Greșeli des întâlnite
- Începi cu modificări înainte de un build curat al sursei originale. Când apare o eroare, nu știi dacă e de la tine sau de la mediu.
- Scoți simbolurile de depanare (
strip) ca să micșorezi fișierul. La primul crash nu vei mai ști unde s-a întâmplat. - Testezi doar loginul. Multe probleme apar la trade, la drop sau la schimbarea canalului.
- Rulezi
gmake cleanîn sursa „bună” fără copie, apoi nu mai poți reveni la librăriile vechi.
Întrebări frecvente
Trebuie să compilez tot game pentru o mică schimbare?
Nu. Fără gmake clean, gmake recompilează doar fișierele schimbate și apoi face legarea finală. Folosește clean când schimbi flag-uri, compilatorul sau fișiere .h folosite peste tot.
Pot rula game compilat pe alt calculator decât cel de test?
Da, dacă sistemul are aceeași arhitectură și librăriile cerute de ldd. De aceea serverul de test trebuie să semene cu cel live.
Ce e limit_time.h?
Un fișier generat de un script Python, legat de o funcție de „expirare” a serverului. În sursa verificată, funcția e dezactivată (ENABLE_LIMIT_TIME e comentat), deci nu te afectează.
Ce urmează
Ai un game și un db testate. Află cum le pui pe server în siguranță. 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ă.