Sosyal açıldı! Bir göz at → Hemen gir →

ÇÖZÜLDÜ Merchant itemlerin dışardan fiyatları hk.

1910

KY Kıdemli Üye
KAYIT
11 Şub 2024
Mesajlar
402
Çözümler
2
Tepki puanı
80
Kullanılan Source
2383
Arkadaşlar pazara koyulan itemler, pazarı açmadan Purchasing Price 0 olarak görünüyor. Nasıl düzeltebilirim.

1753055108530.png
 

1910

KY Kıdemli Üye
KAYIT
11 Şub 2024
Mesajlar
402
Çözümler
2
Tepki puanı
80
merchantmanager.cpp bu şekilde hocam

Kod:
#include "stdafx.h"
#include "MerchantManager.h"


CMerchantManager::CMerchantManager()
{
    ResetMerchant();
}


CMerchantManager::~CMerchantManager()
{
}


bool CMerchantManager::NeedToCheckTooltip()
{
    return (status == MERCHANT_OPEN || status == MERCHANT_ITEM_LIST)
        && Engine->IsVisible(Engine->uiTradeInventory->m_dVTableAddr);
}


bool CMerchantManager::NeedToCheckDisplayTooltip()
{
    if (status != MERCHANT_CREATED && status != MERCHANT_SPECIAL_CREATED)
        return false;


    return Engine->IsVisible(Engine->uiTradeItemDisplay->m_dVTableAddr)
        || Engine->IsVisible(Engine->uiTradeItemDisplaySpecial->m_dVTableAddr);
}


bool CMerchantManager::UpdateTooltipString(std::string & str)
{
    POINT cp = Engine->m_UiMgr->localInput->MouseGetPos();


    for (MerchantSlotListItor itor = m_MerchantSlots.begin(); m_MerchantSlots.end() != itor; ++itor)
    {
        CMerchantSlot * slot = (*itor);
        DWORD slotVTable = 0;


        if (status == MERCHANT_OPEN || status == MERCHANT_ITEM_LIST)
            slotVTable = Engine->uiTradeInventory->GetSlotVTable(slot->m_iPos);
        else if (status == MERCHANT_CREATED)
            slotVTable = Engine->uiTradeItemDisplay->GetSlotVTable(slot->m_iPos);
        else if (status == MERCHANT_SPECIAL_CREATED)
            slotVTable = Engine->uiTradeItemDisplaySpecial->GetSlotVTable(slot->m_iPos);


        if (slotVTable != 0)
        {
            bool isIn = false;
            POINT pt = Engine->GetUiPos(slotVTable);


            RECT rp;
            rp.left = pt.x;
            rp.right = pt.x + (status == MERCHANT_CREATED ? 32 : 45);
            rp.top = pt.y;
            rp.bottom = pt.y + (status == MERCHANT_CREATED ? 32 : 45);


            isIn = cp.x >= rp.left && cp.x <= rp.right && cp.y >= rp.top && cp.y <= rp.bottom;


            if (isIn)
            {
                std::string strPrice = Engine->StringHelper->NumberFormat(slot->m_iPrice, ',');
                if (slot->m_bIsKC)
                {
                    str = string_format("  Purchasing Price : %s Knight Cash", strPrice.c_str());
                    return true;
                }


                str = string_format("  Purchasing Price : %s Coin", strPrice.c_str());
                return false;
            }
        }
    }


    return false;
}


void CMerchantManager::SetRecentItemAddReq(Packet& pkt)
{
    uint32 price, itemID;
    uint16 count;
    uint8 OpCode, subCode, srcPos, dstPos, mode, isKC;


    pkt >> OpCode >> subCode >> itemID >> count >> price >> srcPos >> dstPos >> mode >> isKC;


    m_RecentReq = new CMerchantSlot(dstPos, price, isKC ? 1 == true : false, count);




    
}


bool CMerchantManager::UpdateSlot(CMerchantSlot* item)
{
    for (MerchantSlotListItor itor = m_MerchantSlots.begin(); m_MerchantSlots.end() != itor; ++itor)
    {
        CMerchantSlot * slot = (*itor);
        if (slot->m_iPos == m_RecentReq->m_iPos)
        {
            *itor = item;
            return true;
        }
    }
    return false;
}


