Hallo Com,
Ich hab das Shop Search System von Koray verbaut. Als OffShop nutze ich Revoot (Great).
Die Shopsuche und das Kaufen funktioniert bei localen Shops super.
Bei Offshops leider nicht so richtig.
Er findet die Items. Wenn man dann aber den Kauf auslösen will funkt mir immer eine Bedingung dazwischen.
File: shop_manager.cpp
Function: void CShopManager::FindFromGlass(LPCHARACTER ch_seller, LPCHARACTER ch_buyer)
Problem:
Bei einem OffShop erstellt er ja einen NPCShop.
Wenn er dann in dieser Funktion ist und alles über "ch_seller" abprüft, kommt er nicht weit, da ja der NPCShop der "ch_seller" ist und nicht der Charakter an sich.
Hab ich da nen Denkfehler ?
File: input_main.cpp
Funktion: void CInputMain::Shop2(LPCHARACTER ch, const char * data)
Problem:
- else if (shop2_subheader == SHOP2_SUBHEADER_CG_BUY)
- {
- ch->ChatPacket(CHAT_TYPE_INFO,"shop2_subheader == SHOP2_SUBHEADER_CG_BUY");
- if (!strlen(p->cSellerName)){
- sys_err("TPacketCGShop2: SHOP2_SUBHEADER_CG_BUY USER: %s -- HAVE A EMPTY ARGUMENT", ch->GetName());
- return;
- }
- //if (!isdigit(p->bItemPos)){
- // sys_err("TPacketCGShop2: SHOP2_SUBHEADER_CG_BUY USER: %s -- ITEM POS ISN'T NUMBER", ch->GetName());
- // return;
- //}
- sys_log(0, "TPacketCGShop2: SHOP2_SUBHEADER_CG_BUY USER: %s POS: %d SELLER: %s", ch->GetName(), p->bItemPos, p->cSellerName);
- LPCHARACTER seller_ch = CHARACTER_MANAGER::instance().FindPC(p->cSellerName);
- if (!seller_ch){
- ch->ChatPacket(CHAT_TYPE_INFO, "%s isn't online or in other channel", p->cSellerName);
- return;
- }
- if (!seller_ch->IsPC() || !seller_ch->GetDesc()){
- ch->ChatPacket(CHAT_TYPE_INFO, "%s isn't PC or isn't active", p->cSellerName);
- return;
- }
- if (seller_ch == ch){
- ch->ChatPacket(CHAT_TYPE_INFO, "You can not buy item from yourself");
- return;
- }
- if (quest::CQuestManager::instance().GetPCForce(ch->GetPlayerID())->IsRunning() ||
- quest::CQuestManager::instance().GetPCForce(seller_ch->GetPlayerID())->IsRunning())
- {
- ch->ChatPacket(CHAT_TYPE_INFO, "You can not use this in now");
- return;
- }
- ch->SetQuestFlag("item_search.flood_check", get_global_time());
- if (p->iBuyType == SHOP2_SEARCHER_TYPE_FIND)
- CShopManager::instance().FindFromGlass(seller_ch, ch);
- else
- CShopManager::instance().BuyFromGlass(seller_ch, ch, p->bItemPos, p->iBuyType);
Durch "LPCHARACTER seller_ch = CHARACTER_MANAGER::instance().FindPC(p->cSellerName);" bekomme ich nur den aktuellen Charakter und nicht den OffShop(NPC).
Dann ruft er CShopManager::instance().FindFromGlass(seller_ch, ch); mit dem "falschen" seller_ch.
Die Unterscheidung kommt von:
File: shop_manager.cpp
Function: bool CShopManager::StartOfflineShop(DWORD id, bool onboot)
Code:
- LPCHARACTER ch = CHARACTER_MANAGER::Instance().SpawnMob(30000, map_index, x, y, z, true, 0, false);
- if (ch)
- {
- ch->SetName(shop_name.c_str());
- ch->SetPrivShop(id);
- ch->SetPrivShopOwner(pid);
- ch->SetShopTime(time);
- ch->Show(map_index, x, y, z);
- ch->OpenShop(id, name.c_str(), onboot);
- DBManager::instance().DirectQuery("UPDATE player_shop SET shop_vid=%d WHERE id=%d", (DWORD)ch->GetVID(), id);
- LPCHARACTER owner = CHARACTER_MANAGER::instance().FindByPID(ch->GetPrivShopOwner());
- if (owner){
- owner->ChatPacket(CHAT_TYPE_INFO,"vor LoadPrivShops");
- owner->LoadPrivShops();
- }
- return true;
- }
- return false;
Wie komme ich an diesen "ch" später wieder ran, wenn es um das Kaufen geht ?
Ich hasse dieses System -.-
Bitte melden Sie sich an, um diesen Link zu sehen.
Aber der erste Schritt ist gepackt
Vllt weiß das ja jmd
Zahle für ne schöne und saubere Lösung auch gern was
mfg Volvox