Yardım İkarus offlineshop iteme uyarlama

  • Konuyu açan Konuyu açan Kuqsal
  • Açılış Tarihi Açılış Tarihi
  • Yanıt Yanıt 7
  • Gösterim Gösterim 242
Konu sahibi bu konuda soru soruyor. Sorusu ile ilgili bilgisi olanların yanıtlamasını bekliyor.

Kuqsal

Üye
Üye
Mesaj
107
Çözümler
10
Beğeni
22
Puan
459
Ticaret Puanı
0
Merhabalar Benim problemim ikarus offlineshopa item uyarlayamıyorum nasıl yapacağim hakkında bilgi verirseniz sevinirim
 
shop hangi komutla oluşturuyorsa önce onu tespit et. sonra komutun bulunduğu header dosyasını char_item.cppde include et. sonra istediğin item koduna bağla.
 
shop hangi komutla oluşturuyorsa önce onu tespit et. sonra komutun bulunduğu header dosyasını char_item.cppde include et. sonra istediğin item koduna bağla.
input_main.cpp:
Genişlet Daralt Kopyala
    switch (pPack->bSubHeader)
    {
   
    case offlineshop::SUBHEADER_CG_SHOP_CREATE_NEW:                return /*sizeof(TPacketCGNewOfflineShop) +*/ OfflineshopPacketCreateNewShop(ch,data,iBufferLeft);
    case offlineshop::SUBHEADER_CG_SHOP_CHANGE_NAME:            return /*sizeof(TPacketCGNewOfflineShop) +*/ OfflineshopPacketChangeShopName(ch,data,iBufferLeft);
#ifdef ENABLE_NEW_OFFLINESHOP_RENEWAL
    case offlineshop::SUBHEADER_CG_SHOP_EXTEND_TIME:            return /*sizeof(TPacketCGNewOfflineShop) +*/ OfflineshopPacketExtendTime(ch,data,iBufferLeft);
#endif
    case offlineshop::SUBHEADER_CG_SHOP_FORCE_CLOSE:            return /*sizeof(TPacketCGNewOfflineShop) +*/ OfflineshopPacketForceCloseShop(ch,data,iBufferLeft);
    case offlineshop::SUBHEADER_CG_SHOP_REQUEST_SHOPLIST:        return /*sizeof(TPacketCGNewOfflineShop) +*/ OfflineshopPacketRequestShopList(ch,data,iBufferLeft);
    case offlineshop::SUBHEADER_CG_SHOP_OPEN:                    return /*sizeof(TPacketCGNewOfflineShop) +*/ OfflineshopPacketOpenShop(ch,data,iBufferLeft);
    case offlineshop::SUBHEADER_CG_SHOP_OPEN_OWNER:                return /*sizeof(TPacketCGNewOfflineShop) +*/ OfflineshopPacketOpenShowOwner(ch,data,iBufferLeft);
   
    case offlineshop::SUBHEADER_CG_SHOP_BUY_ITEM:                return /*sizeof(TPacketCGNewOfflineShop) +*/ OfflineshopPacketBuyItem(ch, data , iBufferLeft);
    case offlineshop::SUBHEADER_CG_SHOP_ADD_ITEM:                return /*sizeof(TPacketCGNewOfflineShop) +*/ OfflineshopPacketAddItem(ch,data,iBufferLeft);
    case offlineshop::SUBHEADER_CG_SHOP_REMOVE_ITEM:            return /*sizeof(TPacketCGNewOfflineShop) +*/ OfflineshopPacketRemoveItem(ch,data,iBufferLeft);
    case offlineshop::SUBHEADER_CG_SHOP_EDIT_ITEM:                return /*sizeof(TPacketCGNewOfflineShop) +*/ OfflineshopPacketEditItem(ch,data,iBufferLeft);
   
    case offlineshop::SUBHEADER_CG_SHOP_FILTER_REQUEST:            return /*sizeof(TPacketCGNewOfflineShop) +*/ OfflineshopPacketFilterRequest(ch,data,iBufferLeft);
   
    case offlineshop::SUBHEADER_CG_SHOP_OFFER_CREATE:            return /*sizeof(TPacketCGNewOfflineShop) +*/ OfflineshopPacketCreateOffer(ch,data,iBufferLeft);
    case offlineshop::SUBHEADER_CG_SHOP_OFFER_ACCEPT:            return /*sizeof(TPacketCGNewOfflineShop) +*/ OfflineshopPacketAcceptOffer(ch,data,iBufferLeft);
    case offlineshop::SUBHEADER_CG_SHOP_REQUEST_OFFER_LIST:        return /*sizeof(TPacketCGNewOfflineShop) +*/ OfflineshopPacketOfferListRequest(ch);
    case offlineshop::SUBHEADER_CG_SHOP_OFFER_CANCEL:            return /*sizeof(TPacketCGNewOfflineShop) +*/ OfflineshopPacketOfferCancel(ch, data,iBufferLeft);

    case offlineshop::SUBHEADER_CG_SHOP_SAFEBOX_OPEN:            return /*sizeof(TPacketCGNewOfflineShop) +*/ OfflineshopPacketOpenSafebox(ch,data,iBufferLeft);
    case offlineshop::SUBHEADER_CG_SHOP_SAFEBOX_GET_ITEM:        return /*sizeof(TPacketCGNewOfflineShop) +*/ OfflineshopPacketGetItemSafebox(ch,data,iBufferLeft);
    case offlineshop::SUBHEADER_CG_SHOP_SAFEBOX_GET_VALUTES:    return /*sizeof(TPacketCGNewOfflineShop) +*/ OfflineshopPacketGetValutesSafebox(ch,data,iBufferLeft);
    case offlineshop::SUBHEADER_CG_SHOP_SAFEBOX_CLOSE:            return /*sizeof(TPacketCGNewOfflineShop) +*/ OfflineshopPacketCloseSafebox(ch,data,iBufferLeft);

    case offlineshop::SUBHEADER_CG_AUCTION_LIST_REQUEST:        return /*sizeof(TPacketCGNewOfflineShop) +*/ OfflineshopPacketListRequest(ch, data, iBufferLeft);
    case offlineshop::SUBHEADER_CG_AUCTION_OPEN_REQUEST:        return /*sizeof(TPacketCGNewOfflineShop) +*/ OfflineshopPacketOpenAuctionRequest(ch, data, iBufferLeft);
    case offlineshop::SUBHEADER_CG_MY_AUCTION_OPEN_REQUEST:        return /*sizeof(TPacketCGNewOfflineShop) +*/ OfflineshopPacketOpenMyAuctionRequest(ch, data, iBufferLeft);
    case offlineshop::SUBHEADER_CG_CREATE_AUCTION:                return /*sizeof(TPacketCGNewOfflineShop) +*/ OfflineshopPacketCreateAuction(ch, data, iBufferLeft);
    case offlineshop::SUBHEADER_CG_AUCTION_ADD_OFFER:            return /*sizeof(TPacketCGNewOfflineShop) +*/ OfflineshopPacketAddOffer(ch, data, iBufferLeft);
    case offlineshop::SUBHEADER_CG_EXIT_FROM_AUCTION:            return /*sizeof(TPacketCGNewOfflineShop) +*/ OfflineshopPacketExitFromAuction(ch, data, iBufferLeft);

    case offlineshop::SUBHEADER_CG_CLOSE_BOARD:                    return /*sizeof(TPacketCGNewOfflineshop) +*/ OfflineshopPacketCloseBoard(ch);
#ifdef ENABLE_NEW_SHOP_IN_CITIES
    case offlineshop::SUBHEADER_CG_CLICK_ENTITY:                return /*sizeof(TPacketCGNewOfflineshop) +*/ OfflineshopPacketClickEntity(ch, data, iBufferLeft);
#endif


    default:
        sys_err("UNKNOWN SUBHEADER %d ",pPack->bSubHeader);
        return -1;
    }

}
#endif

En baştaki oldugunu biliyorum denedim ama hata alıyorum
 
input_main.cpp:
Genişlet Daralt Kopyala
    switch (pPack->bSubHeader)
    {
  
    case offlineshop::SUBHEADER_CG_SHOP_CREATE_NEW:                return /*sizeof(TPacketCGNewOfflineShop) +*/ OfflineshopPacketCreateNewShop(ch,data,iBufferLeft);
    case offlineshop::SUBHEADER_CG_SHOP_CHANGE_NAME:            return /*sizeof(TPacketCGNewOfflineShop) +*/ OfflineshopPacketChangeShopName(ch,data,iBufferLeft);
#ifdef ENABLE_NEW_OFFLINESHOP_RENEWAL
    case offlineshop::SUBHEADER_CG_SHOP_EXTEND_TIME:            return /*sizeof(TPacketCGNewOfflineShop) +*/ OfflineshopPacketExtendTime(ch,data,iBufferLeft);
#endif
    case offlineshop::SUBHEADER_CG_SHOP_FORCE_CLOSE:            return /*sizeof(TPacketCGNewOfflineShop) +*/ OfflineshopPacketForceCloseShop(ch,data,iBufferLeft);
    case offlineshop::SUBHEADER_CG_SHOP_REQUEST_SHOPLIST:        return /*sizeof(TPacketCGNewOfflineShop) +*/ OfflineshopPacketRequestShopList(ch,data,iBufferLeft);
    case offlineshop::SUBHEADER_CG_SHOP_OPEN:                    return /*sizeof(TPacketCGNewOfflineShop) +*/ OfflineshopPacketOpenShop(ch,data,iBufferLeft);
    case offlineshop::SUBHEADER_CG_SHOP_OPEN_OWNER:                return /*sizeof(TPacketCGNewOfflineShop) +*/ OfflineshopPacketOpenShowOwner(ch,data,iBufferLeft);
  
    case offlineshop::SUBHEADER_CG_SHOP_BUY_ITEM:                return /*sizeof(TPacketCGNewOfflineShop) +*/ OfflineshopPacketBuyItem(ch, data , iBufferLeft);
    case offlineshop::SUBHEADER_CG_SHOP_ADD_ITEM:                return /*sizeof(TPacketCGNewOfflineShop) +*/ OfflineshopPacketAddItem(ch,data,iBufferLeft);
    case offlineshop::SUBHEADER_CG_SHOP_REMOVE_ITEM:            return /*sizeof(TPacketCGNewOfflineShop) +*/ OfflineshopPacketRemoveItem(ch,data,iBufferLeft);
    case offlineshop::SUBHEADER_CG_SHOP_EDIT_ITEM:                return /*sizeof(TPacketCGNewOfflineShop) +*/ OfflineshopPacketEditItem(ch,data,iBufferLeft);
  
    case offlineshop::SUBHEADER_CG_SHOP_FILTER_REQUEST:            return /*sizeof(TPacketCGNewOfflineShop) +*/ OfflineshopPacketFilterRequest(ch,data,iBufferLeft);
  
    case offlineshop::SUBHEADER_CG_SHOP_OFFER_CREATE:            return /*sizeof(TPacketCGNewOfflineShop) +*/ OfflineshopPacketCreateOffer(ch,data,iBufferLeft);
    case offlineshop::SUBHEADER_CG_SHOP_OFFER_ACCEPT:            return /*sizeof(TPacketCGNewOfflineShop) +*/ OfflineshopPacketAcceptOffer(ch,data,iBufferLeft);
    case offlineshop::SUBHEADER_CG_SHOP_REQUEST_OFFER_LIST:        return /*sizeof(TPacketCGNewOfflineShop) +*/ OfflineshopPacketOfferListRequest(ch);
    case offlineshop::SUBHEADER_CG_SHOP_OFFER_CANCEL:            return /*sizeof(TPacketCGNewOfflineShop) +*/ OfflineshopPacketOfferCancel(ch, data,iBufferLeft);

    case offlineshop::SUBHEADER_CG_SHOP_SAFEBOX_OPEN:            return /*sizeof(TPacketCGNewOfflineShop) +*/ OfflineshopPacketOpenSafebox(ch,data,iBufferLeft);
    case offlineshop::SUBHEADER_CG_SHOP_SAFEBOX_GET_ITEM:        return /*sizeof(TPacketCGNewOfflineShop) +*/ OfflineshopPacketGetItemSafebox(ch,data,iBufferLeft);
    case offlineshop::SUBHEADER_CG_SHOP_SAFEBOX_GET_VALUTES:    return /*sizeof(TPacketCGNewOfflineShop) +*/ OfflineshopPacketGetValutesSafebox(ch,data,iBufferLeft);
    case offlineshop::SUBHEADER_CG_SHOP_SAFEBOX_CLOSE:            return /*sizeof(TPacketCGNewOfflineShop) +*/ OfflineshopPacketCloseSafebox(ch,data,iBufferLeft);

    case offlineshop::SUBHEADER_CG_AUCTION_LIST_REQUEST:        return /*sizeof(TPacketCGNewOfflineShop) +*/ OfflineshopPacketListRequest(ch, data, iBufferLeft);
    case offlineshop::SUBHEADER_CG_AUCTION_OPEN_REQUEST:        return /*sizeof(TPacketCGNewOfflineShop) +*/ OfflineshopPacketOpenAuctionRequest(ch, data, iBufferLeft);
    case offlineshop::SUBHEADER_CG_MY_AUCTION_OPEN_REQUEST:        return /*sizeof(TPacketCGNewOfflineShop) +*/ OfflineshopPacketOpenMyAuctionRequest(ch, data, iBufferLeft);
    case offlineshop::SUBHEADER_CG_CREATE_AUCTION:                return /*sizeof(TPacketCGNewOfflineShop) +*/ OfflineshopPacketCreateAuction(ch, data, iBufferLeft);
    case offlineshop::SUBHEADER_CG_AUCTION_ADD_OFFER:            return /*sizeof(TPacketCGNewOfflineShop) +*/ OfflineshopPacketAddOffer(ch, data, iBufferLeft);
    case offlineshop::SUBHEADER_CG_EXIT_FROM_AUCTION:            return /*sizeof(TPacketCGNewOfflineShop) +*/ OfflineshopPacketExitFromAuction(ch, data, iBufferLeft);

    case offlineshop::SUBHEADER_CG_CLOSE_BOARD:                    return /*sizeof(TPacketCGNewOfflineshop) +*/ OfflineshopPacketCloseBoard(ch);
#ifdef ENABLE_NEW_SHOP_IN_CITIES
    case offlineshop::SUBHEADER_CG_CLICK_ENTITY:                return /*sizeof(TPacketCGNewOfflineshop) +*/ OfflineshopPacketClickEntity(ch, data, iBufferLeft);
#endif


    default:
        sys_err("UNKNOWN SUBHEADER %d ",pPack->bSubHeader);
        return -1;
    }

}
#endif

En baştaki oldugunu biliyorum denedim ama hata alıyorum
paket olarak olmayacak. shop.cppdeki createshop gibi düşün.
 
paket olarak olmayacak. shop.cppdeki createshop gibi düşün.
char.h:
Genişlet Daralt Kopyala
#ifdef __ENABLE_NEW_OFFLINESHOP__
    public:
        offlineshop::CShop*        GetOfflineShop() {return m_pkOfflineShop;}
        void                    SetOfflineShop(offlineshop::CShop* pkShop) {m_pkOfflineShop = pkShop;}
        
        offlineshop::CShop*        GetOfflineShopGuest() {return m_pkOfflineShopGuest;}
        void                    SetOfflineShopGuest(offlineshop::CShop* pkShop) {m_pkOfflineShopGuest = pkShop;}
        
        offlineshop::CShopSafebox*
                                GetShopSafebox() {return m_pkShopSafebox;}
        void                    SetShopSafebox(offlineshop::CShopSafebox* pk);

        void                    SetAuction(offlineshop::CAuction* pk) {m_pkAuction = pk;}
        void                    SetAuctionGuest(offlineshop::CAuction* pk) {m_pkAuctionGuest = pk;}

        offlineshop::CAuction*    GetAuction()        {return m_pkAuction;}
        offlineshop::CAuction*    GetAuctionGuest()    {return m_pkAuctionGuest;}


        //offlineshop-updated 05/08/19
        void                    SetLookingOfflineshopOfferList(bool is) { m_bIsLookingOfflineshopOfferList = is; }
        bool                    IsLookingOfflineshopOfferList() { return m_bIsLookingOfflineshopOfferList; }


    private:
        offlineshop::CShop*            m_pkOfflineShop;
        offlineshop::CShop*            m_pkOfflineShopGuest;
        offlineshop::CShopSafebox*    m_pkShopSafebox;
        offlineshop::CAuction*        m_pkAuction;
        offlineshop::CAuction*        m_pkAuctionGuest;

        //offlineshop-updated 05/08/19
        bool    m_bIsLookingOfflineshopOfferList;
#endif
 
char.h:
Genişlet Daralt Kopyala
#ifdef __ENABLE_NEW_OFFLINESHOP__
    public:
        offlineshop::CShop*        GetOfflineShop() {return m_pkOfflineShop;}
        void                    SetOfflineShop(offlineshop::CShop* pkShop) {m_pkOfflineShop = pkShop;}
       
        offlineshop::CShop*        GetOfflineShopGuest() {return m_pkOfflineShopGuest;}
        void                    SetOfflineShopGuest(offlineshop::CShop* pkShop) {m_pkOfflineShopGuest = pkShop;}
       
        offlineshop::CShopSafebox*
                                GetShopSafebox() {return m_pkShopSafebox;}
        void                    SetShopSafebox(offlineshop::CShopSafebox* pk);

        void                    SetAuction(offlineshop::CAuction* pk) {m_pkAuction = pk;}
        void                    SetAuctionGuest(offlineshop::CAuction* pk) {m_pkAuctionGuest = pk;}

        offlineshop::CAuction*    GetAuction()        {return m_pkAuction;}
        offlineshop::CAuction*    GetAuctionGuest()    {return m_pkAuctionGuest;}


        //offlineshop-updated 05/08/19
        void                    SetLookingOfflineshopOfferList(bool is) { m_bIsLookingOfflineshopOfferList = is; }
        bool                    IsLookingOfflineshopOfferList() { return m_bIsLookingOfflineshopOfferList; }


    private:
        offlineshop::CShop*            m_pkOfflineShop;
        offlineshop::CShop*            m_pkOfflineShopGuest;
        offlineshop::CShopSafebox*    m_pkShopSafebox;
        offlineshop::CAuction*        m_pkAuction;
        offlineshop::CAuction*        m_pkAuctionGuest;

        //offlineshop-updated 05/08/19
        bool    m_bIsLookingOfflineshopOfferList;
#endif
new offlineshop.h felan oradan baksana burada yok
 
new offlineshop.h felan oradan baksana burada yok
new_offlineshop.h:
Genişlet Daralt Kopyala
#ifndef __INCLUDE_NEW_OFFLINESHOP_HEADER__
#define __INCLUDE_NEW_OFFLINESHOP_HEADER__

#ifdef __ENABLE_NEW_OFFLINESHOP__
#define __USE_PID_AS_GUESTLIST__

#ifdef __USE_PID_AS_GUESTLIST__
#define AS_LPGUEST(some)  (CHARACTER_MANAGER::instance().FindByPID(some))
#define AS_GUESTID(some)  (some->GetPlayerID())
#else
#define AS_LPGUEST(some) (some)
#define AS_GUESTID(some) (some)
#endif

#include "item.h"

template <class T>
void ZeroObject(T& obj){
    obj = {};
}

template <class T>
void CopyObject(T& objDest, const T& objSrc){
    memcpy(&objDest, &objSrc, sizeof(objDest));
}

template <class T>
void CopyContainer(T& objDest, const T& objSrc){
    objDest = objSrc;
}


//copyarray
template <class T, size_t size>
void CopyArray(T (&objDest)[size] , const T (&objSrc)[size]){
    if(size==0)
        return;
    memcpy(&objDest[0] , &objSrc[0], sizeof(T)*size);
}




template <class T>
void DeletePointersContainer(T& obj){
    typename T::iterator it = obj.begin();
    for(; it != obj.end(); it++)
        delete(*it);
}



