public static void HandleGameFightSpectatePlayerRequestMessage(WorldClient client, GameFightSpectatePlayerRequestMessage message) { if (client.Character.IsFighting()) { return; } var player = World.Instance.GetCharacter((int)message.playerId); if (player == null) { return; } if (!client.Character.FriendsBook.IsFriend(player.Account.Id) && !client.Character.Guild.Members.Any(x => x.Character?.Id == player.Id)) { return; } if (!player.IsFighting()) { SendChallengeFightJoinRefusedMessage(client, client.Character, FighterRefusedReasonEnum.TOO_LATE); return; } var fight = FightManager.Instance.GetFight(player.Fight.Id); if (fight == null) { SendChallengeFightJoinRefusedMessage(client, client.Character, FighterRefusedReasonEnum.TOO_LATE); return; } if (!fight.IsStarted) { return; } if (!fight.CanSpectatorJoin(client.Character) || client.Character.IsInFight()) { return; } ContextRoleplayHandler.SendCurrentMapMessage(client, fight.Map.Id); fight.AddSpectator(client.Character.CreateSpectator(fight)); }
public static void HandleGameFightJoinRequestMessage(WorldClient client, GameFightJoinRequestMessage message) { if (client.Character.IsFighting()) { return; } var fight = FightManager.Instance.GetFight(message.fightId); if (fight == null) { SendChallengeFightJoinRefusedMessage(client, client.Character, FighterRefusedReasonEnum.TOO_LATE); return; } if (client.Character.Map.Id != ArenaManager.KolizeumMapId && fight.Map != client.Character.Map) { SendChallengeFightJoinRefusedMessage(client, client.Character, FighterRefusedReasonEnum.WRONG_MAP); return; } if (message.fighterId == 0 && fight.CanSpectatorJoin(client.Character) && !client.Character.IsInFight()) { if (client.Character.Map.Id == ArenaManager.KolizeumMapId) { ContextRoleplayHandler.SendCurrentMapMessage(client, fight.Map.Id); } fight.AddSpectator(client.Character.CreateSpectator(fight)); } if (fight.IsStarted) { return; } FightTeam team; if (fight.ChallengersTeam.Leader.Id == message.fighterId) { team = fight.ChallengersTeam; } else if (fight.DefendersTeam.Leader.Id == message.fighterId) { team = fight.DefendersTeam; } else { SendChallengeFightJoinRefusedMessage(client, client.Character, FighterRefusedReasonEnum.WRONG_MAP); return; } FighterRefusedReasonEnum error; if ((error = team.CanJoin(client.Character)) != FighterRefusedReasonEnum.FIGHTER_ACCEPTED) { SendChallengeFightJoinRefusedMessage(client, client.Character, error); } else { team.AddFighter(client.Character.CreateFighter(team)); } }