⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 gmcmdmanager.cpp

📁 奇迹世界 部分源代码奇迹世界 部分源代码奇迹世界 部分源代码
💻 CPP
📖 第 1 页 / 共 3 页
字号:
#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 + -