namespace offlineshop
{
    //patch 08-03-2020
    inline offlineshop::ExpirationType GetItemExpiration(LPITEM item) {
        auto proto = item->GetProto();
        for (const auto limit : proto->aLimits) {
            if (limit.bType == LIMIT_REAL_TIME)
                return offlineshop::ExpirationType::EXPIRE_REAL_TIME;
            else if (limit.bType == LIMIT_REAL_TIME_START_FIRST_USE && item->GetSocket(1) != 0)
                return offlineshop::ExpirationType::EXPIRE_REAL_TIME_FIRST_USE;
        } return offlineshop::ExpirationType::EXPIRE_NONE;
    }


    enum eOffshopChatPacket
    {
        CHAT_PACKET_CANNOT_CREATE_SHOP,
        CHAT_PACKET_CANNOT_CHANGE_NAME,
        CHAT_PACKET_CANNOT_FORCE_CLOSE,
        CHAT_PACKET_CANNOT_OPEN_SHOP,
        CHAT_PACKET_CANNOT_OPEN_SHOP_OWNER,

        CHAT_PACKET_CANNOT_ADD_ITEM,
        CHAT_PACKET_CANNOT_BUY_ITEM, //tofix wrong chat packet
        CHAT_PACKET_CANNOT_REMOVE_ITEM,
        CHAT_PACKET_CANNOT_EDIT_ITEM,
        CHAT_PACKET_CANNOT_REMOVE_LAST_ITEM,

        CHAT_PACKET_CANNOT_FILTER,
        CHAT_PACKET_CANNOT_SEARCH_YET,
        CHAT_PACKET_OFFER_CREATE,

        CHAT_PACKET_CANNOT_CREATE_OFFER,
        CHAT_PACKET_CANNOT_ACCEPT_OFFER,

        CHAT_PACKET_CANNOT_OPEN_SAFEBOX,
        CHAT_PACKET_CANNOT_SAFEBOX_GET_ITEM,
        CHAT_PACKET_CANNOT_SAFEBOX_GET_VALUTES,
        CHAT_PACKET_CANNOT_SAFEBOX_CLOSE,


        CHAT_PACKET_RECV_ITEM_SAFEBOX,

        //AUCTION
        CHAT_PACKET_AUCTION_CANNOT_SEND_LIST,
        CHAT_PACKET_AUCTION_CANNOT_OPEN_AUCTION,
        CHAT_PACKET_AUCTION_CANNOT_CREATE_AUCTION,
        CHAT_PACKET_AUCTION_CANNOT_ADD_OFFER,

        //GENERAL
        CHAT_PACKET_CANNOT_DO_NOW,

    };

    inline void SendChatPacket(LPCHARACTER ch, BYTE type)
    {
#ifdef __ENABLE_MULTILANGUAGE__
#define CASESEND(var) case var: ch->ChatPacket(CHAT_TYPE_INFO, #var); break;
#else
#define CASESEND(var) case var: ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT(#var)); break;
#endif

        switch (type)
        {
            CASESEND(CHAT_PACKET_CANNOT_CREATE_SHOP)
            CASESEND(CHAT_PACKET_CANNOT_CHANGE_NAME)
            CASESEND(CHAT_PACKET_CANNOT_FORCE_CLOSE)
            CASESEND(CHAT_PACKET_CANNOT_OPEN_SHOP)
            CASESEND(CHAT_PACKET_CANNOT_OPEN_SHOP_OWNER)

            CASESEND(CHAT_PACKET_CANNOT_ADD_ITEM)
            CASESEND(CHAT_PACKET_CANNOT_BUY_ITEM) //tofix wrong chat packet
            CASESEND(CHAT_PACKET_CANNOT_REMOVE_ITEM)
            CASESEND(CHAT_PACKET_CANNOT_EDIT_ITEM)
            CASESEND(CHAT_PACKET_CANNOT_REMOVE_LAST_ITEM)

            CASESEND(CHAT_PACKET_CANNOT_FILTER)
            CASESEND(CHAT_PACKET_CANNOT_SEARCH_YET)
            CASESEND(CHAT_PACKET_OFFER_CREATE)

            CASESEND(CHAT_PACKET_CANNOT_CREATE_OFFER)
            CASESEND(CHAT_PACKET_CANNOT_ACCEPT_OFFER)

            CASESEND(CHAT_PACKET_CANNOT_OPEN_SAFEBOX)
            CASESEND(CHAT_PACKET_CANNOT_SAFEBOX_GET_ITEM)
            CASESEND(CHAT_PACKET_CANNOT_SAFEBOX_GET_VALUTES)
            CASESEND(CHAT_PACKET_CANNOT_SAFEBOX_CLOSE)


            CASESEND(CHAT_PACKET_RECV_ITEM_SAFEBOX)

            //AUCTION
            CASESEND(CHAT_PACKET_AUCTION_CANNOT_SEND_LIST)
            CASESEND(CHAT_PACKET_AUCTION_CANNOT_OPEN_AUCTION)
            CASESEND(CHAT_PACKET_AUCTION_CANNOT_CREATE_AUCTION)
            CASESEND(CHAT_PACKET_AUCTION_CANNOT_ADD_OFFER)

            //GENERAL
            CASESEND(CHAT_PACKET_CANNOT_DO_NOW)

        default:
            sys_err("unknown chat packet %d",type);
            break;
        }
    }

#pragma pack(1)
    class CShopItem
    {
    
    public:


        CShopItem(DWORD dwID);
        CShopItem(const CShopItem& rCopy);
        CShopItem(LPITEM pItem, const TPriceInfo& sPrice, BYTE byWindowType, DWORD dwID=0);

        ~CShopItem();

        bool            GetTable(TItemTable** ppTable) const;
        TPriceInfo*        GetPrice() const;
        
        LPITEM            CreateItem() const;
        TItemInfoEx*    GetInfo() const;

        void            SetInfo(LPITEM pItem);
        void            SetInfo(const TItemInfoEx& info);
        void            SetPrice(const TPriceInfo& sPrice);

        void            SetWindow(BYTE byWin);
        BYTE            GetWindow() const;

        DWORD            GetID() const ;
        void            SetOwnerID(DWORD dwOwnerID);
        bool            CanBuy(LPCHARACTER ch);

        void operator = (const CShopItem& rItem);

    protected:
        TItemInfoEx        m_itemInfo;
        TPriceInfo        m_priceInfo;
        BYTE            m_byWindow;
        DWORD            m_dwID;
        DWORD            m_dwOwnerID;

    };
#pragma pack()




    class CShop
    {


    public:
        typedef std::vector<CShopItem>  VECSHOPITEM;
        typedef std::vector<TOfferInfo>    VECSHOPOFFER;
#ifdef __USE_PID_AS_GUESTLIST__
        typedef std::list<DWORD>        LISTGUEST;
#else
        typedef std::list<LPCHARACTER>    LISTGUEST;
#endif



    public:
        CShop();
        CShop(const CShop& rCopy);



        ~CShop();

        //get const
        VECSHOPITEM*        GetItems() const;
        VECSHOPITEM*        GetItemsSold() const;
        VECSHOPOFFER*        GetOffers() const;
        LISTGUEST*            GetGuests() const;
        DWORD                GetItemCount();

        //duration
        void                SetDuration(DWORD dwDuration);
        DWORD                DecreaseDuration();
        DWORD                GetDuration() const;

        //owner pid
        void                SetOwnerPID(DWORD dwOwnerPID);
        DWORD                GetOwnerPID() const;

        //guests
        bool                AddGuest(LPCHARACTER ch);
        bool                RemoveGuest(LPCHARACTER ch);

        //items
        void                SetItems(VECSHOPITEM* pVec);
        bool                AddItem(CShopItem& rItem);
        bool                AddItemSold(CShopItem& rItem);
        bool                RemoveItem(DWORD dwItemID);
        bool                ModifyItem(DWORD dwItemID, CShopItem& rItem);
        bool                BuyItem(DWORD dwItem);
#ifdef    ENABLE_NEW_OFFLINESHOP_RENEWAL
        void                SendNotificationClientPacket(DWORD dwItemID, long long dwItemPrice, WORD dwItemCount);
#endif
        bool                GetItem(DWORD dwItem, CShopItem** ppItem);
        bool                GetItemSold(DWORD dwItem, CShopItem** ppItem);

        bool                AddOffer(const TOfferInfo* pOfferInfo);
        bool                AcceptOffer(const TOfferInfo* pOfferInfo);

        void                NotifyOffers(LPCHARACTER ch);
        void                NotifyAcceptedOffers(LPCHARACTER ch);
        LPCHARACTER            FindOwnerCharacter();
        void                Clear();


        const char*            GetName() const;
        void                SetName(const char* pcszName);


        void                RefreshToOwner();

#ifdef ENABLE_IRA_REWORK
        void                SetPosInfo(TShopPosition& pos);
#endif
    private:
        void                __RefreshItems(LPCHARACTER ch=NULL);
        void                __SendOfferNotify(LPCHARACTER ch, TOfferInfo* pOffer);

    private:
        VECSHOPITEM            m_vecItems;
        VECSHOPITEM            m_vecItemSold;
        VECSHOPOFFER        m_vecOffers;
        LISTGUEST            m_listGuests;

        DWORD                m_dwPID;
        DWORD                m_dwDuration;
        std::string            m_stName;
#ifdef ENABLE_IRA_REWORK
        TShopPosition        m_posInfo;
#endif
    };





    class CShopSafebox
    {
    public:
        typedef std::vector<CShopItem> VECITEM;

    public:
#pragma pack(1)
        struct SValuteAmount {
            long long illYang;
#ifdef ENABLE_CHEQUE_SYSTEM
            int iCheque;

#endif

            SValuteAmount() : illYang(0)
            {
            }

            SValuteAmount(const TValutesInfo& rCopy)
            {
                illYang = rCopy.illYang;
#ifdef ENABLE_CHEQUE_SYSTEM
                iCheque = rCopy.iCheque;
#endif
            }

            SValuteAmount(const TPriceInfo& rCopy)
            {
                illYang = rCopy.illYang;
#ifdef ENABLE_CHEQUE_SYSTEM
                iCheque = rCopy.iCheque;
#endif
            }

            long long GetTotalYangAmount() const {
                long long total = illYang;
#ifdef ENABLE_CHEQUE_SYSTEM
                total += YANG_PER_CHEQUE*iCheque;
#endif
                return total;
            }

            bool operator < (const SValuteAmount& rVal)
            {
                return GetTotalYangAmount() < rVal.GetTotalYangAmount();
            }

