コード例 #1
0
ファイル: TeamManager.cs プロジェクト: lovejing1990/yuanma
        public void AskRiskyTeam(Character unit, uint teamId, uint targetId, RiskyAction riskyAction)
        {
            var activeTeam = GetActiveTeam(teamId);

            if (activeTeam == null)
            {
                return;
            }
            var isDisband = false;

            if (riskyAction == RiskyAction.Kick && activeTeam.OwnerId != unit.Id ||
                riskyAction == RiskyAction.Leave && unit.Id != targetId)
            {
                return;
            }
            if ((riskyAction == RiskyAction.Leave || riskyAction == RiskyAction.Kick) &&
                activeTeam.RemoveMember(targetId))
            {
                if (targetId == activeTeam.OwnerId)
                {
                    var newOwner = activeTeam.GetNewOwner();
                    if (newOwner != 0)
                    {
                        activeTeam.OwnerId = newOwner;
                        activeTeam.BroadcastPacket(new SCTeamOwnerChangedPacket(teamId, newOwner));
                    }
                    else
                    {
                        isDisband = true;
                    }
                }

                activeTeam.BroadcastPacket(new SCTeamMemberLeavedPacket(teamId, targetId,
                                                                        riskyAction == RiskyAction.Kick));
                var target = WorldManager.Instance.GetCharacterById(targetId);
                if (target != null)
                {
                    target.InParty = false;
                    target.SendPacket(new SCLeavedTeamPacket(teamId, riskyAction == RiskyAction.Kick, false));
                }
            }

            // TODO - NEED TO FIND WHY NEED THIS
            activeTeam.BroadcastPacket(new SCTeamAckRiskyActionPacket(teamId, targetId, riskyAction, 0, 0));

            if (isDisband || riskyAction == RiskyAction.Dismiss || activeTeam.MembersCount() <= 1)
            {
                activeTeam.BroadcastPacket(new SCTeamDismissedPacket(teamId));
                foreach (var member in activeTeam.Members)
                {
                    if (member?.Character != null && member.Character.IsOnline)
                    {
                        member.Character.SendPacket(new SCLeavedTeamPacket(teamId, false, true));
                        member.Character.InParty = false;
                    }
                }

                _activeTeams.Remove(teamId);
            }
        }
コード例 #2
0
 public SCTeamAckRiskyActionPacket(uint teamId, uint id, RiskyAction ra, int w, short errorMessage) : base(SCOffsets.SCTeamAckRiskyActionPacket, 5)
 {
     _teamId       = teamId;
     _id           = id;
     _ra           = ra;
     _w            = w;
     _errorMessage = errorMessage;
 }