void CMerchantManager::UpdateRecentItemAddReq(Packet& pkt)
{
    uint32 price, itemID;
    uint16 count, result;
    int16 durat;
    uint8 srcPos, dstPos;


    if(status != MERCHANT_CREATED) status = MERCHANT_OPEN;


    pkt >> result >> itemID >> count >> durat >> price >> srcPos >> dstPos;


    if (result == 1 && m_RecentReq != NULL)
    {
        if (m_RecentReq->m_iPos == dstPos && m_RecentReq->m_iPrice == price)
        {
            bool isEmpty = true;
            for (MerchantSlotListItor itor = m_MerchantSlots.begin(); m_MerchantSlots.end() != itor; ++itor)
            {
                CMerchantSlot * slot = (*itor);
                if (slot->m_iPos == m_RecentReq->m_iPos)
                {
                    isEmpty = false;
                    break;
                }
            }


            CMerchantSlot * newSlot = new CMerchantSlot(m_RecentReq->m_iPos, m_RecentReq->m_iPrice, m_RecentReq->m_bIsKC, m_RecentReq->m_iCount);


            if (isEmpty)
                m_MerchantSlots.push_back(newSlot);
            else
                UpdateSlot(newSlot);


            m_RecentReq = NULL;


            Engine->uiTradeInventory->UpdateTotal(price * count, false, true);
        }
    }
    else if (result == 0)
        m_RecentReq = NULL;
}


void CMerchantManager::RemoveItemFromSlot(Packet& pkt)
{
    uint16 res;
    pkt >> res;


    if (res < 1 && m_RecentReq != NULL) // son eklenen item onaylanmadıysa
    {
        m_RecentReq = NULL;
        return;
    }


    uint8 pos;
    pkt >> pos;


    for (MerchantSlotListItor itor = m_MerchantSlots.begin(); m_MerchantSlots.end() != itor; ++itor)
    {
        CMerchantSlot * slot = (*itor);
        if (slot->m_iPos == pos)
        {
            Engine->uiTradeInventory->UpdateTotal(slot->m_iPrice * slot->m_iCount * -1, false, true);
            itor = m_MerchantSlots.erase(itor);
            break;
        }
    }
}


void CMerchantManager::MerchantCreated(Packet& pkt)
{
    uint16 result;
    pkt >> result;


    if (result == 1) // pazar oluştu
    {
        std::string advertMessage;
        uint16 socketID;
        uint8 m_bPremiumMerchant;


        pkt.DByte();
        pkt >> advertMessage >> socketID >> m_bPremiumMerchant;
        if (socketID == Engine->m_PlayerBase->m_iSocketID) // pazarı kuran bensem
        {
            if (m_bPremiumMerchant == 1)
                status = MERCHANT_SPECIAL_CREATED; // special merchant
            else
                status = MERCHANT_CREATED; // normal merchant
        }
    }
}


void CMerchantManager::UpdateItemDisplaySlots(Packet& pkt)
{
    uint8 isSpecial, itemCount;
    pkt >> isSpecial >> itemCount;


    m_MerchantSlots.clear();
    for (int i = 0; i < itemCount; i++)
    {
        uint8 pos, isKC;
        uint32 price;


        pkt >> pos >> price >> isKC;


        CMerchantSlot * newSlot = new CMerchantSlot(pos, price, true);
        m_MerchantSlots.push_back(newSlot);
    }
}


void CMerchantManager::SetTheirMerchantSlots(Packet & pkt)
{
    m_MerchantSlots.clear();
    Engine->m_MerchantMgr->status = MERCHANT_ITEM_LIST;


    Engine->uiTradeInventory->UpdateTotal(Engine->Player.KnightCash);


    uint16 result, uid;
    pkt >> result >> uid;


    uint32 items[12];
    uint32 prices[12];


    for (int i = 0; i < 12; i++)
    {
        uint16 count, durat;
        uint32 itemID, price, ring;


        pkt >> itemID >> count >> durat >> price >> ring;
        items[i] = itemID;
        prices[i] = price;


        if (ring != 0)
        {
            string charName;
            uint8 charClass, charLevel, unk1, charExp, charRace, unk2;


            pkt.DByte();
            pkt >> charName >> charClass >> charLevel >> unk1 >> charExp >> charRace >> unk2;
        }
    }


    for (int i = 0; i < 12; i++)
    {
        uint8 isKC;
        pkt >> isKC;


        if (items[i] > 0) // slot boş değilse
        {
            CMerchantSlot * newSlot = new CMerchantSlot(i, prices[i], isKC == 1 ? true : false);
            m_MerchantSlots.push_back(newSlot);
        }
    }
}


