(client) feat:添加消息定义,添加故事定义及其运算,武器动画可用,装备UI可用以及切换武器 fix:修复快速攻击导致协程释放出错卡死,重构为计时器,修复类型转换错误导致报错

This commit is contained in:
m0_75251201
2025-09-08 00:13:12 +08:00
parent 15cdd2b244
commit 379ed07773
39 changed files with 8353 additions and 937 deletions

View File

@ -3,14 +3,31 @@
<EventDef>
<defName>MonsterAttack</defName>
<label>怪物袭击</label>
<description>生成一个怪物袭击事件</description>
<description>生成一个怪物袭击事件包含3个怪物</description>
<workClass>Event_EntityGenerater</workClass>
<value>
<parameter>
{
"EntityDefName":"chicken",
"EntityDefTypeName":"MonsterDef",
"LocationType":"OffMap"
"DefinitionsToChooseFrom":[
{
"DefName":"MonsterA1",
"DefTypeName":"MonsterDef"
},
{
"DefName":"MonsterA2",
"DefTypeName":"MonsterDef"
},
{
"DefName":"MonsterB1",
"DefTypeName":"MonsterDef"
},
{
"DefName":"MonsterB2",
"DefTypeName":"MonsterDef"
}
],
"LocationType":"OffMap",
"Count":3
}
</value>
</parameter>
</EventDef>
</Define>

View File

