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); } }
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; }