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

📄 gmcmdmanager.cpp

📁 奇迹世界 部分源代码奇迹世界 部分源代码奇迹世界 部分源代码
💻 CPP
📖 第 1 页 / 共 3 页
字号:
	int			m_iRange;
	Player *	m_pAttackPlayer;
public:
	DestroyMonsterAroundEx( WzVector &vOriginPos, int iRange, Player * pPlayer ):m_pAttackPlayer(pPlayer)	{ m_vOriginPos = vOriginPos; m_iRange = iRange; }
	~DestroyMonsterAroundEx(){}

	void operator() ( NPC * pNPC)
	{
		Field *pField = pNPC->GetField();
		if( !pField )	return;

		WzVector vNPCPos;
		pNPC->GetPos( &vNPCPos );
		float fDist = VectorLength( &(vNPCPos - m_vOriginPos) );


		if( fDist <= m_iRange )
		{
			DAMAGETYPE wDamage = (DAMAGETYPE)pNPC->GetMaxHP();

			// 单固瘤 贸府
//			pNPC->Damaged( m_pAttackPlayer, eATTACK_TYPE_MELEE, wDamage );
			// 阁胶磐 力芭甫 荤侩秦辑 飘府芭甫 柳青窍扁 困秦 bIsDrop阑 TRUE肺 悸泼茄促.
			pField->KillNPC( m_pAttackPlayer, pNPC, TRUE );

			// 磊脚阑 器窃茄 牢立 敲饭捞绢俊霸 宏肺靛 某胶飘
			MSG_CG_BATTLE_PLAYER_ATTACK_BRD sendMsg;
			sendMsg.dwClientSerial			= 0;
			sendMsg.wvCurPos				= m_vOriginPos;
			sendMsg.wvDestPos				= vNPCPos;
			sendMsg.dwAttackerKey			= m_pAttackPlayer->GetObjectKey();
			sendMsg.byAttackType			= eATTACK_SEQUENCE_FIRST;
			sendMsg.dwTargetKey				= pNPC->GetObjectKey();
			sendMsg.wDamage					= wDamage;
			sendMsg.dwTargetHP				= pNPC->GetHP();
			sendMsg.byEffect				= 0; // GM疙飞绢肺 磷捞绰 巴捞瘤父 捞 蔼俊 措茄 技泼阑 秦林绢具 窃!!(20060115)
			m_pAttackPlayer->SendPacketAround( (MSG_BASE_FORWARD*)&sendMsg, sizeof(sendMsg) );
		}
	}
};

//阁胶磐 力芭
bool GMCmdManager::ProcessRemovalMonster( 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;  
	}

	Field* pField = pPlayer->GetField();
	if( !pField )
		return false;

	WzVector vPlayerPos;
	pPlayer->GetPos( &vPlayerPos );

	// 馆版 15m 郴狼 阁胶磐甸阑 昏力茄促.
	DestroyMonsterAroundEx DestroyMonsterOpr( vPlayerPos, 15, pPlayer );
	pField->ForeachNeighborNPCAt( pPlayer->GetSectorIndex(), DestroyMonsterOpr );

	return true;
}

//力芭
//荤侩过 : //力芭 [措惑阁胶磐虐]
bool GMCmdManager::ProcessRemoval( 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;  
	}

	DWORD dwMonsterKey = atoi( vecCmd[1].c_str() );

	//2. User Check
	Field* pField = pPlayer->GetField();
	if( !pField )
		return false;

	NPC* pMonster = (NPC*)pField->FindCharacter( dwMonsterKey );
	if( !pMonster )
	{
		MSG_CG_GM_STRING_CMD_NAK NakMsg;
		NakMsg.m_byErrorCode	=  RC::RC_GM_NOTEXIST_USER;		// USER啊 粮犁窍瘤 臼嚼聪促.
		pPlayer->SendPacket( &NakMsg, sizeof(NakMsg) );
		return false;  
	}

	//Field 俊 npc 窍唱父 瘤快绰 纳腐磐 父甸巴...
	pField->KillNPC(pPlayer, pMonster, FALSE);

	return true;
}

//懦
bool GMCmdManager::ProcessKill( 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;  
	}

	//2. User Check
	Field* pField = pPlayer->GetField();
	if( !pField )
		return false;

	DWORD dwMonsterKey = atoi( vecCmd[1].c_str() );
	NPC* pMonster = (NPC*)pField->FindCharacter( dwMonsterKey );
	if( !pMonster )
	{
		MSG_CG_GM_STRING_CMD_NAK NakMsg;
		NakMsg.m_byErrorCode	=  RC::RC_GM_NOTEXIST_USER;		// USER啊 粮犁窍瘤 臼嚼聪促.
		pPlayer->SendPacket( &NakMsg, sizeof(NakMsg) );
		return false;  
	}

	//Field 俊 npc 窍唱父 瘤快绰 纳腐磐 父甸巴...
	pField->KillNPC(pPlayer, pMonster, TRUE);

	return true;
}

