Core/SAI: Implemented action type SMART_ACTION_DESTROY_CONVERSATION
Port From (https://github.com/TrinityCore/TrinityCore/commit/e9e7059a23618e58e57dc3b24eb218505ca3f746)
This commit is contained in:
@@ -391,6 +391,7 @@ namespace Framework.Constants
|
|||||||
DoAction = 151,
|
DoAction = 151,
|
||||||
CompleteQuest = 152, // QuestId. Regular quests with objectives can't be completed with this action (only quests with QUEST_FLAGS_COMPLETION_EVENT, QUEST_FLAGS_COMPLETION_AREA_TRIGGER or QUEST_FLAGS_TRACKING_EVENT)
|
CompleteQuest = 152, // QuestId. Regular quests with objectives can't be completed with this action (only quests with QUEST_FLAGS_COMPLETION_EVENT, QUEST_FLAGS_COMPLETION_AREA_TRIGGER or QUEST_FLAGS_TRACKING_EVENT)
|
||||||
CreditQuestObjectiveTalkTo = 153,
|
CreditQuestObjectiveTalkTo = 153,
|
||||||
|
DestroyConversation = 154, // conversation_template.id, isPrivate, range
|
||||||
EnterVehicle = 155, // seat id
|
EnterVehicle = 155, // seat id
|
||||||
BoardPassenger = 156, // seat id
|
BoardPassenger = 156, // seat id
|
||||||
ExitVehicle = 157,
|
ExitVehicle = 157,
|
||||||
|
|||||||
@@ -821,6 +821,7 @@ namespace Game.AI
|
|||||||
SmartActions.DoAction => Marshal.SizeOf(typeof(SmartAction.DoAction)),
|
SmartActions.DoAction => Marshal.SizeOf(typeof(SmartAction.DoAction)),
|
||||||
SmartActions.CompleteQuest => Marshal.SizeOf(typeof(SmartAction.Quest)),
|
SmartActions.CompleteQuest => Marshal.SizeOf(typeof(SmartAction.Quest)),
|
||||||
SmartActions.CreditQuestObjectiveTalkTo => 0,
|
SmartActions.CreditQuestObjectiveTalkTo => 0,
|
||||||
|
SmartActions.DestroyConversation => Marshal.SizeOf(typeof(SmartAction.DestroyConversation)),
|
||||||
SmartActions.EnterVehicle => Marshal.SizeOf(typeof(SmartAction.EnterVehicle)),
|
SmartActions.EnterVehicle => Marshal.SizeOf(typeof(SmartAction.EnterVehicle)),
|
||||||
SmartActions.BoardPassenger => Marshal.SizeOf(typeof(SmartAction.EnterVehicle)),
|
SmartActions.BoardPassenger => Marshal.SizeOf(typeof(SmartAction.EnterVehicle)),
|
||||||
SmartActions.ExitVehicle => 0,
|
SmartActions.ExitVehicle => 0,
|
||||||
@@ -870,7 +871,7 @@ namespace Game.AI
|
|||||||
}
|
}
|
||||||
|
|
||||||
return false;
|
return false;
|
||||||
};
|
}
|
||||||
|
|
||||||
if (!actionUsesStringParam() && !e.Action.param_string.IsEmpty())
|
if (!actionUsesStringParam() && !e.Action.param_string.IsEmpty())
|
||||||
Log.outWarn(LogFilter.Sql, $"SmartAIMgr: {e} has unused action_param_string with value {e.Action.param_string}, it should be NULL.");
|
Log.outWarn(LogFilter.Sql, $"SmartAIMgr: {e} has unused action_param_string with value {e.Action.param_string}, it should be NULL.");
|
||||||
@@ -1804,7 +1805,7 @@ namespace Game.AI
|
|||||||
}
|
}
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
};
|
}
|
||||||
|
|
||||||
if (e.Action.equip.slot1 != 0 && !isValidEquipmentSlot(e.Action.equip.slot1, 0))
|
if (e.Action.equip.slot1 != 0 && !isValidEquipmentSlot(e.Action.equip.slot1, 0))
|
||||||
return false;
|
return false;
|
||||||
@@ -2234,6 +2235,17 @@ namespace Game.AI
|
|||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
case SmartActions.DestroyConversation:
|
||||||
|
{
|
||||||
|
if (Global.ConversationDataStorage.GetConversationTemplate(e.Action.destroyConversation.id) == null)
|
||||||
|
{
|
||||||
|
Log.outError(LogFilter.Sql, $"SmartAIMgr: SMART_ACTION_DESTROY_CONVERSATION {e} uses invalid entry {e.Action.destroyConversation.id}, skipped.");
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
TC_SAI_IS_BOOLEAN_VALID(e, e.Action.destroyConversation.isPrivate);
|
||||||
|
break;
|
||||||
|
}
|
||||||
// No longer supported
|
// No longer supported
|
||||||
case SmartActions.CallAreaexploredoreventhappens:
|
case SmartActions.CallAreaexploredoreventhappens:
|
||||||
case SmartActions.CallGroupeventhappens:
|
case SmartActions.CallGroupeventhappens:
|
||||||
@@ -3276,6 +3288,9 @@ namespace Game.AI
|
|||||||
[FieldOffset(4)]
|
[FieldOffset(4)]
|
||||||
public DoAction doAction;
|
public DoAction doAction;
|
||||||
|
|
||||||
|
[FieldOffset(4)]
|
||||||
|
public DestroyConversation destroyConversation;
|
||||||
|
|
||||||
[FieldOffset(4)]
|
[FieldOffset(4)]
|
||||||
public EnterVehicle enterVehicle;
|
public EnterVehicle enterVehicle;
|
||||||
|
|
||||||
@@ -3833,6 +3848,12 @@ namespace Game.AI
|
|||||||
{
|
{
|
||||||
public uint actionId;
|
public uint actionId;
|
||||||
}
|
}
|
||||||
|
public struct DestroyConversation
|
||||||
|
{
|
||||||
|
public uint id;
|
||||||
|
public uint isPrivate;
|
||||||
|
public uint range;
|
||||||
|
}
|
||||||
public struct EnterVehicle
|
public struct EnterVehicle
|
||||||
{
|
{
|
||||||
public uint seatId;
|
public uint seatId;
|
||||||
|
|||||||
@@ -2708,6 +2708,28 @@ namespace Game.AI
|
|||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
case SmartActions.DestroyConversation:
|
||||||
|
{
|
||||||
|
void work(Conversation conversation)
|
||||||
|
{
|
||||||
|
if (conversation.GetEntry() != e.Action.destroyConversation.id)
|
||||||
|
return;
|
||||||
|
|
||||||
|
if (conversation.IsPrivateObject())
|
||||||
|
{
|
||||||
|
if (e.Action.destroyConversation.isPrivate == 0 || !targets.Any(target => target.GetGUID() == conversation.GetPrivateObjectOwner()))
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
else if (e.Action.destroyConversation.isPrivate != 0)
|
||||||
|
return;
|
||||||
|
|
||||||
|
conversation.Remove();
|
||||||
|
}
|
||||||
|
|
||||||
|
ConversationWorker worker = new(PhasingHandler.GetAlwaysVisiblePhaseShift(), work);
|
||||||
|
Cell.VisitGridObjects(GetBaseObject(), worker, e.Action.destroyConversation.range);
|
||||||
|
break;
|
||||||
|
}
|
||||||
default:
|
default:
|
||||||
Log.outError(LogFilter.Sql, "SmartScript.ProcessAction: Entry {0} SourceType {1}, Event {2}, Unhandled Action type {3}", e.EntryOrGuid, e.GetScriptType(), e.EventId, e.GetActionType());
|
Log.outError(LogFilter.Sql, "SmartScript.ProcessAction: Entry {0} SourceType {1}, Event {2}, Unhandled Action type {3}", e.EntryOrGuid, e.GetScriptType(), e.EventId, e.GetActionType());
|
||||||
break;
|
break;
|
||||||
|
|||||||
Reference in New Issue
Block a user