Core/Gossip: Track started interaction types and reset only questgiver on quest accept

Port From (https://github.com/TrinityCore/TrinityCore/commit/c02e311eef9e635738b9e48559d5455ef016d8b4)
This commit is contained in:
Hondacrx
2025-08-19 21:29:25 -04:00
parent bd71d172da
commit 068c3c7ce5
13 changed files with 176 additions and 141 deletions
+7 -6
View File
@@ -89,9 +89,8 @@ namespace Game
return;
}
_player.PlayerTalkClass.GetInteractionData().Reset();
_player.PlayerTalkClass.GetInteractionData().SourceGuid = npc.GetGUID();
_player.PlayerTalkClass.GetInteractionData().SetTrainerId(trainerId);
_player.PlayerTalkClass.GetInteractionData().StartInteraction(npc.GetGUID(), PlayerInteractionType.Trainer);
_player.PlayerTalkClass.GetInteractionData().GetTrainer().Id = trainerId;
trainer.SendSpells(npc, _player, GetSessionDbLocaleIndex());
}
@@ -109,10 +108,10 @@ namespace Game
if (_player.HasUnitState(UnitState.Died))
_player.RemoveAurasByType(AuraType.FeignDeath);
if (_player.PlayerTalkClass.GetInteractionData().SourceGuid != packet.TrainerGUID)
if (!_player.PlayerTalkClass.GetInteractionData().IsInteractingWith(packet.TrainerGUID, PlayerInteractionType.Trainer))
return;
if (_player.PlayerTalkClass.GetInteractionData().GetTrainerId() != packet.TrainerID)
if (_player.PlayerTalkClass.GetInteractionData().GetTrainer().Id != packet.TrainerID)
return;
// check present spell in trainer spell list
@@ -177,7 +176,7 @@ namespace Game
return;
// Prevent cheating on C# scripted menus
if (GetPlayer().PlayerTalkClass.GetInteractionData().SourceGuid != packet.GossipUnit)
if (!_player.PlayerTalkClass.GetInteractionData().IsInteractingWith(packet.GossipUnit, PlayerInteractionType.Gossip))
return;
Creature unit = null;
@@ -424,6 +423,8 @@ namespace Game
if (GetPlayer().HasUnitState(UnitState.Died))
GetPlayer().RemoveAurasByType(AuraType.FeignDeath);
GetPlayer().PlayerTalkClass.GetInteractionData().StartInteraction(vendorGuid, PlayerInteractionType.Vendor);
// Stop the npc if moving
uint pause = vendor.GetMovementTemplate().GetInteractionPauseTimer();
if (pause != 0)