@ -1,3 +1,481 @@
<?xml version="1.0" encoding="utf-8"?>
<Define>
</Define>
<!--
本XML定义了一个多波次怪物袭击的剧本。
剧本由以下部分构成:
1. 消息定义 (MessageDef): 用于在不同阶段显示文本提示和警告信息。
2. 事件定义 (EventDef): 触发实际的怪物生成事件。
3. 故事阶段定义 (StoryStageDef): 将消息和事件按顺序组织,并控制剧情节奏。
4. 故事定义 (StoryDef): 将所有阶段整合为一个完整的剧本流程。
-->
<!-- Monster Definitions (假设下方引用的怪物DefName已在其他XML文件中定义此处仅作引用) -->
<!-- 例如:
<MonsterDef><defName>MonsterA1</defName><label>A怪物1</label>...</MonsterDef>
<MonsterDef><defName>MaskMonster1</defName><label>面具1/2/3</label>...</MonsterDef>
<MonsterDef><defName>RatMonster2</defName><label>鼠鼠2</label>...</MonsterDef>
<MonsterDef><defName>MonsterF1</defName><label>F怪物1</label>...</MonsterDef>
-->
<!-- 1. MessageDef (消息定义) -->
<!-- 剧本开始时的总览警告 -->
<MessageDef>
<defName>AssaultStartMessage</defName>
<label>突袭警报</label>
<description>剧本开始时,通知玩家敌人正在逼近的警告。</description>
<type>ScreenCenterLargeText</type>
<text>警告!大批敌人正在逼近!全员防御!</text>
<color>#FF0000</color> <!-- 红色警告文本 -->
</MessageDef>
<!-- 第一波来袭警告 -->
<MessageDef>
<defName>Wave1WarningMessage</defName>
<label>第一波来袭</label>
<type>PassiveHint</type>
<text>第一波敌人已出现,准备迎击!</text>
<color>#FFFF00</color> <!-- 黄色提示文本 -->
</MessageDef>
<!-- 第二波来袭警告 -->
<MessageDef>
<defName>Wave2WarningMessage</defName>
<label>第二波加强</label>
<type>PassiveHint</type>
<text>第二波敌人正在进入战场,警惕新的威胁!</text>
<color>#FFA500</color> <!-- 橙色提示文本 -->
</MessageDef>
<!-- 第三波(精英)来袭警告 -->
<MessageDef>
<defName>Wave3WarningMessage</defName>
<label>精英突击</label>
<type>ScreenCenterLargeText</type>
<text>警报!侦测到精英级敌人!小心应对!</text>
<color>#FF4500</color> <!-- 橙红色警告文本 -->
</MessageDef>
<!-- 最终BOSS波来袭警告 -->
<MessageDef>
<defName>BossWaveWarningMessage</defName>
<label>最终威胁</label>
<type>ScreenCenterLargeText</type>
<text>最终BOSS已现身这是最后决战</text>
<color>#DC143C</color> <!-- 深红色致命警告文本 -->
</MessageDef>
<!-- 剧本完成提示 -->
<MessageDef>
<defName>AssaultCompleteMessage</defName>
<label>突袭完成</label>
<type>ScreenCenterLargeText</type>
<text>恭喜!所有敌人已被击退,区域安全!</text>
<color>#32CD32</color> <!-- 绿色成功提示文本 -->
</MessageDef>
<!-- 2. EventDef (事件定义) - 用于生成特定数量的特定怪物 -->
<!-- Event_EntityGenerater 的 LocationType 设定为 "OffMap" 意味着怪物将从地图外生成 -->
<!-- 第一波怪物生成事件 -->
<EventDef>
<defName>Event_SpawnMonsterA1_3</defName>
<workClass>Event_EntityGenerater</workClass>
<parameter>
{
"DefinitionsToChooseFrom":[ { "DefName":"MonsterA1", "DefTypeName":"MonsterDef" } ],
"LocationType":"OffMap",
"Count":3
}
</parameter>
</EventDef>
<EventDef>
<defName>Event_SpawnMonsterA2_2</defName>
<workClass>Event_EntityGenerater</workClass>
<parameter>
{
"DefinitionsToChooseFrom":[ { "DefName":"MonsterA2", "DefTypeName":"MonsterDef" } ],
"LocationType":"OffMap",
"Count":2
}
</parameter>
</EventDef>
<EventDef>
<defName>Event_SpawnRatMonster1_5</defName>
<workClass>Event_EntityGenerater</workClass>
<parameter>
{
"DefinitionsToChooseFrom":[ { "DefName":"RatMonster1", "DefTypeName":"MonsterDef" } ],
"LocationType":"OffMap",
"Count":5
}
</parameter>
</EventDef>
<!-- 第二波怪物生成事件 -->
<EventDef>
<defName>Event_SpawnMonsterB1_4</defName>
<workClass>Event_EntityGenerater</workClass>
<parameter>
{
"DefinitionsToChooseFrom":[ { "DefName":"MonsterB1", "DefTypeName":"MonsterDef" } ],
"LocationType":"OffMap",
"Count":4
}
</parameter>
</EventDef>
<EventDef>
<defName>Event_SpawnMonsterD1_3</defName>
<workClass>Event_EntityGenerater</workClass>
<parameter>
{
"DefinitionsToChooseFrom":[ { "DefName":"MonsterD1", "DefTypeName":"MonsterDef" } ],
"LocationType":"OffMap",
"Count":3
}
</parameter>
</EventDef>
<EventDef>
<defName>Event_SpawnMaskMonster1_3</defName>
<workClass>Event_EntityGenerater</workClass>
<parameter>
{
"DefinitionsToChooseFrom":[ { "DefName":"MaskMonster1", "DefTypeName":"MonsterDef" } ],
"LocationType":"OffMap",
"Count":3
}
</parameter>
</EventDef>
<EventDef>
<defName>Event_SpawnSnakeMonster1_4</defName>
<workClass>Event_EntityGenerater</workClass>
<parameter>
{
"DefinitionsToChooseFrom":[ { "DefName":"SnakeMonster1", "DefTypeName":"MonsterDef" } ],
"LocationType":"OffMap",
"Count":4
}
</parameter>
</EventDef>
<!-- 第三波(精英)怪物生成事件 -->
<EventDef>
<defName>Event_SpawnMonsterC1_1</defName>
<workClass>Event_EntityGenerater</workClass>
<parameter>
{
"DefinitionsToChooseFrom":[ { "DefName":"MonsterC1", "DefTypeName":"MonsterDef" } ],
"LocationType":"OffMap",
"Count":1
}
</parameter>
</EventDef>
<EventDef>
<defName>Event_SpawnMonsterC2_1</defName>
<workClass>Event_EntityGenerater</workClass>
<parameter>
{
"DefinitionsToChooseFrom":[ { "DefName":"MonsterC2", "DefTypeName":"MonsterDef" } ],
"LocationType":"OffMap",
"Count":1
}
</parameter>
</EventDef>
<EventDef>
<defName>Event_SpawnMaskMonster4_2</defName>
<workClass>Event_EntityGenerater</workClass>
<parameter>
{
"DefinitionsToChooseFrom":[ { "DefName":"MaskMonster4", "DefTypeName":"MonsterDef" } ],
"LocationType":"OffMap",
"Count":2
}
</parameter>
</EventDef>
<EventDef>
<defName>Event_SpawnSnakeMonster4_2</defName>
<workClass>Event_EntityGenerater</workClass>
<parameter>
{
"DefinitionsToChooseFrom":[ { "DefName":"SnakeMonster4", "DefTypeName":"MonsterDef" } ],
"LocationType":"OffMap",
"Count":2
}
</parameter>
</EventDef>
<EventDef>
<defName>Event_SpawnRatMonster2_3</defName>
<workClass>Event_EntityGenerater</workClass>
<parameter>
{
"DefinitionsToChooseFrom":[ { "DefName":"RatMonster2", "DefTypeName":"MonsterDef" } ],
"LocationType":"OffMap",
"Count":3
}
</parameter>
</EventDef>
<EventDef>
<defName>Event_SpawnHoloMonster3_1</defName>
<workClass>Event_EntityGenerater</workClass>
<parameter>
{
"DefinitionsToChooseFrom":[ { "DefName":"HoloMonster3", "DefTypeName":"MonsterDef" } ],
"LocationType":"OffMap",
"Count":1
}
</parameter>
</EventDef>
<EventDef>
<defName>Event_SpawnMonsterE1_3</defName>
<workClass>Event_EntityGenerater</workClass>
<parameter>
{
"DefinitionsToChooseFrom":[ { "DefName":"MonsterE1", "DefTypeName":"MonsterDef" } ],
"LocationType":"OffMap",
"Count":3
}
</parameter>
</EventDef>
<!-- 最终BOSS波怪物生成事件 -->
<EventDef>
<defName>Event_SpawnMonsterF1_1</defName>
<workClass>Event_EntityGenerater</workClass>
<parameter>
{
"DefinitionsToChooseFrom":[ { "DefName":"MonsterF1", "DefTypeName":"MonsterDef" } ],
"LocationType":"OffMap",
"Count":1
}
</parameter>
</EventDef>
<EventDef>
<defName>Event_SpawnMonsterF2_1</defName>
<workClass>Event_EntityGenerater</workClass>
<parameter>
{
"DefinitionsToChooseFrom":[ { "DefName":"MonsterF2", "DefTypeName":"MonsterDef" } ],
"LocationType":"OffMap",
"Count":1
}
</parameter>
</EventDef>
<EventDef>
<defName>Event_SpawnMonsterE2_2</defName>
<workClass>Event_EntityGenerater</workClass>
<parameter>
{
"DefinitionsToChooseFrom":[ { "DefName":"MonsterE2", "DefTypeName":"MonsterDef" } ],
"LocationType":"OffMap",
"Count":2
}
</parameter>
</EventDef>
<EventDef>
<defName>Event_SpawnMonsterD2_1</defName>
<workClass>Event_EntityGenerater</workClass>
<parameter>
{
"DefinitionsToChooseFrom":[ { "DefName":"MonsterD2", "DefTypeName":"MonsterDef" } ],
"LocationType":"OffMap",
"Count":1
}
</parameter>
</EventDef>
<!-- 3. StoryStageDef (故事阶段定义) -->
<!-- 剧本开始阶段:显示总览警告 -->
<StoryStageDef>
<defName>Stage_AssaultIntro</defName>
<lastWaitTime>0</lastWaitTime> <!-- 上一阶段结束后立即执行 -->
<nextWaitTime>3</nextWaitTime> <!-- 显示警报后等待3秒 -->
<messageDef>AssaultStartMessage</messageDef>
</StoryStageDef>
<!-- 第一波:基础攻击者阶段 -->
<StoryStageDef>
<defName>Stage_Wave1_Warning</defName>
<lastWaitTime>0</lastWaitTime>
<nextWaitTime>2</nextWaitTime> <!-- 显示警告后等待2秒 -->
<messageDef>Wave1WarningMessage</messageDef>
</StoryStageDef>
<StoryStageDef>
<defName>Stage_Wave1_Spawn_MonsterA1</defName>
<lastWaitTime>0</lastWaitTime>
<nextWaitTime>0</nextWaitTime> <!-- 立即进入下一个生成阶段 -->
<eventDef>Event_SpawnMonsterA1_3</eventDef>
</StoryStageDef>
<StoryStageDef>
<defName>Stage_Wave1_Spawn_MonsterA2</defName>
<lastWaitTime>0</lastWaitTime>
<nextWaitTime>0</nextWaitTime> <!-- 立即进入下一个生成阶段 -->
<eventDef>Event_SpawnMonsterA2_2</eventDef>
</StoryStageDef>
<StoryStageDef>
<defName>Stage_Wave1_Spawn_RatMonster1</defName>
<lastWaitTime>0</lastWaitTime>
<nextWaitTime>15</nextWaitTime> <!-- 生成该波所有怪物后等待15秒让玩家清理 -->
<eventDef>Event_SpawnRatMonster1_5</eventDef>
</StoryStageDef>
<!-- 第二波:混合威胁阶段 -->
<StoryStageDef>
<defName>Stage_Wave2_Warning</defName>
<lastWaitTime>0</lastWaitTime>
<nextWaitTime>2</nextWaitTime>
<messageDef>Wave2WarningMessage</messageDef>
</StoryStageDef>
<StoryStageDef>
<defName>Stage_Wave2_Spawn_MonsterB1</defName>
<lastWaitTime>0</lastWaitTime>
<nextWaitTime>0</nextWaitTime>
<eventDef>Event_SpawnMonsterB1_4</eventDef>
</StoryStageDef>
<StoryStageDef>
<defName>Stage_Wave2_Spawn_MonsterD1</defName>
<lastWaitTime>0</lastWaitTime>
<nextWaitTime>0</nextWaitTime>
<eventDef>Event_SpawnMonsterD1_3</eventDef>
</StoryStageDef>
<StoryStageDef>
<defName>Stage_Wave2_Spawn_MaskMonster1</defName>
<lastWaitTime>0</lastWaitTime>
<nextWaitTime>0</nextWaitTime>
<eventDef>Event_SpawnMaskMonster1_3</eventDef>
</StoryStageDef>
<StoryStageDef>
<defName>Stage_Wave2_Spawn_SnakeMonster1</defName>
<lastWaitTime>0</lastWaitTime>
<nextWaitTime>20</nextWaitTime> <!-- 清理时间20秒 -->
<eventDef>Event_SpawnSnakeMonster1_4</eventDef>
</StoryStageDef>
<!-- 第三波:精英突击阶段 -->
<StoryStageDef>
<defName>Stage_Wave3_Warning</defName>
<lastWaitTime>0</lastWaitTime>
<nextWaitTime>3</nextWaitTime>
<messageDef>Wave3WarningMessage</messageDef>
</StoryStageDef>
<StoryStageDef>
<defName>Stage_Wave3_Spawn_MonsterC1</defName>
<lastWaitTime>0</lastWaitTime>
<nextWaitTime>0</nextWaitTime>
<eventDef>Event_SpawnMonsterC1_1</eventDef>
</StoryStageDef>
<StoryStageDef>
<defName>Stage_Wave3_Spawn_MonsterC2</defName>
<lastWaitTime>0</lastWaitTime>
<nextWaitTime>0</nextWaitTime>
<eventDef>Event_SpawnMonsterC2_1</eventDef>
</StoryStageDef>
<StoryStageDef>
<defName>Stage_Wave3_Spawn_MaskMonster4</defName>
<lastWaitTime>0</lastWaitTime>
<nextWaitTime>0</nextWaitTime>
<eventDef>Event_SpawnMaskMonster4_2</eventDef>
</StoryStageDef>
<StoryStageDef>
<defName>Stage_Wave3_Spawn_SnakeMonster4</defName>
<lastWaitTime>0</lastWaitTime>
<nextWaitTime>0</nextWaitTime>
<eventDef>Event_SpawnSnakeMonster4_2</eventDef>
</StoryStageDef>
<StoryStageDef>
<defName>Stage_Wave3_Spawn_RatMonster2</defName>
<lastWaitTime>0</lastWaitTime>
<nextWaitTime>0</nextWaitTime>
<eventDef>Event_SpawnRatMonster2_3</eventDef>
</StoryStageDef>
<StoryStageDef>
<defName>Stage_Wave3_Spawn_HoloMonster3</defName>
<lastWaitTime>0</lastWaitTime>
<nextWaitTime>0</nextWaitTime>
<eventDef>Event_SpawnHoloMonster3_1</eventDef>
</StoryStageDef>
<StoryStageDef>
<defName>Stage_Wave3_Spawn_MonsterE1</defName>
<lastWaitTime>0</lastWaitTime>
<nextWaitTime>25</nextWaitTime> <!-- 清理时间25秒 -->
<eventDef>Event_SpawnMonsterE1_3</eventDef>
</StoryStageDef>
<!-- 最终波BOSS战阶段 -->
<StoryStageDef>
<defName>Stage_BossWave_Warning</defName>
<lastWaitTime>0</lastWaitTime>
<nextWaitTime>3</nextWaitTime>
<messageDef>BossWaveWarningMessage</messageDef>
</StoryStageDef>
<StoryStageDef>
<defName>Stage_BossWave_Spawn_MonsterF1</defName>
<lastWaitTime>0</lastWaitTime>
<nextWaitTime>0</nextWaitTime>
<eventDef>Event_SpawnMonsterF1_1</eventDef>
</StoryStageDef>
<StoryStageDef>
<defName>Stage_BossWave_Spawn_MonsterF2</defName>
<lastWaitTime>0</lastWaitTime>
<nextWaitTime>0</nextWaitTime>
<eventDef>Event_SpawnMonsterF2_1</eventDef>
</StoryStageDef>
<StoryStageDef>
<defName>Stage_BossWave_Spawn_MonsterE2</defName>
<lastWaitTime>0</lastWaitTime>
<nextWaitTime>0</nextWaitTime>
<eventDef>Event_SpawnMonsterE2_2</eventDef>
</StoryStageDef>
<StoryStageDef>
<defName>Stage_BossWave_Spawn_MonsterD2</defName>
<lastWaitTime>0</lastWaitTime>
<nextWaitTime>30</nextWaitTime> <!-- BOSS战清理时间30秒 -->
<eventDef>Event_SpawnMonsterD2_1</eventDef>
</StoryStageDef>
<!-- 剧本结束阶段:显示完成消息 -->
<StoryStageDef>
<defName>Stage_AssaultConclude</defName>
<lastWaitTime>0</lastWaitTime>
<nextWaitTime>0</nextWaitTime> <!-- 不等待,直接结束剧本 -->
<messageDef>AssaultCompleteMessage</messageDef>
</StoryStageDef>
<!-- 4. StoryDef (故事定义) -->
<!-- 将所有阶段整合为一个完整的怪物侵袭剧本 -->
<StoryDef>
<defName>MonsterAssaultScenario</defName>
<label>怪物侵袭剧本 (多波次)</label>
<description>这是一个包含多波怪物袭击的挑战剧本玩家将面对不同类型的敌人并最终迎击强大的BOSS。</description>
<storyStage>
<li>Stage_AssaultIntro</li>
<li>Stage_Wave1_Warning</li>
<li>Stage_Wave1_Spawn_MonsterA1</li>
<li>Stage_Wave1_Spawn_MonsterA2</li>
<li>Stage_Wave1_Spawn_RatMonster1</li>
<li>Stage_Wave2_Warning</li>
<li>Stage_Wave2_Spawn_MonsterB1</li>
<li>Stage_Wave2_Spawn_MonsterD1</li>
<li>Stage_Wave2_Spawn_MaskMonster1</li>
<li>Stage_Wave2_Spawn_SnakeMonster1</li>
<li>Stage_Wave3_Warning</li>
<li>Stage_Wave3_Spawn_MonsterC1</li>
<li>Stage_Wave3_Spawn_MonsterC2</li>
<li>Stage_Wave3_Spawn_MaskMonster4</li>
<li>Stage_Wave3_Spawn_SnakeMonster4</li>
<li>Stage_Wave3_Spawn_RatMonster2</li>
<li>Stage_Wave3_Spawn_HoloMonster3</li>
<li>Stage_Wave3_Spawn_MonsterE1</li>
<li>Stage_BossWave_Warning</li>
<li>Stage_BossWave_Spawn_MonsterF1</li>
<li>Stage_BossWave_Spawn_MonsterF2</li>
<li>Stage_BossWave_Spawn_MonsterE2</li>
<li>Stage_BossWave_Spawn_MonsterD2</li>
<li>Stage_AssaultConclude</li>
</storyStage>
</StoryDef>
</Define>

