snow_ro
Member
📜
Messages
1
👍
Reactions
0
🏆
Points
5
RO:
EN:
Client DirectX 9Ex • Server FreeBSD AMD64 • CMake + Ninja • C++20 • Cython integrat
Despre proiect
Pun la vânzare PrimeCore, un proiect Metin2 la care s-a lucrat cu accent pe trei lucruri care, din experiența mea, contează cel mai mult pe termen lung: o bază tehnică actualizată, sisteme ușor configurabile și stabilitate.
Nu este o sursă veche, baza fiind Martysama 5.9 și nici un server prezentat doar printr-o listă lungă de define-uri. Sursele server-src și client-src au fost făcute CMake, iar mai multe zone sensibile au fost refăcute: build-ul, arhitectura pe 64bit a serverului, randarea DirectX, încărcarea clientului, warp-ul și sincronizarea dintre client și server.
PrimeCore poate fi folosit ca bază pentru un proiect oldschool, middleschool sau un concept custom. Valoarea reală este fundația pe care se poate construi.
Contact
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
Server source
• Sursa server folosește CMake și standardul C++20.
• Build-ul recomandat rulează pe FreeBSD 15/15.1 AMD64.
• Game&Db sunt compilate nativ pe 64bit. Nu este un build 32-bit pornit pe un sistem de operare x64.
• Compilarea este făcută cu Ninja, iar scriptul verifică înainte de link că bibliotecile importante sunt ELF64.
• Configurația standard de server este RelWithDebInfo: optimizare pentru rulare, dar și simboluri utile atunci când trebuie urmărit un crash.
• Există suport opțional în CMake pentru AddressSanitizer, ccache și linker LLD.
• Logurile de build sunt separate în output general, warnings și errors, lucru util când proiectul este continuat de mai mulți developeri.
Client source
• Sursa client folosește CMake, Visual Studio 2022 și C++20.
• Codul a fost curățat în zone sensibile pentru compatibilitate modernă și tipuri pe 64bit, însă launcherul distribuit jucătorilor este compilat Win32/x86. Alegerea este intenționată: păstrează compatibilitatea cu sistemele și componentele clasice folosite de jucătorii Metin2.
• Motorul grafic rulează pe Direct3D 9Ex.
• Python 2.7 este static în configurația actuală.
• Sistemul de pack este cel prezent și în sursa WoM2/WoM3 (PAK Archiver) root poate fi arhivat normal sau (recomandat pentru live-server) în varianta Cython.
Configurațiile clientului
metin2_debug - pentru debugging și verificări.
metin2_dev - build rapid și optimizat pentru testele zilnice; păstrează profilerele proiectului.
metin2_cython - configurația de distribuție, cu optimizări de release. Cythonizarea citește direct fișierele Python din directoarele
și
generează fișierele necesare și le include în build. Pack-ul final root este creat fără fișierele
sau fișiere
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
• Suport UI pentru imagini WebP, inclusiv continuitate pentru stările butoanelor.
• Tranziții și clipping modernizate pentru ferestrele interfeței.
• Încărcarea din loading phase este împărțită în pași și poate fi urmărită în profiler, în loc să rămână o pauză imposibil de diagnosticat.
Calitate vizuală și control grafic
Trecerea la Direct3D 9Ex nu reprezintă doar o schimbare tehnică în sursă. Clientul oferă și setări grafice integrate, prin care fiecare jucător poate alege echilibrul potrivit între claritatea imaginii și performanță.
• Filtrarea anisotropică poate fi setată pe OFF, 2x, 4x, 8x sau 16x, îmbunătățind claritatea texturilor privite de la distanță sau din unghi, în special pe teren și obiectele din hartă.
• Clientul verifică nivelul maxim acceptat de placa video și dezactivează automat opțiunile care nu sunt suportate.
• Sharpness-ul este reglabil în timp real între 0.00 și 0.30 și folosește post-procesarea integrată în client pentru o imagine mai clară, fără filtre sau programe externe.
• Valorile sunt păstrate în configurația clientului și reaplicate automat la următoarea pornire.
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
Sisteme principale
Wikipedia in-game
• A fost creat "Wikipedia-link", se poate copia link-ul unei categorii, pagina unui item/mob, orice și trimite pe chat sau în șoaptă unui jucător.
• Categorie de crafting
Imagini:
Dungeon Info + Dungeon Creator
• Fereastra de temnițe arată nivelul necesar, limita de nivel, intrarea, cooldown-ul, permisul, rasa, elementul și informații despre boss. Jucătorul se poate teleporta la NPC-ul de intrare în dungeon sau se poate teleporta direct în dungeon P2P contra unei sume de yang (5.000.000), poate deschide direct pagina bossului în Wikipedia și poate vedea timpul rămas în timp real. Lista poate fi reordonată și pot fi ascunse temnițele care nu îl interesează.
• Sistemul suportă cerințe de grup, cooldown, rejoin, skip-pass (intrare direct la boss), coordonate de intrare/ieșire și etape configurabile.
• Se pot configura efecte temporare direct în mapă (poți pune effecte de săgeată în mapă să evidențiezi jucătorului drumul și când jucătorul se apropie de săgeată ea dispare singură)
• Se poate configura ca jucătorul să primească un bonus la finalizarea dungeon-ului. (bonusul și timpul sunt setate în config-ul dungeon-ului)
• Tipurile de stagii existente:
Exemplu config Turnul Demonilor:
Imagini:
Biolog
• Misiunile biologului sunt configurate server-side prin JSON: nivel minim, item cerut, cantitate, șansă, cooldown, bonusuri și recompense. Sistemul acceptă atât recompense fixă (bonsuri), cât și alegerea bonusului de către jucător.
Exemplu config:
Imagini:
Cube Renewal
• Interfață modernă pentru crafting.
• Posibilitatea de a apăsa click stânga pe itemul și deschiderea paginii wikipedia a itemului direct din fereastra de crafting. (se aplică și în fereastra de plusare item)
• Posibilitatea de a apăsa click dreapta pe itemul și căutarea itemului în searchshop direct din fereastra de crafting. (se aplică și în fereastra de plusare item)
Imagini:
Horse Manager
• Evoluția calului nu mai este blocată într-un quest. Nivelurile, bonusurile, materialele, costul, nivelul minim al jucătorului, șansa, cooldown-ul și misiunile sunt configurabile pe server prin JSON.
• Misiunile pot cere uciderea unui anumit număr de monștri și pot avea sau nu limită de timp. Interfața arată progresul, bonusul următor, materialele și toate cerințele. Este inclus și un item opțional care oferă reușită 100% și elimină cooldown-ul încercării.
Imagini:
Autopickup + Loot Filter
• Autopickup-ul poate fi acordat pe durate diferite sau permanent. Timpul continuă să se scurgă și când jucătorul este offline. Sistemul poate fi pornit sau oprit atât din setările jocului, cât și prin click pe affect, starea este sincronizată, iar iconița arată vizual dacă acesta este activ sau oprit.
• Nu pot fi activate mai multe autopickup-uri simultan. Oprirea funcției nu oprește timpul.
• Autopickup-ul respectă filtrul de drop.
Imagini:
Switchbot
• Switchbot-ul are funcții normale (gratuite) și funcții pentru jucătorii premium.
• 5 sloturi (2 gratuite și 3 premium)
• 5 alternative (1 gratuite și 4 premium)
• viteză ajustabilă (doar jucătorii premium pot folosii viteza, jucătorii non-premium având viteza standard)
• funcție de schimbare bonus instant cu cantitate de 100-500-1000 schimbătoare (doar pentru jucătorii premium)
• selectarea itemului de schimbare a bonusurilor (Vrăjește obiectul, Magie Verde, etc)
• safe mode (nu se vor mai primii informațiile despre bonusurile schimbate până când switchbot-ul nu se oprește)
Imagini:
Offline Shop / Ikarus Shop v2
• A fost rescris o mare parte din sistemul de bază, fiind aduse îmbunătățiri cât și schimbarea interfeței.
• Se poate seta titlu offlineshop-ului
• Depozitul offlineshop-ului a fost eliminat.
• Pe offlineshop-ul tău, doar tu vei vedea un effect indicând care este shopul tău.
Imagini:
Battle Pass
• Misiuni zilnice și săptămânale, countdown până la reset, recompense free și premium și posibilitatea de reroll pentru misiuni. Jucătorul poate filtra misiunile finalizate și își poate colecta recompensele direct din interfață.
Imagini:
Global Challenges
• Obiectivele challange-urilor pot urmări nivelul, temnițele, obținerea și îmbunătățirea obiectelor, bonusurile realizate manual sau prin switchbot, eșarfele și alchimia. Validarea challange-ului este făcută la sursa acțiunii, nu doar după valoarea finală a obiectului, ceea ce reduce posibilitățile de exploatare.
Imagini:
Ranking System
• Clasamente configurabile cu filtre pe clasă, intervale de nivel, resetări periodice și recompense. Configurația actuală include categorii precum nivel, damage în pietre-metin, pietre-metin distruse, boși omorâți, dungeon-uri finalizate, iteme bonusate, eșarfe combinate, minerit.
Imagini:
Event Manager
• Sunt incluse exemple pentru drop dublu la boși, Metine și pescuit, cufere clar de lună și cufere hexagonale.
Imagini:
In-game Livestream
• Sistem client/server pentru promovarea live-urilor direct în joc, cu fereastră proprie și widget (cum este cel de la calendarul de evenimente care apare pe ecran și indică evenimentul activ) care poate fi ascuns din setări. Este util pentru evenimente, parteneri și creatori de conținut fără modificări manuale în client la fiecare stream.
Imagini:
Inventare speciale
• Inventare separate pentru upgrade, cărți, enchant, cufere și costume, funcționează inclusiv cu depozit și depozit item-shop.
Imagini:
Drop Info + DPS
• Informații utile în target și măsurarea damage-ului.
Imagini:
Multilanguage
• Schimbarea limbii din joc și suport pentru 16 locale: arabă, cehă, germană, daneză, engleză, spaniolă, franceză, greacă, maghiară, italiană, olandeză, poloneză, portugheză, română, rusă și turcă. Include steagurile țării și mod anonim.
Simboluri de breaslă animate
• Upload pentru JPG, GIF și WebP. Implementarea folosește în prezent maximum 32 cadre per simbol, iar protocolul este pregătit pentru maximum 128. Capacitatea atlaselor este extinsă la 21 imagini
Listă de prieteni
• Detalii suplimentare și un design modern.
• Se pot adăuga persoane la "Favorite" și apar primii într-o listă de favorite.
• Există butonul "GM" care deschide o șoaptă GM Support, când jucătorul scrie un mesaj, toți membrii staff vor primii un Pm "Support - numejucatător" și pote răspunde oricare membru staff și oricâți membrii staff în pm-ul de la jucător.
Imagini:
Minimap
• Pe minimap apar acum boșii care sunt indicați cu o iconiță verde când sunt în viață și cu o iconiță roșie când au fost omorâți. Când bossul este mort, apare timpul de respawn real al acestuia cu numărătoare inversă până apare.
• Click stânga pe iconița bossului de pe minimap va deschide pagina de wikipedia a bossului.
Imagini:
Blend
• Sistemul de blend a fost modificat, acum exista subtype-urile:
• NORMAL_BLEND - blendul normal din metin2
• USE_BLEND - Bonusurile oferite sunt configurate pe apply-urile itemului în proto, timpul este setat pe Value1 și grupa pe Value0, grupa face ca alt item cu aceiași grupă să nu se poată activa în același timp, acestea dispar la folosire și sunt afișate în lista de affecte de la uiaffectshower
• TOGGLE_BLEND - Bonusurile oferite sunt configurate pe apply-urile itemului în proto, grupă pe value1, grupa face ca alt item cu aceiași grupă să nu se poată activa în același timp, timpul este setat ca la un item obșnuit TIMER_BASED_ON_WEAR + timp, acestea sunt activabile în inventar, dacă jucătorul are 2 iteme de același fel cu timp, le poate combina într-unul singur cu timp cumulat.
Mount / Pet
• Mounturile și peturile sunt activabile în inventar, nu ocupă slot pe echipament sau costume.
Pescuit
• Pescuitul a fost modificat cu o variantă modernă.
• Trebuie prins peștișorul în zona galbenă de 3 ori, la 3 încercări eșuate pescuitul se va oprii.
• Șansa de a prinde un pește cât și șansele peștilor în parte sunt setate în fishing.lua
• fishing.txt a devenit fishing.lua
Exemplu fishing.lua:
Imagini:
Passive
• Există 3 noi pasive: Măestrie, Acuratețe și Precizie
• Măestrie - Odată ce toate cele 6 skilluri are caracterului sunt P, măestria oferă 3 bonusuri Tare împ. monștriilor 5% Tare împ. pietre-metin 5% Tare în dungeon 5%
• Acuratețe - Maximul de critică este setat 100 puncte, orice 5 puncte peste 100 sunt transformate în 1% damage critic (mărește damage-ul când jucătorul dă critică)
• Precizie - Maximul de pătrunzătoare este setat 100 puncte, orice 2 puncte peste 100 sunt transformate în 5 valoare atac.
Imagini:
Pagină de bonusuri
• Sunt create categorii, bonusurile se pot muta foarte ușor în altă categorie
• Există funcția de căutare bonus
• Când un jucător pune mouse-ul pe un bonus, îi va apărea tooltip un tabel cu proveniența valorilor bonusului
Imagini:
Item Slot Color
• Se poate adăuga un frame colorat oricărui item cu type ITEM_ARMOR / ITEM_WEAPON
• Se pot salva 5 culori pe fereastra de setare a culorii
• Există și item care șterge slot colorul
• Funcțional în negoț, offlineshop, depozit, etc.
Imagini:
Nume Pet&Mount Personalizat
• Există 7 pergamente pentru personalizarea numelui petului și mountului: 1zi, 3zile, 5zile, 7zile, 14zile, 30zile, permanent
• Numele personalizat oferă bonus (se poate personaliza pentru fiecare pergament în parte)
Imagini:
Selectare pietre (Premium/NonPremium)
• Se pot selecta 3 pietre pe orice caracter normal
• Se pot selecta 6 pietre pe caracterele premium
• La Theowahdan există o misiune de hunting (omoară x pietre-metin, dar se poate modifica după bunul plac) care odată finalizată oferă 24 ore încă 1 slot de selectare, devenind 4 gratuite și 7 premium
• Jucătorii premium au funcția de a selecta simultan mai multe pietre-metin (se activează/dezactivează din opțiuni joc) și poate selecta 2-3-4-5-6-max
• Când jucătorul selectează pietrele, caracterul nu pleacă de pe loc până ce jucătorul nu eliberează tasta SHIFT (ca să le poată selecta fără dificultatea de a selecta în timp ce caracterul merge către prima piatră)
Imagini:
GPU-Skinning
• Există mai multe lucruri decât gpu-skinning, dar mai multe informații vor fi publicate în următorul update, cine este interesat poate primii informații contactându-mă
Imagini:
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
• Preț: 300euro
• Este posibil ca prețul să se modifice în timp, serverul va primii updateuri, topicul va fi actualizat din timp în timp cu lucrurile noi sau lucruri omise.
• Pentru orice informație mă puteți contacta pe discord: choroy
Despre proiect
Pun la vânzare PrimeCore, un proiect Metin2 la care s-a lucrat cu accent pe trei lucruri care, din experiența mea, contează cel mai mult pe termen lung: o bază tehnică actualizată, sisteme ușor configurabile și stabilitate.
Nu este o sursă veche, baza fiind Martysama 5.9 și nici un server prezentat doar printr-o listă lungă de define-uri. Sursele server-src și client-src au fost făcute CMake, iar mai multe zone sensibile au fost refăcute: build-ul, arhitectura pe 64bit a serverului, randarea DirectX, încărcarea clientului, warp-ul și sincronizarea dintre client și server.
PrimeCore poate fi folosit ca bază pentru un proiect oldschool, middleschool sau un concept custom. Valoarea reală este fundația pe care se poate construi.
Contact
Discord: choroy
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
Server source
• Sursa server folosește CMake și standardul C++20.
• Build-ul recomandat rulează pe FreeBSD 15/15.1 AMD64.
• Game&Db sunt compilate nativ pe 64bit. Nu este un build 32-bit pornit pe un sistem de operare x64.
• Compilarea este făcută cu Ninja, iar scriptul verifică înainte de link că bibliotecile importante sunt ELF64.
• Configurația standard de server este RelWithDebInfo: optimizare pentru rulare, dar și simboluri utile atunci când trebuie urmărit un crash.
• Există suport opțional în CMake pentru AddressSanitizer, ccache și linker LLD.
• Logurile de build sunt separate în output general, warnings și errors, lucru util când proiectul este continuat de mai mulți developeri.
Exemplu de compilare server
Scriptul configurează proiectul, verifică dependențele x64, compilează game/db și verifică rezultatul final.
Code:
cd metin2-server-src
sh build_ninja.sh
Scriptul configurează proiectul, verifică dependențele x64, compilează game/db și verifică rezultatul final.
Client source
• Sursa client folosește CMake, Visual Studio 2022 și C++20.
• Codul a fost curățat în zone sensibile pentru compatibilitate modernă și tipuri pe 64bit, însă launcherul distribuit jucătorilor este compilat Win32/x86. Alegerea este intenționată: păstrează compatibilitatea cu sistemele și componentele clasice folosite de jucătorii Metin2.
• Motorul grafic rulează pe Direct3D 9Ex.
• Python 2.7 este static în configurația actuală.
• Sistemul de pack este cel prezent și în sursa WoM2/WoM3 (PAK Archiver) root poate fi arhivat normal sau (recomandat pentru live-server) în varianta Cython.
Configurațiile clientului
metin2_debug - pentru debugging și verificări.
metin2_dev - build rapid și optimizat pentru testele zilnice; păstrează profilerele proiectului.
metin2_cython - configurația de distribuție, cu optimizări de release. Cythonizarea citește direct fișierele Python din directoarele
Code:
root
Code:
root/uiscript
Code:
.py
Code:
.pyc
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
• Suport UI pentru imagini WebP, inclusiv continuitate pentru stările butoanelor.
• Tranziții și clipping modernizate pentru ferestrele interfeței.
• Încărcarea din loading phase este împărțită în pași și poate fi urmărită în profiler, în loc să rămână o pauză imposibil de diagnosticat.
Calitate vizuală și control grafic
Anisotropic OFF / 2x / 4x / 8x / 16x • Sharpness reglabil în timp real
Trecerea la Direct3D 9Ex nu reprezintă doar o schimbare tehnică în sursă. Clientul oferă și setări grafice integrate, prin care fiecare jucător poate alege echilibrul potrivit între claritatea imaginii și performanță.
• Filtrarea anisotropică poate fi setată pe OFF, 2x, 4x, 8x sau 16x, îmbunătățind claritatea texturilor privite de la distanță sau din unghi, în special pe teren și obiectele din hartă.
• Clientul verifică nivelul maxim acceptat de placa video și dezactivează automat opțiunile care nu sunt suportate.
• Sharpness-ul este reglabil în timp real între 0.00 și 0.30 și folosește post-procesarea integrată în client pentru o imagine mai clară, fără filtre sau programe externe.
• Valorile sunt păstrate în configurația clientului și reaplicate automat la următoarea pornire.
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
Sisteme principale
Wikipedia in-game
• A fost creat "Wikipedia-link", se poate copia link-ul unei categorii, pagina unui item/mob, orice și trimite pe chat sau în șoaptă unui jucător.
• Categorie de crafting
Imagini:
Dungeon Info + Dungeon Creator
• Fereastra de temnițe arată nivelul necesar, limita de nivel, intrarea, cooldown-ul, permisul, rasa, elementul și informații despre boss. Jucătorul se poate teleporta la NPC-ul de intrare în dungeon sau se poate teleporta direct în dungeon P2P contra unei sume de yang (5.000.000), poate deschide direct pagina bossului în Wikipedia și poate vedea timpul rămas în timp real. Lista poate fi reordonată și pot fi ascunse temnițele care nu îl interesează.
• Sistemul suportă cerințe de grup, cooldown, rejoin, skip-pass (intrare direct la boss), coordonate de intrare/ieșire și etape configurabile.
• Se pot configura efecte temporare direct în mapă (poți pune effecte de săgeată în mapă să evidențiezi jucătorului drumul și când jucătorul se apropie de săgeată ea dispare singură)
• Se poate configura ca jucătorul să primească un bonus la finalizarea dungeon-ului. (bonusul și timpul sunt setate în config-ul dungeon-ului)
• Tipurile de stagii existente:
Code:
KILL_REGEN - Omoară toate țintele generate în stagiu.
DROP_KEY - Omoară monștrii până obții cheia necesară și folosește-o pentru a deschide sigiliile (pot exista sigilii multiple).
USE_ITEM - Obține itemul cerut de la monștri și folosește-l pentru a finaliza stagiul. Șansa de drop și șansa de reușită sunt configurabile.
FIND_REAL_KEY - Găsește cheia adevărată dintre cheile reale și false și folosește-o pentru a deschide sigiliul.
KILL_IN_ORDER - Distruge pietrele în ordinea corectă (ordinea se generează random). Dacă distrugi o piatră greșită stagiul se va reseta.
NPC_TALK - Vorbește cu NPC-ul configurat și parcurge dialogul pentru a continua.
KILL_RIGHT_STONE - Distruge piatra reală.
KILL_RIGHT_MONSTER - Omoară monstrul real.
STATUE_PERCENT - Redu toate statuile până la pragurile de viață configurate. Fiecare prag pornește un substadiu nou.
PROGRESSIVE_DOORS - Finalizează substadiile în ordine pentru a deschide progresiv fiecare pereche de uși. (Razador).
Exemplu config Turnul Demonilor:
Code:
Group DevilTower
{
npc_entrance 20348
level_min 40
level_max 90
ticket 30320 1
group false
cooldown 1800
cooldown_flag "devil_tower.cooldown"
warp_inside 140427 855947
warp_outside 590329 110966
rejoin true
time 1800
skip_pass 30025
skip_pass_max 8
skip_pass_warp 140427 855947
affect APPLY_ATTBONUS_MONSTER 10 1800
Group Floor_1
{
KILL_REGEN "share/locale/international/dungeon_regen/devil_tower/deviltower1_regen_stone.txt"
REGEN_FILE "share/locale/international/dungeon_regen/devil_tower/deviltower1_regen.txt"
MISSION dungeon_lang.DEVIL_TOWER_DESTROY_POWER_STONE
WARP 202 404 5
}
Group Floor_2
{
KILL_REGEN "share/locale/international/dungeon_regen/devil_tower/deviltower2_regen.txt"
MISSION dungeon_lang.DEVIL_TOWER_KILL_ALL
WARP 200 407
}
Group Floor_3
{
KILL_REGEN "share/locale/international/dungeon_regen/devil_tower/deviltower3_regen.txt"
REGEN_FILE "share/locale/international/dungeon_regen/devil_tower/deviltower3_regen_mobs.txt"
MISSION dungeon_lang.DEVIL_TOWER_DEFEAT_PROUD_DEMON
WARP 372 646
}
Group Floor_4
{
KILL_REGEN "share/locale/international/dungeon_regen/devil_tower/deviltower4_regen.txt"
MISSION dungeon_lang.DEVIL_TOWER_DESTROY_DEVIL_STONE
}
Group Floor_4-1
{
KILL_RIGHT_STONE "share/locale/international/dungeon_regen/devil_tower/deviltower4_regen_stone.txt"
MISSION dungeon_lang.DEVIL_TOWER_DESTROY_REAL_STONE
WARP 374 419
}
Group Floor_5
{
DROP_KEY "share/locale/international/dungeon_regen/devil_tower/deviltower5_regen.txt"
KEY 50084 2
SEAL 20073 361 411 5
SEAL 20073 380 392 5
SEAL 20073 410 391 5
SEAL 20073 428 442 5
SEAL 20073 431 411 5
SEAL 20073 410 463 5
SEAL 20073 382 463 5
SEAL 20073 361 442 5
INFO_KEY dungeon_lang.UNLOCK_SEAL
WARP 373 184
}
Group Floor_6
{
KILL_REGEN "share/locale/international/dungeon_regen/devil_tower/deviltower6_regen.txt"
REGEN_FILE "share/locale/international/dungeon_regen/devil_tower/deviltower6_regen_mobs.txt"
MISSION dungeon_lang.DEVIL_TOWER_DESTROY_POWER_STONE
WARP 629 452
}
Group Floor_7
{
USE_ITEM "share/locale/international/dungeon_regen/devil_tower/deviltower7_regen.txt"
ITEM 30302 20
SUCCESS_CHANCE 100
}
Group Floor_8
{
FIND_REAL_KEY "share/locale/international/dungeon_regen/devil_tower/deviltower8_regen.txt"
REAL_KEY 30304 1
FAKE_KEY 30303 5
SEAL 20390 599 400 5
INFO_KEY_REAL dungeon_lang.INFO_KEY_REAL
INFO_KEY_FAKE dungeon_lang.INFO_KEY_FAKE
WARP 623 159
}
Group Floor_9
{
KILL_REGEN "share/locale/international/dungeon_regen/devil_tower/deviltower9_regen.txt"
REGEN_FILE "share/locale/international/dungeon_regen/devil_tower/deviltower8_regen.txt"
MISSION dungeon_lang.DEVIL_TOWER_DESTROY_POWER_STONE
}
}
Imagini:
Biolog
• Misiunile biologului sunt configurate server-side prin JSON: nivel minim, item cerut, cantitate, șansă, cooldown, bonusuri și recompense. Sistemul acceptă atât recompense fixă (bonsuri), cât și alegerea bonusului de către jucător.
Exemplu config:
Code:
{
"index": 0,
"cooldown": 600,
"success_chance": 60,
"choose_bonus": false,
"minimum_level": 30,
"time_item": 70030,
"chance_item": 71035,
"required_item": { "vnum": 30006, "count": 10 },
"reward_bonuses": [
{ "apply": 54, "value": 60 }
],
"reward_items": []
},
{
"index": 1,
"cooldown": 600,
"success_chance": 60,
"choose_bonus": false,
"minimum_level": 40,
"time_item": 70030,
"chance_item": 71035,
"required_item": { "vnum": 30047, "count": 15 },
"reward_bonuses": [
{ "apply": 63, "value": 5 }
],
"reward_items": []
},
Imagini:
Cube Renewal
• Interfață modernă pentru crafting.
• Posibilitatea de a apăsa click stânga pe itemul și deschiderea paginii wikipedia a itemului direct din fereastra de crafting. (se aplică și în fereastra de plusare item)
• Posibilitatea de a apăsa click dreapta pe itemul și căutarea itemului în searchshop direct din fereastra de crafting. (se aplică și în fereastra de plusare item)
Imagini:
Horse Manager
• Evoluția calului nu mai este blocată într-un quest. Nivelurile, bonusurile, materialele, costul, nivelul minim al jucătorului, șansa, cooldown-ul și misiunile sunt configurabile pe server prin JSON.
• Misiunile pot cere uciderea unui anumit număr de monștri și pot avea sau nu limită de timp. Interfața arată progresul, bonusul următor, materialele și toate cerințele. Este inclus și un item opțional care oferă reușită 100% și elimină cooldown-ul încercării.
Imagini:
Autopickup + Loot Filter
• Autopickup-ul poate fi acordat pe durate diferite sau permanent. Timpul continuă să se scurgă și când jucătorul este offline. Sistemul poate fi pornit sau oprit atât din setările jocului, cât și prin click pe affect, starea este sincronizată, iar iconița arată vizual dacă acesta este activ sau oprit.
• Nu pot fi activate mai multe autopickup-uri simultan. Oprirea funcției nu oprește timpul.
• Autopickup-ul respectă filtrul de drop.
Imagini:
Switchbot
• Switchbot-ul are funcții normale (gratuite) și funcții pentru jucătorii premium.
• 5 sloturi (2 gratuite și 3 premium)
• 5 alternative (1 gratuite și 4 premium)
• viteză ajustabilă (doar jucătorii premium pot folosii viteza, jucătorii non-premium având viteza standard)
• funcție de schimbare bonus instant cu cantitate de 100-500-1000 schimbătoare (doar pentru jucătorii premium)
• selectarea itemului de schimbare a bonusurilor (Vrăjește obiectul, Magie Verde, etc)
• safe mode (nu se vor mai primii informațiile despre bonusurile schimbate până când switchbot-ul nu se oprește)
Imagini:
Offline Shop / Ikarus Shop v2
• A fost rescris o mare parte din sistemul de bază, fiind aduse îmbunătățiri cât și schimbarea interfeței.
• Se poate seta titlu offlineshop-ului
• Depozitul offlineshop-ului a fost eliminat.
• Pe offlineshop-ul tău, doar tu vei vedea un effect indicând care este shopul tău.
Imagini:
Battle Pass
• Misiuni zilnice și săptămânale, countdown până la reset, recompense free și premium și posibilitatea de reroll pentru misiuni. Jucătorul poate filtra misiunile finalizate și își poate colecta recompensele direct din interfață.
Imagini:
Global Challenges
• Obiectivele challange-urilor pot urmări nivelul, temnițele, obținerea și îmbunătățirea obiectelor, bonusurile realizate manual sau prin switchbot, eșarfele și alchimia. Validarea challange-ului este făcută la sursa acțiunii, nu doar după valoarea finală a obiectului, ceea ce reduce posibilitățile de exploatare.
Imagini:
Ranking System
• Clasamente configurabile cu filtre pe clasă, intervale de nivel, resetări periodice și recompense. Configurația actuală include categorii precum nivel, damage în pietre-metin, pietre-metin distruse, boși omorâți, dungeon-uri finalizate, iteme bonusate, eșarfe combinate, minerit.
Imagini:
Event Manager
• Sunt incluse exemple pentru drop dublu la boși, Metine și pescuit, cufere clar de lună și cufere hexagonale.
Imagini:
In-game Livestream
• Sistem client/server pentru promovarea live-urilor direct în joc, cu fereastră proprie și widget (cum este cel de la calendarul de evenimente care apare pe ecran și indică evenimentul activ) care poate fi ascuns din setări. Este util pentru evenimente, parteneri și creatori de conținut fără modificări manuale în client la fiecare stream.
Imagini:
Inventare speciale
• Inventare separate pentru upgrade, cărți, enchant, cufere și costume, funcționează inclusiv cu depozit și depozit item-shop.
Imagini:
Drop Info + DPS
• Informații utile în target și măsurarea damage-ului.
Imagini:
Multilanguage
• Schimbarea limbii din joc și suport pentru 16 locale: arabă, cehă, germană, daneză, engleză, spaniolă, franceză, greacă, maghiară, italiană, olandeză, poloneză, portugheză, română, rusă și turcă. Include steagurile țării și mod anonim.
Simboluri de breaslă animate
• Upload pentru JPG, GIF și WebP. Implementarea folosește în prezent maximum 32 cadre per simbol, iar protocolul este pregătit pentru maximum 128. Capacitatea atlaselor este extinsă la 21 imagini
Listă de prieteni
• Detalii suplimentare și un design modern.
• Se pot adăuga persoane la "Favorite" și apar primii într-o listă de favorite.
• Există butonul "GM" care deschide o șoaptă GM Support, când jucătorul scrie un mesaj, toți membrii staff vor primii un Pm "Support - numejucatător" și pote răspunde oricare membru staff și oricâți membrii staff în pm-ul de la jucător.
Imagini:
Minimap
• Pe minimap apar acum boșii care sunt indicați cu o iconiță verde când sunt în viață și cu o iconiță roșie când au fost omorâți. Când bossul este mort, apare timpul de respawn real al acestuia cu numărătoare inversă până apare.
• Click stânga pe iconița bossului de pe minimap va deschide pagina de wikipedia a bossului.
Imagini:
Blend
• Sistemul de blend a fost modificat, acum exista subtype-urile:
• NORMAL_BLEND - blendul normal din metin2
• USE_BLEND - Bonusurile oferite sunt configurate pe apply-urile itemului în proto, timpul este setat pe Value1 și grupa pe Value0, grupa face ca alt item cu aceiași grupă să nu se poată activa în același timp, acestea dispar la folosire și sunt afișate în lista de affecte de la uiaffectshower
• TOGGLE_BLEND - Bonusurile oferite sunt configurate pe apply-urile itemului în proto, grupă pe value1, grupa face ca alt item cu aceiași grupă să nu se poată activa în același timp, timpul este setat ca la un item obșnuit TIMER_BASED_ON_WEAR + timp, acestea sunt activabile în inventar, dacă jucătorul are 2 iteme de același fel cu timp, le poate combina într-unul singur cu timp cumulat.
Mount / Pet
• Mounturile și peturile sunt activabile în inventar, nu ocupă slot pe echipament sau costume.
Pescuit
• Pescuitul a fost modificat cu o variantă modernă.
• Trebuie prins peștișorul în zona galbenă de 3 ori, la 3 încercări eșuate pescuitul se va oprii.
• Șansa de a prinde un pește cât și șansele peștilor în parte sunt setate în fishing.lua
• fishing.txt a devenit fishing.lua
Exemplu fishing.lua:
Code:
FishingConfig = {
general_catch_chance = 100,
fishes = {
{ vnum = 50002, dead_vnum = 0, grill_vnum = 0, chance = 10 },
{ vnum = 27992, dead_vnum = 0, grill_vnum = 0, chance = 10 },
{ vnum = 27993, dead_vnum = 0, grill_vnum = 0, chance = 10 },
{ vnum = 27994, dead_vnum = 0, grill_vnum = 0, chance = 10 },
{ vnum = 27802, dead_vnum = 0, grill_vnum = 0, chance = 10 },
{ vnum = 27803, dead_vnum = 27833, grill_vnum = 27863, chance = 10 },
{ vnum = 27804, dead_vnum = 27834, grill_vnum = 27864, chance = 10 },
{ vnum = 27805, dead_vnum = 27835, grill_vnum = 27865, chance = 10 },
{ vnum = 27806, dead_vnum = 27836, grill_vnum = 27866, chance = 10 },
{ vnum = 27807, dead_vnum = 27837, grill_vnum = 27867, chance = 10 },
{ vnum = 27808, dead_vnum = 27838, grill_vnum = 27868, chance = 10 },
{ vnum = 27809, dead_vnum = 27839, grill_vnum = 27869, chance = 10 },
{ vnum = 27810, dead_vnum = 27840, grill_vnum = 27870, chance = 10 },
{ vnum = 27811, dead_vnum = 27841, grill_vnum = 27871, chance = 10 },
{ vnum = 27812, dead_vnum = 27842, grill_vnum = 27872, chance = 10 },
{ vnum = 27813, dead_vnum = 27843, grill_vnum = 27873, chance = 10 },
{ vnum = 27814, dead_vnum = 27844, grill_vnum = 27874, chance = 10 },
{ vnum = 27815, dead_vnum = 27845, grill_vnum = 27875, chance = 10 },
{ vnum = 27816, dead_vnum = 27846, grill_vnum = 27876, chance = 10 },
{ vnum = 27817, dead_vnum = 27847, grill_vnum = 27877, chance = 10 },
{ vnum = 27818, dead_vnum = 27848, grill_vnum = 27878, chance = 10 },
{ vnum = 27819, dead_vnum = 27849, grill_vnum = 27879, chance = 10 },
{ vnum = 27820, dead_vnum = 27850, grill_vnum = 27880, chance = 10 },
{ vnum = 27821, dead_vnum = 27851, grill_vnum = 27881, chance = 10 },
{ vnum = 27822, dead_vnum = 27852, grill_vnum = 27882, chance = 10 },
{ vnum = 27823, dead_vnum = 27853, grill_vnum = 27883, chance = 10 },
{ vnum = 70201, dead_vnum = 0, grill_vnum = 0, chance = 10 },
{ vnum = 70202, dead_vnum = 0, grill_vnum = 0, chance = 10 },
{ vnum = 70203, dead_vnum = 0, grill_vnum = 0, chance = 10 },
{ vnum = 70204, dead_vnum = 0, grill_vnum = 0, chance = 10 },
{ vnum = 70205, dead_vnum = 0, grill_vnum = 0, chance = 10 },
{ vnum = 70206, dead_vnum = 0, grill_vnum = 0, chance = 10 },
{ vnum = 70048, dead_vnum = 0, grill_vnum = 0, chance = 10 },
{ vnum = 70049, dead_vnum = 0, grill_vnum = 0, chance = 10 },
{ vnum = 70050, dead_vnum = 0, grill_vnum = 0, chance = 10 },
{ vnum = 70051, dead_vnum = 0, grill_vnum = 0, chance = 10 },
{ vnum = 80008, dead_vnum = 0, grill_vnum = 0, chance = 10 },
{ vnum = 50009, dead_vnum = 0, grill_vnum = 0, chance = 10 },
{ vnum = 50008, dead_vnum = 0, grill_vnum = 0, chance = 10 },
}
}
Imagini:
Passive
• Există 3 noi pasive: Măestrie, Acuratețe și Precizie
• Măestrie - Odată ce toate cele 6 skilluri are caracterului sunt P, măestria oferă 3 bonusuri Tare împ. monștriilor 5% Tare împ. pietre-metin 5% Tare în dungeon 5%
• Acuratețe - Maximul de critică este setat 100 puncte, orice 5 puncte peste 100 sunt transformate în 1% damage critic (mărește damage-ul când jucătorul dă critică)
• Precizie - Maximul de pătrunzătoare este setat 100 puncte, orice 2 puncte peste 100 sunt transformate în 5 valoare atac.
Imagini:
Pagină de bonusuri
• Sunt create categorii, bonusurile se pot muta foarte ușor în altă categorie
• Există funcția de căutare bonus
• Când un jucător pune mouse-ul pe un bonus, îi va apărea tooltip un tabel cu proveniența valorilor bonusului
Imagini:
Item Slot Color
• Se poate adăuga un frame colorat oricărui item cu type ITEM_ARMOR / ITEM_WEAPON
• Se pot salva 5 culori pe fereastra de setare a culorii
• Există și item care șterge slot colorul
• Funcțional în negoț, offlineshop, depozit, etc.
Imagini:
Nume Pet&Mount Personalizat
• Există 7 pergamente pentru personalizarea numelui petului și mountului: 1zi, 3zile, 5zile, 7zile, 14zile, 30zile, permanent
• Numele personalizat oferă bonus (se poate personaliza pentru fiecare pergament în parte)
Imagini:
Selectare pietre (Premium/NonPremium)
• Se pot selecta 3 pietre pe orice caracter normal
• Se pot selecta 6 pietre pe caracterele premium
• La Theowahdan există o misiune de hunting (omoară x pietre-metin, dar se poate modifica după bunul plac) care odată finalizată oferă 24 ore încă 1 slot de selectare, devenind 4 gratuite și 7 premium
• Jucătorii premium au funcția de a selecta simultan mai multe pietre-metin (se activează/dezactivează din opțiuni joc) și poate selecta 2-3-4-5-6-max
• Când jucătorul selectează pietrele, caracterul nu pleacă de pe loc până ce jucătorul nu eliberează tasta SHIFT (ca să le poată selecta fără dificultatea de a selecta în timp ce caracterul merge către prima piatră)
Imagini:
GPU-Skinning
• Există mai multe lucruri decât gpu-skinning, dar mai multe informații vor fi publicate în următorul update, cine este interesat poate primii informații contactându-mă
Imagini:
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
• Preț: 300euro
• Este posibil ca prețul să se modifice în timp, serverul va primii updateuri, topicul va fi actualizat din timp în timp cu lucrurile noi sau lucruri omise.
• Pentru orice informație mă puteți contacta pe discord: choroy
Client DirectX 9Ex • Server FreeBSD AMD64 • CMake + Ninja • C++20 • Integrated Cython
About the Project
I am putting PrimeCore up for sale, a Metin2 project developed with three main priorities in mind: an up-to-date technical foundation, easily configurable systems, and stability.
This is not an outdated source. The project is based on Martysama 5.9, and it is not simply a server advertised through a long list of defines. Both server-src and client-src have been migrated to CMake, while several critical areas have been reworked, including the build system, the server's native 64-bit architecture, DirectX rendering, client loading, warping, and client-server synchronization.
PrimeCore can be used as a foundation for an oldschool, middleschool, or completely custom project. Its real value lies in the technical foundation you can build upon.
Contact
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
Server Source
• The server source uses CMake and the C++20 standard.
• The recommended build environment is FreeBSD 15/15.1 AMD64.
• Game & DB are compiled natively in 64-bit. This is not a 32-bit build running on a 64-bit operating system.
• Compilation is handled by Ninja, and the build script checks that all important libraries are ELF64 before linking.
• The standard server configuration is RelWithDebInfo: optimized for runtime performance while retaining useful debugging symbols for crash investigation.
• CMake provides optional support for AddressSanitizer, ccache, and the LLD linker.
• Build logs are separated into general output, warnings, and errors, making it easier for multiple developers to work on the project.
Client Source
• The client source uses CMake, Visual Studio 2022, and C++20.
• The code has been cleaned up in critical areas for modern compatibility and 64-bit types. However, the launcher distributed to players is compiled as Win32/x86. This is an intentional choice that preserves compatibility with the classic systems and components commonly used by Metin2 players.
• The graphics engine runs on Direct3D 9Ex.
• Python 2.7 is statically linked in the current configuration.
• The pack system is the same one used in the WoM2/WoM3 source (PAK Archiver). The root can be packed normally or, preferably for a live server, using the Cython configuration.
Client Configurations
metin2_debug - Used for debugging and diagnostics.
metin2_dev - Fast and optimized build for daily testing, retaining the project's profiling capabilities.
metin2_cython - Distribution configuration with release optimizations. Cythonization directly processes Python files from the
and
directories, generates the required files, and includes them in the build. The final root pack is created without
or
files.
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
• UI support for WebP images, including support for button states.
• Modernized transitions and clipping for interface windows.
• Loading phase operations are divided into individual steps and can be monitored through the profiler, instead of leaving you with an unexplained loading pause that is difficult to diagnose.
Visual Quality & Graphics Control
The transition to Direct3D 9Ex is not just a technical change within the source code. The client also provides integrated graphics settings, allowing each player to choose the right balance between image clarity and performance.
• Anisotropic filtering can be set to OFF, 2x, 4x, 8x, or 16x, improving texture clarity when viewed from a distance or at an angle, especially on terrain and map objects.
• The client automatically detects the maximum supported level of the graphics card and disables unsupported options.
• Sharpness can be adjusted in real time between 0.00 and 0.30, using the post-processing functionality integrated into the client to produce a sharper image without external filters or software.
• Settings are saved in the client configuration and automatically reapplied on the next launch.
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
Main Systems & Features
In-Game Wikipedia
• A Wikipedia-link system has been implemented, allowing players to copy links to categories, individual item pages, monster pages, and more, then share them through chat or private messages.
• Includes a crafting category.
Images:
Dungeon Info + Dungeon Creator
• The dungeon window displays the required level, level limit, entrance, cooldown, required pass, race, element, and boss information. Players can teleport to the dungeon entrance NPC or directly inside the dungeon via P2P for a fee of 5,000,000 Yang. They can also open the boss's Wikipedia page directly and view the remaining dungeon time in real time. The list can be reordered, and players can hide dungeons they are not interested in.
• The system supports party requirements, cooldowns, rejoining, skip passes (direct boss entry), entrance/exit coordinates, and configurable stages.
• Temporary effects can be configured directly on the map. For example, arrow effects can be placed throughout a map to guide players along a specific route. Each arrow disappears automatically when the player gets close to it.
• Players can receive a bonus upon completing a dungeon. Both the bonus and its duration are configured in the dungeon configuration.
• Available stage types:
Example configuration: Devil's Tower
Images:
Biologist
• Biologist missions are configured server-side through JSON. Settings include minimum level, required item, quantity, success chance, cooldown, bonuses, and rewards. The system supports both fixed rewards (bonuses) and player-selected bonuses.
Example configuration:
Images:
Cube Renewal
• Modern crafting interface.
• Left-clicking an item opens its Wikipedia page directly from the crafting window. The same functionality is available in the item upgrade window.
• Right-clicking an item searches for it directly in the search shop. The same functionality is available in the item upgrade window.
Images:
Horse Manager
• Horse progression is no longer locked inside a quest. Levels, bonuses, materials, costs, minimum player level, success chance, cooldowns, and missions are all configurable server-side through JSON.
• Missions can require players to kill a specific number of monsters, with or without a time limit. The interface displays progress, the next bonus, required materials, and all requirements. An optional item is also included, granting 100% success chance and removing the attempt cooldown.
Images:
Autopickup + Loot Filter
• Autopickup can be granted for different durations or permanently. Its timer continues running even while the player is offline. The system can be enabled or disabled both through the game settings and by clicking its affect icon. Both states are synchronized, and the icon visually indicates whether the feature is active or inactive.
• Multiple autopickup effects cannot be active simultaneously. Disabling the feature does not stop its timer.
• Autopickup respects the loot filter.
Images:
Switchbot
• The Switchbot includes standard (free) features and additional premium features.
• 5 slots (2 free and 3 premium).
• 5 alternatives (1 free and 4 premium).
• Adjustable switching speed (available only to premium players; non-premium players use the standard speed).
• Instant bonus switching in batches of 100 / 500 / 1,000 switchers (premium only).
• Selection of the bonus-changing item (Enchant Item, Green Magic, etc.).
• Safe Mode: bonus change notifications are no longer received until the Switchbot is stopped.
Images:
Offline Shop / Ikarus Shop v2
• A large part of the original system has been rewritten, bringing both improvements and a redesigned interface.
• Custom titles can be set for offline shops.
• The offline shop storage has been removed.
• Only the shop owner can see a visual effect indicating which shop belongs to them.
Images:
Battle Pass
• Daily and weekly missions, countdown until reset, free and premium rewards, and the ability to reroll missions. Players can filter completed missions and collect their rewards directly from the interface.
Images:
Global Challenges
• Challenge objectives can track character levels, dungeons, obtaining and upgrading items, bonuses obtained manually or through Switchbot, sashes, and alchemy. Challenge validation takes place at the source of the action rather than simply checking the item's final state, reducing potential exploits.
Images:
Ranking System
• Configurable rankings with class filters, level ranges, periodic resets, and rewards. The current configuration includes categories such as level, damage dealt to Metin Stones, Metin Stones destroyed, bosses killed, dungeons completed, items with changed bonuses, sashes combined, and mining.
Images:
Event Manager
• Includes example configurations for double drops from bosses, Metin Stones, and fishing, as well as Moonlight Chests and Hexagonal Chests.
Images:
In-Game Livestream
• A client/server system for promoting livestreams directly in-game, featuring its own window and a widget (similar to the event calendar widget displayed on the screen to indicate active events), which can be hidden through the settings. It is useful for events, partners, and content creators, without requiring manual client modifications for every new stream.
Images:
Special Inventories
• Separate inventories for upgrade materials, books, enchantments, chests, and costumes. They also work with the regular storage and Item Shop storage.
Images:
Drop Info + DPS
• Useful information displayed in the target window, along with damage-per-second measurement.
Images:
Multilanguage
• In-game language switching with support for 16 locales: Arabic, Czech, German, Danish, English, Spanish, French, Greek, Hungarian, Italian, Dutch, Polish, Portuguese, Romanian, Russian, and Turkish. Includes country flags and anonymous mode.
Animated Guild Symbols
• Upload support for JPG, GIF, and WebP. The current implementation supports up to 32 frames per symbol, while the protocol is prepared for up to 128 frames. Atlas capacity has been increased to 21 images.
Friend List
• Additional information and a modernized design.
• Players can add people to their "Favorites", which are displayed at the top of a separate favorites list.
• A "GM" button opens a GM Support private message. When a player sends a message, all staff members receive a PM titled "Support - playername". Any staff member can reply, and multiple staff members can participate in the same support conversation with the player.
Images:
Minimap
• Bosses are now displayed on the minimap, with a green icon when alive and a red icon when killed. When a boss is dead, its actual respawn time is displayed, with a countdown until it respawns.
• Left-clicking a boss icon on the minimap opens that boss's Wikipedia page.
Images:
Blend System
• The blend system has been reworked and now supports the following subtypes:
• NORMAL_BLEND - The standard Metin2 blend system.
• USE_BLEND - Bonuses are configured through the item's apply values in proto. Duration is set through Value1 and the group through Value0. The group prevents another item belonging to the same group from being activated simultaneously. Items are consumed upon use, and their effects are displayed in the uiaffectshower affect list.
• TOGGLE_BLEND - Bonuses are configured through the item's apply values in proto, with the group set through Value1. The group prevents another item belonging to the same group from being activated simultaneously. Duration works like a regular item using TIMER_BASED_ON_WEAR + duration. These items can be activated directly from the inventory. If a player has two identical timed items, they can combine them into a single item with the accumulated duration.
Mount / Pet
• Mounts and pets can be activated directly from the inventory. They do not occupy equipment or costume slots.
Fishing System
• The fishing system has been redesigned with a modernized fishing mechanic.
• Players must catch the fish within the yellow zone three times. After three failed attempts, the fishing attempt is cancelled.
• The overall fish-catching chance, as well as the individual chances for each fish, are configured in fishing.lua.
• fishing.txt has been replaced with fishing.lua.
Example fishing.lua:
Images:
Passive Skills
• Three new passive skills have been added: Mastery, Accuracy, and Precision.
• Mastery - Once all six character skills have reached P (Perfect), Mastery provides three bonuses:
• Precision - The maximum Piercing Hit value is capped at 100 points. Every 2 points above 100 are converted into 5 Attack Value.
Images:
Bonus Information Page
• Bonuses are organized into categories, and can easily be moved from one category to another.
• Includes a bonus search function.
• When a player hovers over a bonus, a tooltip displays a table showing the sources from which that bonus value can be obtained.
Images:
Item Slot Color
• A colored frame can be applied to any item with type ITEM_ARMOR / ITEM_WEAPON.
• Up to 5 colors can be saved in the color selection window.
• An item is also available to remove the slot color.
• Fully functional in trading, offline shops, storage, and other interfaces.
Images:
Custom Pet & Mount Names
• Seven scrolls are available for customizing pet and mount names: 1 day, 3 days, 5 days, 7 days, 14 days, 30 days, and permanent.
• Custom names provide bonuses, which can be configured individually for each scroll.
Images:
Metin Stone Selection (Premium / Non-Premium)
• Up to 3 Metin Stones can be selected on any regular character.
• Premium characters can select up to 6 Metin Stones.
• Theowahdan offers a hunting mission (kill a configurable number of Metin Stones) which, once completed, grants one additional selection slot for 24 hours. This increases the limits to 4 for free players and 7 for premium players.
• Premium players can select multiple Metin Stones simultaneously (enabled/disabled through the game options). The selection amount can be set to 2, 3, 4, 5, 6, or MAX.
• While selecting Metin Stones, the character will remain stationary until the player releases the SHIFT key. This makes it possible to select multiple stones without the character moving towards the first selected stone.
Images:
GPU Skinning
• There are several additional features beyond GPU Skinning. More information will be published in the next update. Anyone interested can contact me directly for further details.
Images:
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
Price & Contact
• Price: €300.
• The price may change over time as the server will continue to receive updates. This topic will be updated periodically with newly added features and any details that may have been omitted.
• For further information, feel free to contact me on Discord: choroy
About the Project
I am putting PrimeCore up for sale, a Metin2 project developed with three main priorities in mind: an up-to-date technical foundation, easily configurable systems, and stability.
This is not an outdated source. The project is based on Martysama 5.9, and it is not simply a server advertised through a long list of defines. Both server-src and client-src have been migrated to CMake, while several critical areas have been reworked, including the build system, the server's native 64-bit architecture, DirectX rendering, client loading, warping, and client-server synchronization.
PrimeCore can be used as a foundation for an oldschool, middleschool, or completely custom project. Its real value lies in the technical foundation you can build upon.
Contact
Discord: choroy
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
Server Source
• The server source uses CMake and the C++20 standard.
• The recommended build environment is FreeBSD 15/15.1 AMD64.
• Game & DB are compiled natively in 64-bit. This is not a 32-bit build running on a 64-bit operating system.
• Compilation is handled by Ninja, and the build script checks that all important libraries are ELF64 before linking.
• The standard server configuration is RelWithDebInfo: optimized for runtime performance while retaining useful debugging symbols for crash investigation.
• CMake provides optional support for AddressSanitizer, ccache, and the LLD linker.
• Build logs are separated into general output, warnings, and errors, making it easier for multiple developers to work on the project.
Server Compilation Example
The script configures the project, checks the x64 dependencies, compiles Game/DB, and verifies the final output.
Code:
cd metin2-server-src
sh build_ninja.sh
The script configures the project, checks the x64 dependencies, compiles Game/DB, and verifies the final output.
Client Source
• The client source uses CMake, Visual Studio 2022, and C++20.
• The code has been cleaned up in critical areas for modern compatibility and 64-bit types. However, the launcher distributed to players is compiled as Win32/x86. This is an intentional choice that preserves compatibility with the classic systems and components commonly used by Metin2 players.
• The graphics engine runs on Direct3D 9Ex.
• Python 2.7 is statically linked in the current configuration.
• The pack system is the same one used in the WoM2/WoM3 source (PAK Archiver). The root can be packed normally or, preferably for a live server, using the Cython configuration.
Client Configurations
metin2_debug - Used for debugging and diagnostics.
metin2_dev - Fast and optimized build for daily testing, retaining the project's profiling capabilities.
metin2_cython - Distribution configuration with release optimizations. Cythonization directly processes Python files from the
Code:
root
Code:
root/uiscript
Code:
.py
Code:
.pyc
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
• UI support for WebP images, including support for button states.
• Modernized transitions and clipping for interface windows.
• Loading phase operations are divided into individual steps and can be monitored through the profiler, instead of leaving you with an unexplained loading pause that is difficult to diagnose.
Visual Quality & Graphics Control
Anisotropic OFF / 2x / 4x / 8x / 16x • Real-time Adjustable Sharpness
The transition to Direct3D 9Ex is not just a technical change within the source code. The client also provides integrated graphics settings, allowing each player to choose the right balance between image clarity and performance.
• Anisotropic filtering can be set to OFF, 2x, 4x, 8x, or 16x, improving texture clarity when viewed from a distance or at an angle, especially on terrain and map objects.
• The client automatically detects the maximum supported level of the graphics card and disables unsupported options.
• Sharpness can be adjusted in real time between 0.00 and 0.30, using the post-processing functionality integrated into the client to produce a sharper image without external filters or software.
• Settings are saved in the client configuration and automatically reapplied on the next launch.
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
Main Systems & Features
In-Game Wikipedia
• A Wikipedia-link system has been implemented, allowing players to copy links to categories, individual item pages, monster pages, and more, then share them through chat or private messages.
• Includes a crafting category.
Images:
Dungeon Info + Dungeon Creator
• The dungeon window displays the required level, level limit, entrance, cooldown, required pass, race, element, and boss information. Players can teleport to the dungeon entrance NPC or directly inside the dungeon via P2P for a fee of 5,000,000 Yang. They can also open the boss's Wikipedia page directly and view the remaining dungeon time in real time. The list can be reordered, and players can hide dungeons they are not interested in.
• The system supports party requirements, cooldowns, rejoining, skip passes (direct boss entry), entrance/exit coordinates, and configurable stages.
• Temporary effects can be configured directly on the map. For example, arrow effects can be placed throughout a map to guide players along a specific route. Each arrow disappears automatically when the player gets close to it.
• Players can receive a bonus upon completing a dungeon. Both the bonus and its duration are configured in the dungeon configuration.
• Available stage types:
Code:
KILL_REGEN - Kill all targets spawned during the stage.
DROP_KEY - Kill monsters until the required key drops, then use it to unlock the seals (multiple seals are supported).
USE_ITEM - Obtain the required item from monsters and use it to complete the stage. Both the drop chance and success chance are configurable.
FIND_REAL_KEY - Find the real key among real and fake keys and use it to unlock the seal.
KILL_IN_ORDER - Destroy stones in the correct order (the order is randomized). Destroying the wrong stone resets the stage.
NPC_TALK - Talk to the configured NPC and complete the dialogue to proceed.
KILL_RIGHT_STONE - Destroy the correct stone.
KILL_RIGHT_MONSTER - Kill the correct monster.
STATUE_PERCENT - Reduce all statues to their configured HP thresholds. Each threshold triggers a new sub-stage.
PROGRESSIVE_DOORS - Complete sub-stages in order to progressively unlock each pair of doors (Razador).
Example configuration: Devil's Tower
Code:
Group DevilTower
{
npc_entrance 20348
level_min 40
level_max 90
ticket 30320 1
group false
cooldown 1800
cooldown_flag "devil_tower.cooldown"
warp_inside 140427 855947
warp_outside 590329 110966
rejoin true
time 1800
skip_pass 30025
skip_pass_max 8
skip_pass_warp 140427 855947
affect APPLY_ATTBONUS_MONSTER 10 1800
<span>Group Floor_1<br>{<br> KILL_REGEN "share/locale/international/dungeon_regen/devil_tower/deviltower1_regen_stone.txt"<br> REGEN_FILE "share/locale/international/dungeon_regen/devil_tower/deviltower1_regen.txt"<br> MISSION dungeon_lang.DEVIL_TOWER_DESTROY_POWER_STONE<br> WARP 202 404 5<br>}<br><br>Group Floor_2<br>{<br> KILL_REGEN "share/locale/international/dungeon_regen/devil_tower/deviltower2_regen.txt"<br> MISSION dungeon_lang.DEVIL_TOWER_KILL_ALL<br> WARP 200 407<br>}<br><br>Group Floor_3<br>{<br> KILL_REGEN "share/locale/international/dungeon_regen/devil_tower/deviltower3_regen.txt"<br> REGEN_FILE "share/locale/international/dungeon_regen/devil_tower/deviltower3_regen_mobs.txt"<br> MISSION dungeon_lang.DEVIL_TOWER_DEFEAT_PROUD_DEMON<br> WARP 372 646<br>}<br><br>Group Floor_4<br>{<br> KILL_REGEN "share/locale/international/dungeon_regen/devil_tower/deviltower4_regen.txt"<br> MISSION dungeon_lang.DEVIL_TOWER_DESTROY_DEVIL_STONE<br>}<br><br>Group Floor_4-1<br>{<br> KILL_RIGHT_STONE "share/locale/international/dungeon_regen/devil_tower/deviltower4_regen_stone.txt"<br> MISSION dungeon_lang.DEVIL_TOWER_DESTROY_REAL_STONE<br> WARP 374 419<br>}<br><br>Group Floor_5<br>{<br> DROP_KEY "share/locale/international/dungeon_regen/devil_tower/deviltower5_regen.txt"<br> KEY 50084 2<br> SEAL 20073 361 411 5<br> SEAL 20073 380 392 5<br> SEAL 20073 410 391 5<br> SEAL 20073 428 442 5<br> SEAL 20073 431 411 5<br> SEAL 20073 410 463 5<br> SEAL 20073 382 463 5<br> SEAL 20073 361 442 5<br> INFO_KEY dungeon_lang.UNLOCK_SEAL<br> WARP 373 184<br>}<br><br>Group Floor_6<br>{<br> KILL_REGEN "share/locale/international/dungeon_regen/devil_tower/deviltower6_regen.txt"<br> REGEN_FILE "share/locale/international/dungeon_regen/devil_tower/deviltower6_regen_mobs.txt"<br> MISSION dungeon_lang.DEVIL_TOWER_DESTROY_POWER_STONE<br> WARP 629 452<br>}<br><br>Group Floor_7<br>{<br> USE_ITEM "share/locale/international/dungeon_regen/devil_tower/deviltower7_regen.txt"<br> ITEM 30302 20<br> SUCCESS_CHANCE 100<br>}<br><br>Group Floor_8<br>{<br> FIND_REAL_KEY "share/locale/international/dungeon_regen/devil_tower/deviltower8_regen.txt"<br> REAL_KEY 30304 1<br> FAKE_KEY 30303 5<br> SEAL 20390 599 400 5<br> INFO_KEY_REAL dungeon_lang.INFO_KEY_REAL<br> INFO_KEY_FAKE dungeon_lang.INFO_KEY_FAKE<br> WARP 623 159<br>}<br><br>Group Floor_9<br>{<br> KILL_REGEN "share/locale/international/dungeon_regen/devil_tower/deviltower9_regen.txt"<br> REGEN_FILE "share/locale/international/dungeon_regen/devil_tower/deviltower8_regen.txt"<br> MISSION dungeon_lang.DEVIL_TOWER_DESTROY_POWER_STONE<br>}</span>
}
Images:
Biologist
• Biologist missions are configured server-side through JSON. Settings include minimum level, required item, quantity, success chance, cooldown, bonuses, and rewards. The system supports both fixed rewards (bonuses) and player-selected bonuses.
Example configuration:
Code:
{
"index": 0,
"cooldown": 600,
"success_chance": 60,
"choose_bonus": false,
"minimum_level": 30,
"time_item": 70030,
"chance_item": 71035,
"required_item": { "vnum": 30006, "count": 10 },
"reward_bonuses": [
{ "apply": 54, "value": 60 }
],
"reward_items": []
},
{
"index": 1,
"cooldown": 600,
"success_chance": 60,
"choose_bonus": false,
"minimum_level": 40,
"time_item": 70030,
"chance_item": 71035,
"required_item": { "vnum": 30047, "count": 15 },
"reward_bonuses": [
{ "apply": 63, "value": 5 }
],
"reward_items": []
},
Images:
Cube Renewal
• Modern crafting interface.
• Left-clicking an item opens its Wikipedia page directly from the crafting window. The same functionality is available in the item upgrade window.
• Right-clicking an item searches for it directly in the search shop. The same functionality is available in the item upgrade window.
Images:
Horse Manager
• Horse progression is no longer locked inside a quest. Levels, bonuses, materials, costs, minimum player level, success chance, cooldowns, and missions are all configurable server-side through JSON.
• Missions can require players to kill a specific number of monsters, with or without a time limit. The interface displays progress, the next bonus, required materials, and all requirements. An optional item is also included, granting 100% success chance and removing the attempt cooldown.
Images:
Autopickup + Loot Filter
• Autopickup can be granted for different durations or permanently. Its timer continues running even while the player is offline. The system can be enabled or disabled both through the game settings and by clicking its affect icon. Both states are synchronized, and the icon visually indicates whether the feature is active or inactive.
• Multiple autopickup effects cannot be active simultaneously. Disabling the feature does not stop its timer.
• Autopickup respects the loot filter.
Images:
Switchbot
• The Switchbot includes standard (free) features and additional premium features.
• 5 slots (2 free and 3 premium).
• 5 alternatives (1 free and 4 premium).
• Adjustable switching speed (available only to premium players; non-premium players use the standard speed).
• Instant bonus switching in batches of 100 / 500 / 1,000 switchers (premium only).
• Selection of the bonus-changing item (Enchant Item, Green Magic, etc.).
• Safe Mode: bonus change notifications are no longer received until the Switchbot is stopped.
Images:
Offline Shop / Ikarus Shop v2
• A large part of the original system has been rewritten, bringing both improvements and a redesigned interface.
• Custom titles can be set for offline shops.
• The offline shop storage has been removed.
• Only the shop owner can see a visual effect indicating which shop belongs to them.
Images:
Battle Pass
• Daily and weekly missions, countdown until reset, free and premium rewards, and the ability to reroll missions. Players can filter completed missions and collect their rewards directly from the interface.
Images:
Global Challenges
• Challenge objectives can track character levels, dungeons, obtaining and upgrading items, bonuses obtained manually or through Switchbot, sashes, and alchemy. Challenge validation takes place at the source of the action rather than simply checking the item's final state, reducing potential exploits.
Images:
Ranking System
• Configurable rankings with class filters, level ranges, periodic resets, and rewards. The current configuration includes categories such as level, damage dealt to Metin Stones, Metin Stones destroyed, bosses killed, dungeons completed, items with changed bonuses, sashes combined, and mining.
Images:
Event Manager
• Includes example configurations for double drops from bosses, Metin Stones, and fishing, as well as Moonlight Chests and Hexagonal Chests.
Images:
In-Game Livestream
• A client/server system for promoting livestreams directly in-game, featuring its own window and a widget (similar to the event calendar widget displayed on the screen to indicate active events), which can be hidden through the settings. It is useful for events, partners, and content creators, without requiring manual client modifications for every new stream.
Images:
Special Inventories
• Separate inventories for upgrade materials, books, enchantments, chests, and costumes. They also work with the regular storage and Item Shop storage.
Images:
Drop Info + DPS
• Useful information displayed in the target window, along with damage-per-second measurement.
Images:
Multilanguage
• In-game language switching with support for 16 locales: Arabic, Czech, German, Danish, English, Spanish, French, Greek, Hungarian, Italian, Dutch, Polish, Portuguese, Romanian, Russian, and Turkish. Includes country flags and anonymous mode.
Animated Guild Symbols
• Upload support for JPG, GIF, and WebP. The current implementation supports up to 32 frames per symbol, while the protocol is prepared for up to 128 frames. Atlas capacity has been increased to 21 images.
Friend List
• Additional information and a modernized design.
• Players can add people to their "Favorites", which are displayed at the top of a separate favorites list.
• A "GM" button opens a GM Support private message. When a player sends a message, all staff members receive a PM titled "Support - playername". Any staff member can reply, and multiple staff members can participate in the same support conversation with the player.
Images:
Minimap
• Bosses are now displayed on the minimap, with a green icon when alive and a red icon when killed. When a boss is dead, its actual respawn time is displayed, with a countdown until it respawns.
• Left-clicking a boss icon on the minimap opens that boss's Wikipedia page.
Images:
Blend System
• The blend system has been reworked and now supports the following subtypes:
• NORMAL_BLEND - The standard Metin2 blend system.
• USE_BLEND - Bonuses are configured through the item's apply values in proto. Duration is set through Value1 and the group through Value0. The group prevents another item belonging to the same group from being activated simultaneously. Items are consumed upon use, and their effects are displayed in the uiaffectshower affect list.
• TOGGLE_BLEND - Bonuses are configured through the item's apply values in proto, with the group set through Value1. The group prevents another item belonging to the same group from being activated simultaneously. Duration works like a regular item using TIMER_BASED_ON_WEAR + duration. These items can be activated directly from the inventory. If a player has two identical timed items, they can combine them into a single item with the accumulated duration.
Mount / Pet
• Mounts and pets can be activated directly from the inventory. They do not occupy equipment or costume slots.
Fishing System
• The fishing system has been redesigned with a modernized fishing mechanic.
• Players must catch the fish within the yellow zone three times. After three failed attempts, the fishing attempt is cancelled.
• The overall fish-catching chance, as well as the individual chances for each fish, are configured in fishing.lua.
• fishing.txt has been replaced with fishing.lua.
Example fishing.lua:
Code:
FishingConfig = {
general_catch_chance = 100,
fishes = {
{ vnum = 50002, dead_vnum = 0, grill_vnum = 0, chance = 10 },
{ vnum = 27992, dead_vnum = 0, grill_vnum = 0, chance = 10 },
{ vnum = 27993, dead_vnum = 0, grill_vnum = 0, chance = 10 },
{ vnum = 27994, dead_vnum = 0, grill_vnum = 0, chance = 10 },
{ vnum = 27802, dead_vnum = 0, grill_vnum = 0, chance = 10 },
{ vnum = 27803, dead_vnum = 27833, grill_vnum = 27863, chance = 10 },
{ vnum = 27804, dead_vnum = 27834, grill_vnum = 27864, chance = 10 },
{ vnum = 27805, dead_vnum = 27835, grill_vnum = 27865, chance = 10 },
{ vnum = 27806, dead_vnum = 27836, grill_vnum = 27866, chance = 10 },
{ vnum = 27807, dead_vnum = 27837, grill_vnum = 27867, chance = 10 },
{ vnum = 27808, dead_vnum = 27838, grill_vnum = 27868, chance = 10 },
{ vnum = 27809, dead_vnum = 27839, grill_vnum = 27869, chance = 10 },
{ vnum = 27810, dead_vnum = 27840, grill_vnum = 27870, chance = 10 },
{ vnum = 27811, dead_vnum = 27841, grill_vnum = 27871, chance = 10 },
{ vnum = 27812, dead_vnum = 27842, grill_vnum = 27872, chance = 10 },
{ vnum = 27813, dead_vnum = 27843, grill_vnum = 27873, chance = 10 },
{ vnum = 27814, dead_vnum = 27844, grill_vnum = 27874, chance = 10 },
{ vnum = 27815, dead_vnum = 27845, grill_vnum = 27875, chance = 10 },
{ vnum = 27816, dead_vnum = 27846, grill_vnum = 27876, chance = 10 },
{ vnum = 27817, dead_vnum = 27847, grill_vnum = 27877, chance = 10 },
{ vnum = 27818, dead_vnum = 27848, grill_vnum = 27878, chance = 10 },
{ vnum = 27819, dead_vnum = 27849, grill_vnum = 27879, chance = 10 },
{ vnum = 27820, dead_vnum = 27850, grill_vnum = 27880, chance = 10 },
{ vnum = 27821, dead_vnum = 27851, grill_vnum = 27881, chance = 10 },
{ vnum = 27822, dead_vnum = 27852, grill_vnum = 27882, chance = 10 },
{ vnum = 27823, dead_vnum = 27853, grill_vnum = 27883, chance = 10 },
{ vnum = 70201, dead_vnum = 0, grill_vnum = 0, chance = 10 },
{ vnum = 70202, dead_vnum = 0, grill_vnum = 0, chance = 10 },
{ vnum = 70203, dead_vnum = 0, grill_vnum = 0, chance = 10 },
{ vnum = 70204, dead_vnum = 0, grill_vnum = 0, chance = 10 },
{ vnum = 70205, dead_vnum = 0, grill_vnum = 0, chance = 10 },
{ vnum = 70206, dead_vnum = 0, grill_vnum = 0, chance = 10 },
{ vnum = 70048, dead_vnum = 0, grill_vnum = 0, chance = 10 },
{ vnum = 70049, dead_vnum = 0, grill_vnum = 0, chance = 10 },
{ vnum = 70050, dead_vnum = 0, grill_vnum = 0, chance = 10 },
{ vnum = 70051, dead_vnum = 0, grill_vnum = 0, chance = 10 },
{ vnum = 80008, dead_vnum = 0, grill_vnum = 0, chance = 10 },
{ vnum = 50009, dead_vnum = 0, grill_vnum = 0, chance = 10 },
{ vnum = 50008, dead_vnum = 0, grill_vnum = 0, chance = 10 },
}
}
Images:
Passive Skills
• Three new passive skills have been added: Mastery, Accuracy, and Precision.
• Mastery - Once all six character skills have reached P (Perfect), Mastery provides three bonuses:
- 5% Strong Against Monsters
- 5% Strong Against Metin Stones
- 5% Strong Against Dungeon Monsters
• Precision - The maximum Piercing Hit value is capped at 100 points. Every 2 points above 100 are converted into 5 Attack Value.
Images:
Bonus Information Page
• Bonuses are organized into categories, and can easily be moved from one category to another.
• Includes a bonus search function.
• When a player hovers over a bonus, a tooltip displays a table showing the sources from which that bonus value can be obtained.
Images:
Item Slot Color
• A colored frame can be applied to any item with type ITEM_ARMOR / ITEM_WEAPON.
• Up to 5 colors can be saved in the color selection window.
• An item is also available to remove the slot color.
• Fully functional in trading, offline shops, storage, and other interfaces.
Images:
Custom Pet & Mount Names
• Seven scrolls are available for customizing pet and mount names: 1 day, 3 days, 5 days, 7 days, 14 days, 30 days, and permanent.
• Custom names provide bonuses, which can be configured individually for each scroll.
Images:
Metin Stone Selection (Premium / Non-Premium)
• Up to 3 Metin Stones can be selected on any regular character.
• Premium characters can select up to 6 Metin Stones.
• Theowahdan offers a hunting mission (kill a configurable number of Metin Stones) which, once completed, grants one additional selection slot for 24 hours. This increases the limits to 4 for free players and 7 for premium players.
• Premium players can select multiple Metin Stones simultaneously (enabled/disabled through the game options). The selection amount can be set to 2, 3, 4, 5, 6, or MAX.
• While selecting Metin Stones, the character will remain stationary until the player releases the SHIFT key. This makes it possible to select multiple stones without the character moving towards the first selected stone.
Images:
GPU Skinning
• There are several additional features beyond GPU Skinning. More information will be published in the next update. Anyone interested can contact me directly for further details.
Images:
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
Price & Contact
• Price: €300.
• The price may change over time as the server will continue to receive updates. This topic will be updated periodically with newly added features and any details that may have been omitted.
• For further information, feel free to contact me on Discord: choroy