Move git root from Client/ to src/ to track all source code: - Client: Game client source (moved to Client/Client/) - Server: Game server source - GameTools: Development tools - CryptoSource: Encryption utilities - database: Database scripts - Script: Game scripts - rylCoder_16.02.2008_src: Legacy coder tools - GMFont, Game: Additional resources 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com>
652 lines
21 KiB
C++
652 lines
21 KiB
C++
// HumanStreetStall.cpp: implementation of the CHumanStreetStall class.
|
||
//
|
||
//////////////////////////////////////////////////////////////////////
|
||
|
||
#include "ClientMain.h"
|
||
#include "WinInput.h"
|
||
#include "Item\ItemMgr.h"
|
||
#include "HumanStreetStall.h"
|
||
#include "GUIMessageBox.h"
|
||
#include "GUIMessageBoxManager.h"
|
||
#include "GUITextEdit.h"
|
||
|
||
#include "StringFilter.h"
|
||
|
||
//////////////////////////////////////////////////////////////////////
|
||
// Construction/Destruction
|
||
//////////////////////////////////////////////////////////////////////
|
||
|
||
CHumanStreetStall::CHumanStreetStall()
|
||
{
|
||
m_dwNameResult = 0;
|
||
m_dwRegistItemResult = 0;
|
||
m_dwRegistItemValue = 0;
|
||
m_dwBuyResult = 0;
|
||
m_lpBuyItem = NULL;
|
||
m_dwItemNumber = 0;
|
||
strcpy(m_strMarketName, "");
|
||
strcpy(m_strOwner, "");
|
||
}
|
||
|
||
CHumanStreetStall::~CHumanStreetStall()
|
||
{
|
||
DeleteTradeItem();
|
||
}
|
||
|
||
BOOL CHumanStreetStall::Init(unsigned short x, unsigned short y)
|
||
{
|
||
CSprite *lpSprite;
|
||
lpSprite = new CSprite;
|
||
lpSprite->Create(x, y, 0, 0, 222, 256, g_ClientMain.m_lpInterface->m_lstTexture[48]);
|
||
m_lstSprite.push_back(lpSprite);
|
||
|
||
lpSprite = new CSprite;
|
||
lpSprite->Create(x, y + 256, 0, 0, 222, 224, g_ClientMain.m_lpInterface->m_lstTexture[49]);
|
||
m_lstSprite.push_back(lpSprite);
|
||
|
||
CGUIButton *lpButton;
|
||
lpButton = new CGUIButton;
|
||
lpButton->m_nMethod = BUTTON_SIMPLE;
|
||
lpButton->m_lpNormalButton = new CSprite;
|
||
lpButton->m_lpNormalButton->Create(190, 1, 0, 0, 28, 28, g_ClientMain.m_lpInterface->m_lpCommonWindow);
|
||
lpButton->m_lpClickMouseButton = new CSprite;
|
||
lpButton->m_lpClickMouseButton->Create(190, 1, 28, 0, 56, 28, g_ClientMain.m_lpInterface->m_lpCommonWindow);
|
||
lpButton->SetTooltip(&m_TooltipManager, g_StringTable.m_strString[251]);
|
||
lpButton->SetMove(x, y);
|
||
m_ButtonManager.AddButton(lpButton);
|
||
|
||
CGUIScroll *lpScroll;
|
||
lpScroll = new CGUIScroll;
|
||
lpScroll->m_lpBarButton = new CGUIButton;
|
||
lpScroll->m_lpBarButton->m_nMethod = BUTTON_SIMPLE;
|
||
lpScroll->m_lpBarButton->m_lpNormalButton = new CSprite;
|
||
lpScroll->m_lpBarButton->m_lpNormalButton->Create(206, 302, 228, 0, 239, 20, g_ClientMain.m_lpInterface->m_lstTexture[8]);
|
||
lpScroll->m_lpBarButton->m_lpClickMouseButton = new CSprite;
|
||
lpScroll->m_lpBarButton->m_lpClickMouseButton->Create(206, 302, 228, 0, 239, 20, g_ClientMain.m_lpInterface->m_lstTexture[8]);
|
||
|
||
lpScroll->m_lpUpArrowButton = new CGUIButton;
|
||
lpScroll->m_lpUpArrowButton->m_nMethod = BUTTON_SIMPLE;
|
||
lpScroll->m_lpUpArrowButton->m_lpNormalButton = new CSprite;
|
||
lpScroll->m_lpUpArrowButton->m_lpNormalButton->Create(206, 291, 243, 2, 254, 12, g_ClientMain.m_lpInterface->m_lstTexture[8]);
|
||
lpScroll->m_lpUpArrowButton->m_lpClickMouseButton = new CSprite;
|
||
lpScroll->m_lpUpArrowButton->m_lpClickMouseButton->Create(206, 291, 243, 14, 254, 24, g_ClientMain.m_lpInterface->m_lstTexture[8]);
|
||
|
||
lpScroll->m_lpDownArrowButton = new CGUIButton;
|
||
lpScroll->m_lpDownArrowButton->m_nMethod = BUTTON_SIMPLE;
|
||
lpScroll->m_lpDownArrowButton->m_lpNormalButton = new CSprite;
|
||
lpScroll->m_lpDownArrowButton->m_lpNormalButton->Create(206, 439, 243, 26, 254, 36, g_ClientMain.m_lpInterface->m_lstTexture[8]);
|
||
lpScroll->m_lpDownArrowButton->m_lpClickMouseButton = new CSprite;
|
||
lpScroll->m_lpDownArrowButton->m_lpClickMouseButton->Create(206, 439, 243, 40, 254, 50, g_ClientMain.m_lpInterface->m_lstTexture[8]);
|
||
|
||
lpScroll->m_lValue = (long *)&g_TextEdit.m_dwStartStall;
|
||
lpScroll->SetMove(x, y);
|
||
lpScroll->SetPosition(206, 302);
|
||
lpScroll->SetEdge(0, 0, 10, 116);
|
||
lpScroll->SetRange(0, 0);
|
||
m_lstScroll.push_back(lpScroll);
|
||
|
||
InitValue();
|
||
|
||
m_bShow = FALSE;
|
||
|
||
m_dwWindowKind = WINDOW_FIX;
|
||
|
||
m_rcWindowSize.left = x; m_rcWindowSize.top = y;
|
||
m_rcWindowSize.right = x + 222; m_rcWindowSize.bottom = y + 480;
|
||
|
||
m_rcMoveEdge.left = x; m_rcMoveEdge.top = y;
|
||
m_rcMoveEdge.right = x + 222; m_rcMoveEdge.bottom = y + 20;
|
||
|
||
return TRUE;
|
||
}
|
||
|
||
void CHumanStreetStall::InitValue(void)
|
||
{
|
||
m_dwNameResult = 0;
|
||
m_dwRegistItemResult = 0;
|
||
m_dwRegistItemValue = 0;
|
||
m_dwBuyResult = 0;
|
||
m_lpBuyItem = NULL;
|
||
m_dwItemNumber = 0;
|
||
|
||
strcpy(m_strMarketName, "");
|
||
strcpy(m_strOwner, "");
|
||
}
|
||
|
||
BOOL CHumanStreetStall::Update(BOOL &bClick, BOOL &bEdge)
|
||
{
|
||
if(g_DeviceInput.InRect(m_rcWindowSize.left, m_rcWindowSize.top, m_rcWindowSize.right, m_rcWindowSize.bottom))
|
||
{
|
||
bEdge = TRUE;
|
||
|
||
if(g_DeviceInput.GetIsLeftMouseDown() || g_DeviceInput.GetIsMiddleMouseDown() || g_DeviceInput.GetIsRightMouseDown() ||
|
||
g_DeviceInput.GetIsLeftMousePress() || g_DeviceInput.GetIsMiddleMousePress() || g_DeviceInput.GetIsRightMousePress() ||
|
||
g_DeviceInput.GetIsLeftMouseUp() || g_DeviceInput.GetIsMiddleMouseUp() || g_DeviceInput.GetIsRightMouseUp())
|
||
{
|
||
bClick = TRUE;
|
||
}
|
||
}
|
||
|
||
m_ButtonManager.Update();
|
||
m_TooltipManager.Update();
|
||
|
||
if(m_dwNameResult & MB_CONFIRM)
|
||
{
|
||
// <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><>Ŷ <20><><EFBFBD><EFBFBD>
|
||
m_strMarketName[31] = 0;
|
||
g_ClientMain.m_Network.m_pSocket->CharStallOpen(g_ClientMain.m_dwMyChrID, m_strMarketName);
|
||
|
||
strcpy(m_strMarketName, "");
|
||
m_dwNameResult = 0;
|
||
return TRUE;
|
||
} else if(m_dwNameResult & MB_CANCEL || m_dwNameResult & MB_EXIT)
|
||
{
|
||
strcpy(m_strMarketName, "");
|
||
m_dwNameResult = 0;
|
||
ShowWindow(FALSE);
|
||
return TRUE;
|
||
}
|
||
|
||
if(m_dwRegistItemResult & MB_YES)
|
||
{
|
||
// <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>÷<EFBFBD><C3B7><EFBFBD><EFBFBD><EFBFBD>
|
||
TakeType pTakeType;
|
||
pTakeType.m_srcPos = g_ClientMain.m_lpPickItem->m_lpItemBase->GetPos();
|
||
pTakeType.m_dstPos.m_cPos = ClientSocket::ItemPos_Stall;
|
||
pTakeType.m_dstPos.m_cIndex = m_wItemIndex;
|
||
if(g_ClientMain.m_lpPickItem->GetIsEnableStack())
|
||
{
|
||
pTakeType.m_cNum = g_ClientMain.m_lpPickItem->GetNowDurability();
|
||
} else
|
||
{
|
||
pTakeType.m_cNum = 1;
|
||
}
|
||
if(m_dwRegistItemValue < 1) m_dwRegistItemValue = 1;
|
||
g_ClientMain.m_Network.m_nsNetworkState = NS_STALLREGISTERITEM;
|
||
g_ClientMain.m_Network.m_pSocket->CharStallRegisterItem(g_ClientMain.m_dwMyChrID, pTakeType, m_dwRegistItemValue, ClientSocket::StallCmd_Register);
|
||
|
||
m_wItemIndex = 0;
|
||
m_dwRegistItemResult = 0;
|
||
m_dwRegistItemValue = 0;
|
||
return TRUE;
|
||
} else if(m_dwRegistItemResult & MB_NO || m_dwRegistItemResult & MB_EXIT)
|
||
{
|
||
m_wItemIndex = 0;
|
||
m_dwRegistItemResult = 0;
|
||
m_dwRegistItemValue = 0;
|
||
return TRUE;
|
||
}
|
||
|
||
if(m_dwBuyResult & MB_YES)
|
||
{
|
||
// <20><><EFBFBD><EFBFBD>. <20><>Ŷ <20><><EFBFBD><EFBFBD>
|
||
Item::ItemPos pItemIndex;
|
||
FieldInstance pTradeItem;
|
||
pTradeItem.m_dwInstanceID = 0;
|
||
pTradeItem.m_dwOID = 0;
|
||
pTradeItem.m_dwTypeID = m_lpBuyItem->GetProtoTypeID();
|
||
if(m_lpBuyItem->GetIsEnableStack())
|
||
{
|
||
if(m_dwItemNumber > m_lpBuyItem->GetNowDurability())
|
||
m_dwItemNumber = m_lpBuyItem->GetNowDurability();
|
||
pTradeItem.m_cNum = m_dwItemNumber;
|
||
}
|
||
else
|
||
pTradeItem.m_cNum = 1;
|
||
|
||
if(pTradeItem.m_cNum)
|
||
{
|
||
BOOL bPass = FALSE;
|
||
if(g_ClientMain.m_csStatus.m_Info.Gold < (pTradeItem.m_cNum * m_lpBuyItem->m_lpItemBase->GetBuyPrice())) bPass = TRUE;
|
||
|
||
if(bPass)
|
||
{
|
||
CGUIMessageBox *lpMessageBox;
|
||
lpMessageBox = new CGUIMessageBox;
|
||
lpMessageBox->Create(g_StringTable.m_strString[252]);
|
||
|
||
m_dwBuyResult = 0;
|
||
m_lpBuyItem = NULL;
|
||
return TRUE;
|
||
}
|
||
|
||
unsigned long dwNum = g_ClientMain.m_csStatus.GetAbleInven(&pTradeItem, pItemIndex, FALSE);
|
||
if(dwNum)
|
||
{
|
||
Item::ItemPos pPos = m_lpBuyItem->m_lpItemBase->GetPos();
|
||
g_ClientMain.m_Network.SendTradeItem(m_dwMarketOwnerID, m_lpBuyItem->GetProtoTypeID(),
|
||
dwNum, pPos, pItemIndex);
|
||
}
|
||
}
|
||
|
||
m_dwItemNumber = 0;
|
||
m_dwBuyResult = 0;
|
||
m_lpBuyItem = NULL;
|
||
return TRUE;
|
||
} else if(m_dwBuyResult & MB_NO || m_dwBuyResult & MB_EXIT)
|
||
{
|
||
m_dwItemNumber = 0;
|
||
m_dwBuyResult = 0;
|
||
m_lpBuyItem = NULL;
|
||
return TRUE;
|
||
}
|
||
|
||
POINT *ptMousePos = g_DeviceInput.GetMousePosition();
|
||
unsigned long dwInvenX = (ptMousePos->x - (m_rcWindowSize.left + 8)) / 26;
|
||
unsigned long dwInvenY = (ptMousePos->y - (m_rcWindowSize.top + 73)) / 26;
|
||
|
||
// <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>Ʈ
|
||
if(m_dwMarketOwnerID == g_ClientMain.m_dwMyChrID)
|
||
{
|
||
if(SelectItem())
|
||
{
|
||
TakeType pTakeType;
|
||
pTakeType.m_srcPos.m_cPos = ClientSocket::ItemPos_Stall;
|
||
pTakeType.m_srcPos.m_cIndex = 0;
|
||
pTakeType.m_dstPos = g_ClientMain.m_lpPickItem->m_lpItemBase->GetPos();
|
||
if(g_ClientMain.m_lpPickItem->GetIsEnableStack())
|
||
{
|
||
pTakeType.m_cNum = g_ClientMain.m_lpPickItem->GetNowDurability();
|
||
} else
|
||
{
|
||
pTakeType.m_cNum = 1;
|
||
}
|
||
g_ClientMain.m_Network.m_nsNetworkState = NS_STALLREGISTERITEM;
|
||
g_ClientMain.m_Network.m_pSocket->CharStallRegisterItem(g_ClientMain.m_dwMyChrID, pTakeType, 0, ClientSocket::StallCmd_Cancel);
|
||
|
||
return TRUE;
|
||
}
|
||
|
||
__int64 ddItem;
|
||
|
||
if(g_DeviceInput.GetIsLeftMouseDown() && g_ClientMain.m_lpPickItem && g_ClientMain.m_lpPickItem->GetItemPos() == ClientSocket::ItemPos_Inven)
|
||
{
|
||
if(g_DeviceInput.InRect(m_rcWindowSize.left + 8, m_rcWindowSize.top + 73, m_rcWindowSize.left + 215, m_rcWindowSize.top + 280)) // <20><>ȯâ
|
||
{
|
||
if((ddItem = g_ClientMain.m_csStatus.IsCheckItem(g_ClientMain.m_lpPickItem, 5, dwInvenX, dwInvenY, 0)) != ITEM_FAILED)
|
||
{
|
||
Item::ItemPos pItemIndex;
|
||
pItemIndex.SetPos(dwInvenX, dwInvenY, 0);
|
||
pItemIndex.m_cPos = ClientSocket::ItemPos_Stall;
|
||
|
||
if(ddItem == ITEM_EMPTY)
|
||
{
|
||
if(g_ClientMain.m_lpPickItem->GetIsEnableStack())
|
||
{
|
||
CItemInstance *lpExistItem = NULL;
|
||
switch(g_ClientMain.m_lpPickItem->GetItemPos())
|
||
{
|
||
case ClientSocket::ItemPos_Inven:
|
||
lpExistItem = g_ClientMain.m_csStatus.GetInventoryItem(g_ClientMain.m_lpPickItem->m_lpItemBase->GetPos());
|
||
break;
|
||
|
||
case ClientSocket::ItemPos_Upgrade:
|
||
lpExistItem = g_ClientMain.m_csStatus.m_lpUpgrade[g_ClientMain.m_lpPickItem->m_lpItemBase->GetPos().m_cIndex];
|
||
break;
|
||
|
||
case ClientSocket::ItemPos_Exchange:
|
||
lpExistItem = g_ClientMain.m_csStatus.GetExchangeItem(g_ClientMain.m_lpPickItem->m_lpItemBase->GetPos());
|
||
break;
|
||
|
||
case ClientSocket::ItemPos_Deposit:
|
||
lpExistItem = g_ClientMain.m_csStatus.GetDepositItem(g_ClientMain.m_lpPickItem->m_lpItemBase->GetPos());
|
||
break;
|
||
}
|
||
|
||
if(lpExistItem && lpExistItem->GetProtoTypeID() == g_ClientMain.m_lpPickItem->GetProtoTypeID())
|
||
{
|
||
return TRUE;
|
||
}
|
||
}
|
||
|
||
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>̵<EFBFBD>
|
||
// g_ClientMain.m_Network.SendTakeItem(g_ClientMain.m_lpPickItem, &pItemIndex, 1);
|
||
CGUIMessageBox *lpMessageBox;
|
||
lpMessageBox = new CGUIMessageBox;
|
||
lpMessageBox->Create(g_StringTable.m_strString[590], MB_NUMBER | MB_YES | MB_NO | MB_EXIT);
|
||
lpMessageBox->SetResult(&m_dwRegistItemResult);
|
||
lpMessageBox->SetValue(&m_dwRegistItemValue);
|
||
lpMessageBox->SetEnableEnter(FALSE);
|
||
m_wItemIndex = pItemIndex.m_cIndex;
|
||
|
||
m_dwRegistItemResult = 0;
|
||
m_dwRegistItemValue = 0;
|
||
}
|
||
|
||
return TRUE;
|
||
}
|
||
}
|
||
}
|
||
} else
|
||
{
|
||
list<CItemInstance *>::iterator it;
|
||
for(it = g_ClientMain.m_csStatus.m_lstStreetTrade.begin(); it != g_ClientMain.m_csStatus.m_lstStreetTrade.end(); it++)
|
||
{
|
||
if(!g_ClientMain.m_lpPickItem && (g_DeviceInput.GetIsLeftMouseDown() || g_DeviceInput.GetIsRightMouseDown()) && (*it)->IsOverMouse())
|
||
{
|
||
BOOL bPass = FALSE;
|
||
if(g_ClientMain.m_csStatus.m_Info.Gold >= (*it)->m_lpItemBase->GetBuyPrice()) bPass = TRUE;
|
||
|
||
if(bPass)
|
||
{
|
||
unsigned long dwNum;
|
||
Item::ItemPos pItemIndex;
|
||
FieldInstance pTradeItem;
|
||
pTradeItem.m_dwInstanceID = 0;
|
||
pTradeItem.m_dwOID = 0;
|
||
pTradeItem.m_dwTypeID = (*it)->GetProtoTypeID();
|
||
pTradeItem.m_cNum = 1;
|
||
dwNum = g_ClientMain.m_csStatus.GetAbleInven(&pTradeItem, pItemIndex, FALSE);
|
||
if(dwNum)
|
||
{
|
||
if(g_DeviceInput.GetIsLeftMouseDown())
|
||
{
|
||
CGUIMessageBox *lpMessageBox;
|
||
char strMessage[MAX_PATH];
|
||
lpMessageBox = new CGUIMessageBox;
|
||
m_dwBuyResult = 0;
|
||
m_lpBuyItem = (*it);
|
||
m_dwItemNumber = 0;
|
||
|
||
if(m_lpBuyItem->GetIsEnableStack())
|
||
{
|
||
strcpy(strMessage, g_StringTable.m_strString[254]);
|
||
lpMessageBox->Create(strMessage, MB_NUMBER | MB_YES | MB_NO | MB_EXIT);
|
||
lpMessageBox->SetValue(&m_dwItemNumber);
|
||
} else
|
||
{
|
||
sprintf(strMessage, g_StringTable.m_strString[255], (*it)->m_lpItemBase->GetBuyPrice());
|
||
lpMessageBox->Create(strMessage, MB_YES | MB_NO | MB_EXIT);
|
||
}
|
||
lpMessageBox->SetResult(&m_dwBuyResult);
|
||
} else if(g_DeviceInput.GetIsRightMouseDown())
|
||
{
|
||
m_dwBuyResult = MB_YES;
|
||
m_lpBuyItem = (*it);
|
||
if(m_lpBuyItem->GetIsEnableStack())
|
||
{
|
||
m_dwItemNumber = m_lpBuyItem->GetNowDurability();
|
||
}
|
||
}
|
||
} else
|
||
{
|
||
CGUIMessageBox *lpMessageBox;
|
||
lpMessageBox = new CGUIMessageBox;
|
||
lpMessageBox->Create(g_StringTable.m_strString[256]);
|
||
}
|
||
} else
|
||
{
|
||
CGUIMessageBox *lpMessageBox;
|
||
lpMessageBox = new CGUIMessageBox;
|
||
lpMessageBox->Create(g_StringTable.m_strString[252]);
|
||
}
|
||
|
||
return TRUE;
|
||
}
|
||
}
|
||
}
|
||
|
||
/////////////// <20><>ũ<EFBFBD><C5A9> <20>κ<EFBFBD>
|
||
if(g_TextEdit.m_deqStallMessage.size() <= MAX_DRAWSTALLCHAT)
|
||
m_lstScroll[0]->SetRange(0, 0);
|
||
else
|
||
m_lstScroll[0]->SetRange(0, g_TextEdit.m_deqStallMessage.size() - MAX_DRAWSTALLCHAT);
|
||
m_lstScroll[0]->Update();
|
||
|
||
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
||
// ä<><C3A4>
|
||
if(g_TextEdit.m_dwEditMode == EDITMODE_STALL && GetAsyncKeyState(VK_RETURN))
|
||
{
|
||
if(strcmp(g_TextEdit.GetMessage(), ""))
|
||
{
|
||
char strChat[MAX_PATH];
|
||
unsigned long dwTotalLength;
|
||
strcpy(strChat, g_TextEdit.GetMessage());
|
||
dwTotalLength = strlen(strChat);
|
||
|
||
if(g_ClientMain.m_dwInternationalCode || g_StringFilter.Filter(g_TextEdit.GetMessage()))
|
||
{
|
||
g_ClientMain.m_Network.SendChatMessage(NULL, g_TextEdit.GetMessage(), ClientSocket::ChatType_Stall);
|
||
} else
|
||
{
|
||
g_ClientMain.m_Network.SendClientLog(1, g_TextEdit.GetMessage(), g_StringFilter.m_lpSearched);
|
||
g_TextEdit.AddStallChatMessage(g_StringTable.m_strString[570], g_ClientMain.m_dwMyChrID, 129);
|
||
}
|
||
|
||
g_TextEdit.InitMessage();
|
||
}
|
||
}
|
||
|
||
if(!g_TextEdit.IsFocus())
|
||
{
|
||
g_TextEdit.SetFocus();
|
||
g_TextEdit.m_dwEditMode = EDITMODE_STALL;
|
||
g_TextEdit.InitMessage();
|
||
}
|
||
|
||
if(m_ButtonManager.m_lstButton[0]->m_nState == BUTTON_CLICK)
|
||
{
|
||
m_ButtonManager.m_lstButton[0]->m_nState = BUTTON_NONE;
|
||
ShowWindow(FALSE);
|
||
}
|
||
|
||
return TRUE;
|
||
}
|
||
|
||
void CHumanStreetStall::ShowWindow(BOOL bShow)
|
||
{
|
||
m_bShow = bShow;
|
||
|
||
if(m_bShow)
|
||
{
|
||
InitValue();
|
||
} else
|
||
{
|
||
if(m_dwMarketOwnerID == g_ClientMain.m_dwMyChrID)
|
||
{
|
||
if(strcmp(m_strOwner, ""))
|
||
{
|
||
g_ClientMain.m_Network.m_pSocket->CharStallOpen(g_ClientMain.m_dwMyChrID, "");
|
||
}
|
||
} else
|
||
{
|
||
if(strcmp(m_strOwner, ""))
|
||
{
|
||
g_ClientMain.m_Network.SendStallLeave();
|
||
}
|
||
}
|
||
|
||
strcpy(m_strMarketName, "");
|
||
strcpy(m_strOwner, "");
|
||
m_dwMarketOwnerID = 0;
|
||
DeleteTradeItem();
|
||
|
||
g_TextEdit.DeleteStallMessage();
|
||
g_TextEdit.InitMessage();
|
||
g_TextEdit.m_dwEditMode = EDITMODE_CHAT;
|
||
g_ClientMain.SetFocus();
|
||
}
|
||
}
|
||
|
||
void CHumanStreetStall::Render(LPDIRECT3DDEVICE8 lpD3DDevice)
|
||
{
|
||
m_lstSprite[0]->Render(lpD3DDevice, m_cAlpha);
|
||
m_lstSprite[1]->Render(lpD3DDevice, m_cAlpha);
|
||
|
||
list<CItemInstance *>::iterator it;
|
||
const Item::ItemInfo *lpItemInfo;
|
||
for(it = g_ClientMain.m_csStatus.m_lstStreetTrade.begin(); it != g_ClientMain.m_csStatus.m_lstStreetTrade.end(); it++)
|
||
{
|
||
lpItemInfo = &(*it)->GetItemInfo();
|
||
(*it)->m_wPutX = m_rcWindowSize.left + 8 + 26 * (*it)->m_lpItemBase->GetPos().GetXIndex() + (((lpItemInfo->m_DetailData.m_cXSize * 26 - 1) - (*it)->m_lpSprite->GetSizeX()) / 2);
|
||
(*it)->m_wPutY = m_rcWindowSize.top + 73 + 26 * (*it)->m_lpItemBase->GetPos().GetYIndex() + (((lpItemInfo->m_DetailData.m_cYSize * 26 - 1) - (*it)->m_lpSprite->GetSizeY()) / 2);
|
||
(*it)->Render(lpD3DDevice);
|
||
}
|
||
|
||
if(g_ClientMain.m_lpPickItem && g_MessageBoxManager.m_lstMessageBox.empty())
|
||
{
|
||
if(g_DeviceInput.InRect(m_rcWindowSize.left + 8, m_rcWindowSize.top + 73, m_rcWindowSize.left + 215, m_rcWindowSize.top + 280))
|
||
{
|
||
Item::ItemPos pItemIndex;
|
||
POINT *ptMousePos = g_DeviceInput.GetMousePosition();
|
||
pItemIndex.SetPos((ptMousePos->x - (m_rcWindowSize.left + 8)) / 26, (ptMousePos->y - (m_rcWindowSize.top + 73)) / 26, 0);
|
||
__int64 ddItem;
|
||
|
||
if((ddItem = g_ClientMain.m_csStatus.IsCheckItem(g_ClientMain.m_lpPickItem, 5, pItemIndex.GetXIndex(), pItemIndex.GetYIndex(), 0)) != ITEM_FAILED)
|
||
{
|
||
g_ClientMain.m_lpCommonInterface->RenderRect(lpD3DDevice,
|
||
m_rcWindowSize.left + 8 + pItemIndex.GetXIndex() * 26,
|
||
m_rcWindowSize.top + 73 + pItemIndex.GetYIndex() * 26,
|
||
m_rcWindowSize.left + 8 + g_ClientMain.m_lpPickItem->GetItemInfo().m_DetailData.m_cXSize * 26 + pItemIndex.GetXIndex() * 26,
|
||
m_rcWindowSize.top + 73 + g_ClientMain.m_lpPickItem->GetItemInfo().m_DetailData.m_cYSize * 26 + pItemIndex.GetYIndex() * 26,
|
||
0xFF0000FF, 0x80);
|
||
} else
|
||
{
|
||
if(g_ClientMain.m_lpPickItem->GetItemInfo().m_DetailData.m_cXSize + pItemIndex.GetXIndex() < 8 &&
|
||
g_ClientMain.m_lpPickItem->GetItemInfo().m_DetailData.m_cYSize + pItemIndex.GetYIndex() < 8)
|
||
{
|
||
g_ClientMain.m_lpCommonInterface->RenderRect(lpD3DDevice,
|
||
m_rcWindowSize.left + 8 + pItemIndex.GetXIndex() * 26,
|
||
m_rcWindowSize.top + 73 + pItemIndex.GetYIndex() * 26,
|
||
m_rcWindowSize.left + 8 + g_ClientMain.m_lpPickItem->GetItemInfo().m_DetailData.m_cXSize * 26 + pItemIndex.GetXIndex() * 26,
|
||
m_rcWindowSize.top + 73 + g_ClientMain.m_lpPickItem->GetItemInfo().m_DetailData.m_cYSize * 26 + pItemIndex.GetYIndex() * 26,
|
||
0xFFFF0000, 0x80);
|
||
}
|
||
}
|
||
}
|
||
}
|
||
|
||
m_lstScroll[0]->Render(lpD3DDevice, m_cAlpha);
|
||
|
||
RECT rcRect;
|
||
if(strcmp(m_strOwner, ""))
|
||
{
|
||
// <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20≯<EFBFBD>
|
||
SetRect(&rcRect, m_rcWindowSize.left + 66, m_rcWindowSize.top + 51, m_rcWindowSize.left + 213, m_rcWindowSize.top + 63);
|
||
g_TextEdit.DrawText(m_strOwner, &rcRect, DT_VCENTER | DT_CENTER, D3DCOLOR_RGBA(255, 255, 255, 255));
|
||
}
|
||
|
||
SetRect(&rcRect, m_rcWindowSize.left + 10, m_rcWindowSize.top + 295, m_rcWindowSize.left + 201, m_rcWindowSize.top + 295 + 15);
|
||
for(int i = 0; i < MAX_DRAWSTALLCHAT; i++)
|
||
{
|
||
if(g_TextEdit.m_deqStallMessage.size() < i + 1) break;
|
||
|
||
g_TextEdit.DrawText(g_TextEdit.m_deqStallMessage[i + g_TextEdit.m_dwStartStall]->strMessage, &rcRect, DT_LEFT | DT_VCENTER, g_TextEdit.m_deqStallMessage[i + g_TextEdit.m_dwStartStall]->dwColor);
|
||
|
||
rcRect.top += 15;
|
||
rcRect.bottom = rcRect.top + 15;
|
||
}
|
||
|
||
if(g_TextEdit.IsFocus() && g_TextEdit.m_dwEditMode == EDITMODE_STALL)
|
||
{
|
||
SetRect(&rcRect, m_rcWindowSize.left + 10, m_rcWindowSize.top + 456, m_rcWindowSize.left + 209, m_rcWindowSize.top + 468);
|
||
if(g_ClientMain.m_bCursorToggle)
|
||
{
|
||
char strChat[MAX_PATH];
|
||
sprintf(strChat, "%s_", g_TextEdit.GetMessage());
|
||
g_TextEdit.DrawText(strChat, &rcRect, DT_LEFT | DT_VCENTER, D3DCOLOR_RGBA(255, 255, 255, 255));
|
||
} else
|
||
{
|
||
g_TextEdit.DrawText(g_TextEdit.GetMessage(), &rcRect, DT_LEFT | DT_VCENTER, D3DCOLOR_RGBA(255, 255, 255, 255));
|
||
}
|
||
}
|
||
|
||
m_ButtonManager.Render(lpD3DDevice);
|
||
}
|
||
|
||
void CHumanStreetStall::DeleteTradeItem()
|
||
{
|
||
for(int j = 0; j < 8; j++)
|
||
{
|
||
for(int i = 0; i < 8; i++)
|
||
{
|
||
g_ClientMain.m_csStatus.m_aryStreetTrade[j][i] = ITEM_EMPTY;
|
||
}
|
||
}
|
||
|
||
list<CItemInstance *>::iterator it;
|
||
CItemInstance *lpDelete;
|
||
for(it = g_ClientMain.m_csStatus.m_lstStreetTrade.begin(); it != g_ClientMain.m_csStatus.m_lstStreetTrade.end();)
|
||
{
|
||
lpDelete = (*it);
|
||
it = g_ClientMain.m_csStatus.m_lstStreetTrade.erase(it);
|
||
delete lpDelete;
|
||
}
|
||
g_ClientMain.m_csStatus.m_lstStreetTrade.clear();
|
||
}
|
||
|
||
void CHumanStreetStall::InitStreetStall(unsigned long dwChrID, char *lpstrStreetName)
|
||
{
|
||
m_dwMarketOwnerID = dwChrID;
|
||
|
||
if(m_dwMarketOwnerID == g_ClientMain.m_dwMyChrID)
|
||
{
|
||
if(!lpstrStreetName)
|
||
{
|
||
CGUIMessageBox *lpMessageBox = new CGUIMessageBox;
|
||
lpMessageBox->Create(g_StringTable.m_strString[591], MB_STRING | MB_CONFIRM | MB_CANCEL | MB_EXIT);
|
||
lpMessageBox->SetResult(&m_dwNameResult);
|
||
lpMessageBox->SetValue((char *)&m_strMarketName);
|
||
lpMessageBox->SetEnableEnter(FALSE);
|
||
} else
|
||
{
|
||
strcpy(m_strOwner, lpstrStreetName);
|
||
|
||
g_TextEdit.AddStallChatMessage(g_StringTable.m_strString[592], g_ClientMain.m_dwMyChrID, 128);
|
||
g_TextEdit.AddStallChatMessage(g_StringTable.m_strString[593], g_ClientMain.m_dwMyChrID, 0);
|
||
}
|
||
} else
|
||
{
|
||
strcpy(m_strOwner, lpstrStreetName);
|
||
|
||
char strText[MAX_PATH];
|
||
sprintf(strText, g_StringTable.m_strString[594], m_strOwner);
|
||
g_TextEdit.AddStallChatMessage(strText, g_ClientMain.m_dwMyChrID, 128);
|
||
g_TextEdit.AddStallChatMessage(g_StringTable.m_strString[595], g_ClientMain.m_dwMyChrID, 0);
|
||
}
|
||
|
||
if(lpstrStreetName)
|
||
{
|
||
if(strcmp(lpstrStreetName, ""))
|
||
{
|
||
g_TextEdit.m_dwEditMode = EDITMODE_STALL;
|
||
g_TextEdit.InitMessage();
|
||
g_TextEdit.SetFocus();
|
||
}
|
||
}
|
||
}
|
||
|
||
BOOL CHumanStreetStall::SelectItem()
|
||
{
|
||
BOOL bPickItem = FALSE;
|
||
const Item::ItemInfo *lpItemInfo;
|
||
|
||
///// â<><C3A2> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ʈ <20><> <20><><EFBFBD><EFBFBD>
|
||
list<CItemInstance *>::iterator it;
|
||
for(it = g_ClientMain.m_csStatus.m_lstStreetTrade.begin(); it != g_ClientMain.m_csStatus.m_lstStreetTrade.end();)
|
||
{
|
||
lpItemInfo = &(*it)->GetItemInfo();
|
||
|
||
(*it)->m_wPutX = m_rcWindowSize.left + 8 + 26 * (*it)->m_lpItemBase->GetPos().GetXIndex() + (((lpItemInfo->m_DetailData.m_cXSize * 26 - 1) - (*it)->m_lpSprite->GetSizeX()) / 2);
|
||
(*it)->m_wPutY = m_rcWindowSize.top + 73 + 26 * (*it)->m_lpItemBase->GetPos().GetYIndex() + (((lpItemInfo->m_DetailData.m_cYSize * 26 - 1) - (*it)->m_lpSprite->GetSizeY()) / 2);
|
||
if(!g_ClientMain.m_lpPickItem && g_DeviceInput.GetIsLeftMouseDown() && (*it)->IsOverMouse())
|
||
{
|
||
g_ClientMain.SetPickItem((*it));
|
||
g_ClientMain.m_csStatus.CheckStreetTradeField(0, g_ClientMain.m_lpPickItem);
|
||
it = g_ClientMain.m_csStatus.m_lstStreetTrade.erase(it);
|
||
|
||
bPickItem = TRUE;
|
||
} else
|
||
{
|
||
it++;
|
||
}
|
||
}
|
||
|
||
if(bPickItem)
|
||
{
|
||
return TRUE;
|
||
}
|
||
|
||
return FALSE;
|
||
}
|