public void Update(Unit caster) { m_objectTarget = !m_objectTargetGUID.IsEmpty() ? ((m_objectTargetGUID == caster.GetGUID()) ? caster : Global.ObjAccessor.GetWorldObject(caster, m_objectTargetGUID)) : null; m_itemTarget = null; if (caster is Player) { Player player = caster.ToPlayer(); if (m_targetMask.HasAnyFlag(SpellCastTargetFlags.Item)) { m_itemTarget = player.GetItemByGuid(m_itemTargetGUID); } else if (m_targetMask.HasAnyFlag(SpellCastTargetFlags.TradeItem)) { if (m_itemTargetGUID == ObjectGuid.TradeItem) // here it is not guid but slot. Also prevents hacking slots { TradeData pTrade = player.GetTradeData(); if (pTrade != null) { m_itemTarget = pTrade.GetTraderData().GetItem(TradeSlots.NonTraded); } } } if (m_itemTarget != null) { m_itemTargetEntry = m_itemTarget.GetEntry(); } } // update positions by transport move if (HasSrc() && !m_src.TransportGUID.IsEmpty()) { WorldObject transport = Global.ObjAccessor.GetWorldObject(caster, m_src.TransportGUID); if (transport != null) { m_src.Position.Relocate(transport.GetPosition()); m_src.Position.RelocateOffset(m_src.TransportOffset); } } if (HasDst() && !m_dst.TransportGUID.IsEmpty()) { WorldObject transport = Global.ObjAccessor.GetWorldObject(caster, m_dst.TransportGUID); if (transport != null) { m_dst.Position.Relocate(transport.GetPosition()); m_dst.Position.RelocateOffset(m_dst.TransportOffset); } } }