            void operator -= (const SValuteAmount& rVal)
            {
                illYang -= rVal.illYang;
#ifdef ENABLE_CHEQUE_SYSTEM
                iCheque -= rVal.iCheque;
#endif
            }

            void operator += (const SValuteAmount& rVal)
            {
                illYang += rVal.illYang;
#ifdef ENABLE_CHEQUE_SYSTEM
                iCheque += rVal.iCheque;
#endif
            }
        };
#pragma pack()


    public:
        CShopSafebox(LPCHARACTER chOwner);
        CShopSafebox();
        CShopSafebox(const CShopSafebox& rCopy);
        ~CShopSafebox();

        void            SetOwner(LPCHARACTER ch);
        void            SetItems(VECITEM* pVec);
        void            SetValuteAmount(SValuteAmount val);

        bool            AddItem(CShopItem* pItem);
        bool            RemoveItem(DWORD dwItemID);

        void            AddValute(SValuteAmount val);
        bool            RemoveValute(SValuteAmount val);

        VECITEM*        GetItems();
        SValuteAmount    GetValutes();

        bool            GetItem(DWORD dwItemID, CShopItem** ppItem);
        LPCHARACTER        GetOwner();


        bool            RefreshToOwner(LPCHARACTER ch= nullptr);



    private:
        VECITEM            m_vecItems;
        LPCHARACTER        m_pkOwner;
        SValuteAmount    m_valutes;

    };





    class CAuction
    {
    public:
        typedef std::vector<TAuctionOfferInfo> AUCTION_OFFERVEC;
#ifdef __USE_PID_AS_GUESTLIST__
        typedef std::list<DWORD>        GUESTLIST;
#else
        typedef std::list<LPCHARACTER>    GUESTLIST;
#endif

    public:
        CAuction();
        ~CAuction();


        void SetInfo(const TAuctionInfo& auction);
        void SetOffers(const std::vector<TAuctionOfferInfo>& vec);

        bool AddOffer(const TAuctionOfferInfo& offer);
        bool AddGuest(LPCHARACTER ch);
        bool RemoveGuest(LPCHARACTER ch);
        void DecreaseDuration();
        
        
        CShop::LISTGUEST&            GetGuests();
        const DWORD                    GetBestBuyer() const;
        const TAuctionInfo&            GetInfo() const;
        const AUCTION_OFFERVEC&        GetOffers() const;
        const TPriceInfo&            GetBestOffer() const;

    private:
        void __RefreshToGuests();
        bool __SetBestOffer();

    private:
        TAuctionInfo        m_info;
        AUCTION_OFFERVEC    m_offersVec;
        TPriceInfo            m_bestOffer;
        DWORD                m_dwBestBuyer;
        GUESTLIST            m_guestsList;

    };



#ifdef ENABLE_NEW_SHOP_IN_CITIES
    class ShopEntity : public CEntity
    {
    public:
        ShopEntity();

        //overriding virtual CEntity methods
        void    EncodeInsertPacket(LPENTITY entity);
        void    EncodeRemovePacket(LPENTITY entity);

        
        const char*            GetShopName() const;
        void                SetShopName(const char* name);

        int                    GetShopType();
        void                SetShopType(int iType);
        void                SetShop(offlineshop::CShop* pOfflineShop);

        offlineshop::CShop* GetShop() {return m_pkShop;}

        static DWORD        AllocID(){
            static DWORD dwID=1;
            return dwID++;
        }

        DWORD                GetVID() {return m_dwVID;}
        void                Destroy() { CEntity::Destroy(); }
    private:
        char                    m_szName[OFFLINE_SHOP_NAME_MAX_LEN];
        int                        m_iType;
        DWORD                    m_dwVID;
        offlineshop::CShop*        m_pkShop;
    };

#endif







}

#endif //__ENABLE_NEW_OFFLINESHOP__

#endif //__include

new_offlineshop_manager.h:
Genişlet Daralt Kopyala
#ifndef __INCLUDE_HEADER_OFFLINESHOP_MANAGER__
#define __INCLUDE_HEADER_OFFLINESHOP_MANAGER__

#ifdef __ENABLE_NEW_OFFLINESHOP__
#define SUBTYPE_NOSET 255
#define OFFLINESHOP_DURATION_UPDATE_TIME PASSES_PER_SEC(60)
#define OFFLINESHOP_AUCTION_RAISE_PERCENTAGE 10 //to raise the offer will be 10% more than best offer

namespace offlineshop
{
    

    class CShopManager : public singleton<CShopManager>
    {
    public:

#ifdef ENABLE_NEW_SHOP_IN_CITIES
        typedef std::map<DWORD, ShopEntity*> SHOPENTITIES_MAP;

        typedef struct SCityShopInfo {
            SHOPENTITIES_MAP    entitiesByPID;
            SHOPENTITIES_MAP    entitiesByVID;


            void Clear()
            {
                entitiesByPID.clear();
                entitiesByVID.clear();
            }


            SCityShopInfo()
            {
                Clear();
            }


            SCityShopInfo(const SCityShopInfo& rCopy)
            {
                CopyContainer(entitiesByPID, rCopy.entitiesByPID);
                CopyContainer(entitiesByVID, rCopy.entitiesByVID);
            }

        } TCityShopInfo;
#endif

        typedef std::map<DWORD,CShop>                     SHOPMAP;
        typedef std::map<DWORD,CShopSafebox>             SAFEBOXMAP;
        typedef std::map<DWORD,std::vector<TOfferInfo> > OFFERSMAP;
        typedef std::map<DWORD, DWORD>                     SEARCHTIMEMAP;
        typedef std::map<DWORD, CAuction>                 AUCTIONMAP;

#ifdef ENABLE_NEW_SHOP_IN_CITIES
        typedef std::vector<TCityShopInfo>                 CITIESVEC;
#endif
        


        CShopManager();
        ~CShopManager();
        



        //booting
#ifdef ENABLE_IRA_REWORK
        offlineshop::CShop*        PutsNewShop(TShopInfo * pInfo, TShopPosition * pPosInfo);
#else
        offlineshop::CShop*        PutsNewShop(TShopInfo * pInfo);
#endif
        void                    PutsAuction(const TAuctionInfo& auction);
        void                    PutsAuctionOffer(const TAuctionOfferInfo& offer);

        offlineshop::CShop*        GetShopByOwnerID(DWORD dwPID);
        CShopSafebox*            GetShopSafeboxByOwnerID(DWORD dwPID);
        CAuction*                GetAuctionByOwnerID(DWORD dwPID);
        //offers
        bool                    PutsNewOffer(const TOfferInfo* pInfo);

        void                    RemoveSafeboxFromCache(DWORD dwOwnerID);
        void                    RemoveGuestFromShops(LPCHARACTER ch);



#ifdef ENABLE_NEW_SHOP_IN_CITIES
    public:
#ifdef ENABLE_IRA_REWORK
        void        CreateNewShopEntities(offlineshop::CShop& rShop, TShopPosition& pos);
#else
        void        CreateNewShopEntities(offlineshop::CShop& rShop);
#endif
        void        DestroyNewShopEntities(const offlineshop::CShop& rShop);

        void        EncodeInsertShopEntity(ShopEntity& shop, LPCHARACTER ch);
        void        EncodeRemoveShopEntity(ShopEntity& shop, LPCHARACTER ch);

    private:
#ifndef ENABLE_IRA_REWORK
        bool        __CanUseCity(size_t index);
        bool        __CheckEntitySpawnPos(const long x, const long y, const TCityShopInfo& city);
#endif
        void        __UpdateEntity(const offlineshop::CShop& rShop);
#endif