void CMerchantManager::ResetMerchant()
{
    m_RecentReq = NULL;
    m_MerchantSlots.clear();
    status = MERCHANT_CLOSE;
}


bool CMerchantManager::IsMerchanting()
{
    return status == MERCHANT_CREATED;
}
 

solomonkane

KY Saygın Üye
Coder
Yardımsever
KAYIT
21 Şub 2024
Mesajlar
488
Çözümler
3
Tepki puanı
342
Konum
Palmiye Adaları
merchantmanager.cpp bu şekilde hocam

Kod:
#include "stdafx.h"
#include "MerchantManager.h"


CMerchantManager::CMerchantManager()
{
    ResetMerchant();
}


CMerchantManager::~CMerchantManager()
{
}


bool CMerchantManager::NeedToCheckTooltip()
{
    return (status == MERCHANT_OPEN || status == MERCHANT_ITEM_LIST)
        && Engine->IsVisible(Engine->uiTradeInventory->m_dVTableAddr);
}


bool CMerchantManager::NeedToCheckDisplayTooltip()
{
    if (status != MERCHANT_CREATED && status != MERCHANT_SPECIAL_CREATED)
        return false;


    return Engine->IsVisible(Engine->uiTradeItemDisplay->m_dVTableAddr)
        || Engine->IsVisible(Engine->uiTradeItemDisplaySpecial->m_dVTableAddr);
}


bool CMerchantManager::UpdateTooltipString(std::string & str)
{
    POINT cp = Engine->m_UiMgr->localInput->MouseGetPos();


    for (MerchantSlotListItor itor = m_MerchantSlots.begin(); m_MerchantSlots.end() != itor; ++itor)
    {
        CMerchantSlot * slot = (*itor);
        DWORD slotVTable = 0;


        if (status == MERCHANT_OPEN || status == MERCHANT_ITEM_LIST)
            slotVTable = Engine->uiTradeInventory->GetSlotVTable(slot->m_iPos);
        else if (status == MERCHANT_CREATED)
            slotVTable = Engine->uiTradeItemDisplay->GetSlotVTable(slot->m_iPos);
        else if (status == MERCHANT_SPECIAL_CREATED)
            slotVTable = Engine->uiTradeItemDisplaySpecial->GetSlotVTable(slot->m_iPos);


        if (slotVTable != 0)
        {
            bool isIn = false;
            POINT pt = Engine->GetUiPos(slotVTable);


            RECT rp;
            rp.left = pt.x;
            rp.right = pt.x + (status == MERCHANT_CREATED ? 32 : 45);
            rp.top = pt.y;
            rp.bottom = pt.y + (status == MERCHANT_CREATED ? 32 : 45);


            isIn = cp.x >= rp.left && cp.x <= rp.right && cp.y >= rp.top && cp.y <= rp.bottom;


            if (isIn)
            {
                std::string strPrice = Engine->StringHelper->NumberFormat(slot->m_iPrice, ',');
                if (slot->m_bIsKC)
                {
                    str = string_format("  Purchasing Price : %s Knight Cash", strPrice.c_str());
                    return true;
                }


                str = string_format("  Purchasing Price : %s Coin", strPrice.c_str());
                return false;
            }
        }
    }


    return false;
}


void CMerchantManager::SetRecentItemAddReq(Packet& pkt)
{
    uint32 price, itemID;
    uint16 count;
    uint8 OpCode, subCode, srcPos, dstPos, mode, isKC;


    pkt >> OpCode >> subCode >> itemID >> count >> price >> srcPos >> dstPos >> mode >> isKC;


    m_RecentReq = new CMerchantSlot(dstPos, price, isKC ? 1 == true : false, count);




   
}


