ue-mcp 1.0.71 → 1.0.73
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +2 -2
- package/dist/tool-counts.json +5 -5
- package/dist/tools/editor.js +3 -0
- package/dist/tools/editor.js.map +1 -1
- package/dist/tools/gameplay.js +3 -2
- package/dist/tools/gameplay.js.map +1 -1
- package/dist/ue-mcp.default.yml +7 -1
- package/package.json +2 -2
- package/plugin/ue_mcp_bridge/Source/UE_MCP_Bridge/Private/Handlers/AnimationHandlers_Sequence.cpp +18 -6
- package/plugin/ue_mcp_bridge/Source/UE_MCP_Bridge/Private/Handlers/EditorHandlers.cpp +1 -0
- package/plugin/ue_mcp_bridge/Source/UE_MCP_Bridge/Private/Handlers/EditorHandlers.h +2 -0
- package/plugin/ue_mcp_bridge/Source/UE_MCP_Bridge/Private/Handlers/EditorHandlers_PIE.cpp +179 -0
- package/plugin/ue_mcp_bridge/Source/UE_MCP_Bridge/Private/Handlers/GameplayHandlers.cpp +96 -3
- package/plugin/ue_mcp_bridge/Source/UE_MCP_Bridge/Private/Handlers/GasHandlers.cpp +132 -25
- package/plugin/ue_mcp_bridge/Source/UE_MCP_Bridge/Private/Handlers/NiagaraHandlers.cpp +5 -4
package/README.md
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# UE-MCP
|
|
2
2
|
|
|
3
|
-
**Unreal Engine Model Context Protocol Server** - gives AI assistants deep read/write access to the Unreal Editor through <!-- count:tools -->21<!-- /count --> category tools covering <!-- count:actions -->
|
|
3
|
+
**Unreal Engine Model Context Protocol Server** - gives AI assistants deep read/write access to the Unreal Editor through <!-- count:tools -->21<!-- /count --> category tools covering <!-- count:actions -->548+<!-- /count --> actions, plus a YAML flow engine for multi-step workflows.
|
|
4
4
|
|
|
5
5
|
```mermaid
|
|
6
6
|
flowchart LR
|
|
@@ -57,7 +57,7 @@ If you prefer to configure manually, add to your MCP client config:
|
|
|
57
57
|
|
|
58
58
|
- [Getting Started](https://db-lyon.github.io/ue-mcp/getting-started/) — Installation, configuration, first run
|
|
59
59
|
- [Architecture](https://db-lyon.github.io/ue-mcp/architecture/) — How the pieces fit together
|
|
60
|
-
- [Tool Reference](https://db-lyon.github.io/ue-mcp/tool-reference/) - All <!-- count:tools -->21<!-- /count --> tools with <!-- count:actions -->
|
|
60
|
+
- [Tool Reference](https://db-lyon.github.io/ue-mcp/tool-reference/) - All <!-- count:tools -->21<!-- /count --> tools with <!-- count:actions -->548+<!-- /count --> actions
|
|
61
61
|
- [Flows](https://db-lyon.github.io/ue-mcp/flows/) - YAML flow engine, custom tasks, rollback, hooks
|
|
62
62
|
- [Configuration](https://db-lyon.github.io/ue-mcp/configuration/) — `.ue-mcp.json` and MCP client config
|
|
63
63
|
- [Neon Shrine Demo](https://db-lyon.github.io/ue-mcp/neon-shrine-demo/) — Interactive guided demo
|
package/dist/tool-counts.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"tools": 21,
|
|
3
|
-
"actions":
|
|
4
|
-
"bridgeActions":
|
|
3
|
+
"actions": 548,
|
|
4
|
+
"bridgeActions": 520,
|
|
5
5
|
"localActions": 28,
|
|
6
6
|
"perTool": {
|
|
7
7
|
"project": 25,
|
|
@@ -16,7 +16,7 @@
|
|
|
16
16
|
"niagara": 26,
|
|
17
17
|
"audio": 5,
|
|
18
18
|
"widget": 19,
|
|
19
|
-
"editor":
|
|
19
|
+
"editor": 55,
|
|
20
20
|
"reflection": 8,
|
|
21
21
|
"gameplay": 53,
|
|
22
22
|
"gas": 14,
|
|
@@ -26,6 +26,6 @@
|
|
|
26
26
|
"statetree": 35,
|
|
27
27
|
"plugins": 2
|
|
28
28
|
},
|
|
29
|
-
"generatedAt": "2026-05-
|
|
30
|
-
"version": "1.0.
|
|
29
|
+
"generatedAt": "2026-05-30T20:30:49.573Z",
|
|
30
|
+
"version": "1.0.73"
|
|
31
31
|
}
|
package/dist/tools/editor.js
CHANGED
|
@@ -101,6 +101,7 @@ export const editorTool = categoryTool("editor", "Editor commands, Python execut
|
|
|
101
101
|
get_runtime_value: bp("Read PIE actor property. Params: actorLabel, propertyName (supports dotted paths: component.field or component.struct.field for nested reads on component subobjects, #344/#381)", "get_runtime_value"),
|
|
102
102
|
get_pie_pawn: bp("Resolve the controlled pawn in the active PIE world. Params: playerIndex? (default 0). Returns actorLabel/class/location/rotation (#228/#229)", "get_pie_pawn", (p) => ({ playerIndex: p.playerIndex })),
|
|
103
103
|
invoke_function: bp("Call a BlueprintCallable / Exec UFUNCTION on a target actor or one of its components. Params: actorLabel, functionName, component? (component subobject name; redirects target from the actor to that component, #382), args? (object), actorArgs? (object mapping UObject* parameter name to actor label, resolved against live actors in the active world; #383), world? (editor|pie). Returns out/return params (#228/#229)", "invoke_function", (p) => ({ actorLabel: p.actorLabel, functionName: p.functionName, component: p.component, args: p.args, actorArgs: p.actorArgs, world: p.world })),
|
|
104
|
+
invoke_static_function: bp("Call a static UFUNCTION on a UBlueprintFunctionLibrary (no actor instance). invoke_function needs an actor/component target; this targets the library class CDO instead, so it reaches static *_BlueprintOnly libraries (Voxel sculpt/query/stamp), GeometryScript, Kismet math, any function library. Params: className (short name or /Script/Module.Class path), functionName, args? (name -> JSON value, same marshalling as invoke_function), actorArgs? (name -> actor label for UObject* params that are actors, e.g. the sculpt actor), worldContextParam? (name of a UObject* param to fill with the editor/PIE world; auto-detected for params named WorldContextObject), world? (editor|pie). Returns return/out params under returnValues. Discover libraries + functions with list_function_libraries.", "invoke_static_function", (p) => ({ className: p.className, functionName: p.functionName, args: p.args, actorArgs: p.actorArgs, worldContextParam: p.worldContextParam, world: p.world })),
|
|
104
105
|
list_function_libraries: bp("Enumerate UBlueprintFunctionLibrary subclasses on this build. Filter by name (case-insensitive substring, e.g. 'GeometryScript' / 'Kismet' / 'Animation'). Returns name, module, and (by default) every static BlueprintCallable function on the library with its tooltip. Use to discover what's available for editor.invoke_function (#455). Params: pattern?, includeFunctions?", "list_function_libraries", (p) => ({ pattern: p.pattern, includeFunctions: p.includeFunctions })),
|
|
105
106
|
set_pie_time_scale: bp("Fast-forward PIE game time. Params: factor (>0). Raises WorldSettings caps and calls SetGlobalTimeDilation.", "set_pie_time_scale"),
|
|
106
107
|
hot_reload: bp("Hot reload C++", "hot_reload"),
|
|
@@ -157,6 +158,8 @@ export const editorTool = categoryTool("editor", "Editor commands, Python execut
|
|
|
157
158
|
functionName: z.string().optional(),
|
|
158
159
|
component: z.string().optional().describe("invoke_function: optional component subobject name to call the function on instead of the actor (#382)"),
|
|
159
160
|
actorArgs: z.record(z.string()).optional().describe("invoke_function: map of UObject* parameter name to actor label, resolved against live actors in the active world (#383)"),
|
|
161
|
+
className: z.string().optional().describe("invoke_static_function: UBlueprintFunctionLibrary class - short name or /Script/Module.Class path"),
|
|
162
|
+
worldContextParam: z.string().optional().describe("invoke_static_function: name of a UObject* param to fill with the editor/PIE world (auto-detected for params named WorldContextObject)"),
|
|
160
163
|
world: z.string().optional().describe("invoke_function world scope: editor (default) | pie"),
|
|
161
164
|
propertyName: z.string().optional(),
|
|
162
165
|
value: z.unknown().optional(),
|
package/dist/tools/editor.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"editor.js","sourceRoot":"","sources":["../../src/tools/editor.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"editor.js","sourceRoot":"","sources":["../../src/tools/editor.ts"],"names":[],"mappings":"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"}
|
package/dist/tools/gameplay.js
CHANGED
|
@@ -36,7 +36,7 @@ export const gameplayTool = categoryTool("gameplay", "Gameplay systems: physics,
|
|
|
36
36
|
create_eqs_query: bp("Create EQS query. Params: name, packagePath?", "create_eqs_query"),
|
|
37
37
|
list_eqs_queries: bp("List EQS queries. Params: directory?", "list_eqs_queries"),
|
|
38
38
|
add_perception: bp("Add AIPerceptionComponent. Params: blueprintPath, senses?", "add_perception_component"),
|
|
39
|
-
configure_sense: bp("
|
|
39
|
+
configure_sense: bp("Add + configure an AI perception sense config on the blueprint's AIPerceptionComponent. Params: blueprintPath, senseType (Sight|Hearing|Damage|Touch|Team|Prediction|Blueprint), settings? ({SightRadius: ...}), componentName?", "configure_ai_perception_sense"),
|
|
40
40
|
create_state_tree: bp("Create StateTree. Params: name, packagePath?", "create_state_tree"),
|
|
41
41
|
list_state_trees: bp("List StateTrees. Params: directory?", "list_state_trees"),
|
|
42
42
|
add_state_tree_component: bp("Add StateTreeComponent. Params: blueprintPath", "add_state_tree_component"),
|
|
@@ -93,7 +93,8 @@ export const gameplayTool = categoryTool("gameplay", "Gameplay systems: physics,
|
|
|
93
93
|
instanceProperties: z.record(z.unknown()).optional().describe("Property writes to apply to a freshly-spawned behavior instance"),
|
|
94
94
|
senses: z.array(z.string()).optional(),
|
|
95
95
|
senseType: z.string().optional(),
|
|
96
|
-
settings: z.record(z.unknown()).optional(),
|
|
96
|
+
settings: z.record(z.unknown()).optional().describe("configure_sense: per-sense property writes (e.g. {SightRadius: 1500})"),
|
|
97
|
+
componentName: z.string().optional().describe("configure_sense: target AIPerceptionComponent name (default: first found)"),
|
|
97
98
|
parentClass: z.string().optional(),
|
|
98
99
|
defaults: z.record(z.string()).optional(),
|
|
99
100
|
gameModePath: z.string().optional(),
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"gameplay.js","sourceRoot":"","sources":["../../src/tools/gameplay.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"gameplay.js","sourceRoot":"","sources":["../../src/tools/gameplay.ts"],"names":[],"mappings":"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"}
|
package/dist/ue-mcp.default.yml
CHANGED
|
@@ -2249,6 +2249,12 @@ tasks:
|
|
|
2249
2249
|
description: "Call a BlueprintCallable / Exec UFUNCTION on a target actor or one of its components. Params: actorLabel, functionName, component? (component subobject name; redirects target from the actor to that component, #382), args? (object), actorArgs? (object mapping UObject* parameter name to actor label, resolved against live actors in the active world; #383), world? (editor|pie). Returns out/return params (#228/#229)"
|
|
2250
2250
|
options:
|
|
2251
2251
|
method: invoke_function
|
|
2252
|
+
editor.invoke_static_function:
|
|
2253
|
+
class_path: ue-mcp.bridge
|
|
2254
|
+
group: editor
|
|
2255
|
+
description: "Call a static UFUNCTION on a UBlueprintFunctionLibrary (no actor instance). invoke_function needs an actor/component target; this targets the library class CDO instead, so it reaches static *_BlueprintOnly libraries (Voxel sculpt/query/stamp), GeometryScript, Kismet math, any function library. Params: className (short name or /Script/Module.Class path), functionName, args? (name -> JSON value, same marshalling as invoke_function), actorArgs? (name -> actor label for UObject* params that are actors, e.g. the sculpt actor), worldContextParam? (name of a UObject* param to fill with the editor/PIE world; auto-detected for params named WorldContextObject), world? (editor|pie). Returns return/out params under returnValues. Discover libraries + functions with list_function_libraries."
|
|
2256
|
+
options:
|
|
2257
|
+
method: invoke_static_function
|
|
2252
2258
|
editor.list_function_libraries:
|
|
2253
2259
|
class_path: ue-mcp.bridge
|
|
2254
2260
|
group: editor
|
|
@@ -2760,7 +2766,7 @@ tasks:
|
|
|
2760
2766
|
gameplay.configure_sense:
|
|
2761
2767
|
class_path: ue-mcp.bridge
|
|
2762
2768
|
group: gameplay
|
|
2763
|
-
description: "
|
|
2769
|
+
description: "Add + configure an AI perception sense config on the blueprint's AIPerceptionComponent. Params: blueprintPath, senseType (Sight|Hearing|Damage|Touch|Team|Prediction|Blueprint), settings? ({SightRadius: ...}), componentName?"
|
|
2764
2770
|
options:
|
|
2765
2771
|
method: configure_ai_perception_sense
|
|
2766
2772
|
gameplay.create_state_tree:
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "ue-mcp",
|
|
3
|
-
"version": "1.0.
|
|
4
|
-
"description": "Unreal Engine MCP server - 21 tools,
|
|
3
|
+
"version": "1.0.73",
|
|
4
|
+
"description": "Unreal Engine MCP server - 21 tools, 548+ actions for AI-driven editor control",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "dist/index.js",
|
|
7
7
|
"exports": {
|
package/plugin/ue_mcp_bridge/Source/UE_MCP_Bridge/Private/Handlers/AnimationHandlers_Sequence.cpp
CHANGED
|
@@ -666,19 +666,31 @@ TSharedPtr<FJsonValue> FAnimationHandlers::ListAnimModifiers(const TSharedPtr<FJ
|
|
|
666
666
|
if (!Seq) return MCPError(FString::Printf(TEXT("AnimSequence not found: %s"), *AssetPath));
|
|
667
667
|
|
|
668
668
|
TArray<TSharedPtr<FJsonValue>> Arr;
|
|
669
|
-
//
|
|
670
|
-
//
|
|
671
|
-
|
|
669
|
+
// AppliedAnimationModifiers is an editor-only TArray<UAnimationModifier*> on the
|
|
670
|
+
// AnimSequence. Enumerate it via reflection (portable across module linkage):
|
|
671
|
+
// each element is an instanced UAnimationModifier subobject.
|
|
672
|
+
FArrayProperty* ModifiersProp = CastField<FArrayProperty>(
|
|
673
|
+
Seq->GetClass()->FindPropertyByName(TEXT("AppliedAnimationModifiers")));
|
|
672
674
|
if (ModifiersProp)
|
|
673
675
|
{
|
|
674
|
-
|
|
675
|
-
|
|
676
|
-
|
|
676
|
+
FObjectPropertyBase* ElemProp = CastField<FObjectPropertyBase>(ModifiersProp->Inner);
|
|
677
|
+
FScriptArrayHelper Helper(ModifiersProp, ModifiersProp->ContainerPtrToValuePtr<void>(Seq));
|
|
678
|
+
for (int32 i = 0; i < Helper.Num(); ++i)
|
|
679
|
+
{
|
|
680
|
+
UObject* Modifier = ElemProp ? ElemProp->GetObjectPropertyValue(Helper.GetRawPtr(i)) : nullptr;
|
|
681
|
+
if (!Modifier) continue;
|
|
682
|
+
TSharedPtr<FJsonObject> M = MakeShared<FJsonObject>();
|
|
683
|
+
M->SetStringField(TEXT("class"), Modifier->GetClass()->GetName());
|
|
684
|
+
M->SetStringField(TEXT("classPath"), Modifier->GetClass()->GetPathName());
|
|
685
|
+
M->SetStringField(TEXT("name"), Modifier->GetName());
|
|
686
|
+
Arr.Add(MakeShared<FJsonValueObject>(M));
|
|
687
|
+
}
|
|
677
688
|
}
|
|
678
689
|
|
|
679
690
|
TSharedPtr<FJsonObject> Result = MCPSuccess();
|
|
680
691
|
Result->SetStringField(TEXT("assetPath"), AssetPath);
|
|
681
692
|
Result->SetArrayField(TEXT("modifiers"), Arr);
|
|
693
|
+
Result->SetNumberField(TEXT("count"), Arr.Num());
|
|
682
694
|
return MCPResult(Result);
|
|
683
695
|
}
|
|
684
696
|
|
|
@@ -114,6 +114,7 @@ void FEditorHandlers::RegisterHandlers(FMCPHandlerRegistry& Registry)
|
|
|
114
114
|
Registry.RegisterHandler(TEXT("capture_scene_png"), &CaptureScenePng);
|
|
115
115
|
Registry.RegisterHandler(TEXT("get_pie_pawn"), &GetPiePawn);
|
|
116
116
|
Registry.RegisterHandler(TEXT("invoke_function"), &InvokeFunction);
|
|
117
|
+
Registry.RegisterHandler(TEXT("invoke_static_function"), &InvokeStaticFunction);
|
|
117
118
|
Registry.RegisterHandler(TEXT("configure_pie"), &ConfigurePie);
|
|
118
119
|
Registry.RegisterHandler(TEXT("get_pie_config"), &GetPieConfig);
|
|
119
120
|
// #455: discover UBlueprintFunctionLibrary classes (GeometryScript,
|
|
@@ -164,6 +164,8 @@ private:
|
|
|
164
164
|
// #228/#229: PIE pawn lookup + UFUNCTION invocation for PIE actors
|
|
165
165
|
static TSharedPtr<FJsonValue> GetPiePawn(const TSharedPtr<FJsonObject>& Params);
|
|
166
166
|
static TSharedPtr<FJsonValue> InvokeFunction(const TSharedPtr<FJsonObject>& Params);
|
|
167
|
+
// Call a static UFUNCTION on a UBlueprintFunctionLibrary (no actor instance).
|
|
168
|
+
static TSharedPtr<FJsonValue> InvokeStaticFunction(const TSharedPtr<FJsonObject>& Params);
|
|
167
169
|
// #384: configure ULevelEditorPlaySettings (multi-client PIE, net mode, etc.)
|
|
168
170
|
static TSharedPtr<FJsonValue> ConfigurePie(const TSharedPtr<FJsonObject>& Params);
|
|
169
171
|
static TSharedPtr<FJsonValue> GetPieConfig(const TSharedPtr<FJsonObject>& Params);
|
|
@@ -953,6 +953,185 @@ TSharedPtr<FJsonValue> FEditorHandlers::InvokeFunction(const TSharedPtr<FJsonObj
|
|
|
953
953
|
return MCPResult(Result);
|
|
954
954
|
}
|
|
955
955
|
|
|
956
|
+
// Call a static UFUNCTION on a UBlueprintFunctionLibrary, with no actor
|
|
957
|
+
// instance. invoke_function can only reach functions that live on an actor or
|
|
958
|
+
// component; the static *_BlueprintOnly libraries (Voxel sculpt/query/stamp,
|
|
959
|
+
// GeometryScript, Kismet math, etc.) have no instance to target, which
|
|
960
|
+
// previously forced execute_python. This resolves the library class, runs the
|
|
961
|
+
// call on its CDO, and reuses the same arg/return marshalling as InvokeFunction.
|
|
962
|
+
//
|
|
963
|
+
// Params: className (short name or /Script/Module.Class path), functionName,
|
|
964
|
+
// args? (name -> JSON value), actorArgs? (name -> actor label, for UObject*
|
|
965
|
+
// params that are actors), worldContextParam? (name of a UObject* param to fill
|
|
966
|
+
// with the editor/PIE world; auto-detected for params named WorldContextObject),
|
|
967
|
+
// world? (editor|pie). Returns return/out params under returnValues.
|
|
968
|
+
TSharedPtr<FJsonValue> FEditorHandlers::InvokeStaticFunction(const TSharedPtr<FJsonObject>& Params)
|
|
969
|
+
{
|
|
970
|
+
FString ClassName;
|
|
971
|
+
if (auto Err = RequireString(Params, TEXT("className"), ClassName)) return Err;
|
|
972
|
+
FString FunctionName;
|
|
973
|
+
if (auto Err = RequireString(Params, TEXT("functionName"), FunctionName)) return Err;
|
|
974
|
+
|
|
975
|
+
const FString WorldScope = OptionalString(Params, TEXT("world"), TEXT("editor")).ToLower();
|
|
976
|
+
UWorld* World = nullptr;
|
|
977
|
+
if (WorldScope == TEXT("pie"))
|
|
978
|
+
{
|
|
979
|
+
FWorldContext* PieCtx = GEditor ? GEditor->GetPIEWorldContext() : nullptr;
|
|
980
|
+
World = PieCtx ? PieCtx->World() : nullptr;
|
|
981
|
+
if (!World) return MCPError(TEXT("PIE not running - cannot invoke against PIE world"));
|
|
982
|
+
}
|
|
983
|
+
else
|
|
984
|
+
{
|
|
985
|
+
World = GEditor ? GEditor->GetEditorWorldContext().World() : nullptr;
|
|
986
|
+
if (!World) return MCPError(TEXT("No editor world available"));
|
|
987
|
+
}
|
|
988
|
+
|
|
989
|
+
// Resolve the function-library class: a /Script/Module.Class path, or a bare
|
|
990
|
+
// class name (with or without the leading U).
|
|
991
|
+
UClass* LibClass = nullptr;
|
|
992
|
+
if (ClassName.Contains(TEXT(".")) || ClassName.StartsWith(TEXT("/")))
|
|
993
|
+
{
|
|
994
|
+
LibClass = LoadObject<UClass>(nullptr, *ClassName);
|
|
995
|
+
}
|
|
996
|
+
if (!LibClass)
|
|
997
|
+
{
|
|
998
|
+
FString Bare = ClassName;
|
|
999
|
+
Bare.RemoveFromStart(TEXT("U"));
|
|
1000
|
+
LibClass = FindFirstObject<UClass>(*Bare, EFindFirstObjectOptions::NativeFirst);
|
|
1001
|
+
}
|
|
1002
|
+
if (!LibClass)
|
|
1003
|
+
{
|
|
1004
|
+
return MCPError(FString::Printf(TEXT("Function library class not found: %s"), *ClassName));
|
|
1005
|
+
}
|
|
1006
|
+
|
|
1007
|
+
UObject* CDO = LibClass->GetDefaultObject();
|
|
1008
|
+
if (!CDO) return MCPError(FString::Printf(TEXT("No CDO for class %s"), *LibClass->GetName()));
|
|
1009
|
+
|
|
1010
|
+
UFunction* Func = LibClass->FindFunctionByName(FName(*FunctionName));
|
|
1011
|
+
if (!Func) return MCPError(FString::Printf(TEXT("Static function '%s' not found on %s"), *FunctionName, *LibClass->GetName()));
|
|
1012
|
+
|
|
1013
|
+
TArray<uint8> ParamBuf;
|
|
1014
|
+
ParamBuf.SetNumZeroed(Func->ParmsSize);
|
|
1015
|
+
for (TFieldIterator<FProperty> It(Func); It && (It->PropertyFlags & CPF_Parm); ++It)
|
|
1016
|
+
{
|
|
1017
|
+
It->InitializeValue_InContainer(ParamBuf.GetData());
|
|
1018
|
+
}
|
|
1019
|
+
|
|
1020
|
+
auto Cleanup = [&]()
|
|
1021
|
+
{
|
|
1022
|
+
for (TFieldIterator<FProperty> It(Func); It && (It->PropertyFlags & CPF_Parm); ++It)
|
|
1023
|
+
{
|
|
1024
|
+
It->DestroyValue_InContainer(ParamBuf.GetData());
|
|
1025
|
+
}
|
|
1026
|
+
};
|
|
1027
|
+
|
|
1028
|
+
const TSharedPtr<FJsonObject>* ArgObj = nullptr;
|
|
1029
|
+
Params->TryGetObjectField(TEXT("args"), ArgObj);
|
|
1030
|
+
if (ArgObj && (*ArgObj).IsValid())
|
|
1031
|
+
{
|
|
1032
|
+
for (TFieldIterator<FProperty> It(Func); It && (It->PropertyFlags & CPF_Parm); ++It)
|
|
1033
|
+
{
|
|
1034
|
+
FProperty* P = *It;
|
|
1035
|
+
if (P->PropertyFlags & CPF_ReturnParm) continue;
|
|
1036
|
+
if ((P->PropertyFlags & CPF_OutParm) && !(P->PropertyFlags & CPF_ReferenceParm)) continue;
|
|
1037
|
+
TSharedPtr<FJsonValue> Val = (*ArgObj)->TryGetField(P->GetName());
|
|
1038
|
+
if (!Val.IsValid()) continue;
|
|
1039
|
+
void* PtrAddr = P->ContainerPtrToValuePtr<void>(ParamBuf.GetData());
|
|
1040
|
+
FString E;
|
|
1041
|
+
if (!MCPJsonProperty::SetJsonOnProperty(P, PtrAddr, Val, E))
|
|
1042
|
+
{
|
|
1043
|
+
Cleanup();
|
|
1044
|
+
return MCPError(FString::Printf(TEXT("Argument '%s': %s"), *P->GetName(), *E));
|
|
1045
|
+
}
|
|
1046
|
+
}
|
|
1047
|
+
}
|
|
1048
|
+
|
|
1049
|
+
// actorArgs: UObject* params resolved from live actor labels (e.g. the sculpt
|
|
1050
|
+
// actor that a Voxel sculpt op operates on).
|
|
1051
|
+
const TSharedPtr<FJsonObject>* ActorArgObj = nullptr;
|
|
1052
|
+
Params->TryGetObjectField(TEXT("actorArgs"), ActorArgObj);
|
|
1053
|
+
if (ActorArgObj && (*ActorArgObj).IsValid())
|
|
1054
|
+
{
|
|
1055
|
+
for (TFieldIterator<FProperty> It(Func); It && (It->PropertyFlags & CPF_Parm); ++It)
|
|
1056
|
+
{
|
|
1057
|
+
FProperty* P = *It;
|
|
1058
|
+
if (P->PropertyFlags & CPF_ReturnParm) continue;
|
|
1059
|
+
FObjectProperty* OP = CastField<FObjectProperty>(P);
|
|
1060
|
+
if (!OP) continue;
|
|
1061
|
+
FString ActorArgLabel;
|
|
1062
|
+
if (!(*ActorArgObj)->TryGetStringField(P->GetName(), ActorArgLabel) || ActorArgLabel.IsEmpty()) continue;
|
|
1063
|
+
AActor* RefActor = FindActorByLabel(World, ActorArgLabel);
|
|
1064
|
+
if (!RefActor)
|
|
1065
|
+
{
|
|
1066
|
+
Cleanup();
|
|
1067
|
+
return MCPError(FString::Printf(TEXT("actorArgs[%s]: actor '%s' not found in %s world"), *P->GetName(), *ActorArgLabel, WorldScope == TEXT("pie") ? TEXT("PIE") : TEXT("editor")));
|
|
1068
|
+
}
|
|
1069
|
+
if (!RefActor->IsA(OP->PropertyClass))
|
|
1070
|
+
{
|
|
1071
|
+
if (OP->PropertyClass->IsChildOf(UActorComponent::StaticClass()))
|
|
1072
|
+
{
|
|
1073
|
+
UActorComponent* MatchedComp = nullptr;
|
|
1074
|
+
for (UActorComponent* Comp : RefActor->GetComponents())
|
|
1075
|
+
{
|
|
1076
|
+
if (Comp && Comp->IsA(OP->PropertyClass)) { MatchedComp = Comp; break; }
|
|
1077
|
+
}
|
|
1078
|
+
if (MatchedComp)
|
|
1079
|
+
{
|
|
1080
|
+
OP->SetObjectPropertyValue(P->ContainerPtrToValuePtr<void>(ParamBuf.GetData()), MatchedComp);
|
|
1081
|
+
continue;
|
|
1082
|
+
}
|
|
1083
|
+
}
|
|
1084
|
+
Cleanup();
|
|
1085
|
+
return MCPError(FString::Printf(TEXT("actorArgs[%s]: actor '%s' (%s) is not assignable to expected type %s"), *P->GetName(), *ActorArgLabel, *RefActor->GetClass()->GetName(), *OP->PropertyClass->GetName()));
|
|
1086
|
+
}
|
|
1087
|
+
OP->SetObjectPropertyValue(P->ContainerPtrToValuePtr<void>(ParamBuf.GetData()), RefActor);
|
|
1088
|
+
}
|
|
1089
|
+
}
|
|
1090
|
+
|
|
1091
|
+
// World-context injection: static library functions commonly take a UObject*
|
|
1092
|
+
// WorldContextObject. Fill any unset object param matching worldContextParam
|
|
1093
|
+
// (or named WorldContextObject) with the resolved world.
|
|
1094
|
+
const FString WcParam = OptionalString(Params, TEXT("worldContextParam"), TEXT(""));
|
|
1095
|
+
for (TFieldIterator<FProperty> It(Func); It && (It->PropertyFlags & CPF_Parm); ++It)
|
|
1096
|
+
{
|
|
1097
|
+
FProperty* P = *It;
|
|
1098
|
+
if (P->PropertyFlags & CPF_ReturnParm) continue;
|
|
1099
|
+
FObjectProperty* OP = CastField<FObjectProperty>(P);
|
|
1100
|
+
if (!OP) continue;
|
|
1101
|
+
const FString PName = P->GetName();
|
|
1102
|
+
const bool bIsWc = (!WcParam.IsEmpty() && PName == WcParam) || PName.Contains(TEXT("WorldContext"));
|
|
1103
|
+
if (!bIsWc) continue;
|
|
1104
|
+
void* Addr = P->ContainerPtrToValuePtr<void>(ParamBuf.GetData());
|
|
1105
|
+
if (OP->GetObjectPropertyValue(Addr) != nullptr) continue;
|
|
1106
|
+
if (World->IsA(OP->PropertyClass) || OP->PropertyClass == UObject::StaticClass())
|
|
1107
|
+
{
|
|
1108
|
+
OP->SetObjectPropertyValue(Addr, World);
|
|
1109
|
+
}
|
|
1110
|
+
}
|
|
1111
|
+
|
|
1112
|
+
CDO->ProcessEvent(Func, ParamBuf.GetData());
|
|
1113
|
+
|
|
1114
|
+
auto Result = MCPSuccess();
|
|
1115
|
+
Result->SetStringField(TEXT("className"), LibClass->GetName());
|
|
1116
|
+
Result->SetStringField(TEXT("functionName"), FunctionName);
|
|
1117
|
+
|
|
1118
|
+
TSharedPtr<FJsonObject> OutVals = MakeShared<FJsonObject>();
|
|
1119
|
+
for (TFieldIterator<FProperty> It(Func); It && (It->PropertyFlags & CPF_Parm); ++It)
|
|
1120
|
+
{
|
|
1121
|
+
FProperty* P = *It;
|
|
1122
|
+
if (P->PropertyFlags & (CPF_ReturnParm | CPF_OutParm))
|
|
1123
|
+
{
|
|
1124
|
+
FString S;
|
|
1125
|
+
P->ExportTextItem_Direct(S, P->ContainerPtrToValuePtr<void>(ParamBuf.GetData()), nullptr, CDO, PPF_None);
|
|
1126
|
+
OutVals->SetStringField(P->GetName(), S);
|
|
1127
|
+
}
|
|
1128
|
+
}
|
|
1129
|
+
Result->SetObjectField(TEXT("returnValues"), OutVals);
|
|
1130
|
+
|
|
1131
|
+
Cleanup();
|
|
1132
|
+
return MCPResult(Result);
|
|
1133
|
+
}
|
|
1134
|
+
|
|
956
1135
|
// #384: read/write ULevelEditorPlaySettings via reflection. Direct member
|
|
957
1136
|
// access is blocked because the fields are private; FProperty lookup gives
|
|
958
1137
|
// us the same access path Python's set_editor_property uses.
|
|
@@ -1590,19 +1590,112 @@ TSharedPtr<FJsonValue> FGameplayHandlers::ConfigureAiPerceptionSense(const TShar
|
|
|
1590
1590
|
SenseMap.Add(TEXT("Damage"), TEXT("AISenseConfig_Damage"));
|
|
1591
1591
|
SenseMap.Add(TEXT("Touch"), TEXT("AISenseConfig_Touch"));
|
|
1592
1592
|
SenseMap.Add(TEXT("Team"), TEXT("AISenseConfig_Team"));
|
|
1593
|
+
SenseMap.Add(TEXT("Prediction"), TEXT("AISenseConfig_Prediction"));
|
|
1594
|
+
SenseMap.Add(TEXT("Blueprint"), TEXT("AISenseConfig_Blueprint"));
|
|
1593
1595
|
|
|
1594
1596
|
FString* SenseClassName = SenseMap.Find(SenseType);
|
|
1595
1597
|
if (!SenseClassName)
|
|
1596
1598
|
{
|
|
1597
|
-
return MCPError(FString::Printf(TEXT("Unknown sense type: %s. Available: Sight, Hearing, Damage, Touch, Team"), *SenseType));
|
|
1599
|
+
return MCPError(FString::Printf(TEXT("Unknown sense type: %s. Available: Sight, Hearing, Damage, Touch, Team, Prediction, Blueprint"), *SenseType));
|
|
1598
1600
|
}
|
|
1599
1601
|
|
|
1602
|
+
UClass* SenseCfgClass = FindObject<UClass>(nullptr, *FString::Printf(TEXT("/Script/AIModule.%s"), **SenseClassName));
|
|
1603
|
+
if (!SenseCfgClass)
|
|
1604
|
+
{
|
|
1605
|
+
return MCPError(FString::Printf(TEXT("Sense config class not found: %s. Enable AIModule."), **SenseClassName));
|
|
1606
|
+
}
|
|
1607
|
+
|
|
1608
|
+
UBlueprint* BP = Cast<UBlueprint>(UEditorAssetLibrary::LoadAsset(BPPath));
|
|
1609
|
+
if (!BP) return MCPError(FString::Printf(TEXT("Blueprint not found: %s"), *BPPath));
|
|
1610
|
+
|
|
1611
|
+
// Locate the AIPerceptionComponent template on the construction script.
|
|
1612
|
+
UClass* PercClass = FindObject<UClass>(nullptr, TEXT("/Script/AIModule.AIPerceptionComponent"));
|
|
1613
|
+
const FString CompName = OptionalString(Params, TEXT("componentName"));
|
|
1614
|
+
UObject* PercTemplate = nullptr;
|
|
1615
|
+
FString ResolvedComp;
|
|
1616
|
+
if (BP->SimpleConstructionScript)
|
|
1617
|
+
{
|
|
1618
|
+
for (USCS_Node* N : BP->SimpleConstructionScript->GetAllNodes())
|
|
1619
|
+
{
|
|
1620
|
+
if (!N || !N->ComponentTemplate) continue;
|
|
1621
|
+
const bool bIsPerc = PercClass
|
|
1622
|
+
? N->ComponentTemplate->IsA(PercClass)
|
|
1623
|
+
: N->ComponentTemplate->GetClass()->GetName().Contains(TEXT("AIPerception"));
|
|
1624
|
+
if (!bIsPerc) continue;
|
|
1625
|
+
if (!CompName.IsEmpty() && N->GetVariableName() != FName(*CompName)) continue;
|
|
1626
|
+
PercTemplate = N->ComponentTemplate;
|
|
1627
|
+
ResolvedComp = N->GetVariableName().ToString();
|
|
1628
|
+
break;
|
|
1629
|
+
}
|
|
1630
|
+
}
|
|
1631
|
+
if (!PercTemplate)
|
|
1632
|
+
{
|
|
1633
|
+
return MCPError(TEXT("No AIPerceptionComponent on the blueprint - run add_perception_component first"));
|
|
1634
|
+
}
|
|
1635
|
+
|
|
1636
|
+
// Add the sense config to SensesConfig via reflection (avoids linking AIModule
|
|
1637
|
+
// headers and matches what the editor's '+' button does).
|
|
1638
|
+
FArrayProperty* SensesProp = CastField<FArrayProperty>(PercTemplate->GetClass()->FindPropertyByName(TEXT("SensesConfig")));
|
|
1639
|
+
FObjectPropertyBase* ElemProp = SensesProp ? CastField<FObjectPropertyBase>(SensesProp->Inner) : nullptr;
|
|
1640
|
+
if (!SensesProp || !ElemProp)
|
|
1641
|
+
{
|
|
1642
|
+
return MCPError(TEXT("SensesConfig object-array property not found on AIPerceptionComponent (engine drift)"));
|
|
1643
|
+
}
|
|
1644
|
+
|
|
1645
|
+
FScriptArrayHelper Helper(SensesProp, SensesProp->ContainerPtrToValuePtr<void>(PercTemplate));
|
|
1646
|
+
for (int32 i = 0; i < Helper.Num(); ++i)
|
|
1647
|
+
{
|
|
1648
|
+
UObject* Existing = ElemProp->GetObjectPropertyValue(Helper.GetRawPtr(i));
|
|
1649
|
+
if (Existing && Existing->GetClass() == SenseCfgClass)
|
|
1650
|
+
{
|
|
1651
|
+
auto Ex = MCPSuccess();
|
|
1652
|
+
MCPSetExisted(Ex);
|
|
1653
|
+
Ex->SetStringField(TEXT("blueprintPath"), BPPath);
|
|
1654
|
+
Ex->SetStringField(TEXT("component"), ResolvedComp);
|
|
1655
|
+
Ex->SetStringField(TEXT("senseType"), SenseType);
|
|
1656
|
+
Ex->SetStringField(TEXT("senseConfig"), SenseCfgClass->GetName());
|
|
1657
|
+
return MCPResult(Ex);
|
|
1658
|
+
}
|
|
1659
|
+
}
|
|
1660
|
+
|
|
1661
|
+
UObject* Cfg = NewObject<UObject>(PercTemplate, SenseCfgClass, NAME_None, RF_Transactional);
|
|
1662
|
+
const int32 NewIdx = Helper.AddValue();
|
|
1663
|
+
ElemProp->SetObjectPropertyValue(Helper.GetRawPtr(NewIdx), Cfg);
|
|
1664
|
+
|
|
1665
|
+
// Optional per-sense tuning (e.g. { "SightRadius": 1500 }).
|
|
1666
|
+
TArray<FString> AppliedProps;
|
|
1667
|
+
const TSharedPtr<FJsonObject>* PropsObj = nullptr;
|
|
1668
|
+
if (Params->TryGetObjectField(TEXT("settings"), PropsObj) && PropsObj && (*PropsObj).IsValid())
|
|
1669
|
+
{
|
|
1670
|
+
for (const auto& KV : (*PropsObj)->Values)
|
|
1671
|
+
{
|
|
1672
|
+
FProperty* P = Cfg->GetClass()->FindPropertyByName(FName(*KV.Key));
|
|
1673
|
+
if (!P) continue;
|
|
1674
|
+
FString PErr;
|
|
1675
|
+
if (MCPJsonProperty::SetJsonOnProperty(P, P->ContainerPtrToValuePtr<void>(Cfg), KV.Value, PErr))
|
|
1676
|
+
{
|
|
1677
|
+
AppliedProps.Add(KV.Key);
|
|
1678
|
+
}
|
|
1679
|
+
}
|
|
1680
|
+
}
|
|
1681
|
+
|
|
1682
|
+
FKismetEditorUtilities::CompileBlueprint(BP);
|
|
1683
|
+
SaveAssetPackage(BP);
|
|
1684
|
+
|
|
1600
1685
|
auto Result = MCPSuccess();
|
|
1686
|
+
MCPSetCreated(Result);
|
|
1601
1687
|
Result->SetStringField(TEXT("blueprintPath"), BPPath);
|
|
1688
|
+
Result->SetStringField(TEXT("component"), ResolvedComp);
|
|
1602
1689
|
Result->SetStringField(TEXT("senseType"), SenseType);
|
|
1603
|
-
Result->SetStringField(TEXT("
|
|
1604
|
-
|
|
1690
|
+
Result->SetStringField(TEXT("senseConfig"), Cfg->GetClass()->GetName());
|
|
1691
|
+
if (AppliedProps.Num() > 0)
|
|
1692
|
+
{
|
|
1693
|
+
TArray<TSharedPtr<FJsonValue>> A;
|
|
1694
|
+
for (const FString& S : AppliedProps) A.Add(MakeShared<FJsonValueString>(S));
|
|
1695
|
+
Result->SetArrayField(TEXT("appliedProperties"), A);
|
|
1696
|
+
}
|
|
1605
1697
|
|
|
1698
|
+
// Rollback: removing the sense again isn't a first-class action; report intent.
|
|
1606
1699
|
return MCPResult(Result);
|
|
1607
1700
|
}
|
|
1608
1701
|
|
|
@@ -24,6 +24,37 @@
|
|
|
24
24
|
#include "AbilitySystemComponent.h"
|
|
25
25
|
#include "AttributeSet.h"
|
|
26
26
|
#include "Engine/DataTable.h"
|
|
27
|
+
#include "GameplayEffect.h"
|
|
28
|
+
#include "GameplayEffectTypes.h"
|
|
29
|
+
#include "ScalableFloat.h"
|
|
30
|
+
#include "GameplayTagsManager.h"
|
|
31
|
+
|
|
32
|
+
// Resolve a FGameplayAttribute by name across every loaded AttributeSet
|
|
33
|
+
// subclass. Accepts a bare property name ("Health") or a qualified
|
|
34
|
+
// "SetClassSubstring.Attribute". Returns an invalid attribute on miss.
|
|
35
|
+
static FGameplayAttribute FindGameplayAttributeByName(const FString& Name)
|
|
36
|
+
{
|
|
37
|
+
FString SetFilter, AttrName = Name;
|
|
38
|
+
if (Name.Contains(TEXT(".")))
|
|
39
|
+
{
|
|
40
|
+
Name.Split(TEXT("."), &SetFilter, &AttrName);
|
|
41
|
+
}
|
|
42
|
+
for (TObjectIterator<UClass> It; It; ++It)
|
|
43
|
+
{
|
|
44
|
+
UClass* C = *It;
|
|
45
|
+
if (C == UAttributeSet::StaticClass() || !C->IsChildOf(UAttributeSet::StaticClass())) continue;
|
|
46
|
+
if (!SetFilter.IsEmpty() && !C->GetName().Contains(SetFilter)) continue;
|
|
47
|
+
for (TFieldIterator<FProperty> P(C); P; ++P)
|
|
48
|
+
{
|
|
49
|
+
FStructProperty* SP = CastField<FStructProperty>(*P);
|
|
50
|
+
if (SP && SP->Struct == FGameplayAttributeData::StaticStruct() && SP->GetName() == AttrName)
|
|
51
|
+
{
|
|
52
|
+
return FGameplayAttribute(SP);
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
return FGameplayAttribute();
|
|
57
|
+
}
|
|
27
58
|
|
|
28
59
|
void FGasHandlers::RegisterHandlers(FMCPHandlerRegistry& Registry)
|
|
29
60
|
{
|
|
@@ -327,38 +358,70 @@ TSharedPtr<FJsonValue> FGasHandlers::SetAbilityTags(const TSharedPtr<FJsonObject
|
|
|
327
358
|
UObject* CDO = LoadBlueprintCDO<UObject>(AbilityPath, CdoErr);
|
|
328
359
|
if (!CDO) return CdoErr;
|
|
329
360
|
|
|
330
|
-
|
|
361
|
+
// param name -> FGameplayTagContainer UPROPERTY on UGameplayAbility.
|
|
362
|
+
const TArray<TPair<FString, FString>> TagMap = {
|
|
363
|
+
{TEXT("ability_tags"), TEXT("AbilityTags")},
|
|
364
|
+
{TEXT("cancel_abilities_with_tag"), TEXT("CancelAbilitiesWithTag")},
|
|
365
|
+
{TEXT("block_abilities_with_tag"), TEXT("BlockAbilitiesWithTag")},
|
|
366
|
+
{TEXT("activation_required_tags"), TEXT("ActivationRequiredTags")},
|
|
367
|
+
{TEXT("activation_blocked_tags"), TEXT("ActivationBlockedTags")},
|
|
368
|
+
};
|
|
331
369
|
|
|
332
|
-
|
|
333
|
-
TArray<FString>
|
|
334
|
-
|
|
370
|
+
TSharedPtr<FJsonObject> Applied = MakeShared<FJsonObject>();
|
|
371
|
+
TArray<FString> Unsupported;
|
|
372
|
+
bool bAnyApplied = false;
|
|
335
373
|
|
|
336
|
-
for (
|
|
374
|
+
for (const TPair<FString, FString>& Entry : TagMap)
|
|
337
375
|
{
|
|
338
|
-
const TArray<TSharedPtr<FJsonValue>>* TagArray;
|
|
339
|
-
if (Params->TryGetArrayField(*
|
|
376
|
+
const TArray<TSharedPtr<FJsonValue>>* TagArray = nullptr;
|
|
377
|
+
if (!Params->TryGetArrayField(*Entry.Key, TagArray) || !TagArray) continue;
|
|
378
|
+
|
|
379
|
+
FStructProperty* Prop = CastField<FStructProperty>(CDO->GetClass()->FindPropertyByName(*Entry.Value));
|
|
380
|
+
if (!Prop || Prop->Struct != FGameplayTagContainer::StaticStruct())
|
|
381
|
+
{
|
|
382
|
+
// Engine-version drift (e.g. AbilityTags deprecated): report, don't fake.
|
|
383
|
+
Unsupported.Add(Entry.Value);
|
|
384
|
+
continue;
|
|
385
|
+
}
|
|
386
|
+
|
|
387
|
+
FGameplayTagContainer* Container = Prop->ContainerPtrToValuePtr<FGameplayTagContainer>(CDO);
|
|
388
|
+
Container->Reset();
|
|
389
|
+
TArray<TSharedPtr<FJsonValue>> Wrote;
|
|
390
|
+
for (const TSharedPtr<FJsonValue>& TagVal : *TagArray)
|
|
340
391
|
{
|
|
341
|
-
|
|
342
|
-
if (
|
|
392
|
+
FString TagStr;
|
|
393
|
+
if (!TagVal.IsValid() || !TagVal->TryGetString(TagStr)) continue;
|
|
394
|
+
const FGameplayTag Tag = FGameplayTag::RequestGameplayTag(FName(*TagStr), /*ErrorIfNotFound*/ false);
|
|
395
|
+
if (Tag.IsValid())
|
|
343
396
|
{
|
|
344
|
-
|
|
345
|
-
|
|
346
|
-
|
|
347
|
-
|
|
348
|
-
|
|
349
|
-
|
|
350
|
-
AddedTags.Add(MakeShared<FJsonValueString>(TagStr));
|
|
351
|
-
}
|
|
352
|
-
}
|
|
353
|
-
TagsSet->SetArrayField(ParamNames[i], AddedTags);
|
|
397
|
+
Container->AddTag(Tag);
|
|
398
|
+
Wrote.Add(MakeShared<FJsonValueString>(TagStr));
|
|
399
|
+
}
|
|
400
|
+
else
|
|
401
|
+
{
|
|
402
|
+
Wrote.Add(MakeShared<FJsonValueString>(TagStr + TEXT(" (unregistered tag - skipped)")));
|
|
354
403
|
}
|
|
355
404
|
}
|
|
405
|
+
Applied->SetArrayField(Entry.Key, Wrote);
|
|
406
|
+
bAnyApplied = true;
|
|
407
|
+
}
|
|
408
|
+
|
|
409
|
+
if (bAnyApplied)
|
|
410
|
+
{
|
|
411
|
+
CDO->MarkPackageDirty();
|
|
412
|
+
SaveAssetPackage(CDO);
|
|
356
413
|
}
|
|
357
414
|
|
|
358
415
|
auto Result = MCPSuccess();
|
|
416
|
+
MCPSetUpdated(Result);
|
|
359
417
|
Result->SetStringField(TEXT("abilityPath"), AbilityPath);
|
|
360
|
-
Result->SetObjectField(TEXT("
|
|
361
|
-
|
|
418
|
+
Result->SetObjectField(TEXT("applied"), Applied);
|
|
419
|
+
if (Unsupported.Num() > 0)
|
|
420
|
+
{
|
|
421
|
+
TArray<TSharedPtr<FJsonValue>> U;
|
|
422
|
+
for (const FString& S : Unsupported) U.Add(MakeShared<FJsonValueString>(S));
|
|
423
|
+
Result->SetArrayField(TEXT("unsupportedProperties"), U);
|
|
424
|
+
}
|
|
362
425
|
return MCPResult(Result);
|
|
363
426
|
}
|
|
364
427
|
|
|
@@ -370,15 +433,59 @@ TSharedPtr<FJsonValue> FGasHandlers::SetEffectModifier(const TSharedPtr<FJsonObj
|
|
|
370
433
|
FString Attribute;
|
|
371
434
|
if (auto Err = RequireString(Params, TEXT("attribute"), Attribute)) return Err;
|
|
372
435
|
|
|
373
|
-
FString Operation = OptionalString(Params, TEXT("operation"), TEXT("Additive"));
|
|
374
|
-
double Magnitude = OptionalNumber(Params, TEXT("magnitude"), 0.0);
|
|
436
|
+
const FString Operation = OptionalString(Params, TEXT("operation"), TEXT("Additive"));
|
|
437
|
+
const double Magnitude = OptionalNumber(Params, TEXT("magnitude"), 0.0);
|
|
438
|
+
|
|
439
|
+
TSharedPtr<FJsonValue> CdoErr;
|
|
440
|
+
UGameplayEffect* GE = LoadBlueprintCDO<UGameplayEffect>(EffectPath, CdoErr);
|
|
441
|
+
if (!GE) return CdoErr;
|
|
442
|
+
|
|
443
|
+
const FGameplayAttribute GAttr = FindGameplayAttributeByName(Attribute);
|
|
444
|
+
if (!GAttr.IsValid())
|
|
445
|
+
{
|
|
446
|
+
return MCPError(FString::Printf(
|
|
447
|
+
TEXT("Attribute not found: %s. Use 'SetName.Attribute' (or a unique attribute name); the AttributeSet must be compiled/loaded."), *Attribute));
|
|
448
|
+
}
|
|
449
|
+
|
|
450
|
+
const FString Op = Operation.ToLower();
|
|
451
|
+
EGameplayModOp::Type ModOp;
|
|
452
|
+
if (Op == TEXT("additive") || Op == TEXT("add")) ModOp = EGameplayModOp::Additive;
|
|
453
|
+
else if (Op == TEXT("multiplicative") || Op == TEXT("multiply") || Op == TEXT("multiplicitive")) ModOp = EGameplayModOp::Multiplicitive;
|
|
454
|
+
else if (Op == TEXT("division") || Op == TEXT("divide")) ModOp = EGameplayModOp::Division;
|
|
455
|
+
else if (Op == TEXT("override")) ModOp = EGameplayModOp::Override;
|
|
456
|
+
else return MCPError(FString::Printf(TEXT("Unknown operation '%s' (Additive|Multiplicative|Division|Override)"), *Operation));
|
|
457
|
+
|
|
458
|
+
// Update an existing modifier for the same attribute+op, else append one.
|
|
459
|
+
bool bUpdated = false;
|
|
460
|
+
for (FGameplayModifierInfo& M : GE->Modifiers)
|
|
461
|
+
{
|
|
462
|
+
if (M.Attribute == GAttr && M.ModifierOp == ModOp)
|
|
463
|
+
{
|
|
464
|
+
M.ModifierMagnitude = FGameplayEffectModifierMagnitude(FScalableFloat(static_cast<float>(Magnitude)));
|
|
465
|
+
bUpdated = true;
|
|
466
|
+
break;
|
|
467
|
+
}
|
|
468
|
+
}
|
|
469
|
+
if (!bUpdated)
|
|
470
|
+
{
|
|
471
|
+
FGameplayModifierInfo ModInfo;
|
|
472
|
+
ModInfo.Attribute = GAttr;
|
|
473
|
+
ModInfo.ModifierOp = ModOp;
|
|
474
|
+
ModInfo.ModifierMagnitude = FGameplayEffectModifierMagnitude(FScalableFloat(static_cast<float>(Magnitude)));
|
|
475
|
+
GE->Modifiers.Add(ModInfo);
|
|
476
|
+
}
|
|
477
|
+
|
|
478
|
+
GE->MarkPackageDirty();
|
|
479
|
+
SaveAssetPackage(GE);
|
|
375
480
|
|
|
376
481
|
auto Result = MCPSuccess();
|
|
482
|
+
MCPSetUpdated(Result);
|
|
377
483
|
Result->SetStringField(TEXT("effectPath"), EffectPath);
|
|
378
|
-
Result->SetStringField(TEXT("attribute"),
|
|
484
|
+
Result->SetStringField(TEXT("attribute"), GAttr.GetName());
|
|
379
485
|
Result->SetStringField(TEXT("operation"), Operation);
|
|
380
486
|
Result->SetNumberField(TEXT("magnitude"), Magnitude);
|
|
381
|
-
Result->
|
|
487
|
+
Result->SetBoolField(TEXT("replacedExisting"), bUpdated);
|
|
488
|
+
Result->SetNumberField(TEXT("modifierCount"), GE->Modifiers.Num());
|
|
382
489
|
return MCPResult(Result);
|
|
383
490
|
}
|
|
384
491
|
|
|
@@ -589,12 +589,13 @@ TSharedPtr<FJsonValue> FNiagaraHandlers::SetEmitterProperty(const TSharedPtr<FJs
|
|
|
589
589
|
bool bSet = false;
|
|
590
590
|
if (PropName.Equals(TEXT("enabled"), ESearchCase::IgnoreCase))
|
|
591
591
|
{
|
|
592
|
-
|
|
593
|
-
// Use mutable access pattern
|
|
592
|
+
const bool bEnabled = Value.ToBool();
|
|
594
593
|
System->Modify();
|
|
595
|
-
//
|
|
594
|
+
// GetEmitterHandles() is const; the editor mutates via a non-const handle.
|
|
595
|
+
FNiagaraEmitterHandle& MutableHandle = const_cast<FNiagaraEmitterHandle&>(Handles[TargetIdx]);
|
|
596
|
+
MutableHandle.SetIsEnabled(bEnabled, *System, /*bRecompileIfChanged*/ true);
|
|
596
597
|
bSet = true;
|
|
597
|
-
Result->
|
|
598
|
+
Result->SetBoolField(TEXT("enabled"), bEnabled);
|
|
598
599
|
}
|
|
599
600
|
|
|
600
601
|
// Try reflection on the EmitterData's properties
|