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); }
/// <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); }