bool CMerchantManager::UpdateSlot(CMerchantSlot* item)
{
    for (MerchantSlotListItor itor = m_MerchantSlots.begin(); m_MerchantSlots.end() != itor; ++itor)
    {
        CMerchantSlot * slot = (*itor);
        if (slot->m_iPos == m_RecentReq->m_iPos)
        {
            *itor = item;
            return true;
        }
    }
    return false;
}


void CMerchantManager::UpdateRecentItemAddReq(Packet& pkt)
{
    uint32 price, itemID;
    uint16 count, result;
    int16 durat;
    uint8 srcPos, dstPos;


    if(status != MERCHANT_CREATED) status = MERCHANT_OPEN;


    pkt >> result >> itemID >> count >> durat >> price >> srcPos >> dstPos;


    if (result == 1 && m_RecentReq != NULL)
    {
        if (m_RecentReq->m_iPos == dstPos && m_RecentReq->m_iPrice == price)
        {
            bool isEmpty = true;
            for (MerchantSlotListItor itor = m_MerchantSlots.begin(); m_MerchantSlots.end() != itor; ++itor)
            {
                CMerchantSlot * slot = (*itor);
                if (slot->m_iPos == m_RecentReq->m_iPos)
                {
                    isEmpty = false;
                    break;
                }
            }


            CMerchantSlot * newSlot = new CMerchantSlot(m_RecentReq->m_iPos, m_RecentReq->m_iPrice, m_RecentReq->m_bIsKC, m_RecentReq->m_iCount);


            if (isEmpty)
                m_MerchantSlots.push_back(newSlot);
            else
                UpdateSlot(newSlot);


            m_RecentReq = NULL;


            Engine->uiTradeInventory->UpdateTotal(price * count, false, true);
        }
    }
    else if (result == 0)
        m_RecentReq = NULL;
}


void CMerchantManager::RemoveItemFromSlot(Packet& pkt)
{
    uint16 res;
    pkt >> res;


    if (res < 1 && m_RecentReq != NULL) // son eklenen item onaylanmadıysa
    {
        m_RecentReq = NULL;
        return;
    }


    uint8 pos;
    pkt >> pos;


    for (MerchantSlotListItor itor = m_MerchantSlots.begin(); m_MerchantSlots.end() != itor; ++itor)
    {
        CMerchantSlot * slot = (*itor);
        if (slot->m_iPos == pos)
        {
            Engine->uiTradeInventory->UpdateTotal(slot->m_iPrice * slot->m_iCount * -1, false, true);
            itor = m_MerchantSlots.erase(itor);
            break;
        }
    }
}


void CMerchantManager::MerchantCreated(Packet& pkt)
{
    uint16 result;
    pkt >> result;


    if (result == 1) // pazar oluştu
    {
        std::string advertMessage;
        uint16 socketID;
        uint8 m_bPremiumMerchant;


        pkt.DByte();
        pkt >> advertMessage >> socketID >> m_bPremiumMerchant;
        if (socketID == Engine->m_PlayerBase->m_iSocketID) // pazarı kuran bensem
        {
            if (m_bPremiumMerchant == 1)
                status = MERCHANT_SPECIAL_CREATED; // special merchant
            else
                status = MERCHANT_CREATED; // normal merchant
        }
    }
}


void CMerchantManager::UpdateItemDisplaySlots(Packet& pkt)
{
    uint8 isSpecial, itemCount;
    pkt >> isSpecial >> itemCount;


    m_MerchantSlots.clear();
    for (int i = 0; i < itemCount; i++)
    {
        uint8 pos, isKC;
        uint32 price;


        pkt >> pos >> price >> isKC;


        CMerchantSlot * newSlot = new CMerchantSlot(pos, price, true);
        m_MerchantSlots.push_back(newSlot);
    }
}


