コード例 #1
0
ファイル: PartySystem.cs プロジェクト: MarkWilds/Rhisis
        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);
                }
            }
        }
コード例 #2
0
ファイル: PartySystem.cs プロジェクト: MarkWilds/Rhisis
        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);
            }
        }