Updated and enabled LFG packets
This commit is contained in:
@@ -41,14 +41,18 @@ namespace Framework.Constants
|
|||||||
ProposalDeclined = 10,
|
ProposalDeclined = 10,
|
||||||
GroupFound = 11,
|
GroupFound = 11,
|
||||||
AddedToQueue = 13,
|
AddedToQueue = 13,
|
||||||
ProposalBegin = 14,
|
SuspendedQueue = 14,
|
||||||
UpdateStatus = 15,
|
ProposalBegin = 15,
|
||||||
GroupMemberOffline = 16,
|
UpdateStatus = 16,
|
||||||
GroupDisbandUnk16 = 17, // Fixme: Sometimes At Group Disband
|
GroupMemberOffline = 17,
|
||||||
JoinQueueInitial = 24,
|
GroupDisbandUnk16 = 18, // FIXME: Sometimes at group disband
|
||||||
DungeonFinished = 25,
|
JoinQueueInitial = 25,
|
||||||
PartyRoleNotAvailable = 43,
|
DungeonFinished = 26,
|
||||||
JoinLfgObjectFailed = 45,
|
PartyRoleNotAvailable = 46,
|
||||||
|
JoinLfgObjectFailed = 48,
|
||||||
|
RemovedLevelup = 49,
|
||||||
|
RemovedXpToggle = 50,
|
||||||
|
RemovedFactionChange = 51
|
||||||
}
|
}
|
||||||
|
|
||||||
public enum LfgState
|
public enum LfgState
|
||||||
@@ -63,6 +67,15 @@ namespace Framework.Constants
|
|||||||
Raidbrowser
|
Raidbrowser
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public enum LfgQueueType
|
||||||
|
{
|
||||||
|
Dungeon = 1,
|
||||||
|
LRF = 2,
|
||||||
|
Scenario = 3,
|
||||||
|
Flex = 4,
|
||||||
|
WorldPvP = 5
|
||||||
|
}
|
||||||
|
|
||||||
public enum LfgLockStatusType
|
public enum LfgLockStatusType
|
||||||
{
|
{
|
||||||
InsufficientExpansion = 1,
|
InsufficientExpansion = 1,
|
||||||
@@ -113,36 +126,47 @@ namespace Framework.Constants
|
|||||||
public enum LfgTeleportResult
|
public enum LfgTeleportResult
|
||||||
{
|
{
|
||||||
// 7 = "You Can'T Do That Right Now" | 5 = No Client Reaction
|
// 7 = "You Can'T Do That Right Now" | 5 = No Client Reaction
|
||||||
Ok = 0, // Internal Use
|
None = 0, // Internal Use
|
||||||
PlayerDead = 1,
|
Dead = 1,
|
||||||
Falling = 2,
|
Falling = 2,
|
||||||
InVehicle = 3,
|
OnTransport = 3,
|
||||||
Fatigue = 4,
|
Exhaustion = 4,
|
||||||
InvalidLocation = 6,
|
NoReturnLocation = 6,
|
||||||
Charming = 8 // Fixme - It Can Be 7 Or 8 (Need Proper Data)
|
ImmuneToSummons = 8 // Fixme - It Can Be 7 Or 8 (Need Proper Data)
|
||||||
|
|
||||||
|
// unknown values
|
||||||
|
//LFG_TELEPORT_RESULT_NOT_IN_DUNGEON,
|
||||||
|
//LFG_TELEPORT_RESULT_NOT_ALLOWED,
|
||||||
|
//LFG_TELEPORT_RESULT_ALREADY_IN_DUNGEON
|
||||||
}
|
}
|
||||||
|
|
||||||
public enum LfgJoinResult
|
public enum LfgJoinResult
|
||||||
{
|
{
|
||||||
// 3 = No Client Reaction | 18 = "Rolecheck Failed"
|
// 3 = No client reaction | 18 = "Rolecheck failed"
|
||||||
Ok = 0x00, // Joined (No Client Msg)
|
Ok = 0x00, // Joined (No Client Msg)
|
||||||
Failed = 0x1b, // Rolecheck Failed
|
GroupFull = 0x1f, // Your Group Is Already Full.
|
||||||
Groupfull = 0x1c, // Your Group Is Full
|
NoLfgObject = 0x21, // Internal Lfg Error.
|
||||||
InternalError = 0x1e, // Internal Lfg Error
|
NoSlotsPlayer = 0x22, // You Do Not Meet The Requirements For The Chosen Dungeons.
|
||||||
NotMeetReqs = 0x1f, // You Do Not Meet The Requirements For The Chosen Dungeons
|
MismatchedSlots = 0x23, // You Cannot Mix Dungeons, Raids, And Random When Picking Dungeons.
|
||||||
PartyNotMeetReqs = 6, // One Or More Party Members Do Not Meet The Requirements For The Chosen Dungeons
|
PartyPlayersFromDifferentRealms = 0x24, // The Dungeon You Chose Does Not Support Players From Multiple Realms.
|
||||||
MixedRaidDungeon = 0x20, // You Cannot Mix Dungeons, Raids, And Random When Picking Dungeons
|
MembersNotPresent = 0x25, // One Or More Group Members Are Pending Invites Or Disconnected.
|
||||||
MultiRealm = 0x21, // The Dungeon You Chose Does Not Support Players From Multiple Realms
|
GetInfoTimeout = 0x26, // Could Not Retrieve Information About Some Party Members.
|
||||||
Disconnected = 0x22, // One Or More Party Members Are Pending Invites Or Disconnected
|
InvalidSlot = 0x27, // One Or More Dungeons Was Not Valid.
|
||||||
PartyInfoFailed = 0x23, // Could Not Retrieve Information About Some Party Members
|
DeserterPlayer = 0x28, // You Can Not Queue For Dungeons Until Your Deserter Debuff Wears Off.
|
||||||
DungeonInvalid = 0x24, // One Or More Dungeons Was Not Valid
|
DeserterParty = 0x29, // One Or More Party Members Has A Deserter Debuff.
|
||||||
Deserter = 0x25, // You Can Not Queue For Dungeons Until Your Deserter Debuff Wears Off
|
RandomCooldownPlayer = 0x2a, // You Can Not Queue For Random Dungeons While On Random Dungeon Cooldown.
|
||||||
PartyDeserter = 0x26, // One Or More Party Members Has A Deserter Debuff
|
RandomCooldownParty = 0x2b, // One Or More Party Members Are On Random Dungeon Cooldown.
|
||||||
RandomCooldown = 0x27, // You Can Not Queue For Random Dungeons While On Random Dungeon Cooldown
|
TooManyMembers = 0x2c, // You Have Too Many Group Members To Queue For That.
|
||||||
PartyRandomCooldown = 0x28, // One Or More Party Members Are On Random Dungeon Cooldown
|
CantUseDungeons = 0x2d, // You Cannot Queue For A Dungeon Or Raid While Using Battlegrounds Or Arenas.
|
||||||
TooMuchMembers = 0x29, // You Can Not Enter Dungeons With More That 5 Party Members
|
RoleCheckFailed = 0x2e, // The Role Check Has Failed.
|
||||||
UsingBgSystem = 0x2a, // You Can Not Use The Dungeon System While In Bg Or Arenas
|
TooFewMembers = 0x34, // You Do Not Have Enough Group Members To Queue For That.
|
||||||
RoleCheckFailed = 0x2b // Role Check Failed, Client Shows Special Error
|
ReasonTooManyLfg = 0x35, // You Are Queued For Too Many Instances.
|
||||||
|
MismatchedSlotsLocalXrealm = 0x37, // You Cannot Mix Realm-Only And X-Realm Entries When Listing Your Name In Other Raids.
|
||||||
|
AlreadyUsingLfgList = 0x3f, // You Can'T Do That While Using Premade Groups.
|
||||||
|
NotLeader = 0x45, // You Are Not The Party Leader.
|
||||||
|
Dead = 0x49,
|
||||||
|
|
||||||
|
PartyNotMeetReqs = 6, // One Or More Party Members Do Not Meet The Requirements For The Chosen Dungeons (Fixme)
|
||||||
}
|
}
|
||||||
|
|
||||||
public enum LfgRoleCheckState
|
public enum LfgRoleCheckState
|
||||||
|
|||||||
@@ -857,7 +857,7 @@ namespace Game.BattleGrounds
|
|||||||
if (SendPacket)
|
if (SendPacket)
|
||||||
{
|
{
|
||||||
BattlefieldStatusNone battlefieldStatus;
|
BattlefieldStatusNone battlefieldStatus;
|
||||||
Global.BattlegroundMgr.BuildBattlegroundStatusNone(out battlefieldStatus, player, player.GetBattlegroundQueueIndex(bgQueueTypeId), player.GetBattlegroundQueueJoinTime(bgQueueTypeId), m_ArenaType);
|
Global.BattlegroundMgr.BuildBattlegroundStatusNone(out battlefieldStatus, player, player.GetBattlegroundQueueIndex(bgQueueTypeId), player.GetBattlegroundQueueJoinTime(bgQueueTypeId));
|
||||||
player.SendPacket(battlefieldStatus);
|
player.SendPacket(battlefieldStatus);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -127,8 +127,8 @@ namespace Game.BattleGrounds
|
|||||||
{
|
{
|
||||||
header.Ticket.RequesterGuid = player.GetGUID();
|
header.Ticket.RequesterGuid = player.GetGUID();
|
||||||
header.Ticket.Id = ticketId;
|
header.Ticket.Id = ticketId;
|
||||||
header.Ticket.Type = bg.isArena() ? (int)arenaType : 1;
|
header.Ticket.Type = RideType.Battlegrounds;
|
||||||
header.Ticket.Time = joinTime;
|
header.Ticket.Time = (int)joinTime;
|
||||||
header.QueueID = bg.GetQueueId();
|
header.QueueID = bg.GetQueueId();
|
||||||
header.RangeMin = (byte)bg.GetMinLevel();
|
header.RangeMin = (byte)bg.GetMinLevel();
|
||||||
header.RangeMax = (byte)bg.GetMaxLevel();
|
header.RangeMax = (byte)bg.GetMaxLevel();
|
||||||
@@ -138,13 +138,13 @@ namespace Game.BattleGrounds
|
|||||||
header.TournamentRules = false;
|
header.TournamentRules = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void BuildBattlegroundStatusNone(out BattlefieldStatusNone battlefieldStatus, Player player, uint ticketId, uint joinTime, ArenaTypes arenaType)
|
public void BuildBattlegroundStatusNone(out BattlefieldStatusNone battlefieldStatus, Player player, uint ticketId, uint joinTime)
|
||||||
{
|
{
|
||||||
battlefieldStatus = new BattlefieldStatusNone();
|
battlefieldStatus = new BattlefieldStatusNone();
|
||||||
battlefieldStatus.Ticket.RequesterGuid = player.GetGUID();
|
battlefieldStatus.Ticket.RequesterGuid = player.GetGUID();
|
||||||
battlefieldStatus.Ticket.Id = ticketId;
|
battlefieldStatus.Ticket.Id = ticketId;
|
||||||
battlefieldStatus.Ticket.Type = (int)arenaType;
|
battlefieldStatus.Ticket.Type = RideType.Battlegrounds;
|
||||||
battlefieldStatus.Ticket.Time = joinTime;
|
battlefieldStatus.Ticket.Time = (int)joinTime;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void BuildBattlegroundStatusNeedConfirmation(out BattlefieldStatusNeedConfirmation battlefieldStatus, Battleground bg, Player player, uint ticketId, uint joinTime, uint timeout, ArenaTypes arenaType)
|
public void BuildBattlegroundStatusNeedConfirmation(out BattlefieldStatusNeedConfirmation battlefieldStatus, Battleground bg, Player player, uint ticketId, uint joinTime, uint timeout, ArenaTypes arenaType)
|
||||||
@@ -183,8 +183,8 @@ namespace Game.BattleGrounds
|
|||||||
battlefieldStatus = new BattlefieldStatusFailed();
|
battlefieldStatus = new BattlefieldStatusFailed();
|
||||||
battlefieldStatus.Ticket.RequesterGuid = pPlayer.GetGUID();
|
battlefieldStatus.Ticket.RequesterGuid = pPlayer.GetGUID();
|
||||||
battlefieldStatus.Ticket.Id = ticketId;
|
battlefieldStatus.Ticket.Id = ticketId;
|
||||||
battlefieldStatus.Ticket.Type = (int)arenaType;
|
battlefieldStatus.Ticket.Type = RideType.Battlegrounds;
|
||||||
battlefieldStatus.Ticket.Time = pPlayer.GetBattlegroundQueueJoinTime(BGQueueTypeId(bg.GetTypeID(), arenaType));
|
battlefieldStatus.Ticket.Time = (int)pPlayer.GetBattlegroundQueueJoinTime(BGQueueTypeId(bg.GetTypeID(), arenaType));
|
||||||
battlefieldStatus.QueueID = bg.GetQueueId();
|
battlefieldStatus.QueueID = bg.GetQueueId();
|
||||||
battlefieldStatus.Reason = (int)result;
|
battlefieldStatus.Reason = (int)result;
|
||||||
if (!errorGuid.IsEmpty() && (result == GroupJoinBattlegroundResult.NotInBattleground || result == GroupJoinBattlegroundResult.JoinTimedOut))
|
if (!errorGuid.IsEmpty() && (result == GroupJoinBattlegroundResult.NotInBattleground || result == GroupJoinBattlegroundResult.JoinTimedOut))
|
||||||
|
|||||||
@@ -336,7 +336,7 @@ namespace Game.BattleGrounds
|
|||||||
// queue.removeplayer, it causes bugs
|
// queue.removeplayer, it causes bugs
|
||||||
|
|
||||||
BattlefieldStatusNone battlefieldStatus;
|
BattlefieldStatusNone battlefieldStatus;
|
||||||
Global.BattlegroundMgr.BuildBattlegroundStatusNone(out battlefieldStatus, plr2, queueSlot, plr2.GetBattlegroundQueueJoinTime(bgQueueTypeId), group.ArenaType);
|
Global.BattlegroundMgr.BuildBattlegroundStatusNone(out battlefieldStatus, plr2, queueSlot, plr2.GetBattlegroundQueueJoinTime(bgQueueTypeId));
|
||||||
plr2.SendPacket(battlefieldStatus);
|
plr2.SendPacket(battlefieldStatus);
|
||||||
}
|
}
|
||||||
// then actually delete, this may delete the group as well!
|
// then actually delete, this may delete the group as well!
|
||||||
@@ -411,7 +411,7 @@ namespace Game.BattleGrounds
|
|||||||
BGQueueInviteEvent inviteEvent = new BGQueueInviteEvent(player.GetGUID(), ginfo.IsInvitedToBGInstanceGUID, bgTypeId, ginfo.ArenaType, ginfo.RemoveInviteTime);
|
BGQueueInviteEvent inviteEvent = new BGQueueInviteEvent(player.GetGUID(), ginfo.IsInvitedToBGInstanceGUID, bgTypeId, ginfo.ArenaType, ginfo.RemoveInviteTime);
|
||||||
m_events.AddEvent(inviteEvent, m_events.CalculateTime(BattlegroundConst.InvitationRemindTime));
|
m_events.AddEvent(inviteEvent, m_events.CalculateTime(BattlegroundConst.InvitationRemindTime));
|
||||||
// create automatic remove events
|
// create automatic remove events
|
||||||
BGQueueRemoveEvent removeEvent = new BGQueueRemoveEvent(player.GetGUID(), ginfo.IsInvitedToBGInstanceGUID, bgTypeId, ginfo.ArenaType, bgQueueTypeId, ginfo.RemoveInviteTime);
|
BGQueueRemoveEvent removeEvent = new BGQueueRemoveEvent(player.GetGUID(), ginfo.IsInvitedToBGInstanceGUID, bgTypeId, bgQueueTypeId, ginfo.RemoveInviteTime);
|
||||||
m_events.AddEvent(removeEvent, m_events.CalculateTime(BattlegroundConst.InviteAcceptWaitTime));
|
m_events.AddEvent(removeEvent, m_events.CalculateTime(BattlegroundConst.InviteAcceptWaitTime));
|
||||||
|
|
||||||
uint queueSlot = player.GetBattlegroundQueueIndex(bgQueueTypeId);
|
uint queueSlot = player.GetBattlegroundQueueIndex(bgQueueTypeId);
|
||||||
@@ -1134,12 +1134,11 @@ namespace Game.BattleGrounds
|
|||||||
/// </summary>
|
/// </summary>
|
||||||
class BGQueueRemoveEvent : BasicEvent
|
class BGQueueRemoveEvent : BasicEvent
|
||||||
{
|
{
|
||||||
public BGQueueRemoveEvent(ObjectGuid pl_guid, uint bgInstanceGUID, BattlegroundTypeId BgTypeId, ArenaTypes arenaType, BattlegroundQueueTypeId bgQueueTypeId, uint removeTime)
|
public BGQueueRemoveEvent(ObjectGuid pl_guid, uint bgInstanceGUID, BattlegroundTypeId BgTypeId, BattlegroundQueueTypeId bgQueueTypeId, uint removeTime)
|
||||||
{
|
{
|
||||||
m_PlayerGuid = pl_guid;
|
m_PlayerGuid = pl_guid;
|
||||||
m_BgInstanceGUID = bgInstanceGUID;
|
m_BgInstanceGUID = bgInstanceGUID;
|
||||||
m_RemoveTime = removeTime;
|
m_RemoveTime = removeTime;
|
||||||
m_ArenaType = arenaType;
|
|
||||||
m_BgTypeId = BgTypeId;
|
m_BgTypeId = BgTypeId;
|
||||||
m_BgQueueTypeId = bgQueueTypeId;
|
m_BgQueueTypeId = bgQueueTypeId;
|
||||||
}
|
}
|
||||||
@@ -1171,7 +1170,7 @@ namespace Game.BattleGrounds
|
|||||||
Global.BattlegroundMgr.ScheduleQueueUpdate(0, 0, m_BgQueueTypeId, m_BgTypeId, bg.GetBracketId());
|
Global.BattlegroundMgr.ScheduleQueueUpdate(0, 0, m_BgQueueTypeId, m_BgTypeId, bg.GetBracketId());
|
||||||
|
|
||||||
BattlefieldStatusNone battlefieldStatus;
|
BattlefieldStatusNone battlefieldStatus;
|
||||||
Global.BattlegroundMgr.BuildBattlegroundStatusNone(out battlefieldStatus, player, queueSlot, player.GetBattlegroundQueueJoinTime(m_BgQueueTypeId), m_ArenaType);
|
Global.BattlegroundMgr.BuildBattlegroundStatusNone(out battlefieldStatus, player, queueSlot, player.GetBattlegroundQueueJoinTime(m_BgQueueTypeId));
|
||||||
player.SendPacket(battlefieldStatus);
|
player.SendPacket(battlefieldStatus);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -1186,7 +1185,6 @@ namespace Game.BattleGrounds
|
|||||||
uint m_BgInstanceGUID;
|
uint m_BgInstanceGUID;
|
||||||
uint m_RemoveTime;
|
uint m_RemoveTime;
|
||||||
BattlegroundTypeId m_BgTypeId;
|
BattlegroundTypeId m_BgTypeId;
|
||||||
ArenaTypes m_ArenaType;
|
|
||||||
BattlegroundQueueTypeId m_BgQueueTypeId;
|
BattlegroundQueueTypeId m_BgQueueTypeId;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -27,6 +27,7 @@ using System.Collections.Generic;
|
|||||||
using System.Diagnostics.Contracts;
|
using System.Diagnostics.Contracts;
|
||||||
using System.Linq;
|
using System.Linq;
|
||||||
using System.Text;
|
using System.Text;
|
||||||
|
using Game.Network.Packets;
|
||||||
|
|
||||||
namespace Game.DungeonFinding
|
namespace Game.DungeonFinding
|
||||||
{
|
{
|
||||||
@@ -382,21 +383,21 @@ namespace Game.DungeonFinding
|
|||||||
|
|
||||||
// Check player or group member restrictions
|
// Check player or group member restrictions
|
||||||
if (!player.GetSession().HasPermission(RBACPermissions.JoinDungeonFinder))
|
if (!player.GetSession().HasPermission(RBACPermissions.JoinDungeonFinder))
|
||||||
joinData.result = LfgJoinResult.NotMeetReqs;
|
joinData.result = LfgJoinResult.NoSlotsPlayer;
|
||||||
else if (player.InBattleground() || player.InArena() || player.InBattlegroundQueue())
|
else if (player.InBattleground() || player.InArena() || player.InBattlegroundQueue())
|
||||||
joinData.result = LfgJoinResult.UsingBgSystem;
|
joinData.result = LfgJoinResult.CantUseDungeons;
|
||||||
else if (player.HasAura(SharedConst.LFGSpellDungeonDeserter))
|
else if (player.HasAura(SharedConst.LFGSpellDungeonDeserter))
|
||||||
joinData.result = LfgJoinResult.Deserter;
|
joinData.result = LfgJoinResult.DeserterPlayer;
|
||||||
else if (player.HasAura(SharedConst.LFGSpellDungeonCooldown))
|
else if (player.HasAura(SharedConst.LFGSpellDungeonCooldown))
|
||||||
joinData.result = LfgJoinResult.RandomCooldown;
|
joinData.result = LfgJoinResult.RandomCooldownPlayer;
|
||||||
else if (dungeons.Empty())
|
else if (dungeons.Empty())
|
||||||
joinData.result = LfgJoinResult.NotMeetReqs;
|
joinData.result = LfgJoinResult.NoSlotsPlayer;
|
||||||
else if (player.HasAura(9454)) // check Freeze debuff
|
else if (player.HasAura(9454)) // check Freeze debuff
|
||||||
joinData.result = LfgJoinResult.NotMeetReqs;
|
joinData.result = LfgJoinResult.NoSlotsPlayer;
|
||||||
else if (grp)
|
else if (grp)
|
||||||
{
|
{
|
||||||
if (grp.GetMembersCount() > MapConst.MaxGroupSize)
|
if (grp.GetMembersCount() > MapConst.MaxGroupSize)
|
||||||
joinData.result = LfgJoinResult.TooMuchMembers;
|
joinData.result = LfgJoinResult.TooManyMembers;
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
byte memberCount = 0;
|
byte memberCount = 0;
|
||||||
@@ -406,13 +407,13 @@ namespace Game.DungeonFinding
|
|||||||
if (plrg)
|
if (plrg)
|
||||||
{
|
{
|
||||||
if (!plrg.GetSession().HasPermission(RBACPermissions.JoinDungeonFinder))
|
if (!plrg.GetSession().HasPermission(RBACPermissions.JoinDungeonFinder))
|
||||||
joinData.result = LfgJoinResult.InternalError;
|
joinData.result = LfgJoinResult.NoLfgObject;
|
||||||
if (plrg.HasAura(SharedConst.LFGSpellDungeonDeserter))
|
if (plrg.HasAura(SharedConst.LFGSpellDungeonDeserter))
|
||||||
joinData.result = LfgJoinResult.PartyDeserter;
|
joinData.result = LfgJoinResult.DeserterParty;
|
||||||
else if (plrg.HasAura(SharedConst.LFGSpellDungeonCooldown))
|
else if (plrg.HasAura(SharedConst.LFGSpellDungeonCooldown))
|
||||||
joinData.result = LfgJoinResult.PartyRandomCooldown;
|
joinData.result = LfgJoinResult.RandomCooldownParty;
|
||||||
else if (plrg.InBattleground() || plrg.InArena() || plrg.InBattlegroundQueue())
|
else if (plrg.InBattleground() || plrg.InArena() || plrg.InBattlegroundQueue())
|
||||||
joinData.result = LfgJoinResult.UsingBgSystem;
|
joinData.result = LfgJoinResult.CantUseDungeons;
|
||||||
else if (plrg.HasAura(9454)) // check Freeze debuff
|
else if (plrg.HasAura(9454)) // check Freeze debuff
|
||||||
joinData.result = LfgJoinResult.PartyNotMeetReqs;
|
joinData.result = LfgJoinResult.PartyNotMeetReqs;
|
||||||
++memberCount;
|
++memberCount;
|
||||||
@@ -421,7 +422,7 @@ namespace Game.DungeonFinding
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (joinData.result == LfgJoinResult.Ok && memberCount != grp.GetMembersCount())
|
if (joinData.result == LfgJoinResult.Ok && memberCount != grp.GetMembersCount())
|
||||||
joinData.result = LfgJoinResult.Disconnected;
|
joinData.result = LfgJoinResult.MembersNotPresent;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
@@ -442,23 +443,23 @@ namespace Game.DungeonFinding
|
|||||||
{
|
{
|
||||||
case LfgType.RandomDungeon:
|
case LfgType.RandomDungeon:
|
||||||
if (dungeons.Count > 1) // Only allow 1 random dungeon
|
if (dungeons.Count > 1) // Only allow 1 random dungeon
|
||||||
joinData.result = LfgJoinResult.DungeonInvalid;
|
joinData.result = LfgJoinResult.InvalidSlot;
|
||||||
else
|
else
|
||||||
rDungeonId = dungeons.First();
|
rDungeonId = dungeons.First();
|
||||||
goto case LfgType.Dungeon;
|
goto case LfgType.Dungeon;
|
||||||
case LfgType.Dungeon:
|
case LfgType.Dungeon:
|
||||||
if (isRaid)
|
if (isRaid)
|
||||||
joinData.result = LfgJoinResult.MixedRaidDungeon;
|
joinData.result = LfgJoinResult.MismatchedSlots;
|
||||||
isDungeon = true;
|
isDungeon = true;
|
||||||
break;
|
break;
|
||||||
case LfgType.Raid:
|
case LfgType.Raid:
|
||||||
if (isDungeon)
|
if (isDungeon)
|
||||||
joinData.result = LfgJoinResult.MixedRaidDungeon;
|
joinData.result = LfgJoinResult.MismatchedSlots;
|
||||||
isRaid = true;
|
isRaid = true;
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
Log.outError(LogFilter.Lfg, "Wrong dungeon type {0} for dungeon {1}", type, it);
|
Log.outError(LogFilter.Lfg, "Wrong dungeon type {0} for dungeon {1}", type, it);
|
||||||
joinData.result = LfgJoinResult.DungeonInvalid;
|
joinData.result = LfgJoinResult.InvalidSlot;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -473,7 +474,7 @@ namespace Game.DungeonFinding
|
|||||||
// if we have lockmap then there are no compatible dungeons
|
// if we have lockmap then there are no compatible dungeons
|
||||||
GetCompatibleDungeons(dungeons, players, joinData.lockmap, isContinue);
|
GetCompatibleDungeons(dungeons, players, joinData.lockmap, isContinue);
|
||||||
if (dungeons.Empty())
|
if (dungeons.Empty())
|
||||||
joinData.result = grp ? LfgJoinResult.InternalError : LfgJoinResult.NotMeetReqs;
|
joinData.result = grp ? LfgJoinResult.NoLfgObject : LfgJoinResult.NoSlotsPlayer;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -493,6 +494,7 @@ namespace Game.DungeonFinding
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
RideTicket ticket = new RideTicket(guid, GetQueueId(gguid), RideType.Lfg, (int)Time.UnixTime);
|
||||||
string debugNames = "";
|
string debugNames = "";
|
||||||
if (grp) // Begin rolecheck
|
if (grp) // Begin rolecheck
|
||||||
{
|
{
|
||||||
@@ -523,6 +525,7 @@ namespace Game.DungeonFinding
|
|||||||
ObjectGuid pguid = plrg.GetGUID();
|
ObjectGuid pguid = plrg.GetGUID();
|
||||||
plrg.GetSession().SendLfgUpdateStatus(updateData, true);
|
plrg.GetSession().SendLfgUpdateStatus(updateData, true);
|
||||||
SetState(pguid, LfgState.Rolecheck);
|
SetState(pguid, LfgState.Rolecheck);
|
||||||
|
SetTicket(pguid, ticket);
|
||||||
if (!isContinue)
|
if (!isContinue)
|
||||||
SetSelectedDungeons(pguid, dungeons);
|
SetSelectedDungeons(pguid, dungeons);
|
||||||
roleCheck.roles[pguid] = 0;
|
roleCheck.roles[pguid] = 0;
|
||||||
@@ -551,10 +554,12 @@ namespace Game.DungeonFinding
|
|||||||
SetSelectedDungeons(guid, dungeons);
|
SetSelectedDungeons(guid, dungeons);
|
||||||
}
|
}
|
||||||
// Send update to player
|
// Send update to player
|
||||||
|
SetTicket(guid, ticket);
|
||||||
SetRoles(guid, roles);
|
SetRoles(guid, roles);
|
||||||
player.GetSession().SendLfgUpdateStatus(new LfgUpdateData(LfgUpdateType.JoinQueue, dungeons), false);
|
player.GetSession().SendLfgUpdateStatus(new LfgUpdateData(LfgUpdateType.JoinQueueInitial, dungeons), false);
|
||||||
player.GetSession().SendLfgJoinResult(joinData);
|
|
||||||
SetState(gguid, LfgState.Queued);
|
SetState(gguid, LfgState.Queued);
|
||||||
|
player.GetSession().SendLfgUpdateStatus(new LfgUpdateData(LfgUpdateType.AddedToQueue, dungeons), false);
|
||||||
|
player.GetSession().SendLfgJoinResult(joinData);
|
||||||
debugNames += player.GetName();
|
debugNames += player.GetName();
|
||||||
}
|
}
|
||||||
StringBuilder o = new StringBuilder();
|
StringBuilder o = new StringBuilder();
|
||||||
@@ -628,6 +633,15 @@ namespace Game.DungeonFinding
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public RideTicket GetTicket(ObjectGuid guid)
|
||||||
|
{
|
||||||
|
var palyerData = PlayersStore.LookupByKey(guid);
|
||||||
|
if (palyerData != null)
|
||||||
|
return palyerData.GetTicket();
|
||||||
|
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
public void UpdateRoleCheck(ObjectGuid gguid, ObjectGuid guid = default(ObjectGuid), LfgRoles roles = LfgRoles.None)
|
public void UpdateRoleCheck(ObjectGuid gguid, ObjectGuid guid = default(ObjectGuid), LfgRoles roles = LfgRoles.None)
|
||||||
{
|
{
|
||||||
if (gguid.IsEmpty())
|
if (gguid.IsEmpty())
|
||||||
@@ -671,11 +685,7 @@ namespace Game.DungeonFinding
|
|||||||
else
|
else
|
||||||
dungeons = roleCheck.dungeons;
|
dungeons = roleCheck.dungeons;
|
||||||
|
|
||||||
LfgJoinResult joinResult = LfgJoinResult.Failed;
|
LfgJoinResultData joinData = new LfgJoinResultData(LfgJoinResult.RoleCheckFailed, roleCheck.state);
|
||||||
if (roleCheck.state == LfgRoleCheckState.MissingRole || roleCheck.state == LfgRoleCheckState.WrongRoles)
|
|
||||||
joinResult = LfgJoinResult.RoleCheckFailed;
|
|
||||||
|
|
||||||
LfgJoinResultData joinData = new LfgJoinResultData(joinResult, roleCheck.state);
|
|
||||||
foreach (var it in roleCheck.roles)
|
foreach (var it in roleCheck.roles)
|
||||||
{
|
{
|
||||||
ObjectGuid pguid = it.Key;
|
ObjectGuid pguid = it.Key;
|
||||||
@@ -1184,7 +1194,7 @@ namespace Game.DungeonFinding
|
|||||||
if (dungeon == null)
|
if (dungeon == null)
|
||||||
{
|
{
|
||||||
Log.outDebug(LogFilter.Lfg, "TeleportPlayer: Player {0} not in group/lfggroup or dungeon not found!", player.GetName());
|
Log.outDebug(LogFilter.Lfg, "TeleportPlayer: Player {0} not in group/lfggroup or dungeon not found!", player.GetName());
|
||||||
player.GetSession().SendLfgTeleportError(LfgTeleportResult.InvalidLocation);
|
player.GetSession().SendLfgTeleportError(LfgTeleportResult.NoReturnLocation);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1197,19 +1207,19 @@ namespace Game.DungeonFinding
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
LfgTeleportResult error = LfgTeleportResult.Ok;
|
LfgTeleportResult error = LfgTeleportResult.None;
|
||||||
if (!player.IsAlive())
|
if (!player.IsAlive())
|
||||||
error = LfgTeleportResult.PlayerDead;
|
error = LfgTeleportResult.Dead;
|
||||||
else if (player.IsFalling() || player.HasUnitState(UnitState.Jumping))
|
else if (player.IsFalling() || player.HasUnitState(UnitState.Jumping))
|
||||||
error = LfgTeleportResult.Falling;
|
error = LfgTeleportResult.Falling;
|
||||||
else if (player.IsMirrorTimerActive(MirrorTimerType.Fatigue))
|
else if (player.IsMirrorTimerActive(MirrorTimerType.Fatigue))
|
||||||
error = LfgTeleportResult.Fatigue;
|
error = LfgTeleportResult.Exhaustion;
|
||||||
else if (player.GetVehicle())
|
else if (player.GetVehicle())
|
||||||
error = LfgTeleportResult.InVehicle;
|
error = LfgTeleportResult.OnTransport;
|
||||||
else if (!player.GetCharmGUID().IsEmpty())
|
else if (!player.GetCharmGUID().IsEmpty())
|
||||||
error = LfgTeleportResult.Charming;
|
error = LfgTeleportResult.ImmuneToSummons;
|
||||||
else if (player.HasAura(9454)) // check Freeze debuff
|
else if (player.HasAura(9454)) // check Freeze debuff
|
||||||
error = LfgTeleportResult.InvalidLocation;
|
error = LfgTeleportResult.NoReturnLocation;
|
||||||
else if (player.GetMapId() != dungeon.map) // Do not teleport players in dungeon to the entrance
|
else if (player.GetMapId() != dungeon.map) // Do not teleport players in dungeon to the entrance
|
||||||
{
|
{
|
||||||
uint mapid = dungeon.map;
|
uint mapid = dungeon.map;
|
||||||
@@ -1246,12 +1256,12 @@ namespace Game.DungeonFinding
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (!player.TeleportTo(mapid, x, y, z, orientation))
|
if (!player.TeleportTo(mapid, x, y, z, orientation))
|
||||||
error = LfgTeleportResult.InvalidLocation;
|
error = LfgTeleportResult.NoReturnLocation;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
error = LfgTeleportResult.InvalidLocation;
|
error = LfgTeleportResult.NoReturnLocation;
|
||||||
|
|
||||||
if (error != LfgTeleportResult.Ok)
|
if (error != LfgTeleportResult.None)
|
||||||
player.GetSession().SendLfgTeleportError(error);
|
player.GetSession().SendLfgTeleportError(error);
|
||||||
|
|
||||||
Log.outDebug(LogFilter.Lfg, "TeleportPlayer: Player {0} is being teleported in to map {1} (x: {2}, y: {3}, z: {4}) Result: {5}", player.GetName(), dungeon.map, dungeon.x, dungeon.y, dungeon.z, error);
|
Log.outDebug(LogFilter.Lfg, "TeleportPlayer: Player {0} is being teleported in to map {1} (x: {2}, y: {3}, z: {4}) Result: {5}", player.GetName(), dungeon.map, dungeon.x, dungeon.y, dungeon.z, error);
|
||||||
@@ -1323,7 +1333,6 @@ namespace Game.DungeonFinding
|
|||||||
if (reward == null)
|
if (reward == null)
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
bool done = false;
|
|
||||||
Quest quest = Global.ObjectMgr.GetQuestTemplate(reward.firstQuest);
|
Quest quest = Global.ObjectMgr.GetQuestTemplate(reward.firstQuest);
|
||||||
if (quest == null)
|
if (quest == null)
|
||||||
continue;
|
continue;
|
||||||
@@ -1333,7 +1342,6 @@ namespace Game.DungeonFinding
|
|||||||
player.RewardQuest(quest, 0, null, false);
|
player.RewardQuest(quest, 0, null, false);
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
done = true;
|
|
||||||
quest = Global.ObjectMgr.GetQuestTemplate(reward.otherQuest);
|
quest = Global.ObjectMgr.GetQuestTemplate(reward.otherQuest);
|
||||||
if (quest == null)
|
if (quest == null)
|
||||||
continue;
|
continue;
|
||||||
@@ -1617,6 +1625,11 @@ namespace Game.DungeonFinding
|
|||||||
PlayersStore[guid] = new LFGPlayerData();
|
PlayersStore[guid] = new LFGPlayerData();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void SetTicket(ObjectGuid guid, RideTicket ticket)
|
||||||
|
{
|
||||||
|
PlayersStore[guid].SetTicket(ticket);
|
||||||
|
}
|
||||||
|
|
||||||
void RemovePlayerData(ObjectGuid guid)
|
void RemovePlayerData(ObjectGuid guid)
|
||||||
{
|
{
|
||||||
Log.outDebug(LogFilter.Lfg, "RemovePlayerData: [{0}]", guid);
|
Log.outDebug(LogFilter.Lfg, "RemovePlayerData: [{0}]", guid);
|
||||||
@@ -2003,12 +2016,11 @@ namespace Game.DungeonFinding
|
|||||||
|
|
||||||
public class LfgQueueStatusData
|
public class LfgQueueStatusData
|
||||||
{
|
{
|
||||||
public LfgQueueStatusData(byte _queueId = 0, uint _dungeonId = 0, long _joinTime = 0, int _waitTime = -1, int _waitTimeAvg = -1, int _waitTimeTank = -1, int _waitTimeHealer = -1,
|
public LfgQueueStatusData(byte _queueId = 0, uint _dungeonId = 0, int _waitTime = -1, int _waitTimeAvg = -1, int _waitTimeTank = -1, int _waitTimeHealer = -1,
|
||||||
int _waitTimeDps = -1, uint _queuedTime = 0, byte _tanks = 0, byte _healers = 0, byte _dps = 0)
|
int _waitTimeDps = -1, uint _queuedTime = 0, byte _tanks = 0, byte _healers = 0, byte _dps = 0)
|
||||||
{
|
{
|
||||||
queueId = _queueId;
|
queueId = _queueId;
|
||||||
dungeonId = _dungeonId;
|
dungeonId = _dungeonId;
|
||||||
joinTime = _joinTime;
|
|
||||||
waitTime = _waitTime;
|
waitTime = _waitTime;
|
||||||
waitTimeAvg = _waitTimeAvg;
|
waitTimeAvg = _waitTimeAvg;
|
||||||
waitTimeTank = _waitTimeTank;
|
waitTimeTank = _waitTimeTank;
|
||||||
@@ -2022,7 +2034,6 @@ namespace Game.DungeonFinding
|
|||||||
|
|
||||||
public byte queueId;
|
public byte queueId;
|
||||||
public uint dungeonId;
|
public uint dungeonId;
|
||||||
public long joinTime;
|
|
||||||
public int waitTime;
|
public int waitTime;
|
||||||
public int waitTimeAvg;
|
public int waitTimeAvg;
|
||||||
public int waitTimeTank;
|
public int waitTimeTank;
|
||||||
|
|||||||
@@ -18,6 +18,7 @@
|
|||||||
using Framework.Constants;
|
using Framework.Constants;
|
||||||
using Game.Entities;
|
using Game.Entities;
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
|
using Game.Network.Packets;
|
||||||
|
|
||||||
namespace Game.DungeonFinding
|
namespace Game.DungeonFinding
|
||||||
{
|
{
|
||||||
@@ -29,6 +30,11 @@ namespace Game.DungeonFinding
|
|||||||
m_OldState = LfgState.None;
|
m_OldState = LfgState.None;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void SetTicket(RideTicket ticket)
|
||||||
|
{
|
||||||
|
m_Ticket = ticket;
|
||||||
|
}
|
||||||
|
|
||||||
public void SetState(LfgState state)
|
public void SetState(LfgState state)
|
||||||
{
|
{
|
||||||
switch (state)
|
switch (state)
|
||||||
@@ -75,6 +81,11 @@ namespace Game.DungeonFinding
|
|||||||
m_SelectedDungeons = dungeons;
|
m_SelectedDungeons = dungeons;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public RideTicket GetTicket()
|
||||||
|
{
|
||||||
|
return m_Ticket;
|
||||||
|
}
|
||||||
|
|
||||||
public LfgState GetState()
|
public LfgState GetState()
|
||||||
{
|
{
|
||||||
return m_State;
|
return m_State;
|
||||||
@@ -106,6 +117,7 @@ namespace Game.DungeonFinding
|
|||||||
}
|
}
|
||||||
|
|
||||||
// General
|
// General
|
||||||
|
RideTicket m_Ticket;
|
||||||
LfgState m_State;
|
LfgState m_State;
|
||||||
LfgState m_OldState;
|
LfgState m_OldState;
|
||||||
// Player
|
// Player
|
||||||
|
|||||||
@@ -616,7 +616,7 @@ namespace Game.DungeonFinding
|
|||||||
if (string.IsNullOrEmpty(queueinfo.bestCompatible))
|
if (string.IsNullOrEmpty(queueinfo.bestCompatible))
|
||||||
FindBestCompatibleInQueue(itQueue.Key, itQueue.Value);
|
FindBestCompatibleInQueue(itQueue.Key, itQueue.Value);
|
||||||
|
|
||||||
LfgQueueStatusData queueData = new LfgQueueStatusData(queueId, dungeonId, queueinfo.joinTime, waitTime, wtAvg, wtTank, wtHealer, wtDps, queuedTime, queueinfo.tanks, queueinfo.healers, queueinfo.dps);
|
LfgQueueStatusData queueData = new LfgQueueStatusData(queueId, dungeonId, waitTime, wtAvg, wtTank, wtHealer, wtDps, queuedTime, queueinfo.tanks, queueinfo.healers, queueinfo.dps);
|
||||||
foreach (var itPlayer in queueinfo.roles)
|
foreach (var itPlayer in queueinfo.roles)
|
||||||
{
|
{
|
||||||
ObjectGuid pguid = itPlayer.Key;
|
ObjectGuid pguid = itPlayer.Key;
|
||||||
|
|||||||
@@ -34,10 +34,7 @@ namespace Game.DungeonFinding
|
|||||||
return;
|
return;
|
||||||
|
|
||||||
if (!player.GetGroup())
|
if (!player.GetGroup())
|
||||||
{
|
|
||||||
player.GetSession().SendLfgLfrList(false);
|
|
||||||
Global.LFGMgr.LeaveLfg(player.GetGUID());
|
Global.LFGMgr.LeaveLfg(player.GetGUID());
|
||||||
}
|
|
||||||
else if (player.GetSession().PlayerDisconnected())
|
else if (player.GetSession().PlayerDisconnected())
|
||||||
Global.LFGMgr.LeaveLfg(player.GetGUID(), true);
|
Global.LFGMgr.LeaveLfg(player.GetGUID(), true);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1391,7 +1391,7 @@ namespace Game.Groups
|
|||||||
{
|
{
|
||||||
partyUpdate.LfgInfos.HasValue = true;
|
partyUpdate.LfgInfos.HasValue = true;
|
||||||
|
|
||||||
partyUpdate.LfgInfos.Value.Slot = Global.LFGMgr.GetDungeon(m_guid);
|
partyUpdate.LfgInfos.Value.Slot = Global.LFGMgr.GetLFGDungeonEntry(Global.LFGMgr.GetDungeon(m_guid));
|
||||||
partyUpdate.LfgInfos.Value.BootCount = 0;
|
partyUpdate.LfgInfos.Value.BootCount = 0;
|
||||||
partyUpdate.LfgInfos.Value.Aborted = false;
|
partyUpdate.LfgInfos.Value.Aborted = false;
|
||||||
|
|
||||||
|
|||||||
+192
-247
@@ -23,48 +23,14 @@ using Game.Network;
|
|||||||
using Game.Network.Packets;
|
using Game.Network.Packets;
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
using System.Linq;
|
using System.Linq;
|
||||||
|
using Game.DataStorage;
|
||||||
|
|
||||||
namespace Game
|
namespace Game
|
||||||
{
|
{
|
||||||
public partial class WorldSession
|
public partial class WorldSession
|
||||||
{
|
{
|
||||||
void BuildQuestReward(LfgPlayerQuestReward questReward, Quest quest, Player player)
|
|
||||||
{
|
|
||||||
byte rewCount = (byte)(quest.GetRewItemsCount() + quest.GetRewCurrencyCount());
|
|
||||||
|
|
||||||
questReward.RewardMoney = player.GetQuestMoneyReward(quest);
|
|
||||||
questReward.RewardXP = player.GetQuestXPReward(quest);
|
|
||||||
if (rewCount != 0)
|
|
||||||
{
|
|
||||||
for (byte i = 0; i < SharedConst.QuestRewardCurrencyCount; ++i)
|
|
||||||
{
|
|
||||||
var rewardCurrency = new LfgPlayerQuestReward.LfgPlayerQuestRewardCurrency();
|
|
||||||
uint currencyId = quest.RewardCurrencyId[i];
|
|
||||||
if (currencyId != 0)
|
|
||||||
{
|
|
||||||
rewardCurrency.CurrencyID = currencyId;
|
|
||||||
rewardCurrency.Quantity = quest.RewardCurrencyCount[i];
|
|
||||||
questReward.Currency.Add(rewardCurrency);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
for (byte i = 0; i < SharedConst.QuestRewardItemCount; ++i)
|
|
||||||
{
|
|
||||||
var rewardItem = new LfgPlayerQuestReward.LfgPlayerQuestRewardItem();
|
|
||||||
uint itemId = quest.RewardItemId[i];
|
|
||||||
if (itemId != 0)
|
|
||||||
{
|
|
||||||
ItemTemplate item = Global.ObjectMgr.GetItemTemplate(itemId);
|
|
||||||
rewardItem.ItemID = itemId;
|
|
||||||
rewardItem.Quantity = quest.RewardItemCount[i];
|
|
||||||
questReward.Items.Add(rewardItem);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
[WorldPacketHandler(ClientOpcodes.DfJoin)]
|
[WorldPacketHandler(ClientOpcodes.DfJoin)]
|
||||||
void HandleDfJoin(DFJoin dfJoin)
|
void HandleLfgJoin(DFJoin dfJoin)
|
||||||
{
|
{
|
||||||
if (!Global.LFGMgr.isOptionEnabled(LfgOptions.EnableDungeonFinder | LfgOptions.EnableRaidBrowser) ||
|
if (!Global.LFGMgr.isOptionEnabled(LfgOptions.EnableDungeonFinder | LfgOptions.EnableRaidBrowser) ||
|
||||||
(GetPlayer().GetGroup() && GetPlayer().GetGroup().GetLeaderGUID() != GetPlayer().GetGUID() &&
|
(GetPlayer().GetGroup() && GetPlayer().GetGroup().GetLeaderGUID() != GetPlayer().GetGUID() &&
|
||||||
@@ -73,73 +39,74 @@ namespace Game
|
|||||||
|
|
||||||
if (dfJoin.Slots.Empty())
|
if (dfJoin.Slots.Empty())
|
||||||
{
|
{
|
||||||
Log.outDebug(LogFilter.Lfg, "ClientOpcodes.DfJoin {0} no dungeons selected", GetPlayerInfo());
|
Log.outDebug(LogFilter.Lfg, "CMSG_DF_JOIN {0} no dungeons selected", GetPlayerInfo());
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
List<uint> newDungeons = new List<uint>();
|
List<uint> newDungeons = new List<uint>();
|
||||||
for (int i = 0; i < dfJoin.Slots.Count; ++i)
|
foreach (uint slot in dfJoin.Slots)
|
||||||
{
|
{
|
||||||
uint dungeon = dfJoin.Slots[i];
|
uint dungeon = slot & 0x00FFFFFF;
|
||||||
if (dungeon != 0)
|
if (CliDB.LfgDungeonsStorage.ContainsKey(dungeon))
|
||||||
newDungeons.Add(dungeon);
|
newDungeons.Add(dungeon);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Log.outDebug(LogFilter.Lfg, "CMSG_DF_JOIN {0} roles: {1}, Dungeons: {2}", GetPlayerInfo(), dfJoin.Roles, newDungeons.Count);
|
||||||
|
|
||||||
Global.LFGMgr.JoinLfg(GetPlayer(), dfJoin.Roles, newDungeons);
|
Global.LFGMgr.JoinLfg(GetPlayer(), dfJoin.Roles, newDungeons);
|
||||||
}
|
}
|
||||||
|
|
||||||
[WorldPacketHandler(ClientOpcodes.DfLeave)]
|
[WorldPacketHandler(ClientOpcodes.DfLeave)]
|
||||||
void HandleDfLeave(DFLeave dfLeave)
|
void HandleLfgLeave(DFLeave dfLeave)
|
||||||
{
|
{
|
||||||
ObjectGuid leaveGuid = dfLeave.Ticket.RequesterGuid;
|
|
||||||
Group group = GetPlayer().GetGroup();
|
Group group = GetPlayer().GetGroup();
|
||||||
ObjectGuid guid = GetPlayer().GetGUID();
|
|
||||||
ObjectGuid gguid = group ? group.GetGUID() : guid;
|
Log.outDebug(LogFilter.Lfg, "CMSG_DF_LEAVE {0} in group: {1} sent guid {2}.", GetPlayerInfo(), group ? 1 : 0, dfLeave.Ticket.RequesterGuid.ToString());
|
||||||
|
|
||||||
// Check cheating - only leader can leave the queue
|
// Check cheating - only leader can leave the queue
|
||||||
if (!group || group.GetLeaderGUID() == leaveGuid)
|
if (!group || group.GetLeaderGUID() == dfLeave.Ticket.RequesterGuid)
|
||||||
Global.LFGMgr.LeaveLfg(gguid);
|
Global.LFGMgr.LeaveLfg(dfLeave.Ticket.RequesterGuid);
|
||||||
}
|
}
|
||||||
|
|
||||||
[WorldPacketHandler(ClientOpcodes.DfProposalResponse)]
|
[WorldPacketHandler(ClientOpcodes.DfProposalResponse)]
|
||||||
void HandleDfProposalResponse(DFProposalResponse dfProposalResponse)
|
void HandleLfgProposalResult(DFProposalResponse dfProposalResponse)
|
||||||
{
|
{
|
||||||
Global.LFGMgr.UpdateProposal(dfProposalResponse.ProposalID, dfProposalResponse.Ticket.RequesterGuid, dfProposalResponse.Accepted);
|
Log.outDebug(LogFilter.Lfg, "CMSG_LFG_PROPOSAL_RESULT {0} proposal: {1} accept: {2}", GetPlayerInfo(), dfProposalResponse.ProposalID, dfProposalResponse.Accepted ? 1 : 0);
|
||||||
|
Global.LFGMgr.UpdateProposal(dfProposalResponse.ProposalID, GetPlayer().GetGUID(), dfProposalResponse.Accepted);
|
||||||
}
|
}
|
||||||
|
|
||||||
[WorldPacketHandler(ClientOpcodes.DfSetRoles)]
|
[WorldPacketHandler(ClientOpcodes.DfSetRoles)]
|
||||||
void HandleDfSetRoles(DFSetRoles setRoles)
|
void HandleLfgSetRoles(DFSetRoles dfSetRoles)
|
||||||
{
|
{
|
||||||
ObjectGuid guid = GetPlayer().GetGUID();
|
ObjectGuid guid = GetPlayer().GetGUID();
|
||||||
Group group = GetPlayer().GetGroup();
|
Group group = GetPlayer().GetGroup();
|
||||||
if (!group)
|
if (!group)
|
||||||
{
|
{
|
||||||
Log.outDebug(LogFilter.Lfg, "CMSG_LFG_SET_ROLES {0} Not in group",
|
Log.outDebug(LogFilter.Lfg, "CMSG_DF_SET_ROLES {0} Not in group",
|
||||||
GetPlayerInfo());
|
GetPlayerInfo());
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
ObjectGuid gguid = group.GetGUID();
|
ObjectGuid gguid = group.GetGUID();
|
||||||
Log.outDebug(LogFilter.Lfg, "CMSG_LFG_SET_ROLES: Group {0}, Player {1}, Roles: {2}", gguid.ToString(), GetPlayerInfo(), setRoles.RolesDesired);
|
Log.outDebug(LogFilter.Lfg, "CMSG_DF_SET_ROLES: Group {0}, Player {1}, Roles: {2}", gguid.ToString(), GetPlayerInfo(), dfSetRoles.RolesDesired);
|
||||||
Global.LFGMgr.UpdateRoleCheck(gguid, guid, setRoles.RolesDesired);
|
Global.LFGMgr.UpdateRoleCheck(gguid, guid, dfSetRoles.RolesDesired);
|
||||||
}
|
}
|
||||||
|
|
||||||
[WorldPacketHandler(ClientOpcodes.DfBootPlayerVote)]
|
[WorldPacketHandler(ClientOpcodes.DfBootPlayerVote)]
|
||||||
void HandleDfBootPlayerVote(DFBootPlayerVote bootPlayerVote)
|
void HandleLfgSetBootVote(DFBootPlayerVote dfBootPlayerVote)
|
||||||
{
|
{
|
||||||
ObjectGuid guid = GetPlayer().GetGUID();
|
ObjectGuid guid = GetPlayer().GetGUID();
|
||||||
Log.outDebug(LogFilter.Lfg, "ClientOpcodes.DfBootPlayerVote: {0} agree: {1}", GetPlayerInfo(), bootPlayerVote.Vote);
|
Log.outDebug(LogFilter.Lfg, "CMSG_LFG_SET_BOOT_VOTE {0} agree: {1}", GetPlayerInfo(), dfBootPlayerVote.Vote ? 1 : 0);
|
||||||
Global.LFGMgr.UpdateBoot(guid, bootPlayerVote.Vote);
|
Global.LFGMgr.UpdateBoot(guid, dfBootPlayerVote.Vote);
|
||||||
}
|
}
|
||||||
|
|
||||||
[WorldPacketHandler(ClientOpcodes.DfTeleport)]
|
[WorldPacketHandler(ClientOpcodes.DfTeleport)]
|
||||||
void HandleDfTeleport(DFTeleport teleport)
|
void HandleLfgTeleport(DFTeleport dfTeleport)
|
||||||
{
|
{
|
||||||
Log.outDebug(LogFilter.Lfg, "CMSG_LFG_TELEPORT {0} out: {1}", GetPlayerInfo(), teleport.TeleportOut);
|
Log.outDebug(LogFilter.Lfg, "CMSG_DF_TELEPORT {0} out: {1}", GetPlayerInfo(), dfTeleport.TeleportOut ? 1 : 0);
|
||||||
Global.LFGMgr.TeleportPlayer(GetPlayer(), teleport.TeleportOut, true);
|
Global.LFGMgr.TeleportPlayer(GetPlayer(), dfTeleport.TeleportOut, true);
|
||||||
}
|
}
|
||||||
|
|
||||||
//[WorldPacketHandler(ClientOpcodes.DfGetSystemInfo, Processing = PacketProcessing.ThreadSafe)]
|
[WorldPacketHandler(ClientOpcodes.DfGetSystemInfo, Processing = PacketProcessing.ThreadSafe)]
|
||||||
void HandleDfGetSystemInfo(DFGetSystemInfo dfGetSystemInfo)
|
void HandleDfGetSystemInfo(DFGetSystemInfo dfGetSystemInfo)
|
||||||
{
|
{
|
||||||
Log.outDebug(LogFilter.Lfg, "CMSG_LFG_Lock_INFO_REQUEST {0} for {1}", GetPlayerInfo(), (dfGetSystemInfo.Player ? "player" : "party"));
|
Log.outDebug(LogFilter.Lfg, "CMSG_LFG_Lock_INFO_REQUEST {0} for {1}", GetPlayerInfo(), (dfGetSystemInfo.Player ? "player" : "party"));
|
||||||
@@ -175,56 +142,67 @@ namespace Game
|
|||||||
|
|
||||||
public void SendLfgPlayerLockInfo()
|
public void SendLfgPlayerLockInfo()
|
||||||
{
|
{
|
||||||
ObjectGuid guid = GetPlayer().GetGUID();
|
|
||||||
|
|
||||||
// Get Random dungeons that can be done at a certain level and expansion
|
// Get Random dungeons that can be done at a certain level and expansion
|
||||||
uint level = GetPlayer().getLevel();
|
uint level = GetPlayer().getLevel();
|
||||||
List<uint> randomDungeons = Global.LFGMgr.GetRandomAndSeasonalDungeons(level, (uint)GetExpansion());
|
List<uint> randomDungeons = Global.LFGMgr.GetRandomAndSeasonalDungeons(level, (uint)GetExpansion());
|
||||||
|
|
||||||
// Get player Locked Dungeons
|
|
||||||
Dictionary<uint, LfgLockInfoData> Lock = Global.LFGMgr.GetLockedDungeons(guid);
|
|
||||||
uint rsize = (uint)randomDungeons.Count;
|
|
||||||
uint lsize = (uint)Lock.Count;
|
|
||||||
|
|
||||||
LfgPlayerInfo lfgPlayerInfo = new LfgPlayerInfo();
|
LfgPlayerInfo lfgPlayerInfo = new LfgPlayerInfo();
|
||||||
lfgPlayerInfo.BlackList = new LFGBlackList(Lock);
|
|
||||||
|
// Get player locked Dungeons
|
||||||
|
foreach (var locked in Global.LFGMgr.GetLockedDungeons(_player.GetGUID()))
|
||||||
|
lfgPlayerInfo.BlackList.Slot.Add(new LFGBlackListSlot(locked.Key, (uint)locked.Value.lockStatus, locked.Value.requiredItemLevel, (int)locked.Value.currentItemLevel));
|
||||||
|
|
||||||
foreach (var slot in randomDungeons)
|
foreach (var slot in randomDungeons)
|
||||||
{
|
{
|
||||||
var dungeonInfo = new LfgPlayerDungeonInfo();
|
var playerDungeonInfo = new LfgPlayerDungeonInfo();
|
||||||
dungeonInfo.Slot = slot;
|
playerDungeonInfo.Slot = slot;
|
||||||
dungeonInfo.FirstReward = true;
|
playerDungeonInfo.CompletionQuantity = 1;
|
||||||
|
playerDungeonInfo.CompletionLimit = 1;
|
||||||
|
playerDungeonInfo.CompletionCurrencyID = 0;
|
||||||
|
playerDungeonInfo.SpecificQuantity = 0;
|
||||||
|
playerDungeonInfo.SpecificLimit = 1;
|
||||||
|
playerDungeonInfo.OverallQuantity = 0;
|
||||||
|
playerDungeonInfo.OverallLimit = 1;
|
||||||
|
playerDungeonInfo.PurseWeeklyQuantity = 0;
|
||||||
|
playerDungeonInfo.PurseWeeklyLimit = 0;
|
||||||
|
playerDungeonInfo.PurseQuantity = 0;
|
||||||
|
playerDungeonInfo.PurseLimit = 0;
|
||||||
|
playerDungeonInfo.Quantity = 1;
|
||||||
|
playerDungeonInfo.CompletedMask = 0;
|
||||||
|
playerDungeonInfo.EncounterMask = 0;
|
||||||
|
|
||||||
LfgReward reward = Global.LFGMgr.GetRandomDungeonReward(slot, level);
|
LfgReward reward = Global.LFGMgr.GetRandomDungeonReward(slot, level);
|
||||||
Quest quest = null;
|
|
||||||
bool done = false;
|
|
||||||
if (reward != null)
|
if (reward != null)
|
||||||
{
|
{
|
||||||
quest = Global.ObjectMgr.GetQuestTemplate(reward.firstQuest);
|
Quest quest = Global.ObjectMgr.GetQuestTemplate(reward.firstQuest);
|
||||||
if (quest != null)
|
if (quest != null)
|
||||||
{
|
{
|
||||||
done = !GetPlayer().CanRewardQuest(quest, false);
|
playerDungeonInfo.FirstReward = !GetPlayer().CanRewardQuest(quest, false);
|
||||||
if (done)
|
if (!playerDungeonInfo.FirstReward)
|
||||||
{
|
|
||||||
quest = Global.ObjectMgr.GetQuestTemplate(reward.otherQuest);
|
quest = Global.ObjectMgr.GetQuestTemplate(reward.otherQuest);
|
||||||
dungeonInfo.FirstReward = false;
|
|
||||||
|
if (quest != null)
|
||||||
|
{
|
||||||
|
playerDungeonInfo.Rewards.RewardMoney = _player.GetQuestMoneyReward(quest);
|
||||||
|
playerDungeonInfo.Rewards.RewardXP = _player.GetQuestXPReward(quest);
|
||||||
|
for (byte i = 0; i < SharedConst.QuestRewardItemCount; ++i)
|
||||||
|
{
|
||||||
|
uint itemId = quest.RewardItemId[i];
|
||||||
|
if (itemId != 0)
|
||||||
|
playerDungeonInfo.Rewards.Item.Add(new LfgPlayerQuestRewardItem(itemId, quest.RewardItemCount[i]));
|
||||||
|
}
|
||||||
|
|
||||||
|
for (byte i = 0; i < SharedConst.QuestRewardCurrencyCount; ++i)
|
||||||
|
{
|
||||||
|
uint curencyId = quest.RewardCurrencyId[i];
|
||||||
|
if (curencyId != 0)
|
||||||
|
playerDungeonInfo.Rewards.Currency.Add(new LfgPlayerQuestRewardCurrency(curencyId, quest.RewardCurrencyCount[i]));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (quest != null)
|
lfgPlayerInfo.Dungeons.Add(playerDungeonInfo);
|
||||||
{
|
|
||||||
dungeonInfo.ShortageEligible = true;
|
|
||||||
|
|
||||||
dungeonInfo.CompletionQuantity = 1;
|
|
||||||
dungeonInfo.CompletionLimit = 1;
|
|
||||||
dungeonInfo.SpecificLimit = 1;
|
|
||||||
dungeonInfo.OverallLimit = 1;
|
|
||||||
dungeonInfo.Quantity = 1;
|
|
||||||
|
|
||||||
BuildQuestReward(dungeonInfo.Rewards, quest, GetPlayer());
|
|
||||||
}
|
|
||||||
lfgPlayerInfo.Dungeons.Add(dungeonInfo);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
SendPacket(lfgPlayerInfo);
|
SendPacket(lfgPlayerInfo);
|
||||||
@@ -237,8 +215,9 @@ namespace Game
|
|||||||
if (!group)
|
if (!group)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
|
LfgPartyInfo lfgPartyInfo = new LfgPartyInfo();
|
||||||
|
|
||||||
// Get the Locked dungeons of the other party members
|
// Get the Locked dungeons of the other party members
|
||||||
Dictionary<ObjectGuid, Dictionary<uint, LfgLockInfoData>> LockMap = new Dictionary<ObjectGuid, Dictionary<uint, LfgLockInfoData>>();
|
|
||||||
for (GroupReference refe = group.GetFirstMember(); refe != null; refe = refe.next())
|
for (GroupReference refe = group.GetFirstMember(); refe != null; refe = refe.next())
|
||||||
{
|
{
|
||||||
Player plrg = refe.GetSource();
|
Player plrg = refe.GetSource();
|
||||||
@@ -249,62 +228,65 @@ namespace Game
|
|||||||
if (pguid == guid)
|
if (pguid == guid)
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
LockMap[pguid] = Global.LFGMgr.GetLockedDungeons(pguid);
|
LFGBlackList lfgBlackList = new LFGBlackList();
|
||||||
|
lfgBlackList.PlayerGuid.Set(pguid);
|
||||||
|
foreach (var locked in Global.LFGMgr.GetLockedDungeons(pguid))
|
||||||
|
lfgBlackList.Slot.Add(new LFGBlackListSlot(locked.Key, (uint)locked.Value.lockStatus, locked.Value.requiredItemLevel, (int)locked.Value.currentItemLevel));
|
||||||
|
|
||||||
|
lfgPartyInfo.Player.Add(lfgBlackList);
|
||||||
}
|
}
|
||||||
|
|
||||||
Log.outDebug(LogFilter.Lfg, "SMSG_LFG_PARTY_INFO {0}", GetPlayerInfo());
|
Log.outDebug(LogFilter.Lfg, "SMSG_LFG_PARTY_INFO {0}", GetPlayerInfo());
|
||||||
|
SendPacket(lfgPartyInfo);
|
||||||
LfgPartyInfo partyInfo = new LfgPartyInfo();
|
|
||||||
foreach (var it in LockMap)
|
|
||||||
{
|
|
||||||
var blackList = new LFGBlackList(it.Value);
|
|
||||||
blackList.PlayerGuid.Set(it.Key);
|
|
||||||
|
|
||||||
partyInfo.Players.Add(blackList);
|
|
||||||
}
|
|
||||||
|
|
||||||
SendPacket(partyInfo);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public void SendLfgUpdateStatus(LfgUpdateData updateData, bool party)
|
public void SendLfgUpdateStatus(LfgUpdateData updateData, bool party)
|
||||||
{
|
{
|
||||||
ObjectGuid guid = GetPlayer().GetGUID();
|
bool join = false;
|
||||||
|
bool queued = false;
|
||||||
LFGUpdateStatus updateStatus = new LFGUpdateStatus();
|
|
||||||
updateStatus.Ticket.RequesterGuid = guid;
|
|
||||||
updateStatus.Ticket.Id = Global.LFGMgr.GetQueueId(guid);
|
|
||||||
updateStatus.Ticket.Type = (byte)updateData.state;
|
|
||||||
updateStatus.Ticket.Time = (uint)Global.LFGMgr.GetQueueJoinTime(guid);
|
|
||||||
|
|
||||||
updateStatus.SubType = (byte)(updateData.dungeons.Count > 0 ? Global.LFGMgr.GetDungeonType(updateData.dungeons[0]) : 0);
|
|
||||||
updateStatus.Reason = (byte)updateData.updateType;
|
|
||||||
|
|
||||||
updateStatus.Slots = updateData.dungeons;
|
|
||||||
updateStatus.RequestedRoles = (uint)Global.LFGMgr.GetRoles(guid);
|
|
||||||
updateStatus.IsParty = party;
|
|
||||||
|
|
||||||
switch (updateData.updateType)
|
switch (updateData.updateType)
|
||||||
{
|
{
|
||||||
case LfgUpdateType.JoinQueueInitial: // Joined queue outside the dungeon
|
case LfgUpdateType.JoinQueueInitial: // Joined queue outside the dungeon
|
||||||
updateStatus.Joined = updateStatus.LfgJoined = true;
|
join = true;
|
||||||
break;
|
break;
|
||||||
case LfgUpdateType.JoinQueue:
|
case LfgUpdateType.JoinQueue:
|
||||||
case LfgUpdateType.AddedToQueue: // Rolecheck Success
|
case LfgUpdateType.AddedToQueue: // Rolecheck Success
|
||||||
updateStatus.Joined = updateStatus.LfgJoined = true;
|
join = true;
|
||||||
updateStatus.Queued = true;
|
queued = true;
|
||||||
break;
|
break;
|
||||||
case LfgUpdateType.ProposalBegin:
|
case LfgUpdateType.ProposalBegin:
|
||||||
updateStatus.Joined = updateStatus.LfgJoined = true;
|
join = true;
|
||||||
break;
|
break;
|
||||||
case LfgUpdateType.UpdateStatus:
|
case LfgUpdateType.UpdateStatus:
|
||||||
updateStatus.Joined = updateStatus.LfgJoined = updateData.state != LfgState.Rolecheck && updateData.state != LfgState.None;
|
join = updateData.state != LfgState.Rolecheck && updateData.state != LfgState.None;
|
||||||
updateStatus.Queued = updateData.state == LfgState.Queued;
|
queued = updateData.state == LfgState.Queued;
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
SendPacket(updateStatus);
|
LFGUpdateStatus lfgUpdateStatus = new LFGUpdateStatus();
|
||||||
|
|
||||||
|
RideTicket ticket = Global.LFGMgr.GetTicket(_player.GetGUID());
|
||||||
|
if (ticket != null)
|
||||||
|
lfgUpdateStatus.Ticket = ticket;
|
||||||
|
|
||||||
|
lfgUpdateStatus.SubType = (byte)LfgQueueType.Dungeon; // other types not implemented
|
||||||
|
lfgUpdateStatus.Reason = (byte)updateData.updateType;
|
||||||
|
|
||||||
|
foreach (var dungeonId in updateData.dungeons)
|
||||||
|
lfgUpdateStatus.Slots.Add(Global.LFGMgr.GetLFGDungeonEntry(dungeonId));
|
||||||
|
|
||||||
|
lfgUpdateStatus.RequestedRoles = (uint)Global.LFGMgr.GetRoles(_player.GetGUID());
|
||||||
|
//lfgUpdateStatus.SuspendedPlayers;
|
||||||
|
lfgUpdateStatus.IsParty = party;
|
||||||
|
lfgUpdateStatus.NotifyUI = true;
|
||||||
|
lfgUpdateStatus.Joined = join;
|
||||||
|
lfgUpdateStatus.LfgJoined = updateData.updateType != LfgUpdateType.RemovedFromQueue;
|
||||||
|
lfgUpdateStatus.Queued = queued;
|
||||||
|
|
||||||
|
SendPacket(lfgUpdateStatus);
|
||||||
}
|
}
|
||||||
|
|
||||||
public void SendLfgRoleChosen(ObjectGuid guid, LfgRoles roles)
|
public void SendLfgRoleChosen(ObjectGuid guid, LfgRoles roles)
|
||||||
@@ -326,71 +308,62 @@ namespace Game
|
|||||||
|
|
||||||
Log.outDebug(LogFilter.Lfg, "SMSG_LFG_ROLE_CHECK_UPDATE {0}", GetPlayerInfo());
|
Log.outDebug(LogFilter.Lfg, "SMSG_LFG_ROLE_CHECK_UPDATE {0}", GetPlayerInfo());
|
||||||
|
|
||||||
LFGRoleCheckUpdate roleCheckUpdate = new LFGRoleCheckUpdate();
|
LFGRoleCheckUpdate lfgRoleCheckUpdate = new LFGRoleCheckUpdate();
|
||||||
roleCheckUpdate.PartyIndex = (byte)roleCheck.rDungeonId; //Wrong
|
lfgRoleCheckUpdate.PartyIndex = 127;
|
||||||
roleCheckUpdate.RoleCheckStatus = (byte)roleCheck.state;
|
lfgRoleCheckUpdate.RoleCheckStatus = (byte)roleCheck.state;
|
||||||
roleCheckUpdate.IsBeginning = roleCheck.state == LfgRoleCheckState.Initialiting;
|
lfgRoleCheckUpdate.IsBeginning = roleCheck.state == LfgRoleCheckState.Initialiting;
|
||||||
|
|
||||||
if (!dungeons.Empty())
|
foreach (var dungeonId in dungeons)
|
||||||
foreach (var it in dungeons)
|
lfgRoleCheckUpdate.JoinSlots.Add(Global.LFGMgr.GetLFGDungeonEntry(dungeonId));
|
||||||
roleCheckUpdate.JoinSlots.Add(Global.LFGMgr.GetLFGDungeonEntry(it)); // Dungeon
|
|
||||||
|
|
||||||
|
lfgRoleCheckUpdate.BgQueueID = 0;
|
||||||
|
lfgRoleCheckUpdate.GroupFinderActivityID = 0;
|
||||||
if (!roleCheck.roles.Empty())
|
if (!roleCheck.roles.Empty())
|
||||||
{
|
{
|
||||||
// Leader info MUST be sent 1st :S
|
// Leader info MUST be sent 1st :S
|
||||||
ObjectGuid guid = roleCheck.leader;
|
byte roles = (byte)roleCheck.roles.Find(roleCheck.leader).Value;
|
||||||
LfgRoles roles = roleCheck.roles.LookupByKey(guid);
|
lfgRoleCheckUpdate.Members.Add(new LFGRoleCheckUpdateMember(roleCheck.leader, roles, Global.WorldMgr.GetCharacterInfo(roleCheck.leader).Level, roles > 0));
|
||||||
Player player = Global.ObjAccessor.FindPlayer(guid);
|
|
||||||
|
|
||||||
var roleCheckUpdateMember = new LFGRoleCheckUpdate.LFGRoleCheckUpdateMember();
|
|
||||||
|
|
||||||
roleCheckUpdateMember.Guid = guid;
|
|
||||||
roleCheckUpdateMember.RolesDesired = (uint)roles;
|
|
||||||
|
|
||||||
roleCheckUpdateMember.Level = (byte)(player ? player.getLevel() : 0);
|
|
||||||
roleCheckUpdateMember.RoleCheckComplete = roles > 0;
|
|
||||||
|
|
||||||
roleCheckUpdate.Members.Add(roleCheckUpdateMember);
|
|
||||||
|
|
||||||
foreach (var it in roleCheck.roles)
|
foreach (var it in roleCheck.roles)
|
||||||
{
|
{
|
||||||
if (it.Key == roleCheck.leader)
|
if (it.Key == roleCheck.leader)
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
roleCheckUpdateMember = new LFGRoleCheckUpdate.LFGRoleCheckUpdateMember();
|
roles = (byte)it.Value;
|
||||||
|
lfgRoleCheckUpdate.Members.Add(new LFGRoleCheckUpdateMember(it.Key, roles, Global.WorldMgr.GetCharacterInfo(it.Key).Level, roles > 0));
|
||||||
guid = it.Key;
|
|
||||||
roles = it.Value;
|
|
||||||
player = Global.ObjAccessor.FindPlayer(guid);
|
|
||||||
roleCheckUpdateMember.Guid = guid;
|
|
||||||
roleCheckUpdateMember.RolesDesired = (uint)roles;
|
|
||||||
roleCheckUpdateMember.Level = (byte)(player ? player.getLevel() : 0);
|
|
||||||
roleCheckUpdateMember.RoleCheckComplete = roles > 0;
|
|
||||||
|
|
||||||
roleCheckUpdate.Members.Add(roleCheckUpdateMember);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
SendPacket(roleCheckUpdate);
|
SendPacket(lfgRoleCheckUpdate);
|
||||||
}
|
}
|
||||||
|
|
||||||
public void SendLfgJoinResult(LfgJoinResultData joinData)
|
public void SendLfgJoinResult(LfgJoinResultData joinData)
|
||||||
{
|
{
|
||||||
ObjectGuid guid = GetPlayer().GetGUID();
|
LFGJoinResult lfgJoinResult = new LFGJoinResult();
|
||||||
|
|
||||||
LFGJoinResult joinResult = new LFGJoinResult();
|
RideTicket ticket = Global.LFGMgr.GetTicket(GetPlayer().GetGUID());
|
||||||
joinResult.Ticket = new RideTicket(guid, Global.LFGMgr.GetQueueId(guid), (int)Global.LFGMgr.GetState(guid), (uint)Time.UnixTime);
|
if (ticket != null)
|
||||||
|
lfgJoinResult.Ticket = ticket;
|
||||||
|
|
||||||
|
lfgJoinResult.Result = (byte)joinData.result;
|
||||||
|
if (joinData.result == LfgJoinResult.RoleCheckFailed)
|
||||||
|
lfgJoinResult.ResultDetail = (byte)joinData.state;
|
||||||
|
|
||||||
joinResult.Result = (byte)joinData.result;
|
|
||||||
joinResult.ResultDetail= (byte)joinData.state;
|
|
||||||
foreach (var it in joinData.lockmap)
|
foreach (var it in joinData.lockmap)
|
||||||
{
|
{
|
||||||
var blackList = new LFGBlackList(it.Value);
|
var blackList = new LFGJoinBlackList();
|
||||||
blackList.PlayerGuid.Set(it.Key);
|
blackList.PlayerGuid = it.Key;
|
||||||
joinResult.BlackList.Add(blackList);
|
|
||||||
|
foreach (var lockInfo in it.Value)
|
||||||
|
{
|
||||||
|
Log.outTrace(LogFilter.Lfg, "SendLfgJoinResult:: {0} DungeonID: {1} Lock status: {2} Required itemLevel: {3} Current itemLevel: {4}",
|
||||||
|
it.Key.ToString(), (lockInfo.Key & 0x00FFFFFF), lockInfo.Value.lockStatus, lockInfo.Value.requiredItemLevel, lockInfo.Value.currentItemLevel);
|
||||||
|
|
||||||
|
blackList.Slots.Add(new LFGJoinBlackListSlot((int)lockInfo.Key, (int)lockInfo.Value.lockStatus, lockInfo.Value.requiredItemLevel, (int)lockInfo.Value.currentItemLevel));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
SendPacket(joinResult);
|
SendPacket(lfgJoinResult);
|
||||||
}
|
}
|
||||||
|
|
||||||
public void SendLfgQueueStatus(LfgQueueStatusData queueData)
|
public void SendLfgQueueStatus(LfgQueueStatusData queueData)
|
||||||
@@ -400,22 +373,23 @@ namespace Game
|
|||||||
GetPlayerInfo(), Global.LFGMgr.GetState(GetPlayer().GetGUID()), queueData.dungeonId, queueData.waitTime, queueData.waitTimeAvg,
|
GetPlayerInfo(), Global.LFGMgr.GetState(GetPlayer().GetGUID()), queueData.dungeonId, queueData.waitTime, queueData.waitTimeAvg,
|
||||||
queueData.waitTimeTank, queueData.waitTimeHealer, queueData.waitTimeDps, queueData.queuedTime, queueData.tanks, queueData.healers, queueData.dps);
|
queueData.waitTimeTank, queueData.waitTimeHealer, queueData.waitTimeDps, queueData.queuedTime, queueData.tanks, queueData.healers, queueData.dps);
|
||||||
|
|
||||||
LFGQueueStatus queueStatus = new LFGQueueStatus();
|
LFGQueueStatus lfgQueueStatus = new LFGQueueStatus();
|
||||||
queueStatus.Ticket = new RideTicket(GetPlayer().GetGUID(), queueData.dungeonId, 3, (uint)queueData.joinTime);
|
|
||||||
queueStatus.Slot = queueData.queueId;
|
|
||||||
queueStatus.AvgWaitTime = (uint)queueData.waitTimeAvg;
|
|
||||||
queueStatus.QueuedTime = queueData.queuedTime;
|
|
||||||
|
|
||||||
|
RideTicket ticket = Global.LFGMgr.GetTicket(GetPlayer().GetGUID());
|
||||||
|
if (ticket != null)
|
||||||
|
lfgQueueStatus.Ticket = ticket;
|
||||||
|
lfgQueueStatus.Slot = queueData.queueId;
|
||||||
|
lfgQueueStatus.AvgWaitTimeMe = (uint)queueData.waitTime;
|
||||||
|
lfgQueueStatus.AvgWaitTime = (uint)queueData.waitTimeAvg;
|
||||||
|
lfgQueueStatus.AvgWaitTimeByRole[0] = (uint)queueData.waitTimeTank;
|
||||||
|
lfgQueueStatus.AvgWaitTimeByRole[1] = (uint)queueData.waitTimeHealer;
|
||||||
|
lfgQueueStatus.AvgWaitTimeByRole[2] = (uint)queueData.waitTimeDps;
|
||||||
|
lfgQueueStatus.LastNeeded[0] = queueData.tanks;
|
||||||
|
lfgQueueStatus.LastNeeded[1] = queueData.healers;
|
||||||
|
lfgQueueStatus.LastNeeded[2] = queueData.dps;
|
||||||
|
lfgQueueStatus.QueuedTime = queueData.queuedTime;
|
||||||
|
|
||||||
queueStatus.LastNeeded[0] = queueData.tanks;
|
SendPacket(lfgQueueStatus);
|
||||||
queueStatus.AvgWaitTimeByRole[0] = (uint)queueData.waitTimeTank;
|
|
||||||
queueStatus.LastNeeded[1] = queueData.healers;
|
|
||||||
queueStatus.AvgWaitTimeByRole[1] = (uint)queueData.waitTimeHealer;
|
|
||||||
queueStatus.LastNeeded[2] = queueData.dps;
|
|
||||||
queueStatus.AvgWaitTimeByRole[2] = (uint)queueData.waitTimeDps;
|
|
||||||
queueStatus.AvgWaitTimeMe = (uint)queueData.waitTime;
|
|
||||||
|
|
||||||
SendPacket(queueStatus);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public void SendLfgPlayerReward(LfgPlayerRewardData rewardData)
|
public void SendLfgPlayerReward(LfgPlayerRewardData rewardData)
|
||||||
@@ -426,49 +400,32 @@ namespace Game
|
|||||||
Log.outDebug(LogFilter.Lfg, "SMSG_LFG_PLAYER_REWARD {0} rdungeonEntry: {1}, sdungeonEntry: {2}, done: {3}",
|
Log.outDebug(LogFilter.Lfg, "SMSG_LFG_PLAYER_REWARD {0} rdungeonEntry: {1}, sdungeonEntry: {2}, done: {3}",
|
||||||
GetPlayerInfo(), rewardData.rdungeonEntry, rewardData.sdungeonEntry, rewardData.done);
|
GetPlayerInfo(), rewardData.rdungeonEntry, rewardData.sdungeonEntry, rewardData.done);
|
||||||
|
|
||||||
byte itemNum = (byte)(rewardData.quest.GetRewItemsCount() + rewardData.quest.GetRewCurrencyCount());
|
LFGPlayerReward lfgPlayerReward = new LFGPlayerReward();
|
||||||
|
lfgPlayerReward.QueuedSlot = rewardData.rdungeonEntry;
|
||||||
LFGPlayerReward playerReward = new LFGPlayerReward();
|
lfgPlayerReward.ActualSlot = rewardData.sdungeonEntry;
|
||||||
playerReward.ActualSlot = rewardData.rdungeonEntry; // Random Dungeon Finished
|
lfgPlayerReward.RewardMoney = GetPlayer().GetQuestMoneyReward(rewardData.quest);
|
||||||
playerReward.QueuedSlot = rewardData.sdungeonEntry; // Dungeon Finished
|
lfgPlayerReward.AddedXP = GetPlayer().GetQuestXPReward(rewardData.quest);
|
||||||
|
|
||||||
playerReward.RewardMoney = GetPlayer().GetQuestMoneyReward(rewardData.quest);
|
|
||||||
playerReward.AddedXP = GetPlayer().GetQuestXPReward(rewardData.quest);
|
|
||||||
|
|
||||||
for (byte i = 0; i < SharedConst.QuestRewardCurrencyCount; ++i)
|
|
||||||
{
|
|
||||||
var playerRewards = new LFGPlayerReward.LFGPlayerRewards();
|
|
||||||
uint currencyId = rewardData.quest.RewardCurrencyId[i];
|
|
||||||
if (currencyId != 0)
|
|
||||||
{
|
|
||||||
playerRewards.RewardItem = currencyId;
|
|
||||||
playerRewards.RewardItemQuantity = rewardData.quest.RewardCurrencyCount[i];
|
|
||||||
playerRewards.IsCurrency = true;
|
|
||||||
playerReward.Rewards.Add(playerRewards);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
for (byte i = 0; i < SharedConst.QuestRewardItemCount; ++i)
|
for (byte i = 0; i < SharedConst.QuestRewardItemCount; ++i)
|
||||||
{
|
{
|
||||||
var playerRewards = new LFGPlayerReward.LFGPlayerRewards();
|
|
||||||
uint itemId = rewardData.quest.RewardItemId[i];
|
uint itemId = rewardData.quest.RewardItemId[i];
|
||||||
if (itemId != 0)
|
if (itemId != 0)
|
||||||
{
|
lfgPlayerReward.Rewards.Add(new LFGPlayerRewards(itemId, rewardData.quest.RewardItemCount[i], 0, false));
|
||||||
ItemTemplate item = Global.ObjectMgr.GetItemTemplate(itemId);
|
|
||||||
playerRewards.RewardItem = itemId;
|
|
||||||
playerRewards.RewardItemQuantity = rewardData.quest.RewardItemCount[i];
|
|
||||||
playerRewards.IsCurrency = false;
|
|
||||||
playerReward.Rewards.Add(playerRewards);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
SendPacket(playerReward);
|
for (byte i = 0; i < SharedConst.QuestRewardCurrencyCount; ++i)
|
||||||
|
{
|
||||||
|
uint currencyId = rewardData.quest.RewardCurrencyId[i];
|
||||||
|
if (currencyId != 0)
|
||||||
|
lfgPlayerReward.Rewards.Add(new LFGPlayerRewards(currencyId, rewardData.quest.RewardCurrencyCount[i], 0, true));
|
||||||
|
}
|
||||||
|
|
||||||
|
SendPacket(lfgPlayerReward);
|
||||||
}
|
}
|
||||||
|
|
||||||
public void SendLfgBootProposalUpdate(LfgPlayerBoot boot)
|
public void SendLfgBootProposalUpdate(LfgPlayerBoot boot)
|
||||||
{
|
{
|
||||||
ObjectGuid guid = GetPlayer().GetGUID();
|
LfgAnswer playerVote = boot.votes.LookupByKey(GetPlayer().GetGUID());
|
||||||
LfgAnswer playerVote = boot.votes.LookupByKey(guid);
|
|
||||||
byte votesNum = 0;
|
byte votesNum = 0;
|
||||||
byte agreeNum = 0;
|
byte agreeNum = 0;
|
||||||
uint secsleft = (uint)((boot.cancelTime - Time.UnixTime) / 1000);
|
uint secsleft = (uint)((boot.cancelTime - Time.UnixTime) / 1000);
|
||||||
@@ -515,42 +472,34 @@ namespace Game
|
|||||||
dungeonEntry = playerDungeons.First();
|
dungeonEntry = playerDungeons.First();
|
||||||
}
|
}
|
||||||
|
|
||||||
dungeonEntry = Global.LFGMgr.GetLFGDungeonEntry(dungeonEntry);
|
LFGProposalUpdate lfgProposalUpdate = new LFGProposalUpdate();
|
||||||
|
|
||||||
LFGProposalUpdate proposalUpdate = new LFGProposalUpdate();
|
RideTicket ticket = Global.LFGMgr.GetTicket(GetPlayer().GetGUID());
|
||||||
proposalUpdate.Ticket = new RideTicket(playerGuid, Global.LFGMgr.GetQueueId(playerGuid), 3, (uint)Global.LFGMgr.GetQueueJoinTime(playerGuid));
|
if (ticket != null)
|
||||||
|
lfgProposalUpdate.Ticket = ticket;
|
||||||
proposalUpdate.InstanceID = dungeonEntry;
|
lfgProposalUpdate.InstanceID = 0;
|
||||||
proposalUpdate.ProposalID = proposal.id;
|
lfgProposalUpdate.ProposalID = proposal.id;
|
||||||
proposalUpdate.Slot = proposal.dungeonId;
|
lfgProposalUpdate.Slot = Global.LFGMgr.GetLFGDungeonEntry(dungeonEntry);
|
||||||
proposalUpdate.State = (byte)proposal.state;
|
lfgProposalUpdate.State = (byte)proposal.state;
|
||||||
proposalUpdate.CompletedMask = proposal.encounters;
|
lfgProposalUpdate.CompletedMask = proposal.encounters;
|
||||||
|
lfgProposalUpdate.ValidCompletedMask = true;
|
||||||
proposalUpdate.ValidCompletedMask = false;
|
lfgProposalUpdate.ProposalSilent = silent;
|
||||||
proposalUpdate.ProposalSilent = silent;
|
lfgProposalUpdate.IsRequeue = !proposal.isNew;
|
||||||
|
|
||||||
foreach (var pair in proposal.players)
|
foreach (var pair in proposal.players)
|
||||||
{
|
{
|
||||||
var updatePlayer = new LFGProposalUpdate.LFGProposalUpdatePlayer();
|
var proposalPlayer = new LFGProposalUpdatePlayer();
|
||||||
updatePlayer.Roles = (uint)pair.Value.role;
|
proposalPlayer.Roles = (uint)pair.Value.role;
|
||||||
updatePlayer.Me = (pair.Key == playerGuid);
|
proposalPlayer.Me = (pair.Key == playerGuid);
|
||||||
updatePlayer.SameParty = (pair.Value.group == guildGuid);
|
proposalPlayer.MyParty = !pair.Value.group.IsEmpty() && pair.Value.group == proposal.group;
|
||||||
updatePlayer.MyParty = (pair.Value.group == proposal.group);
|
proposalPlayer.SameParty = !pair.Value.group.IsEmpty() && pair.Value.group == guildGuid;
|
||||||
updatePlayer.Responded = (pair.Value.accept != LfgAnswer.Pending);
|
proposalPlayer.Responded = (pair.Value.accept != LfgAnswer.Pending);
|
||||||
updatePlayer.Accepted = (pair.Value.accept == LfgAnswer.Agree);
|
proposalPlayer.Accepted = (pair.Value.accept == LfgAnswer.Agree);
|
||||||
|
|
||||||
proposalUpdate.Players.Add(updatePlayer);
|
lfgProposalUpdate.Players.Add(proposalPlayer);
|
||||||
}
|
}
|
||||||
|
|
||||||
SendPacket(proposalUpdate);
|
SendPacket(lfgProposalUpdate);
|
||||||
}
|
|
||||||
|
|
||||||
public void SendLfgLfrList(bool update)
|
|
||||||
{
|
|
||||||
/* WorldPacket data = new WorldPacket(ServerOpcodes.LfgUpdateSearch);
|
|
||||||
data.WriteUInt8(update); // In Lfg Queue?
|
|
||||||
SendPacket(data);
|
|
||||||
*/
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public void SendLfgDisabled()
|
public void SendLfgDisabled()
|
||||||
@@ -561,17 +510,13 @@ namespace Game
|
|||||||
public void SendLfgOfferContinue(uint dungeonEntry)
|
public void SendLfgOfferContinue(uint dungeonEntry)
|
||||||
{
|
{
|
||||||
Log.outDebug(LogFilter.Lfg, "SMSG_LFG_OFFER_CONTINUE {0} dungeon entry: {1}", GetPlayerInfo(), dungeonEntry);
|
Log.outDebug(LogFilter.Lfg, "SMSG_LFG_OFFER_CONTINUE {0} dungeon entry: {1}", GetPlayerInfo(), dungeonEntry);
|
||||||
LfgOfferContinue lfgOfferContinue = new LfgOfferContinue();
|
SendPacket(new LfgOfferContinue(Global.LFGMgr.GetLFGDungeonEntry(dungeonEntry)));
|
||||||
lfgOfferContinue.Slot = dungeonEntry;
|
|
||||||
SendPacket(lfgOfferContinue);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public void SendLfgTeleportError(LfgTeleportResult err)
|
public void SendLfgTeleportError(LfgTeleportResult err)
|
||||||
{
|
{
|
||||||
Log.outDebug(LogFilter.Lfg, "SMSG_LFG_TELEPORT_DENIED {0} reason: {1}", GetPlayerInfo(), err);
|
Log.outDebug(LogFilter.Lfg, "SMSG_LFG_TELEPORT_DENIED {0} reason: {1}", GetPlayerInfo(), err);
|
||||||
LfgTeleportDenied lfgTeleportDenied = new LfgTeleportDenied();
|
SendPacket(new LfgTeleportDenied(err));
|
||||||
lfgTeleportDenied.Reason = err;
|
|
||||||
SendPacket(lfgTeleportDenied);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
+579
-515
File diff suppressed because it is too large
Load Diff
Reference in New Issue
Block a user