示例#1
0
        public void NotifyCastSpell(INavGrid navGrid, ISpell s, Vector2 start, Vector2 end, uint futureProjNetId,
                                    uint spellNetId)
        {
            var response = new CastSpellResponse(navGrid, s, start.X, start.Y, end.X, end.Y, futureProjNetId, spellNetId);

            _packetHandlerManager.BroadcastPacket(response, Channel.CHL_S2C);
        }
示例#2
0
        public void NotifyCastSpell(INavGrid navGrid, ISpell s, float x, float y, float xDragEnd, float yDragEnd, uint futureProjNetId,
                                    uint spellNetId)
        {
            var response = new CastSpellResponse(navGrid, s, x, y, xDragEnd, yDragEnd, futureProjNetId, spellNetId);

            _packetHandlerManager.BroadcastPacket(response, Channel.CHL_S2C);
        }
示例#3
0
        /// <summary>
        /// Called when the character casts the spell
        /// </summary>
        public virtual bool cast(float x, float y, float x2, float y2, AttackableUnit u = null)
        {
            if (HasEmptyScript)
            {
                return(false);
            }

            var stats = Owner.GetStats();

            if ((SpellData.ManaCost[Level] * (1 - stats.getSpellCostReduction())) > stats.CurrentMana ||
                state != SpellState.STATE_READY)
            {
                return(false);
            }
            if (ManaCostsEnabled)
            {
                stats.CurrentMana = stats.CurrentMana - SpellData.ManaCost[Level] * (1 - stats.getSpellCostReduction());
            }
            X               = x;
            Y               = y;
            X2              = x2;
            Y2              = y2;
            Target          = u;
            FutureProjNetId = _networkIdManager.GetNewNetID();
            SpellNetId      = _networkIdManager.GetNewNetID();

            if (SpellData.TargettingType == 1 && Target != null && Target.GetDistanceTo(Owner) > SpellData.CastRange[Level])
            {
                return(false);
            }

            spellGameScript.OnStartCasting(Owner, this, Target);

            if (SpellData.GetCastTime() > 0 && (SpellData.Flags & (int)SpellFlag.SPELL_FLAG_InstantCast) == 0)
            {
                Owner.setPosition(Owner.X, Owner.Y);//stop moving serverside too. TODO: check for each spell if they stop movement or not
                state           = SpellState.STATE_CASTING;
                CurrentCastTime = SpellData.GetCastTime();
            }
            else
            {
                finishCasting();
            }
            var response = new CastSpellResponse(this, x, y, x2, y2, FutureProjNetId, SpellNetId);

            _game.PacketHandlerManager.broadcastPacket(response, Channel.CHL_S2C);
            return(true);
        }