Hallo Community, habe folgendes Problem bei dem Shop_Table_Ex System was vom Grund schon im Source vorhanden ist.
das Problem ist wie folgt ich kann Shops damit erstellen und auch Sachen kaufen ohne Probleme es sind bis 2 Tabs möglich ohne das meine Core Crasht.
ab dem dritten Tab kriege ich einen Core Crash obwohl Maximal 3 Tabs ohne was zu verändern möglich ist. habe es bei den fliege files probiert es funktioniert habe dann meinen Source mit den von Fliege verglichen es ist 1 zu 1 das selbe System nichts ist anders ich habe alles im Binary Source so wie Game / DB Source nach diesem System abgesucht alle Code Zeilen mit dem vom Fliege verglichen nichts ist anders.
Habe nichts in der Syserr vom Client stehen.
In der Syserr vom Server ist eine Zeile die wenig aussagt zu dem Core Crash.
In der DB Syserr steht auch nichts so wie auth
Habe das ganze dank freitags Hilfe mal mit gdb gedebuggt,
es kam folgendes raus wo ich ehrlich sein muss ich auch nicht wirklich drauf komme was es sein kann.
Das ist die Angegebene Funktion:
- bool CShopEx::AddGuest(LPCHARACTER ch,DWORD owner_vid, bool bOtherEmpire)
- {
- if (!ch)
- return false;
- if (ch->GetExchange())
- return false;
- if (ch->GetShop())
- return false;
- ch->SetShop(this);
- m_map_guest.insert(GuestMapType::value_type(ch, bOtherEmpire));
- TPacketGCShop pack;
- pack.header = HEADER_GC_SHOP;
- pack.subheader = SHOP_SUBHEADER_GC_START_EX;
- TPacketGCShopStartEx pack2;
- memset(&pack2, 0, sizeof(pack2));
- pack2.owner_vid = owner_vid;
- pack2.shop_tab_count = m_vec_shopTabs.size();
- char temp[8096]; // ÃÖ´ë 1728 * 3
- char* buf = &temp[0];
- size_t size = 0;
- for (itertype(m_vec_shopTabs) it = m_vec_shopTabs.begin(); it != m_vec_shopTabs.end(); it++)
- {
- const TShopTableEx& shop_tab = *it;
- TPacketGCShopStartEx::TSubPacketShopTab pack_tab;
- pack_tab.coin_type = shop_tab.coinType;
- memcpy(pack_tab.name, shop_tab.name.c_str(), SHOP_TAB_NAME_MAX);
- for (BYTE i = 0; i < SHOP_HOST_ITEM_MAX_NUM; i++)
- {
- pack_tab.items[i].vnum = shop_tab.items[i].vnum;
- pack_tab.items[i].count = shop_tab.items[i].count;
- switch(shop_tab.coinType)
- {
- case SHOP_COIN_TYPE_GOLD:
- if (bOtherEmpire) // no empire price penalty for pc shop
- pack_tab.items[i].price = shop_tab.items[i].price * 3;
- else
- pack_tab.items[i].price = shop_tab.items[i].price;
- break;
- case SHOP_COIN_TYPE_SECONDARY_COIN:
- pack_tab.items[i].price = shop_tab.items[i].price;
- break;
- }
- memset(pack_tab.items[i].aAttr, 0, sizeof(pack_tab.items[i].aAttr));
- memset(pack_tab.items[i].alSockets, 0, sizeof(pack_tab.items[i].alSockets));
- }
- memcpy(buf, &pack_tab, sizeof(pack_tab));
- buf += sizeof(pack_tab);
- size += sizeof(pack_tab);
- }
- pack.size = sizeof(pack) + sizeof(pack2) + size;
- ch->GetDesc()->BufferedPacket(&pack, sizeof(TPacketGCShop));
- ch->GetDesc()->BufferedPacket(&pack2, sizeof(TPacketGCShopStartEx));
- ch->GetDesc()->Packet(temp, size);
- return true;
- }
ich hoffe jemand kann mit weiter helfen.
PS: für die, die das System nicht kennen. Bitte melden Sie sich an, um diesen Link zu sehen.