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

📄 gmcmdmanager.cpp

📁 奇迹世界 部分源代码奇迹世界 部分源代码奇迹世界 部分源代码
💻 CPP
📖 第 1 页 / 共 3 页
字号:
	~DestroyItemAroundEx(){}

	void operator() ( Item * pItem )
	{
		WzVector vItemPos;
		pItem->GetPos( &vItemPos );
		float fDist = VectorLength( &(vItemPos - m_vOriginPos) );

		if( fDist <= m_iRange )
		{
			pItem->DestroyFromField();
		}
	}
};



bool GMCmdManager::ProcessRemovalItem( 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 郴狼 酒捞袍甸阑 昏力茄促.
	DestroyItemAroundEx DestroyItemOpr( vPlayerPos, 15 );
	pField->ForeachNeighborFieldItemAt( pPlayer->GetSectorIndex(), DestroyItemOpr );

	return true;
}

//胶泡器牢飘 诀
bool GMCmdManager::ProcessStatPointUp( 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 nPlusPoint = atoi( vecCmd[1].c_str() );	
	pPlayer->StatPointUp( nPlusPoint );

	return true;
		 
}

//胶懦器牢飘 诀
bool GMCmdManager::ProcessSkillPointUp( 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 nPlusPoint = atoi( vecCmd[1].c_str() );	

	pPlayer->SkillPointUp( nPlusPoint );

	return true;
}

bool GMCmdManager::ProcessCharInfo( 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;  
	}	


	// 秦寸 敲饭捞绢甫 茫绰促.
	Player* pFindChar = NULL;
	pFindChar = PlayerManager::Instance()->FindPlayer( vecCmd[1].c_str() );

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

	// 某腐磐 沥焊甫 舅妨霖促.
	MSG_CG_GM_CHARINFO_ACK sendMsg;
	sendMsg.m_byCategory = CG_GM;
	sendMsg.m_byProtocol = CG_GM_CHARINFO_ACK;
	sendMsg.m_eCharType = pFindChar->GetCharType();
	sendMsg.m_wLevel = pFindChar->GetLevel();
	sendMsg.m_Money = pFindChar->GetMoney();

	pFindChar->GetPos( & sendMsg.m_vCurPos );

	if( pFindChar->GetField() && pFindChar->GetField()->GetMap() )
	{
		GameZone *pZone = pFindChar->GetField()->GetMap()->GetGameZone();
		sendMsg.m_RoomKey = pZone->GetKey();
		sendMsg.m_MapCode = pFindChar->GetField()->GetMap()->GetMapCode();
	}

	pPlayer->SendPacket( &sendMsg, sizeof(sendMsg) );

	return true;
}

class GetPlayerInfoOprEx
{
	BYTE			m_byPlayerNum;
	GM_CHARINFO		*m_pCharInfo;
public:
	GetPlayerInfoOprEx( GM_CHARINFO *pCharInfo ) : m_pCharInfo(pCharInfo), m_byPlayerNum(0) {}
	~GetPlayerInfoOprEx() {}
	BYTE			GetPlayerNum()	{ return m_byPlayerNum; }

	VOID operator () ( Player *pPlayer )
	{
		if( m_byPlayerNum >= MSG_CG_GM_ROOMINFO_ACK::_MAX_PLAYER_INFO_SIZE )	return;

		strncpy( m_pCharInfo[m_byPlayerNum].m_szCharName, pPlayer->GetCharName(), MAX_CHARNAME_LENGTH );
		m_pCharInfo[m_byPlayerNum].m_byClass = pPlayer->GetCharType();
		m_pCharInfo[m_byPlayerNum].m_LV = pPlayer->GetLevel();
		pPlayer->GetPos( &m_pCharInfo[m_byPlayerNum].m_vCurPos );

		m_byPlayerNum++;
	}
};

