Beispiel #1
0
        /// <summary>
        /// Запуск пули
        /// </summary>
        /// <param name="property">Уровень прокача способности, умножется на 5 и получается магический урон стрелы</param>
        public void UseSpall(Map map, Game_Object_In_Call obj, IUnit unit, object property)
        {
            _unit = unit;
            bool upSpell = UnitGenerator.UpPlayerSpell(unit, this);

            if (unit.UnitFrozen == false &&
                !_culdaunBool && LevelCast != 0 &&
                !upSpell &&
                !unit.Hexed &&
                !Paused)
            {
                if (unit.Mana >= ManaCost)
                ///Проверка есть ли мана на каст
                {
                    //Speed = unit.AttackSpeed;

                    ///Флаг кулдауна
                    _culdaunBool = true;

                    ///Отнимаем нужное количество
                    unit.Mana -= ManaCost;

                    Culdaun = unit.AttackSpeed * 2;
                    if (Culdaun < StaticVaribl.AttackSpeedRangeMaximum)
                    {
                        Culdaun = StaticVaribl.AttackSpeedRangeMaximum;
                    }


                    Bullet bullArrow = new Bullet();
                    bullArrow.GameObject = new Game_Object_In_Call()
                    {
                        EnumCallType = EnumCallType.Bullet,
                    };

                    /// Если есть скади
                    if (UnitGenerator.HasSkadi(unit))
                    {
                        UC_Skadi skadiArrow = new UC_Skadi();
                        skadiArrow.ChengAngel(unit.Angel);
                        bullArrow.GameObject.View = skadiArrow;
                    }
                    else
                    {
                        ///Создаем визуальный объект стрела
                        UC_Sniper_Headshot arrow = new UC_Sniper_Headshot();
                        arrow.ChengAngel(unit.Angel);
                        bullArrow.GameObject.View = arrow;
                    }

                    bullArrow.UnitUsed   = unit;
                    bullArrow.PositionX  = unit.PositionX;
                    bullArrow.PositionY  = unit.PositionY;
                    bullArrow.Speed      = Speed;
                    bullArrow.DemagePhys = unit.Demage;

                    ///Магический урон зависит от прокача стрел
                    //bullArrow.DemageMagic = 5 * (int)property;

                    int bonusDemagePerBushHit = 5;
                    int chans = 25;

                    if (LevelCast == 1)
                    {
                        bonusDemagePerBushHit = 5;
                        chans = 25;
                    }
                    else if (LevelCast == 2)
                    {
                        bonusDemagePerBushHit = 10;
                        chans = 30;
                    }
                    else if (LevelCast == 3)
                    {
                        bonusDemagePerBushHit = 15;
                        chans = 35;
                    }

                    ///Мкб микробаши не стакаются со снайперовыми
                    Random rand = new Random((int)DateTime.Now.Ticks);
                    if (chans > rand.Next(0, 100))
                    {
                        bullArrow.StunDuration = 1;
                        bullArrow.DemagePhys  += bonusDemagePerBushHit;
                    }

                    bullArrow.CurrentMap = map;
                    bullArrow.Angel      = unit.Angel;
                    bullArrow.Range      = _unit.Range;
                    ///Поведение такое же как у стрел боника
                    bullArrow.Spells.Add(new SPB_FireArrow()
                    {
                        Name = "Fly"
                    });

                    ///И его же добавим в масив всех объектов
                    map.GameObjectInCall.Add(bullArrow.GameObject);

                    Canvas.SetLeft(bullArrow.GameObject.View, bullArrow.PositionX * 50);
                    Canvas.SetTop(bullArrow.GameObject.View, bullArrow.PositionY * 50);
                    ///Отображение
                    map.MapCanvas.Children.Add(bullArrow.GameObject.View);

                    bullArrow.UseSpall("Fly");

                    ///Таймер кулдауна заклинания
                    _secondTimer = new Storyboard()
                    {
                        Duration = TimeSpan.FromSeconds(Culdaun)
                    };
                    _secondTimer.Completed += _secondTimer_Completed;
                    _secondTimer.Begin();

                    if (Paused)
                    {
                        Pause();
                    }

                    if (StartUseSpell != null)
                    {
                        StartUseSpell(this, null);
                    }

                    UnitGenerator.UpdatePlayerView(unit);
                }
                else
                ///Маны нету
                {
                }
            }
        }
