// 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)) { // ¹Ù·Î ³õ´Â´Ù. 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 { // ¼±Åÿ¡ ¹Ù·Î ´ã±â 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]) { // Äü½½·Ô¿¡ ¾ÆÀÌÅÛÀÌ ¾øÀ»¶§ 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) { // ±×³É ³»·Á ³õ´Â´Ù. 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) { // ½º¿ÒÀÌ ÀϾ´Ù. but TakeItemÀ¸·Î º¸³½´Ù. 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) { // Æ÷¼ÇÀ» »ç¿ë 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; } }