public void Stop() { if (!this.IsRunning) { return; } this._notificationsAboutStart = 3; this.IsStarted = false; WCell.RealmServer.Global.World.Broadcast(string.Format( "War in {0} has ended. Light scores {1} vs {2} dark scores.", (object)this.Town, (object)this.LightScores, (object)this.DarkScores)); this.IsRunning = false; this.SetNextWarParametrs(); lock (this.JoinLock) { foreach (Character character in this.LightScores > this.DarkScores ? this.LightTeam.Values : this.DarkTeam.Values) { if (this.MvpCharacter == null) { this.MvpCharacter = character; } else if ((int)this.MvpCharacter.BattlegroundActPoints < (int)character.BattlegroundActPoints) { this.MvpCharacter = character; } } Asda2BattlegroundHandler.SendWiningFactionInfoResponse(this.Town, this.WiningFactionId, this.MvpCharacter == null ? "[No character]" : this.MvpCharacter.Name); if (this.MvpCharacter != null) { ServerApp <WCell.RealmServer.RealmServer> .IOQueue.AddMessage((Action)(() => { BattlegroundResultRecord battlegroundResultRecord = new BattlegroundResultRecord(this.Town, this.MvpCharacter.Name, this.MvpCharacter.EntityId.Low, this.LightScores, this.DarkScores); battlegroundResultRecord.CreateLater(); this.CurrentWarResultRecordGuid = battlegroundResultRecord.Guid; Asda2BattlegroundMgr.ProcessBattlegroundResultRecord(battlegroundResultRecord); })); } foreach (Character character in this.LightTeam.Values) { this.ProcessEndWar(character); } foreach (Character character in this.DarkTeam.Values) { this.ProcessEndWar(character); } foreach (Asda2WarPoint point in this.Points) { point.Status = Asda2WarPointStatus.NotOwned; point.OwnedFaction = (short)-1; Asda2BattlegroundHandler.SendUpdatePointInfoResponse((IRealmClient)null, point); } WCell.RealmServer.Global.World.TaskQueue.CallDelayed(60000, new Action(this.KickAll)); } }
private void SetNextWarParametrs() { Asda2BattlegroundType type; this.StartTime = Asda2BattlegroundMgr.GetNextWarTime(this.Town, out type, DateTime.Now); this.WarType = type; this.EndTime = this.StartTime.AddMinutes(this.WarType == Asda2BattlegroundType.Occupation ? (double)Asda2BattlegroundMgr.OccupationDurationMins : (double)Asda2BattlegroundMgr.DeathMatchDurationMins); }
private void SetNextWarParametrs() { var nextStartTimeEntry = Asda2BattlegroundMgr.GetNextStartTime(Town); if (nextStartTimeEntry == null) { World.BroadcastMsg("ÍÑÈ ÇáÝÑÞ", "ÍÏË ÎØà Ýí äÙÇã ÇáÍÑÈ, ÇáÑÌÇÁ ÅÚÇÏÉ ÊÔÛíá ÇáÓíÑÝÑ.", Color.Red); return; } WarType = nextStartTimeEntry.Type; StartTime = nextStartTimeEntry.Time; EndTime = StartTime.AddMinutes(Asda2BattlegroundMgr.WarLengthMinutes); }
public static void InitBattlegrounds() { Asda2BattlegroundMgr.AllBattleGrounds.Add(Asda2BattlegroundTown.Alpia, new List <Asda2Battleground>()); Asda2BattlegroundMgr.AllBattleGrounds.Add(Asda2BattlegroundTown.Silaris, new List <Asda2Battleground>()); Asda2BattlegroundMgr.AllBattleGrounds.Add(Asda2BattlegroundTown.Flamio, new List <Asda2Battleground>()); Asda2BattlegroundMgr.AllBattleGrounds.Add(Asda2BattlegroundTown.Aquaton, new List <Asda2Battleground>()); Asda2BattlegroundMgr.AddBattleGround(Asda2BattlegroundTown.Alpia); Asda2BattlegroundMgr.AddBattleGround(Asda2BattlegroundTown.Silaris); Asda2BattlegroundMgr.AddBattleGround(Asda2BattlegroundTown.Flamio); Asda2BattlegroundMgr.AddBattleGround(Asda2BattlegroundTown.Aquaton); foreach (BattlegroundResultRecord battlegroundResultRecord in ActiveRecordBase <BattlegroundResultRecord> .FindAll()) { Asda2BattlegroundMgr.ProcessBattlegroundResultRecord(battlegroundResultRecord); } }
public static void AddBattleGround(Asda2BattlegroundTown town) { Asda2Battleground asda2Battleground = new Asda2Battleground() { Town = town }; switch (town) { case Asda2BattlegroundTown.Alpia: asda2Battleground.MinEntryLevel = (byte)10; asda2Battleground.MaxEntryLevel = (byte)29; break; case Asda2BattlegroundTown.Silaris: asda2Battleground.MinEntryLevel = (byte)30; asda2Battleground.MaxEntryLevel = (byte)49; break; case Asda2BattlegroundTown.Flamio: asda2Battleground.MinEntryLevel = (byte)50; asda2Battleground.MaxEntryLevel = (byte)69; break; case Asda2BattlegroundTown.Aquaton: asda2Battleground.MinEntryLevel = (byte)70; asda2Battleground.MaxEntryLevel = (byte)90; break; } Asda2BattlegroundType type; asda2Battleground.StartTime = Asda2BattlegroundMgr.GetNextWarTime(town, out type, DateTime.Now); asda2Battleground.WarType = type; asda2Battleground.EndTime = asda2Battleground.StartTime.AddMinutes(type == Asda2BattlegroundType.Occupation ? (double)Asda2BattlegroundMgr.OccupationDurationMins : (double)Asda2BattlegroundMgr.DeathMatchDurationMins); asda2Battleground.Points.Add(new Asda2WarPoint() { Id = (short)0, X = (short)258, Y = (short)165, BattleGround = asda2Battleground }); asda2Battleground.Points.Add(new Asda2WarPoint() { Id = (short)1, X = (short)211, Y = (short)218, BattleGround = asda2Battleground }); asda2Battleground.Points.Add(new Asda2WarPoint() { Id = (short)2, X = (short)308, Y = (short)221, BattleGround = asda2Battleground }); asda2Battleground.Points.Add(new Asda2WarPoint() { Id = (short)3, X = (short)260, Y = (short)250, BattleGround = asda2Battleground }); asda2Battleground.Points.Add(new Asda2WarPoint() { Id = (short)4, X = (short)209, Y = (short)284, BattleGround = asda2Battleground }); asda2Battleground.Points.Add(new Asda2WarPoint() { Id = (short)5, X = (short)307, Y = (short)285, BattleGround = asda2Battleground }); asda2Battleground.Points.Add(new Asda2WarPoint() { Id = (short)6, X = (short)258, Y = (short)340, BattleGround = asda2Battleground }); foreach (Asda2WarPoint point in asda2Battleground.Points) { point.OwnedFaction = (short)-1; World.TaskQueue.RegisterUpdatableLater((IUpdatable)point); } Asda2BattlegroundMgr.AllBattleGrounds[town].Add(asda2Battleground); World.TaskQueue.RegisterUpdatableLater((IUpdatable)asda2Battleground); }
public static DateTime GetNextWarTime(Asda2BattlegroundTown town, out Asda2BattlegroundType type, DateTime now) { type = Asda2BattlegroundType.Deathmatch; switch (now.DayOfWeek) { case DayOfWeek.Sunday: DateTime dateTime1 = new DateTime(now.Year, now.Month, now.Day, (int)Asda2BattlegroundMgr.WeekendDeathMatchHour, 0, 0).AddMinutes( (double)((int)(byte)town * (int)Asda2BattlegroundMgr.BeetweenWarsMinutes)); if (now < dateTime1) { return(dateTime1); } DateTime dateTime2 = new DateTime(now.Year, now.Month, now.Day, (int)Asda2BattlegroundMgr.EveryDayDeathMatchHour, 0, 0).AddMinutes( (double)((int)(byte)town * (int)Asda2BattlegroundMgr.BeetweenWarsMinutes)); if (now < dateTime2) { return(dateTime2); } DateTime dateTime3 = new DateTime(now.Year, now.Month, now.Day, (int)Asda2BattlegroundMgr.WeekendOcupationHour, 0, 0).AddMinutes( (double)((int)(byte)town * (int)Asda2BattlegroundMgr.BeetweenWarsMinutes)); if (now < dateTime3) { type = Asda2BattlegroundType.Occupation; return(dateTime3); } DateTime now1 = new DateTime(now.Year, now.Month, now.Day, (int)Asda2BattlegroundMgr.EveryDayOcupationHour, 0, 0).AddMinutes( (double)((int)(byte)town * (int)Asda2BattlegroundMgr.BeetweenWarsMinutes)); if (now < now1) { type = Asda2BattlegroundType.Occupation; return(now1); } now1 = now1.AddDays(1.0).Subtract(new TimeSpan(now1.Hour, now1.Minute, now1.Millisecond)) .AddMinutes(1.0); return(Asda2BattlegroundMgr.GetNextWarTime(town, out type, now1)); case DayOfWeek.Monday: DateTime dateTime4 = new DateTime(now.Year, now.Month, now.Day, (int)Asda2BattlegroundMgr.EveryDayDeathMatchHour, 0, 0).AddMinutes( (double)((int)(byte)town * (int)Asda2BattlegroundMgr.BeetweenWarsMinutes)); if (now < dateTime4) { return(dateTime4); } DateTime now2 = new DateTime(now.Year, now.Month, now.Day, (int)Asda2BattlegroundMgr.EveryDayOcupationHour, 0, 0).AddMinutes( (double)((int)(byte)town * (int)Asda2BattlegroundMgr.BeetweenWarsMinutes)); if (now < now2) { type = Asda2BattlegroundType.Occupation; return(now2); } now2 = now2.AddDays(1.0).Subtract(new TimeSpan(now2.Hour, now2.Minute, now2.Millisecond)) .AddMinutes(1.0); return(Asda2BattlegroundMgr.GetNextWarTime(town, out type, now2)); case DayOfWeek.Tuesday: DateTime dateTime5 = new DateTime(now.Year, now.Month, now.Day, (int)Asda2BattlegroundMgr.EveryDayDeathMatchHour, 0, 0).AddMinutes( (double)((int)(byte)town * (int)Asda2BattlegroundMgr.BeetweenWarsMinutes)); if (now < dateTime5) { return(dateTime5); } DateTime now3 = new DateTime(now.Year, now.Month, now.Day, (int)Asda2BattlegroundMgr.EveryDayOcupationHour, 0, 0).AddMinutes( (double)((int)(byte)town * (int)Asda2BattlegroundMgr.BeetweenWarsMinutes)); if (now < now3) { type = Asda2BattlegroundType.Occupation; return(now3); } now3 = now3.AddDays(1.0).Subtract(new TimeSpan(now3.Hour, now3.Minute, now3.Millisecond)) .AddMinutes(1.0); return(Asda2BattlegroundMgr.GetNextWarTime(town, out type, now3)); case DayOfWeek.Wednesday: DateTime dateTime6 = new DateTime(now.Year, now.Month, now.Day, (int)Asda2BattlegroundMgr.EveryDayDeathMatchHour, 0, 0).AddMinutes( (double)((int)(byte)town * (int)Asda2BattlegroundMgr.BeetweenWarsMinutes)); if (now < dateTime6) { return(dateTime6); } DateTime now4 = new DateTime(now.Year, now.Month, now.Day, (int)Asda2BattlegroundMgr.EveryDayOcupationHour, 0, 0).AddMinutes( (double)((int)(byte)town * (int)Asda2BattlegroundMgr.BeetweenWarsMinutes)); if (now < now4) { type = Asda2BattlegroundType.Occupation; return(now4); } now4 = now4.AddDays(1.0).Subtract(new TimeSpan(now4.Hour, now4.Minute, now4.Millisecond)) .AddMinutes(1.0); return(Asda2BattlegroundMgr.GetNextWarTime(town, out type, now4)); case DayOfWeek.Thursday: DateTime dateTime7 = new DateTime(now.Year, now.Month, now.Day, (int)Asda2BattlegroundMgr.EveryDayDeathMatchHour, 0, 0).AddMinutes( (double)((int)(byte)town * (int)Asda2BattlegroundMgr.BeetweenWarsMinutes)); if (now < dateTime7) { return(dateTime7); } DateTime now5 = new DateTime(now.Year, now.Month, now.Day, (int)Asda2BattlegroundMgr.EveryDayOcupationHour, 0, 0).AddMinutes( (double)((int)(byte)town * (int)Asda2BattlegroundMgr.BeetweenWarsMinutes)); if (now < now5) { type = Asda2BattlegroundType.Occupation; return(now5); } now5 = now5.AddDays(1.0).Subtract(new TimeSpan(now5.Hour, now5.Minute, now5.Millisecond)) .AddMinutes(1.0); return(Asda2BattlegroundMgr.GetNextWarTime(town, out type, now5)); case DayOfWeek.Friday: DateTime dateTime8 = new DateTime(now.Year, now.Month, now.Day, (int)Asda2BattlegroundMgr.EveryDayDeathMatchHour, 0, 0).AddMinutes( (double)((int)(byte)town * (int)Asda2BattlegroundMgr.BeetweenWarsMinutes)); if (now < dateTime8) { return(dateTime8); } DateTime now6 = new DateTime(now.Year, now.Month, now.Day, (int)Asda2BattlegroundMgr.EveryDayOcupationHour, 0, 0).AddMinutes( (double)((int)(byte)town * (int)Asda2BattlegroundMgr.BeetweenWarsMinutes)); if (now < now6) { type = Asda2BattlegroundType.Occupation; return(now6); } now6 = now6.AddDays(1.0).Subtract(new TimeSpan(now6.Hour, now6.Minute, now6.Millisecond)) .AddMinutes(1.0); return(Asda2BattlegroundMgr.GetNextWarTime(town, out type, now6)); case DayOfWeek.Saturday: DateTime dateTime9 = new DateTime(now.Year, now.Month, now.Day, (int)Asda2BattlegroundMgr.EveryDayDeathMatchHour, 0, 0).AddMinutes( (double)((int)(byte)town * (int)Asda2BattlegroundMgr.BeetweenWarsMinutes)); if (now < dateTime9) { return(dateTime9); } DateTime now7 = new DateTime(now.Year, now.Month, now.Day, (int)Asda2BattlegroundMgr.EveryDayOcupationHour, 0, 0).AddMinutes( (double)((int)(byte)town * (int)Asda2BattlegroundMgr.BeetweenWarsMinutes)); if (now < now7) { type = Asda2BattlegroundType.Occupation; return(now7); } now7 = now7.AddDays(1.0).Subtract(new TimeSpan(now7.Hour, now7.Minute, now7.Millisecond)) .AddMinutes(1.0); return(Asda2BattlegroundMgr.GetNextWarTime(town, out type, now7)); default: return(DateTime.MaxValue); } }
public void Stop() { if (!IsRunning) { return; } _notificationsAboutStart = 3; IsStarted = false; World.Broadcast(string.Format("ÇáÍÑÈ Ýí {0} ÇäÊåÊ.. äÞÇØ ÇáäæÑ {1} ÖÏ {2} äÞÇØ ÇáÙáÇã", Town, LightScores, DarkScores)); IsRunning = false; SetNextWarParametrs(); //Notify players war ended. lock (JoinLock) { //find mvp foreach (var character in LightScores > DarkScores ? LightTeam.Values : DarkTeam.Values) { if (MvpCharacter == null) { MvpCharacter = character; continue; } if (MvpCharacter.BattlegroundActPoints < character.BattlegroundActPoints) { MvpCharacter = character; } } Asda2BattlegroundHandler.SendWiningFactionInfoResponse(Town, WiningFactionId, MvpCharacter == null ? "[áÇ ÃÍÏ]" : MvpCharacter.Name); if (MvpCharacter != null) { //create db records about war RealmServer.IOQueue.AddMessage(() => { var warResRec = new BattlegroundResultRecord(Town, MvpCharacter.Name, MvpCharacter.EntityId.Low, LightScores, DarkScores); warResRec.CreateLater(); CurrentWarResultRecordGuid = warResRec.Guid; Asda2BattlegroundMgr.ProcessBattlegroundResultRecord(warResRec); }); } foreach (var character in LightTeam.Values) { ProcessEndWar(character); if (WiningFactionId == 0) { Asda2TitleChecker.OnWinWar(character); } else { Asda2TitleChecker.OnLoseWar(character); } } foreach (var character in DarkTeam.Values) { ProcessEndWar(character); if (WiningFactionId == 1) { Asda2TitleChecker.OnWinWar(character); } else { Asda2TitleChecker.OnLoseWar(character); } } foreach (var asda2WarPoint in Points) { asda2WarPoint.Status = Asda2WarPointStatus.NotOwned; asda2WarPoint.OwnedFaction = -1; Asda2BattlegroundHandler.SendUpdatePointInfoResponse(null, asda2WarPoint); } World.TaskQueue.CallDelayed(60000, KickAll); } }