    public:
//packets exchanging db
//ITEMS
/*db*/    void        SendShopBuyDBPacket(DWORD dwBuyerID, DWORD dwOwnerID,DWORD dwItemID);
/*db*/    void        SendShopLockBuyItemDBPacket(DWORD dwBuyerID, DWORD dwOwnerID,DWORD dwItemID);

/*db*/    bool        RecvShopLockedBuyItemDBPacket(DWORD dwBuyerID, DWORD dwOwnerID,DWORD dwItemID);
/*db*/    bool        RecvShopBuyDBPacket(DWORD dwBuyerID, DWORD dwOwnerID,DWORD dwItemID);
/*db*/    void        SendShopCannotBuyLockedItemDBPacket(DWORD dwOwnerID, DWORD dwItemID); //topatch

/*db*/    void        SendShopEditItemDBPacket(DWORD dwOwnerID, DWORD dwItemID, const TPriceInfo& rPrice);
/*db*/    bool        RecvShopEditItemDBPacket(DWORD dwOwnerID, DWORD dwItemID, const TPriceInfo& rPrice);
            

/*db*/    void        SendShopRemoveItemDBPacket(DWORD dwOwnerID, DWORD dwItemID);
/*db*/    bool        RecvShopRemoveItemDBPacket(DWORD dwOwnerID, DWORD dwItemID);
        

/*db*/    void        SendShopAddItemDBPacket(DWORD dwOwnerID, const TItemInfo& rItemInfo);
/*db*/    bool        RecvShopAddItemDBPacket(DWORD dwOwnerID, const TItemInfo& rItemInfo);
        
//SHOPS
/*db*/    void        SendShopForceCloseDBPacket(DWORD dwPID);
/*db*/    bool        RecvShopForceCloseDBPacket(DWORD dwPID);
/*db*/    bool        RecvShopExpiredDBPacket(DWORD dwPID);
        
#ifdef ENABLE_IRA_REWORK
/*db*/    void        SendShopCreateNewDBPacket(const TShopInfo& , const TShopPosition& pos, std::vector<TItemInfo>& vec);
/*db*/    bool        RecvShopCreateNewDBPacket(const TShopInfo& , TShopPosition& pos, std::vector<TItemInfo>& vec);
#else
/*db*/    void        SendShopCreateNewDBPacket(const TShopInfo& , std::vector<TItemInfo>& vec);
/*db*/    bool        RecvShopCreateNewDBPacket(const TShopInfo& , std::vector<TItemInfo>& vec);
#endif

/*db*/    void        SendShopChangeNameDBPacket(DWORD dwOwnerID, const char* szName);
/*db*/    bool        RecvShopChangeNameDBPacket(DWORD dwOwnerID, const char* szName);

#ifdef ENABLE_NEW_OFFLINESHOP_RENEWAL
    bool RecvShopExtendTimeClientPacket(LPCHARACTER ch, DWORD dwTime);
    void SendShopExtendTimeDBPacket(DWORD dwOwnerID, DWORD dwTime);
    bool RecvShopExtendTimeDBPacket(DWORD dwOwnerID, DWORD dwTime);
#endif


//OFFER
/*db*/    void        SendShopOfferNewDBPacket(const TOfferInfo& offer);
/*db*/    bool        RecvShopOfferNewDBPacket(const TOfferInfo& offer);
        
/*db*/    void        SendShopOfferNotifiedDBPacket(DWORD dwOfferID, DWORD dwOwnerID);
/*db*/    bool        RecvShopOfferNotifiedDBPacket(DWORD dwOfferID, DWORD dwOwnerID);

/*db*/    void        SendShopOfferAcceptDBPacket(const TOfferInfo& offer);
/*db*/    bool        RecvShopOfferAcceptDBPacket(DWORD dwOfferID, DWORD dwOwnerID);

/*db*/    void        SendShopOfferCancelDBPacket(const TOfferInfo& offer);
/*db*/    bool        RecvShopOfferCancelDBPacket(DWORD dwOfferID, DWORD dwOwnerID, bool isRemovingItem);//offlineshop-updated 05/08/19

        
/*db*/    void        SendShopSafeboxGetItemDBPacket(DWORD dwOwnerID, DWORD dwItemID);
/*db*/    void        SendShopSafeboxGetValutesDBPacket(DWORD dwOwnerID, const TValutesInfo& valutes);
/*db*/  bool        SendShopSafeboxAddItemDBPacket(DWORD dwOwnerID, const CShopItem& item);
/*db*/    bool        RecvShopSafeboxAddItemDBPacket(DWORD dwOwnerID, DWORD dwItemID, const TItemInfoEx& item);
/*db*/    bool        RecvShopSafeboxAddValutesDBPacket(DWORD dwOwnerID, const TValutesInfo& valute);
/*db*/    bool        RecvShopSafeboxLoadDBPacket(DWORD dwOwnerID, const TValutesInfo& valute, const std::vector<DWORD>& ids, const std::vector<TItemInfoEx>& items);
//patch 08-03-2020
/*db*/  bool        RecvShopSafeboxExpiredItemDBPacket(DWORD dwOwnerID, DWORD dwItemID);


//AUCTION
/*db*/    void        SendAuctionCreateDBPacket(const TAuctionInfo& auction);
/*db*/    void        SendAuctionAddOfferDBPacket(const TAuctionOfferInfo& offer);

/*db*/    bool        RecvAuctionCreateDBPacket(const TAuctionInfo& auction);
/*db*/    bool        RecvAuctionAddOfferDBPacket(const TAuctionOfferInfo& offer);
/*db*/    bool        RecvAuctionExpiredDBPacket(DWORD dwID);


//packets echanging clients
//SHOPS
/*cli.*/bool        RecvShopCreateNewClientPacket(LPCHARACTER ch, TShopInfo& rShopInfo, std::vector<TShopItemInfo> & vec);
/*cli.*/bool        RecvShopChangeNameClientPacket(LPCHARACTER ch, const char* szName);
/*cli.*/bool        RecvShopForceCloseClientPacket(LPCHARACTER ch);
/*cli.*/bool        RecvShopRequestListClientPacket(LPCHARACTER ch);
/*cli.*/bool        RecvShopOpenClientPacket(LPCHARACTER ch, DWORD dwOwnerID);
/*cli.*/bool        RecvShopOpenMyShopClientPacket(LPCHARACTER ch);
/*cli.*/bool        RecvShopBuyItemClientPacket(LPCHARACTER ch, DWORD dwOwnerID, DWORD dwItemID, bool isSearch);
#ifdef ENABLE_NEW_SHOP_IN_CITIES
/*cli.*/bool        RecvShopClickEntity(LPCHARACTER ch, DWORD dwShopEntityVID);
#endif

/*cli.*/void        SendShopListClientPacket(LPCHARACTER ch);
/*cli.*/void        SendShopOpenClientPacket(LPCHARACTER ch, CShop* pkShop);
/*cli.*/void        SendShopOpenMyShopClientPacket(LPCHARACTER ch);
/*cli.*/void        SendShopOpenMyShopNoShopClientPacket(LPCHARACTER ch);
/*cli.*/void        SendShopBuyItemFromSearchClientPacket(LPCHARACTER ch, DWORD dwOwnerID, DWORD dwItemID);
        
/*cli.*/void        SendShopForceClosedClientPacket(DWORD dwOwnerID);


        //ITEMS
/*cli.*/bool        RecvShopAddItemClientPacket(LPCHARACTER ch, const TItemPos& item, const TPriceInfo& price);
/*cli.*/bool        RecvShopRemoveItemClientPacket(LPCHARACTER ch, DWORD dwItemID);
/*cli.*/bool        RecvShopEditItemClientPacket(LPCHARACTER ch, DWORD dwItemID, const TPriceInfo& price);

        //FILTER
/*cli.*/bool        RecvShopFilterRequestClientPacket(LPCHARACTER ch, const TFilterInfo& filter);
/*cli.*/void        SendShopFilterResultClientPacket(LPCHARACTER ch, const std::vector<TItemInfo>& items);


        //OFFERS
/*cli.*/bool        RecvShopCreateOfferClientPacket(LPCHARACTER ch, TOfferInfo& offer);
/*cli.*/bool        RecvShopEditOfferClientPacket(LPCHARACTER ch, const TOfferInfo& offer);/*unused*/
/*cli.*/bool        RecvShopAcceptOfferClientPacket(LPCHARACTER ch, DWORD dwOfferID);
/*cli.*/bool        RecvShopCancelOfferClientPacket(LPCHARACTER ch, DWORD dwOfferID, DWORD dwOwnerID);
/*cli.*/bool        RecvOfferListRequestPacket(LPCHARACTER ch);

        
        //SAFEBOX
/*cli.*/bool        RecvShopSafeboxOpenClientPacket(LPCHARACTER ch);
/*cli.*/bool        RecvShopSafeboxGetItemClientPacket(LPCHARACTER ch, DWORD dwItemID);
/*cli.*/bool        RecvShopSafeboxGetValutesClientPacket(LPCHARACTER ch, const TValutesInfo& valutes);
/*cli.*/bool        RecvShopSafeboxCloseClientPacket(LPCHARACTER ch);
        

        //AUCTION
/*cli.*/bool        RecvAuctionListRequestClientPacket(LPCHARACTER ch);
/*cli.*/bool        RecvAuctionOpenRequestClientPacket(LPCHARACTER ch, DWORD dwOwnerID);
/*cli.*/bool        RecvMyAuctionOpenRequestClientPacket(LPCHARACTER ch);
/*cli.*/bool        RecvAuctionCreateClientPacket(LPCHARACTER ch, DWORD dwDuration, const TPriceInfo& init_price, const TItemPos& pos);
/*cli.*/bool        RecvAuctionAddOfferClientPacket(LPCHARACTER ch, DWORD dwOwnerID, const TPriceInfo& price);
/*cli.*/bool        RecvAuctionExitFromAuction(LPCHARACTER ch, DWORD dwOwnerID);

/*cli.*/void        SendAuctionListClientPacket(LPCHARACTER ch, const std::vector<TAuctionListElement>& auctionVec);
/*cli.*/void        SendAuctionOpenAuctionClientPacket(LPCHARACTER ch, const TAuctionInfo& auction, const std::vector<TAuctionOfferInfo>& vec);
/*cli.*/void        SendAuctionOpenMyAuctionNoAuctionClientPacket(LPCHARACTER ch);


/*cli.*/void        SendShopSafeboxRefresh(LPCHARACTER ch, const TValutesInfo& valute, const std::vector<CShopItem>& vec);
        
/*cli.*/void        RecvCloseBoardClientPacket(LPCHARACTER ch);

        //other
        void        UpdateShopsDuration();
        void        UpdateAuctionsDuration();

        //search time map (checking to avoid search abouse)
        void        ClearSearchTimeMap();
        bool        CheckSearchTime(DWORD dwPID);
        
        // fix flooding offers
        bool        CheckOfferCooldown(DWORD dwPID);

        
            
        void        Destroy();
#ifdef ENABLE_IRA_REWORK
        int            GetMapIndexAllowsList(int iMapIndex);
#endif

    private:
        SHOPMAP            m_mapShops;
        SAFEBOXMAP        m_mapSafeboxs;
        OFFERSMAP        m_mapOffer;

        LPEVENT            m_eventShopDuration;
        SEARCHTIMEMAP    m_searchTimeMap;
        AUCTIONMAP        m_mapAuctions;
        
        // fix flooding offers
        SEARCHTIMEMAP    m_offerCooldownMap;

#ifdef ENABLE_NEW_SHOP_IN_CITIES
        CITIESVEC        m_vecCities;
#endif
#ifdef ENABLE_IRA_REWORK
        std::set<int> s_set_offlineshop_map_allows;
#endif
    };




    offlineshop::CShopManager& GetManager();
}

#endif//__ENABLE_NEW_OFFLINESHOP__
#endif //__INCLUDE_HEADER_OFFLINESHOP_MANAGER__
 
new_offlineshop.h:
Genişlet Daralt Kopyala
#ifndef __INCLUDE_NEW_OFFLINESHOP_HEADER__
#define __INCLUDE_NEW_OFFLINESHOP_HEADER__

#ifdef __ENABLE_NEW_OFFLINESHOP__
#define __USE_PID_AS_GUESTLIST__

#ifdef __USE_PID_AS_GUESTLIST__
#define AS_LPGUEST(some)  (CHARACTER_MANAGER::instance().FindByPID(some))
#define AS_GUESTID(some)  (some->GetPlayerID())
#else
#define AS_LPGUEST(some) (some)
#define AS_GUESTID(some) (some)
#endif

#include "item.h"

template <class T>
void ZeroObject(T& obj){
    obj = {};
}

template <class T>
void CopyObject(T& objDest, const T& objSrc){
    memcpy(&objDest, &objSrc, sizeof(objDest));
}

