📄 gmcmdmanager.cpp
字号:
#include "StdAfx.h"
#include ".\gmcmdmanager.h"
#include "Field.h"
#include "Player.h"
#include "PlayerManager.h"
#include "ServerSession.h"
#include "DropManager.h"
#include "GameServer.h"
#include "Global.h"
#include "Map.h"
#include "Item.h"
#include "Define.h"
#include "ObjectFactory.h"
#include <ItemInfoParser.h>
#include "GameZone.h"
#include "GameZoneManager.h"
#include "GameRoom.h"
#include "StatusManager.h"
#include "ratiomanager.h"
#include "ItemManager.h"
#include <SCRankInfo.h>
#define MAX_RANK_OPTION 49
#define MAX_ITEM_GRADE 1 //泅犁绰 0篮 老馆, 1篮 叼官牢酒捞袍捞促. 眠饶 2绰 蜡聪农 酒捞袍捞 瞪巴捞促.
GMCmdManager::GMCmdManager(void)
{
m_vecCmd.reserve( 10 );
m_GMString.Init();
}
GMCmdManager::~GMCmdManager(void)
{
}
bool GMCmdManager::ParseCommand( DWORD dwPlayerKey, const char* szCmd )
{
m_vecCmd.clear();
if( !m_Parser.Parsing( szCmd, m_vecCmd ) )
return false;
if( !ProcessCommand( dwPlayerKey, m_vecCmd ) )
return false;
return true;
}
bool GMCmdManager::ProcessCommand( DWORD dwPlayerKey, vector<string>& vecCmd )
{
int nSize = (int)vecCmd.size();
bool bSuccess = false;
if(nSize > 0)
{
string strHead = vecCmd[0];
if( strHead.compare( m_GMString.GetEntrance() ) == 0 ) //涝厘
{
bSuccess = ProcessEntrance( dwPlayerKey, vecCmd );
}
else if( strHead.compare( m_GMString.GetSpeed() ) == 0 ) //加档
{
bSuccess = ProcessSpeed( dwPlayerKey, vecCmd );
}
else if( strHead.compare( m_GMString.GetWhisper() ) == 0 ) //庇富
{
bSuccess = ProcessWhisper( dwPlayerKey, vecCmd );
}
else if( strHead.compare( m_GMString.GetTransparent() ) == 0 ) //捧疙
{
bSuccess = ProcessTransparent( dwPlayerKey, vecCmd );
}
else if( strHead.compare( m_GMString.GetInvincivility() ) == 0 ) //公利
{
bSuccess = ProcessInvincibility( dwPlayerKey, vecCmd );
}
else if( strHead.compare( m_GMString.GetAccount() ) == 0 ) //绢墨款飘
{
bSuccess = ProcessAccount( dwPlayerKey, vecCmd );
}
else if( strHead.compare( m_GMString.GetRemovalMonster() ) == 0 ) //阁胶磐 力芭
{
bSuccess = ProcessRemovalMonster( dwPlayerKey, vecCmd );
}
else if( strHead.compare( m_GMString.GetRemoval() ) == 0 ) // 力芭
{
bSuccess = ProcessRemoval( dwPlayerKey, vecCmd );
}
else if( strHead.compare( m_GMString.GetKill() ) == 0 ) // 懦
{
bSuccess = ProcessKill( dwPlayerKey, vecCmd );
}
else if( strHead.compare( m_GMString.GetCreateItem() ) == 0 ) // 酒捞袍 积己
{
bSuccess = ProcessCreateItemEx( dwPlayerKey, vecCmd );
}
else if( strHead.compare( m_GMString.GetCreateHeim() ) == 0 ) // 窍烙
{
bSuccess = ProcessCreateHime( dwPlayerKey, vecCmd );
}
else if( strHead.compare( m_GMString.GetLevelUp() ) == 0 ) // 饭骇诀
{
bSuccess = ProcessLevelUp( dwPlayerKey, vecCmd );
}
else if( strHead.compare( m_GMString.GetForceDisconnect() ) == 0 ) // 楷搬辆丰
{
bSuccess = ProcessDisConnect( dwPlayerKey, vecCmd );
}
else if( strHead.compare( m_GMString.GetRebirth() ) == 0 ) //何劝
{
bSuccess = ProcessRebirth( dwPlayerKey, vecCmd );
}
else if( strHead.compare( m_GMString.GetRecovery() ) == 0 ) //雀汗
{
bSuccess = ProcessRecovery( dwPlayerKey, vecCmd );
}
else if( strHead.compare( m_GMString.GetCreateMonster() ) == 0 ) //阁胶磐 家券
{
bSuccess = ProcessCreateMonster( dwPlayerKey, vecCmd );
}
else if( strHead.compare( m_GMString.GetRemovalItem() ) == 0 ) //酒捞袍 力芭
{
bSuccess = ProcessRemovalItem( dwPlayerKey, vecCmd );
}
else if( strHead.compare( m_GMString.GetStatPointUp() ) == 0 ) //胶泡器牢飘 诀
{
bSuccess = ProcessStatPointUp( dwPlayerKey, vecCmd );
}
else if( strHead.compare( m_GMString.GetSkillPointUp() ) == 0 ) //胶懦器牢飘 诀
{
bSuccess = ProcessSkillPointUp( dwPlayerKey, vecCmd );
}
else if( strHead.compare( m_GMString.GetCharInfo() ) == 0 ) //某腐磐 沥焊 夸没
{
bSuccess = ProcessCharInfo( dwPlayerKey, vecCmd );
}
else if( strHead.compare( m_GMString.GetRoomInfo() ) == 0 ) //规 沥焊 夸没
{
bSuccess = ProcessRoomInfo( dwPlayerKey, vecCmd );
}
else if( strHead.compare( m_GMString.GetCreateEnchantItem() ) == 0 ) //牢镁飘酒捞袍积己
{
bSuccess = ProcessCreateEnchantItem( dwPlayerKey, vecCmd );
}
}
return bSuccess;
}
Player* GMCmdManager::GetGMPlayer( DWORD dwPlayerKey )
{
Player * pPlayer = PlayerManager::Instance()->FindPlayer( dwPlayerKey );
if( !pPlayer )
return NULL;
if( !pPlayer->IsGMPlayer() )
{
MSG_CG_GM_STRING_CMD_NAK NakMsg;
NakMsg.m_byErrorCode = RC::RC_GM_ISNOT_GM; // GM捞 酒聪促.
pPlayer->SendPacket( &NakMsg, sizeof(NakMsg) );
return NULL;
}
return pPlayer;
}
//涝厘
bool GMCmdManager::ProcessEntrance( DWORD dwPlayerKey, vector<string>& vecCmd )
{
Player* pPlayer = GetGMPlayer( dwPlayerKey );
if( !pPlayer )
return false;
if( vecCmd.size() != 1)
{
MSG_CG_GM_STRING_CMD_NAK NakMsg;
NakMsg.m_byErrorCode = RC::RC_GM_INVALID_ARGUMENT;
pPlayer->SendPacket( &NakMsg, sizeof(NakMsg) );
return false;
}
//涝厘矫俊绰 捧疙 脑, 公利 脑, 加档, 绢墨款飘 脑 惑怕啊 等促.
/************************************************************************/
/* 捧疙(脑) */
/************************************************************************/
BOOL bTransparency = pPlayer->IsStatus(eCHAR_STATE_ETC_OBSERVER);
BOOL bSuccess = FALSE;
if (!bTransparency) //泅犁 捧疙 惑怕啊 酒聪扼搁..
{
pPlayer->GetStatusManager()->AllocStatus( eCHAR_STATE_ETC_OBSERVER );
bSuccess = TRUE;
}
if (bSuccess)
{
// Brd
MSG_CG_GM_OBSERVER_BRD BrdMsg;
BrdMsg.m_dwObjectKey = pPlayer->GetObjectKey();
BrdMsg.m_byObserverOn = 1; //公炼扒 捧疙 脑 惑怕捞促.
pPlayer->SendPacketAround( &BrdMsg, sizeof(BrdMsg) );
}
else
{
MSG_CG_GM_STRING_CMD_NAK NakMsg;
NakMsg.m_byErrorCode = RC::RC_GM_ISNOT_GM;
pPlayer->SendPacket( &NakMsg, sizeof(NakMsg) );
}
/************************************************************************/
/* 2. 公利(攫单靛) */
/************************************************************************/
BOOL bUndead = pPlayer->IsStatus(eCHAR_STATE_ETC_UNDEAD);
bSuccess = FALSE;
if (!bUndead) //泅犁 公利惑怕啊 酒聪搁
{
pPlayer->GetStatusManager()->AllocStatus( eCHAR_STATE_ETC_UNDEAD );
bSuccess = TRUE;
}
if (bSuccess)
{
// ack
MSG_CG_GM_UNDEAD_MODE_ACK AckMsg;
AckMsg.m_bUndeadOn = TRUE;
pPlayer->SendPacket( &AckMsg, sizeof(AckMsg) );
}
else
{
// nak
MSG_CG_GM_STRING_CMD_NAK NakMsg;
NakMsg.m_byErrorCode = 0; //捞固 攫单靛 惑怕捞促.
pPlayer->SendPacket( &NakMsg, sizeof(NakMsg) );
}
/************************************************************************/
/* 3. 加档(饭骇 3) */
/************************************************************************/
float fRatio = 2.5f;
pPlayer->SetAddMoveSpeedRatio(fRatio);
//林困荤恩俊霸 加档啊 官诧巴阑 焊辰促.
MSG_CG_GM_SET_SPEED_BRD brdMsg;
brdMsg.m_dwObjectKey = pPlayer->GetObjectKey();
brdMsg.m_byMoveLevel = 3;
brdMsg.m_fSpeedRatio = fRatio;
pPlayer->SendPacketAround( &brdMsg, sizeof(brdMsg) );
return true;
}
//加档
//荤侩过 : //加档 0-5
bool GMCmdManager::ProcessSpeed( DWORD dwPlayerKey, vector<string>& vecCmd )
{
Player* pPlayer = GetGMPlayer( dwPlayerKey );
if( !pPlayer )
return false;
if( vecCmd.size() != 2 ) //牢磊 炼扒捞 嘎瘤 臼嚼聪促.
{
MSG_CG_GM_STRING_CMD_NAK NakMsg;
NakMsg.m_byErrorCode = RC::RC_GM_INVALID_ARGUMENT; // GM捞 酒聪促.
pPlayer->SendPacket( &NakMsg, sizeof(NakMsg) );
return false;
}
int nLevel = atoi( vecCmd[1].c_str() );
// 饭骇篮 0~5鳖瘤捞促.
if( nLevel > 5 || nLevel < 0 )
{
MSG_CG_GM_STRING_CMD_NAK NakMsg;
NakMsg.m_byErrorCode = RC::RC_GM_INVALID_ARGUMENT;
pPlayer->SendPacket( &NakMsg, sizeof(NakMsg) );
return false;
}
float fRatio = 1.0f + 0.5f * nLevel;
//眠啊肺 捞悼
pPlayer->SetAddMoveSpeedRatio( fRatio );
//林困荤恩俊霸 加档啊 官诧巴阑 焊辰促.
MSG_CG_GM_SET_SPEED_BRD brdMsg;
brdMsg.m_dwObjectKey = pPlayer->GetObjectKey();
brdMsg.m_byMoveLevel = nLevel;
brdMsg.m_fSpeedRatio = fRatio;
pPlayer->SendPacketAround( &brdMsg, sizeof(brdMsg) );
return true;
}
//庇富
bool GMCmdManager::ProcessWhisper( DWORD dwPlayerKey, vector<string>& vecCmd )
{
return true;
}
//捧疙
//荤侩过 : //捧疙 脑[阐]
bool GMCmdManager::ProcessTransparent( DWORD dwPlayerKey, vector<string>& vecCmd )
{
Player* pPlayer = GetGMPlayer( dwPlayerKey );
if( !pPlayer )
return false;
if( vecCmd.size() != 2 ) //牢磊 炼扒捞 嘎瘤 臼嚼聪促.
{
MSG_CG_GM_STRING_CMD_NAK NakMsg;
NakMsg.m_byErrorCode = RC::RC_GM_INVALID_ARGUMENT; // 牢磊啊 嘎瘤 臼嚼聪促.
pPlayer->SendPacket( &NakMsg, sizeof(NakMsg) );
return false;
}
BOOL bObserverOn = pPlayer->IsStatus(eCHAR_STATE_ETC_OBSERVER);
BOOL bSuccess = FALSE;
BOOL bWantObserverOn = FALSE;
if( vecCmd[1].compare( m_GMString.GetTurnOn() ) == 0 ) //敲饭捞绢啊 盔窍绰 惑怕啊 捧疙 脑 捞搁..
bWantObserverOn = TRUE;
else if( vecCmd[1].compare( m_GMString.GetTurnOff() ) == 0 )
bWantObserverOn = FALSE;
else
return false;
if (bObserverOn) //泅犁 捧疙 惑怕捞搁..
{
// ON --> OFF
if ( !bWantObserverOn )
{
pPlayer->GetStatusManager()->Remove( eCHAR_STATE_ETC_OBSERVER );
bSuccess = TRUE;
}
}
else // 泅犁 捧疙 惑怕啊 酒聪搁..
{
// OFF --> ON
if ( bWantObserverOn )
{
pPlayer->GetStatusManager()->AllocStatus( eCHAR_STATE_ETC_OBSERVER );
bSuccess = TRUE;
}
}
if (bSuccess)
{
MSG_CG_GM_OBSERVER_BRD BrdMsg;
BrdMsg.m_dwObjectKey = pPlayer->GetObjectKey();
BrdMsg.m_byObserverOn = bWantObserverOn;
pPlayer->SendPacketAround( &BrdMsg, sizeof(BrdMsg) );
}
else
{
MSG_CG_GM_STRING_CMD_NAK NakMsg;
NakMsg.m_byErrorCode = RC::RC_GM_ISNOT_GM;
pPlayer->SendPacket( &NakMsg, sizeof(NakMsg) );
return false;
}
return true;
}
//公利 脑/阐
bool GMCmdManager::ProcessInvincibility( DWORD dwPlayerKey, vector<string>& vecCmd )
{
Player* pPlayer = GetGMPlayer( dwPlayerKey );
if( !pPlayer )
return false;
BOOL bUndeadOn = pPlayer->IsStatus(eCHAR_STATE_ETC_UNDEAD);
if( vecCmd.size() != 2 ) //牢磊 炼扒捞 嘎瘤 臼嚼聪促.
{
MSG_CG_GM_STRING_CMD_NAK NakMsg;
NakMsg.m_byErrorCode = RC::RC_GM_INVALID_ARGUMENT;
pPlayer->SendPacket( &NakMsg, sizeof(NakMsg) );
return false;
}
bool bSuccess = false;
bool bWantUndeadOn = false;
if( vecCmd[1].compare( m_GMString.GetTurnOn() ) == 0 )
bWantUndeadOn = true;
else if( vecCmd[1].compare( m_GMString.GetTurnOff() ) == 0 )
bWantUndeadOn = false;
else
return false;
if( bUndeadOn ) //泅犁 公利 惑怕 捞搁..
{
// ON --> OFF
if ( !bWantUndeadOn )
{
pPlayer->GetStatusManager()->Remove( eCHAR_STATE_ETC_UNDEAD );
bSuccess = true;
}
}
else
{
// OFF --> ON
if( bWantUndeadOn )
{
pPlayer->GetStatusManager()->AllocStatus( eCHAR_STATE_ETC_UNDEAD );
bSuccess = true;
}
}
if( bSuccess )
{
// ack
MSG_CG_GM_UNDEAD_MODE_ACK AckMsg;
AckMsg.m_bUndeadOn = bWantUndeadOn;
pPlayer->SendPacket( &AckMsg, sizeof(AckMsg) );
}
else
{
// nak
MSG_CG_GM_STRING_CMD_NAK NakMsg;
pPlayer->SendPacket( &NakMsg, sizeof(NakMsg) );
}
return true;
}
//绢墨款飘
bool GMCmdManager::ProcessAccount( DWORD dwPlayerKey, vector<string>& vecCmd )
{
return true;
}
class DestroyMonsterAroundEx
{
WzVector m_vOriginPos;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -