private void OnAddPartyMember(IPlayerEntity player, PartyAddMemberEventArgs e) { var partyManager = DependencyContainer.Instance.Resolve <PartyManager>(); var worldServer = DependencyContainer.Instance.Resolve <IWorldServer>(); var leader = worldServer.GetPlayerEntityByCharacterId(e.LeaderId); var member = worldServer.GetPlayerEntityByCharacterId(e.MemberId); if (leader == null || member == null) { return; } if (member.Party.IsInParty) { Logger.LogWarning($"Player {member.Object.Name} is already in a party."); return; } if (leader.Party.IsInParty) { // Add member to leaders party if (leader.Party.Party.IsFull) { // Send SNAPSHOTTYPE_ERRORPARTY with ERROR_FULLPARTY (201) return; } leader.Party.Party.AddMember(member); foreach (var partyMember in leader.Party.Party.Members) { WorldPacketFactory.SendAddPartyMember(partyMember, leader.Party.Party, member.PlayerData.Id, leader.Object.Name, member.Object.Name); } } else { // Create Party with leader and member var party = partyManager.CreateParty(); party.AddMember(leader, true); party.AddMember(member); foreach (var partyMember in party.Members) { WorldPacketFactory.SendAddPartyMember(partyMember, party, member.PlayerData.Id, leader.Object.Name, member.Object.Name); } } }
private void OnRemovePartyMember(IPlayerEntity player, PartyRemoveMemberEventArgs e) { var partyManager = DependencyContainer.Instance.Resolve <PartyManager>(); var worldServer = DependencyContainer.Instance.Resolve <IWorldServer>(); var member = worldServer.GetPlayerEntityByCharacterId(e.MemberId); if (member == null || !member.Party.IsInParty) { return; } var party = partyManager.GetPartyById(member.Party.Party.Id); if (party == null) { return; } if (e.LeaderId != e.MemberId && party.PartyLeaderId != e.LeaderId) { return; } if (party.RemoveMember(member)) { if (party.Members.Count < 2) { WorldPacketFactory.SendAddPartyMember(party.PartyLeader, null, 0, party.PartyLeader.Object.Name, member.Object.Name); party.PartyLeader.Party.Party = null; partyManager.RemoveParty(party); } else { foreach (var partyMember in party.Members) { WorldPacketFactory.SendAddPartyMember(partyMember, party, member.PlayerData.Id, party.PartyLeader.Object.Name, member.Object.Name); } } WorldPacketFactory.SendAddPartyMember(member, null, member.PlayerData.Id, party.PartyLeader.Object.Name, member.Object.Name); } }