Files
Client/GameTools/NeoRylClient/HumanQuick.cpp
LGram16 dd97ddec92 Restructure repository to include all source folders
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>
2025-11-29 20:17:20 +09:00

410 lines
16 KiB
C++
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
// HumanQuick.cpp: implementation of the CHumanQuick class.
//
//////////////////////////////////////////////////////////////////////
#include "ClientMain.h"
#include "HumanQuick.h"
#include "WinInput.h"
#include "GUITextEdit.h"
#include "Skill\SkillMgr.h"
//////////////////////////////////////////////////////////////////////
// Construction/Destruction
//////////////////////////////////////////////////////////////////////
CHumanQuick::CHumanQuick()
{
}
CHumanQuick::~CHumanQuick()
{
}
BOOL CHumanQuick::Init(unsigned short x, unsigned short y)
{
CSprite *lpSprite;
lpSprite = new CSprite;
lpSprite->Create(x, y, 0, 0, 40, 252, g_ClientMain.m_lpInterface->m_lstTexture[26]);
m_lstSprite.push_back(lpSprite);
lpSprite = new CSprite;
lpSprite->Create(x, y + 250, 82, 136, 120, 167, g_ClientMain.m_lpInterface->m_lstTexture[26]);
m_lstSprite.push_back(lpSprite);
CGUIButton *lpButton;
lpButton = new CGUIButton;
lpButton->m_nMethod = BUTTON_SIMPLECHECK;
lpButton->m_lpNormalButton = new CSprite;
lpButton->m_lpNormalButton->Create(0, 38, 206, 0, 244, 21, g_ClientMain.m_lpInterface->m_lstTexture[26]);
lpButton->m_lpClickMouseButton = new CSprite;
lpButton->m_lpClickMouseButton->Create(0, 38, 206, 21, 244, 42, g_ClientMain.m_lpInterface->m_lstTexture[26]);
lpButton->SetTooltip(&m_TooltipManager, g_StringTable.m_strString[198]);
lpButton->SetMove(x, y);
m_ButtonManager.AddButton(lpButton);
lpButton = new CGUIButton;
lpButton->m_nMethod = BUTTON_SIMPLE;
lpButton->m_lpNormalButton = new CSprite;
lpButton->m_lpNormalButton->Create(0, 250, 206, 42, 244, 64, g_ClientMain.m_lpInterface->m_lstTexture[26]);
lpButton->m_lpClickMouseButton = new CSprite;
lpButton->m_lpClickMouseButton->Create(0, 250, 206, 65, 244, 87, g_ClientMain.m_lpInterface->m_lstTexture[26]);
lpButton->SetTooltip(&m_TooltipManager, g_StringTable.m_strString[199]);
lpButton->SetMove(x, y);
m_ButtonManager.AddButton(lpButton);
m_dwWindowKind = WINDOW_FIX;
m_rcWindowSize.left = x; m_rcWindowSize.top = y;
m_rcWindowSize.right = x + 40; m_rcWindowSize.bottom = y + 280;
m_rcMoveEdge.left = x; m_rcMoveEdge.top = y;
m_rcMoveEdge.right = x + 40; m_rcMoveEdge.bottom = y + 280;
InitValue();
return TRUE;
}
void CHumanQuick::InitValue(void)
{
}
BOOL CHumanQuick::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;
}
}
if(g_CharacterData.m_lstCharData[g_CharacterData.m_nFocusCharacter]->m_bStillCasting) return TRUE;
if(g_ClientMain.m_bSimpleMode)
{
m_ButtonManager.m_lstButton[1]->ShowButton(TRUE);
m_lstSprite[1]->SetPosition(m_rcWindowSize.left, m_rcWindowSize.top + 272);
} else
{
m_ButtonManager.m_lstButton[1]->ShowButton(FALSE);
m_lstSprite[1]->SetPosition(m_rcWindowSize.left, m_rcWindowSize.top + 250);
}
m_ButtonManager.Update();
m_TooltipManager.Update();
if(!g_TextEdit.IsFocus() && g_DeviceInput.KeyDown('Z'))
{
g_ClientMain.m_dwStartQuickSlot = 0;
} else if(!g_TextEdit.IsFocus() && g_DeviceInput.KeyDown('X'))
{
g_ClientMain.m_dwStartQuickSlot = 5;
}
if(g_DeviceInput.InRect(m_rcWindowSize.left + 0, m_rcWindowSize.top + 38, m_rcWindowSize.left + 38, m_rcWindowSize.top + 59) && g_DeviceInput.GetIsLeftMouseDown())
{
if(g_ClientMain.m_dwStartQuickSlot)
g_ClientMain.m_dwStartQuickSlot = 0;
else
g_ClientMain.m_dwStartQuickSlot = 5;
return TRUE;
} else if(m_ButtonManager.m_lstButton[1]->m_nState == BUTTON_CLICK)
{
g_ClientMain.m_bSimpleMode = FALSE;
return TRUE;
}
if(g_CharacterData.m_lstCharData[g_CharacterData.m_nFocusCharacter]->GetChantFlag(26))
return TRUE;
if(g_DeviceInput.InRect(m_rcWindowSize.left + 3, m_rcWindowSize.top + 3, m_rcWindowSize.left + 35, m_rcWindowSize.top + 35) && g_DeviceInput.GetIsLeftMouseDown() &&
g_ClientMain.m_lpPickItem && g_ClientMain.m_lpPickItem->m_bSkill)
{
for(int i = 0; i < 10; i++)
{
if(!g_ClientMain.m_csStatus.m_lstQuickSlot[i])
{
if((g_ClientMain.m_lpPickItem->m_lpItemBase->GetPos().m_cIndex == i) && (g_ClientMain.m_lpPickItem->GetItemPos() == ClientSocket::ItemPos_QSlot))
{
// <20>ٷ<EFBFBD> <20><><EFBFBD>´<EFBFBD>.
g_ClientMain.m_csStatus.m_lstQuickSlot[i] = g_ClientMain.m_lpPickItem;
g_ClientMain.m_csStatus.m_lstQuickSlot[i]->SetItemPos(ClientSocket::ItemPos_QSlot);
g_ClientMain.m_csStatus.m_lstQuickSlot[i]->SetPos(i);
g_ClientMain.SetPickItem(NULL);
g_ClientMain.m_Network.SetChant(g_ClientMain.m_csStatus.m_lstQuickSlot[i]);
g_ClientMain.m_csStatus.SetActivateSkill(g_ClientMain.m_csStatus.m_lstQuickSlot[i]);
} else
{
// <20><><EFBFBD>ÿ<EFBFBD> <20>ٷ<EFBFBD> <20><><EFBFBD><EFBFBD>
g_ClientMain.m_Network.SendQuickSlotMove(g_ClientMain.m_lpPickItem, ClientSocket::ItemPos_QSlot, i, 0);
}
/* g_ClientMain.m_csStatus.m_lstQuickSlot[i] = g_ClientMain.m_lpPickItem;
g_ClientMain.m_csStatus.m_lstQuickSlot[i]->m_dwItemPos = ClientSocket::ItemPos_QSlot;
g_ClientMain.m_csStatus.m_lstQuickSlot[i]->m_lpItemBase->m_ItemInfo.m_nItemIndex.m_cIndex = i;
g_ClientMain.SetPickItem(NULL);
g_ClientMain.m_csStatus.m_lpQuickSelected = g_ClientMain.m_csStatus.m_lstQuickSlot[i];*/
return TRUE;
}
}
}
for(int i = 0; i < 5; i++)
{
if(g_DeviceInput.InRect(3, 162 + i * 38, 35, 162 + 32 + i * 38))
{
if(g_DeviceInput.GetIsLeftMouseDown())
{
if(!g_ClientMain.m_csStatus.m_lstQuickSlot[g_ClientMain.m_dwStartQuickSlot + i])
{ // <20><><EFBFBD><EFBFBD><EFBFBD>Կ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
if(g_ClientMain.m_lpPickItem)
{
Item::ItemPos pItemIndex;
pItemIndex.m_cIndex = g_ClientMain.m_dwStartQuickSlot + i;
pItemIndex.m_cPos = ClientSocket::ItemPos_QSlot;
if(g_ClientMain.m_lpPickItem->m_lpItemBase->GetPos() == pItemIndex)
{ // <20>׳<EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD>´<EFBFBD>.
g_ClientMain.m_csStatus.m_lstQuickSlot[pItemIndex.m_cIndex] = g_ClientMain.m_lpPickItem;
g_ClientMain.m_csStatus.m_lstQuickSlot[pItemIndex.m_cIndex]->SetItemPos(ClientSocket::ItemPos_QSlot);
g_ClientMain.m_csStatus.m_lstQuickSlot[pItemIndex.m_cIndex]->SetPos(pItemIndex.m_cIndex);
g_ClientMain.SetPickItem(NULL);
} else if(g_ClientMain.m_lpPickItem->m_bSkill)
{
g_ClientMain.m_Network.SendQuickSlotMove(g_ClientMain.m_lpPickItem, ClientSocket::ItemPos_QSlot, pItemIndex.m_cIndex);
} else if(g_ClientMain.m_lpPickItem->m_lpItemBase->IsSet(Item::DetailData::QUICKSLOT_IN))
{
g_ClientMain.m_Network.SendQuickSlotMove(g_ClientMain.m_lpPickItem, ClientSocket::ItemPos_QSlot, pItemIndex.m_cIndex);
}
return TRUE;
}
} else
{
if(g_ClientMain.m_lpPickItem)
{
if(g_ClientMain.m_lpPickItem->GetItemPos() == ClientSocket::ItemPos_QSlot)
{
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>Ͼ<CFBE><EEB3AD>. but TakeItem<65><6D><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>.
g_ClientMain.m_Network.SendQuickSlotMove(g_ClientMain.m_lpPickItem, ClientSocket::ItemPos_QSlot, g_ClientMain.m_dwStartQuickSlot + i);
// g_ClientMain.m_Network.SendTakeItem(g_ClientMain.m_lpPickItem, ClientSocket::ItemPos_QSlot, &pItemIndex);
}
return TRUE;
} else
{
g_ClientMain.SetPickItem(g_ClientMain.m_csStatus.m_lstQuickSlot[g_ClientMain.m_dwStartQuickSlot + i]);
if(g_ClientMain.m_csStatus.m_lstQuickSlot[g_ClientMain.m_dwStartQuickSlot + i] == g_ClientMain.m_csStatus.m_lpQuickSelected)
{
g_ClientMain.m_Network.SetChant(NULL);
g_ClientMain.m_csStatus.SetActivateSkill(NULL);
}
g_ClientMain.m_csStatus.m_lstQuickSlot[g_ClientMain.m_dwStartQuickSlot + i] = NULL;
return TRUE;
}
}
}
if(g_DeviceInput.GetIsRightMouseDown())
{
if(g_ClientMain.m_csStatus.m_lstQuickSlot[g_ClientMain.m_dwStartQuickSlot + i])
{
if(g_ClientMain.m_csStatus.m_lstQuickSlot[g_ClientMain.m_dwStartQuickSlot + i]->m_bSkill)
{
if(g_ClientMain.m_csStatus.m_lstQuickSlot[g_ClientMain.m_dwStartQuickSlot + i]->GetSkillType() == Skill::Type::CHANT &&
g_ClientMain.m_csStatus.m_lpQuickSelected == g_ClientMain.m_csStatus.m_lstQuickSlot[g_ClientMain.m_dwStartQuickSlot + i])
{
g_ClientMain.m_Network.SetChant(NULL);
g_ClientMain.m_csStatus.SetActivateSkill(NULL);
} else
{
g_ClientMain.m_Network.SetChant(g_ClientMain.m_csStatus.m_lstQuickSlot[g_ClientMain.m_dwStartQuickSlot + i]);
g_ClientMain.m_csStatus.SetActivateSkill(g_ClientMain.m_csStatus.m_lstQuickSlot[g_ClientMain.m_dwStartQuickSlot + i]);
}
}
else
UseItem(g_ClientMain.m_csStatus.m_lstQuickSlot[g_ClientMain.m_dwStartQuickSlot + i]);
return TRUE;
}
}
}
}
if(g_ClientMain.m_csStatus.m_lstQuickSlot[g_ClientMain.m_dwStartQuickSlot + 0] && (!g_TextEdit.IsFocus() && g_DeviceInput.KeyDown('1')))
{
if(g_ClientMain.m_csStatus.m_lstQuickSlot[g_ClientMain.m_dwStartQuickSlot + 0]->m_bSkill)
{
if(g_ClientMain.m_csStatus.m_lstQuickSlot[g_ClientMain.m_dwStartQuickSlot + 0]->GetSkillType() == Skill::Type::CHANT &&
g_ClientMain.m_csStatus.m_lpQuickSelected == g_ClientMain.m_csStatus.m_lstQuickSlot[g_ClientMain.m_dwStartQuickSlot + 0])
{
g_ClientMain.m_Network.SetChant(NULL);
g_ClientMain.m_csStatus.SetActivateSkill(NULL);
} else
{
g_ClientMain.m_Network.SetChant(g_ClientMain.m_csStatus.m_lstQuickSlot[g_ClientMain.m_dwStartQuickSlot + 0]);
g_ClientMain.m_csStatus.SetActivateSkill(g_ClientMain.m_csStatus.m_lstQuickSlot[g_ClientMain.m_dwStartQuickSlot + 0]);
}
}
else
UseItem(g_ClientMain.m_csStatus.m_lstQuickSlot[g_ClientMain.m_dwStartQuickSlot + 0]);
return TRUE;
} else if(g_ClientMain.m_csStatus.m_lstQuickSlot[g_ClientMain.m_dwStartQuickSlot + 1] && (!g_TextEdit.IsFocus() && g_DeviceInput.KeyDown('2')))
{
if(g_ClientMain.m_csStatus.m_lstQuickSlot[g_ClientMain.m_dwStartQuickSlot + 1]->m_bSkill)
{
if(g_ClientMain.m_csStatus.m_lstQuickSlot[g_ClientMain.m_dwStartQuickSlot + 1]->GetSkillType() == Skill::Type::CHANT &&
g_ClientMain.m_csStatus.m_lpQuickSelected == g_ClientMain.m_csStatus.m_lstQuickSlot[g_ClientMain.m_dwStartQuickSlot + 1])
{
g_ClientMain.m_Network.SetChant(NULL);
g_ClientMain.m_csStatus.SetActivateSkill(NULL);
} else
{
g_ClientMain.m_Network.SetChant(g_ClientMain.m_csStatus.m_lstQuickSlot[g_ClientMain.m_dwStartQuickSlot + 1]);
g_ClientMain.m_csStatus.SetActivateSkill(g_ClientMain.m_csStatus.m_lstQuickSlot[g_ClientMain.m_dwStartQuickSlot + 1]);
}
}
else
UseItem(g_ClientMain.m_csStatus.m_lstQuickSlot[g_ClientMain.m_dwStartQuickSlot + 1]);
return TRUE;
} else if(g_ClientMain.m_csStatus.m_lstQuickSlot[g_ClientMain.m_dwStartQuickSlot + 2] && (!g_TextEdit.IsFocus() && g_DeviceInput.KeyDown('3')))
{
if(g_ClientMain.m_csStatus.m_lstQuickSlot[g_ClientMain.m_dwStartQuickSlot + 2]->m_bSkill)
{
if(g_ClientMain.m_csStatus.m_lstQuickSlot[g_ClientMain.m_dwStartQuickSlot + 2]->GetSkillType() == Skill::Type::CHANT &&
g_ClientMain.m_csStatus.m_lpQuickSelected == g_ClientMain.m_csStatus.m_lstQuickSlot[g_ClientMain.m_dwStartQuickSlot + 2])
{
g_ClientMain.m_Network.SetChant(NULL);
g_ClientMain.m_csStatus.SetActivateSkill(NULL);
} else
{
g_ClientMain.m_Network.SetChant(g_ClientMain.m_csStatus.m_lstQuickSlot[g_ClientMain.m_dwStartQuickSlot + 2]);
g_ClientMain.m_csStatus.SetActivateSkill(g_ClientMain.m_csStatus.m_lstQuickSlot[g_ClientMain.m_dwStartQuickSlot + 2]);
}
}
else
UseItem(g_ClientMain.m_csStatus.m_lstQuickSlot[g_ClientMain.m_dwStartQuickSlot + 2]);
return TRUE;
} else if(g_ClientMain.m_csStatus.m_lstQuickSlot[g_ClientMain.m_dwStartQuickSlot + 3] && (!g_TextEdit.IsFocus() && g_DeviceInput.KeyDown('4')))
{
if(g_ClientMain.m_csStatus.m_lstQuickSlot[g_ClientMain.m_dwStartQuickSlot + 3]->m_bSkill)
{
if(g_ClientMain.m_csStatus.m_lstQuickSlot[g_ClientMain.m_dwStartQuickSlot + 3]->GetSkillType() == Skill::Type::CHANT &&
g_ClientMain.m_csStatus.m_lpQuickSelected == g_ClientMain.m_csStatus.m_lstQuickSlot[g_ClientMain.m_dwStartQuickSlot + 3])
{
g_ClientMain.m_Network.SetChant(NULL);
g_ClientMain.m_csStatus.SetActivateSkill(NULL);
} else
{
g_ClientMain.m_Network.SetChant(g_ClientMain.m_csStatus.m_lstQuickSlot[g_ClientMain.m_dwStartQuickSlot + 3]);
g_ClientMain.m_csStatus.SetActivateSkill(g_ClientMain.m_csStatus.m_lstQuickSlot[g_ClientMain.m_dwStartQuickSlot + 3]);
}
}
else
UseItem(g_ClientMain.m_csStatus.m_lstQuickSlot[g_ClientMain.m_dwStartQuickSlot + 3]);
return TRUE;
} else if(g_ClientMain.m_csStatus.m_lstQuickSlot[g_ClientMain.m_dwStartQuickSlot + 4] && (!g_TextEdit.IsFocus() && g_DeviceInput.KeyDown('5')))
{
if(g_ClientMain.m_csStatus.m_lstQuickSlot[g_ClientMain.m_dwStartQuickSlot + 4]->m_bSkill)
{
if(g_ClientMain.m_csStatus.m_lstQuickSlot[g_ClientMain.m_dwStartQuickSlot + 4]->GetSkillType() == Skill::Type::CHANT &&
g_ClientMain.m_csStatus.m_lpQuickSelected == g_ClientMain.m_csStatus.m_lstQuickSlot[g_ClientMain.m_dwStartQuickSlot + 4])
{
g_ClientMain.m_Network.SetChant(NULL);
g_ClientMain.m_csStatus.SetActivateSkill(NULL);
} else
{
g_ClientMain.m_Network.SetChant(g_ClientMain.m_csStatus.m_lstQuickSlot[g_ClientMain.m_dwStartQuickSlot + 4]);
g_ClientMain.m_csStatus.SetActivateSkill(g_ClientMain.m_csStatus.m_lstQuickSlot[g_ClientMain.m_dwStartQuickSlot + 4]);
}
}
else
UseItem(g_ClientMain.m_csStatus.m_lstQuickSlot[g_ClientMain.m_dwStartQuickSlot + 4]);
return TRUE;
}
return TRUE;
}
void CHumanQuick::Render(LPDIRECT3DDEVICE8 lpD3DDevice)
{
m_lstSprite[0]->Render(lpD3DDevice);
m_lstSprite[1]->Render(lpD3DDevice);
for(int i = 0; i < 5; i++)
{
if(g_ClientMain.m_csStatus.m_lstQuickSlot[g_ClientMain.m_dwStartQuickSlot + i])
{
if(g_ClientMain.m_csStatus.m_lstQuickSlot[g_ClientMain.m_dwStartQuickSlot + i]->m_bSkill)
{
g_ClientMain.m_csStatus.m_lstQuickSlot[g_ClientMain.m_dwStartQuickSlot + i]->m_wPutX = m_rcWindowSize.left + 3;
g_ClientMain.m_csStatus.m_lstQuickSlot[g_ClientMain.m_dwStartQuickSlot + i]->m_wPutY = m_rcWindowSize.top + 62 + i * 38;
} else
{
g_ClientMain.m_csStatus.m_lstQuickSlot[g_ClientMain.m_dwStartQuickSlot + i]->m_wPutX = m_rcWindowSize.left + 3 + 16 - g_ClientMain.m_csStatus.m_lstQuickSlot[g_ClientMain.m_dwStartQuickSlot + i]->m_lpSprite->GetSizeX() / 2;
g_ClientMain.m_csStatus.m_lstQuickSlot[g_ClientMain.m_dwStartQuickSlot + i]->m_wPutY = m_rcWindowSize.top + 62 + i * 38 + 16 - g_ClientMain.m_csStatus.m_lstQuickSlot[g_ClientMain.m_dwStartQuickSlot + i]->m_lpSprite->GetSizeY() / 2;
}
g_ClientMain.m_csStatus.m_lstQuickSlot[g_ClientMain.m_dwStartQuickSlot + i]->Render(lpD3DDevice);
}
}
if(g_ClientMain.m_csStatus.m_lpQuickSelected)
{
g_ClientMain.m_csStatus.m_lpQuickSelected->m_wPutX = m_rcWindowSize.left + 3;
g_ClientMain.m_csStatus.m_lpQuickSelected->m_wPutY = m_rcWindowSize.top + 3;
g_ClientMain.m_csStatus.m_lpQuickSelected->Render(lpD3DDevice);
}
if(g_ClientMain.m_dwStartQuickSlot)
{
m_ButtonManager.m_lstButton[0]->m_nState = BUTTON_ON;
} else
{
m_ButtonManager.m_lstButton[0]->m_nState = BUTTON_OFF;
}
m_ButtonManager.Render(lpD3DDevice);
}
void CHumanQuick::UseItem(CItemInstance *lpItem)
{
if(g_ClientMain.m_lpInterface && g_ClientMain.m_lpInterface->GetIsTrade()) return;
switch(lpItem->GetItemType())
{
case Item::CItemType::POTION:
if(g_ClientMain.m_csStatus.CheckUsePotion(lpItem))
{
CItemInstance *lpPotion = g_ClientMain.m_csStatus.GetInventoryItemfromID(lpItem->GetProtoTypeID());
if(lpPotion)
{
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
g_ClientMain.m_Network.m_nsNetworkState = NS_USEITEM;
g_ClientMain.m_Network.m_pSocket->CharUseItem(g_ClientMain.m_dwMyChrID, g_ClientMain.m_dwMyChrID, &lpPotion->m_lpItemBase->GetPos());
g_ClientMain.SetPotionCoolDown();
}
}
break;
}
}