Ejemplo n.º 1
0
        public void onResourceStart()
        {
            try
            {
                var result = MySQL.QueryRead("SELECT * FROM gangspoints");
                if (result == null || result.Rows.Count == 0)
                {
                    return;
                }
                foreach (DataRow Row in result.Rows)
                {
                    var data = new GangPoint();
                    data.ID        = Convert.ToInt32(Row["id"]);
                    data.GangOwner = Convert.ToInt32(Row["gangid"]);
                    data.IsCapture = false;

                    if (data.ID >= gangZones.Count)
                    {
                        break;
                    }
                    gangPoints.Add(data.ID, data);
                }
                foreach (var gangpoint in gangPoints.Values)
                {
                    var colShape = NAPI.ColShape.Create2DColShape(gangZones[gangpoint.ID].X, gangZones[gangpoint.ID].Y, 100, 100, 0);
                    colShape.OnEntityEnterColShape += onPlayerEnterGangPoint;
                    colShape.OnEntityExitColShape  += onPlayerExitGangPoint;
                    colShape.SetData("ID", gangpoint.ID);
                }
            }
            catch (Exception e)
            {
                Log.Write("EXCEPTION AT\"FRACTIONS_CAPTURE\":\n" + e.ToString(), nLog.Type.Error);
            }
        }
Ejemplo n.º 2
0
        private static void onPlayerExitGangPoint(ColShape shape, Client player)
        {
            try
            {
                if (!Main.Players.ContainsKey(player))
                {
                    return;
                }
                if (Main.Players[player].FractionID >= 1 && Main.Players[player].FractionID <= 5)
                {
                    //Log.Write($"Gangsta {player.Name} exited gangPoint");
                    if (shape.GetData("ID") == player.GetData("GANGPOINT"))
                    {
                        player.SetData("GANGPOINT", -1);
                    }

                    GangPoint region = gangPoints[(int)shape.GetData("ID")];
                    if (region.IsCapture && (Main.Players[player].FractionID == attackersFracID || Main.Players[player].FractionID == region.GangOwner))
                    {
                        Trigger.ClientEvent(player, "captureHud", false);
                    }
                }
            }
            catch (Exception ex) { Log.Write("onPlayerExitGangPoint: " + ex.Message, nLog.Type.Error); }
        }
Ejemplo n.º 3
0
        private static void endCapture(GangPoint region, int defenders, int attackers)
        {
            //Main.StopT(captureTimer, "endCapture_gangcapture");
            Timers.Stop(captureTimer);
            NAPI.Task.Run(() => Main.ClientEventToAll("captureHud", false));
            protectDate[region.GangOwner] = DateTime.Now.AddMinutes(20);
            protectDate[attackersFracID]  = DateTime.Now.AddMinutes(20);
            if (attackers <= defenders)
            {
                Manager.sendFractionMessage(region.GangOwner, $"Обсосы сбежали! Вы дали им под хвост! Вы отстояли территорию");
                Manager.sendFractionMessage(attackersFracID, "Вы лохонулись! Враги были сильнее! Вы не смогли захватить территорию");
                foreach (var m in Manager.Members.Keys)
                {
                    if (Main.Players[m].FractionID == region.GangOwner)
                    {
                        MoneySystem.Wallet.Change(m, 300);
                        GameLog.Money($"server", $"player({Main.Players[m].UUID})", 300, $"winCapture");
                    }
                }
            }
            else if (attackers > defenders)
            {
                Manager.sendFractionMessage(region.GangOwner, $"Вы прошляпили территорию");
                Manager.sendFractionMessage(attackersFracID, "Шугнули их как детей! Вы захватили территорию");
                region.GangOwner = attackersFracID;
                foreach (var m in Manager.Members.Keys)
                {
                    if (Main.Players[m].FractionID == attackersFracID)
                    {
                        MoneySystem.Wallet.Change(m, 300);
                        GameLog.Money($"server", $"player({Main.Players[m].UUID})", 300, $"winCapture");
                    }
                }
            }
            DateTime nextcapt = DateTime.Now.AddMinutes(config.TryGet <double>("nextcapt", 120));

            nextCaptDate[attackersFracID] = nextcapt;
            region.IsCapture = false;
            captureIsGoing   = false;
            NAPI.Task.Run(() =>
            {
                Main.ClientEventToAll("setZoneFlash", region.ID, false);
                Main.ClientEventToAll("setZoneColor", region.ID, gangPointsColor[region.GangOwner]);
            });
        }