void CMerchantManager::SetTheirMerchantSlots(Packet & pkt)
{
    m_MerchantSlots.clear();
    Engine->m_MerchantMgr->status = MERCHANT_ITEM_LIST;


    Engine->uiTradeInventory->UpdateTotal(Engine->Player.KnightCash);


    uint16 result, uid;
    pkt >> result >> uid;


    uint32 items[12];
    uint32 prices[12];


    for (int i = 0; i < 12; i++)
    {
        uint16 count, durat;
        uint32 itemID, price, ring;


        pkt >> itemID >> count >> durat >> price >> ring;
        items[i] = itemID;
        prices[i] = price;


        if (ring != 0)
        {
            string charName;
            uint8 charClass, charLevel, unk1, charExp, charRace, unk2;


            pkt.DByte();
            pkt >> charName >> charClass >> charLevel >> unk1 >> charExp >> charRace >> unk2;
        }
    }


    for (int i = 0; i < 12; i++)
    {
        uint8 isKC;
        pkt >> isKC;


        if (items[i] > 0) // slot boş değilse
        {
            CMerchantSlot * newSlot = new CMerchantSlot(i, prices[i], isKC == 1 ? true : false);
            m_MerchantSlots.push_back(newSlot);
        }
    }
}


void CMerchantManager::ResetMerchant()
{
    m_RecentReq = NULL;
    m_MerchantSlots.clear();
    status = MERCHANT_CLOSE;
}


bool CMerchantManager::IsMerchanting()
{
    return status == MERCHANT_CREATED;
}
hMerchantList.cpp atarmısın
 

1910

KY Kıdemli Üye
KAYIT
11 Şub 2024
Mesajlar
402
Çözümler
2
Tepki puanı
80
hMerchantList.cpp atarmısın
#include "stdafx.h"
#include "hMerchantList.h"
uint8 CurPageCount = 1;
CUIMerchantListPlug::CUIMerchantListPlug()
{
vector<int>offsets;
offsets.push_back(0x468); // co_movie_result satır : 224
offsets.push_back(0);

m_dVTableAddr = Engine->rdword(KO_DLG, offsets);
m_btngiftpus = 0;//14.11.2020 User Sag Tik Pus
m_btnViewInfo = 0;

ParseUIElements();
InitReceiveMessage();
}

CUIMerchantListPlug::~CUIMerchantListPlug()
{
}

void CUIMerchantListPlug::parseUIElements()
{

btn_close = Engine->GetChildByID(m_dVTableAddr, xorstr("btn_close"));
btn_search = Engine->GetChildByID(m_dVTableAddr, xorstr("btn_search"));
btn_sort_price = Engine->GetChildByID(m_dVTableAddr, xorstr("btn_sort_price"));
edit_itemname = Engine->GetChildByID(m_dVTableAddr, xorstr("edit_itemname"));
txt_itemname = Engine->GetChildByID(m_dVTableAddr, xorstr("txt_itemname"));
btn_previous = Engine->GetChildByID(m_dVTableAddr, xorstr("btn_previous"));
btn_next = Engine->GetChildByID(m_dVTableAddr, xorstr("btn_next"));
txt_page = Engine->GetChildByID(m_dVTableAddr, xorstr("txt_page"));

for (int i = 0; i < 14; i++)
{
mData.row = Engine->GetChildByID(m_dVTableAddr, string_format(xorstr("row_%d"), i + 1));
mData.txt_seller = Engine->GetChildByID(mData.row, xorstr("txt_seller"));
mData.txt_item = Engine->GetChildByID(mData.row, xorstr("txt_item"));
mData.txt_grade = Engine->GetChildByID(mData.row, xorstr("txt_grade"));
mData.txt_type = Engine->GetChildByID(mData.row, xorstr("txt_type"));
mData.txt_count = Engine->GetChildByID(mData.row, xorstr("txt_count"));
mData.txt_price = Engine->GetChildByID(mData.row, xorstr("txt_price"));
mData.btn_go = Engine->GetChildByID(mData.row, xorstr("btn_go"));
mData.btn_pm = Engine->GetChildByID(mData.row, xorstr("btn_pm"));
}

page = 1;
Engine->SetString(txt_page, to_string(page));
ClearList();
Engine->UIScreenCenter(m_dVTableAddr);
}

void CUIMerchantListPlug::ClearList()
{
for (int i = 0; i < 14; i++)
{
Engine->SetString(mData.txt_seller,"");
Engine->SetString(mData.txt_item,"");
Engine->SetString(mData.txt_grade,"");
Engine->SetString(mData.txt_type,"");
Engine->SetString(mData.txt_count,"");
Engine->SetString(mData.txt_price,"");
Engine->SetVisible(mData.btn_go,false);
Engine->SetVisible(mData.btn_pm,false);
}
}
DWORD uiMerchant;

