Metin2 item Tablosu: window, pos, socket ve attr Sütunları

Kayıtlı
1 Yıl 9 Ay 14 Gün
Katılım
10 Ocak 2025
Konular
50
Mesajlar
140
Tepkime puanı
21
Online süresi
7h 23m
Puan
43
Konum
Türkiye
Web sitesi
www.zyncra.shop
📌 Konu İçeriği — Hızlı Bakış
01.
window: eşya hangi pencerede?
02. pos: envanter kutuları nasıl numaralanır?
03. EQUIPMENT: ekipman yuvaları
04. Kemer, simya, depo ve Nesne Marketi Deposu
05. Taş yuvaları: socket0, socket1, socket2
06. Efsunlar: attrtype ve attrvalue

  1. item tablosunun sütunları
  2. window: eşya hangi pencerede?
  3. pos: envanter kutuları nasıl numaralanır?

player.item tablosu sunucudaki her eşyanın satırıdır: kime ait olduğu (owner_id), hangi pencerede ve kaçıncı kutuda durduğu (window, pos), adedi (count), ne olduğu (vnum), takılı taşlar ya da süre gibi ek değerleri (socket0-socket2) ve efsunları (attrtype, attrvalue çiftleri).

window: eşya hangi pencerede?

windowNumaraowner_idNe zaman okunur
INVENTORY1KarakterGirişte
EQUIPMENT2KarakterGirişte, eşya giydirilerek
SAFEBOX3HesapDepo açılınca
MALL4HesapNesne Marketi Deposu açılınca
DRAGON_SOUL_INVENTORY5KarakterGirişte (simya taşları)
BELT_INVENTORY6KarakterGirişte (kemer envanteri)
GROUND7YokOkunmaz

pos: envanter kutuları nasıl numaralanır?

Bir envanter sayfası 5 sütun ve 9 satır, yani 45 kutudur. Kutular soldan sağa, yukarıdan aşağı numaralanır.

Orijinal yapıda envanter 2 sayfadır, pos 0-89 arasıdır. Envanteri 4 sayfaya çıkaran derlemelerde (ENABLE_EXTEND_INVEN_SYSTEM) pos 0-179 arasıdır; istemcinin de 4 sayfayı desteklemesi gerekir.

EQUIPMENT: ekipman yuvaları

21, 22 ve 24 numaralı yuvalar ilgili özellik kapalıysa yoktur ve sonraki numaralar kayar; bu yüzden numarayı kendi derlemendeki EWearPositions sırasından doğrula. Takılı simya taşları da ekipman penceresinde, son yuvadan sonraki numaralarda durur.

Kemer, simya, depo ve Nesne Marketi Deposu

  • BELT_INVENTORY: kemer envanteri 4 × 4 = 16 kutudur, pos 0-15; kaç kutunun açık olduğunu kemerin seviyesi belirler (kemer ve envanter). Eski kurulumlarda bu eşyalar envanter penceresinde, ekipman yuvalarından sonraki numaralarda tutulur; yaygın paketlerin sql/updates/post klasöründeki dosyalar onları kemer penceresine taşır.
  • DRAGON_SOUL_INVENTORY: simya taşlarının envanteri.
  • SAFEBOX: owner_id hesap numarasıdır; aynı hesabın bütün karakterleri aynı depoyu görür. Depo sayfası da 5 × 9 = 45 kutudur, sayfa sayısını safebox.size belirler. Hesabın safebox_expire süresi devam ediyorsa ya da karakter büyük depo eşyasını takıyorsa depo 3 sayfa açılır. Geçersiz konumdaki ya da başka eşyayla çakışan depo eşyası gösterilmez ama satırı silinmez. Oyuncu tarafı depo yazısında.

Taş yuvaları: socket0, socket1, socket2

Yeni yaratılan bir eşyanın kaç açık yuvayla geleceğini item_proto belirler, ama SQL ile yazılan yuva sayısını oyun yüklerken denetlemez. Taş takmanın kuralları taş takma yazısında.