template <class T>
void CopyContainer(T& objDest, const T& objSrc){
    objDest = objSrc;
}


//copyarray
template <class T, size_t size>
void CopyArray(T (&objDest)[size] , const T (&objSrc)[size]){
    if(size==0)
        return;
    memcpy(&objDest[0] , &objSrc[0], sizeof(T)*size);
}




template <class T>
void DeletePointersContainer(T& obj){
    typename T::iterator it = obj.begin();
    for(; it != obj.end(); it++)
        delete(*it);
}



namespace offlineshop
{
    //patch 08-03-2020
    inline offlineshop::ExpirationType GetItemExpiration(LPITEM item) {
        auto proto = item->GetProto();
        for (const auto limit : proto->aLimits) {
            if (limit.bType == LIMIT_REAL_TIME)
                return offlineshop::ExpirationType::EXPIRE_REAL_TIME;
            else if (limit.bType == LIMIT_REAL_TIME_START_FIRST_USE && item->GetSocket(1) != 0)
                return offlineshop::ExpirationType::EXPIRE_REAL_TIME_FIRST_USE;
        } return offlineshop::ExpirationType::EXPIRE_NONE;
    }


    enum eOffshopChatPacket
    {
        CHAT_PACKET_CANNOT_CREATE_SHOP,
        CHAT_PACKET_CANNOT_CHANGE_NAME,
        CHAT_PACKET_CANNOT_FORCE_CLOSE,
        CHAT_PACKET_CANNOT_OPEN_SHOP,
        CHAT_PACKET_CANNOT_OPEN_SHOP_OWNER,

        CHAT_PACKET_CANNOT_ADD_ITEM,
        CHAT_PACKET_CANNOT_BUY_ITEM, //tofix wrong chat packet
        CHAT_PACKET_CANNOT_REMOVE_ITEM,
        CHAT_PACKET_CANNOT_EDIT_ITEM,
        CHAT_PACKET_CANNOT_REMOVE_LAST_ITEM,

        CHAT_PACKET_CANNOT_FILTER,
        CHAT_PACKET_CANNOT_SEARCH_YET,
        CHAT_PACKET_OFFER_CREATE,

        CHAT_PACKET_CANNOT_CREATE_OFFER,
        CHAT_PACKET_CANNOT_ACCEPT_OFFER,

        CHAT_PACKET_CANNOT_OPEN_SAFEBOX,
        CHAT_PACKET_CANNOT_SAFEBOX_GET_ITEM,
        CHAT_PACKET_CANNOT_SAFEBOX_GET_VALUTES,
        CHAT_PACKET_CANNOT_SAFEBOX_CLOSE,


        CHAT_PACKET_RECV_ITEM_SAFEBOX,

        //AUCTION
        CHAT_PACKET_AUCTION_CANNOT_SEND_LIST,
        CHAT_PACKET_AUCTION_CANNOT_OPEN_AUCTION,
        CHAT_PACKET_AUCTION_CANNOT_CREATE_AUCTION,
        CHAT_PACKET_AUCTION_CANNOT_ADD_OFFER,

        //GENERAL
        CHAT_PACKET_CANNOT_DO_NOW,

    };

    inline void SendChatPacket(LPCHARACTER ch, BYTE type)
    {
#ifdef __ENABLE_MULTILANGUAGE__
#define CASESEND(var) case var: ch->ChatPacket(CHAT_TYPE_INFO, #var); break;
#else
#define CASESEND(var) case var: ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT(#var)); break;
#endif

        switch (type)
        {
            CASESEND(CHAT_PACKET_CANNOT_CREATE_SHOP)
            CASESEND(CHAT_PACKET_CANNOT_CHANGE_NAME)
            CASESEND(CHAT_PACKET_CANNOT_FORCE_CLOSE)
            CASESEND(CHAT_PACKET_CANNOT_OPEN_SHOP)
            CASESEND(CHAT_PACKET_CANNOT_OPEN_SHOP_OWNER)

            CASESEND(CHAT_PACKET_CANNOT_ADD_ITEM)
            CASESEND(CHAT_PACKET_CANNOT_BUY_ITEM) //tofix wrong chat packet
            CASESEND(CHAT_PACKET_CANNOT_REMOVE_ITEM)
            CASESEND(CHAT_PACKET_CANNOT_EDIT_ITEM)
            CASESEND(CHAT_PACKET_CANNOT_REMOVE_LAST_ITEM)

            CASESEND(CHAT_PACKET_CANNOT_FILTER)
            CASESEND(CHAT_PACKET_CANNOT_SEARCH_YET)
            CASESEND(CHAT_PACKET_OFFER_CREATE)

            CASESEND(CHAT_PACKET_CANNOT_CREATE_OFFER)
            CASESEND(CHAT_PACKET_CANNOT_ACCEPT_OFFER)

            CASESEND(CHAT_PACKET_CANNOT_OPEN_SAFEBOX)
            CASESEND(CHAT_PACKET_CANNOT_SAFEBOX_GET_ITEM)
            CASESEND(CHAT_PACKET_CANNOT_SAFEBOX_GET_VALUTES)
            CASESEND(CHAT_PACKET_CANNOT_SAFEBOX_CLOSE)


            CASESEND(CHAT_PACKET_RECV_ITEM_SAFEBOX)

            //AUCTION
            CASESEND(CHAT_PACKET_AUCTION_CANNOT_SEND_LIST)
            CASESEND(CHAT_PACKET_AUCTION_CANNOT_OPEN_AUCTION)
            CASESEND(CHAT_PACKET_AUCTION_CANNOT_CREATE_AUCTION)
            CASESEND(CHAT_PACKET_AUCTION_CANNOT_ADD_OFFER)

            //GENERAL
            CASESEND(CHAT_PACKET_CANNOT_DO_NOW)

        default:
            sys_err("unknown chat packet %d",type);
            break;
        }
    }

#pragma pack(1)
    class CShopItem
    {
   
    public:


        CShopItem(DWORD dwID);
        CShopItem(const CShopItem& rCopy);
        CShopItem(LPITEM pItem, const TPriceInfo& sPrice, BYTE byWindowType, DWORD dwID=0);

        ~CShopItem();

        bool            GetTable(TItemTable** ppTable) const;
        TPriceInfo*        GetPrice() const;
       
        LPITEM            CreateItem() const;
        TItemInfoEx*    GetInfo() const;

        void            SetInfo(LPITEM pItem);
        void            SetInfo(const TItemInfoEx& info);
        void            SetPrice(const TPriceInfo& sPrice);

        void            SetWindow(BYTE byWin);
        BYTE            GetWindow() const;

        DWORD            GetID() const ;
        void            SetOwnerID(DWORD dwOwnerID);
        bool            CanBuy(LPCHARACTER ch);

        void operator = (const CShopItem& rItem);

    protected:
        TItemInfoEx        m_itemInfo;
        TPriceInfo        m_priceInfo;
        BYTE            m_byWindow;
        DWORD            m_dwID;
        DWORD            m_dwOwnerID;

    };
#pragma pack()




    class CShop
    {


    public:
        typedef std::vector<CShopItem>  VECSHOPITEM;
        typedef std::vector<TOfferInfo>    VECSHOPOFFER;
#ifdef __USE_PID_AS_GUESTLIST__
        typedef std::list<DWORD>        LISTGUEST;
#else
        typedef std::list<LPCHARACTER>    LISTGUEST;
#endif



    public:
        CShop();
        CShop(const CShop& rCopy);



        ~CShop();

        //get const
        VECSHOPITEM*        GetItems() const;
        VECSHOPITEM*        GetItemsSold() const;
        VECSHOPOFFER*        GetOffers() const;
        LISTGUEST*            GetGuests() const;
        DWORD                GetItemCount();

        //duration
        void                SetDuration(DWORD dwDuration);
        DWORD                DecreaseDuration();
        DWORD                GetDuration() const;

        //owner pid
        void                SetOwnerPID(DWORD dwOwnerPID);
        DWORD                GetOwnerPID() const;

        //guests
        bool                AddGuest(LPCHARACTER ch);
        bool                RemoveGuest(LPCHARACTER ch);

        //items
        void                SetItems(VECSHOPITEM* pVec);
        bool                AddItem(CShopItem& rItem);
        bool                AddItemSold(CShopItem& rItem);
        bool                RemoveItem(DWORD dwItemID);
        bool                ModifyItem(DWORD dwItemID, CShopItem& rItem);
        bool                BuyItem(DWORD dwItem);
#ifdef    ENABLE_NEW_OFFLINESHOP_RENEWAL
        void                SendNotificationClientPacket(DWORD dwItemID, long long dwItemPrice, WORD dwItemCount);
#endif
        bool                GetItem(DWORD dwItem, CShopItem** ppItem);
        bool                GetItemSold(DWORD dwItem, CShopItem** ppItem);

        bool                AddOffer(const TOfferInfo* pOfferInfo);
        bool                AcceptOffer(const TOfferInfo* pOfferInfo);

        void                NotifyOffers(LPCHARACTER ch);
        void                NotifyAcceptedOffers(LPCHARACTER ch);
        LPCHARACTER            FindOwnerCharacter();
        void                Clear();


        const char*            GetName() const;
        void                SetName(const char* pcszName);


        void                RefreshToOwner();

#ifdef ENABLE_IRA_REWORK
        void                SetPosInfo(TShopPosition& pos);
#endif
    private:
        void                __RefreshItems(LPCHARACTER ch=NULL);
        void                __SendOfferNotify(LPCHARACTER ch, TOfferInfo* pOffer);

    private:
        VECSHOPITEM            m_vecItems;
        VECSHOPITEM            m_vecItemSold;
        VECSHOPOFFER        m_vecOffers;
        LISTGUEST            m_listGuests;

        DWORD                m_dwPID;
        DWORD                m_dwDuration;
        std::string            m_stName;
#ifdef ENABLE_IRA_REWORK
        TShopPosition        m_posInfo;
#endif
    };





    class CShopSafebox
    {
    public:
        typedef std::vector<CShopItem> VECITEM;

    public:
#pragma pack(1)
        struct SValuteAmount {
            long long illYang;
#ifdef ENABLE_CHEQUE_SYSTEM
            int iCheque;

#endif

            SValuteAmount() : illYang(0)
            {
            }

