📄 quickmanager.cpp
字号:
// QuickManager.cpp: implementation of the CQuickManager class.
//
//////////////////////////////////////////////////////////////////////
#include "stdafx.h"
#include "QuickManager.h"
#include "MapDBMsgParser.h"
#include "Player.h"
#include "UserTable.h"
#include "BattleSystem_Server.h"
//#include "ItemSlot.h"
//#include "ItemContainer.h"
#include "AbilityManager.h"
//////////////////////////////////////////////////////////////////////
// Construction/Destruction
//////////////////////////////////////////////////////////////////////
CQuickManager::CQuickManager()
{
}
CQuickManager::~CQuickManager()
{
}
void CQuickManager::SendErrorMsg( CPlayer * pPlayer, MSG_QUICK_ERROR * msg, int msgSize, int ECode )
{
msg->ECode = ECode;
pPlayer->SendMsg(msg, msgSize);
}
void CQuickManager::SendAckMsg( CPlayer * pPlayer, MSGBASE * msg, int msgSize)
{
pPlayer->SendMsg(msg, msgSize);
}
void CQuickManager::NetworkMsgParse( BYTE Protocol, void* pMsg )
{
MSGBASE * pmsg = (MSGBASE *)pMsg;
CPlayer * pPlayer = (CPlayer *)g_pUserTable->FindUser(pmsg->dwObjectID);
if(!pPlayer) return;
if( BATTLESYSTEM->GetBattle(pPlayer)->GetBattleKind() == eBATTLE_KIND_SURYUN )
{
char buf[128];
sprintf(buf, "荐访厘俊辑 狞器瘤记 皋矫瘤甫 焊陈嚼聪促. character_Idx: %d, Protocol : %d", pmsg->dwObjectID, pmsg->Protocol);
ASSERTMSG(0, buf);
return;
}
switch(Protocol)
{
case MP_QUICK_ADD_SYN:
{
MSG_QUICK_ADD_SYN * msg = (MSG_QUICK_ADD_SYN *)pMsg;
CPlayer * pPlayer = (CPlayer *)g_pUserTable->FindUser(msg->dwObjectID);
if(!pPlayer) return;
if(QUICKMNGR->AddQuickItem(pPlayer, msg->QuickPos, msg->SrcPos, msg->SrcItemIdx, msg->OldSrcPos, msg->OldSrcItemIdx))
{
MSG_QUICK_ADD_ACK msg2;
memcpy(&msg2, msg, sizeof(MSG_QUICK_ADD_SYN));
msg2.Protocol = MP_QUICK_ADD_ACK;
SendAckMsg(pPlayer, &msg2, sizeof(msg2));
}
else
{
MSG_QUICK_ERROR msg;
msg.Category = MP_QUICK;
msg.Protocol = MP_QUICK_ADD_NACK;
msg.dwObjectID = pPlayer->GetID();
SendErrorMsg(pPlayer, &msg, sizeof(msg), 1);
}
}
break;
case MP_QUICK_REM_SYN:
{
MSG_QUICK_REM_SYN * msg = (MSG_QUICK_REM_SYN *)pMsg;
CPlayer * pPlayer = (CPlayer *)g_pUserTable->FindUser(msg->dwObjectID);
if(!pPlayer) return;
if(QUICKMNGR->RemQuickItem(pPlayer, msg->SrcPos, msg->SrcItemIdx))
{
MSG_QUICK_REM_ACK msg2;
memcpy(&msg2, msg, sizeof(MSG_QUICK_REM_SYN));
msg2.Protocol = MP_QUICK_REM_ACK;
SendAckMsg(pPlayer, &msg2, sizeof(msg2));
}
else
{
MSG_QUICK_ERROR msg;
msg.Category = MP_QUICK;
msg.Protocol = MP_QUICK_REM_NACK;
msg.dwObjectID = pPlayer->GetID();
SendErrorMsg(pPlayer, &msg, sizeof(msg), 2);
}
}
break;
case MP_QUICK_MOVE_SYN:
{
MSG_QUICK_MOVE_SYN * msg = (MSG_QUICK_MOVE_SYN *)pMsg;
CPlayer * pPlayer = (CPlayer *)g_pUserTable->FindUser(msg->dwObjectID);
if(!pPlayer) return;
if(QUICKMNGR->MoveQuickItem(pPlayer, msg->FromSrcPos, msg->wFromSrcItemIdx, msg->FromQuickPos, msg->ToSrcPos, msg->wToSrcItemIdx, msg->ToQuickPos))
{
MSG_QUICK_MOVE_ACK msg2;
memcpy(&msg2, msg, sizeof(MSG_QUICK_MOVE_SYN));
msg2.Protocol = MP_QUICK_MOVE_ACK;
SendAckMsg(pPlayer, &msg2, sizeof(msg2));
}
else
{
MSG_QUICK_ERROR msg;
msg.Category = MP_QUICK;
msg.Protocol = MP_QUICK_MOVE_NACK;
msg.dwObjectID = pPlayer->GetID();
SendErrorMsg(pPlayer, &msg, sizeof(msg), 3);
}
}
break;
}
}
BOOL ChangeV(CPlayer * pPlayer, POSTYPE WhatSrcPos, WORD WhatSrcItemIdx, POSTYPE QuickPos)
{
eQUICKICON_KIND quickGroup = GetIconKind(WhatSrcItemIdx);
if(quickGroup == eITEM_ICON)
{
CItemSlot * pSrcSlot = pPlayer->GetSlot(WhatSrcPos);
const ITEMBASE * pItemBase = pSrcSlot->GetItemInfoAbs(WhatSrcPos);
if(pItemBase == 0)
{
ASSERT(0);
return FALSE;
}
if(pItemBase->wIconIdx != WhatSrcItemIdx)
return FALSE;
if(EI_TRUE != pSrcSlot->UpdateItemAbs(pPlayer, WhatSrcPos, 0,0,0,QuickPos,0,UB_QABSPOS))
return FALSE;
// db update
ItemUpdateToDB(pPlayer->GetID(), pItemBase->dwDBIdx, pItemBase->wIconIdx, pItemBase->Durability,
pItemBase->Position, pItemBase->QuickPosition );
}
else if( quickGroup == eMUGONG_ICON )
{
//公傍
MUGONGBASE * pMugongBase = pPlayer->GetMugongBase(WhatSrcPos);
if(pMugongBase == 0)
{
ASSERT(0);
return FALSE;
}
if(pMugongBase->wIconIdx != WhatSrcItemIdx)
{
return FALSE;
}
if(pMugongBase->Sung == 0)
{
return FALSE;
}
pMugongBase->QuickPosition = QuickPos;
// db update
MugongUpdateToDB(pMugongBase,"QUICK");
}
else if( quickGroup == eABILITY_ICON )
{
//To Do : quick position update
ABILITYMGR->SetAbilityQuickPosition(WhatSrcItemIdx-MIN_ABILITY_INDEX, QuickPos, pPlayer->GetAbilityGroup() );
}
else
{
char buf[64] = {0,};
sprintf(buf, "Error! quickGroup : %d", quickGroup);
ASSERTMSG(0, buf);
return FALSE;
}
return TRUE;
}
BOOL CQuickManager::AddQuickItem( CPlayer * pPlayer, POSTYPE QuickPos, POSTYPE srcPos, WORD wSrcItemIdx, POSTYPE OldSrcPos, WORD wOldSrcItemIdx)
{
CInventorySlot* pSlot = (CInventorySlot*)pPlayer->GetSlot( eItemTable_Inventory );
if( GetItemKind( wSrcItemIdx ) == eYOUNGYAK_ITEM )
{
if( pSlot->CheckItemLockForItemIdx( wSrcItemIdx ) == FALSE )
return FALSE;
}
//扁粮俊 乐栏搁 瘤框
if(wOldSrcItemIdx != 0)
{
ChangeV(pPlayer, OldSrcPos, wOldSrcItemIdx, 0);
}
return ChangeV(pPlayer, srcPos, wSrcItemIdx, QuickPos);
}
BOOL CQuickManager::RemQuickItem(CPlayer * pPlayer, POSTYPE SrcPos, WORD wSrcItemIdx)
{
return ChangeV(pPlayer, SrcPos, wSrcItemIdx, 0);
}
BOOL CQuickManager::MoveQuickItem(CPlayer * pPlayer, POSTYPE FromSrcPos, WORD wFromSrcItemIdx, POSTYPE FromQuickPos, POSTYPE ToSrcPos, WORD wToSrcItemIdx, POSTYPE ToQuickPos )
{
if(!ChangeV(pPlayer, FromSrcPos, wFromSrcItemIdx, ToQuickPos))
{
return FALSE;
}
if( wToSrcItemIdx == 0 ) return TRUE;
if(!ChangeV(pPlayer, ToSrcPos, wToSrcItemIdx, FromQuickPos))
{
//rollback
if(!ChangeV(pPlayer, FromSrcPos, wFromSrcItemIdx, FromQuickPos))
ASSERT(0);
return FALSE;
}
return TRUE;
}
/*
QUICKITEM quickItem;
MSG_QUICK_ADD_ACK msg;
// 公傍,酒捞袍 沥焊俊档 持澜
eQUICKICON_KIND quickGroup = GetIconKind(pmsg->wIconIdx);
if(quickGroup == eITEM_ICON)
{
eITEM_KINDBIT bits = GetItemKind(pmsg->wIconIdx);
if(bits & eEQUIP_ITEM || bits & eYOUNGYAK_ITEM)
{
CIconTable * pTable = NULL;
switch(GetTableIdxPosition(pmsg->wSrcAbsPosition))
{
case eItemTable_Inventory:
{
pTable = pPlayer->GetIconTable(eItemTable_Inventory);
}
break;
case eItemTable_Weared:
{
pTable = pPlayer->GetIconTable(eItemTable_Weared);
}
break;
case eItemTable_MunpaWarehouse:
{
pTable = pPlayer->GetIconTable(eItemTable_Weared);
}
break;
default:
{
ASSERT(0);
return;
}
}
ITEMBASE * item = pTable->GetItemInfoAbs(pmsg->wSrcAbsPosition);
if(item->QuickPosition != 0) // 吝汗 殿废 阂啊
{
RemQuickItem(pPlayer, GetTableIdxPosition(pmsg->wSrcAbsPosition), item->QuickPosition);
//goto QI_ADD_FAILED;
}
item->QuickPosition = pmsg->wQuickAbsPosition;
}
else
{
goto QI_ADD_FAILED;
}
}
else
{
// 公傍
MUGONGBASE * pMugong = pPlayer->GetMugongBase(pmsg->wSrcAbsPosition);
if(pMugong->QuickPosition != 0)
{
// 吝汗 殿废 =>. 捞傈芭 瘤框
RemQuickItem(pPlayer, GetTableIdxPosition(pmsg->wSrcAbsPosition), pMugong->QuickPosition);
//goto QI_ADD_FAILED;
}
if(pMugong->Sung == 0)
{
// 0己楼府 公傍篮 殿废 阂啊
goto QI_ADD_FAILED;
}
pMugong->QuickPosition = pmsg->wQuickAbsPosition;
}
quickItem.dwIconIdx = pmsg->wIconIdx;
quickItem.eIGKinds = quickGroup;
quickItem.wAbsPostion = pmsg->wSrcAbsPosition;
pPlayer->SetQuickItem(pmsg->wQuickAbsPosition,&quickItem);
msg.Category = MP_QUICK;
msg.Protocol = MP_QUICK_ADD_ACK;
msg.dwObjectID = pmsg->dwObjectID;
msg.wIconIdx = pmsg->wIconIdx;
msg.wSrcAbsPosition = pmsg->wSrcAbsPosition;
msg.wQuickAbsPosition = pmsg->wQuickAbsPosition;
pPlayer->SendMsg(&msg, sizeof(msg));
return;
QI_ADD_FAILED:
MSG_WORD msgWord;
msgWord.Category = MP_QUICK;
msgWord.Protocol = MP_QUICK_ADD_NACK;
msgWord.dwObjectID = pmsg->dwObjectID;
msgWord.wData = 1;
pPlayer->SendMsg(&msgWord, sizeof(msgWord));
}
void CQuickManager::RemQuickItem(CPlayer * pPlayer, MSG_QUICK_REM_SYN * pmsg)
{
RemQuickItem(pPlayer, pmsg->wTableIdx, pmsg->AbsPosition);
}
void CQuickManager::RemQuickItem(CPlayer * pPlayer, WORD tableIdx, WORD absPosition)
{
// 公傍,酒捞袍 沥焊俊档 持澜
WORD wSrcAbsPosition = 0;
QUICKITEM itemOut;
if(!pPlayer->GetQuickPostion(absPosition,&itemOut))
return;
wSrcAbsPosition = itemOut.wAbsPostion;
switch(itemOut.eIGKinds)
{
case eITEM_ICON:
{
CIconTable * pTable = pPlayer->GetIconTable(tableIdx);
if( !pTable ) return ;
ITEMBASE * item = pTable->GetItemInfoAbs(itemOut.wAbsPostion);
item->QuickPosition = 0;
CharacterItemUpdate(pPlayer->GetID(), item->dwDBIdx, item->wIconIdx, item->Durability, item->Position, item->QuickPosition);
}
break;
case eMUGONG_ICON:
{
MUGONGBASE * pMugong = pPlayer->GetMugongBase(itemOut.wAbsPostion);
pMugong->QuickPosition = 0;
CharacterMugongUpdate(pMugong);
}
break;
default:
{
//not implement
//漂荐
//ASSERT(0);
return;
}
}
PureRemQuickItemAbs(pPlayer, absPosition);
MSG_QUICK_REM_ACK msg;
msg.Category = MP_QUICK;
msg.Protocol = MP_QUICK_REM_ACK;
msg.dwObjectID = pPlayer->GetID();
msg.wQuickAbsPosition = absPosition;
msg.wSrcAbsPosition = wSrcAbsPosition;
pPlayer->SendMsg(&msg, sizeof(msg));
}
void CQuickManager::MoveQuickItem(CPlayer * pPlayer, MSG_QUICK_MOVE_SYN * pmsg)
{
QUICKITEM FromQuickItem, ToQuickItem;
if(!pPlayer->GetQuickPostion(pmsg->wFromAbsPosition,&FromQuickItem))
{
ASSERT(0);
}
if(!pPlayer->GetQuickPostion(pmsg->wToAbsPosition,&ToQuickItem))
{
ASSERT(0);
}
PureUpdateQuickItem(pPlayer, pmsg->wToAbsPosition, FromQuickItem.dwIconIdx, FromQuickItem.eIGKinds, FromQuickItem.wAbsPostion);
PureUpdateQuickItem(pPlayer, pmsg->wFromAbsPosition, ToQuickItem.dwIconIdx, ToQuickItem.eIGKinds, ToQuickItem.wAbsPostion);
MSG_QUICK_MOVE_ACK msg;
msg.Category = MP_QUICK;
msg.Protocol = MP_QUICK_MOVE_ACK;
msg.dwObjectID = pPlayer->GetID();
msg.wFromAbsPosition= pmsg->wFromAbsPosition;
msg.wToAbsPosition = pmsg->wToAbsPosition;
pPlayer->SendMsg(&msg, sizeof(msg));
// 酒捞袍趣篮 公傍狼 QPOSITION阑 官层拎具 窃
// DB绰 救官层林唱?
int tableIdx = 0;
switch((tableIdx = GetTableIdxPosition(FromQuickItem.wAbsPostion)))
{
case eItemTable_Inventory:
case eItemTable_Weared:
{
CIconTable * pFromTable = pPlayer->GetIconTable(tableIdx);
ITEMBASE * FromItem = pFromTable->GetItemInfoAbs(FromQuickItem.wAbsPostion);
if(FromItem&&FromItem->dwDBIdx!=0)
FromItem->QuickPosition = pmsg->wToAbsPosition;
else
{
ASSERT(0);
}
}
break;
case eItemTable_Mugong:
{
MUGONGBASE * FromMugong = pPlayer->GetMugongBase(FromQuickItem.wAbsPostion);
if(FromMugong && FromMugong->dwDBIdx != 0)
FromMugong->QuickPosition = pmsg->wToAbsPosition;
else
{
ASSERT(0);
}
}
break;
default:
{
//ASSERT(0);
return ;
}
}
if(ToQuickItem.dwIconIdx != 0)
switch((tableIdx = GetTableIdxPosition(ToQuickItem.wAbsPostion)))
{
case eItemTable_Inventory:
case eItemTable_Weared:
{
CIconTable * pToTable = pPlayer->GetIconTable(tableIdx);
ITEMBASE * ToItem = pToTable->GetItemInfoAbs(ToQuickItem.wAbsPostion);
if(ToItem&&ToItem->dwDBIdx!=0)
ToItem->QuickPosition = pmsg->wFromAbsPosition;
else
{
ASSERT(0);
}
}
break;
case eItemTable_Mugong:
{
MUGONGBASE * ToMugong = pPlayer->GetMugongBase(ToQuickItem.wAbsPostion);
if(ToMugong && ToMugong->dwDBIdx != 0)
ToMugong->QuickPosition = pmsg->wFromAbsPosition;
else
{
ASSERT(0);
}
}
break;
default:
{
ASSERT(0);
}
}
}
void CQuickManager::UpdateSrcPosition( CPlayer * pPlayer, POSTYPE QAbsPos, POSTYPE srcAbsPos )
{
QUICKITEM * itemOut = pPlayer->GetQuickItemInfo((QAbsPos-QUICK_STARTPOSITION)/MAX_QUICKITEMPERSHEET_NUM,
(QAbsPos-QUICK_STARTPOSITION)%MAX_QUICKITEMPERSHEET_NUM);
itemOut->wAbsPostion = srcAbsPos;
MSG_QUICK_UPD_ACK msg;
msg.Category = MP_QUICK;
msg.Protocol = MP_QUICK_UPD_ACK;
msg.dwObjectID = pPlayer->GetID();
msg.wAbsPosition = QAbsPos;
msg.wSrcPosition = srcAbsPos;
pPlayer->SendMsg( &msg, sizeof(msg) );
}
void CQuickManager::PureUpdateQuickItem(CPlayer * pPlayer, WORD whatQuickAbsPos, DWORD dwIconIdx, WORD eIGKinds, WORD srcAbsPos, WORD flag)
{
QUICKITEM * itemOut = pPlayer->GetQuickItemInfo((whatQuickAbsPos-QUICK_STARTPOSITION)/MAX_QUICKITEMPERSHEET_NUM,
(whatQuickAbsPos-QUICK_STARTPOSITION)%MAX_QUICKITEMPERSHEET_NUM);
if(flag & QUB_ICONIDX)
itemOut->dwIconIdx = dwIconIdx;
if(flag & QUB_KINDS)
itemOut->eIGKinds = (eQUICKICON_KIND)eIGKinds;
if(flag & QUB_SRCPOS)
itemOut->wAbsPostion = srcAbsPos;
}
void CQuickManager::PureRemQuickItemAbs(CPlayer * pPlayer, WORD abs_pos)
{
QUICKITEM quickItem;
quickItem.dwIconIdx = 0;
quickItem.eIGKinds = (eQUICKICON_KIND)0;
quickItem.wAbsPostion = 0;
pPlayer->SetQuickItem(abs_pos,&quickItem);
}
*/
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -