From 185e0f3a94cbf8d3a0cca98910aa121603953d5e Mon Sep 17 00:00:00 2001 From: gahusb Date: Wed, 10 Jun 2026 01:00:23 +0900 Subject: [PATCH] =?UTF-8?q?feat(monster):=20CombatMonster=20=EB=A7=88?= =?UTF-8?q?=EC=BB=A4(EnemyId=C2=B7=EC=9E=90=EA=B8=B0=EB=93=B1=EB=A1=9D)=20?= =?UTF-8?q?+=2011=EB=A7=B5=20=EB=AA=AC=EC=8A=A4=ED=84=B0=20=ED=8C=A8?= =?UTF-8?q?=EC=B9=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- RootDesk/MyDesk/CombatMonster.codeblock | 67 +++++++++++++++++++++++ map/map01.map | 21 ++++++-- map/map02.map | 14 ++++- map/map03.map | 14 ++++- map/map04.map | 14 ++++- map/map05.map | 14 ++++- map/map06.map | 14 ++++- map/map07.map | 14 ++++- map/map08.map | 14 ++++- map/map09.map | 14 ++++- map/map10.map | 14 ++++- map/map11.map | 14 ++++- tools/monster/gen-combat-monster.mjs | 72 +++++++++++++++++++++++++ 13 files changed, 277 insertions(+), 23 deletions(-) create mode 100644 RootDesk/MyDesk/CombatMonster.codeblock create mode 100644 tools/monster/gen-combat-monster.mjs diff --git a/RootDesk/MyDesk/CombatMonster.codeblock b/RootDesk/MyDesk/CombatMonster.codeblock new file mode 100644 index 0000000..5417df0 --- /dev/null +++ b/RootDesk/MyDesk/CombatMonster.codeblock @@ -0,0 +1,67 @@ +{ + "Id": "", + "GameId": "", + "EntryKey": "codeblock://combatmonster", + "ContentType": "x-mod/codeblock", + "Content": "", + "Usage": 0, + "UsePublish": 1, + "UseService": 0, + "CoreVersion": "26.5.0.0", + "StudioVersion": "", + "DynamicLoading": 0, + "ContentProto": { + "Use": "Json", + "Json": { + "CoreVersion": { + "Major": 0, + "Minor": 2 + }, + "ScriptVersion": { + "Major": 1, + "Minor": 0 + }, + "Description": "", + "Id": "CombatMonster", + "Language": 1, + "Name": "CombatMonster", + "Type": 1, + "Source": 0, + "Target": null, + "Properties": [ + { + "Type": "string", + "DefaultValue": "\"\"", + "SyncDirection": 0, + "Attributes": [], + "Name": "EnemyId" + }, + { + "Type": "number", + "DefaultValue": "0", + "SyncDirection": 0, + "Attributes": [], + "Name": "RegTries" + } + ], + "Methods": [ + { + "Return": { + "Type": "void", + "DefaultValue": null, + "SyncDirection": 0, + "Attributes": [], + "Name": null + }, + "Arguments": [], + "Code": "self.RegTries = 0\nlocal eventId = 0\nlocal function reg()\n\tself.RegTries = self.RegTries + 1\n\tlocal c = _EntityService:GetEntityByPath(\"/common\")\n\tif c ~= nil and c.SlayDeckController ~= nil then\n\t\tc.SlayDeckController:RegisterMonster(self.Entity, self.EnemyId)\n\t\t_TimerService:ClearTimer(eventId)\n\telseif self.RegTries > 50 then\n\t\t_TimerService:ClearTimer(eventId)\n\tend\nend\neventId = _TimerService:SetTimerRepeat(reg, 0.1)", + "Scope": 2, + "ExecSpace": 6, + "Attributes": [], + "Name": "OnBeginPlay" + } + ], + "EntityEventHandlers": [] + } + } +} \ No newline at end of file diff --git a/map/map01.map b/map/map01.map index 4de76fe..9b33943 100644 --- a/map/map01.map +++ b/map/map01.map @@ -6366,7 +6366,7 @@ { "id": "595374e9-e49a-4733-b00f-77e8e61dad59", "path": "/maps/map01/주황버섯", - "componentNames": "MOD.Core.TransformComponent,MOD.Core.StateAnimationComponent,MOD.Core.SpriteRendererComponent,MOD.Core.RigidbodyComponent,MOD.Core.MovementComponent,MOD.Core.StateComponent,MOD.Core.HitComponent,MOD.Core.DamageSkinSpawnerComponent,script.Monster,script.MonsterAttack,MOD.Core.KinematicbodyComponent,MOD.Core.SideviewbodyComponent,MOD.Core.DamageSkinSettingComponent", + "componentNames": "MOD.Core.TransformComponent,MOD.Core.StateAnimationComponent,MOD.Core.SpriteRendererComponent,MOD.Core.RigidbodyComponent,MOD.Core.MovementComponent,MOD.Core.StateComponent,MOD.Core.HitComponent,MOD.Core.DamageSkinSpawnerComponent,script.Monster,script.MonsterAttack,MOD.Core.KinematicbodyComponent,MOD.Core.SideviewbodyComponent,MOD.Core.DamageSkinSettingComponent,script.CombatMonster", "jsonString": { "name": "주황버섯", "path": "/maps/map01/주황버섯", @@ -6506,6 +6506,11 @@ "DataId": "02c22d93421b4038b3c413b3e40b57ec" }, "Enable": true + }, + { + "@type": "script.CombatMonster", + "Enable": true, + "EnemyId": "orange_mushroom" } ], "@version": 1 @@ -6514,7 +6519,7 @@ { "id": "b1923aa6-7265-4f99-9ab6-1c45eae9af23", "path": "/maps/map01/돼지", - "componentNames": "MOD.Core.TransformComponent,MOD.Core.StateAnimationComponent,MOD.Core.SpriteRendererComponent,MOD.Core.RigidbodyComponent,MOD.Core.MovementComponent,MOD.Core.StateComponent,MOD.Core.HitComponent,MOD.Core.DamageSkinSpawnerComponent,script.Monster,script.MonsterAttack,MOD.Core.KinematicbodyComponent,MOD.Core.SideviewbodyComponent", + "componentNames": "MOD.Core.TransformComponent,MOD.Core.StateAnimationComponent,MOD.Core.SpriteRendererComponent,MOD.Core.RigidbodyComponent,MOD.Core.MovementComponent,MOD.Core.StateComponent,MOD.Core.HitComponent,MOD.Core.DamageSkinSpawnerComponent,script.Monster,script.MonsterAttack,MOD.Core.KinematicbodyComponent,MOD.Core.SideviewbodyComponent,script.CombatMonster", "jsonString": { "name": "돼지", "path": "/maps/map01/돼지", @@ -6642,6 +6647,11 @@ "y": 0 }, "Enable": true + }, + { + "@type": "script.CombatMonster", + "Enable": true, + "EnemyId": "orange_mushroom" } ], "@version": 1 @@ -6650,7 +6660,7 @@ { "id": "566e94be-0efe-4536-9007-882dde030a95", "path": "/maps/map01/초록버섯", - "componentNames": "MOD.Core.TransformComponent,MOD.Core.StateAnimationComponent,MOD.Core.SpriteRendererComponent,MOD.Core.RigidbodyComponent,MOD.Core.MovementComponent,MOD.Core.StateComponent,MOD.Core.HitComponent,MOD.Core.DamageSkinSpawnerComponent,script.Monster,script.MonsterAttack,MOD.Core.KinematicbodyComponent,MOD.Core.SideviewbodyComponent", + "componentNames": "MOD.Core.TransformComponent,MOD.Core.StateAnimationComponent,MOD.Core.SpriteRendererComponent,MOD.Core.RigidbodyComponent,MOD.Core.MovementComponent,MOD.Core.StateComponent,MOD.Core.HitComponent,MOD.Core.DamageSkinSpawnerComponent,script.Monster,script.MonsterAttack,MOD.Core.KinematicbodyComponent,MOD.Core.SideviewbodyComponent,script.CombatMonster", "jsonString": { "name": "초록버섯", "path": "/maps/map01/초록버섯", @@ -6778,6 +6788,11 @@ "y": 0 }, "Enable": true + }, + { + "@type": "script.CombatMonster", + "Enable": true, + "EnemyId": "orange_mushroom" } ], "@version": 1 diff --git a/map/map02.map b/map/map02.map index 89fc591..4c953a5 100644 --- a/map/map02.map +++ b/map/map02.map @@ -6366,7 +6366,7 @@ { "id": "000007d5-0000-4000-8000-0000000007d5", "path": "/maps/map02/Monster1", - "componentNames": "MOD.Core.TransformComponent,MOD.Core.StateAnimationComponent,MOD.Core.SpriteRendererComponent,MOD.Core.DamageSkinSettingComponent,MOD.Core.HitComponent,MOD.Core.DamageSkinSpawnerComponent,MOD.Core.StateComponent,MOD.Core.RigidbodyComponent,MOD.Core.KinematicbodyComponent,MOD.Core.SideviewbodyComponent,MOD.Core.MovementComponent,script.Monster,script.MonsterAttack", + "componentNames": "MOD.Core.TransformComponent,MOD.Core.StateAnimationComponent,MOD.Core.SpriteRendererComponent,MOD.Core.DamageSkinSettingComponent,MOD.Core.HitComponent,MOD.Core.DamageSkinSpawnerComponent,MOD.Core.StateComponent,MOD.Core.RigidbodyComponent,MOD.Core.KinematicbodyComponent,MOD.Core.SideviewbodyComponent,MOD.Core.MovementComponent,script.Monster,script.MonsterAttack,script.CombatMonster", "jsonString": { "name": "Monster1", "path": "/maps/map02/Monster1", @@ -6506,6 +6506,11 @@ "x": 0, "y": 0 } + }, + { + "@type": "script.CombatMonster", + "Enable": true, + "EnemyId": "orange_mushroom" } ], "@version": 1 @@ -6514,7 +6519,7 @@ { "id": "000007d6-0000-4000-8000-0000000007d6", "path": "/maps/map02/Monster2", - "componentNames": "MOD.Core.TransformComponent,MOD.Core.StateAnimationComponent,MOD.Core.SpriteRendererComponent,MOD.Core.DamageSkinSettingComponent,MOD.Core.HitComponent,MOD.Core.DamageSkinSpawnerComponent,MOD.Core.StateComponent,MOD.Core.RigidbodyComponent,MOD.Core.KinematicbodyComponent,MOD.Core.SideviewbodyComponent,MOD.Core.MovementComponent,script.Monster,script.MonsterAttack", + "componentNames": "MOD.Core.TransformComponent,MOD.Core.StateAnimationComponent,MOD.Core.SpriteRendererComponent,MOD.Core.DamageSkinSettingComponent,MOD.Core.HitComponent,MOD.Core.DamageSkinSpawnerComponent,MOD.Core.StateComponent,MOD.Core.RigidbodyComponent,MOD.Core.KinematicbodyComponent,MOD.Core.SideviewbodyComponent,MOD.Core.MovementComponent,script.Monster,script.MonsterAttack,script.CombatMonster", "jsonString": { "name": "Monster2", "path": "/maps/map02/Monster2", @@ -6654,6 +6659,11 @@ "x": 0, "y": 0 } + }, + { + "@type": "script.CombatMonster", + "Enable": true, + "EnemyId": "orange_mushroom" } ], "@version": 1 diff --git a/map/map03.map b/map/map03.map index 7d73c7c..19f7458 100644 --- a/map/map03.map +++ b/map/map03.map @@ -6366,7 +6366,7 @@ { "id": "00000bbd-0000-4000-8000-000000000bbd", "path": "/maps/map03/Monster1", - "componentNames": "MOD.Core.TransformComponent,MOD.Core.StateAnimationComponent,MOD.Core.SpriteRendererComponent,MOD.Core.DamageSkinSettingComponent,MOD.Core.HitComponent,MOD.Core.DamageSkinSpawnerComponent,MOD.Core.StateComponent,MOD.Core.RigidbodyComponent,MOD.Core.KinematicbodyComponent,MOD.Core.SideviewbodyComponent,MOD.Core.MovementComponent,script.Monster,script.MonsterAttack", + "componentNames": "MOD.Core.TransformComponent,MOD.Core.StateAnimationComponent,MOD.Core.SpriteRendererComponent,MOD.Core.DamageSkinSettingComponent,MOD.Core.HitComponent,MOD.Core.DamageSkinSpawnerComponent,MOD.Core.StateComponent,MOD.Core.RigidbodyComponent,MOD.Core.KinematicbodyComponent,MOD.Core.SideviewbodyComponent,MOD.Core.MovementComponent,script.Monster,script.MonsterAttack,script.CombatMonster", "jsonString": { "name": "Monster1", "path": "/maps/map03/Monster1", @@ -6506,6 +6506,11 @@ "x": 0, "y": 0 } + }, + { + "@type": "script.CombatMonster", + "Enable": true, + "EnemyId": "orange_mushroom" } ], "@version": 1 @@ -6514,7 +6519,7 @@ { "id": "00000bbe-0000-4000-8000-000000000bbe", "path": "/maps/map03/Monster2", - "componentNames": "MOD.Core.TransformComponent,MOD.Core.StateAnimationComponent,MOD.Core.SpriteRendererComponent,MOD.Core.DamageSkinSettingComponent,MOD.Core.HitComponent,MOD.Core.DamageSkinSpawnerComponent,MOD.Core.StateComponent,MOD.Core.RigidbodyComponent,MOD.Core.KinematicbodyComponent,MOD.Core.SideviewbodyComponent,MOD.Core.MovementComponent,script.Monster,script.MonsterAttack", + "componentNames": "MOD.Core.TransformComponent,MOD.Core.StateAnimationComponent,MOD.Core.SpriteRendererComponent,MOD.Core.DamageSkinSettingComponent,MOD.Core.HitComponent,MOD.Core.DamageSkinSpawnerComponent,MOD.Core.StateComponent,MOD.Core.RigidbodyComponent,MOD.Core.KinematicbodyComponent,MOD.Core.SideviewbodyComponent,MOD.Core.MovementComponent,script.Monster,script.MonsterAttack,script.CombatMonster", "jsonString": { "name": "Monster2", "path": "/maps/map03/Monster2", @@ -6654,6 +6659,11 @@ "x": 0, "y": 0 } + }, + { + "@type": "script.CombatMonster", + "Enable": true, + "EnemyId": "orange_mushroom" } ], "@version": 1 diff --git a/map/map04.map b/map/map04.map index 4cf8e53..fb6147b 100644 --- a/map/map04.map +++ b/map/map04.map @@ -6366,7 +6366,7 @@ { "id": "00000fa5-0000-4000-8000-000000000fa5", "path": "/maps/map04/Monster1", - "componentNames": "MOD.Core.TransformComponent,MOD.Core.StateAnimationComponent,MOD.Core.SpriteRendererComponent,MOD.Core.DamageSkinSettingComponent,MOD.Core.HitComponent,MOD.Core.DamageSkinSpawnerComponent,MOD.Core.StateComponent,MOD.Core.RigidbodyComponent,MOD.Core.KinematicbodyComponent,MOD.Core.SideviewbodyComponent,MOD.Core.MovementComponent,script.Monster,script.MonsterAttack", + "componentNames": "MOD.Core.TransformComponent,MOD.Core.StateAnimationComponent,MOD.Core.SpriteRendererComponent,MOD.Core.DamageSkinSettingComponent,MOD.Core.HitComponent,MOD.Core.DamageSkinSpawnerComponent,MOD.Core.StateComponent,MOD.Core.RigidbodyComponent,MOD.Core.KinematicbodyComponent,MOD.Core.SideviewbodyComponent,MOD.Core.MovementComponent,script.Monster,script.MonsterAttack,script.CombatMonster", "jsonString": { "name": "Monster1", "path": "/maps/map04/Monster1", @@ -6506,6 +6506,11 @@ "x": 0, "y": 0 } + }, + { + "@type": "script.CombatMonster", + "Enable": true, + "EnemyId": "orange_mushroom" } ], "@version": 1 @@ -6514,7 +6519,7 @@ { "id": "00000fa6-0000-4000-8000-000000000fa6", "path": "/maps/map04/Monster2", - "componentNames": "MOD.Core.TransformComponent,MOD.Core.StateAnimationComponent,MOD.Core.SpriteRendererComponent,MOD.Core.DamageSkinSettingComponent,MOD.Core.HitComponent,MOD.Core.DamageSkinSpawnerComponent,MOD.Core.StateComponent,MOD.Core.RigidbodyComponent,MOD.Core.KinematicbodyComponent,MOD.Core.SideviewbodyComponent,MOD.Core.MovementComponent,script.Monster,script.MonsterAttack", + "componentNames": "MOD.Core.TransformComponent,MOD.Core.StateAnimationComponent,MOD.Core.SpriteRendererComponent,MOD.Core.DamageSkinSettingComponent,MOD.Core.HitComponent,MOD.Core.DamageSkinSpawnerComponent,MOD.Core.StateComponent,MOD.Core.RigidbodyComponent,MOD.Core.KinematicbodyComponent,MOD.Core.SideviewbodyComponent,MOD.Core.MovementComponent,script.Monster,script.MonsterAttack,script.CombatMonster", "jsonString": { "name": "Monster2", "path": "/maps/map04/Monster2", @@ -6654,6 +6659,11 @@ "x": 0, "y": 0 } + }, + { + "@type": "script.CombatMonster", + "Enable": true, + "EnemyId": "orange_mushroom" } ], "@version": 1 diff --git a/map/map05.map b/map/map05.map index 4247565..861f25f 100644 --- a/map/map05.map +++ b/map/map05.map @@ -6366,7 +6366,7 @@ { "id": "0000138d-0000-4000-8000-00000000138d", "path": "/maps/map05/Monster1", - "componentNames": "MOD.Core.TransformComponent,MOD.Core.StateAnimationComponent,MOD.Core.SpriteRendererComponent,MOD.Core.DamageSkinSettingComponent,MOD.Core.HitComponent,MOD.Core.DamageSkinSpawnerComponent,MOD.Core.StateComponent,MOD.Core.RigidbodyComponent,MOD.Core.KinematicbodyComponent,MOD.Core.SideviewbodyComponent,MOD.Core.MovementComponent,script.Monster,script.MonsterAttack", + "componentNames": "MOD.Core.TransformComponent,MOD.Core.StateAnimationComponent,MOD.Core.SpriteRendererComponent,MOD.Core.DamageSkinSettingComponent,MOD.Core.HitComponent,MOD.Core.DamageSkinSpawnerComponent,MOD.Core.StateComponent,MOD.Core.RigidbodyComponent,MOD.Core.KinematicbodyComponent,MOD.Core.SideviewbodyComponent,MOD.Core.MovementComponent,script.Monster,script.MonsterAttack,script.CombatMonster", "jsonString": { "name": "Monster1", "path": "/maps/map05/Monster1", @@ -6506,6 +6506,11 @@ "x": 0, "y": 0 } + }, + { + "@type": "script.CombatMonster", + "Enable": true, + "EnemyId": "orange_mushroom" } ], "@version": 1 @@ -6514,7 +6519,7 @@ { "id": "0000138e-0000-4000-8000-00000000138e", "path": "/maps/map05/Monster2", - "componentNames": "MOD.Core.TransformComponent,MOD.Core.StateAnimationComponent,MOD.Core.SpriteRendererComponent,MOD.Core.DamageSkinSettingComponent,MOD.Core.HitComponent,MOD.Core.DamageSkinSpawnerComponent,MOD.Core.StateComponent,MOD.Core.RigidbodyComponent,MOD.Core.KinematicbodyComponent,MOD.Core.SideviewbodyComponent,MOD.Core.MovementComponent,script.Monster,script.MonsterAttack", + "componentNames": "MOD.Core.TransformComponent,MOD.Core.StateAnimationComponent,MOD.Core.SpriteRendererComponent,MOD.Core.DamageSkinSettingComponent,MOD.Core.HitComponent,MOD.Core.DamageSkinSpawnerComponent,MOD.Core.StateComponent,MOD.Core.RigidbodyComponent,MOD.Core.KinematicbodyComponent,MOD.Core.SideviewbodyComponent,MOD.Core.MovementComponent,script.Monster,script.MonsterAttack,script.CombatMonster", "jsonString": { "name": "Monster2", "path": "/maps/map05/Monster2", @@ -6654,6 +6659,11 @@ "x": 0, "y": 0 } + }, + { + "@type": "script.CombatMonster", + "Enable": true, + "EnemyId": "orange_mushroom" } ], "@version": 1 diff --git a/map/map06.map b/map/map06.map index 366064d..fb9adf2 100644 --- a/map/map06.map +++ b/map/map06.map @@ -6366,7 +6366,7 @@ { "id": "00001775-0000-4000-8000-000000001775", "path": "/maps/map06/Monster1", - "componentNames": "MOD.Core.TransformComponent,MOD.Core.StateAnimationComponent,MOD.Core.SpriteRendererComponent,MOD.Core.DamageSkinSettingComponent,MOD.Core.HitComponent,MOD.Core.DamageSkinSpawnerComponent,MOD.Core.StateComponent,MOD.Core.RigidbodyComponent,MOD.Core.KinematicbodyComponent,MOD.Core.SideviewbodyComponent,MOD.Core.MovementComponent,script.Monster,script.MonsterAttack", + "componentNames": "MOD.Core.TransformComponent,MOD.Core.StateAnimationComponent,MOD.Core.SpriteRendererComponent,MOD.Core.DamageSkinSettingComponent,MOD.Core.HitComponent,MOD.Core.DamageSkinSpawnerComponent,MOD.Core.StateComponent,MOD.Core.RigidbodyComponent,MOD.Core.KinematicbodyComponent,MOD.Core.SideviewbodyComponent,MOD.Core.MovementComponent,script.Monster,script.MonsterAttack,script.CombatMonster", "jsonString": { "name": "Monster1", "path": "/maps/map06/Monster1", @@ -6506,6 +6506,11 @@ "x": 0, "y": 0 } + }, + { + "@type": "script.CombatMonster", + "Enable": true, + "EnemyId": "orange_mushroom" } ], "@version": 1 @@ -6514,7 +6519,7 @@ { "id": "00001776-0000-4000-8000-000000001776", "path": "/maps/map06/Monster2", - "componentNames": "MOD.Core.TransformComponent,MOD.Core.StateAnimationComponent,MOD.Core.SpriteRendererComponent,MOD.Core.DamageSkinSettingComponent,MOD.Core.HitComponent,MOD.Core.DamageSkinSpawnerComponent,MOD.Core.StateComponent,MOD.Core.RigidbodyComponent,MOD.Core.KinematicbodyComponent,MOD.Core.SideviewbodyComponent,MOD.Core.MovementComponent,script.Monster,script.MonsterAttack", + "componentNames": "MOD.Core.TransformComponent,MOD.Core.StateAnimationComponent,MOD.Core.SpriteRendererComponent,MOD.Core.DamageSkinSettingComponent,MOD.Core.HitComponent,MOD.Core.DamageSkinSpawnerComponent,MOD.Core.StateComponent,MOD.Core.RigidbodyComponent,MOD.Core.KinematicbodyComponent,MOD.Core.SideviewbodyComponent,MOD.Core.MovementComponent,script.Monster,script.MonsterAttack,script.CombatMonster", "jsonString": { "name": "Monster2", "path": "/maps/map06/Monster2", @@ -6654,6 +6659,11 @@ "x": 0, "y": 0 } + }, + { + "@type": "script.CombatMonster", + "Enable": true, + "EnemyId": "orange_mushroom" } ], "@version": 1 diff --git a/map/map07.map b/map/map07.map index c8195e3..ff78649 100644 --- a/map/map07.map +++ b/map/map07.map @@ -6366,7 +6366,7 @@ { "id": "00001b5d-0000-4000-8000-000000001b5d", "path": "/maps/map07/Monster1", - "componentNames": "MOD.Core.TransformComponent,MOD.Core.StateAnimationComponent,MOD.Core.SpriteRendererComponent,MOD.Core.DamageSkinSettingComponent,MOD.Core.HitComponent,MOD.Core.DamageSkinSpawnerComponent,MOD.Core.StateComponent,MOD.Core.RigidbodyComponent,MOD.Core.KinematicbodyComponent,MOD.Core.SideviewbodyComponent,MOD.Core.MovementComponent,script.Monster,script.MonsterAttack", + "componentNames": "MOD.Core.TransformComponent,MOD.Core.StateAnimationComponent,MOD.Core.SpriteRendererComponent,MOD.Core.DamageSkinSettingComponent,MOD.Core.HitComponent,MOD.Core.DamageSkinSpawnerComponent,MOD.Core.StateComponent,MOD.Core.RigidbodyComponent,MOD.Core.KinematicbodyComponent,MOD.Core.SideviewbodyComponent,MOD.Core.MovementComponent,script.Monster,script.MonsterAttack,script.CombatMonster", "jsonString": { "name": "Monster1", "path": "/maps/map07/Monster1", @@ -6506,6 +6506,11 @@ "x": 0, "y": 0 } + }, + { + "@type": "script.CombatMonster", + "Enable": true, + "EnemyId": "orange_mushroom" } ], "@version": 1 @@ -6514,7 +6519,7 @@ { "id": "00001b5e-0000-4000-8000-000000001b5e", "path": "/maps/map07/Monster2", - "componentNames": "MOD.Core.TransformComponent,MOD.Core.StateAnimationComponent,MOD.Core.SpriteRendererComponent,MOD.Core.DamageSkinSettingComponent,MOD.Core.HitComponent,MOD.Core.DamageSkinSpawnerComponent,MOD.Core.StateComponent,MOD.Core.RigidbodyComponent,MOD.Core.KinematicbodyComponent,MOD.Core.SideviewbodyComponent,MOD.Core.MovementComponent,script.Monster,script.MonsterAttack", + "componentNames": "MOD.Core.TransformComponent,MOD.Core.StateAnimationComponent,MOD.Core.SpriteRendererComponent,MOD.Core.DamageSkinSettingComponent,MOD.Core.HitComponent,MOD.Core.DamageSkinSpawnerComponent,MOD.Core.StateComponent,MOD.Core.RigidbodyComponent,MOD.Core.KinematicbodyComponent,MOD.Core.SideviewbodyComponent,MOD.Core.MovementComponent,script.Monster,script.MonsterAttack,script.CombatMonster", "jsonString": { "name": "Monster2", "path": "/maps/map07/Monster2", @@ -6654,6 +6659,11 @@ "x": 0, "y": 0 } + }, + { + "@type": "script.CombatMonster", + "Enable": true, + "EnemyId": "orange_mushroom" } ], "@version": 1 diff --git a/map/map08.map b/map/map08.map index e4aa64c..50e9fe2 100644 --- a/map/map08.map +++ b/map/map08.map @@ -6366,7 +6366,7 @@ { "id": "00001f45-0000-4000-8000-000000001f45", "path": "/maps/map08/Monster1", - "componentNames": "MOD.Core.TransformComponent,MOD.Core.StateAnimationComponent,MOD.Core.SpriteRendererComponent,MOD.Core.DamageSkinSettingComponent,MOD.Core.HitComponent,MOD.Core.DamageSkinSpawnerComponent,MOD.Core.StateComponent,MOD.Core.RigidbodyComponent,MOD.Core.KinematicbodyComponent,MOD.Core.SideviewbodyComponent,MOD.Core.MovementComponent,script.Monster,script.MonsterAttack", + "componentNames": "MOD.Core.TransformComponent,MOD.Core.StateAnimationComponent,MOD.Core.SpriteRendererComponent,MOD.Core.DamageSkinSettingComponent,MOD.Core.HitComponent,MOD.Core.DamageSkinSpawnerComponent,MOD.Core.StateComponent,MOD.Core.RigidbodyComponent,MOD.Core.KinematicbodyComponent,MOD.Core.SideviewbodyComponent,MOD.Core.MovementComponent,script.Monster,script.MonsterAttack,script.CombatMonster", "jsonString": { "name": "Monster1", "path": "/maps/map08/Monster1", @@ -6506,6 +6506,11 @@ "x": 0, "y": 0 } + }, + { + "@type": "script.CombatMonster", + "Enable": true, + "EnemyId": "orange_mushroom" } ], "@version": 1 @@ -6514,7 +6519,7 @@ { "id": "00001f46-0000-4000-8000-000000001f46", "path": "/maps/map08/Monster2", - "componentNames": "MOD.Core.TransformComponent,MOD.Core.StateAnimationComponent,MOD.Core.SpriteRendererComponent,MOD.Core.DamageSkinSettingComponent,MOD.Core.HitComponent,MOD.Core.DamageSkinSpawnerComponent,MOD.Core.StateComponent,MOD.Core.RigidbodyComponent,MOD.Core.KinematicbodyComponent,MOD.Core.SideviewbodyComponent,MOD.Core.MovementComponent,script.Monster,script.MonsterAttack", + "componentNames": "MOD.Core.TransformComponent,MOD.Core.StateAnimationComponent,MOD.Core.SpriteRendererComponent,MOD.Core.DamageSkinSettingComponent,MOD.Core.HitComponent,MOD.Core.DamageSkinSpawnerComponent,MOD.Core.StateComponent,MOD.Core.RigidbodyComponent,MOD.Core.KinematicbodyComponent,MOD.Core.SideviewbodyComponent,MOD.Core.MovementComponent,script.Monster,script.MonsterAttack,script.CombatMonster", "jsonString": { "name": "Monster2", "path": "/maps/map08/Monster2", @@ -6654,6 +6659,11 @@ "x": 0, "y": 0 } + }, + { + "@type": "script.CombatMonster", + "Enable": true, + "EnemyId": "orange_mushroom" } ], "@version": 1 diff --git a/map/map09.map b/map/map09.map index 73400fc..bfbbe7c 100644 --- a/map/map09.map +++ b/map/map09.map @@ -6366,7 +6366,7 @@ { "id": "0000232d-0000-4000-8000-00000000232d", "path": "/maps/map09/Monster1", - "componentNames": "MOD.Core.TransformComponent,MOD.Core.StateAnimationComponent,MOD.Core.SpriteRendererComponent,MOD.Core.DamageSkinSettingComponent,MOD.Core.HitComponent,MOD.Core.DamageSkinSpawnerComponent,MOD.Core.StateComponent,MOD.Core.RigidbodyComponent,MOD.Core.KinematicbodyComponent,MOD.Core.SideviewbodyComponent,MOD.Core.MovementComponent,script.Monster,script.MonsterAttack", + "componentNames": "MOD.Core.TransformComponent,MOD.Core.StateAnimationComponent,MOD.Core.SpriteRendererComponent,MOD.Core.DamageSkinSettingComponent,MOD.Core.HitComponent,MOD.Core.DamageSkinSpawnerComponent,MOD.Core.StateComponent,MOD.Core.RigidbodyComponent,MOD.Core.KinematicbodyComponent,MOD.Core.SideviewbodyComponent,MOD.Core.MovementComponent,script.Monster,script.MonsterAttack,script.CombatMonster", "jsonString": { "name": "Monster1", "path": "/maps/map09/Monster1", @@ -6506,6 +6506,11 @@ "x": 0, "y": 0 } + }, + { + "@type": "script.CombatMonster", + "Enable": true, + "EnemyId": "orange_mushroom" } ], "@version": 1 @@ -6514,7 +6519,7 @@ { "id": "0000232e-0000-4000-8000-00000000232e", "path": "/maps/map09/Monster2", - "componentNames": "MOD.Core.TransformComponent,MOD.Core.StateAnimationComponent,MOD.Core.SpriteRendererComponent,MOD.Core.DamageSkinSettingComponent,MOD.Core.HitComponent,MOD.Core.DamageSkinSpawnerComponent,MOD.Core.StateComponent,MOD.Core.RigidbodyComponent,MOD.Core.KinematicbodyComponent,MOD.Core.SideviewbodyComponent,MOD.Core.MovementComponent,script.Monster,script.MonsterAttack", + "componentNames": "MOD.Core.TransformComponent,MOD.Core.StateAnimationComponent,MOD.Core.SpriteRendererComponent,MOD.Core.DamageSkinSettingComponent,MOD.Core.HitComponent,MOD.Core.DamageSkinSpawnerComponent,MOD.Core.StateComponent,MOD.Core.RigidbodyComponent,MOD.Core.KinematicbodyComponent,MOD.Core.SideviewbodyComponent,MOD.Core.MovementComponent,script.Monster,script.MonsterAttack,script.CombatMonster", "jsonString": { "name": "Monster2", "path": "/maps/map09/Monster2", @@ -6654,6 +6659,11 @@ "x": 0, "y": 0 } + }, + { + "@type": "script.CombatMonster", + "Enable": true, + "EnemyId": "orange_mushroom" } ], "@version": 1 diff --git a/map/map10.map b/map/map10.map index 2db56b2..a396993 100644 --- a/map/map10.map +++ b/map/map10.map @@ -6366,7 +6366,7 @@ { "id": "00002716-0000-4000-8000-000000002716", "path": "/maps/map10/Monster2", - "componentNames": "MOD.Core.TransformComponent,MOD.Core.StateAnimationComponent,MOD.Core.SpriteRendererComponent,MOD.Core.DamageSkinSettingComponent,MOD.Core.HitComponent,MOD.Core.DamageSkinSpawnerComponent,MOD.Core.StateComponent,MOD.Core.RigidbodyComponent,MOD.Core.KinematicbodyComponent,MOD.Core.SideviewbodyComponent,MOD.Core.MovementComponent,script.Monster,script.MonsterAttack", + "componentNames": "MOD.Core.TransformComponent,MOD.Core.StateAnimationComponent,MOD.Core.SpriteRendererComponent,MOD.Core.DamageSkinSettingComponent,MOD.Core.HitComponent,MOD.Core.DamageSkinSpawnerComponent,MOD.Core.StateComponent,MOD.Core.RigidbodyComponent,MOD.Core.KinematicbodyComponent,MOD.Core.SideviewbodyComponent,MOD.Core.MovementComponent,script.Monster,script.MonsterAttack,script.CombatMonster", "jsonString": { "name": "Monster2", "path": "/maps/map10/Monster2", @@ -6506,6 +6506,11 @@ "x": 0, "y": 0 } + }, + { + "@type": "script.CombatMonster", + "Enable": true, + "EnemyId": "orange_mushroom" } ], "@version": 1 @@ -6514,7 +6519,7 @@ { "id": "00002715-0000-4000-8000-000000002715", "path": "/maps/map10/Monster1", - "componentNames": "MOD.Core.TransformComponent,MOD.Core.StateAnimationComponent,MOD.Core.SpriteRendererComponent,MOD.Core.DamageSkinSettingComponent,MOD.Core.HitComponent,MOD.Core.DamageSkinSpawnerComponent,MOD.Core.StateComponent,MOD.Core.RigidbodyComponent,MOD.Core.KinematicbodyComponent,MOD.Core.SideviewbodyComponent,MOD.Core.MovementComponent,script.Monster,script.MonsterAttack", + "componentNames": "MOD.Core.TransformComponent,MOD.Core.StateAnimationComponent,MOD.Core.SpriteRendererComponent,MOD.Core.DamageSkinSettingComponent,MOD.Core.HitComponent,MOD.Core.DamageSkinSpawnerComponent,MOD.Core.StateComponent,MOD.Core.RigidbodyComponent,MOD.Core.KinematicbodyComponent,MOD.Core.SideviewbodyComponent,MOD.Core.MovementComponent,script.Monster,script.MonsterAttack,script.CombatMonster", "jsonString": { "name": "Monster1", "path": "/maps/map10/Monster1", @@ -6654,6 +6659,11 @@ "x": 0, "y": 0 } + }, + { + "@type": "script.CombatMonster", + "Enable": true, + "EnemyId": "orange_mushroom" } ], "@version": 1 diff --git a/map/map11.map b/map/map11.map index fb34ae1..6753e25 100644 --- a/map/map11.map +++ b/map/map11.map @@ -6366,7 +6366,7 @@ { "id": "00002afd-0000-4000-8000-000000002afd", "path": "/maps/map11/Monster1", - "componentNames": "MOD.Core.TransformComponent,MOD.Core.StateAnimationComponent,MOD.Core.SpriteRendererComponent,MOD.Core.DamageSkinSettingComponent,MOD.Core.HitComponent,MOD.Core.DamageSkinSpawnerComponent,MOD.Core.StateComponent,MOD.Core.RigidbodyComponent,MOD.Core.KinematicbodyComponent,MOD.Core.SideviewbodyComponent,MOD.Core.MovementComponent,script.Monster,script.MonsterAttack", + "componentNames": "MOD.Core.TransformComponent,MOD.Core.StateAnimationComponent,MOD.Core.SpriteRendererComponent,MOD.Core.DamageSkinSettingComponent,MOD.Core.HitComponent,MOD.Core.DamageSkinSpawnerComponent,MOD.Core.StateComponent,MOD.Core.RigidbodyComponent,MOD.Core.KinematicbodyComponent,MOD.Core.SideviewbodyComponent,MOD.Core.MovementComponent,script.Monster,script.MonsterAttack,script.CombatMonster", "jsonString": { "name": "Monster1", "path": "/maps/map11/Monster1", @@ -6506,6 +6506,11 @@ "x": 0, "y": 0 } + }, + { + "@type": "script.CombatMonster", + "Enable": true, + "EnemyId": "orange_mushroom" } ], "@version": 1 @@ -6514,7 +6519,7 @@ { "id": "00002afe-0000-4000-8000-000000002afe", "path": "/maps/map11/Monster2", - "componentNames": "MOD.Core.TransformComponent,MOD.Core.StateAnimationComponent,MOD.Core.SpriteRendererComponent,MOD.Core.DamageSkinSettingComponent,MOD.Core.HitComponent,MOD.Core.DamageSkinSpawnerComponent,MOD.Core.StateComponent,MOD.Core.RigidbodyComponent,MOD.Core.KinematicbodyComponent,MOD.Core.SideviewbodyComponent,MOD.Core.MovementComponent,script.Monster,script.MonsterAttack", + "componentNames": "MOD.Core.TransformComponent,MOD.Core.StateAnimationComponent,MOD.Core.SpriteRendererComponent,MOD.Core.DamageSkinSettingComponent,MOD.Core.HitComponent,MOD.Core.DamageSkinSpawnerComponent,MOD.Core.StateComponent,MOD.Core.RigidbodyComponent,MOD.Core.KinematicbodyComponent,MOD.Core.SideviewbodyComponent,MOD.Core.MovementComponent,script.Monster,script.MonsterAttack,script.CombatMonster", "jsonString": { "name": "Monster2", "path": "/maps/map11/Monster2", @@ -6654,6 +6659,11 @@ "x": 0, "y": 0 } + }, + { + "@type": "script.CombatMonster", + "Enable": true, + "EnemyId": "orange_mushroom" } ], "@version": 1 diff --git a/tools/monster/gen-combat-monster.mjs b/tools/monster/gen-combat-monster.mjs new file mode 100644 index 0000000..ecbbe4e --- /dev/null +++ b/tools/monster/gen-combat-monster.mjs @@ -0,0 +1,72 @@ +import { readFileSync, writeFileSync } from 'node:fs'; + +// 맵 몬스터에 적 타입(EnemyId)을 부여하고, BeginPlay 시 /common 컨트롤러에 자기등록하는 마커. +// 카드 전투 시 컨트롤러가 등록 목록으로 인카운터를 구성한다. +const MAP_NUMBERS = Array.from({ length: 11 }, (_, i) => i + 1); // map01~11 +const NAME_TO_ENEMY = { '주황버섯': 'orange_mushroom', '파란버섯': 'blue_mushroom' }; +const DEFAULT_ENEMY = 'orange_mushroom'; + +function prop(Type, Name, DefaultValue = 'nil') { + return { Type, DefaultValue, SyncDirection: 0, Attributes: [], Name }; +} +function method(Name, Code, Arguments = [], ExecSpace = 6) { + return { + Return: { Type: 'void', DefaultValue: null, SyncDirection: 0, Attributes: [], Name: null }, + Arguments, Code, Scope: 2, ExecSpace, Attributes: [], Name, + }; +} + +function writeCodeblock() { + const cb = { + Id: '', GameId: '', EntryKey: 'codeblock://combatmonster', ContentType: 'x-mod/codeblock', + Content: '', Usage: 0, UsePublish: 1, UseService: 0, CoreVersion: '26.5.0.0', StudioVersion: '', DynamicLoading: 0, + ContentProto: { Use: 'Json', Json: { + CoreVersion: { Major: 0, Minor: 2 }, ScriptVersion: { Major: 1, Minor: 0 }, + Description: '', Id: 'CombatMonster', Language: 1, Name: 'CombatMonster', Type: 1, Source: 0, Target: null, + Properties: [prop('string', 'EnemyId', '""'), prop('number', 'RegTries', '0')], + Methods: [ + method('OnBeginPlay', `self.RegTries = 0 +local eventId = 0 +local function reg() + self.RegTries = self.RegTries + 1 + local c = _EntityService:GetEntityByPath("/common") + if c ~= nil and c.SlayDeckController ~= nil then + c.SlayDeckController:RegisterMonster(self.Entity, self.EnemyId) + _TimerService:ClearTimer(eventId) + elseif self.RegTries > 50 then + _TimerService:ClearTimer(eventId) + end +end +eventId = _TimerService:SetTimerRepeat(reg, 0.1)`), + ], + EntityEventHandlers: [], + } }, + }; + writeFileSync('RootDesk/MyDesk/CombatMonster.codeblock', JSON.stringify(cb, null, 2), 'utf8'); +} + +const isMonster = (e) => (e.componentNames || '').includes('script.Monster'); + +function patchMap(nn) { + const tag = String(nn).padStart(2, '0'); + const file = `map/map${tag}.map`; + const map = JSON.parse(readFileSync(file, 'utf8')); + let count = 0; + for (const e of map.ContentProto.Entities.filter(isMonster)) { + const name = (e.jsonString && e.jsonString.name) || ''; + const enemyId = NAME_TO_ENEMY[name] || DEFAULT_ENEMY; + const comps = e.jsonString['@components']; + e.jsonString['@components'] = comps.filter((c) => c['@type'] !== 'script.CombatMonster'); + e.jsonString['@components'].push({ '@type': 'script.CombatMonster', Enable: true, EnemyId: enemyId }); + const names = (e.componentNames || '').split(',').filter((s) => s && s !== 'script.CombatMonster'); + names.push('script.CombatMonster'); + e.componentNames = names.join(','); + count++; + } + writeFileSync(file, JSON.stringify(map, null, 2), 'utf8'); + return `map${tag}(${count})`; +} + +writeCodeblock(); +const patched = MAP_NUMBERS.map(patchMap); +console.log('CombatMonster codeblock written; patched maps:', patched.join(', '));