Modify group invite behavior while creating group to be blizzlike

Port From (https://github.com/TrinityCore/TrinityCore/commit/595a871aa23e2370f70ded1584528679a9dfd390)
This commit is contained in:
hondacrx
2020-07-24 14:48:03 -04:00
parent 9533ebdd98
commit 17ebf751c9
+52 -39
View File
@@ -41,79 +41,83 @@ namespace Game
[WorldPacketHandler(ClientOpcodes.PartyInvite)] [WorldPacketHandler(ClientOpcodes.PartyInvite)]
void HandlePartyInvite(PartyInviteClient packet) void HandlePartyInvite(PartyInviteClient packet)
{ {
Player player = Global.ObjAccessor.FindPlayerByName(packet.TargetName); Player invitingPlayer = GetPlayer();
Player invitedPlayer = Global.ObjAccessor.FindPlayerByName(packet.TargetName);
// no player // no player
if (!player) if (invitedPlayer == null)
{ {
SendPartyResult(PartyOperation.Invite, packet.TargetName, PartyResult.BadPlayerNameS); SendPartyResult(PartyOperation.Invite, packet.TargetName, PartyResult.BadPlayerNameS);
return; return;
} }
// player trying to invite himself (most likely cheating) // player trying to invite himself (most likely cheating)
if (player == GetPlayer()) if (invitedPlayer == invitingPlayer)
{ {
SendPartyResult(PartyOperation.Invite, player.GetName(), PartyResult.BadPlayerNameS); SendPartyResult(PartyOperation.Invite, invitedPlayer.GetName(), PartyResult.BadPlayerNameS);
return; return;
} }
// restrict invite to GMs // restrict invite to GMs
if (!WorldConfig.GetBoolValue(WorldCfg.AllowGmGroup) && !GetPlayer().IsGameMaster() && player.IsGameMaster()) if (!WorldConfig.GetBoolValue(WorldCfg.AllowGmGroup) && !invitingPlayer.IsGameMaster() && invitedPlayer.IsGameMaster())
{ {
SendPartyResult(PartyOperation.Invite, player.GetName(), PartyResult.BadPlayerNameS); SendPartyResult(PartyOperation.Invite, invitedPlayer.GetName(), PartyResult.BadPlayerNameS);
return; return;
} }
// can't group with // can't group with
if (!GetPlayer().IsGameMaster() && !WorldConfig.GetBoolValue(WorldCfg.AllowTwoSideInteractionGroup) && GetPlayer().GetTeam() != player.GetTeam()) if (!invitingPlayer.IsGameMaster() && !WorldConfig.GetBoolValue(WorldCfg.AllowTwoSideInteractionGroup) && invitingPlayer.GetTeam() != invitedPlayer.GetTeam())
{ {
SendPartyResult(PartyOperation.Invite, player.GetName(), PartyResult.PlayerWrongFaction); SendPartyResult(PartyOperation.Invite, invitedPlayer.GetName(), PartyResult.PlayerWrongFaction);
return; return;
} }
if (GetPlayer().GetInstanceId() != 0 && player.GetInstanceId() != 0 && GetPlayer().GetInstanceId() != player.GetInstanceId() && GetPlayer().GetMapId() == player.GetMapId()) if (invitingPlayer.GetInstanceId() != 0 && invitedPlayer.GetInstanceId() != 0 && invitingPlayer.GetInstanceId() != invitedPlayer.GetInstanceId() && invitingPlayer.GetMapId() == invitedPlayer.GetMapId())
{ {
SendPartyResult(PartyOperation.Invite, player.GetName(), PartyResult.TargetNotInInstanceS); SendPartyResult(PartyOperation.Invite, invitedPlayer.GetName(), PartyResult.TargetNotInInstanceS);
return; return;
} }
// just ignore us // just ignore us
if (player.GetInstanceId() != 0 && player.GetDungeonDifficultyID() != GetPlayer().GetDungeonDifficultyID()) if (invitedPlayer.GetInstanceId() != 0 && invitedPlayer.GetDungeonDifficultyID() != invitingPlayer.GetDungeonDifficultyID())
{ {
SendPartyResult(PartyOperation.Invite, player.GetName(), PartyResult.IgnoringYouS); SendPartyResult(PartyOperation.Invite, invitedPlayer.GetName(), PartyResult.IgnoringYouS);
return; return;
} }
if (player.GetSocial().HasIgnore(GetPlayer().GetGUID())) if (invitedPlayer.GetSocial().HasIgnore(invitingPlayer.GetGUID()))
{ {
SendPartyResult(PartyOperation.Invite, player.GetName(), PartyResult.IgnoringYouS); SendPartyResult(PartyOperation.Invite, invitedPlayer.GetName(), PartyResult.IgnoringYouS);
return; return;
} }
if (!player.GetSocial().HasFriend(GetPlayer().GetGUID()) && GetPlayer().GetLevel() < WorldConfig.GetIntValue(WorldCfg.PartyLevelReq)) if (!invitedPlayer.GetSocial().HasFriend(invitingPlayer.GetGUID()) && invitingPlayer.GetLevel() < WorldConfig.GetIntValue(WorldCfg.PartyLevelReq))
{ {
SendPartyResult(PartyOperation.Invite, player.GetName(), PartyResult.InviteRestricted); SendPartyResult(PartyOperation.Invite, invitedPlayer.GetName(), PartyResult.InviteRestricted);
return; return;
} }
Group group = GetPlayer().GetGroup(); Group group = invitingPlayer.GetGroup();
if (group && group.IsBGGroup()) if (group != null && group.IsBGGroup())
group = GetPlayer().GetOriginalGroup(); group = invitingPlayer.GetOriginalGroup();
Group group2 = player.GetGroup(); if (group == null)
if (group2 && group2.IsBGGroup()) group = invitingPlayer.GetGroupInvite();
group2 = player.GetOriginalGroup();
Group group2 = invitedPlayer.GetGroup();
if (group2 != null && group2.IsBGGroup())
group2 = invitedPlayer.GetOriginalGroup();
PartyInvite partyInvite; PartyInvite partyInvite;
// player already in another group or invited // player already in another group or invited
if (group2 || player.GetGroupInvite()) if (group2 || invitedPlayer.GetGroupInvite())
{ {
SendPartyResult(PartyOperation.Invite, player.GetName(), PartyResult.AlreadyInGroupS); SendPartyResult(PartyOperation.Invite, invitedPlayer.GetName(), PartyResult.AlreadyInGroupS);
if (group2) if (group2)
{ {
// tell the player that they were invited but it failed as they were already in a group // tell the player that they were invited but it failed as they were already in a group
partyInvite = new PartyInvite(); partyInvite = new PartyInvite();
partyInvite.Initialize(GetPlayer(), packet.ProposedRoles, false); partyInvite.Initialize(invitingPlayer, packet.ProposedRoles, false);
player.SendPacket(partyInvite); invitedPlayer.SendPacket(partyInvite);
} }
return; return;
@@ -122,9 +126,10 @@ namespace Game
if (group) if (group)
{ {
// not have permissions for invite // not have permissions for invite
if (!group.IsLeader(GetPlayer().GetGUID()) && !group.IsAssistant(GetPlayer().GetGUID())) if (!group.IsLeader(invitingPlayer.GetGUID()) && !group.IsAssistant(invitingPlayer.GetGUID()))
{ {
SendPartyResult(PartyOperation.Invite, "", PartyResult.NotLeader); if (group.IsCreated())
SendPartyResult(PartyOperation.Invite, "", PartyResult.NotLeader);
return; return;
} }
// not have place // not have place
@@ -138,14 +143,14 @@ namespace Game
// ok, but group not exist, start a new group // ok, but group not exist, start a new group
// but don't create and save the group to the DB until // but don't create and save the group to the DB until
// at least one person joins // at least one person joins
if (!group) if (group == null)
{ {
group = new Group(); group = new Group();
// new group: if can't add then delete // new group: if can't add then delete
if (!group.AddLeaderInvite(GetPlayer())) if (!group.AddLeaderInvite(invitingPlayer))
return; return;
if (!group.AddInvite(player)) if (!group.AddInvite(invitedPlayer))
{ {
group.RemoveAllInvites(); group.RemoveAllInvites();
return; return;
@@ -154,15 +159,15 @@ namespace Game
else else
{ {
// already existed group: if can't add then just leave // already existed group: if can't add then just leave
if (!group.AddInvite(player)) if (!group.AddInvite(invitedPlayer))
return; return;
} }
partyInvite = new PartyInvite(); partyInvite = new PartyInvite();
partyInvite.Initialize(GetPlayer(), packet.ProposedRoles, true); partyInvite.Initialize(invitingPlayer, packet.ProposedRoles, true);
player.SendPacket(partyInvite); invitedPlayer.SendPacket(partyInvite);
SendPartyResult(PartyOperation.Invite, player.GetName(), PartyResult.Ok); SendPartyResult(PartyOperation.Invite, invitedPlayer.GetName(), PartyResult.Ok);
} }
[WorldPacketHandler(ClientOpcodes.PartyInviteResponse)] [WorldPacketHandler(ClientOpcodes.PartyInviteResponse)]
@@ -315,7 +320,8 @@ namespace Game
void HandleLeaveGroup(LeaveGroup packet) void HandleLeaveGroup(LeaveGroup packet)
{ {
Group grp = GetPlayer().GetGroup(); Group grp = GetPlayer().GetGroup();
if (!grp) Group grpInvite = GetPlayer().GetGroupInvite();
if (grp == null && grpInvite == null)
return; return;
if (GetPlayer().InBattleground()) if (GetPlayer().InBattleground())
@@ -328,9 +334,16 @@ namespace Game
/********************/ /********************/
// everything's fine, do it // everything's fine, do it
SendPartyResult(PartyOperation.Leave, GetPlayer().GetName(), PartyResult.Ok); if (grp != null)
{
GetPlayer().RemoveFromGroup(RemoveMethod.Leave); SendPartyResult(PartyOperation.Leave, GetPlayer().GetName(), PartyResult.Ok);
GetPlayer().RemoveFromGroup(RemoveMethod.Leave);
}
else if (grpInvite != null && grpInvite.GetLeaderGUID() == GetPlayer().GetGUID())
{ // pending group creation being cancelled
SendPartyResult(PartyOperation.Leave, GetPlayer().GetName(), PartyResult.Ok);
grpInvite.Disband();
}
} }
[WorldPacketHandler(ClientOpcodes.SetLootMethod)] [WorldPacketHandler(ClientOpcodes.SetLootMethod)]