void CUIMerchantListPlug::SetItem(uint8 _p, string q)
{
page = _p;
pageCount = abs(ceil((double)merchantList.size() / (double)14));

ClearList();

for (uint32 i = 0; i < 14; i++)
{
if (14 * (page - 1) + i > merchantList.size() - 1 || merchantList.size() < i + 1)
break;

int j = i + 14 * (page - 1);
TABLE_ITEM_BASIC* tbl = Engine->tblMgr->getItemData(merchantList[j].nItemID);

if (tbl != nullptr)
{
if (q != "" && Engine->StringHelper->IsContains(tbl->strName, q))
{
merchantList[j].tbl = tbl;
Engine->SetString(mData.txt_seller,merchantList[j].seller);
Engine->SetString(mData.txt_item,tbl->strName);

// Grade algorithm
TABLE_ITEM_EXT* ext = Engine->tblMgr->getExtData(tbl->extNum, merchantList[j].nItemID);
if (ext != nullptr)
{
if (ext->baseItemID > 0)
Engine->SetString(mData.txt_item,ext->szHeader);

if (ext->extensionID % 10 != 0)
{
char szExtID[20];
sprintf(szExtID, "+%d", ext->extensionID % 10);
Engine->SetString(mData.txt_grade,szExtID);
}
else
Engine->SetString(mData.txt_grade,"-");
}

Engine->SetString(mData.txt_type,merchantList[j].type == 0 ? "Sell" : "Buy");
Engine->SetString(mData.txt_count,to_string(merchantList[j].count));

if (merchantList[j].isKC)
Engine->SetString(mData.txt_price,string_format(xorstr("%s knight cash"), Engine->StringHelper->NumberFormat(merchantList[j].price).c_str()));
else
Engine->SetString(mData.txt_price,string_format(xorstr("%s coins"), Engine->StringHelper->NumberFormat(merchantList[j].price).c_str()));

Engine->SetVisible(mData.btn_go,true);
Engine->SetVisible(mData.btn_pm,true);
}
else if (q == "")
{
Engine->SetString(mData.txt_seller,merchantList[j].seller);
Engine->SetString(mData.txt_item,tbl->strName);

// Grade algorithm
TABLE_ITEM_EXT* ext = Engine->tblMgr->getExtData(tbl->extNum, merchantList[j].nItemID);
if (ext != nullptr)
{
if (ext->baseItemID > 0)
Engine->SetString(mData.txt_item,ext->szHeader);

if (ext->extensionID % 10 != 0)
{
char szExtID[20];
sprintf(szExtID, "+%d", ext->extensionID % 10);
Engine->SetString(mData.txt_grade,szExtID);
}
else
Engine->SetString(mData.txt_grade,"-");
}

Engine->SetString(mData.txt_type,merchantList[j].type == 0 ? "Sell" : "Buy");
Engine->SetString(mData.txt_count,to_string(merchantList[j].count));

if (merchantList[j].isKC)
Engine->SetString(mData.txt_price,string_format(xorstr("%s knight cash"), Engine->StringHelper->NumberFormat(merchantList[j].price).c_str()));
else
Engine->SetString(mData.txt_price,string_format(xorstr("%s coins"), Engine->StringHelper->NumberFormat(merchantList[j].price).c_str()));

Engine->SetVisible(mData.btn_go,true);
Engine->SetVisible(mData.btn_pm,true);
}
}
}

Engine->SetString(txt_page,to_string(page));
}
void CUIMerchantListPlug::Open()
{
Engine->SetVisible(m_dVTableAddr, true);
}

void CUIMerchantListPlug::Close()
{
Engine->EditKillFocus(edit_itemname);
Engine->SetVisible(m_dVTableAddr,false);
}

void CUIMerchantListPlug::OpenMerchantList()
{

}
bool MerchantListCompare(const MerchantData& a, const MerchantData& b)
{
return a.price < b.price;
}

void CUIMerchantListPlug::GO(string name)
{
Packet result(XSafe);
result << uint8_t(XSafeOpCodes::MERCHANTLIST) << uint8(1) << name;
Engine->Send(&result);
}

