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