本文整理汇总了C++中MapInfo::HasFlag方法的典型用法代码示例。如果您正苦于以下问题:C++ MapInfo::HasFlag方法的具体用法?C++ MapInfo::HasFlag怎么用?C++ MapInfo::HasFlag使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类MapInfo
的用法示例。
在下文中一共展示了MapInfo::HasFlag方法的4个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: _HandleAreaTriggerOpcode
//.........这里部分代码省略.........
}break;
case AREA_TRIGGER_FAILURE_NO_ATTUNE_Q:
{
Quest * pQuest = QuestStorage.LookupEntry(pMi->required_quest);
snprintf(msg, 200, pReason, pQuest ? pQuest->title : "UNKNOWN");
data << msg;
}break;
case AREA_TRIGGER_FAILURE_NO_KEY:
{
string temp_msg[2];
string tmp_msg;
for(uint32 i = 0; i < 2; ++i)
{
if (pMi->heroic_key[i] && _player->GetItemInterface()->GetItemCount(pMi->heroic_key[i], false)==0)
{
ItemPrototype * pKey = ItemPrototypeStorage.LookupEntry(pMi->heroic_key[i]);
if(pKey)
temp_msg[i] += pKey->Name1;
else
temp_msg[i] += "UNKNOWN";
}
}
tmp_msg += temp_msg[0];
if(temp_msg[0].size() && temp_msg[1].size())
tmp_msg += "\" and \"";
tmp_msg += temp_msg[1];
snprintf(msg, 200, pReason, tmp_msg.c_str());
data << msg;
}break;
case AREA_TRIGGER_FAILURE_LEVEL_HEROIC:
{
snprintf(msg, 200, pReason, pMi->HasFlag(WMI_INSTANCE_XPACK_02) ? 80 : 70);
data << msg;
}break;
default:
{
data << pReason;
}break;
}
data << uint8(0);
SendPacket(&data);
return;
}
if( _player->IsMounted())
TO_UNIT(_player)->Dismount();
uint32 InstanceID = 0;
// Try to find a saved instance and
// do not handle Hyjal Inn (trigger 4319), since we need a unique mapid when generating our instance_id.
if( id != 4319 && pMi && ( map->israid() || _player->iRaidType >= MODE_NORMAL_25MEN && pMi->type == INSTANCE_MULTIMODE ) )
{
//Do we have a saved instance we should use?
Instance * in = NULL;
in = sInstanceMgr.GetSavedInstance( pMi->mapid,_player->GetLowGUID(), _player->iRaidType );
if( in != NULL && in->m_instanceId )
{
//If we are the first to enter this instance, also set our current group id.
if( in->m_mapMgr == NULL || (!in->m_mapMgr->HasPlayers() && _player->GetGroupID() != in->m_creatorGroup))
in->m_creatorGroup =_player->GetGroupID();
InstanceID = in->m_instanceId;
}
示例2: _HandleAreaTriggerOpcode
void WorldSession::_HandleAreaTriggerOpcode(uint32 id)
{
sLog.outDebug("AreaTrigger: %u", id);
WorldPacket data(80);
AreaTrigger * pAreaTrigger = AreaTriggerStorage.LookupEntry(id);
// Search quest log, find any exploration quests
sQuestMgr.OnPlayerExploreArea(GetPlayer(),id);
// if in BG handle is triggers
if(GetPlayer()->m_bgInBattleground && GetPlayer()->GetCurrentBattleground() != NULL)
{
GetPlayer()->GetCurrentBattleground()->HandleBattlegroundAreaTrigger(GetPlayer(), id);
return;
}
if(GetPermissionCount())
{
sChatHandler.BlueSystemMessage(this, "[%sSystem%s] |rEntered areatrigger: %s%u.", MSG_COLOR_WHITE, MSG_COLOR_LIGHTBLUE,
MSG_COLOR_SUBWHITE, id);
}
/* if we don't have an areatrigger, create one on the stack to use for gm scripts :p */
if(!pAreaTrigger)
{
AreaTrigger tmpTrigger;
tmpTrigger.AreaTriggerID = id;
ScriptSystem->OnActivateAreaTrigger(&tmpTrigger, _player);
return;
}
/* script prerequsites */
if(ScriptSystem->OnActivateAreaTrigger(pAreaTrigger, _player) == false)
return;
if(pAreaTrigger->Type == ATTYPE_BATTLEGROUND)
{
if(pAreaTrigger->Mapid == 489) // hack fix
pAreaTrigger->Mapid = 2;
else if(pAreaTrigger->Mapid == 529)
pAreaTrigger->Mapid = 3;
else if(pAreaTrigger->Mapid == 30)
pAreaTrigger->Mapid = 1;
WorldPacket *pkt = sBattlegroundMgr.BuildBattlegroundListPacket(GetPlayer()->GetGUID(), _player,
pAreaTrigger->Mapid);
SendPacket(pkt);
delete pkt;
return;
}
bool bFailedPre = false;
std::string failed_reason;
if(pAreaTrigger->required_level)
{
if(GetPlayer()->getLevel() < pAreaTrigger->required_level)
{
bFailedPre = true;
if(failed_reason.size() > 0)
failed_reason += ", and ";
else
failed_reason = "You must be ";
// mm hacky
char lvltext[30];
snprintf(lvltext, 30, "at least level %d", (int)pAreaTrigger->required_level);
failed_reason += lvltext;
}
}
if(bFailedPre)
{
failed_reason += " before you're allowed through here.";
WorldPacket msg;
msg.Initialize(SMSG_AREA_TRIGGER_MESSAGE);
msg << uint32(0) << failed_reason << uint8(0);
SendPacket(&msg);
sLog.outDebug("Player %s failed areatrigger prereq - %s", GetPlayer()->GetName(), failed_reason.c_str());
return;
}
switch(pAreaTrigger->Type)
{
case ATTYPE_INSTANCE:
{
if(GetPlayer()->GetPlayerStatus() != TRANSFER_PENDING) //only ports if player is out of pendings
{
GetPlayer()->SaveEntryPoint(pAreaTrigger->Mapid);
//death system check.
Corpse *pCorpse = NULL;
// CorpseData *pCorpseData = NULL;
MapInfo *pMapinfo = NULL;
pMapinfo = WorldMapInfoStorage.LookupEntry(pAreaTrigger->Mapid);
if(pMapinfo && !pMapinfo->HasFlag(WMI_INSTANCE_ENABLED))
{
WorldPacket msg;
msg.Initialize(SMSG_AREA_TRIGGER_MESSAGE);
//.........这里部分代码省略.........
示例3: HandleAreaTriggerOpcode
void WorldSession::HandleAreaTriggerOpcode(WorldPacket & recv_data)
{
CHECK_PACKET_SIZE(recv_data, 4);
uint32 id = 0;
WorldPacket data(80);
AreaTrigger *pAreaTrigger = NULL;
recv_data >> id;
sLog.outDebug("AreaTrigger: %u", id);
pAreaTrigger = sWorld.GetAreaTrigger(id);
// Search quest log, find any exploration quests
sQuestMgr.OnPlayerExploreArea(GetPlayer(),id);
// if in BG handle is triggers
if(GetPlayer()->m_bgInBattleground && GetPlayer()->GetCurrentBattleground() != NULL)
{
GetPlayer()->GetCurrentBattleground()->HandleBattlegroundAreaTrigger(GetPlayer(), id);
return;
}
if(pAreaTrigger && pAreaTrigger->Type == ATTYPE_BATTLEGROUND)
{
if(pAreaTrigger->Mapid == 489) // hack fix
pAreaTrigger->Mapid = 2;
else if(pAreaTrigger->Mapid == 529)
pAreaTrigger->Mapid = 3;
else if(pAreaTrigger->Mapid == 30)
pAreaTrigger->Mapid = 1;
WorldPacket *pkt = sBattlegroundMgr.BuildBattlegroundListPacket(GetPlayer()->GetGUID(), _player,
pAreaTrigger->Mapid);
SendPacket(pkt);
delete pkt;
return;
}
if(pAreaTrigger)
{
bool bFailedPre = false;
std::string failed_reason;
if(pAreaTrigger->required_level)
{
if(GetPlayer()->getLevel() < pAreaTrigger->required_level)
{
bFailedPre = true;
if(failed_reason.size() > 0)
failed_reason += ", and ";
else
failed_reason = "You must be ";
// mm hacky
char lvltext[30];
sprintf(lvltext, "at least level %d", pAreaTrigger->required_level);
failed_reason += lvltext;
}
}
if(bFailedPre)
{
failed_reason += " before you're allowed through here.";
WorldPacket msg;
msg.Initialize(SMSG_AREA_TRIGGER_MESSAGE);
msg << uint32(0) << failed_reason << uint8(0);
SendPacket(&msg);
sLog.outDebug("Player %s failed areatrigger prereq - %s", GetPlayer()->GetName(), failed_reason.c_str());
return;
}
switch(pAreaTrigger->Type)
{
case ATTYPE_INSTANCE:
{
if(GetPlayer()->GetPlayerStatus() != TRANSFER_PENDING) //only ports if player is out of pendings
{
GetPlayer()->SaveEntryPoint();
//death system check.
Corpse *pCorpse = NULL;
CorpseData *pCorpseData = NULL;
MapInfo *pMapinfo = NULL;
pMapinfo = sWorld.GetMapInformation(pAreaTrigger->Mapid);
if(pMapinfo && !pMapinfo->HasFlag(WMI_INSTANCE_ENABLED))
{
WorldPacket msg;
msg.Initialize(SMSG_AREA_TRIGGER_MESSAGE);
msg << uint32(0) << "This instance is currently unavailable." << uint8(0) << uint8(0);
SendPacket(&msg);
return;
}
if(pMapinfo && pMapinfo->HasFlag(WMI_INSTANCE_XPACK_01) && !HasFlag(ACCOUNT_FLAG_XPACK_01))
{
WorldPacket msg;
msg.Initialize(SMSG_BROADCAST_MSG);
msg << uint32(3) << "You must have The Burning Crusade Expansion to access this content." << uint8(0);
SendPacket(&msg);
return;
}
if(!GetPlayer()->isAlive())
//.........这里部分代码省略.........
示例4: PreTeleport
uint32 InstanceMgr::PreTeleport(uint32 mapid, Player* plr, uint32 instanceid)
{
// preteleport is where all the magic happens :P instance creation, etc.
MapInfo * inf = LimitedMapInfoStorage.LookupEntry(mapid);
MapEntry* map = dbcMap.LookupEntry(mapid);
InstanceMap * instancemap;
Instance * in = NULL;
//is the map vaild?
if(inf == NULL || mapid >= NUM_MAPS)
return INSTANCE_ABORT_NOT_FOUND;
// main continent check.
if(inf->type == INSTANCE_NULL) // we can check if the destination world server is online or not and then cancel them before they load.
return (m_singleMaps[mapid] != NULL) ? INSTANCE_OK : INSTANCE_ABORT_NOT_FOUND;
// shouldn't happen
if(inf->type == INSTANCE_PVP)
return INSTANCE_ABORT_NOT_FOUND;
if(map->israid()) // check that heroic mode is available if the player has requested it.
{
if(plr->iRaidType > 1 && inf->type != INSTANCE_MULTIMODE)
return INSTANCE_ABORT_HEROIC_MODE_NOT_AVAILABLE;
}
else if(plr->iInstanceType && inf->type != INSTANCE_MULTIMODE)
return INSTANCE_ABORT_HEROIC_MODE_NOT_AVAILABLE;
//do we need addition raid/heroic checks?
Group * pGroup = plr->GetGroup() ;
if( !plr->triggerpass_cheat )
{
// players without groups cannot enter raid instances (no soloing them:P)
if( pGroup == NULL && (map->israid() || inf->type == INSTANCE_MULTIMODE))
return INSTANCE_ABORT_NOT_IN_RAID_GROUP;
//and has the required level
if( plr->getLevel() < 80)
{
if(!map->israid())
{
//otherwise we still need to be lvl 70/80 for heroic.
if( plr->iInstanceType && plr->getLevel() < uint32(inf->HasFlag(WMI_INSTANCE_XPACK_02) ? 80 : 70))
return INSTANCE_ABORT_HEROIC_MODE_NOT_AVAILABLE;
}
else
//otherwise we still need to be lvl 70/80 for heroic.
if( plr->iRaidType > 1 && plr->getLevel() < uint32(inf->HasFlag(WMI_INSTANCE_XPACK_02) ? 80 : 70))
return INSTANCE_ABORT_HEROIC_MODE_NOT_AVAILABLE;
//and we might need a key too.
bool reqkey = (inf->heroic_key[0] || inf->heroic_key[1])? true : false;
bool haskey = (plr->GetItemInterface()->GetItemCount(inf->heroic_key[0], false) || plr->GetItemInterface()->GetItemCount(inf->heroic_key[1], false))? true : false;
if(reqkey && !haskey)
return INSTANCE_ABORT_HEROIC_MODE_NOT_AVAILABLE;
}
}
// if we are here, it means:
// 1) we're a non-raid instance
// 2) we're a raid instance, and the person is in a group.
// so, first we have to check if they have an instance on this map already, if so, allow them to teleport to that.
// next we check if there is a saved instance belonging to him.
// otherwise, we can create them a new one.
m_mapLock.Acquire();
//find all instances for our map
instancemap = m_instances[mapid];
if(instancemap)
{
InstanceMap::iterator itr;
// do we have a specific instance id we should enter (saved or active).
// don't bother looking for saved instances, if we had one we found it in areatrigger.cpp
if(instanceid != 0)
{
itr = instancemap->find(instanceid);
if(itr != instancemap->end())
{
in = itr->second;
//we have an instance,but can we enter it?
uint8 owns = PlayerOwnsInstance( in, plr );
if( owns >= OWNER_CHECK_OK )
{
// If the map is active and has players
if(in->m_mapMgr && in->m_mapMgr->HasPlayers() && !plr->triggerpass_cheat)
{
//check if combat is in progress
if( in->m_mapMgr->IsCombatInProgress())
{
m_mapLock.Release();
return INSTANCE_ABORT_ENCOUNTER;
}
// check if we are full
if( in->m_mapMgr->GetPlayerCount() >= inf->playerlimit )
{
m_mapLock.Release();
return INSTANCE_ABORT_FULL;
}
//.........这里部分代码省略.........