void CUIMerchantListPlug::pM(string name)
{
Packet result(XSafe);
result << uint8_t(XSafeOpCodes::MERCHANTLIST) << uint8(2) << name;
Engine->Send(&result);
}
DWORD func_merch = 0;
bool CUIMerchantListPlug::ReceiveMessage(DWORD* pSender, uint32_t dwMsg)
{
uiMerchant = m_dVTableAddr;

if (!pSender || pSender ==(DWORD*) 0 || dwMsg != UIMSG_BUTTON_CLICK)
return false;

if (dwMsg == UIMSG_BUTTON_CLICK)
{
if (pSender ==(DWORD*) btn_close)
Close();
else if (pSender ==(DWORD*) btn_search)
SetItem(1, Engine->GetEditString(edit_itemname).c_str());
else if (pSender ==(DWORD*) btn_sort_price)
{
std::sort(merchantList.begin(), merchantList.end(), MerchantListCompare);
SetItem(1);
}
else if (pSender == (DWORD*)btn_next)
{
pageCount = abs(ceil((double)merchantList.size() / (double)14));

if (pageCount > 1)
{
if (pageCount >= (CurPageCount + 1))
{
CurPageCount++;
SetItem(CurPageCount, Engine->GetEditString(edit_itemname).c_str());

}
}
}
else if (pSender == (DWORD*)btn_previous)
{
pageCount = abs(ceil((double)merchantList.size() / (double)14));

if (CurPageCount > 1)
{
if ((CurPageCount - 1) > 0)
{
CurPageCount--;
SetItem(CurPageCount, Engine->GetEditString(edit_itemname).c_str());

}
}
}

for (int i = 0; i < 14; i++)
{
if (pSender ==(DWORD*) mData.btn_go)
GO(merchantList[i * page].seller);
else if (pSender ==(DWORD*) mData.btn_pm)
PM(merchantList[i * page].seller);
}
}


return true;
}

void __stdcall UiMerchantReceiveMessage_Hook(DWORD* pSender, uint32_t dwMsg)
{
Engine->uiMerchantList->ReceiveMessage(pSender, dwMsg);

__asm
{
MOV ECX, uiMerchant
PUSH dwMsg
PUSH pSender
MOV EAX, func_merch
CALL EAX
}
}

void CUIMerchantListPlug::InitReceiveMessage()
{
DWORD ptrMsg = Engine->GetRecvMessagePtr(m_dVTableAddr);
func_merch = *(DWORD*)ptrMsg;
*(DWORD*)ptrMsg = (DWORD)UiMerchantReceiveMessage_Hook;
}


bu kısımda bu sekilde hocam
 

RustyGameStudio

KY Saygın Üye
Yardımsever
KAYIT
19 Şub 2023
Mesajlar
354
Çözümler
2
Tepki puanı
581
Şimdi can alıcı soruyu soruyorum 1. olarak bunu bot karakterlerin pazarlarındamı böyle görüyorsun. Normal user açtığı pazarlarda bu sorun var mı?
 

1910

KY Kıdemli Üye
KAYIT
11 Şub 2024
Mesajlar
402
Çözümler
2
Tepki puanı
80
pMerchUser->GetMerchantSlipList(pnewlist, pMerchUser); bu
buda gameserver merchant yeri onuda bi denersiniz

*** Gizli metin: alıntı yapılamaz. ***
Hocam Sorun Bot pazarlarda...

User'ın kurduğu pazarlarda fiyat görünüyor sorun yok.

Fakat bot pazarlarda fiyatı çekmiyor
 

solomonkane

KY Saygın Üye
Coder
Yardımsever
KAYIT
21 Şub 2024
Mesajlar
488
Çözümler
3
Tepki puanı
342
Konum
Palmiye Adaları
Aynılarını geçirmeme rağmen malesef olmadı
İmkansız eksik birşey yapıyor olabilirsin işlemleri tekrarlayıp tekrar dene ve yavaş yap ekstra olarak yukarıda acs tarafinida verdim onuda ekle düzelt veya bu kodlar seni kaynak kodlarına uymuyorsa uyacak şekilde duzenlersen bu sorun çözülür :)
 
Anasayfa Kayıt ol Giriş yap
Üst Alt