コード例 #1
0
        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));
            }
        }
コード例 #2
0
        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);
        }
コード例 #3
0
        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);
        }
コード例 #4
0
 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);
     }
 }
コード例 #5
0
        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);
        }
コード例 #6
0
        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);
            }
        }
コード例 #7
0
        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);
            }
        }