Beispiel #2
0
        /// <summary>
        /// Запуск пули
        /// </summary>
        /// <param name="property">Уровень прокача способности, умножется на 5 и получается магический урон стрелы</param>
        public void UseSpall(Map map, Game_Object_In_Call obj, IUnit unit, object property)
        {
            _unit = unit;
            bool upSpell = UnitGenerator.UpPlayerSpell(unit, this);


            /// Если есть аганим
            if (UnitGenerator.HasAghanim(unit))
            {
                /// То ульт у снайпера быстрее востанавливается
                _culdaun = _culdaun / 2;
            }


            if (unit.UnitFrozen == false &&
                !_culdaunBool && LevelCast != 0 &&
                !upSpell && !unit.Silenced &&
                !unit.Hexed &&
                !Paused)
            {
                if (unit.Mana >= ManaCost)
                ///Проверка есть ли мана на каст
                {
                    Speed = unit.AttackSpeed;

                    ///Флаг кулдауна
                    _culdaunBool = true;

                    ///Отнимаем нужное количество
                    unit.Mana -= ManaCost;

                    ///Создаем визуальный объект стрела
                    UC_Sniper_Headshot arrow = new UC_Sniper_Headshot();
                    arrow.ChengAngel(unit.Angel);
                    Bullet bullArrow = new Bullet();
                    bullArrow.GameObject = new Game_Object_In_Call()
                    {
                        EnumCallType = EnumCallType.Bullet,
                        View         = arrow
                    };
                    bullArrow.UnitUsed   = unit;
                    bullArrow.PositionX  = unit.PositionX;
                    bullArrow.PositionY  = unit.PositionY;
                    bullArrow.Speed      = 0.3;
                    bullArrow.DemagePhys = unit.Demage;

                    if (LevelCast == 1)
                    {
                        bullArrow.DemageMagic = 30;
                    }


                    bullArrow.CurrentMap = map;
                    bullArrow.Angel      = unit.Angel;
                    bullArrow.Range      = 30;

                    ///Теперь выбераем цель пули
                    ///Это первый юнит на которого была наведена пуля

                    Map_Cell callsPoint = null;
                    ///Получаем ячейки которые находятся перед героем
                    #region Select first unit
                    int xNew = unit.PositionX;
                    int yNew = unit.PositionY;
                    if (unit.Angel == EAngel.Left)
                    {
                        for (int i = 0; i <= map.Width / 50; i++)
                        {
                            xNew = xNew - 1;
                            Map_Cell call = map.Calls.FirstOrDefault(p => p.IndexLeft == xNew && p.IndexTop == yNew);
                            if (call != null && !call.Block)
                            {
                                if (call.IUnits.Any(p => p.GameObject.EnumCallType == EnumCallType.Unit ||
                                                    p.GameObject.EnumCallType == EnumCallType.Player))
                                {
                                    callsPoint = call;
                                    break;
                                }
                            }
                        }
                    }
                    else if (unit.Angel == EAngel.Right)
                    {
                        for (int i = 0; i <= map.Width / 50; i++)
                        {
                            xNew = xNew + 1;
                            Map_Cell call = map.Calls.FirstOrDefault(p => p.IndexLeft == xNew && p.IndexTop == yNew);
                            if (call != null && !call.Block)
                            {
                                if (call.IUnits.Any(p => p.GameObject.EnumCallType == EnumCallType.Unit ||
                                                    p.GameObject.EnumCallType == EnumCallType.Player))
                                {
                                    callsPoint = call;
                                    break;
                                }
                            }
                        }
                    }
                    else if (unit.Angel == EAngel.Top)
                    {
                        for (int i = 0; i <= map.Height / 50; i++)
                        {
                            yNew = yNew - 1;
                            Map_Cell call = map.Calls.FirstOrDefault(p => p.IndexLeft == xNew && p.IndexTop == yNew);
                            if (call != null && !call.Block)
                            {
                                if (call.IUnits.Any(p => p.GameObject.EnumCallType == EnumCallType.Unit ||
                                                    p.GameObject.EnumCallType == EnumCallType.Player))
                                {
                                    callsPoint = call;
                                    break;
                                }
                            }
                        }
                    }
                    else if (unit.Angel == EAngel.Bottom)
                    {
                        for (int i = 0; i <= map.Height / 50; i++)
                        {
                            yNew = yNew + 1;
                            Map_Cell call = map.Calls.FirstOrDefault(p => p.IndexLeft == xNew && p.IndexTop == yNew);
                            if (call != null && !call.Block)
                            {
                                if (call.IUnits.Any(p => p.GameObject.EnumCallType == EnumCallType.Unit ||
                                                    p.GameObject.EnumCallType == EnumCallType.Player))
                                {
                                    callsPoint = call;
                                    break;
                                }
                            }
                        }
                    }

                    if (callsPoint != null)
                    {
                        bullArrow.Aim = callsPoint.IUnits.FirstOrDefault(p => p.GameObject.EnumCallType == EnumCallType.Player);
                        if (bullArrow.Aim == null)
                        {
                            bullArrow.Aim = callsPoint.IUnits.FirstOrDefault(p => p.GameObject.EnumCallType == EnumCallType.Unit);
                        }
                    }
                    #endregion

                    bullArrow.Spells.Add(new SPB_Sniper_Assassinate()
                    {
                        Name = "Fly"
                    });

                    ///И его же добавим в масив всех объектов
                    map.GameObjectInCall.Add(bullArrow.GameObject);

                    Canvas.SetLeft(bullArrow.GameObject.View, bullArrow.PositionX * 50);
                    Canvas.SetTop(bullArrow.GameObject.View, bullArrow.PositionY * 50);
                    ///Отображение
                    map.MapCanvas.Children.Add(bullArrow.GameObject.View);

                    bullArrow.UseSpall("Fly");

                    ///Таймер кулдауна заклинания
                    _secondTimer = new Storyboard()
                    {
                        Duration = TimeSpan.FromSeconds(Culdaun)
                    };
                    _secondTimer.Completed += _secondTimer_Completed;
                    _secondTimer.Begin();

                    if (Paused)
                    {
                        Pause();
                    }

                    if (StartUseSpell != null)
                    {
                        StartUseSpell(this, null);
                    }

                    UnitGenerator.UpdatePlayerView(unit);
                }
                else
                ///Маны нету
                {
                }
            }
        }