- Mesaj
- 693
- Çözümler
- 44
- Beğeni
- 438
- Puan
- 909
- Ticaret Puanı
- 0
merhabalar bir çok uyarlamasını yaptım fakat offline shopdan item alınca veya pazarı kapatınca itemler normal envantere geliyor
kullandığım offshop =ikarus gridli
kullandığım k envanter = k envanter
uzun ugraşları sonucu çözüm hem satın alma hemde safeboxtan item aldıktan sonra gerekli itemler k envanterine gider
new_offlineshop_manager.cpp
açılır ve aratılır
tekrar aratılır
ve değiştirilir
konu kapatılabilir
karşılaştırma yapabilmeniz için dosyayı bırakıyorum yardımlarından ötürü @hasanmacit tekrar teşekkür ederim.
kullandığım offshop =ikarus gridli
kullandığım k envanter = k envanter
uzun ugraşları sonucu çözüm hem satın alma hemde safeboxtan item aldıktan sonra gerekli itemler k envanterine gider
new_offlineshop_manager.cpp
açılır ve aratılır
Kod:
bool CShopManager::RecvShopBuyDBPacket(DWORD dwBuyerID, DWORD dwOwnerID, DWORD dwItemID)
void bloğu komple değiştirilir:
bool CShopManager::RecvShopBuyDBPacket(DWORD dwBuyerID, DWORD dwOwnerID, DWORD dwItemID)
{
OFFSHOP_DEBUG("buyer %u , owner %u , itemid %u ", dwBuyerID, dwOwnerID, dwItemID);
CShop* pkShop = GetShopByOwnerID(dwOwnerID);
if (!pkShop)
return false;
CShopItem* pItem = nullptr;
if (!pkShop->GetItem(dwItemID, &pItem))
return false;
OFFSHOP_DEBUG("checked %s", "successful");
LPCHARACTER ch = CHARACTER_MANAGER::instance().FindByPID(dwBuyerID);
if (ch)
{
OFFSHOP_DEBUG("buyer is online , name %s , item id %u ", ch->GetName(), dwItemID);
LPITEM pkItem = pItem->CreateItem();
if (!pkItem)
{
sys_err("cannot create item ( dwItemID %u , dwVnum %u, dwShopOwner %u, dwBuyer %u ) ", dwItemID, pItem->GetInfo()->dwVnum, dwOwnerID, dwBuyerID);
return false;
}
int cell;
if (pkItem->IsDragonSoul())
cell = ch->GetEmptyDragonSoulInventory(pkItem);
#ifdef ENABLE_SPLIT_INVENTORY_SYSTEM
else if (pkItem->IsSkillBook())
{
cell = ch->GetEmptySkillBookInventory(pkItem->GetSize());
}
else if (pkItem->IsUpgradeItem())
{
cell = ch->GetEmptyUpgradeItemsInventory(pkItem->GetSize());
}
else if (pkItem->IsStone())
{
cell = ch->GetEmptyStoneInventory(pkItem->GetSize());
}
else if (pkItem->IsBox())
{
cell = ch->GetEmptyBoxInventory(pkItem->GetSize());
}
else if (pkItem->IsEfsun())
{
cell = ch->GetEmptyEfsunInventory(pkItem->GetSize());
}
else if (pkItem->IsCicek())
{
cell = ch->GetEmptyCicekInventory(pkItem->GetSize());
}
#endif
else
cell = ch->GetEmptyInventory(pkItem->GetSize());
if (cell != -1)
{
if (pkItem->IsDragonSoul())
pkItem->AddToCharacter(ch, TItemPos(DRAGON_SOUL_INVENTORY, cell));
#ifdef ENABLE_SPLIT_INVENTORY_SYSTEM
else if (pkItem->IsSkillBook())
pkItem->AddToCharacter(ch, TItemPos(INVENTORY, cell));
else if (pkItem->IsUpgradeItem())
pkItem->AddToCharacter(ch, TItemPos(INVENTORY, cell));
else if (pkItem->IsStone())
pkItem->AddToCharacter(ch, TItemPos(INVENTORY, cell));
else if (pkItem->IsBox())
pkItem->AddToCharacter(ch, TItemPos(INVENTORY, cell));
else if (pkItem->IsEfsun())
pkItem->AddToCharacter(ch, TItemPos(INVENTORY, cell));
else if (pkItem->IsCicek())
pkItem->AddToCharacter(ch, TItemPos(INVENTORY, cell));
#endif
else
pkItem->AddToCharacter(ch, TItemPos(INVENTORY, cell));
}
DWORD dwItemID = pItem->GetID();
pkShop->BuyItem(dwItemID);
}
else
{
OFFSHOP_DEBUG("buyer isn't online , item removed %u (shop %u)", dwItemID, pkShop->GetOwnerPID());
DWORD dwItemID = pItem->GetID();
pkShop->BuyItem(dwItemID);
}
return true;
}
tekrar aratılır
Kod:
bool CShopManager::RecvShopSafeboxGetItemClientPacket(LPCHARACTER ch, DWORD dwItemID)
ve değiştirilir
void bloğu komple değiştirilir:
bool CShopManager::RecvShopSafeboxGetItemClientPacket(LPCHARACTER ch, DWORD dwItemID)
{
if (!ch || !ch->GetShopSafebox())
return false;
CShopSafebox* pkSafebox = ch->GetShopSafebox();
CShopItem* pItem = nullptr;
if (!pkSafebox->GetItem(dwItemID, &pItem))
return false;
LPITEM pkItem = pItem->CreateItem();
if (!pkItem)
return false;
int iEmptyPos = -1;
if (pkItem->IsDragonSoul())
iEmptyPos = ch->GetEmptyDragonSoulInventory(pkItem);
#ifdef ENABLE_SPLIT_INVENTORY_SYSTEM
else if (pkItem->IsSkillBook())
{
iEmptyPos = ch->GetEmptySkillBookInventory(pkItem->GetSize());
}
else if (pkItem->IsUpgradeItem())
{
iEmptyPos = ch->GetEmptyUpgradeItemsInventory(pkItem->GetSize());
}
else if (pkItem->IsStone())
{
iEmptyPos = ch->GetEmptyStoneInventory(pkItem->GetSize());
}
else if (pkItem->IsBox())
{
iEmptyPos = ch->GetEmptyBoxInventory(pkItem->GetSize());
}
else if (pkItem->IsEfsun())
{
iEmptyPos = ch->GetEmptyEfsunInventory(pkItem->GetSize());
}
else if (pkItem->IsCicek())
{
iEmptyPos = ch->GetEmptyCicekInventory(pkItem->GetSize());
}
#endif
else
iEmptyPos = ch->GetEmptyInventory(pkItem->GetSize());
if (iEmptyPos == -1)
{
M2_DESTROY_ITEM(pkItem);
return false;
}
// patch with warp check
ch->SetOfflineShopUseTime();
if (pkSafebox->RemoveItem(dwItemID))
{
pkSafebox->RefreshToOwner();
if (pkItem->IsDragonSoul())
pkItem->AddToCharacter(ch, TItemPos(DRAGON_SOUL_INVENTORY, iEmptyPos));
#ifdef ENABLE_SPLIT_INVENTORY_SYSTEM
else if (pkItem->IsSkillBook())
pkItem->AddToCharacter(ch, TItemPos(INVENTORY, iEmptyPos));
else if (pkItem->IsUpgradeItem())
pkItem->AddToCharacter(ch, TItemPos(INVENTORY, iEmptyPos));
else if (pkItem->IsStone())
pkItem->AddToCharacter(ch, TItemPos(INVENTORY, iEmptyPos));
else if (pkItem->IsBox())
pkItem->AddToCharacter(ch, TItemPos(INVENTORY, iEmptyPos));
else if (pkItem->IsEfsun())
pkItem->AddToCharacter(ch, TItemPos(INVENTORY, iEmptyPos));
else if (pkItem->IsCicek())
pkItem->AddToCharacter(ch, TItemPos(INVENTORY, iEmptyPos));
#endif
else
pkItem->AddToCharacter(ch, TItemPos(INVENTORY, iEmptyPos));
}
SendShopSafeboxGetItemDBPacket(ch->GetPlayerID(), dwItemID);
return true;
}
karşılaştırma yapabilmeniz için dosyayı bırakıyorum yardımlarından ötürü @hasanmacit tekrar teşekkür ederim.
Dosya Eklentileri
Son düzenleme: