Best Studio 1
Best Studio
TuZaKK 1
TuZaKK
Mt2Hizmet 1
Mt2Hizmet
Agora Metin2 1
Agora Metin2
Bvural41 1
Bvural41
kaptanmikro1 1
kaptanmikro1
R 1
Roksam
[DEV]AB 1
[DEV]AB
Sevdamsın 1
Sevdamsın
farkmt2official 1
farkmt2official
emirhanHCL 1
emirhanHCL
Hikaye Ekle

TKMT2 tarzı pazar stok sistemi

  • Konuyu başlatan Konuyu başlatan mistikaptal
  • Başlangıç tarihi Başlangıç tarihi
  • Cevaplar Cevaplar 15
  • Görüntüleme Görüntüleme 2K

Türkiye'de ilk Mobil & PC Aynı Anda Metin2 Oyna. Triarchonline kalıcı ve uzun ömürlü yapısı ile 24 Temmuz'da açılıyor. | 1-99 Mobil Metin2 Triarch HEMEN TIKLA!

şu an eski qf ile çalışan uzaktan market sistemini ve çoklu npc questini inceliyorum ek olarak şu highlight effect ile refresh time'ı tooltipte nasıl gösteririm ona bakıyorum kafa kalmadı ama şimdi ki halini paylaşayım belki bu konunun altından önceki konularda olduğu gibi katkı sağlanırsa gereken ilerleme sağlanır belki de sağlanmaz neyse ben yine de paylaşayım sağlık olsun :)

Python:
    if hasattr(item, "refreshTimeLeft"):
        seconds = item.refreshTimeLeft
        minutes = seconds

        if minutes > 0:
            slot.SetDiffuseColor(0.7, 0.7, 0.7, 1.0)
            self.AppendTextLine("|cffff9999Yeni Stok: %d dakika|r" % minutes)
        else:
            self.AppendTextLine("|cffff0000Bu eşya şu anda yenileniyor...|r")

kısaca sen ne yaptın kardeşim böyle yazmış etmişsin iyi güzelde diyenlere

1750833595145.png


stok ile şu kadar zamanda yenilenme şeysi işte. bunu artık gui de tooltipde göstermek lazimdur.

yukarıda incelemeniz gereken şeyleri belirtmiş oldum sayılır çoklu npc ve qf ile dönen uzaktan market sistemi belki yolunu bulur uyarlayıp onu da paylaşırım sonuçta kendimi düşünen birisi olmadım hiç hep tek isteğim vardı o da forum kazansın yani elin gavurunun forumunda gavurun teki sürekli bir şeyler kazanacağına :D


anlatıma geçelim

tables.h aç ve arat

typedef struct SShopItemTable

display_pos altına geçip şunları ekle

DWORD max_stock;
DWORD restock_interval_seconds;

ClientManagerBoot.cpp açıver

arat

"shop_item.count "

değiştir

"shop_item.count, shop_item.max_stock, shop_item.restock_interval_seconds "

bul

TShopItemTable * pItem = &shop_table->items[shop_table->byItemCount];

içerisinde bul

str_to_number(pItem->vnum, data[col++]);
str_to_number(pItem->count, data[col++]);

değiştir

str_to_number(pItem->vnum, data[col++]);
str_to_number(pItem->count, data[col++]);
str_to_number(pItem->max_stock, data[col++]);
str_to_number(pItem->restock_interval_seconds, data[col++]);
++shop_table->byItemCount;

shop.cpp aç arat

void CShop::SetShopItems(TShopItemTable * pTable, BYTE bItemCount)

içinde bul

item.vnum = pTable->vnum;
item.count = pTable->count;

altına ekle

item.stock = pTable->max_stock;
item.max_stock = pTable->max_stock;
item.restock_interval_seconds = pTable->restock_interval_seconds;
item.last_restock_time = get_global_time();

arat

int CShop::Buy(LPCHARACTER ch, BYTE pos)
içerisinde bul
SHOP_ITEM& r_item = m_itemVector[pos];

altına ekle

