Exemple #1
0
bool LFGPlayerState::IsSingleRole()
{
    if (   LFGRoleMask(rolesMask & ~LFG_ROLE_MASK_TANK   & ~LFG_ROLE_MASK_LEADER) == LFG_ROLE_MASK_NONE
            || LFGRoleMask(rolesMask & ~LFG_ROLE_MASK_HEALER & ~LFG_ROLE_MASK_LEADER) == LFG_ROLE_MASK_NONE
            || LFGRoleMask(rolesMask & ~LFG_ROLE_MASK_TANK   & ~LFG_ROLE_MASK_LEADER) == LFG_ROLE_MASK_NONE)
        return true;
    return false;
}
Exemple #2
0
LFGRoleMask LFGPlayerState::GetRoles()
{
    if (Group* group = m_player->GetGroup())
    {
        if (group->GetLeaderGuid() == m_player->GetObjectGuid())
            rolesMask = LFGRoleMask(rolesMask | LFG_ROLE_MASK_LEADER);
        else
            rolesMask = LFGRoleMask(rolesMask & ~LFG_ROLE_MASK_LEADER);
    }
    else
        rolesMask = LFGRoleMask(rolesMask & ~LFG_ROLE_MASK_LEADER);

    return rolesMask;
};
Exemple #3
0
void LFGPlayerState::SetRoles(uint8 roles)
{
    rolesMask = LFGRoleMask(roles);

    if (Group* group = m_player->GetGroup())
    {
        if (group->GetLeaderGuid() == m_player->GetObjectGuid())
            rolesMask = LFGRoleMask(rolesMask | LFG_ROLE_MASK_LEADER);
        else
            rolesMask = LFGRoleMask(rolesMask & ~LFG_ROLE_MASK_LEADER);
    }
    else
        rolesMask = LFGRoleMask(rolesMask & ~LFG_ROLE_MASK_LEADER);

    rolesMask != LFG_ROLE_MASK_NONE ? AddFlags(LFG_MEMBER_FLAG_ROLES) : RemoveFlags(LFG_MEMBER_FLAG_ROLES);

};
Exemple #4
0
void WorldSession::HandleLfgJoinOpcode(WorldPacket& recv_data)
{
    if (!GetPlayer())
        return;

    if (!sWorld.getConfig(CONFIG_BOOL_LFG_ENABLE) && !sWorld.getConfig(CONFIG_BOOL_LFR_ENABLE))
    {
        recv_data.rfinish();                                // prevent additional spam at rejected packet
        DEBUG_LOG("CMSG_LFG_JOIN %u failed - Dungeon finder disabled", GetPlayer()->GetObjectGuid().GetCounter());
        return;
    }
    else
        DEBUG_LOG("CMSG_LFG_JOIN %u processing...", GetPlayer()->GetObjectGuid().GetCounter());

    uint8  numDungeons;
    uint32 dungeonID;
    uint32 roles;
    std::string comment;
    LFGDungeonSet newDungeons;
    newDungeons.clear();

    recv_data >> roles;                                     // lfg roles
    recv_data >> Unused<uint8>();                           // unk1 (unused?)
    recv_data >> Unused<uint8>();                           // unk2 (unused?)

    recv_data >> numDungeons;
    if (!numDungeons)
    {
        DEBUG_LOG("CMSG_LFG_JOIN %u no dungeons selected", GetPlayer()->GetObjectGuid().GetCounter());
        recv_data.rfinish();                                // prevent additional spam at rejected packet
        return;
    }

    for (int8 i = 0 ; i < numDungeons; ++i)
    {
        recv_data >> dungeonID;
        LFGDungeonEntry const* dungeon = sLFGMgr.GetDungeon(dungeonID & 0x00FFFFFF);    // remove the type from the dungeon entry
        if (dungeon)
            newDungeons.insert(dungeon);
    }

    uint8 counter2;                                         // unk - always 3
    recv_data >> counter2;
    for (uint8 i = 0; i < counter2; i++)
        recv_data >> Unused<uint8>();                       // unk (unused?)
    recv_data >> comment;                                   // lfg comment

    sLFGMgr.GetLFGPlayerState(GetPlayer()->GetObjectGuid())->SetDungeons(newDungeons);
    if (GetPlayer()->GetGroup())
        if (GetPlayer()->GetObjectGuid() == GetPlayer()->GetGroup()->GetLeaderGuid())
            sLFGMgr.GetLFGGroupState(GetPlayer()->GetGroup()->GetObjectGuid())->SetDungeons(newDungeons);

    sLFGMgr.GetLFGPlayerState(GetPlayer()->GetObjectGuid())->SetRoles(LFGRoleMask(roles));
    sLFGMgr.GetLFGPlayerState(GetPlayer()->GetObjectGuid())->SetComment(comment);
    DEBUG_LOG("CMSG_LFG_JOIN %u as group: %u  Dungeons: %u", GetPlayer()->GetObjectGuid().GetCounter(), GetPlayer()->GetGroup() ? 1 : 0, uint8(newDungeons.size()));
    sLFGMgr.Join(GetPlayer());
}
Exemple #5
0
void WorldSession::HandleLfgSetRolesOpcode(WorldPacket &recv_data)
{
    uint8 roles;
    recv_data >> roles;

    Group* group = GetPlayer()->GetGroup();
    if (group)
    {
        bool isChanged = sLFGMgr.RoleChanged(GetPlayer(), LFGRoleMask(roles));
        DEBUG_LOG("CMSG_LFG_SET_ROLES: Group %u, Player %u, Roles: %u %s", group->GetObjectGuid().GetCounter(), GetPlayer()->GetObjectGuid().GetCounter(), roles, isChanged ? "changed" : "not changed");
        sLFGMgr.UpdateRoleCheck(group);
    }
    else
    {
        sLFGMgr.GetLFGPlayerState(GetPlayer()->GetObjectGuid())->SetRoles(LFGRoleMask(roles));
        DEBUG_LOG("CMSG_LFG_SET_ROLES (not in group) Player %u roles %u", GetPlayer()->GetObjectGuid().GetCounter(), roles);
    }
}
Exemple #6
0
void LFGPlayerState::SetRoles(uint8 roles)
{
    rolesMask = LFGRoleMask(roles);

    if (rolesMask != LFG_ROLE_MASK_NONE)
        m_flags |= LFG_MEMBER_FLAG_ROLES;
    else
        m_flags &= ~LFG_MEMBER_FLAG_ROLES;

};