            SValuteAmount(const TValutesInfo& rCopy)
            {
                illYang = rCopy.illYang;
#ifdef ENABLE_CHEQUE_SYSTEM
                iCheque = rCopy.iCheque;
#endif
            }

            SValuteAmount(const TPriceInfo& rCopy)
            {
                illYang = rCopy.illYang;
#ifdef ENABLE_CHEQUE_SYSTEM
                iCheque = rCopy.iCheque;
#endif
            }

            long long GetTotalYangAmount() const {
                long long total = illYang;
#ifdef ENABLE_CHEQUE_SYSTEM
                total += YANG_PER_CHEQUE*iCheque;
#endif
                return total;
            }

            bool operator < (const SValuteAmount& rVal)
            {
                return GetTotalYangAmount() < rVal.GetTotalYangAmount();
            }

            void operator -= (const SValuteAmount& rVal)
            {
                illYang -= rVal.illYang;
#ifdef ENABLE_CHEQUE_SYSTEM
                iCheque -= rVal.iCheque;
#endif
            }

            void operator += (const SValuteAmount& rVal)
            {
                illYang += rVal.illYang;
#ifdef ENABLE_CHEQUE_SYSTEM
                iCheque += rVal.iCheque;
#endif
            }
        };
#pragma pack()


    public:
        CShopSafebox(LPCHARACTER chOwner);
        CShopSafebox();
        CShopSafebox(const CShopSafebox& rCopy);
        ~CShopSafebox();

        void            SetOwner(LPCHARACTER ch);
        void            SetItems(VECITEM* pVec);
        void            SetValuteAmount(SValuteAmount val);

        bool            AddItem(CShopItem* pItem);
        bool            RemoveItem(DWORD dwItemID);

        void            AddValute(SValuteAmount val);
        bool            RemoveValute(SValuteAmount val);

        VECITEM*        GetItems();
        SValuteAmount    GetValutes();

        bool            GetItem(DWORD dwItemID, CShopItem** ppItem);
        LPCHARACTER        GetOwner();


        bool            RefreshToOwner(LPCHARACTER ch= nullptr);



    private:
        VECITEM            m_vecItems;
        LPCHARACTER        m_pkOwner;
        SValuteAmount    m_valutes;

    };





    class CAuction
    {
    public:
        typedef std::vector<TAuctionOfferInfo> AUCTION_OFFERVEC;
#ifdef __USE_PID_AS_GUESTLIST__
        typedef std::list<DWORD>        GUESTLIST;
#else
        typedef std::list<LPCHARACTER>    GUESTLIST;
#endif

    public:
        CAuction();
        ~CAuction();


        void SetInfo(const TAuctionInfo& auction);
        void SetOffers(const std::vector<TAuctionOfferInfo>& vec);

        bool AddOffer(const TAuctionOfferInfo& offer);
        bool AddGuest(LPCHARACTER ch);
        bool RemoveGuest(LPCHARACTER ch);
        void DecreaseDuration();
       
       
        CShop::LISTGUEST&            GetGuests();
        const DWORD                    GetBestBuyer() const;
        const TAuctionInfo&            GetInfo() const;
        const AUCTION_OFFERVEC&        GetOffers() const;
        const TPriceInfo&            GetBestOffer() const;

    private:
        void __RefreshToGuests();
        bool __SetBestOffer();

    private:
        TAuctionInfo        m_info;
        AUCTION_OFFERVEC    m_offersVec;
        TPriceInfo            m_bestOffer;
        DWORD                m_dwBestBuyer;
        GUESTLIST            m_guestsList;

    };



#ifdef ENABLE_NEW_SHOP_IN_CITIES
    class ShopEntity : public CEntity
    {
    public:
        ShopEntity();

        //overriding virtual CEntity methods
        void    EncodeInsertPacket(LPENTITY entity);
        void    EncodeRemovePacket(LPENTITY entity);

       
        const char*            GetShopName() const;
        void                SetShopName(const char* name);

        int                    GetShopType();
        void                SetShopType(int iType);
        void                SetShop(offlineshop::CShop* pOfflineShop);

        offlineshop::CShop* GetShop() {return m_pkShop;}

        static DWORD        AllocID(){
            static DWORD dwID=1;
            return dwID++;
        }

        DWORD                GetVID() {return m_dwVID;}
        void                Destroy() { CEntity::Destroy(); }
    private:
        char                    m_szName[OFFLINE_SHOP_NAME_MAX_LEN];
        int                        m_iType;
        DWORD                    m_dwVID;
        offlineshop::CShop*        m_pkShop;
    };

#endif







}

#endif //__ENABLE_NEW_OFFLINESHOP__

#endif //__include

new_offlineshop_manager.h:
Genişlet Daralt Kopyala
#ifndef __INCLUDE_HEADER_OFFLINESHOP_MANAGER__
#define __INCLUDE_HEADER_OFFLINESHOP_MANAGER__

#ifdef __ENABLE_NEW_OFFLINESHOP__
#define SUBTYPE_NOSET 255
#define OFFLINESHOP_DURATION_UPDATE_TIME PASSES_PER_SEC(60)
#define OFFLINESHOP_AUCTION_RAISE_PERCENTAGE 10 //to raise the offer will be 10% more than best offer

namespace offlineshop
{
   

    class CShopManager : public singleton<CShopManager>
    {
    public:

#ifdef ENABLE_NEW_SHOP_IN_CITIES
        typedef std::map<DWORD, ShopEntity*> SHOPENTITIES_MAP;

        typedef struct SCityShopInfo {
            SHOPENTITIES_MAP    entitiesByPID;
            SHOPENTITIES_MAP    entitiesByVID;


            void Clear()
            {
                entitiesByPID.clear();
                entitiesByVID.clear();
            }


            SCityShopInfo()
            {
                Clear();
            }


            SCityShopInfo(const SCityShopInfo& rCopy)
            {
                CopyContainer(entitiesByPID, rCopy.entitiesByPID);
                CopyContainer(entitiesByVID, rCopy.entitiesByVID);
            }

        } TCityShopInfo;
#endif

        typedef std::map<DWORD,CShop>                     SHOPMAP;
        typedef std::map<DWORD,CShopSafebox>             SAFEBOXMAP;
        typedef std::map<DWORD,std::vector<TOfferInfo> > OFFERSMAP;
        typedef std::map<DWORD, DWORD>                     SEARCHTIMEMAP;
        typedef std::map<DWORD, CAuction>                 AUCTIONMAP;

#ifdef ENABLE_NEW_SHOP_IN_CITIES
        typedef std::vector<TCityShopInfo>                 CITIESVEC;
#endif
       


        CShopManager();
        ~CShopManager();
       



        //booting
#ifdef ENABLE_IRA_REWORK
        offlineshop::CShop*        PutsNewShop(TShopInfo * pInfo, TShopPosition * pPosInfo);
#else
        offlineshop::CShop*        PutsNewShop(TShopInfo * pInfo);
#endif
        void                    PutsAuction(const TAuctionInfo& auction);
        void                    PutsAuctionOffer(const TAuctionOfferInfo& offer);

        offlineshop::CShop*        GetShopByOwnerID(DWORD dwPID);
        CShopSafebox*            GetShopSafeboxByOwnerID(DWORD dwPID);
        CAuction*                GetAuctionByOwnerID(DWORD dwPID);
        //offers
        bool                    PutsNewOffer(const TOfferInfo* pInfo);

        void                    RemoveSafeboxFromCache(DWORD dwOwnerID);
        void                    RemoveGuestFromShops(LPCHARACTER ch);



#ifdef ENABLE_NEW_SHOP_IN_CITIES
    public:
#ifdef ENABLE_IRA_REWORK
        void        CreateNewShopEntities(offlineshop::CShop& rShop, TShopPosition& pos);
#else
        void        CreateNewShopEntities(offlineshop::CShop& rShop);
#endif
        void        DestroyNewShopEntities(const offlineshop::CShop& rShop);

        void        EncodeInsertShopEntity(ShopEntity& shop, LPCHARACTER ch);
        void        EncodeRemoveShopEntity(ShopEntity& shop, LPCHARACTER ch);

    private:
#ifndef ENABLE_IRA_REWORK
        bool        __CanUseCity(size_t index);
        bool        __CheckEntitySpawnPos(const long x, const long y, const TCityShopInfo& city);
#endif
        void        __UpdateEntity(const offlineshop::CShop& rShop);
#endif