//酒捞袍 积己
bool GMCmdManager::ProcessCreateItem( DWORD dwPlayerKey, vector<string>& vecCmd )
{
	Player* pPlayer = GetGMPlayer( dwPlayerKey );
	if( !pPlayer )
		return false;

	Field* pField = pPlayer->GetField();
	if( !pField )
		return false;

	if( vecCmd.size() != 3 )		//牢磊 炼扒捞 嘎瘤 臼嚼聪促.
	{
		MSG_CG_GM_STRING_CMD_NAK NakMsg;
		NakMsg.m_byErrorCode	=  RC::RC_GM_INVALID_ARGUMENT;		// 牢磊啊 嘎瘤 臼嚼聪促.
		pPlayer->SendPacket( &NakMsg, sizeof(NakMsg) );
		return false;  
	}

	int nItemCode = atoi( vecCmd[1].c_str() );
	int nItemCount = atoi( vecCmd[2].c_str() );

	if( nItemCount > GM_MAX_CREATE_ITEM_NUM || nItemCount <= 0 )
	{
		MSG_CG_GM_STRING_CMD_NAK NakMsg;
		NakMsg.m_byErrorCode	=  RC::RC_GM_INVALID_ARGUMENT;		// 牢磊啊 嘎瘤 臼嚼聪促.
		pPlayer->SendPacket( &NakMsg, sizeof(NakMsg) );
		return false;  
	}

	if( !ItemInfoParser::Instance()->GetItemInfo( nItemCode ) )
	{
		MSG_CG_GM_STRING_CMD_NAK NakMsg;
		NakMsg.m_byErrorCode	=  RC::RC_GM_INVALID_ARGUMENT;		// 牢磊啊 嘎瘤 臼嚼聪促.
		pPlayer->SendPacket( &NakMsg, sizeof(NakMsg) );
		return false;  
	}

	// 俺荐父怒 酒捞袍阑 鞘靛俊 冻绢哆赴促.
	for( int i = 0; i < nItemCount; ++i )
	{
		WzVector vDropPos = pPlayer->GetRandomPosInAround(2);
		SCItemSlot slot;
		slot.SetCode( nItemCode );
		g_DropManager.DropItemToField( pField, &vDropPos, NULL, 0, slot );
	}

	return true;
		 
}

//窍烙 积己
bool GMCmdManager::ProcessCreateHime( DWORD dwPlayerKey, vector<string>& vecCmd )
{
	Player* pPlayer = GetGMPlayer( dwPlayerKey );
	if( !pPlayer )
		return false;

	Field* pField = pPlayer->GetField();
	if( !pField )
		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;  
	}

	int nMoney = atoi( vecCmd[1].c_str() );

	if( nMoney > GM_MAX_CREATE_MONEY || nMoney <= 0 )
	{
		MSG_CG_GM_STRING_CMD_NAK NakMsg;
		NakMsg.m_byErrorCode	=  RC::RC_GM_NOTEXIST_USER;		// USER啊 粮犁窍瘤 臼嚼聪促.
		pPlayer->SendPacket( &NakMsg, sizeof(NakMsg) );
		return false;  
	}

	// 冻绢哆副 困摹甫 茫绰促.
	WzVector vDropPos = pPlayer->GetRandomPosInAround(2);
	// 捣阑 冻绢哆赴促.
	MONEY money = (MONEY)nMoney;
	g_DropManager.DropMoneyToField( pField, &vDropPos, NULL, 0, money );

	return true;
}

//饭骇诀
bool GMCmdManager::ProcessLevelUp( 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;  
	}

	int nPlusLevel = atoi( vecCmd[1].c_str() );
	int nLevel = pPlayer->GetLevel() + nPlusLevel;

	if( nLevel > MAX_LEVEL || nLevel < 0 )
	{
		MSG_CG_GM_STRING_CMD_NAK NakMsg;
		NakMsg.m_byErrorCode	=  RC::RC_GM_NOTEXIST_USER;		// USER啊 粮犁窍瘤 臼嚼聪促.
		pPlayer->SendPacket( &NakMsg, sizeof(NakMsg) );
		return false;  
	}

	pPlayer->LevelUp( nPlusLevel );

	return true;
}

//立加辆丰
bool GMCmdManager::ProcessDisConnect( 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;  
	}

	//2. User Check
	Field* pField = pPlayer->GetField();
	if( !pField )
	{
		MSG_CG_GM_STRING_CMD_NAK NakMsg;
		NakMsg.m_byErrorCode	=  RC::RC_GM_NOTEXIST_USER;		// USER啊 粮犁窍瘤 臼嚼聪促.
		pPlayer->SendPacket( &NakMsg, sizeof(NakMsg) );
		return false;
	}

	if( vecCmd.size() > 2 || vecCmd.size() <= 0 )		//牢磊 炼扒捞 嘎瘤 臼嚼聪促.
	{
		MSG_CG_GM_STRING_CMD_NAK NakMsg;
		NakMsg.m_byErrorCode	=  RC::RC_GM_INVALID_ARGUMENT;		// 牢磊啊 嘎瘤 臼嚼聪促.
		pPlayer->SendPacket( &NakMsg, sizeof(NakMsg) );
		return false;  
	}

	DWORD dwUserKey = atoi( vecCmd[1].c_str() );

	Player* pUser = (Player*)pField->FindCharacter( dwUserKey );
	if( !pUser )
	{
		MSG_CG_GM_STRING_CMD_NAK NakMsg;
		NakMsg.m_byErrorCode	=  RC::RC_GM_NOTEXIST_USER;		// USER啊 粮犁窍瘤 臼嚼聪促.
		pPlayer->SendPacket( &NakMsg, sizeof(NakMsg) );
		return false;  
	}

	//碍力辆丰
	pUser->ForceDisconnect(GM_FORCE_DISCONNECT);

	return true;
}