Ejemplo n.º 4
0
        private static void timerStartCapture(GangPoint region)
        {
            var attackers = 0;
            var defenders = 0;

            foreach (var p in NAPI.Pools.GetAllPlayers())
            {
                if (!Main.Players.ContainsKey(p) || !p.HasData("GANGPOINT") || p.GetData("GANGPOINT") != region.ID)
                {
                    continue;
                }
                if (Main.Players[p].FractionID == region.GangOwner)
                {
                    defenders++;
                }
                else if (Main.Players[p].FractionID == attackersFracID)
                {
                    attackers++;
                }
            }
            foreach (var p in NAPI.Pools.GetAllPlayers())
            {
                if (!Main.Players.ContainsKey(p) || !p.HasData("GANGPOINT") || p.GetData("GANGPOINT") != region.ID)
                {
                    continue;
                }
                if (Main.Players[p].FractionID == region.GangOwner || Main.Players[p].FractionID == attackersFracID)
                {
                    Trigger.ClientEvent(p, "sendCaptureInformation", attackers, defenders, 0, 0);
                    Trigger.ClientEvent(p, "captureHud", true);
                }
            }

            captureIsGoing  = true;
            captureStarting = false;
            //captureTimer = Main.StartT(1000, 1000, (o) => timerUpdate(region, region.ID), "CAPTUREUPDATE_TIMER");
            captureTimer = Timers.Start(1000, () => timerUpdate(region, region.ID));
            //Main.StopT(toStartCaptureTimer, "toStartCaptureTimer_gangcapture");

            Manager.sendFractionMessage(region.GangOwner, $"Ахтунг! На нас напали! {Manager.getName(attackersFracID)} решили отхватить нашу территорию");
            Manager.sendFractionMessage(attackersFracID, "Стреляй! Отжимай! Вы начали войну за территорию");
        }
Ejemplo n.º 5
0
 private static void onPlayerEnterGangPoint(ColShape shape, Client player)
 {
     try
     {
         if (!Main.Players.ContainsKey(player))
         {
             return;
         }
         if (Main.Players[player].FractionID >= 1 && Main.Players[player].FractionID <= 5)
         {
             //Log.Write($"Gangsta {player.Name} entered gangPoint");
             player.SetData("GANGPOINT", (int)shape.GetData("ID"));
             GangPoint region = gangPoints[(int)shape.GetData("ID")];
             if (region.IsCapture && captureIsGoing && (Main.Players[player].FractionID == attackersFracID || Main.Players[player].FractionID == region.GangOwner))
             {
                 int minutes = timerCount / 60;
                 int seconds = timerCount % 60;
                 Trigger.ClientEvent(player, "sendCaptureInformation", attackersSt, defendersSt, minutes, seconds);
                 Trigger.ClientEvent(player, "captureHud", true);
             }
         }
     }
     catch (Exception ex) { Log.Write("onPlayerEnterGangPoint: " + ex.Message, nLog.Type.Error); }
 }
Ejemplo n.º 6
0
        private static void timerUpdate(GangPoint region, int id)
        {
            try
            {
                var attackers = 0;
                var defenders = 0;

                var allplayers = Main.Players.Keys.ToList();
                foreach (var p in allplayers)
                {
                    if (!Main.Players.ContainsKey(p) || !p.HasData("GANGPOINT") || p.GetData("GANGPOINT") != region.ID)
                    {
                        continue;
                    }
                    if (Main.Players[p].FractionID == region.GangOwner)
                    {
                        defenders++;
                    }
                    else if (Main.Players[p].FractionID == attackersFracID)
                    {
                        attackers++;
                    }
                }

                attackersSt = attackers;
                defendersSt = defenders;
                if (!defendersWas && defenders != 0)
                {
                    defendersWas = true;
                }
                if (!attackersWas && defendersWas)
                {
                    attackersWas = true;
                }

                if (defenders != 0)
                {
                    timerExitCountDef = 0;
                }
                if (attackers != 0)
                {
                    timerExitCountAt = 0;
                }

                if (defendersWas && defenders == 0)
                {
                    timerExitCountDef++;
                    if (timerExitCountDef >= 60)
                    {
                        endCapture(region, 0, 1);
                        return;
                    }
                }
                if (attackersWas && attackers == 0)
                {
                    timerExitCountAt++;
                    if (timerExitCountAt >= 60)
                    {
                        endCapture(region, 1, 0);
                        return;
                    }
                }

                if (timerCount >= 480 && !defendersWas)
                {
                    endCapture(region, defenders, attackers);
                }

                timerCount++;
                foreach (var p in allplayers)
                {
                    if (!Main.Players.ContainsKey(p) || !p.HasData("GANGPOINT") || p.GetData("GANGPOINT") != region.ID)
                    {
                        continue;
                    }
                    if (Main.Players[p].FractionID == region.GangOwner || Main.Players[p].FractionID == attackersFracID)
                    {
                        int minutes = timerCount / 60;
                        int seconds = timerCount % 60;
                        Trigger.ClientEvent(p, "sendCaptureInformation", attackers, defenders, minutes, seconds);
                    }
                }
            }
            catch (Exception e) { Log.Write("GangCapture: " + e.Message, nLog.Type.Error); }
        }
