战斗管理系统基础
This commit is contained in:
@@ -100,7 +100,7 @@
|
|||||||
"_lpos": {
|
"_lpos": {
|
||||||
"__type__": "cc.Vec3",
|
"__type__": "cc.Vec3",
|
||||||
"x": 0,
|
"x": 0,
|
||||||
"y": -11.989,
|
"y": 0,
|
||||||
"z": 0
|
"z": 0
|
||||||
},
|
},
|
||||||
"_lrot": {
|
"_lrot": {
|
||||||
|
|||||||
@@ -1,290 +0,0 @@
|
|||||||
[
|
|
||||||
{
|
|
||||||
"__type__": "cc.Prefab",
|
|
||||||
"_name": "damageText",
|
|
||||||
"_objFlags": 0,
|
|
||||||
"__editorExtras__": {},
|
|
||||||
"_native": "",
|
|
||||||
"data": {
|
|
||||||
"__id__": 1
|
|
||||||
},
|
|
||||||
"optimizationPolicy": 0,
|
|
||||||
"persistent": false
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"__type__": "cc.Node",
|
|
||||||
"_name": "damageText",
|
|
||||||
"_objFlags": 0,
|
|
||||||
"__editorExtras__": {},
|
|
||||||
"_parent": null,
|
|
||||||
"_children": [
|
|
||||||
{
|
|
||||||
"__id__": 2
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"_active": true,
|
|
||||||
"_components": [
|
|
||||||
{
|
|
||||||
"__id__": 8
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"__id__": 10
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"_prefab": {
|
|
||||||
"__id__": 12
|
|
||||||
},
|
|
||||||
"_lpos": {
|
|
||||||
"__type__": "cc.Vec3",
|
|
||||||
"x": 0,
|
|
||||||
"y": 0,
|
|
||||||
"z": 0
|
|
||||||
},
|
|
||||||
"_lrot": {
|
|
||||||
"__type__": "cc.Quat",
|
|
||||||
"x": 0,
|
|
||||||
"y": 0,
|
|
||||||
"z": 0,
|
|
||||||
"w": 1
|
|
||||||
},
|
|
||||||
"_lscale": {
|
|
||||||
"__type__": "cc.Vec3",
|
|
||||||
"x": 1,
|
|
||||||
"y": 1,
|
|
||||||
"z": 1
|
|
||||||
},
|
|
||||||
"_mobility": 0,
|
|
||||||
"_layer": 1,
|
|
||||||
"_euler": {
|
|
||||||
"__type__": "cc.Vec3",
|
|
||||||
"x": 0,
|
|
||||||
"y": 0,
|
|
||||||
"z": 0
|
|
||||||
},
|
|
||||||
"_id": ""
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"__type__": "cc.Node",
|
|
||||||
"_name": "DamageText",
|
|
||||||
"_objFlags": 0,
|
|
||||||
"__editorExtras__": {},
|
|
||||||
"_parent": {
|
|
||||||
"__id__": 1
|
|
||||||
},
|
|
||||||
"_children": [],
|
|
||||||
"_active": true,
|
|
||||||
"_components": [
|
|
||||||
{
|
|
||||||
"__id__": 3
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"__id__": 5
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"_prefab": {
|
|
||||||
"__id__": 7
|
|
||||||
},
|
|
||||||
"_lpos": {
|
|
||||||
"__type__": "cc.Vec3",
|
|
||||||
"x": 0,
|
|
||||||
"y": 0,
|
|
||||||
"z": 0
|
|
||||||
},
|
|
||||||
"_lrot": {
|
|
||||||
"__type__": "cc.Quat",
|
|
||||||
"x": 0,
|
|
||||||
"y": 0,
|
|
||||||
"z": 0,
|
|
||||||
"w": 1
|
|
||||||
},
|
|
||||||
"_lscale": {
|
|
||||||
"__type__": "cc.Vec3",
|
|
||||||
"x": 1,
|
|
||||||
"y": 1,
|
|
||||||
"z": 1
|
|
||||||
},
|
|
||||||
"_mobility": 0,
|
|
||||||
"_layer": 1,
|
|
||||||
"_euler": {
|
|
||||||
"__type__": "cc.Vec3",
|
|
||||||
"x": 0,
|
|
||||||
"y": 0,
|
|
||||||
"z": 0
|
|
||||||
},
|
|
||||||
"_id": ""
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"__type__": "cc.UITransform",
|
|
||||||
"_name": "",
|
|
||||||
"_objFlags": 0,
|
|
||||||
"__editorExtras__": {},
|
|
||||||
"node": {
|
|
||||||
"__id__": 2
|
|
||||||
},
|
|
||||||
"_enabled": true,
|
|
||||||
"__prefab": {
|
|
||||||
"__id__": 4
|
|
||||||
},
|
|
||||||
"_contentSize": {
|
|
||||||
"__type__": "cc.Size",
|
|
||||||
"width": 22.61767578125,
|
|
||||||
"height": 39.8
|
|
||||||
},
|
|
||||||
"_anchorPoint": {
|
|
||||||
"__type__": "cc.Vec2",
|
|
||||||
"x": 0.5,
|
|
||||||
"y": 0.5
|
|
||||||
},
|
|
||||||
"_id": ""
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"__type__": "cc.CompPrefabInfo",
|
|
||||||
"fileId": "b2q8sfHG5IWKdfC5g/dDbk"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"__type__": "cc.Label",
|
|
||||||
"_name": "",
|
|
||||||
"_objFlags": 0,
|
|
||||||
"__editorExtras__": {},
|
|
||||||
"node": {
|
|
||||||
"__id__": 2
|
|
||||||
},
|
|
||||||
"_enabled": true,
|
|
||||||
"__prefab": {
|
|
||||||
"__id__": 6
|
|
||||||
},
|
|
||||||
"_customMaterial": null,
|
|
||||||
"_srcBlendFactor": 2,
|
|
||||||
"_dstBlendFactor": 4,
|
|
||||||
"_color": {
|
|
||||||
"__type__": "cc.Color",
|
|
||||||
"r": 255,
|
|
||||||
"g": 0,
|
|
||||||
"b": 0,
|
|
||||||
"a": 255
|
|
||||||
},
|
|
||||||
"_string": "10",
|
|
||||||
"_horizontalAlign": 1,
|
|
||||||
"_verticalAlign": 1,
|
|
||||||
"_actualFontSize": 25,
|
|
||||||
"_fontSize": 25,
|
|
||||||
"_fontFamily": "Arial",
|
|
||||||
"_lineHeight": 30,
|
|
||||||
"_overflow": 0,
|
|
||||||
"_enableWrapText": true,
|
|
||||||
"_font": {
|
|
||||||
"__uuid__": "a8f2a4a3-911f-43d3-9174-f2176554d7d4",
|
|
||||||
"__expectedType__": "cc.TTFFont"
|
|
||||||
},
|
|
||||||
"_isSystemFontUsed": false,
|
|
||||||
"_spacingX": 0,
|
|
||||||
"_isItalic": false,
|
|
||||||
"_isBold": false,
|
|
||||||
"_isUnderline": false,
|
|
||||||
"_underlineHeight": 2,
|
|
||||||
"_cacheMode": 1,
|
|
||||||
"_enableOutline": true,
|
|
||||||
"_outlineColor": {
|
|
||||||
"__type__": "cc.Color",
|
|
||||||
"r": 0,
|
|
||||||
"g": 0,
|
|
||||||
"b": 0,
|
|
||||||
"a": 255
|
|
||||||
},
|
|
||||||
"_outlineWidth": 1,
|
|
||||||
"_enableShadow": false,
|
|
||||||
"_shadowColor": {
|
|
||||||
"__type__": "cc.Color",
|
|
||||||
"r": 0,
|
|
||||||
"g": 0,
|
|
||||||
"b": 0,
|
|
||||||
"a": 255
|
|
||||||
},
|
|
||||||
"_shadowOffset": {
|
|
||||||
"__type__": "cc.Vec2",
|
|
||||||
"x": 2,
|
|
||||||
"y": 2
|
|
||||||
},
|
|
||||||
"_shadowBlur": 2,
|
|
||||||
"_id": ""
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"__type__": "cc.CompPrefabInfo",
|
|
||||||
"fileId": "c7azLszJlJJ4fkJyxPrZYJ"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"__type__": "cc.PrefabInfo",
|
|
||||||
"root": {
|
|
||||||
"__id__": 1
|
|
||||||
},
|
|
||||||
"asset": {
|
|
||||||
"__id__": 0
|
|
||||||
},
|
|
||||||
"fileId": "76Mh85YlFJNY/DWA9qkpBH",
|
|
||||||
"instance": null,
|
|
||||||
"targetOverrides": null,
|
|
||||||
"nestedPrefabInstanceRoots": null
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"__type__": "cc.UITransform",
|
|
||||||
"_name": "",
|
|
||||||
"_objFlags": 0,
|
|
||||||
"__editorExtras__": {},
|
|
||||||
"node": {
|
|
||||||
"__id__": 1
|
|
||||||
},
|
|
||||||
"_enabled": true,
|
|
||||||
"__prefab": {
|
|
||||||
"__id__": 9
|
|
||||||
},
|
|
||||||
"_contentSize": {
|
|
||||||
"__type__": "cc.Size",
|
|
||||||
"width": 100,
|
|
||||||
"height": 100
|
|
||||||
},
|
|
||||||
"_anchorPoint": {
|
|
||||||
"__type__": "cc.Vec2",
|
|
||||||
"x": 0.5,
|
|
||||||
"y": 0.5
|
|
||||||
},
|
|
||||||
"_id": ""
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"__type__": "cc.CompPrefabInfo",
|
|
||||||
"fileId": "2fHdG8eeBH07DW0tmYrhH9"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"__type__": "96d16N6LftMNLYMRBRGVsYW",
|
|
||||||
"_name": "",
|
|
||||||
"_objFlags": 0,
|
|
||||||
"__editorExtras__": {},
|
|
||||||
"node": {
|
|
||||||
"__id__": 1
|
|
||||||
},
|
|
||||||
"_enabled": true,
|
|
||||||
"__prefab": {
|
|
||||||
"__id__": 11
|
|
||||||
},
|
|
||||||
"label": {
|
|
||||||
"__id__": 5
|
|
||||||
},
|
|
||||||
"critEffect": null,
|
|
||||||
"_id": ""
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"__type__": "cc.CompPrefabInfo",
|
|
||||||
"fileId": "8aOWJ+ZllPHKeljR7my1SB"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"__type__": "cc.PrefabInfo",
|
|
||||||
"root": {
|
|
||||||
"__id__": 1
|
|
||||||
},
|
|
||||||
"asset": {
|
|
||||||
"__id__": 0
|
|
||||||
},
|
|
||||||
"fileId": "c46/YsCPVOJYA4mWEpNYRx",
|
|
||||||
"instance": null,
|
|
||||||
"targetOverrides": null
|
|
||||||
}
|
|
||||||
]
|
|
||||||
@@ -1,13 +0,0 @@
|
|||||||
{
|
|
||||||
"ver": "1.1.50",
|
|
||||||
"importer": "prefab",
|
|
||||||
"imported": true,
|
|
||||||
"uuid": "cd550fa0-4951-4d3c-a22e-c7ad5520ade4",
|
|
||||||
"files": [
|
|
||||||
".json"
|
|
||||||
],
|
|
||||||
"subMetas": {},
|
|
||||||
"userData": {
|
|
||||||
"syncNodeName": "damageText"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -224,9 +224,9 @@
|
|||||||
"_dstBlendFactor": 4,
|
"_dstBlendFactor": 4,
|
||||||
"_color": {
|
"_color": {
|
||||||
"__type__": "cc.Color",
|
"__type__": "cc.Color",
|
||||||
"r": 255,
|
"r": 172,
|
||||||
"g": 0,
|
"g": 166,
|
||||||
"b": 0,
|
"b": 166,
|
||||||
"a": 255
|
"a": 255
|
||||||
},
|
},
|
||||||
"_string": "10",
|
"_string": "10",
|
||||||
@@ -628,7 +628,7 @@
|
|||||||
"z": 1
|
"z": 1
|
||||||
},
|
},
|
||||||
"_mobility": 0,
|
"_mobility": 0,
|
||||||
"_layer": 1,
|
"_layer": 1073741824,
|
||||||
"_euler": {
|
"_euler": {
|
||||||
"__type__": "cc.Vec3",
|
"__type__": "cc.Vec3",
|
||||||
"x": 0,
|
"x": 0,
|
||||||
@@ -678,7 +678,7 @@
|
|||||||
"z": 1
|
"z": 1
|
||||||
},
|
},
|
||||||
"_mobility": 0,
|
"_mobility": 0,
|
||||||
"_layer": 1,
|
"_layer": 1073741824,
|
||||||
"_euler": {
|
"_euler": {
|
||||||
"__type__": "cc.Vec3",
|
"__type__": "cc.Vec3",
|
||||||
"x": 0,
|
"x": 0,
|
||||||
|
|||||||
@@ -2276,7 +2276,7 @@
|
|||||||
"__id__": 384
|
"__id__": 384
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"_active": false,
|
"_active": true,
|
||||||
"_components": [
|
"_components": [
|
||||||
{
|
{
|
||||||
"__id__": 616
|
"__id__": 616
|
||||||
@@ -34035,7 +34035,7 @@
|
|||||||
"__id__": 1586
|
"__id__": 1586
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"_active": true,
|
"_active": false,
|
||||||
"_components": [
|
"_components": [
|
||||||
{
|
{
|
||||||
"__id__": 2336
|
"__id__": 2336
|
||||||
|
|||||||
@@ -1,9 +0,0 @@
|
|||||||
{
|
|
||||||
"ver": "1.2.0",
|
|
||||||
"importer": "directory",
|
|
||||||
"imported": true,
|
|
||||||
"uuid": "7df2a856-04db-4d7e-8c91-90db8e4e63e9",
|
|
||||||
"files": [],
|
|
||||||
"subMetas": {},
|
|
||||||
"userData": {}
|
|
||||||
}
|
|
||||||
@@ -1,24 +1,37 @@
|
|||||||
import { ecs } from "../../../../extensions/oops-plugin-framework/assets/libs/ecs/ECS";
|
import { ecs } from "../../../../extensions/oops-plugin-framework/assets/libs/ecs/ECS";
|
||||||
import { BattleState } from "./BattleStateComp";
|
import { BattleStateComp } from "./BattleStateComp";
|
||||||
import { DamageResult } from "../damage/DamageComp";
|
import { DamageResult } from "../damage/DamageComp";
|
||||||
|
import { HeroViewComp } from "../hero/HeroViewComp";
|
||||||
|
import { HeroSkillsComp } from "../skill/heroSkillsComp";
|
||||||
|
import { HCardComp } from "../map/HCardComp";
|
||||||
|
|
||||||
@ecs.register('BattleEndSystem')
|
@ecs.register('BattleEndSystem')
|
||||||
export class BattleEndSystem extends ecs.ComblockSystem {
|
export class BattleEndSystem extends ecs.ComblockSystem {
|
||||||
filter(): ecs.IMatcher {
|
filter(): ecs.IMatcher {
|
||||||
return ecs.allOf(BattleState);
|
return ecs.allOf(BattleStateComp);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
update(e: ecs.Entity) {
|
update(e: ecs.Entity) {
|
||||||
const state = e.get(BattleState);
|
const state = e.get(BattleStateComp);
|
||||||
if (state.isEnded) {
|
if (state.isEnded) {
|
||||||
// 清理所有残留伤害组件
|
// 清理战斗残留组件
|
||||||
ecs.query(ecs.allOf(DamageResult)).forEach(entity => {
|
this.cleanComponents();
|
||||||
entity.remove(DamageResult);
|
|
||||||
});
|
|
||||||
|
|
||||||
// 重置战斗状态
|
// 重置状态
|
||||||
state.isEnded = false;
|
state.reset();
|
||||||
|
console.log(`战斗结束,持续时间: ${Date.now() - state.startTime}ms`);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private cleanComponents() {
|
||||||
|
console.log("cleanComponents");
|
||||||
|
console.log("DamageResult",ecs.query(ecs.allOf(DamageResult)));
|
||||||
|
console.log("HCardComp",ecs.query(ecs.allOf(HCardComp)));
|
||||||
|
console.log("HeroSkillsComp",ecs.query(ecs.allOf(HeroSkillsComp)));
|
||||||
|
console.log("HeroViewComp",ecs.query(ecs.allOf(HeroViewComp)));
|
||||||
|
ecs.query(ecs.allOf(DamageResult)).forEach(entity => entity.remove(DamageResult));
|
||||||
|
ecs.query(ecs.allOf(HCardComp)).forEach(entity => entity.remove(HCardComp));
|
||||||
|
ecs.query(ecs.allOf(HeroSkillsComp)).forEach(entity => entity.remove(HeroSkillsComp));
|
||||||
|
ecs.query(ecs.allOf(HeroViewComp)).forEach(entity => entity.remove(HeroViewComp));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
17
assets/script/game/battle/BattleEntity.ts
Normal file
17
assets/script/game/battle/BattleEntity.ts
Normal file
@@ -0,0 +1,17 @@
|
|||||||
|
import { ecs } from "../../../../extensions/oops-plugin-framework/assets/libs/ecs/ECS";
|
||||||
|
import { BattleStateComp } from "./BattleStateComp";
|
||||||
|
import { BattleManagerComp } from "./BattleManagerComp";
|
||||||
|
|
||||||
|
/** 战斗实体 */
|
||||||
|
export class BattleEntity extends ecs.Entity {
|
||||||
|
BattleState!: BattleStateComp;
|
||||||
|
BattleManager!: BattleManagerComp;
|
||||||
|
|
||||||
|
constructor() {
|
||||||
|
super();
|
||||||
|
}
|
||||||
|
|
||||||
|
protected init() {
|
||||||
|
this.addComponents<ecs.Comp>(BattleStateComp, BattleManagerComp);
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -2,7 +2,7 @@
|
|||||||
"ver": "4.0.23",
|
"ver": "4.0.23",
|
||||||
"importer": "typescript",
|
"importer": "typescript",
|
||||||
"imported": true,
|
"imported": true,
|
||||||
"uuid": "9c86e3d7-f8da-4e74-b180-76fe3f1fda90",
|
"uuid": "12e09b78-0059-421e-bab8-1677760401d1",
|
||||||
"files": [],
|
"files": [],
|
||||||
"subMetas": {},
|
"subMetas": {},
|
||||||
"userData": {}
|
"userData": {}
|
||||||
@@ -1,76 +1,46 @@
|
|||||||
import { oops } from "db://oops-framework/core/Oops";
|
|
||||||
import { ecs } from "../../../../extensions/oops-plugin-framework/assets/libs/ecs/ECS";
|
import { ecs } from "../../../../extensions/oops-plugin-framework/assets/libs/ecs/ECS";
|
||||||
import { BattleState } from "./BattleStateComp";
|
import { BattleEntity } from "./BattleEntity";
|
||||||
import { smc } from "../common/SingletonModuleComp";
|
import { BattleStateComp } from "./BattleStateComp";
|
||||||
import { GameEvent } from "../common/config/GameEvent";
|
import { UIID } from "../common/config/GameUIConfig";
|
||||||
|
import { oops } from "db://oops-framework/core/Oops";
|
||||||
@ecs.register('BattleManager')
|
|
||||||
export class BattleManager extends ecs.Entity {
|
|
||||||
private static _instance: BattleManager;
|
|
||||||
|
|
||||||
static get instance(): BattleManager {
|
|
||||||
if (!this._instance) {
|
|
||||||
this._instance = new BattleManager();
|
|
||||||
this._instance.add(BattleState);
|
|
||||||
}
|
|
||||||
return this._instance;
|
|
||||||
|
|
||||||
|
export class BattleManager {
|
||||||
|
/** 获取战斗实体实例 */
|
||||||
|
static get instance(): ecs.Entity {
|
||||||
|
return ecs.query(ecs.allOf(BattleStateComp))[0];
|
||||||
}
|
}
|
||||||
|
|
||||||
/** 外部调用入口:开始新战斗 */
|
/** 启动战斗 */
|
||||||
startBattle(missionId: number) {
|
static startBattle(missionId: number) {
|
||||||
this.get(BattleState).isEnded = false;
|
const entity = ecs.getEntity(BattleEntity);
|
||||||
// 加载关卡配置、生成敌人等
|
entity.get(BattleStateComp).missionId = missionId;
|
||||||
smc.mission.load(missionId);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/** 外部调用入口:结束战斗 */
|
/** 结束战斗 */
|
||||||
endBattle() {
|
static endBattle() {
|
||||||
this.get(BattleState).isEnded = true;
|
const entity = ecs.query(ecs.allOf(BattleStateComp))[0];
|
||||||
|
if (entity) {
|
||||||
|
entity.get(BattleStateComp).isEnded = true;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private initEvents() {
|
/** 扩展:带UI管理的战斗启动 */
|
||||||
oops.message.on("HeroDead", this.onHeroDead, this);
|
static startBattleWithUI(missionId: number) {
|
||||||
oops.message.on("AllEnemyDead", this.onAllEnemyDead, this);
|
// 关闭主界面
|
||||||
oops.message.on(GameEvent.MissionEnd, this.endBattle, this);
|
// oops.gui.remove(UIID.MainMenu);
|
||||||
oops.message.on("BattleEndCheck", this.onBattleEndCheck, this);
|
// // 显示战斗HUD
|
||||||
|
// oops.gui.open(UIID.BattleHUD);
|
||||||
|
// 启动战斗
|
||||||
|
this.startBattle(missionId);
|
||||||
}
|
}
|
||||||
|
|
||||||
private onHeroDead() {
|
/** 扩展:带UI管理的战斗结束 */
|
||||||
|
static endBattleWithUI(isVictory: boolean) {
|
||||||
|
// 关闭战斗HUD
|
||||||
|
// oops.gui.remove(UIID.BattleHUD);
|
||||||
|
// 显示结算界面
|
||||||
|
// oops.gui.open(isVictory ? UIID.Victory : UIID.Defeat);
|
||||||
|
// 结束战斗
|
||||||
this.endBattle();
|
this.endBattle();
|
||||||
}
|
}
|
||||||
|
|
||||||
private onAllEnemyDead() {
|
|
||||||
this.endBattle();
|
|
||||||
}
|
|
||||||
|
|
||||||
private onBattleEndCheck() {
|
|
||||||
// 留空或添加实际需要的检测逻辑
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
@ecs.register('BattleManagerComp')
|
|
||||||
export class BattleManagerComp extends ecs.Comp {
|
|
||||||
reset() {
|
|
||||||
// 初始化战斗状态
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
export class BattleManagerSystem extends ecs.ComblockSystem {
|
|
||||||
filter(): ecs.IMatcher {
|
|
||||||
return ecs.allOf(BattleManagerComp);
|
|
||||||
}
|
|
||||||
|
|
||||||
update(e: ecs.Entity) {
|
|
||||||
const state = e.get(BattleState);
|
|
||||||
if (state.isEnded) {
|
|
||||||
// 处理战斗结束逻辑
|
|
||||||
this.onBattleEnd(e);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private onBattleEnd(entity: ecs.Entity) {
|
|
||||||
// 发放奖励、保存进度等
|
|
||||||
entity.destroy();
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
13
assets/script/game/battle/BattleManagerComp.ts
Normal file
13
assets/script/game/battle/BattleManagerComp.ts
Normal file
@@ -0,0 +1,13 @@
|
|||||||
|
import { ecs } from "../../../../extensions/oops-plugin-framework/assets/libs/ecs/ECS";
|
||||||
|
|
||||||
|
/** 战斗管理组件 */
|
||||||
|
@ecs.register('BattleManager')
|
||||||
|
export class BattleManagerComp extends ecs.Comp {
|
||||||
|
/** 单例实例 */
|
||||||
|
static instance: ecs.Entity;
|
||||||
|
|
||||||
|
reset() {
|
||||||
|
BattleManagerComp.instance = this.ent;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
@@ -2,7 +2,7 @@
|
|||||||
"ver": "4.0.23",
|
"ver": "4.0.23",
|
||||||
"importer": "typescript",
|
"importer": "typescript",
|
||||||
"imported": true,
|
"imported": true,
|
||||||
"uuid": "96d1637a-2dfb-4c34-b60c-44144656c616",
|
"uuid": "7ab0451e-efe7-4ec3-9d54-d7027a96e005",
|
||||||
"files": [],
|
"files": [],
|
||||||
"subMetas": {},
|
"subMetas": {},
|
||||||
"userData": {}
|
"userData": {}
|
||||||
53
assets/script/game/battle/BattlePhaseSystem.ts
Normal file
53
assets/script/game/battle/BattlePhaseSystem.ts
Normal file
@@ -0,0 +1,53 @@
|
|||||||
|
import { ecs } from "../../../../extensions/oops-plugin-framework/assets/libs/ecs/ECS";
|
||||||
|
import { BattleStateComp } from "./BattleStateComp";
|
||||||
|
import { BattleManager } from "./BattleManager";
|
||||||
|
|
||||||
|
@ecs.register('BattlePhaseSystem')
|
||||||
|
export class BattlePhaseSystem extends ecs.ComblockSystem {
|
||||||
|
filter(): ecs.IMatcher {
|
||||||
|
return ecs.allOf(BattleStateComp);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
update(e: ecs.Entity) {
|
||||||
|
const state = e.get(BattleStateComp);
|
||||||
|
|
||||||
|
switch(state.phase) {
|
||||||
|
case BattleStateComp.Phase.Preparation:
|
||||||
|
this.handlePreparation(state);
|
||||||
|
break;
|
||||||
|
case BattleStateComp.Phase.Fighting:
|
||||||
|
this.handleFighting(state);
|
||||||
|
break;
|
||||||
|
case BattleStateComp.Phase.Victory:
|
||||||
|
this.handleVictory(state);
|
||||||
|
break;
|
||||||
|
case BattleStateComp.Phase.Defeat:
|
||||||
|
this.handleDefeat(state);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private handlePreparation(state: BattleStateComp) {
|
||||||
|
// 准备阶段逻辑:角色选择、装备检查等
|
||||||
|
if (state.startTime > 0) {
|
||||||
|
state.setPhase(BattleStateComp.Phase.Fighting);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private handleFighting(state: BattleStateComp) {
|
||||||
|
// 实时战斗逻辑:由其他系统处理
|
||||||
|
}
|
||||||
|
|
||||||
|
private handleVictory(state: BattleStateComp) {
|
||||||
|
// 胜利结算逻辑
|
||||||
|
BattleManager.endBattleWithUI(true);
|
||||||
|
state.setPhase(BattleStateComp.Phase.Preparation);
|
||||||
|
}
|
||||||
|
|
||||||
|
private handleDefeat(state: BattleStateComp) {
|
||||||
|
// 失败结算逻辑
|
||||||
|
BattleManager.endBattleWithUI(false);
|
||||||
|
state.setPhase(BattleStateComp.Phase.Preparation);
|
||||||
|
}
|
||||||
|
}
|
||||||
9
assets/script/game/battle/BattlePhaseSystem.ts.meta
Normal file
9
assets/script/game/battle/BattlePhaseSystem.ts.meta
Normal file
@@ -0,0 +1,9 @@
|
|||||||
|
{
|
||||||
|
"ver": "4.0.23",
|
||||||
|
"importer": "typescript",
|
||||||
|
"imported": true,
|
||||||
|
"uuid": "60eca3c6-1b6b-4090-a7f9-ca98a3f3c05d",
|
||||||
|
"files": [],
|
||||||
|
"subMetas": {},
|
||||||
|
"userData": {}
|
||||||
|
}
|
||||||
20
assets/script/game/battle/BattleStartSystem.ts
Normal file
20
assets/script/game/battle/BattleStartSystem.ts
Normal file
@@ -0,0 +1,20 @@
|
|||||||
|
import { ecs } from "../../../../extensions/oops-plugin-framework/assets/libs/ecs/ECS";
|
||||||
|
import { BattleStateComp } from "./BattleStateComp";
|
||||||
|
import { smc } from "../common/SingletonModuleComp";
|
||||||
|
|
||||||
|
@ecs.register('BattleStartSystem')
|
||||||
|
export class BattleStartSystem extends ecs.ComblockSystem {
|
||||||
|
filter(): ecs.IMatcher {
|
||||||
|
return ecs.allOf(BattleStateComp);
|
||||||
|
}
|
||||||
|
|
||||||
|
update(e: ecs.Entity) {
|
||||||
|
const state = e.get(BattleStateComp);
|
||||||
|
if (state.startTime === 0) {
|
||||||
|
// 初始化战斗逻辑
|
||||||
|
state.startTime = Date.now();
|
||||||
|
|
||||||
|
console.log(`战斗开始,关卡ID: ${state.missionId}`);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
9
assets/script/game/battle/BattleStartSystem.ts.meta
Normal file
9
assets/script/game/battle/BattleStartSystem.ts.meta
Normal file
@@ -0,0 +1,9 @@
|
|||||||
|
{
|
||||||
|
"ver": "4.0.23",
|
||||||
|
"importer": "typescript",
|
||||||
|
"imported": true,
|
||||||
|
"uuid": "7a7dfd93-aebc-4f85-b9b9-f1e355f23285",
|
||||||
|
"files": [],
|
||||||
|
"subMetas": {},
|
||||||
|
"userData": {}
|
||||||
|
}
|
||||||
@@ -1,11 +1,43 @@
|
|||||||
import { ecs } from "../../../../extensions/oops-plugin-framework/assets/libs/ecs/ECS";
|
import { ecs } from "../../../../extensions/oops-plugin-framework/assets/libs/ecs/ECS";
|
||||||
|
|
||||||
|
/** 战斗状态组件 */
|
||||||
@ecs.register('BattleState')
|
@ecs.register('BattleState')
|
||||||
export class BattleState extends ecs.Comp {
|
export class BattleStateComp extends ecs.Comp {
|
||||||
isEnded: boolean = false;
|
/** 战斗阶段枚举 */
|
||||||
|
static Phase = {
|
||||||
|
Preparation: 0, // 准备阶段
|
||||||
|
Fighting: 1, // 战斗中
|
||||||
|
Victory: 2, // 胜利
|
||||||
|
Defeat: 3 // 失败
|
||||||
|
};
|
||||||
|
|
||||||
|
phase: number = BattleStateComp.Phase.Preparation;
|
||||||
|
/** 是否结束 */
|
||||||
|
isEnded: boolean = false;
|
||||||
|
/** 当前关卡ID */
|
||||||
|
missionId: number = 0;
|
||||||
|
/** 战斗开始时间戳 */
|
||||||
|
startTime: number = 0;
|
||||||
|
|
||||||
reset() {
|
reset() {
|
||||||
this.isEnded = false;
|
this.isEnded = false;
|
||||||
|
this.missionId = 0;
|
||||||
|
this.startTime = 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
/** 安全状态转换 */
|
||||||
|
setPhase(newPhase: number) {
|
||||||
|
const validTransitions = {
|
||||||
|
[BattleStateComp.Phase.Preparation]: [BattleStateComp.Phase.Fighting],
|
||||||
|
[BattleStateComp.Phase.Fighting]: [BattleStateComp.Phase.Victory, BattleStateComp.Phase.Defeat],
|
||||||
|
[BattleStateComp.Phase.Victory]: [BattleStateComp.Phase.Preparation],
|
||||||
|
[BattleStateComp.Phase.Defeat]: [BattleStateComp.Phase.Preparation]
|
||||||
|
};
|
||||||
|
|
||||||
|
if (validTransitions[this.phase]?.includes(newPhase)) {
|
||||||
|
this.phase = newPhase;
|
||||||
|
} else {
|
||||||
|
console.error(`Invalid phase transition from ${this.phase} to ${newPhase}`);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -67,266 +67,266 @@ export const HeroInfo = {
|
|||||||
hp:5120,hp_up:130,shp_up:100,def:100,def_up:16,sdef_up:50,ap:100,ap_up:6,
|
hp:5120,hp_up:130,shp_up:100,def:100,def_up:16,sdef_up:50,ap:100,ap_up:6,
|
||||||
sap_up:100,atp:1,vun:0,crit:20,crit_add:0,ucr:0,dodge:0,dis:180,
|
sap_up:100,atp:1,vun:0,crit:20,crit_add:0,ucr:0,dodge:0,dis:180,
|
||||||
a_cd:1,speed:80,lvexp:0,slvexp:0,slv:0,aexp:5,uaexp:2,cexp:5,
|
a_cd:1,speed:80,lvexp:0,slvexp:0,slv:0,aexp:5,uaexp:2,cexp:5,
|
||||||
doexp:5,dexp:20,pw:0,pwm:150,pws:10,apw:2,uapw:1,cpw:5,dpw:5,
|
doexp:5,dexp:20,pw:0,pwm:100,pws:10,apw:2,uapw:1,cpw:5,dpw:5,
|
||||||
dopw:5,wp:1001,arm:2001,ring:3001,shoes:4001,
|
dopw:5,wp:1001,arm:2001,ring:3001,shoes:4001,
|
||||||
skills:[6005,6018],tals:["无","无","无","无","无"]},
|
skills:[6005,6018],tals:["无","无","无","无","无"]},
|
||||||
5002:{uuid:5002,name:"幻影剑豪",path:"k1",quality:3,kind:2,type:0,
|
5002:{uuid:5002,name:"幻影剑豪",path:"k1",quality:3,kind:2,type:0,
|
||||||
hp:4650,hp_up:130,shp_up:100,def:100,def_up:16,sdef_up:50,ap:100,ap_up:6,
|
hp:4650,hp_up:130,shp_up:100,def:100,def_up:16,sdef_up:50,ap:100,ap_up:6,
|
||||||
sap_up:100,atp:1,vun:0,crit:40,crit_add:0,ucr:0,dodge:0,dis:180,
|
sap_up:100,atp:1,vun:0,crit:40,crit_add:0,ucr:0,dodge:0,dis:180,
|
||||||
a_cd:1,speed:80,lvexp:0,slvexp:0,slv:0,aexp:5,uaexp:2,cexp:5,
|
a_cd:1,speed:80,lvexp:0,slvexp:0,slv:0,aexp:5,uaexp:2,cexp:5,
|
||||||
doexp:5,dexp:20,pw:0,pwm:150,pws:10,apw:2,uapw:1,cpw:5,dpw:5,
|
doexp:5,dexp:20,pw:0,pwm:100,pws:10,apw:2,uapw:1,cpw:5,dpw:5,
|
||||||
dopw:5,wp:1001,arm:2001,ring:3001,shoes:4001,
|
dopw:5,wp:1001,arm:2001,ring:3001,shoes:4001,
|
||||||
skills:[6005,6024],tals:["无","无","无","无","无"]},
|
skills:[6005,6024],tals:["无","无","无","无","无"]},
|
||||||
5003:{uuid:5003,name:"战争领主",path:"k5",quality:3,kind:2,type:0,
|
5003:{uuid:5003,name:"战争领主",path:"k5",quality:3,kind:2,type:0,
|
||||||
hp:5230,hp_up:130,shp_up:100,def:100,def_up:16,sdef_up:50,ap:100,ap_up:6,
|
hp:5230,hp_up:130,shp_up:100,def:100,def_up:16,sdef_up:50,ap:100,ap_up:6,
|
||||||
sap_up:100,atp:1,vun:0,crit:20,crit_add:0,ucr:0,dodge:0,dis:180,
|
sap_up:100,atp:1,vun:0,crit:20,crit_add:0,ucr:0,dodge:0,dis:180,
|
||||||
a_cd:1,speed:80,lvexp:0,slvexp:0,slv:0,aexp:5,uaexp:2,cexp:5,
|
a_cd:1,speed:80,lvexp:0,slvexp:0,slv:0,aexp:5,uaexp:2,cexp:5,
|
||||||
doexp:5,dexp:20,pw:0,pwm:150,pws:10,apw:2,uapw:1,cpw:5,dpw:5,
|
doexp:5,dexp:20,pw:0,pwm:100,pws:10,apw:2,uapw:1,cpw:5,dpw:5,
|
||||||
dopw:5,wp:1001,arm:2001,ring:3001,shoes:4001,
|
dopw:5,wp:1001,arm:2001,ring:3001,shoes:4001,
|
||||||
skills:[6005,6027],tals:["无","无","无","无","无"]},
|
skills:[6005,6027],tals:["无","无","无","无","无"]},
|
||||||
5004:{uuid:5004,name:"混沌法师",path:"zh1",quality:3,kind:2,type:2,
|
5004:{uuid:5004,name:"混沌法师",path:"zh1",quality:3,kind:2,type:2,
|
||||||
hp:6160,hp_up:110,shp_up:100,def:50,def_up:3,sdef_up:0,ap:100,ap_up:6,
|
hp:6160,hp_up:110,shp_up:100,def:50,def_up:3,sdef_up:0,ap:100,ap_up:6,
|
||||||
sap_up:100,atp:1,vun:0,crit:20,crit_add:0,ucr:0,dodge:0,dis:500,
|
sap_up:100,atp:1,vun:0,crit:20,crit_add:0,ucr:0,dodge:0,dis:500,
|
||||||
a_cd:1.5,speed:40,lvexp:0,slvexp:0,slv:0,aexp:6,uaexp:1,cexp:10,
|
a_cd:1.5,speed:40,lvexp:0,slvexp:0,slv:0,aexp:6,uaexp:1,cexp:10,
|
||||||
doexp:10,dexp:20,pw:0,pwm:150,pws:10,apw:4,uapw:2,cpw:5,dpw:5,
|
doexp:10,dexp:20,pw:0,pwm:100,pws:10,apw:4,uapw:2,cpw:5,dpw:5,
|
||||||
dopw:5,wp:1001,arm:2001,ring:3001,shoes:4001,
|
dopw:5,wp:1001,arm:2001,ring:3001,shoes:4001,
|
||||||
skills:[6003,6031],tals:["无","无","无","无","无"]},
|
skills:[6003,6031],tals:["无","无","无","无","无"]},
|
||||||
5005:{uuid:5005,name:"火焰法师",path:"zh2",quality:3,kind:2,type:2,
|
5005:{uuid:5005,name:"火焰法师",path:"zh2",quality:3,kind:2,type:2,
|
||||||
hp:3110,hp_up:110,shp_up:100,def:50,def_up:3,sdef_up:0,ap:150,ap_up:12,
|
hp:3110,hp_up:110,shp_up:100,def:50,def_up:3,sdef_up:0,ap:150,ap_up:12,
|
||||||
sap_up:100,atp:1,vun:0,crit:20,crit_add:0,ucr:0,dodge:0,dis:500,
|
sap_up:100,atp:1,vun:0,crit:20,crit_add:0,ucr:0,dodge:0,dis:500,
|
||||||
a_cd:1.5,speed:50,lvexp:0,slvexp:0,slv:0,aexp:6,uaexp:1,cexp:10,
|
a_cd:1.5,speed:50,lvexp:0,slvexp:0,slv:0,aexp:6,uaexp:1,cexp:10,
|
||||||
doexp:10,dexp:20,pw:0,pwm:150,pws:10,apw:4,uapw:2,cpw:5,dpw:5,
|
doexp:10,dexp:20,pw:0,pwm:100,pws:10,apw:4,uapw:2,cpw:5,dpw:5,
|
||||||
dopw:5,wp:1001,arm:2001,ring:3001,shoes:4001,
|
dopw:5,wp:1001,arm:2001,ring:3001,shoes:4001,
|
||||||
skills:[6003,6013],tals:["无","无","无","无","无"]},
|
skills:[6003,6013],tals:["无","无","无","无","无"]},
|
||||||
5006:{uuid:5006,name:"风暴精灵",path:"m4",quality:3,kind:2,type:2,
|
5006:{uuid:5006,name:"风暴精灵",path:"m4",quality:3,kind:2,type:2,
|
||||||
hp:3110,hp_up:110,shp_up:100,def:50,def_up:3,sdef_up:0,ap:150,ap_up:12,
|
hp:3110,hp_up:110,shp_up:100,def:50,def_up:3,sdef_up:0,ap:150,ap_up:12,
|
||||||
sap_up:100,atp:1,vun:0,crit:20,crit_add:0,ucr:0,dodge:0,dis:500,
|
sap_up:100,atp:1,vun:0,crit:20,crit_add:0,ucr:0,dodge:0,dis:500,
|
||||||
a_cd:1.5,speed:40,lvexp:0,slvexp:0,slv:0,aexp:6,uaexp:1,cexp:10,
|
a_cd:1.5,speed:40,lvexp:0,slvexp:0,slv:0,aexp:6,uaexp:1,cexp:10,
|
||||||
doexp:10,dexp:20,pw:0,pwm:150,pws:10,apw:4,uapw:2,cpw:5,dpw:5,
|
doexp:10,dexp:20,pw:0,pwm:100,pws:10,apw:4,uapw:2,cpw:5,dpw:5,
|
||||||
dopw:5,wp:1001,arm:2001,ring:3001,shoes:4001,
|
dopw:5,wp:1001,arm:2001,ring:3001,shoes:4001,
|
||||||
skills:[6001,6016],tals:["无","无","无","无","无"]},
|
skills:[6001,6016],tals:["无","无","无","无","无"]},
|
||||||
5007:{uuid:5007,name:"生命圣者",path:"d1",quality:3,kind:2,type:2,
|
5007:{uuid:5007,name:"生命圣者",path:"d1",quality:3,kind:2,type:2,
|
||||||
hp:6220,hp_up:150,shp_up:100,def:50,def_up:3,sdef_up:0,ap:100,ap_up:6,
|
hp:6220,hp_up:150,shp_up:100,def:50,def_up:3,sdef_up:0,ap:100,ap_up:6,
|
||||||
sap_up:100,atp:1,vun:0,crit:20,crit_add:0,ucr:0,dodge:0,dis:500,
|
sap_up:100,atp:1,vun:0,crit:20,crit_add:0,ucr:0,dodge:0,dis:500,
|
||||||
a_cd:1.5,speed:40,lvexp:0,slvexp:0,slv:0,aexp:6,uaexp:1,cexp:10,
|
a_cd:1.5,speed:40,lvexp:0,slvexp:0,slv:0,aexp:6,uaexp:1,cexp:10,
|
||||||
doexp:10,dexp:20,pw:0,pwm:150,pws:10,apw:4,uapw:2,cpw:5,dpw:5,
|
doexp:10,dexp:20,pw:0,pwm:100,pws:10,apw:4,uapw:2,cpw:5,dpw:5,
|
||||||
dopw:5,wp:1001,arm:2001,ring:3001,shoes:4001,
|
dopw:5,wp:1001,arm:2001,ring:3001,shoes:4001,
|
||||||
skills:[6003,6028],tals:["无","无","无","无","无"]},
|
skills:[6003,6028],tals:["无","无","无","无","无"]},
|
||||||
5008:{uuid:5008,name:"战争祭祀",path:"d2",quality:3,kind:2,type:2,
|
5008:{uuid:5008,name:"战争祭祀",path:"d2",quality:3,kind:2,type:2,
|
||||||
hp:6010,hp_up:150,shp_up:100,def:50,def_up:3,sdef_up:0,ap:100,ap_up:6,
|
hp:6010,hp_up:150,shp_up:100,def:50,def_up:3,sdef_up:0,ap:100,ap_up:6,
|
||||||
sap_up:100,atp:1,vun:0,crit:20,crit_add:0,ucr:0,dodge:0,dis:500,
|
sap_up:100,atp:1,vun:0,crit:20,crit_add:0,ucr:0,dodge:0,dis:500,
|
||||||
a_cd:1.5,speed:40,lvexp:0,slvexp:0,slv:0,aexp:6,uaexp:1,cexp:10,
|
a_cd:1.5,speed:40,lvexp:0,slvexp:0,slv:0,aexp:6,uaexp:1,cexp:10,
|
||||||
doexp:10,dexp:20,pw:0,pwm:150,pws:10,apw:4,uapw:2,cpw:5,dpw:5,
|
doexp:10,dexp:20,pw:0,pwm:100,pws:10,apw:4,uapw:2,cpw:5,dpw:5,
|
||||||
dopw:5,wp:1001,arm:2001,ring:3001,shoes:4001,
|
dopw:5,wp:1001,arm:2001,ring:3001,shoes:4001,
|
||||||
skills:[6003,6019],tals:["无","无","无","无","无"]},
|
skills:[6003,6019],tals:["无","无","无","无","无"]},
|
||||||
5009:{uuid:5009,name:"暴风射手",path:"a5",quality:3,kind:2,type:1,
|
5009:{uuid:5009,name:"暴风射手",path:"a5",quality:3,kind:2,type:1,
|
||||||
hp:3080,hp_up:110,shp_up:100,def:50,def_up:3,sdef_up:0,ap:150,ap_up:12,
|
hp:3080,hp_up:110,shp_up:100,def:50,def_up:3,sdef_up:0,ap:150,ap_up:12,
|
||||||
sap_up:100,atp:1,vun:0,crit:20,crit_add:0,ucr:0,dodge:0,dis:400,
|
sap_up:100,atp:1,vun:0,crit:20,crit_add:0,ucr:0,dodge:0,dis:400,
|
||||||
a_cd:1.2,speed:50,lvexp:0,slvexp:0,slv:0,aexp:6,uaexp:1,cexp:10,
|
a_cd:1.2,speed:50,lvexp:0,slvexp:0,slv:0,aexp:6,uaexp:1,cexp:10,
|
||||||
doexp:10,dexp:20,pw:0,pwm:150,pws:10,apw:3,uapw:2,cpw:5,dpw:5,
|
doexp:10,dexp:20,pw:0,pwm:100,pws:10,apw:3,uapw:2,cpw:5,dpw:5,
|
||||||
dopw:5,wp:1001,arm:2001,ring:3001,shoes:4001,
|
dopw:5,wp:1001,arm:2001,ring:3001,shoes:4001,
|
||||||
skills:[6006,6034],tals:["无","无","无","无","无"]},
|
skills:[6006,6034],tals:["无","无","无","无","无"]},
|
||||||
5010:{uuid:5010,name:"苍穹射手",path:"a3",quality:3,kind:1,type:1,
|
5010:{uuid:5010,name:"苍穹射手",path:"a3",quality:3,kind:1,type:1,
|
||||||
hp:3230,hp_up:110,shp_up:100,def:50,def_up:3,sdef_up:0,ap:150,ap_up:12,
|
hp:3230,hp_up:110,shp_up:100,def:50,def_up:3,sdef_up:0,ap:150,ap_up:12,
|
||||||
sap_up:100,atp:1,vun:0,crit:20,crit_add:0,ucr:0,dodge:0,dis:400,
|
sap_up:100,atp:1,vun:0,crit:20,crit_add:0,ucr:0,dodge:0,dis:400,
|
||||||
a_cd:1.2,speed:50,lvexp:0,slvexp:0,slv:0,aexp:6,uaexp:1,cexp:10,
|
a_cd:1.2,speed:50,lvexp:0,slvexp:0,slv:0,aexp:6,uaexp:1,cexp:10,
|
||||||
doexp:10,dexp:20,pw:0,pwm:150,pws:10,apw:3,uapw:2,cpw:5,dpw:5,
|
doexp:10,dexp:20,pw:0,pwm:100,pws:10,apw:3,uapw:2,cpw:5,dpw:5,
|
||||||
dopw:5,wp:1001,arm:2001,ring:3001,shoes:4001,
|
dopw:5,wp:1001,arm:2001,ring:3001,shoes:4001,
|
||||||
skills:[6006,6014],tals:["无","无","无","无","无"]},
|
skills:[6006,6014],tals:["无","无","无","无","无"]},
|
||||||
5011:{uuid:5011,name:"幽灵射手",path:"a4",quality:3,kind:2,type:1,
|
5011:{uuid:5011,name:"幽灵射手",path:"a4",quality:3,kind:2,type:1,
|
||||||
hp:3090,hp_up:110,shp_up:100,def:50,def_up:3,sdef_up:0,ap:150,ap_up:12,
|
hp:3090,hp_up:110,shp_up:100,def:50,def_up:3,sdef_up:0,ap:150,ap_up:12,
|
||||||
sap_up:100,atp:1,vun:0,crit:40,crit_add:0,ucr:0,dodge:0,dis:400,
|
sap_up:100,atp:1,vun:0,crit:40,crit_add:0,ucr:0,dodge:0,dis:400,
|
||||||
a_cd:1.2,speed:50,lvexp:0,slvexp:0,slv:0,aexp:6,uaexp:1,cexp:10,
|
a_cd:1.2,speed:50,lvexp:0,slvexp:0,slv:0,aexp:6,uaexp:1,cexp:10,
|
||||||
doexp:10,dexp:20,pw:0,pwm:150,pws:10,apw:3,uapw:2,cpw:5,dpw:5,
|
doexp:10,dexp:20,pw:0,pwm:100,pws:10,apw:3,uapw:2,cpw:5,dpw:5,
|
||||||
dopw:5,wp:1001,arm:2001,ring:3001,shoes:4001,
|
dopw:5,wp:1001,arm:2001,ring:3001,shoes:4001,
|
||||||
skills:[6006,6021],tals:["无","无","无","无","无"]},
|
skills:[6006,6021],tals:["无","无","无","无","无"]},
|
||||||
5201:{uuid:5201,name:"兽人战士",path:"mor1",quality:1,kind:1,type:0,
|
5201:{uuid:5201,name:"兽人战士",path:"mor1",quality:1,kind:1,type:0,
|
||||||
hp:5000,hp_up:110,shp_up:100,def:100,def_up:14,sdef_up:50,ap:100,ap_up:4,
|
hp:5000,hp_up:110,shp_up:100,def:100,def_up:14,sdef_up:50,ap:100,ap_up:4,
|
||||||
sap_up:100,atp:1,vun:0,crit:20,crit_add:0,ucr:0,dodge:0,dis:180,
|
sap_up:100,atp:1,vun:0,crit:20,crit_add:0,ucr:0,dodge:0,dis:180,
|
||||||
a_cd:1,speed:80,lvexp:0,slvexp:0,slv:0,aexp:5,uaexp:2,cexp:5,
|
a_cd:1,speed:80,lvexp:0,slvexp:0,slv:0,aexp:5,uaexp:2,cexp:5,
|
||||||
doexp:5,dexp:20,pw:0,pwm:150,pws:10,apw:2,uapw:1,cpw:5,dpw:5,
|
doexp:5,dexp:20,pw:0,pwm:100,pws:10,apw:2,uapw:1,cpw:5,dpw:5,
|
||||||
dopw:5,wp:1001,arm:2001,ring:3001,shoes:4001,
|
dopw:5,wp:1001,arm:2001,ring:3001,shoes:4001,
|
||||||
skills:[6005,6005],tals:["无","无","无","无","无"]},
|
skills:[6005,6005],tals:["无","无","无","无","无"]},
|
||||||
5202:{uuid:5202,name:"兽人刺客",path:"mor2",quality:1,kind:1,type:0,
|
5202:{uuid:5202,name:"兽人刺客",path:"mor2",quality:1,kind:1,type:0,
|
||||||
hp:5000,hp_up:110,shp_up:100,def:100,def_up:14,sdef_up:50,ap:100,ap_up:4,
|
hp:5000,hp_up:110,shp_up:100,def:100,def_up:14,sdef_up:50,ap:100,ap_up:4,
|
||||||
sap_up:100,atp:1,vun:0,crit:20,crit_add:0,ucr:0,dodge:0,dis:180,
|
sap_up:100,atp:1,vun:0,crit:20,crit_add:0,ucr:0,dodge:0,dis:180,
|
||||||
a_cd:1,speed:80,lvexp:0,slvexp:0,slv:0,aexp:5,uaexp:2,cexp:5,
|
a_cd:1,speed:80,lvexp:0,slvexp:0,slv:0,aexp:5,uaexp:2,cexp:5,
|
||||||
doexp:5,dexp:20,pw:0,pwm:150,pws:10,apw:2,uapw:1,cpw:5,dpw:5,
|
doexp:5,dexp:20,pw:0,pwm:100,pws:10,apw:2,uapw:1,cpw:5,dpw:5,
|
||||||
dopw:5,wp:1001,arm:2001,ring:3001,shoes:4001,
|
dopw:5,wp:1001,arm:2001,ring:3001,shoes:4001,
|
||||||
skills:[6005,6005],tals:["无","无","无","无","无"]},
|
skills:[6005,6005],tals:["无","无","无","无","无"]},
|
||||||
5203:{uuid:5203,name:"兽人护卫",path:"mor3",quality:1,kind:1,type:1,
|
5203:{uuid:5203,name:"兽人护卫",path:"mor3",quality:1,kind:1,type:1,
|
||||||
hp:3000,hp_up:90,shp_up:100,def:50,def_up:2,sdef_up:0,ap:150,ap_up:9,
|
hp:3000,hp_up:90,shp_up:100,def:50,def_up:2,sdef_up:0,ap:150,ap_up:9,
|
||||||
sap_up:100,atp:1,vun:0,crit:20,crit_add:0,ucr:0,dodge:0,dis:400,
|
sap_up:100,atp:1,vun:0,crit:20,crit_add:0,ucr:0,dodge:0,dis:400,
|
||||||
a_cd:1.2,speed:50,lvexp:0,slvexp:0,slv:0,aexp:6,uaexp:1,cexp:10,
|
a_cd:1.2,speed:50,lvexp:0,slvexp:0,slv:0,aexp:6,uaexp:1,cexp:10,
|
||||||
doexp:10,dexp:20,pw:0,pwm:150,pws:10,apw:3,uapw:2,cpw:5,dpw:5,
|
doexp:10,dexp:20,pw:0,pwm:100,pws:10,apw:3,uapw:2,cpw:5,dpw:5,
|
||||||
dopw:5,wp:1001,arm:2001,ring:3001,shoes:4001,
|
dopw:5,wp:1001,arm:2001,ring:3001,shoes:4001,
|
||||||
skills:[6007,6007],tals:["无","无","无","无","无"]},
|
skills:[6007,6007],tals:["无","无","无","无","无"]},
|
||||||
5204:{uuid:5204,name:"石卫",path:"mgem1",quality:1,kind:1,type:0,
|
5204:{uuid:5204,name:"石卫",path:"mgem1",quality:1,kind:1,type:0,
|
||||||
hp:5000,hp_up:110,shp_up:100,def:100,def_up:14,sdef_up:50,ap:100,ap_up:4,
|
hp:5000,hp_up:110,shp_up:100,def:100,def_up:14,sdef_up:50,ap:100,ap_up:4,
|
||||||
sap_up:100,atp:1,vun:0,crit:20,crit_add:0,ucr:0,dodge:0,dis:180,
|
sap_up:100,atp:1,vun:0,crit:20,crit_add:0,ucr:0,dodge:0,dis:180,
|
||||||
a_cd:1,speed:80,lvexp:0,slvexp:0,slv:0,aexp:5,uaexp:2,cexp:5,
|
a_cd:1,speed:80,lvexp:0,slvexp:0,slv:0,aexp:5,uaexp:2,cexp:5,
|
||||||
doexp:5,dexp:20,pw:0,pwm:150,pws:10,apw:2,uapw:1,cpw:5,dpw:5,
|
doexp:5,dexp:20,pw:0,pwm:100,pws:10,apw:2,uapw:1,cpw:5,dpw:5,
|
||||||
dopw:5,wp:1001,arm:2001,ring:3001,shoes:4001,
|
dopw:5,wp:1001,arm:2001,ring:3001,shoes:4001,
|
||||||
skills:[6005,6005],tals:["无","无","无","无","无"]},
|
skills:[6005,6005],tals:["无","无","无","无","无"]},
|
||||||
5205:{uuid:5205,name:"土卫",path:"mgem2",quality:1,kind:1,type:0,
|
5205:{uuid:5205,name:"土卫",path:"mgem2",quality:1,kind:1,type:0,
|
||||||
hp:5000,hp_up:110,shp_up:100,def:100,def_up:14,sdef_up:50,ap:100,ap_up:4,
|
hp:5000,hp_up:110,shp_up:100,def:100,def_up:14,sdef_up:50,ap:100,ap_up:4,
|
||||||
sap_up:100,atp:1,vun:0,crit:20,crit_add:0,ucr:0,dodge:0,dis:180,
|
sap_up:100,atp:1,vun:0,crit:20,crit_add:0,ucr:0,dodge:0,dis:180,
|
||||||
a_cd:1,speed:80,lvexp:0,slvexp:0,slv:0,aexp:5,uaexp:2,cexp:5,
|
a_cd:1,speed:80,lvexp:0,slvexp:0,slv:0,aexp:5,uaexp:2,cexp:5,
|
||||||
doexp:5,dexp:20,pw:0,pwm:150,pws:10,apw:2,uapw:1,cpw:5,dpw:5,
|
doexp:5,dexp:20,pw:0,pwm:100,pws:10,apw:2,uapw:1,cpw:5,dpw:5,
|
||||||
dopw:5,wp:1001,arm:2001,ring:3001,shoes:4001,
|
dopw:5,wp:1001,arm:2001,ring:3001,shoes:4001,
|
||||||
skills:[6005,6005],tals:["无","无","无","无","无"]},
|
skills:[6005,6005],tals:["无","无","无","无","无"]},
|
||||||
5206:{uuid:5206,name:"树人",path:"mgem3",quality:1,kind:1,type:0,
|
5206:{uuid:5206,name:"树人",path:"mgem3",quality:1,kind:1,type:0,
|
||||||
hp:5000,hp_up:110,shp_up:100,def:100,def_up:14,sdef_up:50,ap:100,ap_up:4,
|
hp:5000,hp_up:110,shp_up:100,def:100,def_up:14,sdef_up:50,ap:100,ap_up:4,
|
||||||
sap_up:100,atp:1,vun:0,crit:20,crit_add:0,ucr:0,dodge:0,dis:180,
|
sap_up:100,atp:1,vun:0,crit:20,crit_add:0,ucr:0,dodge:0,dis:180,
|
||||||
a_cd:1,speed:80,lvexp:0,slvexp:0,slv:0,aexp:5,uaexp:2,cexp:5,
|
a_cd:1,speed:80,lvexp:0,slvexp:0,slv:0,aexp:5,uaexp:2,cexp:5,
|
||||||
doexp:5,dexp:20,pw:0,pwm:150,pws:10,apw:2,uapw:1,cpw:5,dpw:5,
|
doexp:5,dexp:20,pw:0,pwm:100,pws:10,apw:2,uapw:1,cpw:5,dpw:5,
|
||||||
dopw:5,wp:1001,arm:2001,ring:3001,shoes:4001,
|
dopw:5,wp:1001,arm:2001,ring:3001,shoes:4001,
|
||||||
skills:[6005,6005],tals:["无","无","无","无","无"]},
|
skills:[6005,6005],tals:["无","无","无","无","无"]},
|
||||||
5207:{uuid:5207,name:"小骷髅",path:"mkl1",quality:1,kind:1,type:0,
|
5207:{uuid:5207,name:"小骷髅",path:"mkl1",quality:1,kind:1,type:0,
|
||||||
hp:5000,hp_up:110,shp_up:100,def:100,def_up:14,sdef_up:50,ap:100,ap_up:4,
|
hp:5000,hp_up:110,shp_up:100,def:100,def_up:14,sdef_up:50,ap:100,ap_up:4,
|
||||||
sap_up:100,atp:1,vun:0,crit:20,crit_add:0,ucr:0,dodge:0,dis:180,
|
sap_up:100,atp:1,vun:0,crit:20,crit_add:0,ucr:0,dodge:0,dis:180,
|
||||||
a_cd:1,speed:80,lvexp:0,slvexp:0,slv:0,aexp:5,uaexp:2,cexp:5,
|
a_cd:1,speed:80,lvexp:0,slvexp:0,slv:0,aexp:5,uaexp:2,cexp:5,
|
||||||
doexp:5,dexp:20,pw:0,pwm:150,pws:10,apw:2,uapw:1,cpw:5,dpw:5,
|
doexp:5,dexp:20,pw:0,pwm:100,pws:10,apw:2,uapw:1,cpw:5,dpw:5,
|
||||||
dopw:5,wp:1001,arm:2001,ring:3001,shoes:4001,
|
dopw:5,wp:1001,arm:2001,ring:3001,shoes:4001,
|
||||||
skills:[6005,6005],tals:["无","无","无","无","无"]},
|
skills:[6005,6005],tals:["无","无","无","无","无"]},
|
||||||
5208:{uuid:5208,name:"小骷髅",path:"mkl2",quality:1,kind:1,type:0,
|
5208:{uuid:5208,name:"小骷髅",path:"mkl2",quality:1,kind:1,type:0,
|
||||||
hp:5000,hp_up:110,shp_up:100,def:100,def_up:14,sdef_up:50,ap:100,ap_up:4,
|
hp:5000,hp_up:110,shp_up:100,def:100,def_up:14,sdef_up:50,ap:100,ap_up:4,
|
||||||
sap_up:100,atp:1,vun:0,crit:20,crit_add:0,ucr:0,dodge:0,dis:180,
|
sap_up:100,atp:1,vun:0,crit:20,crit_add:0,ucr:0,dodge:0,dis:180,
|
||||||
a_cd:1,speed:80,lvexp:0,slvexp:0,slv:0,aexp:5,uaexp:2,cexp:5,
|
a_cd:1,speed:80,lvexp:0,slvexp:0,slv:0,aexp:5,uaexp:2,cexp:5,
|
||||||
doexp:5,dexp:20,pw:0,pwm:150,pws:10,apw:2,uapw:1,cpw:5,dpw:5,
|
doexp:5,dexp:20,pw:0,pwm:100,pws:10,apw:2,uapw:1,cpw:5,dpw:5,
|
||||||
dopw:5,wp:1001,arm:2001,ring:3001,shoes:4001,
|
dopw:5,wp:1001,arm:2001,ring:3001,shoes:4001,
|
||||||
skills:[6005,6005],tals:["无","无","无","无","无"]},
|
skills:[6005,6005],tals:["无","无","无","无","无"]},
|
||||||
5209:{uuid:5209,name:"小骷髅",path:"mkl3",quality:1,kind:1,type:0,
|
5209:{uuid:5209,name:"小骷髅",path:"mkl3",quality:1,kind:1,type:0,
|
||||||
hp:5000,hp_up:110,shp_up:100,def:100,def_up:14,sdef_up:50,ap:100,ap_up:4,
|
hp:5000,hp_up:110,shp_up:100,def:100,def_up:14,sdef_up:50,ap:100,ap_up:4,
|
||||||
sap_up:100,atp:1,vun:0,crit:20,crit_add:0,ucr:0,dodge:0,dis:180,
|
sap_up:100,atp:1,vun:0,crit:20,crit_add:0,ucr:0,dodge:0,dis:180,
|
||||||
a_cd:1,speed:80,lvexp:0,slvexp:0,slv:0,aexp:5,uaexp:2,cexp:5,
|
a_cd:1,speed:80,lvexp:0,slvexp:0,slv:0,aexp:5,uaexp:2,cexp:5,
|
||||||
doexp:5,dexp:20,pw:0,pwm:150,pws:10,apw:2,uapw:1,cpw:5,dpw:5,
|
doexp:5,dexp:20,pw:0,pwm:100,pws:10,apw:2,uapw:1,cpw:5,dpw:5,
|
||||||
dopw:5,wp:1001,arm:2001,ring:3001,shoes:4001,
|
dopw:5,wp:1001,arm:2001,ring:3001,shoes:4001,
|
||||||
skills:[6005,6005],tals:["无","无","无","无","无"]},
|
skills:[6005,6005],tals:["无","无","无","无","无"]},
|
||||||
5210:{uuid:5210,name:"骷髅战士",path:"mkl4",quality:1,kind:1,type:0,
|
5210:{uuid:5210,name:"骷髅战士",path:"mkl4",quality:1,kind:1,type:0,
|
||||||
hp:5000,hp_up:110,shp_up:100,def:100,def_up:14,sdef_up:50,ap:100,ap_up:4,
|
hp:5000,hp_up:110,shp_up:100,def:100,def_up:14,sdef_up:50,ap:100,ap_up:4,
|
||||||
sap_up:100,atp:1,vun:0,crit:20,crit_add:0,ucr:0,dodge:0,dis:180,
|
sap_up:100,atp:1,vun:0,crit:20,crit_add:0,ucr:0,dodge:0,dis:180,
|
||||||
a_cd:1,speed:80,lvexp:0,slvexp:0,slv:0,aexp:5,uaexp:2,cexp:5,
|
a_cd:1,speed:80,lvexp:0,slvexp:0,slv:0,aexp:5,uaexp:2,cexp:5,
|
||||||
doexp:5,dexp:20,pw:0,pwm:150,pws:10,apw:2,uapw:1,cpw:5,dpw:5,
|
doexp:5,dexp:20,pw:0,pwm:100,pws:10,apw:2,uapw:1,cpw:5,dpw:5,
|
||||||
dopw:5,wp:1001,arm:2001,ring:3001,shoes:4001,
|
dopw:5,wp:1001,arm:2001,ring:3001,shoes:4001,
|
||||||
skills:[6005,6005],tals:["无","无","无","无","无"]},
|
skills:[6005,6005],tals:["无","无","无","无","无"]},
|
||||||
5211:{uuid:5211,name:"骷髅战士",path:"mkl5",quality:1,kind:1,type:0,
|
5211:{uuid:5211,name:"骷髅战士",path:"mkl5",quality:1,kind:1,type:0,
|
||||||
hp:5000,hp_up:110,shp_up:100,def:100,def_up:14,sdef_up:50,ap:100,ap_up:4,
|
hp:5000,hp_up:110,shp_up:100,def:100,def_up:14,sdef_up:50,ap:100,ap_up:4,
|
||||||
sap_up:100,atp:1,vun:0,crit:20,crit_add:0,ucr:0,dodge:0,dis:180,
|
sap_up:100,atp:1,vun:0,crit:20,crit_add:0,ucr:0,dodge:0,dis:180,
|
||||||
a_cd:1,speed:80,lvexp:0,slvexp:0,slv:0,aexp:5,uaexp:2,cexp:5,
|
a_cd:1,speed:80,lvexp:0,slvexp:0,slv:0,aexp:5,uaexp:2,cexp:5,
|
||||||
doexp:5,dexp:20,pw:0,pwm:150,pws:10,apw:2,uapw:1,cpw:5,dpw:5,
|
doexp:5,dexp:20,pw:0,pwm:100,pws:10,apw:2,uapw:1,cpw:5,dpw:5,
|
||||||
dopw:5,wp:1001,arm:2001,ring:3001,shoes:4001,
|
dopw:5,wp:1001,arm:2001,ring:3001,shoes:4001,
|
||||||
skills:[6005,6005],tals:["无","无","无","无","无"]},
|
skills:[6005,6005],tals:["无","无","无","无","无"]},
|
||||||
5212:{uuid:5212,name:"骷髅战士",path:"mkl6",quality:1,kind:1,type:0,
|
5212:{uuid:5212,name:"骷髅战士",path:"mkl6",quality:1,kind:1,type:0,
|
||||||
hp:5000,hp_up:110,shp_up:100,def:100,def_up:14,sdef_up:50,ap:100,ap_up:4,
|
hp:5000,hp_up:110,shp_up:100,def:100,def_up:14,sdef_up:50,ap:100,ap_up:4,
|
||||||
sap_up:100,atp:1,vun:0,crit:20,crit_add:0,ucr:0,dodge:0,dis:180,
|
sap_up:100,atp:1,vun:0,crit:20,crit_add:0,ucr:0,dodge:0,dis:180,
|
||||||
a_cd:1,speed:80,lvexp:0,slvexp:0,slv:0,aexp:5,uaexp:2,cexp:5,
|
a_cd:1,speed:80,lvexp:0,slvexp:0,slv:0,aexp:5,uaexp:2,cexp:5,
|
||||||
doexp:5,dexp:20,pw:0,pwm:150,pws:10,apw:2,uapw:1,cpw:5,dpw:5,
|
doexp:5,dexp:20,pw:0,pwm:100,pws:10,apw:2,uapw:1,cpw:5,dpw:5,
|
||||||
dopw:5,wp:1001,arm:2001,ring:3001,shoes:4001,
|
dopw:5,wp:1001,arm:2001,ring:3001,shoes:4001,
|
||||||
skills:[6005,6005],tals:["无","无","无","无","无"]},
|
skills:[6005,6005],tals:["无","无","无","无","无"]},
|
||||||
5213:{uuid:5213,name:"骷髅射手",path:"mkla1",quality:1,kind:1,type:1,
|
5213:{uuid:5213,name:"骷髅射手",path:"mkla1",quality:1,kind:1,type:1,
|
||||||
hp:3000,hp_up:90,shp_up:100,def:50,def_up:2,sdef_up:0,ap:150,ap_up:9,
|
hp:3000,hp_up:90,shp_up:100,def:50,def_up:2,sdef_up:0,ap:150,ap_up:9,
|
||||||
sap_up:100,atp:1,vun:0,crit:20,crit_add:0,ucr:0,dodge:0,dis:400,
|
sap_up:100,atp:1,vun:0,crit:20,crit_add:0,ucr:0,dodge:0,dis:400,
|
||||||
a_cd:1.2,speed:50,lvexp:0,slvexp:0,slv:0,aexp:6,uaexp:1,cexp:10,
|
a_cd:1.2,speed:50,lvexp:0,slvexp:0,slv:0,aexp:6,uaexp:1,cexp:10,
|
||||||
doexp:10,dexp:20,pw:0,pwm:150,pws:10,apw:3,uapw:2,cpw:5,dpw:5,
|
doexp:10,dexp:20,pw:0,pwm:100,pws:10,apw:3,uapw:2,cpw:5,dpw:5,
|
||||||
dopw:5,wp:1001,arm:2001,ring:3001,shoes:4001,
|
dopw:5,wp:1001,arm:2001,ring:3001,shoes:4001,
|
||||||
skills:[6005,6005],tals:["无","无","无","无","无"]},
|
skills:[6005,6005],tals:["无","无","无","无","无"]},
|
||||||
5214:{uuid:5214,name:"骷髅射手",path:"mkla2",quality:1,kind:1,type:1,
|
5214:{uuid:5214,name:"骷髅射手",path:"mkla2",quality:1,kind:1,type:1,
|
||||||
hp:3000,hp_up:90,shp_up:100,def:50,def_up:2,sdef_up:0,ap:150,ap_up:9,
|
hp:3000,hp_up:90,shp_up:100,def:50,def_up:2,sdef_up:0,ap:150,ap_up:9,
|
||||||
sap_up:100,atp:1,vun:0,crit:20,crit_add:0,ucr:0,dodge:0,dis:400,
|
sap_up:100,atp:1,vun:0,crit:20,crit_add:0,ucr:0,dodge:0,dis:400,
|
||||||
a_cd:1.2,speed:50,lvexp:0,slvexp:0,slv:0,aexp:6,uaexp:1,cexp:10,
|
a_cd:1.2,speed:50,lvexp:0,slvexp:0,slv:0,aexp:6,uaexp:1,cexp:10,
|
||||||
doexp:10,dexp:20,pw:0,pwm:150,pws:10,apw:3,uapw:2,cpw:5,dpw:5,
|
doexp:10,dexp:20,pw:0,pwm:100,pws:10,apw:3,uapw:2,cpw:5,dpw:5,
|
||||||
dopw:5,wp:1001,arm:2001,ring:3001,shoes:4001,
|
dopw:5,wp:1001,arm:2001,ring:3001,shoes:4001,
|
||||||
skills:[6005,6005],tals:["无","无","无","无","无"]},
|
skills:[6005,6005],tals:["无","无","无","无","无"]},
|
||||||
5215:{uuid:5215,name:"骷髅射手",path:"mkla3",quality:1,kind:1,type:1,
|
5215:{uuid:5215,name:"骷髅射手",path:"mkla3",quality:1,kind:1,type:1,
|
||||||
hp:3000,hp_up:90,shp_up:100,def:50,def_up:2,sdef_up:0,ap:150,ap_up:9,
|
hp:3000,hp_up:90,shp_up:100,def:50,def_up:2,sdef_up:0,ap:150,ap_up:9,
|
||||||
sap_up:100,atp:1,vun:0,crit:20,crit_add:0,ucr:0,dodge:0,dis:400,
|
sap_up:100,atp:1,vun:0,crit:20,crit_add:0,ucr:0,dodge:0,dis:400,
|
||||||
a_cd:1.2,speed:50,lvexp:0,slvexp:0,slv:0,aexp:6,uaexp:1,cexp:10,
|
a_cd:1.2,speed:50,lvexp:0,slvexp:0,slv:0,aexp:6,uaexp:1,cexp:10,
|
||||||
doexp:10,dexp:20,pw:0,pwm:150,pws:10,apw:3,uapw:2,cpw:5,dpw:5,
|
doexp:10,dexp:20,pw:0,pwm:100,pws:10,apw:3,uapw:2,cpw:5,dpw:5,
|
||||||
dopw:5,wp:1001,arm:2001,ring:3001,shoes:4001,
|
dopw:5,wp:1001,arm:2001,ring:3001,shoes:4001,
|
||||||
skills:[6005,6005],tals:["无","无","无","无","无"]},
|
skills:[6005,6005],tals:["无","无","无","无","无"]},
|
||||||
5216:{uuid:5216,name:"元素1",path:"my1",quality:2,kind:1,type:2,
|
5216:{uuid:5216,name:"元素1",path:"my1",quality:2,kind:1,type:2,
|
||||||
hp:3000,hp_up:100,shp_up:100,def:50,def_up:2,sdef_up:0,ap:150,ap_up:10,
|
hp:3000,hp_up:100,shp_up:100,def:50,def_up:2,sdef_up:0,ap:150,ap_up:10,
|
||||||
sap_up:100,atp:1,vun:0,crit:20,crit_add:0,ucr:0,dodge:0,dis:500,
|
sap_up:100,atp:1,vun:0,crit:20,crit_add:0,ucr:0,dodge:0,dis:500,
|
||||||
a_cd:1.5,speed:40,lvexp:0,slvexp:0,slv:0,aexp:6,uaexp:1,cexp:10,
|
a_cd:1.5,speed:40,lvexp:0,slvexp:0,slv:0,aexp:6,uaexp:1,cexp:10,
|
||||||
doexp:10,dexp:20,pw:0,pwm:150,pws:10,apw:3,uapw:2,cpw:5,dpw:5,
|
doexp:10,dexp:20,pw:0,pwm:100,pws:10,apw:3,uapw:2,cpw:5,dpw:5,
|
||||||
dopw:5,wp:1001,arm:2001,ring:3001,shoes:4001,
|
dopw:5,wp:1001,arm:2001,ring:3001,shoes:4001,
|
||||||
skills:[6001,6001],tals:["无","无","无","无","无"]},
|
skills:[6001,6001],tals:["无","无","无","无","无"]},
|
||||||
5217:{uuid:5217,name:"元素2",path:"my2",quality:2,kind:1,type:2,
|
5217:{uuid:5217,name:"元素2",path:"my2",quality:2,kind:1,type:2,
|
||||||
hp:3000,hp_up:100,shp_up:100,def:50,def_up:2,sdef_up:0,ap:150,ap_up:10,
|
hp:3000,hp_up:100,shp_up:100,def:50,def_up:2,sdef_up:0,ap:150,ap_up:10,
|
||||||
sap_up:100,atp:1,vun:0,crit:20,crit_add:0,ucr:0,dodge:0,dis:500,
|
sap_up:100,atp:1,vun:0,crit:20,crit_add:0,ucr:0,dodge:0,dis:500,
|
||||||
a_cd:1.5,speed:40,lvexp:0,slvexp:0,slv:0,aexp:6,uaexp:1,cexp:10,
|
a_cd:1.5,speed:40,lvexp:0,slvexp:0,slv:0,aexp:6,uaexp:1,cexp:10,
|
||||||
doexp:10,dexp:20,pw:0,pwm:150,pws:10,apw:3,uapw:2,cpw:5,dpw:5,
|
doexp:10,dexp:20,pw:0,pwm:100,pws:10,apw:3,uapw:2,cpw:5,dpw:5,
|
||||||
dopw:5,wp:1001,arm:2001,ring:3001,shoes:4001,
|
dopw:5,wp:1001,arm:2001,ring:3001,shoes:4001,
|
||||||
skills:[6002,6002],tals:["无","无","无","无","无"]},
|
skills:[6002,6002],tals:["无","无","无","无","无"]},
|
||||||
5218:{uuid:5218,name:"元素3",path:"my3",quality:2,kind:1,type:2,
|
5218:{uuid:5218,name:"元素3",path:"my3",quality:2,kind:1,type:2,
|
||||||
hp:3000,hp_up:100,shp_up:100,def:50,def_up:2,sdef_up:0,ap:150,ap_up:10,
|
hp:3000,hp_up:100,shp_up:100,def:50,def_up:2,sdef_up:0,ap:150,ap_up:10,
|
||||||
sap_up:100,atp:1,vun:0,crit:20,crit_add:0,ucr:0,dodge:0,dis:500,
|
sap_up:100,atp:1,vun:0,crit:20,crit_add:0,ucr:0,dodge:0,dis:500,
|
||||||
a_cd:1.5,speed:40,lvexp:0,slvexp:0,slv:0,aexp:6,uaexp:1,cexp:10,
|
a_cd:1.5,speed:40,lvexp:0,slvexp:0,slv:0,aexp:6,uaexp:1,cexp:10,
|
||||||
doexp:10,dexp:20,pw:0,pwm:150,pws:10,apw:3,uapw:2,cpw:5,dpw:5,
|
doexp:10,dexp:20,pw:0,pwm:100,pws:10,apw:3,uapw:2,cpw:5,dpw:5,
|
||||||
dopw:5,wp:1001,arm:2001,ring:3001,shoes:4001,
|
dopw:5,wp:1001,arm:2001,ring:3001,shoes:4001,
|
||||||
skills:[6003,6003],tals:["无","无","无","无","无"]},
|
skills:[6003,6003],tals:["无","无","无","无","无"]},
|
||||||
5219:{uuid:5219,name:"牛头战士",path:"mn1",quality:2,kind:1,type:0,
|
5219:{uuid:5219,name:"牛头战士",path:"mn1",quality:2,kind:1,type:0,
|
||||||
hp:5000,hp_up:120,shp_up:100,def:100,def_up:15,sdef_up:50,ap:100,ap_up:5,
|
hp:5000,hp_up:120,shp_up:100,def:100,def_up:15,sdef_up:50,ap:100,ap_up:5,
|
||||||
sap_up:100,atp:1,vun:0,crit:20,crit_add:0,ucr:0,dodge:0,dis:180,
|
sap_up:100,atp:1,vun:0,crit:20,crit_add:0,ucr:0,dodge:0,dis:180,
|
||||||
a_cd:1,speed:80,lvexp:0,slvexp:0,slv:0,aexp:5,uaexp:2,cexp:5,
|
a_cd:1,speed:80,lvexp:0,slvexp:0,slv:0,aexp:5,uaexp:2,cexp:5,
|
||||||
doexp:5,dexp:20,pw:0,pwm:150,pws:10,apw:2,uapw:1,cpw:5,dpw:5,
|
doexp:5,dexp:20,pw:0,pwm:100,pws:10,apw:2,uapw:1,cpw:5,dpw:5,
|
||||||
dopw:5,wp:1001,arm:2001,ring:3001,shoes:4001,
|
dopw:5,wp:1001,arm:2001,ring:3001,shoes:4001,
|
||||||
skills:[6005,6005],tals:["无","无","无","无","无"]},
|
skills:[6005,6005],tals:["无","无","无","无","无"]},
|
||||||
5220:{uuid:5220,name:"牛头战士",path:"mn2",quality:1,kind:1,type:1,
|
5220:{uuid:5220,name:"牛头战士",path:"mn2",quality:1,kind:1,type:1,
|
||||||
hp:3000,hp_up:90,shp_up:100,def:50,def_up:2,sdef_up:0,ap:150,ap_up:9,
|
hp:3000,hp_up:90,shp_up:100,def:50,def_up:2,sdef_up:0,ap:150,ap_up:9,
|
||||||
sap_up:100,atp:1,vun:0,crit:20,crit_add:0,ucr:0,dodge:0,dis:400,
|
sap_up:100,atp:1,vun:0,crit:20,crit_add:0,ucr:0,dodge:0,dis:400,
|
||||||
a_cd:1.2,speed:50,lvexp:0,slvexp:0,slv:0,aexp:6,uaexp:1,cexp:10,
|
a_cd:1.2,speed:50,lvexp:0,slvexp:0,slv:0,aexp:6,uaexp:1,cexp:10,
|
||||||
doexp:10,dexp:20,pw:0,pwm:150,pws:10,apw:3,uapw:2,cpw:5,dpw:5,
|
doexp:10,dexp:20,pw:0,pwm:100,pws:10,apw:3,uapw:2,cpw:5,dpw:5,
|
||||||
dopw:5,wp:1001,arm:2001,ring:3001,shoes:4001,
|
dopw:5,wp:1001,arm:2001,ring:3001,shoes:4001,
|
||||||
skills:[6010,6010],tals:["无","无","无","无","无"]},
|
skills:[6010,6010],tals:["无","无","无","无","无"]},
|
||||||
5221:{uuid:5221,name:"牛头战士",path:"mn3",quality:1,kind:1,type:0,
|
5221:{uuid:5221,name:"牛头战士",path:"mn3",quality:1,kind:1,type:0,
|
||||||
hp:5000,hp_up:110,shp_up:100,def:100,def_up:14,sdef_up:50,ap:100,ap_up:4,
|
hp:5000,hp_up:110,shp_up:100,def:100,def_up:14,sdef_up:50,ap:100,ap_up:4,
|
||||||
sap_up:100,atp:1,vun:0,crit:20,crit_add:0,ucr:0,dodge:0,dis:180,
|
sap_up:100,atp:1,vun:0,crit:20,crit_add:0,ucr:0,dodge:0,dis:180,
|
||||||
a_cd:1,speed:80,lvexp:0,slvexp:0,slv:0,aexp:5,uaexp:2,cexp:5,
|
a_cd:1,speed:80,lvexp:0,slvexp:0,slv:0,aexp:5,uaexp:2,cexp:5,
|
||||||
doexp:5,dexp:20,pw:0,pwm:150,pws:10,apw:2,uapw:1,cpw:5,dpw:5,
|
doexp:5,dexp:20,pw:0,pwm:100,pws:10,apw:2,uapw:1,cpw:5,dpw:5,
|
||||||
dopw:5,wp:1001,arm:2001,ring:3001,shoes:4001,
|
dopw:5,wp:1001,arm:2001,ring:3001,shoes:4001,
|
||||||
skills:[6005,6005],tals:["无","无","无","无","无"]},
|
skills:[6005,6005],tals:["无","无","无","无","无"]},
|
||||||
5222:{uuid:5222,name:"独眼巨人",path:"md1",quality:1,kind:1,type:0,
|
5222:{uuid:5222,name:"独眼巨人",path:"md1",quality:1,kind:1,type:0,
|
||||||
hp:5000,hp_up:110,shp_up:100,def:100,def_up:14,sdef_up:50,ap:100,ap_up:4,
|
hp:5000,hp_up:110,shp_up:100,def:100,def_up:14,sdef_up:50,ap:100,ap_up:4,
|
||||||
sap_up:100,atp:1,vun:0,crit:20,crit_add:0,ucr:0,dodge:0,dis:180,
|
sap_up:100,atp:1,vun:0,crit:20,crit_add:0,ucr:0,dodge:0,dis:180,
|
||||||
a_cd:1,speed:80,lvexp:0,slvexp:0,slv:0,aexp:5,uaexp:2,cexp:5,
|
a_cd:1,speed:80,lvexp:0,slvexp:0,slv:0,aexp:5,uaexp:2,cexp:5,
|
||||||
doexp:5,dexp:20,pw:0,pwm:150,pws:10,apw:2,uapw:1,cpw:5,dpw:5,
|
doexp:5,dexp:20,pw:0,pwm:100,pws:10,apw:2,uapw:1,cpw:5,dpw:5,
|
||||||
dopw:5,wp:1001,arm:2001,ring:3001,shoes:4001,
|
dopw:5,wp:1001,arm:2001,ring:3001,shoes:4001,
|
||||||
skills:[6005,6005],tals:["无","无","无","无","无"]},
|
skills:[6005,6005],tals:["无","无","无","无","无"]},
|
||||||
5223:{uuid:5223,name:"独眼巨人",path:"md2",quality:1,kind:1,type:0,
|
5223:{uuid:5223,name:"独眼巨人",path:"md2",quality:1,kind:1,type:0,
|
||||||
hp:5000,hp_up:110,shp_up:100,def:100,def_up:14,sdef_up:50,ap:100,ap_up:4,
|
hp:5000,hp_up:110,shp_up:100,def:100,def_up:14,sdef_up:50,ap:100,ap_up:4,
|
||||||
sap_up:100,atp:1,vun:0,crit:20,crit_add:0,ucr:0,dodge:0,dis:180,
|
sap_up:100,atp:1,vun:0,crit:20,crit_add:0,ucr:0,dodge:0,dis:180,
|
||||||
a_cd:1,speed:80,lvexp:0,slvexp:0,slv:0,aexp:5,uaexp:2,cexp:5,
|
a_cd:1,speed:80,lvexp:0,slvexp:0,slv:0,aexp:5,uaexp:2,cexp:5,
|
||||||
doexp:5,dexp:20,pw:0,pwm:150,pws:10,apw:2,uapw:1,cpw:5,dpw:5,
|
doexp:5,dexp:20,pw:0,pwm:100,pws:10,apw:2,uapw:1,cpw:5,dpw:5,
|
||||||
dopw:5,wp:1001,arm:2001,ring:3001,shoes:4001,
|
dopw:5,wp:1001,arm:2001,ring:3001,shoes:4001,
|
||||||
skills:[6008,6008],tals:["无","无","无","无","无"]},
|
skills:[6008,6008],tals:["无","无","无","无","无"]},
|
||||||
5224:{uuid:5224,name:"独眼巨人",path:"md3",quality:1,kind:1,type:1,
|
5224:{uuid:5224,name:"独眼巨人",path:"md3",quality:1,kind:1,type:1,
|
||||||
hp:3000,hp_up:90,shp_up:100,def:50,def_up:2,sdef_up:0,ap:150,ap_up:9,
|
hp:3000,hp_up:90,shp_up:100,def:50,def_up:2,sdef_up:0,ap:150,ap_up:9,
|
||||||
sap_up:100,atp:1,vun:0,crit:20,crit_add:0,ucr:0,dodge:0,dis:400,
|
sap_up:100,atp:1,vun:0,crit:20,crit_add:0,ucr:0,dodge:0,dis:400,
|
||||||
a_cd:1.2,speed:50,lvexp:0,slvexp:0,slv:0,aexp:6,uaexp:1,cexp:10,
|
a_cd:1.2,speed:50,lvexp:0,slvexp:0,slv:0,aexp:6,uaexp:1,cexp:10,
|
||||||
doexp:10,dexp:20,pw:0,pwm:150,pws:10,apw:3,uapw:2,cpw:5,dpw:5,
|
doexp:10,dexp:20,pw:0,pwm:100,pws:10,apw:3,uapw:2,cpw:5,dpw:5,
|
||||||
dopw:5,wp:1001,arm:2001,ring:3001,shoes:4001,
|
dopw:5,wp:1001,arm:2001,ring:3001,shoes:4001,
|
||||||
skills:[6005,6005],tals:["无","无","无","无","无"]},
|
skills:[6005,6005],tals:["无","无","无","无","无"]},
|
||||||
5225:{uuid:5225,name:"精英独眼",path:"md4",quality:3,kind:1,type:2,
|
5225:{uuid:5225,name:"精英独眼",path:"md4",quality:3,kind:1,type:2,
|
||||||
hp:6000,hp_up:110,shp_up:100,def:50,def_up:3,sdef_up:0,ap:150,ap_up:12,
|
hp:6000,hp_up:110,shp_up:100,def:50,def_up:3,sdef_up:0,ap:150,ap_up:12,
|
||||||
sap_up:100,atp:1,vun:0,crit:20,crit_add:0,ucr:0,dodge:0,dis:500,
|
sap_up:100,atp:1,vun:0,crit:20,crit_add:0,ucr:0,dodge:0,dis:500,
|
||||||
a_cd:1,speed:40,lvexp:0,slvexp:0,slv:0,aexp:6,uaexp:1,cexp:10,
|
a_cd:1,speed:40,lvexp:0,slvexp:0,slv:0,aexp:6,uaexp:1,cexp:10,
|
||||||
doexp:10,dexp:20,pw:0,pwm:150,pws:10,apw:3,uapw:2,cpw:5,dpw:5,
|
doexp:10,dexp:20,pw:0,pwm:100,pws:10,apw:3,uapw:2,cpw:5,dpw:5,
|
||||||
dopw:5,wp:1001,arm:2001,ring:3001,shoes:4001,
|
dopw:5,wp:1001,arm:2001,ring:3001,shoes:4001,
|
||||||
skills:[6009,6009],tals:["无","无","无","无","无"]},
|
skills:[6009,6009],tals:["无","无","无","无","无"]},
|
||||||
5226:{uuid:5226,name:"精英牛头",path:"mn4",quality:3,kind:1,type:2,
|
5226:{uuid:5226,name:"精英牛头",path:"mn4",quality:3,kind:1,type:2,
|
||||||
hp:6000,hp_up:110,shp_up:100,def:50,def_up:3,sdef_up:0,ap:150,ap_up:12,
|
hp:6000,hp_up:110,shp_up:100,def:50,def_up:3,sdef_up:0,ap:150,ap_up:12,
|
||||||
sap_up:100,atp:1,vun:0,crit:20,crit_add:0,ucr:0,dodge:0,dis:500,
|
sap_up:100,atp:1,vun:0,crit:20,crit_add:0,ucr:0,dodge:0,dis:500,
|
||||||
a_cd:1,speed:40,lvexp:0,slvexp:0,slv:0,aexp:6,uaexp:1,cexp:10,
|
a_cd:1,speed:40,lvexp:0,slvexp:0,slv:0,aexp:6,uaexp:1,cexp:10,
|
||||||
doexp:10,dexp:20,pw:0,pwm:150,pws:10,apw:3,uapw:2,cpw:5,dpw:5,
|
doexp:10,dexp:20,pw:0,pwm:100,pws:10,apw:3,uapw:2,cpw:5,dpw:5,
|
||||||
dopw:5,wp:1001,arm:2001,ring:3001,shoes:4001,
|
dopw:5,wp:1001,arm:2001,ring:3001,shoes:4001,
|
||||||
skills:[6010,6010],tals:["无","无","无","无","无"]},
|
skills:[6010,6010],tals:["无","无","无","无","无"]},
|
||||||
5227:{uuid:5227,name:"精英兽人",path:"mor4",quality:3,kind:1,type:2,
|
5227:{uuid:5227,name:"精英兽人",path:"mor4",quality:3,kind:1,type:2,
|
||||||
hp:6000,hp_up:110,shp_up:100,def:50,def_up:3,sdef_up:0,ap:150,ap_up:12,
|
hp:6000,hp_up:110,shp_up:100,def:50,def_up:3,sdef_up:0,ap:150,ap_up:12,
|
||||||
sap_up:100,atp:1,vun:0,crit:20,crit_add:0,ucr:0,dodge:0,dis:500,
|
sap_up:100,atp:1,vun:0,crit:20,crit_add:0,ucr:0,dodge:0,dis:500,
|
||||||
a_cd:1,speed:40,lvexp:0,slvexp:0,slv:0,aexp:6,uaexp:1,cexp:10,
|
a_cd:1,speed:40,lvexp:0,slvexp:0,slv:0,aexp:6,uaexp:1,cexp:10,
|
||||||
doexp:10,dexp:20,pw:0,pwm:150,pws:10,apw:3,uapw:2,cpw:5,dpw:5,
|
doexp:10,dexp:20,pw:0,pwm:100,pws:10,apw:3,uapw:2,cpw:5,dpw:5,
|
||||||
dopw:5,wp:1001,arm:2001,ring:3001,shoes:4001,
|
dopw:5,wp:1001,arm:2001,ring:3001,shoes:4001,
|
||||||
skills:[6009,6009],tals:["无","无","无","无","无"]}
|
skills:[6009,6009],tals:["无","无","无","无","无"]}
|
||||||
};
|
};
|
||||||
@@ -1,96 +0,0 @@
|
|||||||
import { _decorator, NodePool, Node, Label, Color, tween, Vec3, instantiate, Prefab, resources } from "cc";
|
|
||||||
import { ecs } from "../../../../extensions/oops-plugin-framework/assets/libs/ecs/ECS";
|
|
||||||
import { DamageResult } from "./DamageComp";
|
|
||||||
import { oops } from "../../../../extensions/oops-plugin-framework/assets/core/Oops";
|
|
||||||
import { DamageText } from "./DamageText";
|
|
||||||
|
|
||||||
@ecs.register('DamageShowSystem')
|
|
||||||
export class DamageShowSystem extends ecs.ComblockSystem implements ecs.ISystemUpdate{
|
|
||||||
private _pool: NodePool = new NodePool();
|
|
||||||
private _timers: Set<number> = new Set();
|
|
||||||
private _prefab: Prefab | null = null;
|
|
||||||
|
|
||||||
init() {
|
|
||||||
// 使用原生资源加载
|
|
||||||
resources.load("game/skills/damageText", Prefab, (err, prefab) => {
|
|
||||||
if (err) {
|
|
||||||
console.error("预制体加载失败:", err);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
this._prefab = prefab;
|
|
||||||
console.log("预制体加载成功:", this._prefab);
|
|
||||||
// 初始化对象池
|
|
||||||
for (let i = 0; i < 10; i++) {
|
|
||||||
const node = instantiate(this._prefab!);
|
|
||||||
this._pool.put(node);
|
|
||||||
}
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
filter(): ecs.IMatcher {
|
|
||||||
return ecs.allOf(DamageResult);
|
|
||||||
}
|
|
||||||
|
|
||||||
update(e: ecs.Entity) {
|
|
||||||
const res = e.get(DamageResult);
|
|
||||||
this.scheduleShow(res);
|
|
||||||
e.remove(DamageResult);
|
|
||||||
}
|
|
||||||
|
|
||||||
private scheduleShow(res: DamageResult) {
|
|
||||||
const timer = setTimeout(() => {
|
|
||||||
let node = this._pool.get();
|
|
||||||
if (!node || !node.isValid) {
|
|
||||||
node = instantiate(this._prefab);
|
|
||||||
}
|
|
||||||
|
|
||||||
const damageText = node.getComponent(DamageText);
|
|
||||||
|
|
||||||
if (!damageText) {
|
|
||||||
console.error("Damage text prefab must have DamageText component!");
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
this.setupText(node, res);
|
|
||||||
this.playAnimation(node, res.position);
|
|
||||||
|
|
||||||
this._timers.delete(timer);
|
|
||||||
}, res.delay * 1000);
|
|
||||||
|
|
||||||
this._timers.add(timer);
|
|
||||||
}
|
|
||||||
|
|
||||||
private setupText(node: Node, res: DamageResult) {
|
|
||||||
const damageText = node.getComponent(DamageText)!;
|
|
||||||
const label = damageText.label;
|
|
||||||
|
|
||||||
if (res.isDodged) {
|
|
||||||
label.string = "Miss";
|
|
||||||
label.color = Color.GRAY;
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
label.string = Math.round(res.value).toString();
|
|
||||||
label.color = res.isCrit ? Color.RED : Color.WHITE;
|
|
||||||
damageText.playEffect(res.isCrit);
|
|
||||||
}
|
|
||||||
|
|
||||||
private playAnimation(node: Node, position: Vec3) {
|
|
||||||
node.setPosition(position);
|
|
||||||
tween(node)
|
|
||||||
.by(0.5, { position: new Vec3(0, 100, 0) })
|
|
||||||
.call(() => {
|
|
||||||
if (this._pool.size() < 20) { // 控制最大缓存数量
|
|
||||||
this._pool.put(node);
|
|
||||||
} else {
|
|
||||||
node.destroy();
|
|
||||||
}
|
|
||||||
})
|
|
||||||
.start();
|
|
||||||
}
|
|
||||||
|
|
||||||
onDestroy() {
|
|
||||||
this._timers.forEach(clearTimeout);
|
|
||||||
this._pool.clear();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -23,8 +23,13 @@ export class DamageSystem extends ecs.ComblockSystem implements ecs.ISystemUpdat
|
|||||||
const sourceView = req.source.get(HeroViewComp);
|
const sourceView = req.source.get(HeroViewComp);
|
||||||
let final = req.baseValue;
|
let final = req.baseValue;
|
||||||
|
|
||||||
|
// 伤害浮动(±10%)
|
||||||
|
const damageFloat = 0.9 + Math.random() * 0.2; // 0.9~1.1
|
||||||
|
final *= damageFloat;
|
||||||
|
final = Math.round(final);
|
||||||
|
|
||||||
// 闪避判定
|
// 闪避判定
|
||||||
if (Math.random() < targetView.dodge) {
|
if (Math.random()*100 < targetView.dodge) {
|
||||||
const result = new DamageResult();
|
const result = new DamageResult();
|
||||||
result.isDodged = true;
|
result.isDodged = true;
|
||||||
return result;
|
return result;
|
||||||
@@ -32,21 +37,24 @@ export class DamageSystem extends ecs.ComblockSystem implements ecs.ISystemUpdat
|
|||||||
|
|
||||||
// 护甲减伤
|
// 护甲减伤
|
||||||
if (!req.ignoreDefense) {
|
if (!req.ignoreDefense) {
|
||||||
final -= targetView.def * 0.5;
|
const effectiveArmor = Math.min(targetView.def, 300); // 最大减伤75%
|
||||||
|
const damageReduction = effectiveArmor / (effectiveArmor + 100);
|
||||||
|
final *= (1 - damageReduction);
|
||||||
|
final = Math.round(final); // 四舍五入取整
|
||||||
}
|
}
|
||||||
|
|
||||||
// 暴击判定
|
// 暴击判定
|
||||||
let isCrit = false;
|
let isCrit = false;
|
||||||
if (req.canCrit) {
|
if (req.canCrit) {
|
||||||
const critRate = sourceView.crit;
|
const critRate = sourceView.crit;
|
||||||
if (Math.random() < critRate) {
|
if (Math.random() * 100 < critRate) {
|
||||||
final *= 1.5;
|
final *= 1.5;
|
||||||
isCrit = true;
|
isCrit = true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
const result = new DamageResult();
|
const result = new DamageResult();
|
||||||
result.value = Math.max(0, final);
|
result.value = Math.max(1, final); // 确保最小伤害为1
|
||||||
result.isCrit = isCrit;
|
result.isCrit = isCrit;
|
||||||
result.position = req.target.get(HeroViewComp).node.position;
|
result.position = req.target.get(HeroViewComp).node.position;
|
||||||
result.delay = req.delay;
|
result.delay = req.delay;
|
||||||
@@ -55,20 +63,52 @@ export class DamageSystem extends ecs.ComblockSystem implements ecs.ISystemUpdat
|
|||||||
|
|
||||||
private applyDamage(target: ecs.Entity, result: DamageResult) {
|
private applyDamage(target: ecs.Entity, result: DamageResult) {
|
||||||
const view = target.get(HeroViewComp);
|
const view = target.get(HeroViewComp);
|
||||||
view.hp -= result.value;
|
if (!view.ent.has(HeroViewComp)) return;
|
||||||
// 添加伤害结果组件
|
this.scheduleOnce(()=>{
|
||||||
const comp = target.add(DamageResult);
|
// 护盾优先吸收伤害
|
||||||
comp.value = result.value;
|
let remainingDamage = result.value;
|
||||||
comp.isCrit = result.isCrit;
|
if(result.isDodged){
|
||||||
comp.position = result.position;
|
view.BUFFCOMP.tooltip(5,"*闪避*");
|
||||||
comp.delay = result.delay;
|
return;
|
||||||
comp.isDodged = result.isDodged;
|
}
|
||||||
|
if (view.shield > 0) {
|
||||||
|
const shieldAbsorb = Math.min(view.shield, remainingDamage);
|
||||||
|
view.shield -= shieldAbsorb;
|
||||||
|
remainingDamage -= shieldAbsorb;
|
||||||
|
|
||||||
// 触发伤害事件
|
if (view.shield <= 0) {
|
||||||
|
view.BUFFCOMP.show_shield(false);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// 剩余伤害扣除血量
|
||||||
|
if (remainingDamage > 0) {
|
||||||
|
view.hp -= remainingDamage;
|
||||||
|
view.showDamage(result.value, result.isCrit);
|
||||||
|
}else{
|
||||||
|
view.BUFFCOMP.tooltip(5,"*吸收*");
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
}, result.delay)
|
||||||
|
|
||||||
|
// 直接触发事件
|
||||||
oops.message.dispatchEvent("OnDamage", {
|
oops.message.dispatchEvent("OnDamage", {
|
||||||
target,
|
target,
|
||||||
damage: result.value,
|
damage: result.value,
|
||||||
isCrit: result.isCrit
|
isCrit: result.isCrit
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private scheduleOnce(callback: () => void, delay: number) {
|
||||||
|
const timer = setTimeout(() => {
|
||||||
|
callback();
|
||||||
|
delete this._timers[timer];
|
||||||
|
}, delay * 1000);
|
||||||
|
this._timers[timer] = timer;
|
||||||
|
}
|
||||||
|
|
||||||
|
onDestroy() {
|
||||||
|
Object.values(this._timers).forEach(clearTimeout);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
@@ -1,17 +0,0 @@
|
|||||||
import { _decorator, Component, Label, ParticleSystem } from "cc";
|
|
||||||
const { ccclass, property } = _decorator;
|
|
||||||
|
|
||||||
@ccclass('DamageText')
|
|
||||||
export class DamageText extends Component {
|
|
||||||
@property(Label)
|
|
||||||
label: Label = null!;
|
|
||||||
|
|
||||||
@property(ParticleSystem)
|
|
||||||
critEffect: ParticleSystem = null!;
|
|
||||||
|
|
||||||
playEffect(isCrit: boolean) {
|
|
||||||
if (isCrit && this.critEffect) {
|
|
||||||
this.critEffect.play();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -36,7 +36,8 @@ export class BuffComp extends Component {
|
|||||||
// this.node.getChildByName("top").getChildByName("buff").getChildByName("cd").active = false;
|
// this.node.getChildByName("top").getChildByName("buff").getChildByName("cd").active = false;
|
||||||
// this.node.getChildByName("top").getChildByName("buff").getChildByName("def").active = false;
|
// this.node.getChildByName("top").getChildByName("buff").getChildByName("def").active = false;
|
||||||
// this.node.getChildByName("top").getChildByName("buff").getChildByName("hp").active = false;
|
// this.node.getChildByName("top").getChildByName("buff").getChildByName("hp").active = false;
|
||||||
// this.node.getChildByName("top").getChildByName("buff").getChildByName("crit").active = false;
|
let hp_node = this.node.getChildByName("top").getChildByName("hp");
|
||||||
|
hp_node.setPosition(hp_node.position.x,hp_node.position.y-140)
|
||||||
}
|
}
|
||||||
|
|
||||||
update(deltaTime: number) {
|
update(deltaTime: number) {
|
||||||
|
|||||||
@@ -14,6 +14,7 @@ import { BuffComp } from "./BuffComp";
|
|||||||
import { MonModelComp } from "./MonModelComp";
|
import { MonModelComp } from "./MonModelComp";
|
||||||
import { getMonsterDrops, MonsterType } from "../common/config/RewardSet";
|
import { getMonsterDrops, MonsterType } from "../common/config/RewardSet";
|
||||||
import { HeroSkillsComp } from "../skill/heroSkillsComp";
|
import { HeroSkillsComp } from "../skill/heroSkillsComp";
|
||||||
|
import { DamageResult } from "../damage/DamageComp";
|
||||||
const { ccclass, property } = _decorator;
|
const { ccclass, property } = _decorator;
|
||||||
|
|
||||||
|
|
||||||
@@ -149,16 +150,19 @@ export class HeroViewComp extends CCComp {
|
|||||||
this.in_stop(dt);
|
this.in_stop(dt);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
get isActive() {
|
||||||
|
return this.ent.has(HeroViewComp) && this.node?.isValid;
|
||||||
|
}
|
||||||
hp_show(){
|
hp_show(){
|
||||||
let hp_progress= this.hp/this.hp_max;
|
let hp_progress= this.hp/this.hp_max;
|
||||||
this.node.getChildByName("top").getChildByName("hp").getComponent(ProgressBar)!.progress = hp_progress;
|
this.node.getChildByName("top").getChildByName("hp").getComponent(ProgressBar)!.progress = hp_progress;
|
||||||
if(this.is_boss) return
|
if(this.is_boss) return
|
||||||
if(this.hp == this.hp_max){
|
|
||||||
this.node.getChildByName("top").getChildByName("hp").active = false;
|
|
||||||
} else{
|
|
||||||
this.node.getChildByName("top").getChildByName("hp").active = true;
|
this.node.getChildByName("top").getChildByName("hp").active = true;
|
||||||
}
|
// if(this.hp == this.hp_max){
|
||||||
|
// this.node.getChildByName("top").getChildByName("hp").active = false;
|
||||||
|
// } else{
|
||||||
|
// this.node.getChildByName("top").getChildByName("hp").active = true;
|
||||||
|
// }
|
||||||
}
|
}
|
||||||
//移动
|
//移动
|
||||||
|
|
||||||
@@ -561,13 +565,24 @@ export class HeroViewComp extends CCComp {
|
|||||||
const skills = this.ent.get(HeroSkillsComp);
|
const skills = this.ent.get(HeroSkillsComp);
|
||||||
skills.resetAllCooldowns();
|
skills.resetAllCooldowns();
|
||||||
}
|
}
|
||||||
|
applyDamage(result:DamageResult){
|
||||||
|
|
||||||
|
}
|
||||||
/** 显示伤害数字 */
|
/** 显示伤害数字 */
|
||||||
|
|
||||||
showDamage(damage: number, isCrit: boolean) {
|
showDamage(damage: number, isCrit: boolean) {
|
||||||
|
if(!this.BUFFCOMP.isValid){
|
||||||
|
return;
|
||||||
|
}
|
||||||
if(isCrit){
|
if(isCrit){
|
||||||
this.BUFFCOMP.tooltip(4,damage.toFixed(0),damage)
|
this.BUFFCOMP.tooltip(4,damage.toFixed(0),damage)
|
||||||
|
console.log("暴击伤害:"+damage)
|
||||||
|
|
||||||
|
|
||||||
}else{
|
}else{
|
||||||
this.BUFFCOMP.tooltip(1,damage.toFixed(0),damage)
|
this.BUFFCOMP.tooltip(1,damage.toFixed(0),damage)
|
||||||
}
|
console.log("普通伤害:"+damage)
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -21,7 +21,7 @@ import { UIID } from "../common/config/GameUIConfig";
|
|||||||
import { CardControllerComp } from "./CardController";
|
import { CardControllerComp } from "./CardController";
|
||||||
import { MissionHomeComp } from "./MissionHomeComp";
|
import { MissionHomeComp } from "./MissionHomeComp";
|
||||||
import { GameEvent } from "../common/config/GameEvent";
|
import { GameEvent } from "../common/config/GameEvent";
|
||||||
import { BattleState } from "../battle/BattleStateComp";
|
import { BattleManager } from "../battle/BattleManager";
|
||||||
const { ccclass, property } = _decorator;
|
const { ccclass, property } = _decorator;
|
||||||
|
|
||||||
/** 视图层对象 */
|
/** 视图层对象 */
|
||||||
@@ -69,42 +69,30 @@ export class MissionComp extends CCComp {
|
|||||||
// }
|
// }
|
||||||
// this.shuaxin(dt)
|
// this.shuaxin(dt)
|
||||||
}
|
}
|
||||||
mission_start(){
|
mission_start(missionId: number) {
|
||||||
/* todo 关卡设定完善*/
|
// 初始化关卡数据
|
||||||
console.log("mission_start Missions mons:",Missions[smc.mission.lv])
|
this.colose_victory();
|
||||||
this.colose_victory()
|
this.mission_init();
|
||||||
this.mission_init()
|
|
||||||
// this.mskill_init()
|
// 启动战斗(外部控制入口)
|
||||||
this.mon_refresh()
|
BattleManager.startBattle(smc.mission.lv);
|
||||||
this.heros_call()
|
|
||||||
|
// 生成怪物和英雄
|
||||||
|
this.mon_refresh();
|
||||||
|
this.heros_call();
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
mission_end() {
|
mission_end() {
|
||||||
oops.message.dispatchEvent(GameEvent.MissionEnd)
|
// 结束战斗(外部控制出口)
|
||||||
smc.mission.play=false
|
BattleManager.endBattle();
|
||||||
smc.mission.pause=false
|
|
||||||
let heros:any= this.get_heros();;
|
// 更新游戏状态
|
||||||
let monsters:any= this.get_mons();
|
oops.message.dispatchEvent(GameEvent.MissionEnd);
|
||||||
let hcards:any= ecs.query(ecs.allOf(HCardComp));
|
smc.mission.play = false;
|
||||||
let rewards:any= ecs.query(ecs.allOf(ItemComp));
|
|
||||||
// let hcns=this.node.getChildByName("hcards")
|
// 显示结算界面
|
||||||
// for(let i=0;i<hcns.children.length;i++){
|
this.open_victory();
|
||||||
// hcns.children[i].destroy()
|
|
||||||
// }
|
|
||||||
for(let i=0;i<heros.length;i++){
|
|
||||||
heros[i].HeroView.reset()
|
|
||||||
heros[i].HeroView.ent.destroy()
|
|
||||||
}
|
|
||||||
for(let i=0;i<hcards.length;i++){
|
|
||||||
hcards[i].HCardComp.reset()
|
|
||||||
hcards[i].HCardComp.ent.destroy()
|
|
||||||
}
|
|
||||||
for(let i=0;i<monsters.length;i++){
|
|
||||||
monsters[i].HeroView.reset()
|
|
||||||
monsters[i].HeroView.ent.destroy()
|
|
||||||
}
|
|
||||||
// this.to_mission_home()
|
|
||||||
this.open_victory()
|
|
||||||
}
|
}
|
||||||
|
|
||||||
open_victory(){
|
open_victory(){
|
||||||
|
|||||||
@@ -1,17 +1,20 @@
|
|||||||
import { ecs } from "../../../../extensions/oops-plugin-framework/assets/libs/ecs/ECS";
|
import { ecs } from "../../../../extensions/oops-plugin-framework/assets/libs/ecs/ECS";
|
||||||
import { HeroSkillSystem } from "./HeroSkillSystem";
|
import { HeroSkillSystem } from "./HeroSkillSystem";
|
||||||
import { DamageSystem } from "../damage/DamageSystem";
|
import { DamageSystem } from "../damage/DamageSystem";
|
||||||
import { BattleManagerSystem } from "../battle/BattleManager";
|
|
||||||
import { BattleEndSystem } from "../battle/BattleEndSystem";
|
import { BattleEndSystem } from "../battle/BattleEndSystem";
|
||||||
|
import { BattleStartSystem } from "../battle/BattleStartSystem";
|
||||||
|
import { BattlePhaseSystem } from "../battle/BattlePhaseSystem";
|
||||||
export class EcsSkillSystem extends ecs.System {
|
export class EcsSkillSystem extends ecs.System {
|
||||||
constructor() {
|
constructor() {
|
||||||
super();
|
super();
|
||||||
this.add(new HeroSkillSystem());
|
this.add(new HeroSkillSystem());
|
||||||
this.add(new DamageSystem());
|
this.add(new DamageSystem());
|
||||||
this.add(new BattleManagerSystem());
|
this.add(new BattleStartSystem());
|
||||||
|
this.add(new BattlePhaseSystem());
|
||||||
this.add(new BattleEndSystem());
|
this.add(new BattleEndSystem());
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -22,9 +22,6 @@ export class HeroSkillSystem extends ecs.ComblockSystem implements ecs.ISystemUp
|
|||||||
const skills = e.get(HeroSkillsComp);
|
const skills = e.get(HeroSkillsComp);
|
||||||
|
|
||||||
// 使用固定时间步长更新
|
// 使用固定时间步长更新
|
||||||
this.accumulator += this.dt;
|
|
||||||
while (this.accumulator >= this.updateInterval) {
|
|
||||||
this.accumulator -= this.updateInterval;
|
|
||||||
|
|
||||||
// 只在攻击状态触发技能
|
// 只在攻击状态触发技能
|
||||||
if (view.is_atking) {
|
if (view.is_atking) {
|
||||||
@@ -35,7 +32,7 @@ export class HeroSkillSystem extends ecs.ComblockSystem implements ecs.ISystemUp
|
|||||||
skills.skills.forEach(skillId => {
|
skills.skills.forEach(skillId => {
|
||||||
this.updateCooldown(skills, skillId);
|
this.updateCooldown(skills, skillId);
|
||||||
});
|
});
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/** 处理所有技能逻辑 */
|
/** 处理所有技能逻辑 */
|
||||||
@@ -79,11 +76,11 @@ export class HeroSkillSystem extends ecs.ComblockSystem implements ecs.ISystemUp
|
|||||||
private castSkill(caster: ecs.Entity, skillId: number, config: typeof SkillSet[keyof typeof SkillSet]) {
|
private castSkill(caster: ecs.Entity, skillId: number, config: typeof SkillSet[keyof typeof SkillSet]) {
|
||||||
const view = caster.get(HeroViewComp);
|
const view = caster.get(HeroViewComp);
|
||||||
const comp = caster.get(HeroSkillsComp);
|
const comp = caster.get(HeroSkillsComp);
|
||||||
console.log(view.hero_name+"施放技能",config.uuid,comp,view)
|
console.log(view.hero_name+"施放技能:"+config.uuid+"=>"+view.hero_name)
|
||||||
|
|
||||||
switch(config.CdType) {
|
switch(config.CdType) {
|
||||||
case CdType.SkillCD:
|
case CdType.SkillCD:
|
||||||
view.as.max()
|
view.as.max()
|
||||||
|
|
||||||
comp.cooldowns.set(skillId, config.cd); // 重置冷却时间
|
comp.cooldowns.set(skillId, config.cd); // 重置冷却时间
|
||||||
break;
|
break;
|
||||||
case CdType.HeroCD:
|
case CdType.HeroCD:
|
||||||
@@ -210,6 +207,7 @@ export class HeroSkillSystem extends ecs.ComblockSystem implements ecs.ISystemUp
|
|||||||
|
|
||||||
// 播放技能特效
|
// 播放技能特效
|
||||||
caster.get(HeroViewComp).playSkillEffect(config.uuid);
|
caster.get(HeroViewComp).playSkillEffect(config.uuid);
|
||||||
|
console.log(caster.get(HeroViewComp).hero_name+"技能反馈"+"=>"+req.target.get(HeroViewComp).hero_name+":"+req.baseValue)
|
||||||
}
|
}
|
||||||
|
|
||||||
/** 应用负面状态 */
|
/** 应用负面状态 */
|
||||||
|
|||||||
@@ -26,7 +26,7 @@ export class TooltipCom extends CCComp {
|
|||||||
start() {
|
start() {
|
||||||
switch(this.stype){
|
switch(this.stype){
|
||||||
case 1:
|
case 1:
|
||||||
this.node.setSiblingIndex(1);
|
this.node.setSiblingIndex(100);
|
||||||
this.node.getChildByName("loss_life").getChildByName("hp").getComponent(Label).string = this.value;
|
this.node.getChildByName("loss_life").getChildByName("hp").getComponent(Label).string = this.value;
|
||||||
this.node.getChildByName("loss_life").active=true;
|
this.node.getChildByName("loss_life").active=true;
|
||||||
this.scheduleOnce(()=>{
|
this.scheduleOnce(()=>{
|
||||||
@@ -34,7 +34,7 @@ export class TooltipCom extends CCComp {
|
|||||||
},0.5)
|
},0.5)
|
||||||
break
|
break
|
||||||
case 2:
|
case 2:
|
||||||
this.node.setSiblingIndex(1);
|
this.node.setSiblingIndex(110);
|
||||||
this.node.getChildByName("add_life").getChildByName("hp").getComponent(Label).string = this.value;
|
this.node.getChildByName("add_life").getChildByName("hp").getComponent(Label).string = this.value;
|
||||||
this.node.getChildByName("add_life").active=true;
|
this.node.getChildByName("add_life").active=true;
|
||||||
this.scheduleOnce(()=>{
|
this.scheduleOnce(()=>{
|
||||||
@@ -42,7 +42,7 @@ export class TooltipCom extends CCComp {
|
|||||||
},0.5)
|
},0.5)
|
||||||
break
|
break
|
||||||
case 4:
|
case 4:
|
||||||
this.node.setSiblingIndex(2);
|
this.node.setSiblingIndex(200);
|
||||||
this.node.getChildByName("bloss").getChildByName("hp").getComponent(Label).string = this.value;
|
this.node.getChildByName("bloss").getChildByName("hp").getComponent(Label).string = this.value;
|
||||||
this.node.getChildByName("bloss").active=true;
|
this.node.getChildByName("bloss").active=true;
|
||||||
this.scheduleOnce(()=>{
|
this.scheduleOnce(()=>{
|
||||||
|
|||||||
Reference in New Issue
Block a user