Ayyıldız2 | 2008 TR Yapısı • 1-99 Orta Emek Destan • Oto Avsız • 10 Temmuz 21:00 HEMEN TIKLA!
Hey. I cant use shops anymore since i build Wiki
![]()
After i click NPC, everything does not work anymore.
If i disable the System, everything is fine.
Kod:if (!Recv(iSize, &vecBuffer[0])) { return false; }
This causes the error. Sizes are the same with and without system
ÜSTTEKİ HATAYI ALIYORUM ÜSTEKİ KODU DEVRE DIŞI BIRAKINCA PAZAR RANDUMANLI ÇALIŞIYOR WİKİ SİSTEMİNİ KALDIRINCA PAZAR SORUNSUZ ÇALIŞIYOR
YARDICI OLABİLCEK VARMI
OFFLİNESHOP OVERFAL
[CODE title="OFLİNESHOP PYTHONNETWORKSTREAMGAME.CPP"]#ifdef ENABLE_OFFLINE_SHOP_SYSTEM
/////////////////////////////////////////////////////////////////////////
// MyOfflineShop
bool CPythonNetworkStream::SendBuildOfflineShopPacket(const char* c_szName, const std::vector<TOfflineShopItemTable>& c_rSellingItemStock, BYTE bNpcType, BYTE bBoardStyle)
{
TPacketCGMyOfflineShop packet;
packet.bHeader = HEADER_CG_MY_OFFLINE_SHOP;
strncpy(packet.szSign, c_szName, SHOP_SIGN_MAX_LEN);
packet.bCount = (short)c_rSellingItemStock.size();
packet.bNpcType = bNpcType;
packet.bBoardStyle = bBoardStyle;
if (!Send(sizeof(packet), &packet))
return false;
for (std::vector<TOfflineShopItemTable>::const_iterator itor = c_rSellingItemStock.begin(); itor < c_rSellingItemStock.end(); ++itor)
{
const TOfflineShopItemTable& c_rItem = *itor;
if (!Send(sizeof(c_rItem), &c_rItem))
return false;
}
return SendSequence();
}
bool CPythonNetworkStream::RecvOfflineShopSignPacket()
{
TPacketGCShopSign p;
if (!Recv(sizeof(TPacketGCShopSign), &p))
return false;
CInstanceBase* pInstance = CPythonCharacterManager::instance().GetInstancePtr(p.dwVID);
if (pInstance)
{
if (pInstance->IsShop())
{
if (0 == strlen(p.szSign))
PyCallClassMemberFunc(m_apoPhaseWnd[PHASE_WINDOW_GAME], "BINARY_OfflineShop_Disappear", Py_BuildValue("(i)", p.dwVID));
else
PyCallClassMemberFunc(m_apoPhaseWnd[PHASE_WINDOW_GAME], "BINARY_OfflineShop_Appear", Py_BuildValue("(isi)", p.dwVID, p.szSign, p.bBorderStyle));
}
else
PyCallClassMemberFunc(m_apoPhaseWnd[PHASE_WINDOW_GAME], "BINARY_OfflineShop_Disappear", Py_BuildValue("(i)", p.dwVID));
}
return true;
}
bool CPythonNetworkStream::RecvOfflineShopOpenPanelPacket()
{
TPacketGCOpenOffShopPanel p;
if (!Recv(sizeof(TPacketGCOpenOffShopPanel), &p))
return false;
BYTE hasOfflineShop = p.hasOfflineShop;
UINT lMapIndex = (UINT)p.lMapIndex;
BYTE shopChannel = p.shopChannel;
int iTime = p.iTime;
BYTE isPremium = p.isPremium;
DWORD displayedCount = p.displayedCount;
const char * shopName = p.shopName;
PyCallClassMemberFunc(m_apoPhaseWnd[PHASE_WINDOW_GAME], "BINARY_OfflineShop_Open", Py_BuildValue("(iiiiiis)", hasOfflineShop, lMapIndex, shopChannel, iTime, isPremium, displayedCount, shopName));
return true;
}
bool CPythonNetworkStream::RecvOfflineShopStartP2PPacket()
{
TPacketGCOfflineShopStartP2P pShopStartPacket;
if (!Recv(sizeof(TPacketGCOfflineShopStartP2P), &pShopStartPacket))
return false;
CPythonShop::Instance().Clear();
for (BYTE iItemIndex = 0; iItemIndex < OFFLINE_SHOP_HOST_ITEM_MAX_NUM; ++iItemIndex)
{
CPythonShop::Instance().SetOfflineShopItemData(iItemIndex, pShopStartPacket.items[iItemIndex]);
}
PyCallClassMemberFunc(m_apoPhaseWnd[PHASE_WINDOW_GAME], "RefreshOfflineShopManager", Py_BuildValue("()"));
return true;
}
bool CPythonNetworkStream::RecvOfflineShopChangeSignPacket()
{
TPacketGCShopSign p;
if (!Recv(sizeof(TPacketGCShopSign), &p))
return false;
CInstanceBase* pInstance = CPythonCharacterManager::instance().GetInstancePtr(p.dwVID);
if (pInstance)
{
if (pInstance->IsShop())
{
if (0 == strlen(p.szSign))
PyCallClassMemberFunc(m_apoPhaseWnd[PHASE_WINDOW_GAME], "BINARY_OfflineShop_Disappear", Py_BuildValue("(i)", p.dwVID));
else
PyCallClassMemberFunc(m_apoPhaseWnd[PHASE_WINDOW_GAME], "BINARY_OfflineShop_ChangeSign", Py_BuildValue("(is)", p.dwVID, p.szSign));
}
else
PyCallClassMemberFunc(m_apoPhaseWnd[PHASE_WINDOW_GAME], "BINARY_OfflineShop_Disappear", Py_BuildValue("(i)", p.dwVID));
}
return true;
}
bool CPythonNetworkStream::RecvOfflineShopChangeSignPacketP2P()
{
TPacketGCShopSign p;
if (!Recv(sizeof(TPacketGCShopSign), &p))
return false;
PyCallClassMemberFunc(m_apoPhaseWnd[PHASE_WINDOW_GAME], "BINARY_ChangeOfflineShopName", Py_BuildValue("(s)", p.szSign));
return true;
}
bool CPythonNetworkStream::RecvOfflineShopPlayerBuyItem()
{
TPacketGCOfflineShopAdviseOwnerSell p;
if (!Recv(sizeof(TPacketGCOfflineShopAdviseOwnerSell), &p))
return false;
PyObject *args = PyTuple_New(3);
PyTuple_SetItem(args, 0, Py_BuildValue("i", p.itemSelled));
PyTuple_SetItem(args, 1, Py_BuildValue("s", p.buyerName));
PyTuple_SetItem(args, 2, PyLong_FromLongLong(p.itemPrice));
PyCallClassMemberFunc(m_apoPhaseWnd[PHASE_WINDOW_GAME], "BINARY_OfflineShopAdviseBuyItem", args);
return true;
}
bool CPythonNetworkStream::RecvOfflineShopPacket()
{
std::vector<int> vecBuffer;
vecBuffer.clear();
TPacketGCShop packet_shop;
if (!Recv(sizeof(packet_shop), &packet_shop))
return false;
int iSize = packet_shop.size - sizeof(packet_shop);
if (iSize > 0)
{
vecBuffer.resize(iSize);
if (!Recv(iSize, &vecBuffer[0]))
return false;
}
switch (packet_shop.subheader)
{
case SHOP_SUBHEADER_GC_START:
{
CPythonShop::Instance().Clear();
DWORD dwVID = *(DWORD*)&vecBuffer[0];
TPacketGCOfflineShopStart* pShopStartPacket = (TPacketGCOfflineShopStart*)&vecBuffer[1];
for (BYTE iItemIndex = 0; iItemIndex < OFFLINE_SHOP_HOST_ITEM_MAX_NUM; ++iItemIndex)
{
CPythonShop::Instance().SetOfflineShopItemData(iItemIndex, pShopStartPacket->items[iItemIndex]);
}
CPythonShop::Instance().SetShopDisplayedCount(pShopStartPacket->m_dwDisplayedCount);
PyCallClassMemberFunc(m_apoPhaseWnd[PHASE_WINDOW_GAME], "StartOfflineShop", Py_BuildValue("(i)", dwVID));
}
break;
case SHOP_SUBHEADER_GC_UPDATE_ITEM2:
{
CPythonShop::Instance().Clear();
TPacketGCOfflineShopStart* pShopStartPacket = (TPacketGCOfflineShopStart*)&vecBuffer[1];
for (BYTE iItemIndex = 0; iItemIndex < OFFLINE_SHOP_HOST_ITEM_MAX_NUM; ++iItemIndex)
{
CPythonShop::Instance().SetOfflineShopItemData(iItemIndex, pShopStartPacket->items[iItemIndex]);
}
PyCallClassMemberFunc(m_apoPhaseWnd[PHASE_WINDOW_GAME], "RefreshOfflineShopManager", Py_BuildValue("()"));
}
break;
case SHOP_SUBHEADER_GC_END:
CPythonShop::instance().Clear();
PyCallClassMemberFunc(m_apoPhaseWnd[PHASE_WINDOW_GAME], "EndOfflineShop", Py_BuildValue("()"));
break;
case SHOP_SUBHEADER_GC_UPDATE_PRICE:
{
TPacketGCShopUpdatePrice* pShopUpdateItemPricePacket = (TPacketGCShopUpdatePrice*)&vecBuffer[0];
PyObject *args = PyTuple_New(3);
PyTuple_SetItem(args, 0, Py_BuildValue("i", pShopUpdateItemPricePacket->dwShopVid));
PyTuple_SetItem(args, 1, Py_BuildValue("i", pShopUpdateItemPricePacket->bPos));
PyTuple_SetItem(args, 2, PyLong_FromLongLong(pShopUpdateItemPricePacket->iPrice));
PyCallClassMemberFunc(m_apoPhaseWnd[PHASE_WINDOW_GAME], "RefreshShopSellingPrice", args);
}
break;
case SHOP_SUBHEADER_GC_UPDATE_ITEM:
{
TPacketGCOfflineShopUpdateItem* pShopUpdateItemPacket = (TPacketGCOfflineShopUpdateItem*)&vecBuffer[0];
CPythonShop::Instance().SetOfflineShopItemData(pShopUpdateItemPacket->pos, pShopUpdateItemPacket->item);
PyCallClassMemberFunc(m_apoPhaseWnd[PHASE_WINDOW_GAME], "RefreshOfflineShop", Py_BuildValue("()"));
}
break;
case SHOP_SUBHEADER_GC_NOT_ENOUGH_MONEY:
PyCallClassMemberFunc(m_apoPhaseWnd[PHASE_WINDOW_GAME], "OnShopError", Py_BuildValue("(s)", "NOT_ENOUGH_MONEY"));
break;
case SHOP_SUBHEADER_GC_NOT_ENOUGH_MONEY_EX:
PyCallClassMemberFunc(m_apoPhaseWnd[PHASE_WINDOW_GAME], "OnShopError", Py_BuildValue("(s)", "NOT_ENOUGH_MONEY_EX"));
break;
case SHOP_SUBHEADER_GC_SOLDOUT:
PyCallClassMemberFunc(m_apoPhaseWnd[PHASE_WINDOW_GAME], "OnShopError", Py_BuildValue("(s)", "SOLDOUT"));
break;
case SHOP_SUBHEADER_GC_INVENTORY_FULL:
PyCallClassMemberFunc(m_apoPhaseWnd[PHASE_WINDOW_GAME], "OnShopError", Py_BuildValue("(s)", "INVENTORY_FULL"));
break;
case SHOP_SUBHEADER_GC_INVALID_POS:
PyCallClassMemberFunc(m_apoPhaseWnd[PHASE_WINDOW_GAME], "OnShopError", Py_BuildValue("(s)", "INVALID_POS"));
break;
case SHOP_SUBHEADER_GC_YOU_DONT_HAVE_DS:
PyCallClassMemberFunc(m_apoPhaseWnd[PHASE_WINDOW_GAME], "OnShopError", Py_BuildValue("(s)", "YOU_DONT_HAVE_DS"));
break;
case SHOP_SUBHEADER_GC_REFRESH_MONEY:
{
TPacketGCOfflineShopMoney* pOfflineShopMoney = (TPacketGCOfflineShopMoney*)&vecBuffer[0];
CPythonPlayer::Instance().SetCurrentOfflineShopMoney(pOfflineShopMoney->llMoney);
#ifdef ENABLE_CHEQUE_SYSTEM
CPythonPlayer::Instance().SetCurrentOfflineShopCheque(pOfflineShopMoney->dwCheque);
#endif
break;
}
case SHOP_SUBHEADER_GC_CHECK_RESULT:
{
BYTE bHasOfflineShop;
if (!Recv(sizeof(BYTE), &bHasOfflineShop))
return false;
CPythonPlayer::instance().SetHasOfflineShop(bHasOfflineShop == 1 ? true : false);
if (bHasOfflineShop != 0)
{
PyCallClassMemberFunc(m_apoPhaseWnd[PHASE_WINDOW_GAME], "RefreshOfflineShopManager", Py_BuildValue("()"));
}
else
{
PyCallClassMemberFunc(m_apoPhaseWnd[PHASE_WINDOW_GAME], "CloseOfflineShopManager", Py_BuildValue("()"));
}
break;
}
#ifdef ENABLE_CHEQUE_SYSTEM
case SHOP_SUBHEADER_GC_NOT_ENOUGH_CHEQUE:
PyCallClassMemberFunc(m_apoPhaseWnd[PHASE_WINDOW_GAME], "OnShopError", Py_BuildValue("(s)", "NOT_ENOUGH_MONEY"));
break;
#endif
default:
TraceError("CPythonNetworkStream::RecvOfflineShopPacket: Unknown subheader %d\n", packet_shop.subheader);
break;
}
return true;
}
#endif[/CODE]
[CODE title="WİKİ PYTHONNETWORKSTREAMGAME.CPP"]#ifdef INGAME_WIKI
extern PyObject* wikiModule;
bool CPythonNetworkStream::SendWikiRequestInfo(unsigned long long retID, DWORD vnum, bool isMob)
{
InGameWiki::TCGWikiPacket pack;
pack.vnum = vnum;
pack.is_mob = isMob;
pack.ret_id = retID;
if (!Send(sizeof(InGameWiki::TCGWikiPacket), &pack))
return false;
return true;
}
bool CPythonNetworkStream::RecvWikiPacket()
{
InGameWiki::TGCWikiPacket pack;
if (!Recv(sizeof(InGameWiki::TGCWikiPacket), &pack))
return false;
WORD iPacketSize = pack.size - sizeof(InGameWiki::TGCWikiPacket);
if (iPacketSize <= 0)
return false;
unsigned long long ret_id = 0;
DWORD data_vnum = 0;
if (pack.is_data_type(InGameWiki::LOAD_WIKI_ITEM))
{
const size_t recv_size = sizeof(InGameWiki::TGCItemWikiPacket);
iPacketSize -= WORD(recv_size);
InGameWiki::TGCItemWikiPacket item_data;
if (!Recv(recv_size, &item_data))
return false;
ret_id = item_data.ret_id;
data_vnum = item_data.vnum;
CItemData* pData = nullptr;
if (!CItemManager::instance().GetItemDataPointer(item_data.vnum, &pData)) {
TraceError("Cant get pointer from item -> %d", item_data.vnum);
return false;
}
auto& recv_wiki = item_data.wiki_info;
auto wikiInfo = pData->GetWikiTable();
const int origin_size = item_data.origin_infos_count;
const int chest_info_count = recv_wiki.chest_info_count;
const int refine_infos_count = recv_wiki.refine_infos_count;
wikiInfo->isSet = true;
wikiInfo->hasData = true;
wikiInfo->bIsCommon = recv_wiki.is_common;
wikiInfo->dwOrigin = recv_wiki.origin_vnum;
wikiInfo->maxRefineLevel = refine_infos_count;
{
wikiInfo->pOriginInfo.clear();
const size_t origin_info_recv_base_size = sizeof(CommonWikiData::TWikiItemOriginInfo);
for (int idx = 0; idx < origin_size; ++idx) {
CommonWikiData::TWikiItemOriginInfo origin_data;
if (!Recv(origin_info_recv_base_size, &origin_data))
return false;
wikiInfo->pOriginInfo.emplace_back(origin_data);
iPacketSize -= WORD(origin_info_recv_base_size);
}
wikiInfo->pChestInfo.clear();
const size_t chest_info_recv_base_size = sizeof(CommonWikiData::TWikiChestInfo);
for (int idx = 0; idx < chest_info_count; ++idx) {
CommonWikiData::TWikiChestInfo chest_data;
if (!Recv(chest_info_recv_base_size, &chest_data))
return false;
wikiInfo->pChestInfo.emplace_back(chest_data);
iPacketSize -= WORD(chest_info_recv_base_size);
}
wikiInfo->pRefineData.clear();
const size_t refine_info_recv_base_size = sizeof(CommonWikiData::TWikiRefineInfo);
for (int idx = 0; idx < refine_infos_count; ++idx) {
CommonWikiData::TWikiRefineInfo refine_info_data;
if (!Recv(refine_info_recv_base_size, &refine_info_data))
return false;
wikiInfo->pRefineData.emplace_back(refine_info_data);
iPacketSize -= WORD(refine_info_recv_base_size);
}
}
if (iPacketSize != 0)
return false;
}
else
{
const size_t recv_size = sizeof(InGameWiki::TGCMobWikiPacket);
iPacketSize -= WORD(recv_size);
InGameWiki::TGCMobWikiPacket mob_data;
if (!Recv(recv_size, &mob_data))
return false;
ret_id = mob_data.ret_id;
data_vnum = mob_data.vnum;
const int drop_info_count = mob_data.drop_info_count;
CPythonNonPlayer::TWikiInfoTable* mobData = nullptr;
if (!(mobData = CPythonNonPlayer::instance().GetWikiTable(mob_data.vnum))) {
TraceError("Cant get mob data from monster -> %d", mob_data.vnum);
return false;
}
mobData->isSet = (drop_info_count > 0);
{
mobData->dropList.clear();
const size_t mob_drop_info_recv_base_size = sizeof(CommonWikiData::TWikiMobDropInfo);
for (int idx = 0; idx < drop_info_count; ++idx) {
CommonWikiData::TWikiMobDropInfo drop_data;
if (!Recv(mob_drop_info_recv_base_size, &drop_data))
return false;
mobData->dropList.push_back(drop_data);
iPacketSize -= WORD(mob_drop_info_recv_base_size);
}
}
if (iPacketSize != 0)
return false;
}
if (wikiModule)
PyCallClassMemberFunc(wikiModule, "BINARY_LoadInfo", Py_BuildValue("(Li)", (long long)ret_id, data_vnum));
return true;
}
#endif[/CODE]
Ekli dosyayı görüntüle 76404