Cynex™ Bir Varmış Bir Yokmuş... 1-99 Newschool tarzı geliştirilmiş Server Files Meris2Final Game Ve Mysql İle Birlikte..

  • Konu başlatıcı Konu başlatıcı Jascer
  • Başlangıç Tarihi Başlangıç Tarihi
Bağlantılar ve dosyalar korumalıİçeriği açmak için ilk mesajı beğenin ve konuya bir yorum yazın. Her iki koşul da gereklidir.

Jascer

Üye
Üye
Mesajlar
89
Beğeniler
0
Puanlar
1
Bir Varmış Bir Yokmuş..
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/8
    ,
    Kod:
    attrvalue7/8
    Meris2'de
    Kod:
    ITEM_ATTRIBUTE_MAX_NUM = 9
    , Barbaros2'de 7 efsun slotu vardı
  • Kod:
    player.affect
    →
    Kod:
    dwExpireTime
    (
    Kod:
    __AFFECT_RENEWAL__
    açık)
  • Kod:
    player.player
    →
    Kod:
    arena_point_daily / weekly / kp
  • Kod:
    player.refine_proto
    →
    Kod:
    vnum10 / count10
  • Kod:
    player.monarch
    →
    Kod:
    name
  • Kod:
    player.item_award
    ve
    Kod:
    server_settings.nesnemarket_item
    → 8. efsun slotu

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
ve
Kod:
streamer_info
kaynakta
Kod:
SELECT *
ile konumsal okunuyor. Yani kolon sırası yanlışsa sistem sessizce yanlış veri okur. Bunları koda göre birebir dizdik. Kendi eklemenizi yaparsanız bu tablolara kolon eklemeyin — veriyi kaydırır.

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
). Onarıldı —
Kod:
affect
'te bozuk index 50 gerçek yinelenen satırı gizliyormuş.

---

Derleme Tarafı

Kaynak
Kod:
g++10 -m32
ile derlenmek üzere yazılmış. Modern FreeBSD'de
Kod:
gcc10
yok ve
Kod:
gcc12
32-bit
Kod:
libstdc++
ile gelmiyor. Base clang +
Kod:
-m32
ile derledik.

Yol boyunca düzeltilenler:
  • rapidjson —
    Kod:
    GenericStringRef::operator=
    const üyelere atama yapıyordu (clang hata veriyor)
  • C++17'de kaldırılan adaptörler —
    Kod:
    bind1st / bind2nd / mem_fun / mem_fun_ref / binary_function / random_shuffle
    . Kaynağın kendi
    Kod:
    msl::
    altyapısı kullanıldı
  • void_binder — eski
    Kod:
    std::binder1st
    'in
    Kod:
    argument_type
    tipine bağımlıydı
  • VID → varargs — POD olmayan nesne
    Kod:
    sys_log
    '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şuyordu

---

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
bekler)
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
tablosundaki değer, client'ın gönderdiği sürümle birebir aynı olmalı.

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
→ bakım modu (sadece
Kod:
common.gmlist
'teki hesaplar girebilir)
Kod:
status = 0
→ normal

---

Bilinen Sorunlar

Bunlar bizim eklediğimiz hatalar değil, Meris2 kaynağından gelen durumlar. Sakladığımız bir şey olmasın diye yazıyorum:

  1. Monarch (İmparator) sistemi çalışmıyor.
    Kod:
    Monarch.cpp
    pid değerini
    Kod:
    name
    kolonuna yazıyor ama okurken
    Kod:
    pid
    kolonunu okuyor. Yani yazdığı yer ile okuduğu yer farklı.
    Sorgu hata vermesin diye
    Kod:
    name
    kolonunu ekledik, ama imparator bilgisi hiçbir zaman geri yüklenmez.
    Düzeltmesi tek kelime: ilgili satırda
    Kod:
    "name"
    →
    Kod:
    "pid"
    . Kaynak değişikliği olduğu için kararı size bıraktık.
  2. StreamerInfo format string açığı.
    Kod:
    snprintf(hedef, boyut, mRow[i])
    — veritabanından gelen değer doğrudan format string olarak kullanılıyor.
    Kod:
    common.streamer_info
    tablosuna
    Kod:
    %s
    içeren bir metin girilirse çekirdek çökebilir.
    Düzeltmesi:
    Kod:
    snprintf(hedef, boyut, "%s", mRow[i])
  3. "Boot: Cannot load Timed Quest Data"
    Kod:
    timed_quest_config
    tablosu boş olduğu için. Tablo doğru oluşturuldu, sadece görev içeriği yok. Sunucunun açılmasını engellemez.
  4. "no sectree for spawn ... mapindex 41"
    Kod:
    regen.txt
    'te haritanın birkaç yüz birim dışında kalan mob doğum noktaları var. O moblar doğmaz, başka etkisi yok.
  5. Yeni karakterler level 0 oluşur — bu normal.
    Kod:
    ENABLE_EVENT_MANAGER
    açıkken Meris2 bunu bilerek yapıyor.

---

İçerik Uyarlaması Hakkında

Sunucunun
Kod:
item_proto
'su, Meris2 client'ının kendi proto'su temel alınarak hazırlandı — client ile birebir uyumlu olsun diye. İki proto zaten %99.3 aynıydı.

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
) Barbaros2'nin "kostüm silah efsunlama" sistemine ait ve o alt tip Meris2 kaynağında hiç yok. Silmek de mümkün değildi — drop tablolarını kırıyor. Bu yüzden
Kod:
ITEM_TYPE
'ları
Kod:
ITEM_NONE
yapılıp etkisizleştirildi: item var, ama işlevi yok. Meris2'de o sistem zaten bulunmadığı için doğru davranış bu.

Detaylı listeler pakette:
Kod:
item_proto.EKLENENLER.txt
·
Kod:
item_proto.ETKISIZLESTIRILENLER.txt

---

Test Edildi

Kod:
db + auth1/2/3 + ch1 core1-4
tam kurulumla oyuna girildi:

  • 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.
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: root
ş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.



Powered By: Cynex™​
 
Geri
En Üst