Example #1
0
        public unsafe bool HandlePacket(ENetPeer *peer, byte[] data, Game game)
        {
            var spell = new CastSpell(data);
            //Todo spellslot 0-3 qwer, 4-5 d f, 6-11 items

            // There are some bits triggering this

            /*if ((spell.spellSlotType & 0x0F) > 0)
             * {
             *  Logger.LogCoreInfo("Summoner Spell Cast");
             *  Logger.LogCoreInfo("Type: " + spell.spellSlotType.ToString("x") + ", Slot " + spell.spellSlot + ", coord " + spell.x + " ; " + spell.y + ", coord2 " + spell.x2 + ", " + spell.y2 + ", target NetId " + spell.targetNetId.ToString("x"));
             *  return true;
             * }*/

            var futureProjNetId = Game.GetNewNetID();
            var spellNetId      = Game.GetNewNetID();
            var targetObj       = game.getMap().getObjectById(spell.targetNetId);
            var targetUnit      = targetObj as Unit;

            var s = game.getPeerInfo(peer).getChampion().castSpell(spell.spellSlot, spell.x, spell.y, targetUnit, futureProjNetId, spellNetId);

            if (s == null)
            {
                return(false);
            }

            var response = new CastSpellAns(s, spell.x, spell.y, futureProjNetId, spellNetId);

            PacketHandlerManager.getInstace().broadcastPacket(response, Channel.CHL_S2C);
            return(true);
        }
Example #2
0
        /// <summary>
        /// Called when the character casts the spell
        /// </summary>
        public virtual bool cast(float x, float y, float x2, float y2, Unit u = null)
        {
            var stats = Owner.GetStats();

            if ((SpellData.ManaCost[Level] * (1 - stats.getSpellCostReduction())) >= stats.CurrentMana ||
                state != SpellState.STATE_READY)
            {
                return(false);
            }
            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 CastSpellAns(this, x, y, x2, y2, FutureProjNetId, SpellNetId);

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