您当前的位置:首页 > IT编程 > C++
| C语言 | Java | VB | VC | python | Android | TensorFlow | C++ | oracle | 学术与代码 | cnn卷积神经网络 | gnn | 图像修复 | Keras | 数据集 | Neo4j | 自然语言处理 | 深度学习 | 医学CAD | 医学影像 | 超参数 | pointnet | pytorch | 异常检测 | Transformers | 情感分类 | 知识图谱 |

自学教程:C++ GUID_HIPART函数代码示例

51自学网 2021-06-01 20:59:50
  C++
这篇教程C++ GUID_HIPART函数代码示例写得很实用,希望能帮到您。

本文整理汇总了C++中GUID_HIPART函数的典型用法代码示例。如果您正苦于以下问题:C++ GUID_HIPART函数的具体用法?C++ GUID_HIPART怎么用?C++ GUID_HIPART使用的例子?那么恭喜您, 这里精选的函数代码示例或许可以为您提供帮助。

在下文中一共展示了GUID_HIPART函数的25个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于我们的系统推荐出更棒的C++代码示例。

示例1: TC_LOG_DEBUG

void WorldSession::HandleAttackSwingOpcode(WorldPacket& recvData){    uint64 guid;    recvData >> guid;    TC_LOG_DEBUG("network", "WORLD: Recvd CMSG_ATTACKSWING Message guidlow:%u guidhigh:%u", GUID_LOPART(guid), GUID_HIPART(guid));    Unit* pEnemy = ObjectAccessor::GetUnit(*_player, guid);    if (!pEnemy)    {        // stop attack state at client        SendAttackStop(NULL);        return;    }    if (!_player->IsValidAttackTarget(pEnemy))    {        // stop attack state at client        SendAttackStop(pEnemy);        return;    }    _player->Attack(pEnemy, true);}
开发者ID:tyraela,项目名称:NetherCore,代码行数:25,


示例2: DEBUG_LOG

void WorldSession::HandleAttackSwingOpcode( WorldPacket & recv_data ){    uint64 guid;    recv_data >> guid;    DEBUG_LOG( "WORLD: Recvd CMSG_ATTACKSWING Message guidlow:%u guidhigh:%u", GUID_LOPART(guid), GUID_HIPART(guid) );    Unit *pEnemy = ObjectAccessor::GetUnit(*_player, guid);    if(!pEnemy)    {        if(!IS_UNIT_GUID(guid))            sLog.outError("WORLD: Object %u (TypeID: %u) isn't player, pet or creature",GUID_LOPART(guid),GuidHigh2TypeId(GUID_HIPART(guid)));        else            sLog.outError( "WORLD: Enemy %s %u not found",GetLogNameForGuid(guid),GUID_LOPART(guid));        // stop attack state at client        SendAttackStop(NULL);        return;    }    if(_player->IsFriendlyTo(pEnemy) || pEnemy->HasFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE | UNIT_FLAG_NOT_SELECTABLE))    {        sLog.outError( "WORLD: Enemy %s %u is friendly",(IS_PLAYER_GUID(guid) ? "player" : "creature"),GUID_LOPART(guid));        // stop attack state at client        SendAttackStop(pEnemy);        return;    }    if(!pEnemy->isAlive())    {        // client can generate swing to known dead target if autoswitch between autoshot and autohit is enabled in client options        // stop attack state at client        SendAttackStop(pEnemy);        return;    }    _player->Attack(pEnemy,true);}
开发者ID:web0316,项目名称:WOW,代码行数:40,


示例3: id

void WorldSession::HandleBattlemasterJoinOpcode(WorldPacket& recvData){    uint64 guid;    uint32 bgTypeId_;    uint32 instanceId;    uint8 joinAsGroup;    bool isPremade = false;    Group* grp = NULL;    recvData >> guid;                                      // battlemaster guid    recvData >> bgTypeId_;                                 // battleground type id (DBC id)    recvData >> instanceId;                                // instance id, 0 if First Available selected    recvData >> joinAsGroup;                               // join as group    if (!sBattlemasterListStore.LookupEntry(bgTypeId_))    {        sLog->outError(LOG_FILTER_NETWORKIO, "Battleground: invalid bgtype (%u) received. possible cheater? player guid %u", bgTypeId_, _player->GetGUIDLow());        return;    }    if (DisableMgr::IsDisabledFor(DISABLE_TYPE_BATTLEGROUND, bgTypeId_, NULL))    {        ChatHandler(this).PSendSysMessage(LANG_BG_DISABLED);        return;    }    BattlegroundTypeId bgTypeId = BattlegroundTypeId(bgTypeId_);    sLog->outDebug(LOG_FILTER_NETWORKIO, "WORLD: Recvd CMSG_BATTLEMASTER_JOIN Message from (GUID: %u TypeId:%u)", GUID_LOPART(guid), GuidHigh2TypeId(GUID_HIPART(guid)));    // can do this, since it's battleground, not arena    BattlegroundQueueTypeId bgQueueTypeId = BattlegroundMgr::BGQueueTypeId(bgTypeId, 0);    BattlegroundQueueTypeId bgQueueTypeIdRandom = BattlegroundMgr::BGQueueTypeId(BATTLEGROUND_RB, 0);    // ignore if player is already in BG    if (_player->InBattleground())        return;    // get bg instance or bg template if instance not found    Battleground* bg = NULL;    if (instanceId)        bg = sBattlegroundMgr->GetBattlegroundThroughClientInstance(instanceId, bgTypeId);    if (!bg)        bg = sBattlegroundMgr->GetBattlegroundTemplate(bgTypeId);    if (!bg)        return;    // expected bracket entry    PvPDifficultyEntry const* bracketEntry = GetBattlegroundBracketByLevel(bg->GetMapId(), _player->getLevel());    if (!bracketEntry)        return;    GroupJoinBattlegroundResult err;    // check queue conditions    if (!joinAsGroup)    {        if (GetPlayer()->isUsingLfg())        {            // player is using dungeon finder or raid finder            WorldPacket data;            sBattlegroundMgr->BuildGroupJoinedBattlegroundPacket(&data, ERR_LFG_CANT_USE_BATTLEGROUND);            GetPlayer()->GetSession()->SendPacket(&data);            return;        }        // check Deserter debuff        if (!_player->CanJoinToBattleground(bg))        {            WorldPacket data;            sBattlegroundMgr->BuildGroupJoinedBattlegroundPacket(&data, ERR_GROUP_JOIN_BATTLEGROUND_DESERTERS);            _player->GetSession()->SendPacket(&data);            return;        }        if (_player->GetBattlegroundQueueIndex(bgQueueTypeIdRandom) < PLAYER_MAX_BATTLEGROUND_QUEUES)        {            // player is already in random queue            WorldPacket data;            sBattlegroundMgr->BuildGroupJoinedBattlegroundPacket(&data, ERR_IN_RANDOM_BG);            _player->GetSession()->SendPacket(&data);            return;        }        if (_player->InBattlegroundQueue() && bgTypeId == BATTLEGROUND_RB)        {            // player is already in queue, can't start random queue            WorldPacket data;            sBattlegroundMgr->BuildGroupJoinedBattlegroundPacket(&data, ERR_IN_NON_RANDOM_BG);            _player->GetSession()->SendPacket(&data);            return;        }        // check if already in queue        if (_player->GetBattlegroundQueueIndex(bgQueueTypeId) < PLAYER_MAX_BATTLEGROUND_QUEUES)            // player is already in this queue            return;        // check if has free queue slots//.........这里部分代码省略.........
开发者ID:Amit86,项目名称:TrinityCore,代码行数:101,


示例4: questgiver

void WorldSession::HandleQuestgiverStatusQueryOpcode( WorldPacket & recv_data ){    uint64 guid;    recv_data >> guid;    uint8 questStatus = DIALOG_STATUS_NONE;    uint8 defstatus = DIALOG_STATUS_NONE;    Object* questgiver = ObjectAccessor::GetObjectByTypeMask(*_player, guid,TYPEMASK_UNIT|TYPEMASK_GAMEOBJECT);    if (!questgiver)    {        sLog.outDetail("Error in CMSG_QUESTGIVER_STATUS_QUERY, called for not found questgiver (Typeid: %u GUID: %u)",GuidHigh2TypeId(GUID_HIPART(guid)),GUID_LOPART(guid));        return;    }    switch(questgiver->GetTypeId())    {        case TYPEID_UNIT:        {            sLog.outDebug( "WORLD: Received CMSG_QUESTGIVER_STATUS_QUERY for npc, guid = %u",uint32(GUID_LOPART(guid)) );            Creature* cr_questgiver=(Creature*)questgiver;            if ( !cr_questgiver->IsHostileTo(_player))       // not show quest status to enemies            {                questStatus = Script->NPCDialogStatus(_player, cr_questgiver);                if ( questStatus > 6 )                    questStatus = getDialogStatus(_player, cr_questgiver, defstatus);            }            break;        }        case TYPEID_GAMEOBJECT:        {            sLog.outDebug( "WORLD: Received CMSG_QUESTGIVER_STATUS_QUERY for GameObject guid = %u",uint32(GUID_LOPART(guid)) );            GameObject* go_questgiver=(GameObject*)questgiver;            questStatus = Script->GODialogStatus(_player, go_questgiver);            if ( questStatus > 6 )                questStatus = getDialogStatus(_player, go_questgiver, defstatus);            break;        }        default:            sLog.outError("QuestGiver called for unexpected type %u", questgiver->GetTypeId());            break;    }    //inform client about status of quest    _player->PlayerTalkClass->SendQuestGiverStatus(questStatus, guid);}
开发者ID:Sanzzes,项目名称:wopc-core,代码行数:45,


示例5: if

void WorldSession::HandleAutostoreLootItemOpcode( WorldPacket & recv_data ){	if(!_player->IsInWorld()) return;//	uint8 slot = 0;	uint32 itemid = 0;	uint32 amt = 1;	uint8 lootSlot = 0;	uint8 error = 0;	SlotResult slotresult;	Item *add;	Loot *pLoot = NULL;	if(_player->isCasting())		_player->InterruptSpell();	GameObject * pGO = NULL;	Creature * pCreature = NULL;	if(UINT32_LOPART(GUID_HIPART(GetPlayer()->GetLootGUID())) == HIGHGUID_UNIT)	{		pCreature = _player->GetMapMgr()->GetCreature((uint32)GetPlayer()->GetLootGUID());		if (!pCreature)return;		pLoot=&pCreature->loot;		}	else if(UINT32_LOPART(GUID_HIPART(_player->GetLootGUID())) == HIGHGUID_GAMEOBJECT)	{		pGO = _player->GetMapMgr()->GetGameObject((uint32)GetPlayer()->GetLootGUID());		if(!pGO)return;		pLoot=&pGO->loot;	}else if( (UINT32_LOPART(GUID_HIPART(_player->GetLootGUID())) == HIGHGUID_ITEM) )	{		Item *pItem = _player->GetItemInterface()->GetItemByGUID(_player->GetLootGUID());		if(!pItem)			return;		pLoot = pItem->loot;	}	if(!pLoot) return;	recv_data >> lootSlot;	if (lootSlot >= pLoot->items.size())	{		sLog.outDebug("AutoLootItem: Player %s might be using a hack! (slot %d, size %d)",						GetPlayer()->GetName(), lootSlot, pLoot->items.size());		return;	}	amt = pLoot->items.at(lootSlot).iItemsCount;	if (!amt)//Test for party loot	{  		GetPlayer()->GetItemInterface()->BuildInventoryChangeError(NULL, NULL,INV_ERR_ALREADY_LOOTED);		return;	} 	itemid = pLoot->items.at(lootSlot).item.itemid;	ItemPrototype* it = ItemPrototypeStorage.LookupEntry(itemid);	if((error = _player->GetItemInterface()->CanReceiveItem(it, 1)))	{		_player->GetItemInterface()->BuildInventoryChangeError(NULL, NULL, error);		return;	}	if(pGO)		CALL_GO_SCRIPT_EVENT(pGO, OnLootTaken)(_player, it);	else if(pCreature)		CALL_SCRIPT_EVENT(pCreature, OnLootTaken)(_player, it);	add = GetPlayer()->GetItemInterface()->FindItemLessMax(itemid, amt, false);	sHookInterface.OnLoot(_player, pCreature, 0, itemid);	if (!add)	{		slotresult = GetPlayer()->GetItemInterface()->FindFreeInventorySlot(it);		if(!slotresult.Result)		{			GetPlayer()->GetItemInterface()->BuildInventoryChangeError(NULL, NULL, INV_ERR_INVENTORY_FULL);			return;		}			sLog.outDebug("AutoLootItem MISC");		Item *item = objmgr.CreateItem( itemid, GetPlayer());	   		item->SetUInt32Value(ITEM_FIELD_STACK_COUNT,amt);		uint32 rndprop=pLoot->items.at(lootSlot).iRandomProperty;		if(rndprop)			item->SetUInt32Value(ITEM_FIELD_RANDOM_PROPERTIES_ID,rndprop);		item->ApplyRandomProperties();		GetPlayer()->GetItemInterface()->SafeAddItem(item,slotresult.ContainerSlot, slotresult.Slot);				if (it->Class == 12)		// Quest item			sQuestMgr.OnPlayerItemPickup(GetPlayer(),item);	}	else 	{			add->SetCount(add->GetUInt32Value(ITEM_FIELD_STACK_COUNT) + amt);		add->m_isDirty = true;		if (it->Class == 12)		// Quest item			sQuestMgr.OnPlayerItemPickup(GetPlayer(),add);	}//.........这里部分代码省略.........
开发者ID:Sylica2013,项目名称:Antrix,代码行数:101,


示例6: id

void WorldSession::HandleBattleGroundJoinOpcode(WorldPacket& recv_data){    uint64 guid;    uint32 bgTypeId;    uint32 instanceId;    uint8 joinAsGroup;    Group * grp;    recv_data >> guid;                                      // battlemaster guid    recv_data >> bgTypeId;                                  // battleground type id (DBC id)    recv_data >> instanceId;                                // instance id, 0 if First Available selected    recv_data >> joinAsGroup;                               // join as group    if (bgTypeId >= MAX_BATTLEGROUND_TYPES)    {        sLog.outError("Battleground: invalid bgtype received. possible cheater? player guid %u",_player->GetGUIDLow());        return;    }    sLog.outDebug("WORLD: Recvd CMSG_BATTLEMASTER_JOIN Message from (GUID: %u TypeId:%u)", GUID_LOPART(guid),GuidHigh2TypeId(GUID_HIPART(guid)));    // can do this, since it's battleground, not arena    uint32 bgQueueTypeId = sBattleGroundMgr.BGQueueTypeId(bgTypeId, 0);    // ignore if player is already in BG    if (_player->InBattleGround())        return;    Creature* unit = GetPlayer()->GetMap()->GetCreature(guid);    if (!unit)        return;    if (!unit->isBattleMaster())                             // it's not battlemaster        return;    // get bg instance or bg template if instance not found    BattleGround* bg = NULL;    if (instanceId)        bg = sBattleGroundMgr.GetBattleGround(instanceId);    if (!bg && !(bg = sBattleGroundMgr.GetBattleGroundTemplate(bgTypeId)))    {        sLog.outError("Battleground: no available bg / template found");        return;    }    // check queueing conditions    if (!joinAsGroup)    {        // check Deserter debuff        if (!_player->CanJoinToBattleground())        {            WorldPacket data(SMSG_GROUP_JOINED_BATTLEGROUND, 4);            data << (uint32) 0xFFFFFFFE;            _player->GetSession()->SendPacket(&data);            return;        }        // check if already in queue        if (_player->GetBattleGroundQueueIndex(bgQueueTypeId) < PLAYER_MAX_BATTLEGROUND_QUEUES)            //player is already in this queue            return;        // check if has free queue slots        if (!_player->HasFreeBattleGroundQueueId())            return;    }    else    {        grp = _player->GetGroup();        // no group found, error        if (!grp)            return;        uint32 err = grp->CanJoinBattleGroundQueue(bgTypeId, bgQueueTypeId, 0, bg->GetMaxPlayersPerTeam(), false, 0);        if (err != BG_JOIN_ERR_OK)        {            SendBattleGroundOrArenaJoinError(err);            return;        }    }    // if we're here, then the conditions to join a bg are met. We can proceed in joining.    // _player->GetGroup() was already checked, grp is already initialized    if (joinAsGroup /* && _player->GetGroup()*/)    {        sLog.outDebug("Battleground: the following players are joining as group:");        GroupQueueInfo * ginfo = sBattleGroundMgr.m_BattleGroundQueues[bgQueueTypeId].AddGroup(_player, bgTypeId, 0, false, 0);        for (GroupReference *itr = grp->GetFirstMember(); itr != NULL; itr = itr->next())        {            Player* member = itr->getSource();            if (!member) continue;   // this should never happen            uint32 queueSlot = member->AddBattleGroundQueueId(bgQueueTypeId);           // add to queue            // store entry point coords (same as leader entry point)            if (!sWorld.getConfig(CONFIG_BATTLEGROUND_WRATH_LEAVE_MODE))                member->SetBattleGroundEntryPoint(member->GetMapId(), member->GetPositionX(), member->GetPositionY(), member->GetPositionZ(), member->GetOrientation());            WorldPacket data;                                                            // send status packet (in queue)            sBattleGroundMgr.BuildBattleGroundStatusPacket(&data, bg, member->GetTeam(), queueSlot, STATUS_WAIT_QUEUE, 0, 0);            member->GetSession()->SendPacket(&data);//.........这里部分代码省略.........
开发者ID:deremix,项目名称:darmixcore,代码行数:101,


示例7: while

/// Process queued scriptsvoid Map::ScriptsProcess(){    if (m_scriptSchedule.empty())        return;    ///- Process overdue queued scripts    ScriptScheduleMap::iterator iter = m_scriptSchedule.begin();    // ok as multimap is a *sorted* associative container    while (!m_scriptSchedule.empty() && (iter->first <= sWorld->GetGameTime()))    {        ScriptAction const& step = iter->second;        Object* source = NULL;        if (step.sourceGUID)        {            switch (GUID_HIPART(step.sourceGUID))            {                case HIGHGUID_ITEM: // as well as HIGHGUID_CONTAINER                    if (Player* player = HashMapHolder<Player>::Find(step.ownerGUID))                        source = player->GetItemByGuid(step.sourceGUID);                    break;                case HIGHGUID_UNIT:                case HIGHGUID_VEHICLE:                    source = HashMapHolder<Creature>::Find(step.sourceGUID);                    break;                case HIGHGUID_PET:                    source = HashMapHolder<Pet>::Find(step.sourceGUID);                    break;                case HIGHGUID_PLAYER:                    source = HashMapHolder<Player>::Find(step.sourceGUID);                    break;                case HIGHGUID_GAMEOBJECT:                    source = HashMapHolder<GameObject>::Find(step.sourceGUID);                    break;                case HIGHGUID_CORPSE:                    source = HashMapHolder<Corpse>::Find(step.sourceGUID);                    break;                case HIGHGUID_MO_TRANSPORT:                    for (MapManager::TransportSet::iterator itr2 = sMapMgr->m_Transports.begin(); itr2 != sMapMgr->m_Transports.end(); ++itr2)                    {                        if ((*itr2)->GetGUID() == step.sourceGUID)                        {                            source = *itr2;                            break;                        }                    }                    break;                default:                    sLog->outError("%s source with unsupported high guid (GUID: " UI64FMTD ", high guid: %u).",                        step.script->GetDebugInfo().c_str(), step.sourceGUID, GUID_HIPART(step.sourceGUID));                    break;            }        }        Object* target = NULL;        if (step.targetGUID)        {            switch (GUID_HIPART(step.targetGUID))            {                case HIGHGUID_UNIT:                case HIGHGUID_VEHICLE:                    target = HashMapHolder<Creature>::Find(step.targetGUID);                    break;                case HIGHGUID_PET:                    target = HashMapHolder<Pet>::Find(step.targetGUID);                    break;                case HIGHGUID_PLAYER:                       // empty GUID case also                    target = HashMapHolder<Player>::Find(step.targetGUID);                    break;                case HIGHGUID_GAMEOBJECT:                    target = HashMapHolder<GameObject>::Find(step.targetGUID);                    break;                case HIGHGUID_CORPSE:                    target = HashMapHolder<Corpse>::Find(step.targetGUID);                    break;                default:                    sLog->outError("%s target with unsupported high guid (GUID: " UI64FMTD ", high guid: %u).",                        step.script->GetDebugInfo().c_str(), step.targetGUID, GUID_HIPART(step.targetGUID));                    break;            }        }        switch (step.script->command)        {            case SCRIPT_COMMAND_TALK:                if (step.script->Talk.ChatType > CHAT_TYPE_WHISPER && step.script->Talk.ChatType != CHAT_MSG_RAID_BOSS_WHISPER)                {                    sLog->outError("%s invalid chat type (%u) specified, skipping.", step.script->GetDebugInfo().c_str(), step.script->Talk.ChatType);                    break;                }                if (step.script->Talk.Flags & SF_TALK_USE_PLAYER)                {                    if (Player* player = _GetScriptPlayerSourceOrTarget(source, target, step.script))                    {                        LocaleConstant loc_idx = player->GetSession()->GetSessionDbLocaleIndex();                        std::string text(sObjectMgr->GetTrinityString(step.script->Talk.TextID, loc_idx));                        switch (step.script->Talk.ChatType)                        {//.........这里部分代码省略.........
开发者ID:Asido,项目名称:TrinityCore,代码行数:101,


示例8: GUID_LOPART

void WorldSession::HandleAttackSwingOpcode(WorldPacket& recv_data){    uint64 guid;    recv_data >> guid;    sLog->outDebug(LOG_FILTER_NETWORKIO, "WORLD: Recvd CMSG_ATTACKSWING Message guidlow:%u guidhigh:%u", GUID_LOPART(guid), GUID_HIPART(guid));    Unit* pEnemy = ObjectAccessor::GetUnit(*_player, guid);    if (!pEnemy)    {        // stop attack state at client        SendAttackStop(NULL);        return;    }    if (!_player->IsValidAttackTarget(pEnemy))    {        // stop attack state at client        SendAttackStop(pEnemy);        return;    }    //! Client explicitly checks the following before sending CMSG_ATTACKSWING packet,    //! so we'll place the same check here. Note that it might be possible to reuse this snippet    //! in other places as well.    if (Vehicle* vehicle = _player->GetVehicle())    {        VehicleSeatEntry const* seat = vehicle->GetSeatForPassenger(_player);        ASSERT(seat);        if (!(seat->m_flags & VEHICLE_SEAT_FLAG_CAN_ATTACK))        {            SendAttackStop(pEnemy);            return;        }    }    _player->Attack(pEnemy, true);}
开发者ID:16898500,项目名称:SkyFireEMU,代码行数:39,


示例9: TC_LOG_DEBUG

void WorldSession::HandleAttackSwingOpcode(WorldPacket& recvData){    ObjectGuid guid;    recvData.ReadGuidMask(guid, 6, 5, 7, 0, 3, 1, 4, 2);    recvData.ReadGuidBytes(guid, 6, 7, 1, 3, 2, 0, 4, 5);    TC_LOG_DEBUG("network", "WORLD: Recvd CMSG_ATTACK_SWING Message guidlow:%u guidhigh:%u", GUID_LOPART(guid), GUID_HIPART(guid));    Unit* pEnemy = ObjectAccessor::GetUnit(*_player, guid);    if (!pEnemy)    {        // stop attack state at client        SendAttackStop(NULL);        return;    }    if (!_player->IsValidAttackTarget(pEnemy))    {        // stop attack state at client        SendAttackStop(pEnemy);        return;    }    //! Client explicitly checks the following before sending CMSG_ATTACK_SWING packet,    //! so we'll place the same check here. Note that it might be possible to reuse this snippet    //! in other places as well.    if (Vehicle* vehicle = _player->GetVehicle())    {        VehicleSeatEntry const* seat = vehicle->GetSeatForPassenger(_player);        ASSERT(seat);        if (!(seat->m_flags & VEHICLE_SEAT_FLAG_CAN_ATTACK))        {            SendAttackStop(pEnemy);            return;        }    }    _player->Attack(pEnemy, true);}
开发者ID:Caydan,项目名称:WoWSCore548,代码行数:42,


示例10: DEBUG_LOG

void WorldSession::HandleBattlemasterHelloOpcode(WorldPacket & recv_data){    uint64 guid;    recv_data >> guid;    DEBUG_LOG("WORLD: Recvd CMSG_BATTLEMASTER_HELLO Message from (GUID: %u TypeId:%u)", GUID_LOPART(guid),GuidHigh2TypeId(GUID_HIPART(guid)));    Creature *pCreature = GetPlayer()->GetMap()->GetCreature(guid);    if (!pCreature)        return;    if (!pCreature->isBattleMaster())                       // it's not battlemaster        return;    // Stop the npc if moving    if (!pCreature->IsStopped())        pCreature->StopMoving();    BattleGroundTypeId bgTypeId = sBattleGroundMgr.GetBattleMasterBG(pCreature->GetEntry());    if (bgTypeId == BATTLEGROUND_TYPE_NONE)        return;    if (!_player->GetBGAccessByLevel(bgTypeId))    {        // temp, must be gossip message...        SendNotification(LANG_YOUR_BG_LEVEL_REQ_ERROR);        return;    }    SendBattlegGroundList(guid, bgTypeId);}
开发者ID:Tasssadar,项目名称:catcore,代码行数:33,


示例11: Update

void GameObject::Update(uint32 p_time){    if (GUID_HIPART(GetGUID()) == HIGHGUID_TRANSPORT)    {        //((Transport*)this)->Update(p_time);        return;    }    switch (m_lootState)    {        case GO_NOT_READY:            if (GetGoType()==17)            {                // fishing code (bobber ready)                if( time(NULL) > m_respawnTime - FISHING_BOBBER_READY_TIME )                {                    // splash bobber (bobber ready now)                    Unit* caster = GetOwner();                    if(caster && caster->GetTypeId()==TYPEID_PLAYER)                    {                        SetUInt32Value(GAMEOBJECT_STATE, 0);                        SetUInt32Value(GAMEOBJECT_FLAGS, 32);                        UpdateData udata;                        WorldPacket packet;                        BuildValuesUpdateBlockForPlayer(&udata,((Player*)caster));                        udata.BuildPacket(&packet);                        ((Player*)caster)->GetSession()->SendPacket(&packet);                        WorldPacket data;                        data.Initialize(SMSG_GAMEOBJECT_CUSTOM_ANIM);                        data << GetGUID();                        data << (uint32)(0);                        ((Player*)caster)->SendMessageToSet(&data,true);                    }                    m_lootState = GO_CLOSED;                // can be succesfully open with some chance                }                return;            }            m_lootState = GO_CLOSED;                        // for not bobber is same as GO_CLOSED            // NO BREAK        case GO_CLOSED:            if (m_respawnTime > 0)                                                            // timer on            {                if (m_respawnTime <= time(NULL))            // timer expired                {                    m_respawnTime = 0;                    m_SkillupList.clear();                    switch (GetGoType())                    {                        case GAMEOBJECT_TYPE_FISHINGNODE:   //  can't fish now                        {                            Unit* caster = GetOwner();                            if(caster && caster->GetTypeId()==TYPEID_PLAYER)                            {                                if(caster->m_currentSpell)                                {                                    caster->m_currentSpell->SendChannelUpdate(0);                                    caster->m_currentSpell->finish(false);                                }                                WorldPacket data;                                data.Initialize(SMSG_FISH_NOT_HOOKED);                                ((Player*)caster)->GetSession()->SendPacket(&data);                            }                            m_lootState = GO_LOOTED;        // can be delete                            return;                        }                        case GAMEOBJECT_TYPE_DOOR:                            SetUInt32Value (GAMEOBJECT_FLAGS, m_flags);                            SetUInt32Value (GAMEOBJECT_STATE, 1);                            break;                        case GAMEOBJECT_TYPE_TRAP:                            break;                        default:                            if(GetOwnerGUID())              // despawn timer                            {                                m_respawnTime = 0;                                Delete();                                return;                            }                                                            // respawn timer                            MapManager::Instance().GetMap(GetMapId(), this)->Add(this);                            break;                    }                }            }            break;        case GO_OPEN:            break;        case GO_LOOTED:            if(GetOwnerGUID())            {                m_respawnTime = 0;                Delete();                return;//.........这里部分代码省略.........
开发者ID:Aion,项目名称:caldari,代码行数:101,


示例12: stats

void WorldSession::HandleInspectArenaTeamsOpcode(WorldPacket & recv_data){    sLog.outDebug("MSG_INSPECT_ARENA_TEAMS");    uint64 guid;    recv_data >> guid;    sLog.outDebug("Inspect Arena stats (GUID: %u TypeId: %u)", GUID_LOPART(guid),GuidHigh2TypeId(GUID_HIPART(guid)));    if (Player *plr = sObjectMgr.GetPlayer(guid))    {        for (uint8 i = 0; i < MAX_ARENA_SLOT; ++i)        {            if (uint32 a_id = plr->GetArenaTeamId(i))            {                if (ArenaTeam *at = sObjectMgr.GetArenaTeamById(a_id))                    at->InspectStats(this, plr->GetGUID());            }        }    }}
开发者ID:wow-masters,项目名称:diamondcore2,代码行数:20,


示例13: from

void WorldSession::HandleBattlemasterHelloOpcode(WorldPacket & recv_data){    uint64 guid;    recv_data >> guid;    sLog->outDebug(LOG_FILTER_NETWORKIO, "WORLD: Recvd CMSG_BATTLEMASTER_HELLO Message from (GUID: %u TypeId:%u)", GUID_LOPART(guid), GuidHigh2TypeId(GUID_HIPART(guid)));    Creature *unit = GetPlayer()->GetMap()->GetCreature(guid);    if (!unit)        return;    if (!unit->isBattleMaster())                             // it's not battlemaster        return;    // Stop the npc if moving    unit->StopMoving();    SendBattlegGroundList(guid);}
开发者ID:Neroo,项目名称:StarGateEmu-Projekt,代码行数:18,


示例14: GetPlayer

void WorldSession::HandleLootMoneyOpcode(WorldPacket& /*recv_data*/){    sLog.outDebug("WORLD: CMSG_LOOT_MONEY");    Player* player = GetPlayer();    uint64 guid = player->GetLootGUID();    if (!guid)        return;    Loot* pLoot = NULL;    bool shareMoney = true;    switch (GUID_HIPART(guid))    {    case HIGHGUID_GAMEOBJECT:        {            GameObject* pGameObject = GetPlayer()->GetMap()->GetGameObject(guid);            // not check distance for GO in case owned GO (fishing bobber case, for example)            if (pGameObject && ((pGameObject->GetOwnerGUID() == _player->GetGUID() || pGameObject->IsWithinDistInMap(_player, INTERACTION_DISTANCE))))                pLoot = &pGameObject->loot;            break;        }    case HIGHGUID_CORPSE:                               // remove insignia ONLY in BG        {            Corpse* bones = ObjectAccessor::GetCorpse(*GetPlayer(), guid);            if (bones && bones->IsWithinDistInMap(_player, INTERACTION_DISTANCE))            {                pLoot = &bones->loot;                shareMoney = false;            }            break;        }    case HIGHGUID_ITEM:        {            if (Item* item = GetPlayer()->GetItemByGuid(guid))            {                pLoot = &item->loot;                shareMoney = false;            }            break;        }    case HIGHGUID_UNIT:        {            Creature* creature = GetPlayer()->GetMap()->GetCreature(guid);            bool ok_loot = creature && creature->IsAlive() == (player->getClass() == CLASS_ROGUE && creature->loot.loot_type == LOOT_SKINNING);            if (ok_loot && creature->IsWithinDistInMap(_player, INTERACTION_DISTANCE))            {                pLoot = &creature->loot;                if (creature->IsAlive())                    shareMoney = false;            }            else                player->SendLootError(guid, ok_loot ? LOOT_ERROR_TOO_FAR : LOOT_ERROR_DIDNT_KILL);            break;        }    default:        return;                                         // unlootable type    }    if (pLoot)    {        pLoot->NotifyMoneyRemoved();        if (shareMoney && player->GetGroup())      //item, pickpocket and players can be looted only single player        {            Group* group = player->GetGroup();            std::vector<Player*> playersNear;            for (GroupReference* itr = group->GetFirstMember(); itr != NULL; itr = itr->next())            {                Player* playerGroup = itr->getSource();                if (!playerGroup)                    continue;                if (player->GetDistance2d(playerGroup) < sWorld.getConfig(CONFIG_GROUP_XP_DISTANCE))                    playersNear.push_back(playerGroup);            }            uint32 money_per_player = uint32((pLoot->gold) / (playersNear.size()));            for (std::vector<Player*>::const_iterator i = playersNear.begin(); i != playersNear.end(); ++i)            {                (*i)->ModifyMoney(money_per_player);                WorldPacket data(SMSG_LOOT_MONEY_NOTIFY, 4);                data << uint32(money_per_player);                (*i)->GetSession()->SendPacket(&data);            }        }        else            player->ModifyMoney(pLoot->gold);        pLoot->gold = 0;    }}
开发者ID:Aminxhm,项目名称:OregonCore,代码行数:100,


示例15: GetPlayer

void WorldSession::HandleLootMoneyOpcode(WorldPacket & /*recv_data*/){    sLog.outDebug("WORLD: CMSG_LOOT_MONEY");    Player *player = GetPlayer();    uint64 guid = player->GetLootGUID();    if (!guid)        return;    Loot *pLoot = NULL;    switch(GUID_HIPART(guid))    {        case HIGHGUID_GAMEOBJECT:        {            GameObject *pGameObject = GetPlayer()->GetMap()->GetGameObject(guid);            // not check distance for GO in case owned GO (fishing bobber case, for example)            if (pGameObject && ((pGameObject->GetOwnerGUID() == _player->GetGUID() || pGameObject->IsWithinDistInMap(_player,INTERACTION_DISTANCE))))                pLoot = &pGameObject->loot;            break;        }        case HIGHGUID_CORPSE:                               // remove insignia ONLY in BG        {            Corpse *bones = ObjectAccessor::GetCorpse(*GetPlayer(), guid);            if (bones && bones->IsWithinDistInMap(_player,INTERACTION_DISTANCE))                pLoot = &bones->loot;            break;        }        case HIGHGUID_ITEM:        {            if (Item *item = GetPlayer()->GetItemByGuid(guid))                pLoot = &item->loot;            break;        }        case HIGHGUID_UNIT:        {            Creature* pCreature = GetPlayer()->GetMap()->GetCreature(guid);            bool ok_loot = pCreature && pCreature->isAlive() == (player->getClass() == CLASS_ROGUE && pCreature->lootForPickPocketed);            if (ok_loot && pCreature->IsWithinDistInMap(_player,INTERACTION_DISTANCE))                pLoot = &pCreature->loot ;            break;        }        default:            return;                                         // unlootable type    }    if (pLoot)    {        if (!IS_ITEM_GUID(guid) && player->GetGroup())      //item can be looted only single player        {            Group *group = player->GetGroup();            std::vector<Player*> playersNear;            for (GroupReference *itr = group->GetFirstMember(); itr != NULL; itr = itr->next())            {                Player* playerGroup = itr->getSource();                if (!playerGroup)                    continue;                if (player->IsWithinDistInMap(playerGroup,sWorld.getConfig(CONFIG_GROUP_XP_DISTANCE),false))                    playersNear.push_back(playerGroup);            }            uint32 money_per_player = uint32((pLoot->gold)/(playersNear.size()));            for (std::vector<Player*>::const_iterator i = playersNear.begin(); i != playersNear.end(); ++i)            {                (*i)->ModifyMoney(money_per_player);                (*i)->GetAchievementMgr().UpdateAchievementCriteria(ACHIEVEMENT_CRITERIA_TYPE_LOOT_MONEY, money_per_player);                //Offset surely incorrect, but works                WorldPacket data(SMSG_LOOT_MONEY_NOTIFY, 4);                data << uint32(money_per_player);                (*i)->GetSession()->SendPacket(&data);            }        }        else        {            player->ModifyMoney(pLoot->gold);            player->GetAchievementMgr().UpdateAchievementCriteria(ACHIEVEMENT_CRITERIA_TYPE_LOOT_MONEY, pLoot->gold);        }        pLoot->gold = 0;        pLoot->NotifyMoneyRemoved();    }}
开发者ID:LolJK,项目名称:PhantomCore,代码行数:90,


示例16: TC_LOG_INFO

void WorldSession::HandleQuestgiverStatusQueryOpcode(WorldPacket& recvData){    uint64 guid;    recvData >> guid;    uint32 questStatus = DIALOG_STATUS_NONE;    uint32 defstatus = DIALOG_STATUS_NONE;    Object* questgiver = ObjectAccessor::GetObjectByTypeMask(*_player, guid, TYPEMASK_UNIT|TYPEMASK_GAMEOBJECT);    if (!questgiver)    {        TC_LOG_INFO("network", "Error in CMSG_QUESTGIVER_STATUS_QUERY, called for non-existing questgiver (Typeid: %u GUID: %u)", GuidHigh2TypeId(GUID_HIPART(guid)), GUID_LOPART(guid));        return;    }    switch (questgiver->GetTypeId())    {        case TYPEID_UNIT:        {            TC_LOG_DEBUG("network", "WORLD: Received CMSG_QUESTGIVER_STATUS_QUERY for npc, guid = %u", uint32(GUID_LOPART(guid)));            Creature* cr_questgiver=questgiver->ToCreature();            if (!cr_questgiver->IsHostileTo(_player))       // do not show quest status to enemies            {                questStatus = sScriptMgr->GetDialogStatus(_player, cr_questgiver);                if (questStatus > 6)                    questStatus = getDialogStatus(_player, cr_questgiver, defstatus);            }            break;        }        case TYPEID_GAMEOBJECT:        {            TC_LOG_DEBUG("network", "WORLD: Received CMSG_QUESTGIVER_STATUS_QUERY for GameObject guid = %u", uint32(GUID_LOPART(guid)));            GameObject* go_questgiver=(GameObject*)questgiver;            questStatus = sScriptMgr->GetDialogStatus(_player, go_questgiver);            if (questStatus > 6)                questStatus = getDialogStatus(_player, go_questgiver, defstatus);            break;        }        default:            TC_LOG_ERROR("network", "QuestGiver called for unexpected type %u", questgiver->GetTypeId());            break;    }    //inform client about status of quest    _player->PlayerTalkClass->SendQuestGiverStatus(questStatus, guid);}
开发者ID:AnthoDevMoP,项目名称:SkyFire_5xx,代码行数:45,


示例17: DETAIL_LOG

void WorldSession::HandlePetCastSpellOpcode( WorldPacket& recvPacket ){    DETAIL_LOG("WORLD: CMSG_PET_CAST_SPELL");    recvPacket.hexlike();    recvPacket.print_storage();    //2 - 0 - 0 - 43 - 129 - 0 - 80 - 241 | - 42 - 211 - 253 - 0 | - 0 | - 2 |- 96 - 0 - 0 - 0 | - 0 - 26    //- 164 - 59 - 196 - 174 - 98 - 131 | - 194 - 182 - 171 - 218| - 67 - 0 - 48 - 93| - 0 - 196 - 32    //- 177| - 242 - 193 - 22 - 110 - 224 - 67 - 203 - 166 | - 68 - 61 - 133 - 1| - 240 - 66 - 1 - 183 |    //- 0 - 0 - 0 - 217| - 2 - 43 - 129 - 80 - 241 - 0 - 10 - 0 - 0 - 0 - 0 - 76 - 109 - 175 - 0    //- 238 - 115 - 58 - 196 - 20 - 110 - 121 - 194 - 187 - 107 - 217 - 67 - 32 - 44 - 27 - 62 - 217    //- 1 - 36 - 129 - 80 - 241 - 0 - 0 - 160 - 64 - 0 - 0 - 160 - 64 - 0 - 0 - 160 - 64 - 192 - 233    //- 172 - 62 - 4 - 0 - 0 - 0 - 7 - 230 - 0 - 0 - 0 -    //5 - 0 - 0 - 43 - 129 - 0 - 80 - 241 | - 85 - 211 - 253 - 0 | - 0 | - 2 | - 96 - 0 - 0 - 0 | - 0 - 69 - 60 - 61    //- 196 - 171 - 248 - 107| - 194 - 8 - 236 - 218 | - 67 - 0 - 177 - 11 | - 46 - 196 - 89 - 16 | - 14 - 195    //- 5 - 38 - 231 - 67 - 23 - 221 | - 110 - 62 - 15 - 3 | - 240 - 66 -| 1 - 183 | - 0 - 0 - 0 - 217 | - 5 - 43    //- 129 - 80 - 241 - 0 - 10 - 0 - 0 - 0 - 0 - 233 - 41 - 203 - 0 - 106 - 207 - 59 - 196 - 179 - 173 - 83    //- 194 - 8 - 108 - 217 - 67 - 127 - 153 - 170 - 64 - 217 - 4 - 36 - 129 - 80 - 241 - 0 - 0 - 160 - 64    //- 0 - 0 - 160 - 64 - 0 - 0 - 160 - 64 - 7 - 77 - 175 - 64 - 4 - 0 - 0 - 0 - 7 - 195 - 0 - 0 - 0 -    uint64 guid;    uint32 spellid;    uint8  cast_count;    uint8  unk_flags;                                       // flags (if 0x02 - some additional data are received)    recvPacket >> guid >> cast_count >> spellid >> unk_flags;    DEBUG_LOG("WORLD: CMSG_PET_CAST_SPELL, cast_count: %u, spellid %u, unk_flags %u", cast_count, spellid, unk_flags);    if (!_player->GetPet() && !_player->GetCharm())        return;    if (GUID_HIPART(guid) == HIGHGUID_PLAYER)        return;    Creature* pet = ObjectAccessor::GetCreatureOrPetOrVehicle(*_player,guid);    if (!pet || (pet != _player->GetPet() && pet!= _player->GetCharm()))    {        sLog.outError( "HandlePetCastSpellOpcode: Pet %u isn't pet of player %s .", uint32(GUID_LOPART(guid)),GetPlayer()->GetName() );        return;    }    if (pet->GetGlobalCooldown() > 0)        return;    SpellEntry const *spellInfo = sSpellStore.LookupEntry(spellid);    if (!spellInfo)    {        sLog.outError("WORLD: unknown PET spell id %i", spellid);        return;    }    // do not cast not learned spells    if (!pet->HasSpell(spellid) || IsPassiveSpell(spellInfo))        return;    SpellCastTargets targets;    //float elevation, speed;    //uint8 pos1, pos2;    recvPacket >> targets.ReadForCaster(pet);    //recvPacket >> elevation >> speed;    //recvPacket >> pos1 >> pos2;    pet->clearUnitState(UNIT_STAT_MOVING);        //mask: 96, elevation: 0.167906, speed: 120.002441, pos1: 1, pos: 183     //sLog.outDebug("mask: %u, elevation: %f, speed: %f, pos1: %u, pos: %u", targets.m_targetMask, elevation, speed, pos1, pos2);     sLog.outDebug("guid: %u, sX: %f, sY:%f, sZ: %f", targets.getUnitTargetGUID(),targets.m_srcX,targets.m_srcY,targets.m_srcZ);    sLog.outDebug("guid: %u, sX: %f, sY:%f, sZ: %f", targets.getUnitTargetGUID(),targets.m_destX,targets.m_destY,targets.m_destZ);    Spell *spell = new Spell(pet, spellInfo, false);    spell->m_cast_count = cast_count;                       // probably pending spell cast    spell->m_targets = targets;    SpellCastResult result = spell->CheckPetCast(NULL);    if (result == SPELL_CAST_OK)    {        pet->AddCreatureSpellCooldown(spellid);        if (pet->isPet())        {            //10% chance to play special pet attack talk, else growl            //actually this only seems to happen on special spells, fire shield for imp, torment for voidwalker, but it's stupid to check every spell            if(((Pet*)pet)->getPetType() == SUMMON_PET && (urand(0, 100) < 10))                pet->SendPetTalk((uint32)PET_TALK_SPECIAL_SPELL);            else                pet->SendPetAIReaction(guid);        }        spell->prepare(&(spell->m_targets));    }    else    {        pet->SendPetCastFail(spellid, result);        if (!pet->HasSpellCooldown(spellid))            GetPlayer()->SendClearCooldown(spellid, pet);//.........这里部分代码省略.........
开发者ID:3raZar3,项目名称:Dark-Ice,代码行数:101,


示例18: GetPlayer

void WorldSession::HandleLootMoneyOpcode(WorldPacket& /*recvData*/){    sLog->outDebug(LOG_FILTER_NETWORKIO, "WORLD: CMSG_LOOT_MONEY");    Player* player = GetPlayer();    uint64 guid = player->GetLootGUID();    if (!guid)        return;    Loot* loot = NULL;    bool shareMoney = true;    switch (GUID_HIPART(guid))    {        case HIGHGUID_GAMEOBJECT:        {            GameObject* go = GetPlayer()->GetMap()->GetGameObject(guid);            // do not check distance for GO if player is the owner of it (ex. fishing bobber)            if (go && ((go->GetOwnerGUID() == player->GetGUID() || go->IsWithinDistInMap(player, INTERACTION_DISTANCE))))                loot = &go->loot;            break;        }        case HIGHGUID_CORPSE:                               // remove insignia ONLY in BG        {            Corpse* bones = ObjectAccessor::GetCorpse(*player, guid);            if (bones && bones->IsWithinDistInMap(player, INTERACTION_DISTANCE))            {                loot = &bones->loot;                shareMoney = false;            }            break;        }        case HIGHGUID_ITEM:        {            if (Item* item = player->GetItemByGuid(guid))            {                loot = &item->loot;                shareMoney = false;            }            break;        }        case HIGHGUID_UNIT:        case HIGHGUID_VEHICLE:        {            Creature* creature = player->GetMap()->GetCreature(guid);            bool lootAllowed = creature && creature->isAlive() == (player->getClass() == CLASS_ROGUE && creature->lootForPickPocketed);            if (lootAllowed && creature->IsWithinDistInMap(player, INTERACTION_DISTANCE))            {                loot = &creature->loot;                if (creature->isAlive())                    shareMoney = false;            }            break;        }        default:            return;                                         // unlootable type    }    if (loot)    {        loot->NotifyMoneyRemoved();        if (shareMoney && player->GetGroup())      //item, pickpocket and players can be looted only single player        {            Group* group = player->GetGroup();            std::vector<Player*> playersNear;            for (GroupReference* itr = group->GetFirstMember(); itr != NULL; itr = itr->next())            {                Player* member = itr->getSource();                if (!member)                    continue;                if (player->IsWithinDistInMap(member, sWorld->getFloatConfig(CONFIG_GROUP_XP_DISTANCE), false))                    playersNear.push_back(member);            }            uint32 goldPerPlayer = uint32((loot->gold) / (playersNear.size()));            for (std::vector<Player*>::const_iterator i = playersNear.begin(); i != playersNear.end(); ++i)            {                (*i)->ModifyMoney(goldPerPlayer);                (*i)->UpdateAchievementCriteria(ACHIEVEMENT_CRITERIA_TYPE_LOOT_MONEY, goldPerPlayer);                if (Guild* guild = sGuildMgr->GetGuildById((*i)->GetGuildId()))                    if (uint32 guildGold = CalculatePct(goldPerPlayer, (*i)->GetTotalAuraModifier(SPELL_AURA_DEPOSIT_BONUS_MONEY_IN_GUILD_BANK_ON_LOOT)))                        guild->HandleMemberDepositMoney(this, guildGold, true);                WorldPacket data(SMSG_LOOT_MONEY_NOTIFY, 4 + 1);                data << uint32(goldPerPlayer);                data << uint8(playersNear.size() <= 1); // Controls the text displayed in chat. 1 is "Your share is..." and 0 is "You loot..."                (*i)->GetSession()->SendPacket(&data);            }        }        else        {            player->ModifyMoney(loot->gold);//.........这里部分代码省略.........
开发者ID:CaffCore,项目名称:5.4.0.17399,代码行数:101,


示例19: TC_LOG_DEBUG

void WorldSession::HandleLootMoneyOpcode(WorldPacket& /*recvData*/){    TC_LOG_DEBUG("network", "WORLD: CMSG_LOOT_MONEY");    Player* player = GetPlayer();    uint64 guid = player->GetLootGUID();    if (!guid)        return;    Loot* loot = NULL;    bool shareMoney = true;    switch (GUID_HIPART(guid))    {    case HIGHGUID_GAMEOBJECT:    {        GameObject* go = GetPlayer()->GetMap()->GetGameObject(guid);        // do not check distance for GO if player is the owner of it (ex. fishing bobber)        if (go && ((go->GetOwnerGUID() == player->GetGUID() || go->IsWithinDistInMap(player, INTERACTION_DISTANCE))))            loot = &go->loot;        break;    }    case HIGHGUID_CORPSE:                               // remove insignia ONLY in BG    {        Corpse* bones = ObjectAccessor::GetCorpse(*player, guid);        if (bones && bones->IsWithinDistInMap(player, INTERACTION_DISTANCE))        {            loot = &bones->loot;            shareMoney = false;        }        break;    }    case HIGHGUID_ITEM:    {        if (Item* item = player->GetItemByGuid(guid))        {            loot = &item->loot;            shareMoney = false;        }        break;    }    case HIGHGUID_UNIT:    case HIGHGUID_VEHICLE:    {        Creature* creature = player->GetMap()->GetCreature(guid);        bool lootAllowed = creature && creature->IsAlive() == (player->getClass() == CLASS_ROGUE && creature->loot.loot_type == LOOT_PICKPOCKETING);        if (lootAllowed && creature->IsWithinDistInMap(player, INTERACTION_DISTANCE))        {            loot = &creature->loot;            if (creature->IsAlive())                shareMoney = false;        }        else            player->SendLootError(guid, lootAllowed ? LOOT_ERROR_TOO_FAR : LOOT_ERROR_DIDNT_KILL);        break;    }    default:        return;                                         // unlootable type    }    if (loot)    {        loot->NotifyMoneyRemoved();        if (shareMoney && player->GetGroup())      //item, pickpocket and players can be looted only single player        {            Group* group = player->GetGroup();            std::vector<Player*> playersNear;            for (GroupReference* itr = group->GetFirstMember(); itr != NULL; itr = itr->next())            {                Player* member = itr->GetSource();                if (!member)                    continue;                if (player->IsWithinDistInMap(member, sWorld->getFloatConfig(CONFIG_GROUP_XP_DISTANCE), false))                    playersNear.push_back(member);            }            uint32 goldPerPlayer = uint32((loot->gold) / (playersNear.size()));            for (std::vector<Player*>::const_iterator i = playersNear.begin(); i != playersNear.end(); ++i)            {                (*i)->ModifyMoney(goldPerPlayer);                (*i)->UpdateAchievementCriteria(ACHIEVEMENT_CRITERIA_TYPE_LOOT_MONEY, goldPerPlayer);                WorldPacket data(SMSG_LOOT_MONEY_NOTIFY, 4 + 1);                data << uint32(goldPerPlayer);                data << uint8(playersNear.size() <= 1); // Controls the text displayed in chat. 0 is "Your share is..." and 1 is "You loot..."                (*i)->GetSession()->SendPacket(&data);            }        }        else        {            player->ModifyMoney(loot->gold);            player->UpdateAchievementCriteria(ACHIEVEMENT_CRITERIA_TYPE_LOOT_MONEY, loot->gold);//.........这里部分代码省略.........
开发者ID:yiuyiu5000,项目名称:trinitycore-1,代码行数:101,


示例20: data

void WorldSession::HandleLootReleaseOpcode( WorldPacket & recv_data ){	if(!_player->IsInWorld()) return;	uint64 guid;	recv_data >> guid;	WorldPacket data(SMSG_LOOT_RELEASE_RESPONSE, 9);	data << guid << uint8( 1 );	SendPacket( &data );	_player->SetLootGUID(0);	_player->RemoveFlag(UNIT_FIELD_FLAGS, U_FIELD_ANIMATION_LOOTING);	_player->m_currentLoot = 0;	if(UINT32_LOPART(GUID_HIPART(guid)) == HIGHGUID_UNIT)	{		Creature* pCreature = _player->GetMapMgr()->GetCreature(guid);		if(!pCreature)			return;		// remove from looter set		pCreature->loot.looters.erase(_player->GetGUID());		if(!pCreature->loot.gold)		{						for(std::vector<__LootItem>::iterator i=pCreature->loot.items.begin();i!=pCreature->loot.items.end();i++)			if(i->iItemsCount)			{				ItemPrototype *proto=ItemPrototypeStorage.LookupEntry(i->item.itemid);				if(proto->Class != 12)				return;				if(_player->HasQuestForItem(i->item.itemid))				return;			}			pCreature->BuildFieldUpdatePacket(_player, UNIT_DYNAMIC_FLAGS, 0);			if(!pCreature->Skinned)			{				if(lootmgr.IsSkinnable(pCreature->GetEntry()))				{					pCreature->BuildFieldUpdatePacket(_player, UNIT_FIELD_FLAGS, U_FIELD_FLAG_SKINNABLE);				}			}		}	}	else if(UINT32_LOPART(GUID_HIPART(guid)) == HIGHGUID_GAMEOBJECT)	{	   		GameObject* pGO = _player->GetMapMgr()->GetGameObject(guid);		if(!pGO)			return;		pGO->loot.looters.erase(_player->GetGUID());		//GO MUST DISAPPEAR AFTER LOOTING,		//FIX ME: respawn time of GO must be added,15 minutes by default		//if this is not fishing bobber despawn it		if(pGO->GetUInt32Value(GAMEOBJECT_TYPE_ID)==GAMEOBJECT_TYPE_FISHINGNODE)		{			if(pGO->IsInWorld())			{				pGO->RemoveFromWorld();			}			delete pGO;		}		else		{			uint32 DespawnTime = 0;			if(sQuestMgr.GetGameObjectLootQuest(pGO->GetEntry()))				DespawnTime = 120000;	   // 5 min for quest GO,			else			{				DespawnTime = 900000;	   // 15 for else			}			pGO->Despawn(DespawnTime);		}	}	else if(UINT32_LOPART(GUID_HIPART(guid)) == HIGHGUID_CORPSE)	{		Corpse *pCorpse = objmgr.GetCorpse(guid);		if(pCorpse) 			pCorpse->SetUInt32Value(CORPSE_FIELD_DYNAMIC_FLAGS, 0);	}	else if(UINT32_LOPART(GUID_HIPART(guid)) == HIGHGUID_PLAYER)	{		Player *plr = objmgr.GetPlayer(guid);		if(plr)		{			plr->bShouldHaveLootableOnCorpse = false;			plr->RemoveFlag(UNIT_DYNAMIC_FLAGS, U_DYN_FLAG_LOOTABLE);		}	}	else if(UINT32_LOPART(GUID_HIPART(guid)))	{		// suicide!		_player->GetItemInterface()->SafeFullRemoveItemByGuid(guid);	}}
开发者ID:Sylica2013,项目名称:Antrix,代码行数:96,


示例21: GetPlayer

void WorldSession::HandleLootMoneyOpcode(WorldPacket & /*recv_data*/){    sLog->outDebug(LOG_FILTER_NETWORKIO, "WORLD: CMSG_LOOT_MONEY");    Player* player = GetPlayer();    uint64 guid = player->GetLootGUID();    if (!guid)        return;    Loot* loot = NULL;    bool shareMoney = true;    switch(GUID_HIPART(guid))    {        case HIGHGUID_GAMEOBJECT:        {            GameObject* go = GetPlayer()->GetMap()->GetGameObject(guid);            // do not check distance for GO if player is the owner of it (ex. fishing bobber)            if (go && ((go->GetOwnerGUID() == player->GetGUID() || go->IsWithinDistInMap(player, INTERACTION_DISTANCE))))                loot = &go->loot;            break;        }        case HIGHGUID_CORPSE:                               // remove insignia ONLY in BG        {            Corpse* bones = ObjectAccessor::GetCorpse(*player, guid);            if (bones && bones->IsWithinDistInMap(player, INTERACTION_DISTANCE))            {                loot = &bones->loot;                shareMoney = false;            }            break;        }        case HIGHGUID_ITEM:        {            if (Item* item = player->GetItemByGuid(guid))            {                loot = &item->loot;                shareMoney = false;            }            break;        }        case HIGHGUID_UNIT:        case HIGHGUID_VEHICLE:        {            Creature* creature = player->GetMap()->GetCreature(guid);            bool lootAllowed = creature && creature->isAlive() == (player->getClass() == CLASS_ROGUE && creature->lootForPickPocketed);            if (lootAllowed && creature->IsWithinDistInMap(player, INTERACTION_DISTANCE))            {                loot = &creature->loot;                if (creature->isAlive())                    shareMoney = false;            }            break;        }        default:            return;                                         // unlootable type    }    if (loot)    {        if (shareMoney && player->GetGroup())      //item, pickpocket and players can be looted only single player        {            Group* group = player->GetGroup();            std::vector<Player*> playersNear;            for (GroupReference* itr = group->GetFirstMember(); itr != NULL; itr = itr->next())            {                Player* member = itr->getSource();                if (!member)                    continue;                if (player->IsWithinDistInMap(member, sWorld->getFloatConfig(CONFIG_GROUP_XP_DISTANCE), false))                    playersNear.push_back(member);            }            uint32 goldPerPlayer = uint32((loot->gold) / (playersNear.size()));            for (std::vector<Player*>::const_iterator i = playersNear.begin(); i != playersNear.end(); ++i)            {                WorldPacket data(SMSG_LOOT_MONEY_NOTIFY, 4 + 1);                data << uint32(goldPerPlayer);                data << uint8(0);                       // Controls the text displayed 0 is "Your share is...", 1 "You loot..."                (*i)->GetSession()->SendPacket(&data);                (*i)->ModifyMoney(goldPerPlayer);                (*i)->GetAchievementMgr().UpdateAchievementCriteria(ACHIEVEMENT_CRITERIA_TYPE_LOOT_MONEY, goldPerPlayer);            }        }        else        {            WorldPacket data(SMSG_LOOT_MONEY_NOTIFY, 4 + 1);            data << uint32(loot->gold);            data << uint8(1);            SendPacket(&data);            player->ModifyMoney(loot->gold);//.........这里部分代码省略.........
开发者ID:artkeep,项目名称:trinity,代码行数:101,


示例22: from

void WorldSession::HandleBattlemasterHelloOpcode(WorldPacket& recvData){    uint64 guid;    recvData >> guid;    sLog->outDebug(LOG_FILTER_NETWORKIO, "WORLD: Recvd CMSG_BATTLEMASTER_HELLO Message from (GUID: %u TypeId:%u)", GUID_LOPART(guid), GuidHigh2TypeId(GUID_HIPART(guid)));    Creature* unit = GetPlayer()->GetMap()->GetCreature(guid);    if (!unit)        return;    if (!unit->isBattleMaster())                             // it's not battlemaster        return;    // Stop the npc if moving    unit->StopMoving();    BattlegroundTypeId bgTypeId = sBattlegroundMgr->GetBattleMasterBG(unit->GetEntry());    if (!_player->GetBGAccessByLevel(bgTypeId))    {                                                            // temp, must be gossip message...        SendNotification(LANG_YOUR_BG_LEVEL_REQ_ERROR);        return;    }    SendBattleGroundList(guid, bgTypeId);}
开发者ID:Amit86,项目名称:TrinityCore,代码行数:27,


示例23: TC_LOG_DEBUG

void WorldSession::HandleInspectArenaTeamsOpcode(WorldPacket& recvData){    TC_LOG_DEBUG("network", "MSG_INSPECT_ARENA_TEAMS");    uint64 guid;    recvData >> guid;    TC_LOG_DEBUG("network", "Inspect Arena stats (GUID: %u TypeId: %u)", GUID_LOPART(guid), GuidHigh2TypeId(GUID_HIPART(guid)));    Player* player = ObjectAccessor::FindPlayer(guid);    if (!player)        return;    if (!GetPlayer()->IsWithinDistInMap(player, INSPECT_DISTANCE, false))        return;    if (GetPlayer()->IsValidAttackTarget(player))        return;    for (uint8 i = 0; i < MAX_ARENA_SLOT; ++i)    {        if (uint32 a_id = player->GetArenaTeamId(i))        {            if (ArenaTeam* arenaTeam = sArenaTeamMgr->GetArenaTeamById(a_id))                arenaTeam->Inspect(this, player->GetGUID());        }    }}
开发者ID:bahajan95,项目名称:deffender-fun-3.3.5a,代码行数:28,


示例24: stats

void WorldSession::HandleInspectArenaTeamsOpcode(WorldPacket& recvData){    sLog->outDebug(LOG_FILTER_NETWORKIO, "MSG_INSPECT_ARENA_TEAMS");    uint64 guid;    recvData >> guid;    sLog->outDebug(LOG_FILTER_NETWORKIO, "Inspect Arena stats (GUID: %u TypeId: %u)", GUID_LOPART(guid), GuidHigh2TypeId(GUID_HIPART(guid)));    if (Player* player = ObjectAccessor::FindPlayer(guid))    {        for (uint8 i = 0; i < MAX_ARENA_SLOT; ++i)        {            if (uint32 a_id = player->GetArenaTeamId(i))            {                if (ArenaTeam* arenaTeam = sArenaTeamMgr->GetArenaTeamById(a_id))                    arenaTeam->Inspect(this, player->GetGUID());            }        }    }}
开发者ID:heros,项目名称:LasCore,代码行数:20,


示例25: SystemMessage

bool ChatHandler::HandleGUIDCommand(const char* args, WorldSession *m_session){	uint64 guid;	guid = m_session->GetPlayer()->GetSelection();	if (guid == 0)	{	   SystemMessage(m_session, "No selection.");		return true;	}	char buf[256];	snprintf((char*)buf,256,"Object guid is: lowpart %u highpart %X", (unsigned int)GUID_LOPART(guid), (unsigned int)GUID_HIPART(guid));   SystemMessage(m_session,  buf);	return true;}
开发者ID:Sylica2013,项目名称:Antrix,代码行数:15,



注:本文中的GUID_HIPART函数示例整理自Github/MSDocs等源码及文档管理平台,相关代码片段筛选自各路编程大神贡献的开源项目,源码版权归原作者所有,传播和使用请参考对应项目的License;未经允许,请勿转载。


C++ GUID_LOPART函数代码示例
C++ GUID_ENPART函数代码示例
万事OK自学网:51自学网_软件自学网_CAD自学网自学excel、自学PS、自学CAD、自学C语言、自学css3实例,是一个通过网络自主学习工作技能的自学平台,网友喜欢的软件自学网站。