//何劝
bool GMCmdManager::ProcessRebirth( 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;  
	}

	if( pPlayer->OnResurrection( 0, 1.0f, 1.0f ) )
	{
		// 林困俊 何劝阑 舅妨林磊.
		WzVector curPos;
		pPlayer->GetPos(&curPos);

		MSG_CG_GM_RESURRECTION_BRD sendMsg;
		sendMsg.m_dwObjectKey	= pPlayer->GetObjectKey();
		sendMsg.m_dwHP			= pPlayer->GetHP();
		sendMsg.m_dwMP			= pPlayer->GetMP();
		sendMsg.m_wvCurPos		= curPos;

		pPlayer->SendPacketAround( &sendMsg, sizeof(sendMsg) );
	}
	else
	{
		MSG_CG_GM_STRING_CMD_NAK NakMsg;
		NakMsg.m_byErrorCode	=  RC::RC_GM_CANNOT_RESURRECTION;	//何劝且荐 绝澜..	
		pPlayer->SendPacket( &NakMsg, sizeof(NakMsg) );
		return false;
	}

	return true;
}

//雀汗
bool GMCmdManager::ProcessRecovery( 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;  
	}

	DWORD dwMaxHP = pPlayer->GetMaxHP();
	DWORD dwMaxMP = pPlayer->GetMaxMP();

	if( !pPlayer->OnRecover( dwMaxHP, dwMaxMP ) )  //Recover窃荐 郴何俊 BRD 菩哦捞 乐促.. 蝶肺 焊尘 鞘夸 绝促.
	{
		MSG_CG_GM_STRING_CMD_NAK NakMsg;
		NakMsg.m_byErrorCode	=  RC::RC_GM_CANNOT_RESURRECTION;		// 雀汗 角菩
		pPlayer->SendPacket( &NakMsg, sizeof(NakMsg) );
		return false;
	}

	return true;
		 
}

//阁胶磐 家券
bool GMCmdManager::ProcessCreateMonster( DWORD dwPlayerKey, vector<string>& vecCmd )
{
	Player* pPlayer = GetGMPlayer( dwPlayerKey );
	if( !pPlayer )
		return false;

	if( vecCmd.size() != 3 )		//牢磊 炼扒捞 嘎瘤 臼嚼聪促.
	{
		MSG_CG_GM_STRING_CMD_NAK NakMsg;
		NakMsg.m_byErrorCode	=  RC::RC_GM_INVALID_ARGUMENT;		// 牢磊啊 嘎瘤 臼嚼聪促.
		pPlayer->SendPacket( &NakMsg, sizeof(NakMsg) );
		return false;  
	}

	Field* pField = pPlayer->GetField();
	if( NULL == pField )
	{
		// GM篮 霸烙郴 鞘靛救俊 甸绢客辑 疙飞阑 且 版快父 阁胶磐甫 积己秦临 抗沥!!
		return false;
	}

	int nMonsterCode = atoi( vecCmd[1].c_str() );
	int nMonsterCount = atoi( vecCmd[2].c_str() );
	if( nMonsterCount <= 0 )
		return false;

	WzVector vPlayerPos;
	pPlayer->GetPos( &vPlayerPos );	

	// 敲饭捞绢啊 困摹茄 鸥老困俊辑 罚待茄 困摹俊 阁胶磐 积己(20050624)
	int iTileIdx = pPlayer->GetPathExplorer()->GetTile();
	if( -1 == iTileIdx )
	{
		//DISPMSG( "[OnCG_GM_MONSTER_CREATE_SYN] Player Position : TileIdx -1 !!!");
		return false;
	}
	vPlayerPos = pField->GetFieldInfo()->GetWorldBase()->GetRandomPosInTile(iTileIdx);

	if( !pField->CreateNPC( MONSTER_OBJECT, nMonsterCode, nMonsterCount, &vPlayerPos) )
	{
		MSG_CG_GM_STRING_CMD_NAK NakMsg;
		NakMsg.m_byErrorCode	=  RC::RC_GM_INVALID_ARGUMENT;		// 牢磊啊 嘎瘤 臼嚼聪促.
		pPlayer->SendPacket( &NakMsg, sizeof(NakMsg) );
		return false;  
	}

	return true;
}

// 林函 鞘靛 酒捞袍甸阑 昏力
class DestroyItemAroundEx
{
	WzVector	m_vOriginPos;
	int			m_iRange;

public:
	DestroyItemAroundEx( WzVector &vOriginPos, int iRange )	{ m_vOriginPos = vOriginPos; m_iRange = iRange; }

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -