Пример #1
0
        void HandleQuestgiverStatusQuery(QuestGiverStatusQuery packet)
        {
            QuestGiverStatus questStatus = QuestGiverStatus.None;

            var questgiver = Global.ObjAccessor.GetObjectByTypeMask(GetPlayer(), packet.QuestGiverGUID, TypeMask.Unit | TypeMask.GameObject);

            if (!questgiver)
            {
                Log.outInfo(LogFilter.Network, "Error in CMSG_QUESTGIVER_STATUS_QUERY, called for non-existing questgiver {0}", packet.QuestGiverGUID.ToString());
                return;
            }

            switch (questgiver.GetTypeId())
            {
            case TypeId.Unit:
                if (!questgiver.ToCreature().IsHostileTo(GetPlayer()))    // do not show quest status to enemies
                {
                    questStatus = GetPlayer().GetQuestDialogStatus(questgiver);
                }
                break;

            case TypeId.GameObject:
                questStatus = GetPlayer().GetQuestDialogStatus(questgiver);
                break;

            default:
                Log.outError(LogFilter.Network, "QuestGiver called for unexpected type {0}", questgiver.GetTypeId());
                break;
            }

            //inform client about status of quest
            GetPlayer().PlayerTalkClass.SendQuestGiverStatus(questStatus, packet.QuestGiverGUID);
        }
Пример #2
0
        public void SendQuestGiverStatus(QuestGiverStatus questStatus, ObjectGuid npcGUID)
        {
            var packet = new QuestGiverStatusPkt();

            packet.QuestGiver.Guid   = npcGUID;
            packet.QuestGiver.Status = questStatus;

            _session.SendPacket(packet);
        }
Пример #3
0
        public override bool Update()
        {
            if (!base.Update())
            {
                return(false);
            }


            Flags    = RefWoWUnit.Flags;
            Location = RefWoWUnit.Location;
            IsDead   = RefWoWUnit.IsDead;
            UpdateHitPoints();



            if (ObjectCacheManager.IsQuesting || IsQuestNpc)
            {
                CanInteract      = RefWoWUnit.CanInteract;
                QuestGiverStatus = RefWoWUnit.QuestGiverStatus;
            }


            if (IsDead)
            {
                if (ShouldLoot)
                {
                    Lootable = RefWoWUnit.Lootable;
                }

                if (TargetManager.CheckLootFlag(TargetManager.LootFlags.Skinning))
                {
                    Skinnable = RefWoWUnit.Skinnable;
                }
            }
            else
            {
                TargetGuid = RefWoWUnit.CurrentTargetGuid;

                if (ShouldKill)
                {
                    InCombat           = RefWoWUnit.Combat;
                    CanSelect          = RefWoWUnit.CanSelect;
                    IsEvadeRunningBack = RefWoWUnit.IsEvadeRunningBack;
                    Attackable         = RefWoWUnit.Attackable;
                    TaggedByMe         = RefWoWUnit.TaggedByMe;
                    IsTagged           = RefWoWUnit.IsTagged;
                }
            }

            return(true);
        }
Пример #4
0
 public QuestGiverInfo(ObjectGuid guid, QuestGiverStatus status)
 {
     Guid   = guid;
     Status = status;
 }
Пример #5
0
 /// <inheritdoc />
 public SMSG_QUESTGIVER_STATUS_Payload([NotNull] ObjectGuid queryId, QuestGiverStatus status)
     : this()
 {
     QueryId = queryId ?? throw new ArgumentNullException(nameof(queryId));
     Status  = status;
 }
Пример #6
0
        internal static bool UnitHasQuestGiverStatus(uint id, QuestGiverStatus status)
        {
            var unit = ObjectCacheManager.GetWoWUnits(id).FirstOrDefault();

            return(unit != null && unit.IsValid && unit.RefWoWUnit.QuestGiverStatus == status);
        }