//规沥焊
bool GMCmdManager::ProcessRoomInfo( DWORD dwPlayerKey, vector<string>& vecCmd )
{
	Player* pPlayer = GetGMPlayer( dwPlayerKey );
	if( !pPlayer )
		return false;

	//牢磊俺荐 眉农
	if( vecCmd.size() != 2 && 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;  
	}	
	
	GameZone *pZone = NULL;
	if( vecCmd.size() > 1 )			// 规锅龋啊 粮犁窍搁..
	{
		DWORD dwRoomKey = atoi( vecCmd[1].c_str() );
		pZone = g_GameZoneManager.GetZone( dwRoomKey );
	}
	else if( pPlayer->GetField() && pPlayer->GetField()->GetMap() )
	{
		pZone = pPlayer->GetField()->GetMap()->GetGameZone();
	}
	else
	{
		MSG_CG_GM_STRING_CMD_NAK NakMsg;
		NakMsg.m_byErrorCode	=  RC::RC_GM_INVALID_ARGUMENT;		// 牢磊啊 嘎瘤 臼嚼聪促.
		pPlayer->SendPacket( &NakMsg, sizeof(NakMsg) );
		return false;  
	}

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

	MSG_CG_GM_ROOMINFO_ACK AckMsg;

	// 规厘捞抚 悸泼
	memset( AckMsg.m_szMasterName, 0, sizeof(TCHAR) *MAX_CHARNAME_LENGTH );
	if( pZone->GetZoneType() != eZONETYPE_VILLAGE )
	{
		GameRoom *pRoom = (GameRoom*)pZone;
		Player * pMaster = PlayerManager::Instance()->FindPlayer( pRoom->GetMasterUserKey() );
		if( pMaster )
		{
			strncpy( AckMsg.m_szMasterName, pMaster->GetCharName(), MAX_CHARNAME_LENGTH );
		}
	}

	// 敲饭捞吝牢 某腐磐 府胶飘
	GetPlayerInfoOprEx GetInfoOpr( AckMsg.m_pPlayerInfo );
	pZone->ForeachPlayer( GetInfoOpr );
	AckMsg.m_byCount = GetInfoOpr.GetPlayerNum();

	pPlayer->SendPacket( &AckMsg, sizeof(AckMsg) );

	return true;
}

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

	//牢磊俺荐 眉农
	if( vecCmd.size() != 4 )
	{
		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;

	int nItemCode = atoi( vecCmd[1].c_str() );
	int nItemCount = atoi( vecCmd[2].c_str() );
	int nItemLevel = atoi( vecCmd[3].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;  
	}

	//牢镁飘 酒捞袍 饭骇 眉农
	if( nItemLevel < 0 || nItemLevel > MAX_ENCHANT_GRADE )
	{
		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.SetSerial( TEMP_DBSERIAL_VALUE );
		slot.SetCode( nItemCode );
		slot.SetEnchant( nItemLevel);
		g_DropManager.DropItemToField( pField, &vDropPos, NULL, 0, slot );
	}

	return true;
}

//积己
bool GMCmdManager::ProcessCreateItemEx( DWORD dwPlayerKey, vector<string>& vecCmd )
{
	SCItemSlot itemSlot;
	itemSlot.SetSerial( TEMP_DBSERIAL_VALUE );

	Player* pPlayer = GetGMPlayer( dwPlayerKey );
	if( !pPlayer )
		return false;

	//牢磊俺荐 眉农
	int nArgSize = (int)vecCmd.size();
	if( nArgSize < 3 || vecCmd.size() > 15)
	{
		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;

	//酒捞袍内靛 眉农
	int nItemCode = atoi( vecCmd[1].c_str() );		
	BASE_ITEMINFO* pItemInfo = ItemInfoParser::Instance()->GetItemInfo( nItemCode );
	if( !pItemInfo )
	{
		MSG_CG_GM_STRING_CMD_NAK NakMsg;
		NakMsg.m_byErrorCode	=  RC::RC_GM_INVALID_ARGUMENT;		// 牢磊啊 嘎瘤 臼嚼聪促.
		pPlayer->SendPacket( &NakMsg, sizeof(NakMsg) );
		return false;  
	}
	else
		itemSlot.SetCode( nItemCode );

	//酒捞袍荐樊 眉农
	int nItemCount = atoi( vecCmd[2].c_str() );
	if( nItemCount <= 0 || nItemCount > GM_MAX_CREATE_ITEM_NUM )
	{
		MSG_CG_GM_STRING_CMD_NAK NakMsg;
		NakMsg.m_byErrorCode	=  RC::RC_GM_INVALID_ARGUMENT;		// 牢磊啊 嘎瘤 臼嚼聪促.
		pPlayer->SendPacket( &NakMsg, sizeof(NakMsg) );
		return false;  
	}

	// 酒捞袍殿鞭( 0篮 老馆, 1篮 叼官牢 )
	if( nArgSize > 3 )								//牢镁飘沥焊啊 器窃登绢 乐栏搁..
	{
		int nItemGrade = atoi( vecCmd[3].c_str() );
		if( nItemGrade < 0 || nItemGrade > MAX_ITEM_GRADE )
		{
			MSG_CG_GM_STRING_CMD_NAK NakMsg;
			NakMsg.m_byErrorCode	=  RC::RC_GM_INVALID_ARGUMENT;		// 牢磊啊 嘎瘤 臼嚼聪促.
			pPlayer->SendPacket( &NakMsg, sizeof(NakMsg) );
			return false;  
		}

		itemSlot.SetSet( nItemGrade );
	}
	
	int nEnchantLevel = 0;								//牢镁飘殿鞭 扁夯 0
	if( nArgSize > 4 )									//牢镁飘沥焊啊 器窃登绢 乐栏搁..
	{
		nEnchantLevel = atoi( vecCmd[4].c_str() );		//牢镁飘 殿鞭

		//牢镁飘 酒捞袍 饭骇 眉农
		if( nEnchantLevel < 0 || nEnchantLevel > MAX_ENCHANT_GRADE )
		{
			MSG_CG_GM_STRING_CMD_NAK NakMsg;
			NakMsg.m_byErrorCode	=  RC::RC_GM_INVALID_ARGUMENT;		// 牢磊啊 嘎瘤 臼嚼聪促.
			pPlayer->SendPacket( &NakMsg, sizeof(NakMsg) );
			return false;  
		}

		itemSlot.SetEnchant( nEnchantLevel );
	}

	int	nRank = 0;									//珐农殿鞭   扁夯 0 
	itemSlot.SetRank( (eRANK)nRank );


	//珐农沥焊.
	if( nArgSize > 5 )
	{
		nRank = atoi( vecCmd[5].c_str() );

		//珐农饭骇 眉农
		if( nRank < 0 || nRank > MAX_RANK_OPTION )
			return false;

		for( int i = 1; i <= nRank; i++ )			// nRank啊 0捞搁 E殿鞭捞骨肺, 风橇甫 倒 鞘夸绝促.
		{
			//OptionIndex Check
			int nOptionIndex = 0;
			if( nArgSize > 5 + i)
				nOptionIndex = atoi( vecCmd[5+i].c_str() );
			else
				return false;

			if( !GetRankItem( &itemSlot, nOptionIndex ) )
			{
				return false;
			}
		}
	}

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

	return true;
}


//己傍窍搁 pItemSlot俊 RankUp等 酒捞袍捞 甸绢埃促.
bool	GMCmdManager::GetRankItem( SCItemSlot* pItemSlot, int nOptionIndex )
{
	// +S 珐农捞惑 珐农 阂啊瓷
	BYTE curRank = pItemSlot->GetRank();

	if( curRank == RANK_PS )
		return false;

	eRANK_OPTION_ITEM_TYPE nOptionType = SCRankInfo::GetRankOptionItemType( pItemSlot->GetItemInfo()->m_wType );

	sRANK_OPTION* pRankOption = RankOptionParser::Instance()->GetRankOption( nOptionType, nOptionIndex );
	if( !pRankOption )
		return false;

	if( pRankOption->m_iOptionIndex == 0 )
		return false;

	if( pRankOption->m_OptionNCode == 0 )
		return false;

	if( pRankOption->m_Value[curRank+1] == 0 )
		return false;

	// 珐农 可记 汲沥
	pItemSlot->SetRank( (eRANK)(curRank + 1) );
	pItemSlot->SetRankAttr( (eRANK)(curRank + 1), pRankOption );

	// 家南 可记 汲沥
	ItemManager::CreateRankItemSocketHole( pItemSlot, curRank );

	return true;
}

⌨️ 快捷键说明

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