Ejemplo n.º 7
0
        /*[Command("test")]
         * public static void test(Client player, int index, int style, int color)
         * {
         *  NAPI.Player.SetPlayerFaceFeature(player, index, style);
         *  var headoverlay = new HeadOverlay();
         *  headoverlay.Index = (byte)index;
         *  headoverlay.Opacity = 1.0f;
         *  headoverlay.Color = (byte)color;
         *  headoverlay.SecondaryColor = 100;
         *  NAPI.Player.SetPlayerHeadOverlay(player, index, headoverlay);
         * }*/

        public static void CMD_startCapture(Client player)
        {
            if (!Manager.canUseCommand(player, "capture"))
            {
                return;
            }
            if (player.GetData("GANGPOINT") == -1)
            {
                Notify.Send(player, NotifyType.Error, NotifyPosition.BottomCenter, $"Вы не находитесь ни на одном из регионов", 3000);
                return;
            }
            GangPoint region = gangPoints[player.GetData("GANGPOINT")];

            if (region.GangOwner == Main.Players[player].FractionID)
            {
                Notify.Send(player, NotifyType.Error, NotifyPosition.BottomCenter, $"Вы не можете напасть на свою территорию", 3000);
                return;
            }
            if (DateTime.Now.Hour < 13 || DateTime.Now.Hour > 23)
            {
                Notify.Send(player, NotifyType.Error, NotifyPosition.BottomCenter, $"Вы можете напасть только с 13:00 до 23:00", 3000);
                return;
            }
            if (DateTime.Now < nextCaptDate[Main.Players[player].FractionID])
            {
                DateTime g   = new DateTime((nextCaptDate[Main.Players[player].FractionID] - DateTime.Now).Ticks);
                var      min = g.Minute;
                var      sec = g.Second;
                Notify.Send(player, NotifyType.Error, NotifyPosition.BottomCenter, $"Вы сможете начать захват только через {min}:{sec}", 3000);
                return;
            }
            if (DateTime.Now < protectDate[region.GangOwner])
            {
                DateTime g   = new DateTime((protectDate[region.GangOwner] - DateTime.Now).Ticks);
                var      min = g.Minute;
                var      sec = g.Second;
                Notify.Send(player, NotifyType.Error, NotifyPosition.BottomCenter, $"Вы сможете начать захват территории этой банды только через {min}:{sec}", 3000);
                return;
            }
            if (Manager.countOfFractionMembers(region.GangOwner) < 3)
            {
                Notify.Send(player, NotifyType.Error, NotifyPosition.BottomCenter, $"Недостаточный онлайн в банде противников", 3000);
                return;
            }
            if (smbTryCapture)
            {
                return;
            }
            smbTryCapture = true;
            if (captureStarting || captureIsGoing)
            {
                Notify.Send(player, NotifyType.Error, NotifyPosition.BottomCenter, $"Захват территории уже идёт", 3000);
                smbTryCapture = false;
                return;
            }

            timerCount        = 0;
            timerExitCountDef = 0;
            timerExitCountAt  = 0;
            region.IsCapture  = true;
            attackersFracID   = Main.Players[player].FractionID;

            //toStartCaptureTimer = Main.StartT(900000, 9999999, (o) => timerStartCapture(region), "CAPTURESTART_TIMER");
            toStartCaptureTimer = Timers.StartOnce(900000, () => timerStartCapture(region));
            Main.ClientEventToAll("setZoneFlash", region.ID, true, gangPointsColor[region.GangOwner]);

            captureStarting = true;
            smbTryCapture   = false;

            Manager.sendFractionMessage(region.GangOwner, $"Ахтунг! Сбор в течении 15 минут! {Manager.getName(attackersFracID)} решили отхватить нашу территорию");
            Manager.sendFractionMessage(attackersFracID, "Стреляй! Отжимай! Примерно через 15 минут подлетят противники");
        }