📄 gmcmdmanager.cpp
字号:
~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 + -