📄 quickmanager.cpp
字号:
// QuickManager.cpp: implementation of the CQuickManager class.
//
//////////////////////////////////////////////////////////////////////
#include "stdafx.h"
#include "QuickManager.h"
#include "ObjectManager.h"
#include "QuickDialog.h"
#include "InventoryExDialog.h"
#include "GameIn.h"
#include "QuickItem.h"
#include "./Interface/cWindowManager.h"
#include "./Interface/cScriptManager.h"
#include "ItemManager.h"
#include "MugongManager.h"
#include "SkillManager_Client.h"
#include "./Interface/cIcon.h"
#include "./Input/UserInput.h"
#include "ChatManager.h"
#include "AbilityManager.h"
#include "SuryunDialog.h"
//////////////////////////////////////////////////////////////////////
// Construction/Destruction
//////////////////////////////////////////////////////////////////////
GLOBALTON(CQuickManager);
CQuickManager::CQuickManager()
{
m_IconIndexCreator.Init(MAX_ITEMICON_NUM, IG_QUICKITEM_STARTINDEX);
m_QuickHashForID.Initialize(100);
m_selectedQuickAbsPos = 0;
}
CQuickManager::~CQuickManager()
{
Release();
m_IconIndexCreator.Release();
}
//!---------------------------------------
// 家胶 酒捞能 傅农 荐沥 &
// 窜绵芒 酒捞能 昏力
void CQuickManager::RemoveQuickItemReal(POSTYPE SrcPos, WORD wSrcItemIdx)
{
// 努扼牢攫飘 酒捞袍 QPOSITION档 函版
// 努扼牢攫飘 酒捞袍,公傍 QPOSITION档 函版秦!!
POSTYPE QuickPos = 0;
switch(GetTableIdxPosition(SrcPos))
{
case eItemTable_Inventory:
case eItemTable_Weared:
{
CItem * item = GAMEIN->GetInventoryDialog()->GetItemForIdx(SrcPos);
ASSERT(item);
QuickPos = item->GetQuickPosition();
item->SetQuickPosition(0);
}
break;
case eItemTable_Mugong:
{
CMugongBase * pMugong = GAMEIN->GetMugongDialog()->GetMugongAbs(SrcPos);
ASSERT(pMugong);
QuickPos = pMugong->GetQuickPosition();
pMugong->SetQuickPosition(0);
}
break;
case eItemTable_Ability:
{
CAbility* pAbility = HERO->GetAbilityGroup()->GetAbility( wSrcItemIdx - MIN_ABILITY_INDEX );
QuickPos = pAbility->GetQuickPosition();
ABILITYMGR->SetAbilityQuickPosition( wSrcItemIdx - MIN_ABILITY_INDEX, 0, HERO->GetAbilityGroup() );
}
break;
default:
{
ASSERT(0);
}
}
RemQuickItem(QuickPos);
}
//!---------------------------------------
// 窜绵芒 酒捞能父 昏力 &
// 酒捞能 皋葛府 秦力 =>副府令
void CQuickManager::RemQuickItem(POSTYPE QuickPos)
{
CQuickItem * quickOut = NULL;
GAMEIN->GetQuickDialog()->RemQuickItem(QuickPos, (cIcon**)&quickOut);
ReleaseQuickItem(quickOut);
}
void CQuickManager::OverlapCheck(POSTYPE SrcPos)
{
POSTYPE QuickPos = 0;
switch(GetTableIdxPosition(SrcPos))
{
case eItemTable_Inventory:
case eItemTable_Weared:
{
CItem * item = GAMEIN->GetInventoryDialog()->GetItemForIdx(SrcPos);
if( !item )
{
ASSERT(0);
return;
}
QuickPos = item->GetQuickPosition();
if( QuickPos == 0 ) return;
}
break;
case eItemTable_Mugong:
{
CMugongBase * pMugong = GAMEIN->GetMugongDialog()->GetMugongAbs(SrcPos);
if( !pMugong )
{
ASSERT(0);
return;
}
QuickPos = pMugong->GetQuickPosition();
if( QuickPos == 0 ) return;
}
break;
case eItemTable_Ability:
{
CAbilityIcon* pAbilityIcon = GAMEIN->GetSuryunDialog()->GetAbilityIconAbs(SrcPos);
if( !pAbilityIcon )
{
ASSERT(0);
return;
}
QuickPos = pAbilityIcon->GetQuickPosition();
if( QuickPos == 0 ) return;
}
break;
default:
{
ASSERT(0);
}
}
CQuickItem * quickOut = NULL;
GAMEIN->GetQuickDialog()->RemQuickItem(QuickPos, (cIcon**)&quickOut);
if(quickOut)
ReleaseQuickItem(quickOut);
}
void CQuickManager::MoveQuickItemReal( POSTYPE FromSrcPos, WORD wFromSrcItemIdx, POSTYPE FromQuickPos, POSTYPE ToSrcPos, WORD wToSrcItemIdx, POSTYPE ToQuickPos)
{
// 俊矾 眉农!!
GAMEIN->GetQuickDialog()->MoveQuickItem(FromQuickPos, ToQuickPos);
}
void CQuickManager::NetworkMsgParse(BYTE Protocol,void* pMsg)
{
switch(Protocol)
{
case MP_QUICK_ADD_ACK:
{
MSG_QUICK_ADD_ACK * msg = (MSG_QUICK_ADD_ACK *)pMsg;
//棵副妨绰 酒捞袍狼 捞傈 狞酒捞袍捞 乐栏搁 瘤框
OverlapCheck(msg->SrcPos);
AddQuickItemReal(msg->QuickPos, msg->SrcPos, msg->SrcItemIdx, msg->OldSrcPos, msg->OldSrcItemIdx);
}
break;
case MP_QUICK_MOVE_ACK:
{
MSG_QUICK_MOVE_ACK * msg = (MSG_QUICK_MOVE_ACK *)pMsg;
MoveQuickItemReal( msg->FromSrcPos, msg->wFromSrcItemIdx, msg->FromQuickPos, msg->ToSrcPos, msg->wToSrcItemIdx, msg->ToQuickPos);
}
break;
case MP_QUICK_REM_ACK:
{
MSG_QUICK_REM_ACK * pmsg = (MSG_QUICK_REM_ACK *)pMsg;
RemoveQuickItemReal(pmsg->SrcPos, pmsg->SrcItemIdx);
}
break;
case MP_QUICK_ADD_NACK:
{
MSG_WORD * msg = (MSG_WORD *)pMsg;
//盲泼皋技瘤肺 贸府 confirm
ASSERTMSG(0, "窜绵芒俊 吝汗登芭唱 荤侩且荐 绝绰 酒捞袍涝聪促.");
}
break;
case MP_QUICK_REM_NACK:
{
ASSERT(0);
}
break;
case MP_QUICK_MOVE_NACK:// not used
{
ASSERT(0);
}
break;
}
}
void CQuickManager::UseQuickItem(POSTYPE pos)
{
if( !HERO ) return;
CQuickDialog* pQuickDlg = GAMEIN->GetQuickDialog();
if( !pQuickDlg ) return;
pQuickDlg->OnSelectAction( pos );
// m_selectedQuickAbsPos = QUICK_STARTPOSITION + pQuickDlg->GetSelectedPage() * MAX_QUICKITEMPERSHEET_NUM + pos;
m_selectedQuickAbsPos = TP_QUICK_START + pQuickDlg->GetSelectedPage() * TABCELL_QUICK_NUM + pos;
CQuickItem * pQuickItem = pQuickDlg->GetQuickItem(m_selectedQuickAbsPos);
if(!pQuickItem) return;
switch(GetTableIdxPosition(pQuickItem->GetSrcPosition()))
{
case eItemTable_Inventory:
case eItemTable_Weared:
{
CItem * pItem = GAMEIN->GetInventoryDialog()->GetItemForIdx(pQuickItem->GetSrcPosition());
GAMEIN->GetInventoryDialog()->UseItem(pItem);
return;
}
break;
case eItemTable_Mugong:
{
if( HERO->GetCharacterTotalInfo()->bVisible == FALSE ) return; //救焊老订 公傍给敬促.
// 公傍 // 辑滚肺 QuickPosition阑 朝覆 : 辑滚俊辑 贸府
//m_selectedQuickAbsPos = selectedQuickAbsPos;
// 胶懦荤侩
// 胶懦狼 辆幅俊 蝶扼 3啊瘤肺 备盒等促
// 1. 鸥百捞 乐绰 胶懦 ( 老馆胶懦
// 2. 鸥百捞 绝绰 胶懦 ( 规绢胶懦
// 3. 鸥百捞 官蹿牢 胶懦 ( 瘤汾胶懦
CActionTarget Target;
/*
int abspos = GetSelectedQuickAbsPos();
CQuickItem* pQuickItem;
pQuickItem = pQuickDlg->GetQuickItem(abspos);*/
CSkillInfo* pInfo = SKILLMGR->GetSkillInfo(pQuickItem->GetSrcIdx());
if(pInfo && pInfo->GetSkillInfo()->TargetKind == 0) // 惑措
{
CObject * targetObj = OBJECTMGR->GetSelectedObject();
if( targetObj )
{
Target.InitActionTarget(targetObj,NULL);
HERO->EnableAutoAttack(&Target);
}
else
{
CHATMGR->AddMsg( CTC_SYSMSG, CHATMGR->GetChatMsg(400) );
return;
}
}
else if(pInfo && pInfo->GetSkillInfo()->TargetKind == 1) // 磊脚
{
Target.InitActionTarget(HERO,NULL); // 磊脚阑 鸥百栏肺
}
SKILLMGR->OnSkillCommand( HERO, &Target, TRUE );
}
break;
case eItemTable_Ability:
{
CAbility* pAbility = HERO->GetAbilityGroup()->GetAbility( pQuickItem->GetSrcIdx() - MIN_ABILITY_INDEX );
if( pAbility == NULL )
return ;
//焊救.... 辑滚俊辑 茄锅歹 眉农窍绊 乐阑鳖? //security
pAbility->Use();
}
break;
default:
{
ASSERT(0);
}
}
}
//void CQuickManager::InitQuickItem(POSTYPE QuickPos, POSTYPE SrcPos, WORD SrcItemIdx)
//{
//}
BOOL CQuickManager::AddQuickItemReal(POSTYPE QuickPos, POSTYPE SrcPos, WORD SrcItemIdx, POSTYPE OldSrcPos, WORD OldSrcItemIdx)
{
// ASSERT( QuickPos );
// if( QuickPos == 0 ) return FALSE;
CBaseItem * pIcon = NULL;
switch(GetTableIdxPosition(SrcPos))
{
case eItemTable_Inventory:
case eItemTable_Weared:
{
CItem * pItem = GAMEIN->GetInventoryDialog()->GetItemForIdx(SrcPos);
ASSERT(pItem);
if(pItem == NULL)
return FALSE;
pItem->SetQuickPosition(QuickPos);
pIcon = pItem;
}
break;
case eItemTable_Mugong:
{
CMugongBase * pMugong = GAMEIN->GetMugongDialog()->GetMugongAbs(SrcPos);
ASSERT(pMugong);
if(!pMugong) return FALSE;
pMugong->SetQuickPosition(QuickPos);
pIcon = pMugong;
}
break;
case eItemTable_Ability:
{
CAbilityIcon* pAbilityIcon = GAMEIN->GetSuryunDialog()->GetAbilityIconAbs(SrcPos);
ASSERT(pAbilityIcon);
if(!pAbilityIcon) return FALSE;
ABILITYMGR->SetAbilityQuickPosition(SrcItemIdx - MIN_ABILITY_INDEX,QuickPos,HERO->GetAbilityGroup() );
pIcon = pAbilityIcon;
}
break;
default:
{
return FALSE;
}
}
if(OldSrcItemIdx)
{
RemoveQuickItemReal(OldSrcPos, OldSrcItemIdx);
}
CQuickItem * pNewQItem = NewQuickItem(pIcon);
pNewQItem->SetPosition(QuickPos);
GAMEIN->GetQuickDialog()->AddQuickItem(QuickPos, pNewQItem);
/*
if( GAMEIN->GetQuickDialog()->AddQuickItem(QuickPos, pNewQItem) == FALSE )
{
WINDOWMGR->AddListDestroyWindow( pNewQItem );
}
*/
return TRUE;
}
CQuickItem * CQuickManager::NewQuickItem(CBaseItem * pSrcIcon)
{
CQuickItem * pQuickItem;
pQuickItem = new CQuickItem(pSrcIcon);
pQuickItem->SetDurability(GAMEIN->GetInventoryDialog()->GetTotalItemDurability(pSrcIcon->GetItemIdx()));
pQuickItem->Init(0,0,DEFAULT_ICONSIZE,DEFAULT_ICONSIZE, NULL, m_IconIndexCreator.GenerateIndex());
GetImage(pQuickItem);
WINDOWMGR->AddWindow(pQuickItem);
m_QuickHashForID.Add(pQuickItem, pQuickItem->GetID());
return pQuickItem;
/*
if(pIcon->wIconIdx <= 0) return NULL;
if(!(item = GetQuickItem(pIcon->dwDBIdx)))
{
item = new CQuickItem;
item->Init()
item->SetIconIdx(pIcon->wIconIdx); // taiyo modified;
item->SetDBIdx(pIcon->dwDBIdx); // 家胶螟 DB牢郸胶
item->SetLinkPosition(pIcon->Position);
if(GetIconKind(pIcon->wIconIdx) == eITEM_ICON)
if(GetItemKind(pIcon->wIconIdx) & eYOUNGYAK_ITEM)
{
CItem * pitem = GAMEIN->GetInventoryDialog()->GetItemForIdx(pIcon->Position);
item->SetDurability(pitem->GetDurability());
}
//item->SetPosition(pIcon->Position); // 家胶螟 困摹
item->Init(0,0,DEFAULT_ICONSIZE,DEFAULT_ICONSIZE, NULL, m_IconIndexCreator.GenerateIndex());
GetImage(item);
//item->SetAlpha(80);
WINDOWMGR->AddWindow(item);
}
*/
}
CQuickItem* CQuickManager::GetQuickItem(DWORD dwDBIdx)
{
CQuickItem* pItem;
pItem = m_QuickHashForID.GetData(dwDBIdx);
return pItem;
}
void CQuickManager::Release()
{
CQuickItem* pQuick;
m_QuickHashForID.SetPositionHead();
while(pQuick = m_QuickHashForID.GetData())
{
ReleaseQuickItem(pQuick);
}
m_QuickHashForID.RemoveAll();
}
void CQuickManager::RefreshQickItem()
{
CQuickItem* pQuick;
m_QuickHashForID.SetPositionHead();
while(pQuick = m_QuickHashForID.GetData())
{
if(!ITEMMGR->IsOptionItem(pQuick->GetSrcIdx(), pQuick->GetSrcDurability()) && ITEMMGR->IsDupItem(pQuick->GetSrcIdx()))
{
pQuick->SetDurability(GAMEIN->GetInventoryDialog()->GetTotalItemDurability(pQuick->GetSrcIdx()));
}
}
}
void CQuickManager::ReleaseQuickItem(CQuickItem * quick)
{
if( quick == NULL )
{
ASSERT(0);
return;
}
m_QuickHashForID.Remove(quick->GetID());
m_IconIndexCreator.ReleaseIndex(quick->GetID());
WINDOWMGR->AddListDestroyWindow( quick );
}
void CQuickManager::GetImage( CQuickItem * pQuickItem )
{
cImage lowImage;
cImage highImage;
eQUICKICON_KIND eQK = GetIconKind(pQuickItem->GetSrcIdx());
if( eQK == eITEM_ICON)
{
SCRIPTMGR->GetImage( ITEMMGR->GetItemInfo(pQuickItem->GetSrcIdx())->Image2DNum, &lowImage, PFT_ITEMPATH );
pQuickItem->SetImage2(&lowImage, NULL);
}
else if( eQK == eMUGONG_ICON )
{
CSkillInfo* pSkillInfo = SKILLMGR->GetSkillInfo(pQuickItem->GetSrcIdx());
if(pSkillInfo == NULL)
{
ASSERT(0);
return;
}
if( pSkillInfo->GetLowImage() != -1 )
SCRIPTMGR->GetImage( pSkillInfo->GetLowImage(), &lowImage, PFT_MUGONGPATH );
if( pSkillInfo->GetHighImage() != -1 )
SCRIPTMGR->GetImage( pSkillInfo->GetHighImage(), &highImage, PFT_MUGONGPATH );
pQuickItem->SetImage2(&lowImage, &highImage);
}
else if( eQK == eABILITY_ICON )
{
CAbility* pAbility = HERO->GetAbilityGroup()->GetAbility( pQuickItem->GetSrcIdx() - MIN_ABILITY_INDEX );
if( pAbility == NULL )
{
ASSERT(0);
return;
}
SCRIPTMGR->GetImage( pAbility->GetAbilityInfo()->GetInfo()->Ability_IconIndex, &lowImage, PFT_ABILITYPATH );
pQuickItem->SetImage2( &lowImage, NULL );
}
else
{
ASSERT(0);
}
}
BOOL CQuickManager::CanEquip(cIcon * pIcon)
{
if(pIcon->GetType() == WT_QUICKITEM)
{
return TRUE;
}
else if(pIcon->GetType() == WT_ITEM)
{
CItem * pItem = (CItem *)pIcon;
eITEM_KINDBIT bits = pItem->GetItemKind();
if(bits & eYOUNGYAK_ITEM)
{
return TRUE;
}
else if(bits & eMUGONG_ITEM)
{
if( ITEMMGR->CanConvertToMugong(pItem->GetItemIdx()) )
return TRUE;
else
{
CHATMGR->AddMsg( CTC_SYSMSG, CHATMGR->GetChatMsg(352) );
return FALSE;
}
}
else if(bits & eEQUIP_ITEM)
{
if( ITEMMGR->CanEquip(pItem->GetItemIdx()) )
return TRUE;
else
{
CHATMGR->AddMsg( CTC_SYSMSG, CHATMGR->GetChatMsg(352) );
return FALSE;
}
}
else if(bits & eEXTRA_ITEM)
{
CHATMGR->AddMsg( CTC_SYSMSG, CHATMGR->GetChatMsg(352) );
return FALSE;
}
return FALSE;
}
else if(pIcon->GetType() == WT_MUGONG ||
pIcon->GetType() == WT_JINBUB )
{
CMugongBase * pMugong = (CMugongBase *)pIcon;
if( MUGONGMGR->CanUse(pMugong) != CMugongManager::eMCUR_SungZero )
return TRUE;
else
{
CHATMGR->AddMsg( CTC_SYSMSG, CHATMGR->GetChatMsg(623) );
return FALSE;
}
}
else if(pIcon->GetType() == WT_ABILITYICON)
{
CAbilityIcon* pAbil = (CAbilityIcon*)pIcon;
if(pAbil->GetState() != eAIS_Usable
|| ( pAbil->GetAbilityInfo()->GetUseType() == eAUT_Passive
&& pAbil->GetAbilityInfo()->GetKind() != eAGK_Job ) )
{
CHATMGR->AddMsg( CTC_SYSMSG, CHATMGR->GetChatMsg(352) );
return FALSE;
}
return TRUE;
}
CHATMGR->AddMsg( CTC_SYSMSG, CHATMGR->GetChatMsg(352) );
return FALSE;
}
BOOL CQuickManager::CheckQPosForItemIdx( WORD ItemIdx )
{
CQuickItem* pQuick;
m_QuickHashForID.SetPositionHead();
while(pQuick = m_QuickHashForID.GetData())
{
if( pQuick->GetSrcIdx() == ItemIdx )
return FALSE;
}
return TRUE;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -