コード例 #1
0
        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);
                }
            }
        }