战斗管理系统基础

This commit is contained in:
2025-02-03 22:02:26 +08:00
parent 060046a6a6
commit 36a8aff783
27 changed files with 375 additions and 619 deletions

View File

@@ -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": {

View File

@@ -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
}
]

View File

@@ -1,13 +0,0 @@
{
"ver": "1.1.50",
"importer": "prefab",
"imported": true,
"uuid": "cd550fa0-4951-4d3c-a22e-c7ad5520ade4",
"files": [
".json"
],
"subMetas": {},
"userData": {
"syncNodeName": "damageText"
}
}

View File

@@ -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,

View File

@@ -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

View File

@@ -1,9 +0,0 @@
{
"ver": "1.2.0",
"importer": "directory",
"imported": true,
"uuid": "7df2a856-04db-4d7e-8c91-90db8e4e63e9",
"files": [],
"subMetas": {},
"userData": {}
}

View File

@@ -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));
}
} }

View 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);
}
}

View File

@@ -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": {}

View File

@@ -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() {
oops.message.on("HeroDead", this.onHeroDead, this);
oops.message.on("AllEnemyDead", this.onAllEnemyDead, this);
oops.message.on(GameEvent.MissionEnd, this.endBattle, this);
oops.message.on("BattleEndCheck", this.onBattleEndCheck, this);
}
private onHeroDead() {
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) { /** 扩展带UI管理的战斗启动 */
// 发放奖励、保存进度等 static startBattleWithUI(missionId: number) {
entity.destroy(); // 关闭主界面
// oops.gui.remove(UIID.MainMenu);
// // 显示战斗HUD
// oops.gui.open(UIID.BattleHUD);
// 启动战斗
this.startBattle(missionId);
}
/** 扩展带UI管理的战斗结束 */
static endBattleWithUI(isVictory: boolean) {
// 关闭战斗HUD
// oops.gui.remove(UIID.BattleHUD);
// 显示结算界面
// oops.gui.open(isVictory ? UIID.Victory : UIID.Defeat);
// 结束战斗
this.endBattle();
} }
} }

View 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;
}
}

View File

@@ -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": {}

View 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);
}
}

View File

@@ -0,0 +1,9 @@
{
"ver": "4.0.23",
"importer": "typescript",
"imported": true,
"uuid": "60eca3c6-1b6b-4090-a7f9-ca98a3f3c05d",
"files": [],
"subMetas": {},
"userData": {}
}

View 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}`);
}
}
}

View File

@@ -0,0 +1,9 @@
{
"ver": "4.0.23",
"importer": "typescript",
"imported": true,
"uuid": "7a7dfd93-aebc-4f85-b9b9-f1e355f23285",
"files": [],
"subMetas": {},
"userData": {}
}

View File

@@ -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}`);
}
} }
} }

View File

@@ -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:["无","无","无","无","无"]}
}; };

View File

@@ -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();
}
}

View File

@@ -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);
}
} }

View File

@@ -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();
}
}
}

View File

@@ -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) {

View File

@@ -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 = true;
this.node.getChildByName("top").getChildByName("hp").active = false; // if(this.hp == this.hp_max){
} else{ // this.node.getChildByName("top").getChildByName("hp").active = false;
this.node.getChildByName("top").getChildByName("hp").active = true; // } 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)
} }
} }
} }

View File

@@ -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(){

View File

@@ -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());
} }
} }

View File

@@ -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)
} }
/** 应用负面状态 */ /** 应用负面状态 */

View File

@@ -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(()=>{