Efsunlar: attrtype ve attrvalue

Yedi efsun çifti vardır. İlk beşi (attrtype0-attrtype4) normal efsunlar, son ikisi (attrtype5, attrtype6) 6.

Bütün numaralar efsun listesi sayfasında. Değerler oyunun efsun tablosundaki beş seviyeden gelir; varsayılan tabloda silahtaki yarı insan efsunu en çok %10'dur.

Örnek satır

Kılıç'ın boyutu 2 olduğu için 0 ve 5 numaralı kutular boş olmalıdır. Bu satırı ekleyen sorgu ve öncesinde yapılacaklar MySQL ile sık yapılan işlemler yazısında.

Eşya verirken sık yapılan hatalar

  1. Sunucu açıkken item tablosuna satır eklemek. Oyundaki karakter yeni satırı görmez; eşya ancak karakter çıkıp önbellek boşaldıktan sonraki girişte gelir ve kutu o arada dolmuşsa başka yere taşınır. Daha sinsi sorun kimliktir. Her oyun çekirdeği açılışta db'den 10 milyonluk bir kimlik bloğu alır ve yeni eşyalara oradan sırayla numara verir; db bu blokları açılışta tablodaki en büyük kimliğe bakarak kurar. Sunucu açıkken otomatik numarayla eklenen satır, bir çekirdeğin birazdan kendi eşyasına vereceği kimliği alabilir; o eşya kaydedildiğinde REPLACE senin satırını ezer. Sunucu açıkken eşya item_award ile, doğrudan item tablosuna ise sunucu kapalıyken verilir.
  2. Depo eşyasına karakter numarası yazmak. SAFEBOX ve MALL'da owner_id hesap numarasıdır.
  3. Dolu kutuya eşya koymak. Başlangıç kutusu doluysa oyun eşyayı ilk boş kutuya taşır, envanter doluysa yere atar. Büyük eşyanın alt kutuları denetlenmediği için üst üste binen eşyalar envanteri bozar.

İlgili kod yerleri

  • db'nin okuması ve sütun sırası: db/src/ClientManagerPlayer.cpp, CreateItemTableFromRes ve karakter yükleme sorgusu.
  • db'nin yazması: db/src/Cache.cpp, CItemCache::OnFlush (REPLACE ve socket0-socket2).
  • Oyunun kaydettiği konum: game/src/item_manager.cpp, SaveSingleItem (ekipmanda yuva numarası, kemerde 0-15, depoda hesap numarası).

İlgili sayfalar

  • Metin2 6. ve 7. Efsun: Nadir Efsunlar Nasıl Eklenir ve Ne İşe Yarar? (Wiki)
  • Metin2 Depo Sistemi: Depo Boyutu, Şifre ve Nesne Market Deposu (Wiki)
  • Metin2 item_proto Rehberi: Sütunlar, Türler ve Bayraklar (Server kurma)

Özet Değerlendirme: player.item tablosunun sütunları: envanter, ekipman, kemer, simya, depo ve Nesne Marketi Deposu pencereleri, kutu ve yuva numaraları, taş yuvaları ve süre tutan socket sütunları, attrtype ve attrvalue efsun çiftleri, eşya verirken sık yapılan hatalar.

Sıkça Sorulan Sorular (SSS)
Soru 1: Metin2 item Tablosu: window, pos, socket ve attr Sütunları rehberindeki ayarlar tüm sunucu yapılarında geçerli mi?
Evet, rehberde paylaşılan temel mekanikler hem emek (zor) hem de orta/vs'lik sunucu kurgularında doğrudan uygulanabilir; sunucu oranlarına göre küçük ince ayarlar yapılabilir.

Soru 2: En yüksek verim için hangi sıralama takip edilmeli?
Öncelikle karakter/sistem temel gereksinimlerini tamamlayıp ardından konu içerisindeki adım adım dizilim ve optimizasyon tavsiyelerini sırasıyla uygulamanız en yüksek performansı sağlar.
 
Son düzenleme:
Geri
Üst