    public:
//packets exchanging db
//ITEMS
/*db*/    void        SendShopBuyDBPacket(DWORD dwBuyerID, DWORD dwOwnerID,DWORD dwItemID);
/*db*/    void        SendShopLockBuyItemDBPacket(DWORD dwBuyerID, DWORD dwOwnerID,DWORD dwItemID);

/*db*/    bool        RecvShopLockedBuyItemDBPacket(DWORD dwBuyerID, DWORD dwOwnerID,DWORD dwItemID);
/*db*/    bool        RecvShopBuyDBPacket(DWORD dwBuyerID, DWORD dwOwnerID,DWORD dwItemID);
/*db*/    void        SendShopCannotBuyLockedItemDBPacket(DWORD dwOwnerID, DWORD dwItemID); //topatch

/*db*/    void        SendShopEditItemDBPacket(DWORD dwOwnerID, DWORD dwItemID, const TPriceInfo& rPrice);
/*db*/    bool        RecvShopEditItemDBPacket(DWORD dwOwnerID, DWORD dwItemID, const TPriceInfo& rPrice);
           

/*db*/    void        SendShopRemoveItemDBPacket(DWORD dwOwnerID, DWORD dwItemID);
/*db*/    bool        RecvShopRemoveItemDBPacket(DWORD dwOwnerID, DWORD dwItemID);
       

/*db*/    void        SendShopAddItemDBPacket(DWORD dwOwnerID, const TItemInfo& rItemInfo);
/*db*/    bool        RecvShopAddItemDBPacket(DWORD dwOwnerID, const TItemInfo& rItemInfo);
       
//SHOPS
/*db*/    void        SendShopForceCloseDBPacket(DWORD dwPID);
/*db*/    bool        RecvShopForceCloseDBPacket(DWORD dwPID);
/*db*/    bool        RecvShopExpiredDBPacket(DWORD dwPID);
       
#ifdef ENABLE_IRA_REWORK
/*db*/    void        SendShopCreateNewDBPacket(const TShopInfo& , const TShopPosition& pos, std::vector<TItemInfo>& vec);
/*db*/    bool        RecvShopCreateNewDBPacket(const TShopInfo& , TShopPosition& pos, std::vector<TItemInfo>& vec);
#else
/*db*/    void        SendShopCreateNewDBPacket(const TShopInfo& , std::vector<TItemInfo>& vec);
/*db*/    bool        RecvShopCreateNewDBPacket(const TShopInfo& , std::vector<TItemInfo>& vec);
#endif

/*db*/    void        SendShopChangeNameDBPacket(DWORD dwOwnerID, const char* szName);
/*db*/    bool        RecvShopChangeNameDBPacket(DWORD dwOwnerID, const char* szName);

#ifdef ENABLE_NEW_OFFLINESHOP_RENEWAL
    bool RecvShopExtendTimeClientPacket(LPCHARACTER ch, DWORD dwTime);
    void SendShopExtendTimeDBPacket(DWORD dwOwnerID, DWORD dwTime);
    bool RecvShopExtendTimeDBPacket(DWORD dwOwnerID, DWORD dwTime);
#endif


//OFFER
/*db*/    void        SendShopOfferNewDBPacket(const TOfferInfo& offer);
/*db*/    bool        RecvShopOfferNewDBPacket(const TOfferInfo& offer);
       
/*db*/    void        SendShopOfferNotifiedDBPacket(DWORD dwOfferID, DWORD dwOwnerID);
/*db*/    bool        RecvShopOfferNotifiedDBPacket(DWORD dwOfferID, DWORD dwOwnerID);

/*db*/    void        SendShopOfferAcceptDBPacket(const TOfferInfo& offer);
/*db*/    bool        RecvShopOfferAcceptDBPacket(DWORD dwOfferID, DWORD dwOwnerID);

/*db*/    void        SendShopOfferCancelDBPacket(const TOfferInfo& offer);
/*db*/    bool        RecvShopOfferCancelDBPacket(DWORD dwOfferID, DWORD dwOwnerID, bool isRemovingItem);//offlineshop-updated 05/08/19

       
/*db*/    void        SendShopSafeboxGetItemDBPacket(DWORD dwOwnerID, DWORD dwItemID);
/*db*/    void        SendShopSafeboxGetValutesDBPacket(DWORD dwOwnerID, const TValutesInfo& valutes);
/*db*/  bool        SendShopSafeboxAddItemDBPacket(DWORD dwOwnerID, const CShopItem& item);
/*db*/    bool        RecvShopSafeboxAddItemDBPacket(DWORD dwOwnerID, DWORD dwItemID, const TItemInfoEx& item);
/*db*/    bool        RecvShopSafeboxAddValutesDBPacket(DWORD dwOwnerID, const TValutesInfo& valute);
/*db*/    bool        RecvShopSafeboxLoadDBPacket(DWORD dwOwnerID, const TValutesInfo& valute, const std::vector<DWORD>& ids, const std::vector<TItemInfoEx>& items);
//patch 08-03-2020
/*db*/  bool        RecvShopSafeboxExpiredItemDBPacket(DWORD dwOwnerID, DWORD dwItemID);


//AUCTION
/*db*/    void        SendAuctionCreateDBPacket(const TAuctionInfo& auction);
/*db*/    void        SendAuctionAddOfferDBPacket(const TAuctionOfferInfo& offer);

/*db*/    bool        RecvAuctionCreateDBPacket(const TAuctionInfo& auction);
/*db*/    bool        RecvAuctionAddOfferDBPacket(const TAuctionOfferInfo& offer);
/*db*/    bool        RecvAuctionExpiredDBPacket(DWORD dwID);


//packets echanging clients
//SHOPS
/*cli.*/bool        RecvShopCreateNewClientPacket(LPCHARACTER ch, TShopInfo& rShopInfo, std::vector<TShopItemInfo> & vec);
/*cli.*/bool        RecvShopChangeNameClientPacket(LPCHARACTER ch, const char* szName);
/*cli.*/bool        RecvShopForceCloseClientPacket(LPCHARACTER ch);
/*cli.*/bool        RecvShopRequestListClientPacket(LPCHARACTER ch);
/*cli.*/bool        RecvShopOpenClientPacket(LPCHARACTER ch, DWORD dwOwnerID);
/*cli.*/bool        RecvShopOpenMyShopClientPacket(LPCHARACTER ch);
/*cli.*/bool        RecvShopBuyItemClientPacket(LPCHARACTER ch, DWORD dwOwnerID, DWORD dwItemID, bool isSearch);
#ifdef ENABLE_NEW_SHOP_IN_CITIES
/*cli.*/bool        RecvShopClickEntity(LPCHARACTER ch, DWORD dwShopEntityVID);
#endif

/*cli.*/void        SendShopListClientPacket(LPCHARACTER ch);
/*cli.*/void        SendShopOpenClientPacket(LPCHARACTER ch, CShop* pkShop);
/*cli.*/void        SendShopOpenMyShopClientPacket(LPCHARACTER ch);
/*cli.*/void        SendShopOpenMyShopNoShopClientPacket(LPCHARACTER ch);
/*cli.*/void        SendShopBuyItemFromSearchClientPacket(LPCHARACTER ch, DWORD dwOwnerID, DWORD dwItemID);
       
/*cli.*/void        SendShopForceClosedClientPacket(DWORD dwOwnerID);


        //ITEMS
/*cli.*/bool        RecvShopAddItemClientPacket(LPCHARACTER ch, const TItemPos& item, const TPriceInfo& price);
/*cli.*/bool        RecvShopRemoveItemClientPacket(LPCHARACTER ch, DWORD dwItemID);
/*cli.*/bool        RecvShopEditItemClientPacket(LPCHARACTER ch, DWORD dwItemID, const TPriceInfo& price);

        //FILTER
/*cli.*/bool        RecvShopFilterRequestClientPacket(LPCHARACTER ch, const TFilterInfo& filter);
/*cli.*/void        SendShopFilterResultClientPacket(LPCHARACTER ch, const std::vector<TItemInfo>& items);


        //OFFERS
/*cli.*/bool        RecvShopCreateOfferClientPacket(LPCHARACTER ch, TOfferInfo& offer);
/*cli.*/bool        RecvShopEditOfferClientPacket(LPCHARACTER ch, const TOfferInfo& offer);/*unused*/
/*cli.*/bool        RecvShopAcceptOfferClientPacket(LPCHARACTER ch, DWORD dwOfferID);
/*cli.*/bool        RecvShopCancelOfferClientPacket(LPCHARACTER ch, DWORD dwOfferID, DWORD dwOwnerID);
/*cli.*/bool        RecvOfferListRequestPacket(LPCHARACTER ch);

       
        //SAFEBOX
/*cli.*/bool        RecvShopSafeboxOpenClientPacket(LPCHARACTER ch);
/*cli.*/bool        RecvShopSafeboxGetItemClientPacket(LPCHARACTER ch, DWORD dwItemID);
/*cli.*/bool        RecvShopSafeboxGetValutesClientPacket(LPCHARACTER ch, const TValutesInfo& valutes);
/*cli.*/bool        RecvShopSafeboxCloseClientPacket(LPCHARACTER ch);
       

        //AUCTION
/*cli.*/bool        RecvAuctionListRequestClientPacket(LPCHARACTER ch);
/*cli.*/bool        RecvAuctionOpenRequestClientPacket(LPCHARACTER ch, DWORD dwOwnerID);
/*cli.*/bool        RecvMyAuctionOpenRequestClientPacket(LPCHARACTER ch);
/*cli.*/bool        RecvAuctionCreateClientPacket(LPCHARACTER ch, DWORD dwDuration, const TPriceInfo& init_price, const TItemPos& pos);
/*cli.*/bool        RecvAuctionAddOfferClientPacket(LPCHARACTER ch, DWORD dwOwnerID, const TPriceInfo& price);
/*cli.*/bool        RecvAuctionExitFromAuction(LPCHARACTER ch, DWORD dwOwnerID);

/*cli.*/void        SendAuctionListClientPacket(LPCHARACTER ch, const std::vector<TAuctionListElement>& auctionVec);
/*cli.*/void        SendAuctionOpenAuctionClientPacket(LPCHARACTER ch, const TAuctionInfo& auction, const std::vector<TAuctionOfferInfo>& vec);
/*cli.*/void        SendAuctionOpenMyAuctionNoAuctionClientPacket(LPCHARACTER ch);


/*cli.*/void        SendShopSafeboxRefresh(LPCHARACTER ch, const TValutesInfo& valute, const std::vector<CShopItem>& vec);
       
/*cli.*/void        RecvCloseBoardClientPacket(LPCHARACTER ch);

        //other
        void        UpdateShopsDuration();
        void        UpdateAuctionsDuration();

        //search time map (checking to avoid search abouse)
        void        ClearSearchTimeMap();
        bool        CheckSearchTime(DWORD dwPID);
       
        // fix flooding offers
        bool        CheckOfferCooldown(DWORD dwPID);

       
           
        void        Destroy();
#ifdef ENABLE_IRA_REWORK
        int            GetMapIndexAllowsList(int iMapIndex);
#endif

    private:
        SHOPMAP            m_mapShops;
        SAFEBOXMAP        m_mapSafeboxs;
        OFFERSMAP        m_mapOffer;

        LPEVENT            m_eventShopDuration;
        SEARCHTIMEMAP    m_searchTimeMap;
        AUCTIONMAP        m_mapAuctions;
       
        // fix flooding offers
        SEARCHTIMEMAP    m_offerCooldownMap;

#ifdef ENABLE_NEW_SHOP_IN_CITIES
        CITIESVEC        m_vecCities;
#endif
#ifdef ENABLE_IRA_REWORK
        std::set<int> s_set_offlineshop_map_allows;
#endif
    };




    offlineshop::CShopManager& GetManager();
}

#endif//__ENABLE_NEW_OFFLINESHOP__
#endif //__INCLUDE_HEADER_OFFLINESHOP_MANAGER__
burada da create shop ile ilgili bir yer göremedim. ikarus çok kullanmadım zaten. bilen arkadaşlar devralır artık.
 
Üst