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 
kısaca sen ne yaptın kardeşim böyle yazmış etmişsin iyi güzelde diyenlere
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
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();
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
vt:

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
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

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();
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:
Linkleri görebilmek için Turkmmo Forumuna ÜYE olmanız gerekmektedir.
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:
üşenmişlik .dpaste koyamıyormusun kardeşim bu paylaşım ne
py de kim tab ayarı ile uğraşacak sen bide onu söyleüşenmişlik .d
şu anki versiyonunun py tarafı yok senin yapacağın kısım sadece c++ tarafı şu anpy de kim tab ayarı ile uğraşacak sen bide onu söyle
Şu an konuyu görüntüleyenler (Toplam : 0, Üye: 0, Misafir: 0)
Benzer konular
- Cevaplar
- 15
- Görüntüleme
- 793
- Cevaplar
- 9
- Görüntüleme
- 499
