Bir Varmış Bir Yokmuş..
Cynex™ 1-99 Newschool tarzı geliştirilmiş Server Files
Meris2Final Game/Mysql Eklenmiş Hali
Powered By: Cynex™
Cynex™ 1-99 Newschool tarzı geliştirilmiş Server Files
Meris2Final Game/Mysql Eklenmiş Hali
Powered By: Cynex™
---
Kısa Hikâye
Meris2 files bir süre önce forumumuzda paylaşıldı. Ancak paylaşılan arşivde game ve mysql yoktu — yani elinizde kaynak kod vardı, çalışan bir sunucu değil.
Aradan zaman geçti, dosyanın altyapısı Barbaros2 ile aynı olduğu için (ikisi de martysama tabanlı) bazı arkadaşlar mysql'i uyarlayıp para karşılığı satmaya başladı.
Biz de oturduk, uyarlamayı sıfırdan kendimiz yaptık. Şimdi de ücretsiz paylaşıyoruz.
Konu sonundaki dosyada hem çalışan game hem uyarlanmış mysql var. Aşağıda ne yaptığımızı, nasıl kurulacağını ve bilinen sorunları dürüstçe yazdım.
---
Pakette Ne Var?
- game/ — Meris2 kaynak kodundan derlenmiş, çalışır durumda sunucu (game + db çekirdekleri, 32-bit FreeBSD)
- mysql/ — Meris2 koduna göre uyarlanmış MariaDB veri dizini (6 veritabanı, 137 tablo)
- _cynex_sql/ — Kurulum ve migration betikleri (kendi DB'nize uygulamak isterseniz)
- MERIS2_RAPOR.txt — Yapılan her değişikliğin dosya:satır gerekçesiyle tam dökümü
---
Nasıl Yaptık?
Şemayı tahminle değil, doğrudan kaynak koddan çıkardık.
Meris2 kaynağındaki 419 SQL sorgusunu tarayan bir araç yazdık; her sorgunun hangi tabloya, hangi kolona dokunduğunu çıkardı. Sonra bunu Barbaros2'nin mevcut şemasıyla karşılaştırıp farkı kapattık.
her eklenen kolonun karşılığında kaynakta bir sorgu var.
Eklenen kolonlar:
-
→Kod:
player.item,Kod:attrtype7/8Meris2'deKod:attrvalue7/8, Barbaros2'de 7 efsun slotu vardıKod:ITEM_ATTRIBUTE_MAX_NUM = 9 -
→Kod:
player.affect(Kod:dwExpireTimeaçık)Kod:__AFFECT_RENEWAL__ -
→Kod:
player.playerKod:arena_point_daily / weekly / kp -
→Kod:
player.refine_protoKod:vnum10 / count10 -
→Kod:
player.monarchKod:name -
veKod:
player.item_award→ 8. efsun slotuKod:server_settings.nesnemarket_item
Eklenen tablolar (11 adet):
Kod:
boss_record
Kod:
new_petsystem
Kod:
highscore
Kod:
timed_quest_config
Kod:
player_timed_quests
Kod:
luckydraw_config
Kod:
luckydraw_joiners
Kod:
luckydraw_winners
Kod:
guild_invite_limit
Kod:
common.streamer_info
Kod:
log.advanced_item_log
Kolon sırasına dikkat edilen tablolar:
Kod:
new_petsystem
Kod:
luckydraw_config
Kod:
luckydraw_winners
Kod:
streamer_info
Kod:
SELECT *
Onarılan bozuk tablolar:
Barbaros2 dump'ında 5 tablonun Aria index'i bozuktu (
Kod:
affect
Kod:
battle_pass
Kod:
quest
Kod:
exchange_log
Kod:
exchange_log_items
Kod:
affect
---
Derleme Tarafı
Kaynak
Kod:
g++10 -m32
Kod:
gcc10
Kod:
gcc12
Kod:
libstdc++
Kod:
-m32
Yol boyunca düzeltilenler:
- rapidjson —
const üyelere atama yapıyordu (clang hata veriyor)Kod:
GenericStringRef::operator= - C++17'de kaldırılan adaptörler —
. Kaynağın kendiKod:
bind1st / bind2nd / mem_fun / mem_fun_ref / binary_function / random_shufflealtyapısı kullanıldıKod:msl:: - void_binder — eski
'inKod:
std::binder1sttipine bağımlıydıKod:argument_type - VID → varargs — POD olmayan nesne
'a geçiriliyordu (9 yerde). GCC uyarıyordu, clang haklı olarak hata veriyor: dönüşüm olmadan çalışma anında tanımsız davranış oluşuyorduKod:
sys_log
---
Kurulum
1) MySQL
Kod:
Kod:
service mysql-server stop
cp -R mysql/* /var/db/mysql/
chown -R mysql:mysql /var/db/mysql
service mysql-server start
2) Oyun kullanıcısı (CONFIG dosyaları
Kod:
mt2 / mt2
Kod:
Kod:
mysql < game/_cynex_sql/00_kullanici.sql
3) Game
Kod:
Kod:
cd game
python3 start.py --IP <sunucu_ip>
Durdurmak için:
Kod:
python3 stop.py
---
DİKKAT — Buna Takılacaksınız
"Versiyon uyuşmazlığı, lütfen clientinizi yenileyiniz" hatası alırsanız:
Kod:
server_settings.version
Meris2 client'ı 12 gönderiyor (
Kod:
Locale_inc.h
Kod:
#define VERSIYON_CODE 12
Pakette 12 olarak ayarlı. Kendi client'ınızı derlerseniz bu değeri eşitleyin:
Kod:
Kod:
UPDATE server_settings.version SET version = 12, status = 0;
Kod:
status = 1
Kod:
common.gmlist
Kod:
status = 0
---
Bilinen Sorunlar
Bunlar bizim eklediğimiz hatalar değil, Meris2 kaynağından gelen durumlar. Sakladığımız bir şey olmasın diye yazıyorum:
- Monarch (İmparator) sistemi çalışmıyor.
pid değeriniKod:Monarch.cppkolonuna yazıyor ama okurkenKod:namekolonunu okuyor. Yani yazdığı yer ile okuduğu yer farklı.Kod:pid
Sorgu hata vermesin diyekolonunu ekledik, ama imparator bilgisi hiçbir zaman geri yüklenmez.Kod:name
Düzeltmesi tek kelime: ilgili satırda→Kod:"name". Kaynak değişikliği olduğu için kararı size bıraktık.Kod:"pid" - StreamerInfo format string açığı.
— veritabanından gelen değer doğrudan format string olarak kullanılıyor.Kod:snprintf(hedef, boyut, mRow[i])tablosunaKod:common.streamer_infoiçeren bir metin girilirse çekirdek çökebilir.Kod:%s
Düzeltmesi:Kod:snprintf(hedef, boyut, "%s", mRow[i]) - "Boot: Cannot load Timed Quest Data"
tablosu boş olduğu için. Tablo doğru oluşturuldu, sadece görev içeriği yok. Sunucunun açılmasını engellemez.Kod:timed_quest_config - "no sectree for spawn ... mapindex 41"
'te haritanın birkaç yüz birim dışında kalan mob doğum noktaları var. O moblar doğmaz, başka etkisi yok.Kod:regen.txt - Yeni karakterler level 0 oluşur — bu normal.
açıkken Meris2 bunu bilerek yapıyor.Kod:ENABLE_EVENT_MANAGER
---
İçerik Uyarlaması Hakkında
Sunucunun
Kod:
item_proto
Barbaros2'nin drop/cube/blend içeriği Meris2'de olmayan 156 item'i referans ettiği için (yoksa çekirdek açılmıyor) o item'ler eklendi.
10 item (
Kod:
70211-70220
Kod:
ITEM_TYPE
Kod:
ITEM_NONE
Detaylı listeler pakette:
Kod:
item_proto.EKLENENLER.txt
Kod:
item_proto.ETKISIZLESTIRILENLER.txt
---
Test Edildi
Kod:
db + auth1/2/3 + ch1 core1-4
- Karakter oluşturma ve yükleme ✔
- Eşya kullanma + affect (
→Kod:
USE_ITEM) ✔Kod:AddAffect - Haritada hareket ✔
- GM komutları ✔
- Core'lar arası P2P (
) ✔Kod:
P2P: Login
Eksik kolon sayısı: 0
(419 sorgu + 126 tablo tarandı; ayrıca karakter yükleme sorgusunun 60 kolonu ve kaydetme sorgusunun 47 kolonu tek tek doğrulandı)
---
Son Söz
Kimsenin emeğini küçümsemek gibi bir niyetimiz yok. Ama bir şey forumda ücretsiz paylaşıldıysa, eksiğini tamamlayıp parayla satmak bize doğru gelmedi.
Elinizde kalsın. Kullanın, geliştirin, paylaşın.
Takıldığınız yerde konu altına yazın — elimden geldiğince yardımcı olurum.
Bağlantı ve içerik kilitli
Görmek için konunun ilk mesajını beğenin ve konuya bir yorum yazın.Her iki işlem de tamamlanmalı. Ardından sayfayı yenileyin.
Görmek için konunun ilk mesajını beğenin ve konuya bir yorum yazın.Her iki işlem de tamamlanmalı. Ardından sayfayı yenileyin.
Bağlantı ve içerik kilitli
Görmek için konunun ilk mesajını beğenin ve konuya bir yorum yazın.Her iki işlem de tamamlanmalı. Ardından sayfayı yenileyin.
Freebsd id: rootGörmek için konunun ilk mesajını beğenin ve konuya bir yorum yazın.Her iki işlem de tamamlanmalı. Ardından sayfayı yenileyin.
şifre: password
VirüsTotal
Bağlantı ve içerik kilitli
Görmek için konunun ilk mesajını beğenin ve konuya bir yorum yazın.Her iki işlem de tamamlanmalı. Ardından sayfayı yenileyin.
Görmek için konunun ilk mesajını beğenin ve konuya bir yorum yazın.Her iki işlem de tamamlanmalı. Ardından sayfayı yenileyin.
Powered By: Cynex™