View File

@ -15,6 +15,13 @@
<path>Resources\Item\YellowBullet_down.png</path>
</ImageDef>
<ImageDef>
<defName>testGunAttackAnimation</defName>
<path>Resources\AttackAnimation\AttackAnimations.png</path>
<wCount>10</wCount>
<hCount>1</hCount>
</ImageDef>
<AttributesDef>
<defName>TestGun</defName>
<attack>10</attack>
@ -31,9 +38,26 @@
<!-- 引用属性定义 -->
<attributes>TestGun</attributes>
<type>Ranged</type>
<FPS>2</FPS>
<textures>
<li>TestGunItem</li>
</textures>
<attackAnimation>
<li>testGunAttackAnimation_0</li>
<li>testGunAttackAnimation_1</li>
<li>testGunAttackAnimation_2</li>
<li>testGunAttackAnimation_3</li>
<li>testGunAttackAnimation_4</li>
<li>testGunAttackAnimation_5</li>
<li>testGunAttackAnimation_6</li>
<li>testGunAttackAnimation_7</li>
<li>testGunAttackAnimation_8</li>
<li>testGunAttackAnimation_9</li>
</attackAnimation>
<attackDetectionTime>2.5</attackDetectionTime>
<maxStack>1</maxStack>
<rarity>Uncommon</rarity>
<attackDetectionTime>0.3</attackDetectionTime>
<!-- 引用子弹定义 -->
<bullet>yellowBullet</bullet>
</WeaponDef>