UpdateItemStock(r_item);
if (r_item.max_stock && r_item.stock == 0)
return SHOP_SUBHEADER_GC_SOLD_OUT;

arat

DBManager::instance().SendMoneyLog(MONEY_LOG_SHOP, item->GetVnum(), -dwPrice);
altına ekle
if (!m_pkPC && r_item.max_stock) {
if (r_item.stock > 0) --r_item.stock;
BroadcastUpdateItem(pos);
}

arat

pack.subheader = SHOP_SUBHEADER_GC_START;

altına ekle

UpdateStock();

arat

pack2.items.count = item.count;
değiştir
pack2.items.count = item.stock ? item.count : 0;
arat
pack2.item.count = m_itemVector[pos].count;
değiştir
pack2.item.count = m_itemVector[pos].stock ? m_itemVector[pos].count : 0;
fonksiyonu bul
bool CShop::IsSellingItem(DWORD itemID)
altına şu yeni fonksiyonları ekle
void CShop::UpdateItemStock(SHOP_ITEM& item)
{
if (item.max_stock == 0 || item.restock_interval_seconds == 0)
return;
time_t now = get_global_time();
if (item.stock < item.max_stock && now - item.last_restock_time >= item.restock_interval_seconds)
{
item.stock = item.max_stock;
item.last_restock_time = now;
}
}

void CShop::UpdateStock()
{
for (size_t i = 0; i < m_itemVector.size(); ++i)
UpdateItemStock(m_itemVector);
}

shop.h aç

arat

int itemid;

altına ekle

DWORD stock;
DWORD max_stock;
DWORD restock_interval_seconds;
time_t last_restock_time;

tekrar bul

itemid = 0;
altına ekle
stock = 0;
max_stock = 0;
restock_interval_seconds = 0;
last_restock_time = 0;

arat

DWORD GetNPCVnum() { return m_dwNPCVnum; }
altına ekle
void UpdateItemStock(SHOP_ITEM& item);
void UpdateStock();


1750834941610.png

bu sistem tam olarak tamamlanmadı ama çalışır :)

anlatımı sonradan düzenleyip düzgünce kod blokları içerisine alıp paylaşırım şimdiden gözü kanayacak olan kişilere sabır diliyorum


SQL:
ALTER TABLE shop_item
ADD COLUMN max_stock INT DEFAULT 0,
ADD COLUMN restock_interval_seconds INT DEFAULT 0,
ADD COLUMN last_restock_time INT DEFAULT 0;

vt:

Python:
    def SetShopItem(self, slotIndex):
        itemVnum = shop.GetItemID(slotIndex)
        if 0 == itemVnum:
            return

        price = shop.GetItemPrice(slotIndex)
        self.ClearToolTip()
        self.isShopItem = True

        metinSlot = []
        for i in xrange(player.METIN_SOCKET_MAX_NUM):
            metinSlot.append(shop.GetItemMetinSocket(slotIndex, i))
        attrSlot = []
        for i in xrange(player.ATTRIBUTE_SLOT_MAX_NUM):
            attrSlot.append(shop.GetItemAttribute(slotIndex, i))

        self.AddItemData(itemVnum, metinSlot, attrSlot)
        self.AppendPrice(price)
        if app.ENABLE_DYNAMIC_STOCK:
            stock = shop.GetItemStock(slotIndex)
            remaining = shop.GetItemRestockRemaining(slotIndex)

            if stock > 0:
                self.AppendTextLine("Stok: %d" % stock, self.SPECIAL_POSITIVE_COLOR)

            else:  # stock == 0
                if remaining > 0:
                    readable = shop.SecondsToReadableTime(remaining)
                    self.AppendTextLine("|cffff9999Yeni stok: %s sonra|r" % readable)

                else:  # remaining == 0
                    self.AppendTextLine("|cffffcc00Yeni stok hazır!|r")
 

Ekli dosyalar

Son düzenleme:

Şu an konuyu görüntüleyenler (Toplam : 0, Üye: 0, Misafir: 0)

Geri
Üst