public override void FightEnd(FightTeam winners, FightTeam loosers) { if (State == FightState.STARTING) Map.Send(FormatFlagDestroy()); StringBuilder builder = new StringBuilder("GE"); builder.Append(EndTime).Append('|'); builder.Append(ID).Append('|'); builder.Append(Type == FightType.AGRESSION ? 1 : 0); foreach (Fighter fighter in GetFighters()) { builder.Append('|').Append(fighter.Team == winners ? 2 : 0).Append(';'); builder.Append(fighter.ID).Append(';'); builder.Append(fighter.Name).Append(';'); builder.Append(fighter.Level).Append(';'); builder.Append(fighter.Dead ? 1 : 0).Append(';'); if (Utilities.Config.GetBoolElement("EnableExpInPvPFight") && (fighter.Team == winners)) { var exp = (int)(GetFighters().ToList().FindAll(x => x.Team != fighter.Team).Count * Utilities.Formulas.ExpPvp(fighter.Character.Level, fighter.Team.GetFighters().Sum (x => x.Level), GetFighters().ToList().FindAll(x => x.Team != fighter.Team).Sum(x => x.Level))); fighter.Character.AddExp(exp); builder.Append(Entities.Requests.LevelsRequests.ReturnLevel(fighter.Character.Level).Character).Append(";").Append(fighter.Character.Exp).Append(";"); builder.Append((fighter.Character.Level != Entities.Requests.LevelsRequests.MaxLevel() ? Entities.Requests.LevelsRequests.ReturnLevel(fighter.Character.Level + 1).Character.ToString() : "-1")).Append(";"); builder.Append(exp).Append(";;;;"); } else builder.Append(";;;;;;;"); } Send(builder.ToString()); State = FightState.FINISHED; foreach (Fighter fighter in GetFighters().OfType<CharacterFighter>()) { if (fighter.Fight == this) { fighter.Buffs.Debuff(); fighter.Character.State.InFight = false; fighter.Character.Fight = null; fighter.Character.Fighter = null; } } KickSpectator(true); Map.RemoveFight(this); Map.Send(Map.FormatFightCount()); }
public Fight(FightType type, Map map) { myID = map.NextFightID(); myType = type; myState = FightState.STARTING; myMap = map; myTimer = new Timer(new TimerCallback(TimerLoop), null, 1000, 1000); Dictionary<int, int[]> places = GeneratePlaces(); myTeam1 = new FightTeam(0, places[0]); myTeam2 = new FightTeam(1, places[1]); }
private void KickNoParty(FightTeam team) { if (myState != FightState.STARTING) return; foreach (Fighter fighter in team.GetFighters()) if (!team.CanJoin(fighter.Character)) PlayerLeave(fighter); }
public FightTeam GetEnnemyTeam(FightTeam team) { return (team == myTeam1 ? myTeam2 : myTeam1); }
public string FormatFlagOption(ToggleType type, FightTeam team) { return new StringBuilder("Go").Append(team.IsToggle(type) ? '+' : '-').Append(type == ToggleType.LOCK ? 'A' : (char)type).Append(team.ID).ToString(); }
public abstract void FightEnd(FightTeam winners, FightTeam loosers);
public bool CanJoin(Character player, FightTeam team) { return myState == FightState.STARTING && team.CanJoin(player); }