本文整理汇总了C++中GetPlayerBotsBegin函数的典型用法代码示例。如果您正苦于以下问题:C++ GetPlayerBotsBegin函数的具体用法?C++ GetPlayerBotsBegin怎么用?C++ GetPlayerBotsBegin使用的例子?那么恭喜您, 这里精选的函数代码示例或许可以为您提供帮助。
在下文中一共展示了GetPlayerBotsBegin函数的15个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: OnPlayerLogin
void RandomPlayerbotMgr::OnPlayerLogin(Player* player)
{
for (PlayerBotMap::const_iterator it = GetPlayerBotsBegin(); it != GetPlayerBotsEnd(); ++it)
{
Player* const bot = it->second;
if (player == bot || player->GetPlayerbotAI())
continue;
Group* group = bot->GetGroup();
if (!group)
continue;
for (GroupReference *gref = group->GetFirstMember(); gref; gref = gref->next())
{
Player* member = gref->getSource();
PlayerbotAI* ai = bot->GetPlayerbotAI();
if (member == player && (!ai->GetMaster() || ai->GetMaster()->GetPlayerbotAI()))
{
ai->SetMaster(player);
ai->ResetStrategies();
ai->TellMaster("Hello");
break;
}
}
}
if (!player->GetPlayerbotAI())
players.push_back(player);
}
示例2: PlayerbotAI
void PlayerbotMgr::OnBotLogin(Player * const bot)
{
// give the bot some AI, object is owned by the player class
PlayerbotAI* ai = new PlayerbotAI(this, bot);
bot->SetPlayerbotAI(ai);
// tell the world session that they now manage this new bot
m_playerBots[bot->GetObjectGuid()] = bot;
// if bot is in a group and master is not in group then
// have bot leave their group
if (bot->GetGroup() &&
(m_master->GetGroup() == nullptr ||
m_master->GetGroup()->IsMember(bot->GetObjectGuid()) == false))
bot->RemoveFromGroup();
// sometimes master can lose leadership, pass leadership to master check
const ObjectGuid masterGuid = m_master->GetObjectGuid();
if (m_master->GetGroup() &&
!m_master->GetGroup()->IsLeader(masterGuid))
// But only do so if one of the master's bots is leader
for (PlayerBotMap::const_iterator itr = GetPlayerBotsBegin(); itr != GetPlayerBotsEnd(); itr++)
{
Player* bot = itr->second;
if (m_master->GetGroup()->IsLeader(bot->GetObjectGuid()))
{
m_master->GetGroup()->ChangeLeader(masterGuid);
break;
}
}
}
示例3: Stay
void PlayerbotMgr::Stay()
{
for (PlayerBotMap::const_iterator itr = GetPlayerBotsBegin(); itr != GetPlayerBotsEnd(); ++itr)
{
Player* bot = itr->second;
bot->GetMotionMaster()->Clear();
}
}
示例4: HandleCommand
void RandomPlayerbotMgr::HandleCommand(uint32 type, const string& text, Player& fromPlayer)
{
for (PlayerBotMap::const_iterator it = GetPlayerBotsBegin(); it != GetPlayerBotsEnd(); ++it)
{
Player* const bot = it->second;
bot->GetPlayerbotAI()->HandleCommand(type, text, fromPlayer);
}
}
示例5: RemoveAllBotsFromGroup
void PlayerbotMgr::RemoveAllBotsFromGroup()
{
for (PlayerBotMap::const_iterator it = GetPlayerBotsBegin(); m_master->GetGroup() && it != GetPlayerBotsEnd(); ++it)
{
Player* const bot = it->second;
if (bot->IsInGroup(m_master))
m_master->GetGroup()->RemoveMember(bot->GetObjectGuid(), 0);
}
}
示例6: while
void PlayerbotMgr::LogoutAllBots()
{
while (true)
{
PlayerBotMap::const_iterator itr = GetPlayerBotsBegin();
if (itr == GetPlayerBotsEnd()) break;
Player* bot= itr->second;
LogoutPlayerBot(bot->GetGUID());
}
}
示例7: while
void PlayerbotMgr::LogoutAllBots()
{
while (true)
{
PlayerBotMap::const_iterator itr = GetPlayerBotsBegin();
if (itr == GetPlayerBotsEnd()) break;
Player* bot = itr->second;
LogoutPlayerBot(bot->GetObjectGuid());
}
RemoveAllBotsFromGroup();
}
示例8: OnMasterLevelUp
void PlayerbotMgr::OnMasterLevelUp()
{
// give all bots the same level as the master so they stay current
for (PlayerBotMap::const_iterator it = GetPlayerBotsBegin(); it != GetPlayerBotsEnd(); ++it)
{
Player* const bot = it->second;
if (bot->getLevel() < m_master->getLevel())
{
bot->GiveLevel(m_master->getLevel());
bot->GetPlayerbotAI()->Levelup();
}
}
}
示例9: while
void PlayerbotMgr::LogoutAllBots()
{
while (true)
{
PlayerBotMap::const_iterator itr = GetPlayerBotsBegin();
if (itr == GetPlayerBotsEnd()) break;
if (Player* bot = itr->second)
{
LogoutPlayerBot(bot->GetObjectGuid());
m_botCount--;
}
}
RemoveAllBotsFromGroup(); ///-> If bot are logging out remove them group
}
示例10: WorldPacket
void PlayerbotMgr::OnBotLogin(Player* const bot)
{
// simulate client taking control
WorldPacket* const pCMSG_SET_ACTIVE_MOVER = new WorldPacket(CMSG_SET_ACTIVE_MOVER, 8);
*pCMSG_SET_ACTIVE_MOVER << bot->GetObjectGuid();
bot->GetSession()->QueuePacket(std::move(std::unique_ptr<WorldPacket>(pCMSG_SET_ACTIVE_MOVER)));
WorldPacket* const pMSG_MOVE_FALL_LAND = new WorldPacket(MSG_MOVE_FALL_LAND, 28);
*pMSG_MOVE_FALL_LAND << bot->GetMover()->m_movementInfo;
bot->GetSession()->QueuePacket(std::move(std::unique_ptr<WorldPacket>(pMSG_MOVE_FALL_LAND)));
// give the bot some AI, object is owned by the player class
PlayerbotAI* ai = new PlayerbotAI(this, bot);
bot->SetPlayerbotAI(ai);
// tell the world session that they now manage this new bot
m_playerBots[bot->GetObjectGuid()] = bot;
// if bot is in a group and master is not in group then
// have bot leave their group
if (bot->GetGroup() &&
(m_master->GetGroup() == nullptr ||
m_master->GetGroup()->IsMember(bot->GetObjectGuid()) == false))
bot->RemoveFromGroup();
// sometimes master can lose leadership, pass leadership to master check
const ObjectGuid masterGuid = m_master->GetObjectGuid();
if (m_master->GetGroup() &&
!m_master->GetGroup()->IsLeader(masterGuid))
{
// But only do so if one of the master's bots is leader
for (PlayerBotMap::const_iterator itr = GetPlayerBotsBegin(); itr != GetPlayerBotsEnd(); itr++)
{
Player* bot = itr->second;
if (m_master->GetGroup()->IsLeader(bot->GetObjectGuid()))
{
m_master->GetGroup()->ChangeLeader(masterGuid);
break;
}
}
}
}
示例11: OnPlayerLogout
void RandomPlayerbotMgr::OnPlayerLogout(Player* player)
{
for (PlayerBotMap::const_iterator it = GetPlayerBotsBegin(); it != GetPlayerBotsEnd(); ++it)
{
Player* const bot = it->second;
PlayerbotAI* ai = bot->GetPlayerbotAI();
if (player == ai->GetMaster())
{
ai->SetMaster(NULL);
ai->ResetStrategies();
}
}
if (!player->GetPlayerbotAI())
{
vector<Player*>::iterator i = find(players.begin(), players.end(), player);
if (i != players.end())
players.erase(i);
}
}
示例12: switch
void PlayerbotMgr::HandleMasterIncomingPacket(const WorldPacket& packet)
{
switch (packet.GetOpcode())
{
case CMSG_OFFER_PETITION:
{
WorldPacket p(packet);
p.rpos(0); // reset reader
ObjectGuid petitionGuid;
ObjectGuid playerGuid;
uint32 junk;
p >> junk; // this is not petition type!
p >> petitionGuid; // petition guid
p >> playerGuid; // player guid
Player* player = ObjectAccessor::FindPlayer(playerGuid);
if (!player)
return;
uint32 petitionLowGuid = petitionGuid.GetCounter();
QueryResult* result = CharacterDatabase.PQuery("SELECT * FROM petition_sign WHERE playerguid = '%u' AND petitionguid = '%u'", player->GetGUIDLow(), petitionLowGuid);
if (result)
{
ChatHandler(m_master).PSendSysMessage("%s has already signed the petition", player->GetName());
delete result;
return;
}
CharacterDatabase.PExecute("INSERT INTO petition_sign (ownerguid,petitionguid, playerguid, player_account) VALUES ('%u', '%u', '%u','%u')",
GetMaster()->GetGUIDLow(), petitionLowGuid, player->GetGUIDLow(), GetMaster()->GetSession()->GetAccountId());
p.Initialize(SMSG_PETITION_SIGN_RESULTS, (8 + 8 + 4));
p << ObjectGuid(petitionGuid);
p << ObjectGuid(playerGuid);
p << uint32(PETITION_SIGN_OK);
// close at signer side
GetMaster()->GetSession()->SendPacket(p);
return;
}
case CMSG_ACTIVATETAXI:
{
WorldPacket p(packet);
p.rpos(0); // reset reader
ObjectGuid guid;
std::vector<uint32> nodes;
nodes.resize(2);
uint8 delay = 9;
p >> guid >> nodes[0] >> nodes[1];
// DEBUG_LOG ("[PlayerbotMgr]: HandleMasterIncomingPacket - Received CMSG_ACTIVATETAXI from %d to %d", nodes[0], nodes[1]);
for (PlayerBotMap::const_iterator it = GetPlayerBotsBegin(); it != GetPlayerBotsEnd(); ++it)
{
delay = delay + 3;
Player* const bot = it->second;
if (!bot)
return;
Group* group = bot->GetGroup();
if (!group)
continue;
Unit* target = ObjectAccessor::GetUnit(*bot, guid);
bot->GetPlayerbotAI()->SetIgnoreUpdateTime(delay);
bot->GetMotionMaster()->Clear(true);
bot->GetMotionMaster()->MoveFollow(target, INTERACTION_DISTANCE, bot->GetOrientation());
bot->GetPlayerbotAI()->GetTaxi(guid, nodes);
}
return;
}
case CMSG_ACTIVATETAXIEXPRESS:
{
WorldPacket p(packet);
p.rpos(0); // reset reader
ObjectGuid guid;
uint32 node_count;
uint8 delay = 9;
p >> guid;
p.read_skip<uint32>();
p >> node_count;
std::vector<uint32> nodes;
for (uint32 i = 0; i < node_count; ++i)
{
uint32 node;
p >> node;
nodes.push_back(node);
//.........这里部分代码省略.........
示例13: UpdateTimeOutTime
//.........这里部分代码省略.........
// not expected _player or must checked in packet hanlder
(this->*opHandle.handler)(*packet);
if (sLog.IsOutDebug() && packet->rpos() < packet->wpos())
LogUnprocessedTail(packet);
}
break;
case STATUS_TRANSFER:
if (!_player)
LogUnexpectedOpcode(packet, "the player has not logged in yet");
else if (_player->IsInWorld())
LogUnexpectedOpcode(packet, "the player is still in world");
else
{
(this->*opHandle.handler)(*packet);
if (sLog.IsOutDebug() && packet->rpos() < packet->wpos())
LogUnprocessedTail(packet);
}
break;
case STATUS_AUTHED:
// prevent cheating with skip queue wait
if (m_inQueue)
{
LogUnexpectedOpcode(packet, "the player not pass queue yet");
break;
}
// single from authed time opcodes send in to after logout time
// and before other STATUS_LOGGEDIN_OR_RECENTLY_LOGGOUT opcodes.
if (packet->GetOpcode() != CMSG_SET_ACTIVE_VOICE_CHANNEL)
m_playerRecentlyLogout = false;
(this->*opHandle.handler)(*packet);
if (sLog.IsOutDebug() && packet->rpos() < packet->wpos())
LogUnprocessedTail(packet);
break;
case STATUS_NEVER:
/*
sLog.outError("SESSION: received not allowed opcode %s (0x%.4X)",
LookupOpcodeName(packet->GetOpcode()),
packet->GetOpcode());
*/
break;
}
}
catch(ByteBufferException &)
{
sLog.outError("WorldSession::Update ByteBufferException occured while parsing a packet (opcode: %u) from client %s, accountid=%i. Skipped packet.",
packet->GetOpcode(), GetRemoteAddress().c_str(), GetAccountId());
if (sLog.IsOutDebug())
{
sLog.outDebug("Dumping error causing packet:");
packet->hexlike();
}
}
}
delete packet;
}
time_t currTime = time(NULL);
///- If necessary, log the player out
if (ShouldLogOut(currTime) && !m_playerLoading)
LogoutPlayer(true);
//PlayerBot mod - Process player bot packets
//The PlayerbotAI class adds to the packet queue to simulate a real player
//since Playerbots are known to the World obj only its master's
//WorldSession object we need to process all master's bot's packets.
for(PlayerBotMap::const_iterator itr = GetPlayerBotsBegin(); itr != GetPlayerBotsEnd(); ++itr)
{
Player *const botPlayer = itr->second;
WorldSession *const pBotWorldSession = botPlayer->GetSession();
if(botPlayer->IsBeingTeleportedFar())
{
pBotWorldSession->HandleMoveWorldportAckOpcode();
}
else if(botPlayer->IsInWorld())
{
WorldPacket *packet;
while(pBotWorldSession->_recvQueue.next(packet))
{
OpcodeHandler &opHandle = opcodeTable[packet->GetOpcode()];
(pBotWorldSession->*opHandle.handler)(*packet);
delete packet;
}
}
}
///- Cleanup socket pointer if need
if (m_Socket && m_Socket->IsClosed())
{
m_Socket->RemoveReference();
m_Socket = NULL;
}
if (!m_Socket)
return false; //Will remove this session from the world session map
return true;
}
示例14: LogoutPlayer
/// %Log the player out
void WorldSession::LogoutPlayer(bool Save)
{
if (!_player) return;
if (_player->IsMounted()) _player->Unmount();
// PlayerBot mod: log out all playerbots owned by this character
//while(!m_playerBots.empty())
// LogoutPlayerBot(m_playerBots.begin()->first, Save);
PlayerBotMap m_pBots;
uint8 m_botCount = 0;
for(PlayerBotMap::const_iterator itr = GetPlayerBotsBegin(); itr != GetPlayerBotsEnd(); ++itr)
{
Player *bot = itr->second;
(m_pBots)[itr->first] = bot;
++m_botCount;
}
// Create a solo bind for player if player is currently in group in instance with all bots
Group *m_Group = _player->GetGroup();
bool rebound = false;
if(m_botCount > 0 && m_Group && m_botCount == m_Group->GetMembersCount()-1)
if (InstanceSave *save = sInstanceSaveManager.GetInstanceSave(_player->GetInstanceId()))
{
_player->BindToInstance(save, false);
save->SetCanReset(false);
rebound = true;
}
for(PlayerBotMap::const_iterator itr2 = m_pBots.begin(); itr2 != m_pBots.end(); ++itr2)
{
Player *botPlayer = itr2->second;
if (!botPlayer) continue;
LogoutPlayerBot(botPlayer->GetGUID(), Save);
}
if (rebound)
_player->m_InstanceValid = true;
// finish pending transfers before starting the logout
while (_player && _player->IsBeingTeleportedFar())
HandleMoveWorldportAckOpcode();
m_playerLogout = true;
m_playerSave = Save;
if (_player)
{
sLFGMgr.Leave(_player);
GetPlayer()->GetSession()->SendLfgUpdateParty(LFG_UPDATETYPE_REMOVED_FROM_QUEUE);
GetPlayer()->GetSession()->SendLfgUpdatePlayer(LFG_UPDATETYPE_REMOVED_FROM_QUEUE);
GetPlayer()->GetSession()->SendLfgUpdateSearch(false);
if (uint64 lguid = GetPlayer()->GetLootGUID())
DoLootRelease(lguid);
///- If the player just died before logging out, make him appear as a ghost
//FIXME: logout must be delayed in case lost connection with client in time of combat
if (_player->GetDeathTimer())
{
_player->getHostileRefManager().deleteReferences();
_player->BuildPlayerRepop();
_player->RepopAtGraveyard();
}
else if (!_player->getAttackers().empty())
{
_player->CombatStop();
_player->getHostileRefManager().setOnlineOfflineState(false);
_player->RemoveAllAurasOnDeath();
// build set of player who attack _player or who have pet attacking of _player
std::set<Player*> aset;
for (Unit::AttackerSet::const_iterator itr = _player->getAttackers().begin(); itr != _player->getAttackers().end(); ++itr)
{
Unit* owner = (*itr)->GetOwner(); // including player controlled case
if (owner)
{
if (owner->GetTypeId() == TYPEID_PLAYER)
aset.insert(owner->ToPlayer());
}
else
if ((*itr)->GetTypeId() == TYPEID_PLAYER)
aset.insert((Player*)(*itr));
}
_player->SetPvPDeath(!aset.empty());
_player->KillPlayer();
_player->BuildPlayerRepop();
_player->RepopAtGraveyard();
// give honor to all attackers from set like group case
for (std::set<Player*>::const_iterator itr = aset.begin(); itr != aset.end(); ++itr)
(*itr)->RewardHonor(_player,aset.size());
// give bg rewards and update counters like kill by first from attackers
// this can't be called for all attackers.
if (!aset.empty())
if (BattleGround *bg = _player->GetBattleGround())
//.........这里部分代码省略.........
示例15: switch
void PlayerbotMgr::HandleMasterIncomingPacket(const WorldPacket& packet)
{
switch (packet.GetOpcode())
{
// if master is logging out, log out all bots
case CMSG_LOGOUT_REQUEST:
{
LogoutAllBots();
return;
}
// If master inspects one of his bots, give the master useful info in chat window
// such as inventory that can be equipped
case CMSG_INSPECT:
{
WorldPacket p(packet);
p.rpos(0); // reset reader
uint64 guid;
p >> guid;
Player* const bot = GetPlayerBot(guid);
if (bot) bot->GetPlayerbotAI()->SendNotEquipList(*bot);
return;
}
// handle emotes from the master
//case CMSG_EMOTE:
case CMSG_TEXT_EMOTE:
{
WorldPacket p(packet);
p.rpos(0); // reset reader
uint32 emoteNum;
p >> emoteNum;
/* std::ostringstream out;
out << "emote is: " << emoteNum;
ChatHandler ch(m_master);
ch.SendSysMessage(out.str().c_str()); */
switch (emoteNum)
{
case TEXTEMOTE_BOW:
{
// Buff anyone who bows before me. Useful for players not in bot's group
// How do I get correct target???
//Player* const pPlayer = GetPlayerBot(m_master->GetSelection());
//if (pPlayer->GetPlayerbotAI()->GetClassAI())
// pPlayer->GetPlayerbotAI()->GetClassAI()->BuffPlayer(pPlayer);
return;
}
/*
case TEXTEMOTE_BONK:
{
Player* const pPlayer = GetPlayerBot(m_master->GetSelection());
if (!pPlayer || !pPlayer->GetPlayerbotAI())
return;
PlayerbotAI* const pBot = pPlayer->GetPlayerbotAI();
ChatHandler ch(m_master);
{
std::ostringstream out;
out << "time(0): " << time(0)
<< " m_ignoreAIUpdatesUntilTime: " << pBot->m_ignoreAIUpdatesUntilTime;
ch.SendSysMessage(out.str().c_str());
}
{
std::ostringstream out;
out << "m_TimeDoneEating: " << pBot->m_TimeDoneEating
<< " m_TimeDoneDrinking: " << pBot->m_TimeDoneDrinking;
ch.SendSysMessage(out.str().c_str());
}
{
std::ostringstream out;
out << "m_CurrentlyCastingSpellId: " << pBot->m_CurrentlyCastingSpellId;
ch.SendSysMessage(out.str().c_str());
}
{
std::ostringstream out;
out << "IsBeingTeleported() " << pBot->GetPlayer()->IsBeingTeleported();
ch.SendSysMessage(out.str().c_str());
}
{
std::ostringstream out;
bool tradeActive = (pBot->GetPlayer()->GetTrader()) ? true : false;
out << "tradeActive: " << tradeActive;
ch.SendSysMessage(out.str().c_str());
}
{
std::ostringstream out;
out << "IsCharmed() " << pBot->getPlayer()->isCharmed();
ch.SendSysMessage(out.str().c_str());
}
return;
}
*/
case TEXTEMOTE_EAT:
case TEXTEMOTE_DRINK:
{
for (PlayerBotMap::const_iterator it = GetPlayerBotsBegin(); it != GetPlayerBotsEnd(); ++it)
{
//.........这里部分代码省略.........