Core/GameObjects: Fixed the interaction/highlight logic for GAMEOBJECT_TYPE_CHEST and quest objectives

Port From (https://github.com/TrinityCore/TrinityCore/commit/31bd3804e35f63915a5d6d669b31add6c82d7010)
This commit is contained in:
Hondacrx
2024-08-26 17:41:44 -04:00
parent 511ac17c55
commit b7b166c0f0
3 changed files with 37 additions and 12 deletions
@@ -1367,6 +1367,20 @@ namespace Game.Entities
} }
} }
public bool HasConditionalInteraction()
{
if (GetGoInfo().GetQuestID() != 0)
return true;
if (GetGoType() != GameObjectTypes.AuraGenerator && GetGoInfo().GetConditionID1() != 0)
return true;
if (Global.ObjectMgr.IsGameObjectForQuests(GetEntry()))
return true;
return false;
}
public bool CanActivateForPlayer(Player target) public bool CanActivateForPlayer(Player target)
{ {
if (!MeetsInteractCondition(target)) if (!MeetsInteractCondition(target))
@@ -1427,6 +1441,12 @@ namespace Game.Entities
return true; return true;
break; break;
} }
case GameObjectTypes.GatheringNode:
{
if (LootStorage.Gameobject.HaveQuestLootForPlayer(GetGoInfo().GatheringNode.chestLoot, target))
return true;
break;
}
default: default:
break; break;
} }
@@ -114,14 +114,11 @@ namespace Game.Entities
{ {
case GameObjectTypes.Button: case GameObjectTypes.Button:
case GameObjectTypes.Goober: case GameObjectTypes.Goober:
if (gameObject.GetGoInfo().GetQuestID() != 0 || gameObject.GetGoInfo().GetConditionID1() != 0) if (gameObject.HasConditionalInteraction() && gameObject.CanActivateForPlayer(receiver))
{ {
if (gameObject.CanActivateForPlayer(receiver)) dynFlags |= GameObjectDynamicLowFlags.Highlight;
{ if (gameObject.GetGoStateFor(receiver.GetGUID()) != GameObjectState.Active)
dynFlags |= GameObjectDynamicLowFlags.Highlight; dynFlags |= GameObjectDynamicLowFlags.Activate;
if (gameObject.GetGoStateFor(receiver.GetGUID()) != GameObjectState.Active)
dynFlags |= GameObjectDynamicLowFlags.Activate;
}
} }
break; break;
case GameObjectTypes.QuestGiver: case GameObjectTypes.QuestGiver:
@@ -129,16 +126,15 @@ namespace Game.Entities
dynFlags |= GameObjectDynamicLowFlags.Activate; dynFlags |= GameObjectDynamicLowFlags.Activate;
break; break;
case GameObjectTypes.Chest: case GameObjectTypes.Chest:
if (gameObject.CanActivateForPlayer(receiver)) if (gameObject.HasConditionalInteraction() && gameObject.CanActivateForPlayer(receiver))
dynFlags |= GameObjectDynamicLowFlags.Activate | GameObjectDynamicLowFlags.Sparkle | GameObjectDynamicLowFlags.Highlight; dynFlags |= GameObjectDynamicLowFlags.Activate | GameObjectDynamicLowFlags.Sparkle | GameObjectDynamicLowFlags.Highlight;
else if (receiver.IsGameMaster()) else if (receiver.IsGameMaster())
dynFlags |= GameObjectDynamicLowFlags.Activate | GameObjectDynamicLowFlags.Sparkle; dynFlags |= GameObjectDynamicLowFlags.Activate | GameObjectDynamicLowFlags.Sparkle;
break; break;
case GameObjectTypes.Generic: case GameObjectTypes.Generic:
case GameObjectTypes.SpellFocus: case GameObjectTypes.SpellFocus:
if (gameObject.GetGoInfo().GetQuestID() != 0 || gameObject.GetGoInfo().GetConditionID1() != 0) if (gameObject.HasConditionalInteraction() && gameObject.CanActivateForPlayer(receiver))
if (gameObject.CanActivateForPlayer(receiver)) dynFlags |= GameObjectDynamicLowFlags.Sparkle | GameObjectDynamicLowFlags.Highlight;
dynFlags |= GameObjectDynamicLowFlags.Sparkle | GameObjectDynamicLowFlags.Highlight;
break; break;
case GameObjectTypes.Transport: case GameObjectTypes.Transport:
case GameObjectTypes.MapObjTransport: case GameObjectTypes.MapObjTransport:
@@ -154,7 +150,7 @@ namespace Game.Entities
dynFlags &= ~GameObjectDynamicLowFlags.NoInterract; dynFlags &= ~GameObjectDynamicLowFlags.NoInterract;
break; break;
case GameObjectTypes.GatheringNode: case GameObjectTypes.GatheringNode:
if (gameObject.GetGoInfo().GetConditionID1() != 0 && gameObject.CanActivateForPlayer(receiver)) if (gameObject.HasConditionalInteraction() && gameObject.CanActivateForPlayer(receiver))
dynFlags |= GameObjectDynamicLowFlags.Activate | GameObjectDynamicLowFlags.Sparkle | GameObjectDynamicLowFlags.Highlight; dynFlags |= GameObjectDynamicLowFlags.Activate | GameObjectDynamicLowFlags.Sparkle | GameObjectDynamicLowFlags.Highlight;
if (gameObject.GetGoStateFor(receiver.GetGUID()) == GameObjectState.Active) if (gameObject.GetGoStateFor(receiver.GetGUID()) == GameObjectState.Active)
dynFlags |= GameObjectDynamicLowFlags.Depleted; dynFlags |= GameObjectDynamicLowFlags.Depleted;
+9
View File
@@ -4698,6 +4698,15 @@ namespace Game
++count; ++count;
} }
foreach (var (questObjectiveId, objective) in _questObjectives)
{
if (objective.Type != QuestObjectiveType.GameObject)
continue;
_gameObjectForQuestStorage.Add((uint)objective.ObjectID);
++count;
}
Log.outInfo(LogFilter.ServerLoading, "Loaded {0} GameObjects for quests in {1} ms", count, Time.GetMSTimeDiffToNow(oldMSTime)); Log.outInfo(LogFilter.ServerLoading, "Loaded {0} GameObjects for quests in {1} ms", count, Time.GetMSTimeDiffToNow(oldMSTime));
} }