├── FightDBData.go
├── README.md
├── Config
├── Skill.csv
├── Impact.tab.csv
├── AttributeData.tab.csv
├── HeroAttr.csv
└── Equip.csv
├── go.mod
├── go.sum
├── .idea
├── misc.xml
├── vcs.xml
├── modules.xml
├── GameFight.iml
├── encodings.xml
└── workspace.xml
├── GameType.go
├── Table_test.go
├── FightObjList.go
├── Fight_test.go
├── TableRow.go
├── GameDefine.go
├── FightCell.go
├── Table.go
├── GameStruct.go
├── FightObject.go
├── Impact.go
└── Skill.go
/FightDBData.go:
--------------------------------------------------------------------------------
1 | package GameFight
2 |
3 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | # gameFightDemo
2 | golang实现的回合制战斗系统 开发中
3 |
--------------------------------------------------------------------------------
/Config/Skill.csv:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/makalongGit/gameFightDemo/HEAD/Config/Skill.csv
--------------------------------------------------------------------------------
/go.mod:
--------------------------------------------------------------------------------
1 | module GameFight
2 |
3 | go 1.13
4 |
5 | require github.com/davecgh/go-spew v1.1.1
6 |
--------------------------------------------------------------------------------
/Config/Impact.tab.csv:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/makalongGit/gameFightDemo/HEAD/Config/Impact.tab.csv
--------------------------------------------------------------------------------
/go.sum:
--------------------------------------------------------------------------------
1 | github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c=
2 | github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
3 |
--------------------------------------------------------------------------------
/.idea/misc.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
--------------------------------------------------------------------------------
/.idea/vcs.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
--------------------------------------------------------------------------------
/GameType.go:
--------------------------------------------------------------------------------
1 | package GameFight
2 |
3 | type X_GUID int
4 |
5 | func (guid X_GUID) IsValid() bool {
6 | return int(guid) > 0
7 | }
8 |
9 |
10 | type X_INT int
11 | type X_UINT uint
12 | type X_FLOAT float64
13 |
--------------------------------------------------------------------------------
/.idea/modules.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
--------------------------------------------------------------------------------
/.idea/GameFight.iml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
--------------------------------------------------------------------------------
/.idea/encodings.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
--------------------------------------------------------------------------------
/Table_test.go:
--------------------------------------------------------------------------------
1 | package GameFight
2 |
3 | import (
4 | "fmt"
5 | "testing"
6 | )
7 |
8 | func TestReadImpactCsv(t *testing.T) {
9 | ReadImpactCsv("impact.tab.csv")
10 | fmt.Printf("%+v", G_Impact[1])
11 | }
12 |
13 | func TestReadSkillCsv(t *testing.T) {
14 | ReadSkillCsv("Skill.csv")
15 | fmt.Printf("%+v", G_Skill[100005])
16 | }
17 |
18 | func TestReadHeroAttrCsv(t *testing.T) {
19 | ReadHeroAttrCsv("HeroAttr.csv")
20 | fmt.Printf("%+v", G_HeroAttr[1])
21 | }
--------------------------------------------------------------------------------
/Config/AttributeData.tab.csv:
--------------------------------------------------------------------------------
1 | 索引,策划描述
2 | INT,STRING
3 | 0,无
4 | 1,最大生命
5 | 2,移动速度
6 | 3,速度
7 | 4,物攻
8 | 5,物防
9 | 6,命中
10 | 7,闪避
11 | 8,暴击
12 | 9,连击
13 | 10,反击
14 | 11,连击次数
15 | 12,连伤
16 | 13,反伤
17 | 14,暴伤
18 | 15,物免
19 | 16,暴击伤害减免
20 | 17,附加伤害
21 | 18,普通攻击伤害
22 | 19,魔攻
23 | 20,魔防
24 | 21,魔免
25 | 22,最大魔法值
26 | 23,攻击速度百分比
27 | 24,物理攻击百分比
28 | 25,魔法攻击百分比
29 | 26,物理防御百分比
30 | 27,魔法防御百分比
31 | 28,最大生命值百分比
32 | 29,最大魔法值百分比
33 | 30,等级
34 | 31,当前血量
35 | 32,当前魔法值
36 | 33,当前经验
37 | 34,行动力
38 |
--------------------------------------------------------------------------------
/FightObjList.go:
--------------------------------------------------------------------------------
1 | package GameFight
2 |
3 | type FightObjList struct {
4 | mOwnerGuid X_GUID
5 | mObjectList [MaxMatrixCellCount]*FightObject
6 | }
7 |
8 | func (list *FightObjList) CleanUp() {
9 | list.mOwnerGuid = InvalidId
10 | for i := 0; i < MaxMatrixCellCount; i++ {
11 | list.mObjectList[i].CleanUp()
12 | }
13 | }
14 |
15 | func (list *FightObjList) SetOwnerGuid(guid X_GUID) {
16 | list.mOwnerGuid = guid
17 | }
18 | func (list *FightObjList) GetOwnerGuid() X_GUID {
19 | return list.mOwnerGuid
20 | }
21 |
22 | func (list *FightObjList) GetActiveCount() int {
23 | nCount := 0
24 | for i := 0; i < MaxMatrixCellCount; i++ {
25 | if list.mObjectList[i].IsActive() {
26 | nCount += 1
27 | }
28 | }
29 | return nCount
30 | }
31 |
32 | func (list *FightObjList) GetInactiveCount() int {
33 | nCount := 0
34 | for i := 0; i < MaxMatrixCellCount; i++ {
35 | if list.mObjectList[i].IsValid() && !list.mObjectList[i].IsActive() {
36 | nCount += 1
37 | }
38 | }
39 | return nCount
40 | }
41 |
42 | func (list *FightObjList) GetFightObject(index int) *FightObject {
43 | if index >= 0 && index < MaxMatrixCellCount {
44 | return list.mObjectList[index]
45 | }
46 | return nil
47 | }
48 |
49 | func (list *FightObjList) FillObject(index int, object *FightObject) bool {
50 | if !object.IsValid() {
51 | return false
52 | }
53 | if index < 0 || index >= MaxMatrixCellCount {
54 | return false
55 | }
56 | if list.mObjectList[index] != nil && list.mObjectList[index].IsValid() {
57 | return false
58 | }
59 | object.SetMatrixID(index)
60 | list.mObjectList[index] = object
61 | return true
62 | }
63 |
64 | func (list *FightObjList) Init(fightDB *FightDB) bool {
65 | if !fightDB.IsValid() {
66 | return false
67 | }
68 | list.SetOwnerGuid(fightDB.HumanGuid)
69 | for i := 0; i < fightDB.FightCount; i++ {
70 | fightDBData := fightDB.FightDBData[i]
71 | if fightDBData.IsValid() {
72 | fightObj := new(FightObject)
73 | fightObj.InitFightDBData(fightDBData)
74 | index := fightObj.GetMatrixID()
75 | list.mObjectList[index] = fightObj
76 | }
77 | }
78 | return true
79 | }
80 |
81 | func (list *FightObjList) ImpactHeartBeat(uTime int) {
82 | for i := 0; i < MaxMatrixCellCount; i++ {
83 | if list.mObjectList[i].IsActive() {
84 | //清空英雄的impact
85 | list.mObjectList[i].ClearImpactEffect()
86 | //impact攻击逻辑
87 | list.mObjectList[i].ImpactHeartBeat(uTime)
88 | }
89 | }
90 | }
91 | //攻击
92 | func (list *FightObjList) HeartBeat(uTime int) {
93 | for i := 0; i < MaxMatrixCellCount; i++ {
94 | if list.mObjectList[i].IsActive() {
95 | //fmt.Printf("第%+v回合, 英雄id %+v \n",uTime, list.mObjectList[i].GetGuid())
96 | list.mObjectList[i].HeartBeat(uTime)
97 | pAttackInfo := list.mObjectList[i].GetAttackInfo()
98 | if pAttackInfo != nil && pAttackInfo.IsValid() {
99 | pFightCell := list.mObjectList[i].GetFightCell()
100 | pRoundInfo := pFightCell.GetRoundInfo()
101 | pRoundInfo.AddAttackInfo(*pAttackInfo)
102 |
103 | }
104 | }
105 | }
106 | }
107 | //清除所有buff
108 | func (list *FightObjList) ClearImpactEffect() {
109 | for i := 0; i < MaxMatrixCellCount; i++ {
110 | if list.mObjectList[i].IsActive() {
111 | list.mObjectList[i].ClearImpactEffect()
112 | }
113 | }
114 | }
115 |
--------------------------------------------------------------------------------
/Fight_test.go:
--------------------------------------------------------------------------------
1 | package GameFight
2 |
3 | import (
4 | "fmt"
5 | "testing"
6 | )
7 |
8 | func TestFightCell_Fight(t *testing.T) {
9 | fightCell := FightCell{
10 | mAttackList: nil,
11 | mDefenceList: nil,
12 | mFightInfo: new(FightInfo),
13 | mRoundInfo: new(FightRoundInfo),
14 | mFightType: 0,
15 | mPlusAtt: 0,
16 | }
17 |
18 | attackObjList := FightObjList{
19 | mOwnerGuid: 1,
20 | mObjectList: [6]*FightObject{},
21 | }
22 | attackerHeroList := [MaxMatrixCellCount]int{9}
23 | fightCell.mAttackList = &attackObjList
24 | defendObjList := FightObjList{
25 | mOwnerGuid: 1,
26 | mObjectList: [6]*FightObject{},
27 | }
28 | fightCell.mDefenceList = &defendObjList
29 | defendHeroList := [MaxMatrixCellCount]int{10}
30 | FillFightObjList(attackerHeroList, fightCell.GetAttackList())
31 | FillFightObjList(defendHeroList, fightCell.GetDefenceList())
32 | fightCell.InitAttackList()
33 | fightCell.InitDefendList(0)
34 | fightCell.Fight()
35 |
36 |
37 | }
38 |
39 | func FillFightObjList(heroList [MaxMatrixCellCount]int, pFightObjList *FightObjList) bool {
40 | for i := 0; i < MaxMatrixCellCount; i++ {
41 | fightObject := new(FightObject)
42 | if FillFightObjByCfg(heroList[i], fightObject) {
43 | pFightObjList.FillObject(i, fightObject)
44 | }
45 | }
46 | return true
47 | }
48 |
49 | //heroId 英雄id
50 | func FillFightObjByCfg(heroId int, fightObject *FightObject) bool {
51 | pHeroRow, ok := G_HeroAttr[heroId]
52 | if !ok {
53 | panic("cfg error")
54 | }
55 | fightDBData := FightDBData{
56 | Guid: X_GUID(heroId),
57 | TableID: heroId,
58 | Type: 0,
59 | Quality: pHeroRow.InitQuality,
60 | MatrixID: 0,
61 | Profession: pHeroRow.Profession,
62 | Level: pHeroRow.InitLevel,
63 | HP: pHeroRow.InitHP,
64 | Mp: pHeroRow.InitMP,
65 | SkillCount: MaxSkillNum,
66 | Skill: [2]int{pHeroRow.MagicSkillID1, pHeroRow.MagicSkillID2},
67 | EquipSkillCount: 0,
68 | EquipSkill: [6]int{},
69 | PhysicAttack: pHeroRow.InitPhysicAttack,
70 | MagicAttack: pHeroRow.InitMagicAttack,
71 | PhysicDefence: pHeroRow.InitPhysicDefence,
72 | MagicDefence: pHeroRow.InitMagicDefence,
73 | MaxHP: pHeroRow.InitHP,
74 | MaxMP: pHeroRow.InitMP,
75 | Hit: pHeroRow.InitHit,
76 | Dodge: pHeroRow.InitDodge,
77 | Strike: pHeroRow.InitStrike,
78 | StrikeHurt: pHeroRow.InitStrikeHurt,
79 | Continuous: pHeroRow.InitContinuous,
80 | ConAttHurt: pHeroRow.InitConAttHurt,
81 | ConAttTimes: pHeroRow.InitConAttTimes,
82 | BackAttack: pHeroRow.InitBackAttack,
83 | BackAttHurt: pHeroRow.InitBackAttHurt,
84 | AttackSpeed: pHeroRow.InitAttackSpeed,
85 | PhysicHurtDecay: pHeroRow.InitPhysicHurtDecay,
86 | MagicHurtDecay: pHeroRow.InitMagicHurtDecay,
87 | Exp: 0,
88 | GrowRate: 0,
89 | BearPoint: 0,
90 | Equip: [6]int{InvalidId, InvalidId, InvalidId, InvalidId, InvalidId, InvalidId},
91 | Color: 1,
92 | }
93 | fightObject.InitFightDBData(fightDBData)
94 | return true
95 |
96 | }
97 |
98 | func TestX_GUID_IsValid(t *testing.T) {
99 | guid := X_GUID(2)
100 | fmt.Println(guid.IsValid())
101 | }
102 |
103 | func TestFuncInArr(t *testing.T){
104 | arr := [2]func(){func(){ fmt.Println(1)}, func(){ fmt.Println(2)}}
105 | arr[1]()
106 |
107 | }
--------------------------------------------------------------------------------
/TableRow.go:
--------------------------------------------------------------------------------
1 | package GameFight
2 |
3 | //技能
4 | type TableRowSkill struct {
5 | SkillId int //技能ID
6 | Description string //策划注释
7 | Name string //技能名称
8 | SkillLevel int //技能等级
9 | Tips string //技能描述
10 | SelectTargetOpt int //目标选择方式
11 | SkillRate int //技能释放概率
12 | NeedMP int //法力消耗
13 | CoolDownTime int //技能内置冷却
14 | CoolDownID int //技能冷却ID
15 | StartRound int //第一次施放
16 | SkillType int //技能类型
17 | ImpactID [MaxSkillImpactCount]int //附加Impact
18 | ImpactRate [MaxSkillImpactCount]int //附加Impact概率
19 | ImpactTargetType [MaxSkillImpactCount]int //impact选择类型
20 | ScriptID int //脚本ID
21 | HeroLevel int //英雄等级
22 | ConsumeMoney int //银币消耗
23 | LearnType int //学习类型 0=走commonitem 1=走道具消耗
24 | //战斗需要才加
25 | }
26 |
27 | type TableRowImpact struct {
28 | ImpactID int //impactID
29 | Description string //策划描述
30 | LogicID int //impact逻辑Id
31 | Param [MaxImpactLogicParamCount]int //逻辑参数
32 | Icon string //Buff图标
33 | ImpactMutexID int //Impact互斥ID
34 | ReplaceLevel int //顶替优先级
35 | DeadDisappear int //死亡后是否消失
36 | OfflineTimeGO int //下线是否计时
37 | ScriptID int //脚本ID
38 | Effect string //特效
39 | Name string //名称
40 | Desc string //描述
41 | SkillEffect string //技能效果
42 | }
43 |
44 | type TableRowHeroAttr struct {
45 | ID int //英雄ID
46 | SpiritID int //英雄魂魄ID
47 | Name string //英雄名称
48 | Profession int //英雄职业
49 | InitQuality int //初始品质
50 | InitLevel int //初始等级
51 | LevelLimit int //等级上限
52 | LevelCrossRole int //英雄比人物高出等级上限
53 | InitExp int //初始经验
54 | TakeLevel int //可携带等级
55 | EffectAttackByGrowRate int //成长值对英雄攻击点数的影响系数
56 | EffectDefendByGrowRate int //成长值对英雄防御点数的影响系数
57 | EffectHPByGrowRate int //成长值对英雄生命上限点数的影响系数
58 | EffectMPByGrowRate int //成长值对英雄魔法上限点数的影响系数
59 | EffectPhysicAttackByLevel int //英雄物理攻击随等级的增长系数
60 | EffectPhysicDefendByLevel int //英雄物理防御随等级的增长系数
61 | EffectHpByLevel int //英雄生命上限随等级的增长系数
62 | EffectMpByLevel int //英雄魔法上限随等级的增长系数
63 | InitAttackSpeed int //初始速度
64 | InitPhysicAttack int //初始物理攻击
65 | InitMagicAttack int //初始魔法攻击
66 | InitPhysicDefence int //初始物理防御
67 | InitMagicDefence int //初始魔法防御
68 | InitHP int //初始生命值
69 | InitMP int //初始魔法值
70 | InitHit int //初始命中值
71 | InitDodge int //初始闪避值
72 | InitStrike int //初始暴击值
73 | InitContinuous int //初始连击值 计算发生概率
74 | InitBackAttack int //初始反击值
75 | InitStrikeHurt int //初始暴击伤害
76 | InitConAttTimes int //初始连击次数
77 | InitConAttHurt int //初始连击伤害 计算伤害倍率
78 | InitBackAttHurt int //初始反击伤害
79 | InitPhysicHurtDecay int //初始物理减免
80 | InitMagicHurtDecay int //初始魔法减免
81 | FloatingHurt int //英雄伤害浮动
82 | PhysicSkillID int //普通攻击技能
83 | MagicSkillID1 int //魔法技能1
84 | LearnedLevel1 int //学会等级1
85 | MagicSkillID2 int //魔法技能2
86 | LearnedLevel2 int //学会等级2
87 | MaxGrowPoint int //成长值上限
88 | InitBearPoint int //初始承载力
89 | BearParam int //承载力随等级的增长系数
90 | RequireHumanLevel int //需要召唤师等级
91 | }
92 |
--------------------------------------------------------------------------------
/GameDefine.go:
--------------------------------------------------------------------------------
1 | package GameFight
2 |
3 | type EmTypeFight int
4 |
5 | const (
6 | EmTypeFightNormal = iota
7 | EmTypeFightStair //单排
8 | EmTypeFightCount
9 | )
10 |
11 | const (
12 | InvalidId = -1
13 | InvalidValue = -1
14 |
15 | //技能
16 | MaxSkillNum int = 2 //技能数量
17 | //角色相关
18 | MaxEquipNumPerHero int = 6 //英雄携带最大装备数量
19 | //技能
20 | MaxMatrixCellCount int = 6 //技能最大选择目标
21 | MaxImpactNumber int = 20 //impact数量A
22 | MaxSkillImpactCount int = 4 //最大技能所带impact
23 | MaxConAttackTimes int = 4 //最大连击次数
24 | MaxImpactLogicParamCount int = 4 //impact参数数量
25 | MaxBuffNumber int = 10 //强化类buff数量
26 | MaxDeBuffNumber int = 10 //削弱类buff数量
27 | MAX_FIGHT_ROUND int = 128 //最大战斗回合
28 | Distance int = 10
29 |
30 | )
31 |
32 | type EmSkillType int
33 |
34 | const (
35 | EmSkillTypeInvalid EmSkillType = iota - 1
36 | EmSkillTypeHeroActive //0=英雄主动技能
37 | EmSkillTypeHeroPassive //1=英雄被动技能
38 | EmSkillTypeEquipActive //2=装备主动技能
39 | EmSkillTypeEquipPassive //3=装备被动技能
40 | );
41 |
42 | type EmImpactLogic int
43 |
44 | const (
45 | EmImpactLogic0 = iota
46 | EmImpactLogic1
47 | EmImpactLogic2 //持续物伤
48 | EmImpactLogic3 //持续法伤
49 | EmImpactLogic4
50 | EmImpactLogic5
51 | EmImpactLogic6
52 |
53 | EmImpactLogicCount
54 | )
55 |
56 | //技能选择目标方式
57 | type EmSkillTargetOpt int
58 |
59 | const (
60 | EmSkillTargetOptAuto = iota - 1 //自动选择
61 | EmSkillTargetOptOrder = 0 //0=顺序选择
62 | EmSkillTargetOptRand = 1 //1=随机选择
63 | EmSkillTargetOptSlow = 2 //2=后排优先
64 | EmSkillTargetOptNumber
65 | )
66 |
67 | //impact选择目标方式
68 | type EmImpactTarget int
69 |
70 | const (
71 | EmImpactTargetOptAuto = iota - 1
72 | EmImpactTargetOptSelf //0=自身;
73 | EmImpactTargetOwnerSignle //1=己方个体;
74 | EmImpactTargetOwnerAll //2=己方全体;
75 | EmImpactTargetEnemySignle //3=敌方个体;
76 | EmImpactTargetEnemyFront //4=敌方横排;
77 | EmImpactTargetEnemyBehind //5=敌方后排优先;
78 | EmImpactTargetEnemyAll //6=敌方全体;
79 | EmImpactTargetEnemyLine //7=敌方目标竖排;
80 | EmImpactTargetEnemyAround //8=敌方目标及周围;
81 | EmImpactTargetEnemyBehinDone //9=敌方后排个体
82 | EmImpactTargetOwnerMinHp //10=己方血最少
83 | EmImpactTargetOwnerMinMp //11=己方蓝最少
84 | EmImpactTargetOptNumber
85 | )
86 |
87 | type EmTypeImpactLogic int
88 |
89 | const (
90 | EmTypeImpactLogicInvalid = iota - 1
91 | EmTypeImpactLogicSingle //单次生效
92 | EmTypeImpactLogicBuff //强化
93 | EmTypeImpactLogicDeBuff //削弱
94 |
95 | EmTypeImpactLogicCount
96 | )
97 |
98 | type EmAttribute int
99 |
100 | const (
101 | EmAttributeInvalid EmAttribute = iota
102 | EmAttributeMaxHp //最大生命
103 | EmAttributeMoveSpeed //移动速度
104 | EmAttributeAttackSpeed //攻击速度
105 | EmAttributePhysicAttack //物理攻击
106 | EmAttributePhysicDefence //物理防御
107 | EmAttributeHit //命中点数
108 | EmAttributeDodge //闪避点数
109 | EmAttributeStrike //暴击
110 | EmAttributeContinuous //连击
111 | EmAttributeBackAttack //反击
112 | EmAttributeContinuousTimes //连击次数
113 | EmAttributeHurtContinuous //连击伤害
114 | EmAttributeHurtBackAttack //反击伤害
115 | EmAttributeHurtStrike //暴击伤害
116 | EmAttributePhysicHurtDecay //物理伤害减免
117 | EmAttributeStrikeHurtDecay //暴击伤害减免
118 | EmAttributeHurtExtra //附加伤害
119 | EmAttributeHurtPhysic //普通攻击伤害
120 | EmAttributeMagicAttack //魔法攻击
121 | EmAttributeMagicDefence //魔法防御
122 | EmAttributeMagicHurtDecay //魔法伤害减免
123 | EmAttributeMaxMp //最大魔法值
124 | EmAttributePercentAttackSpeed //攻击速度百分比
125 | EmAttributePercentPhysicAttack //物理攻击百分比
126 | EmAttributePercentMagicAttack //魔法攻击百分比
127 | EmAttributePercentPhysicDefence //物理防御百分比
128 | EmAttributePercentMagicDefence //魔法防御百分比
129 | EmAttributePercentMaxHp //最大生命值百分比
130 | EmAttributePercentMaxMp //最大魔法值百分比
131 | EmAttributeLevel //等级
132 | EmAttributeHp //血量
133 | EmAttributeMp //魔法值
134 |
135 | EmAttributeCurrentExp //当前经验
136 | EmAttributeAction //行动力
137 | EmAttributeNumber
138 | )
139 |
140 | //impact结果
141 | type EmImpactResult int
142 |
143 | const (
144 | EmImpactResultNormal = iota //正常加目标身上
145 | EmImpactResultFail //不能加在目标身上
146 | EmImpactResultDisAppear //抵消
147 | )
148 |
149 | //属性值计算公式
150 | func ChkMin(A, B int) (min int) {
151 | if A < B {
152 | return B
153 | } else {
154 | return A
155 | }
156 | }
157 |
158 | func CalcDamage(A, B, C int) int {
159 | return int((A - B) * (1 - (C)/100))
160 | }
161 |
162 | func CalcAttr1(A, B, C, D, E, F, G int) int {
163 | return int((A+B*C/100)*(1+D/100+E/100) + F + G)
164 | }
165 |
166 | func CalcAttr2(A, B, C int) int {
167 | return A + B + C
168 | }
169 | func CalcAttr3(A, B, C int) int {
170 | return 1 - (1-A/100)*(1-B/100)*(1-C/100)*100
171 | }
172 | func GetSkillGroup(A int) int {
173 | return A / 100
174 | }
175 |
176 | func GetSkillLevel(A int) int {
177 | return A % 100
178 | }
179 |
--------------------------------------------------------------------------------
/FightCell.go:
--------------------------------------------------------------------------------
1 | package GameFight
2 |
3 | import "fmt"
4 |
5 | type FightCell struct {
6 | mAttackList *FightObjList //攻击方
7 | mDefenceList *FightObjList //防御方
8 | mFightInfo *FightInfo //战斗信息提取
9 | mRoundInfo *FightRoundInfo //回合信息
10 |
11 | mFightType EmTypeFight //战斗类型
12 | mPlusAtt int //攻加成
13 | }
14 |
15 | func (f *FightCell) CleanUp() {
16 | f.mAttackList.CleanUp()
17 | f.mDefenceList.CleanUp()
18 | f.mFightInfo.CleanUp()
19 | f.mRoundInfo.CleanUp()
20 | f.mFightType = EmTypeFightNormal
21 | f.mPlusAtt = 0
22 | }
23 |
24 | func (f *FightCell) GetFightType() EmTypeFight {
25 | return f.mFightType
26 | }
27 |
28 | func (f *FightCell) SetFightType(val EmTypeFight) {
29 | f.mFightType = val
30 | }
31 |
32 | func (f *FightCell) GetPlusAtt() int {
33 | return f.mPlusAtt
34 | }
35 |
36 | func (f *FightCell) SetPlusAtt(val int) {
37 | f.mPlusAtt = val
38 | }
39 |
40 | func (f *FightCell) GetRoundInfo() *FightRoundInfo {
41 | return f.mRoundInfo
42 | }
43 |
44 | //攻击方
45 | func (f *FightCell) GetAttackList() *FightObjList {
46 | return f.mAttackList
47 | }
48 |
49 | //防守方
50 | func (f *FightCell) GetDefenceList() *FightObjList {
51 | return f.mDefenceList
52 | }
53 |
54 | func (f *FightCell) IsOver() bool {
55 | if f.mAttackList.GetActiveCount() <= 0 {
56 | return true
57 | }
58 | if f.mDefenceList.GetActiveCount() <= 0 {
59 | return true
60 | }
61 | return false
62 | }
63 |
64 | func (f *FightCell) IsWin() bool {
65 | return f.mFightInfo.BWin
66 | }
67 |
68 | //初始化战斗信息
69 | func (f *FightCell) initFightInfo() {
70 | //读表
71 | f.mFightInfo.MaxFightDistance = 10
72 | for i := 0; i < MaxMatrixCellCount; i++ {
73 | pFightObj := f.mAttackList.GetFightObject(i)
74 | if pFightObj != nil && pFightObj.IsValid() {
75 | objdata := FObjectData{}
76 | objdata.Guid = pFightObj.GetGuid()
77 | objdata.TableID = pFightObj.GetTableID()
78 | objdata.Quality = pFightObj.GetQuality()
79 | objdata.Color = pFightObj.GetColor()
80 | objdata.Profession = pFightObj.GetProfession()
81 | objdata.Level = pFightObj.GetLevel()
82 | objdata.MatrixID = pFightObj.GetMatrixID()
83 | f.mFightInfo.AddAttackObjectData(objdata)
84 | }
85 |
86 | pFightObj = f.mDefenceList.GetFightObject(i)
87 | if pFightObj != nil && pFightObj.IsValid() {
88 | objdata := FObjectData{}
89 | objdata.Guid = pFightObj.GetGuid()
90 | objdata.TableID = pFightObj.GetTableID()
91 | objdata.Quality = pFightObj.GetQuality()
92 | objdata.Color = pFightObj.GetColor()
93 | objdata.Profession = pFightObj.GetProfession()
94 | objdata.Level = pFightObj.GetLevel()
95 | objdata.MatrixID = pFightObj.GetMatrixID()
96 | f.mFightInfo.AddDefendObjectData(objdata)
97 | }
98 | }
99 | }
100 |
101 | //初始化每回合双方的初始数据
102 | func (f *FightCell) initRoundInfo() {
103 | f.mRoundInfo.CleanUp()
104 | for i := 0; i < MaxMatrixCellCount; i++ {
105 | pFightObj := f.mAttackList.GetFightObject(i)
106 | if pFightObj != nil && pFightObj.IsValid() {
107 | objInfo := new(FObjectInfo)
108 | objInfo.Guid = pFightObj.GetGuid()
109 | objInfo.HP = pFightObj.GetHP()
110 | objInfo.MaxHP = pFightObj.GetMaxHP()
111 | objInfo.MP = pFightObj.GetMP()
112 | objInfo.MaxMP = pFightObj.GetMaxMP()
113 | objInfo.FightDistance = pFightObj.GetFightDistance()
114 | objInfo.AttackSpeed = pFightObj.GetAttackSpeed()
115 | pImpactList := pFightObj.GetImpactList()
116 | //每个英雄的impact列表
117 | for index := 0; index < MaxImpactNumber; index++ {
118 | if pImpactList[index].IsValid() {
119 | objInfo.AddImpact(pImpactList[index].GetImpactID(), 0, 0)
120 | }
121 | }
122 | f.mRoundInfo.AddAttackObjectInfo(objInfo)
123 | }
124 |
125 | pFightObj = f.mDefenceList.GetFightObject(i)
126 | if pFightObj != nil && pFightObj.IsValid() {
127 | objInfo := new(FObjectInfo)
128 | objInfo.Guid = pFightObj.GetGuid()
129 | objInfo.HP = pFightObj.GetHP()
130 | objInfo.MaxHP = pFightObj.GetMaxHP()
131 | objInfo.MP = pFightObj.GetMP()
132 | objInfo.MaxMP = pFightObj.GetMaxMP()
133 | objInfo.FightDistance = pFightObj.GetFightDistance()
134 | objInfo.AttackSpeed = pFightObj.GetAttackSpeed()
135 | pImpactList := pFightObj.GetImpactList()
136 | //每个英雄的impact列表
137 | for index := 0; index < MaxImpactNumber; index++ {
138 | if pImpactList[index].IsValid() {
139 | objInfo.AddImpact(pImpactList[index].GetImpactID(), 0, 0)
140 | }
141 | }
142 | f.mRoundInfo.AddDefendObjectInfo(objInfo)
143 | }
144 | }
145 | }
146 |
147 | func (f *FightCell) Fight() bool {
148 | f.initFightInfo()
149 | for nRound := 1; nRound <= MAX_FIGHT_ROUND; nRound++ {
150 | if f.IsOver() {
151 | if f.mAttackList.GetActiveCount() > 0 {
152 | f.mFightInfo.SetWin(true)
153 | } else {
154 | f.mFightInfo.SetWin(false)
155 | }
156 | return true
157 | }
158 | fmt.Printf("第%+v回合:\n", nRound)
159 | fmt.Printf("攻击方英雄存活数: %+v \n", f.mAttackList.GetActiveCount())
160 | fmt.Printf("防守方英雄存活数: %+v \n", f.mDefenceList.GetActiveCount())
161 | f.initRoundInfo()
162 | fmt.Println("战前信息",f.mRoundInfo.String())
163 | f.mAttackList.ImpactHeartBeat(nRound)
164 | f.mDefenceList.ImpactHeartBeat(nRound)
165 | f.mAttackList.HeartBeat(nRound)
166 | f.mDefenceList.HeartBeat(nRound)
167 | fmt.Println("战后信息",f.mRoundInfo.String())
168 | f.mFightInfo.AddRoundInfo(*f.mRoundInfo)
169 | //spew.Dump(f.mRoundInfo.AttackInfo)
170 | }
171 | f.mFightInfo.SetWin(false)
172 | return true
173 | }
174 |
175 | func (f *FightCell) InitAttackList() {
176 | for i := 0; i < MaxMatrixCellCount; i++ {
177 | pFightObj := f.mAttackList.GetFightObject(i)
178 | if pFightObj != nil {
179 | pFightObj.SetAttacker(true)
180 | pFightObj.SetFightCell(f)
181 | pFightObj.InitSkill()
182 | }
183 | }
184 | }
185 |
186 | func (f *FightCell) InitDefendList(nDefendType int) {
187 | for i := 0; i < MaxMatrixCellCount; i++ {
188 | pFightObj := f.mDefenceList.GetFightObject(i)
189 | if pFightObj != nil {
190 | pFightObj.SetAttacker(false)
191 | pFightObj.SetFightCell(f)
192 | pFightObj.InitSkill()
193 | }
194 | }
195 | f.mFightInfo.DefendType = nDefendType
196 | }
197 |
198 | func (f *FightCell) GetFightInfo() *FightInfo{
199 | return f.mFightInfo
200 | }
201 |
--------------------------------------------------------------------------------
/Table.go:
--------------------------------------------------------------------------------
1 | package GameFight
2 |
3 | import (
4 | "encoding/csv"
5 | "errors"
6 | "fmt"
7 | "io/ioutil"
8 | "strconv"
9 | "strings"
10 | )
11 |
12 | var G_Impact map[int]TableRowImpact
13 | var G_Skill map[int]TableRowSkill
14 | var G_HeroAttr map[int]TableRowHeroAttr
15 |
16 | func init() {
17 | G_Impact = make(map[int]TableRowImpact)
18 | ReadImpactCsv("Impact.tab.csv")
19 | G_Skill = make(map[int]TableRowSkill)
20 | ReadSkillCsv("Skill.csv")
21 | G_HeroAttr = make(map[int]TableRowHeroAttr)
22 | ReadHeroAttrCsv("HeroAttr.csv")
23 | }
24 | func ReadImpactCsv(filename string) bool {
25 | //获取数据
26 | fileName := "./Config/" + filename
27 | cntb, err := ioutil.ReadFile(fileName)
28 | if err != nil {
29 | fmt.Println(err)
30 | return false
31 | }
32 |
33 | r := csv.NewReader(strings.NewReader(string(cntb)))
34 | ss, _ := r.ReadAll()
35 | sz := len(ss)
36 | for i := 2; i < sz; i++ {
37 | tmp := TableRowImpact{}
38 | tmp.ImpactID, _ = strconv.Atoi(ss[i][0])
39 | tmp.Description = ss[i][1]
40 | tmp.LogicID, _ = strconv.Atoi(ss[i][2])
41 | for j := 0; j < MaxImpactLogicParamCount; j++ {
42 | tmp.Param[j], _ = strconv.Atoi(ss[i][3+j])
43 | }
44 | tmp.Icon = ss[i][MaxImpactLogicParamCount+1]
45 | tmp.ImpactMutexID, _ = strconv.Atoi(ss[i][MaxImpactLogicParamCount+2])
46 | tmp.ReplaceLevel, _ = strconv.Atoi(ss[i][MaxImpactLogicParamCount+3])
47 | tmp.ReplaceLevel, _ = strconv.Atoi(ss[i][MaxImpactLogicParamCount+3])
48 | tmp.DeadDisappear, _ = strconv.Atoi(ss[i][MaxImpactLogicParamCount+4])
49 | tmp.OfflineTimeGO, _ = strconv.Atoi(ss[i][MaxImpactLogicParamCount+5])
50 | tmp.ScriptID, _ = strconv.Atoi(ss[i][MaxImpactLogicParamCount+6])
51 | tmp.Effect = ss[i][MaxImpactLogicParamCount+7]
52 | tmp.Name = ss[i][MaxImpactLogicParamCount+8]
53 | tmp.Desc = ss[i][MaxImpactLogicParamCount+9]
54 | tmp.SkillEffect = ss[i][MaxImpactLogicParamCount+10]
55 | G_Impact[tmp.ImpactID] = tmp
56 | }
57 | return true
58 | }
59 | func ReadSkillCsv(filename string) bool {
60 | //获取数据
61 | fileName := "./Config/" + filename
62 | cntb, err := ioutil.ReadFile(fileName)
63 | if err != nil {
64 | fmt.Println(err)
65 | return false
66 | }
67 |
68 | r := csv.NewReader(strings.NewReader(string(cntb)))
69 | ss, _ := r.ReadAll()
70 | sz := len(ss)
71 | for i := 2; i < sz; i++ {
72 | tmp := TableRowSkill{}
73 | tmp.SkillId, _ = strconv.Atoi(ss[i][0])
74 | tmp.Description = ss[i][1]
75 | tmp.Name = ss[i][2]
76 | tmp.SkillLevel, _ = strconv.Atoi(ss[i][3])
77 | tmp.Tips = ss[i][4]
78 | tmp.SelectTargetOpt, _ = strconv.Atoi(ss[i][5])
79 | tmp.SkillRate, _ = strconv.Atoi(ss[i][6])
80 | tmp.NeedMP, _ = strconv.Atoi(ss[i][7])
81 | tmp.CoolDownTime, _ = strconv.Atoi(ss[i][8])
82 | tmp.CoolDownID, _ = strconv.Atoi(ss[i][9])
83 | tmp.StartRound, _ = strconv.Atoi(ss[i][10])
84 | tmp.SkillType, _ = strconv.Atoi(ss[i][11])
85 | index := 9
86 | for j := 0; j < MaxSkillImpactCount; j++ {
87 | index = index + 3
88 | tmp.ImpactID[j], _ = strconv.Atoi(ss[i][index])
89 | tmp.ImpactRate[j], _ = strconv.Atoi(ss[i][index+1])
90 | tmp.ImpactTargetType[j], _ = strconv.Atoi(ss[i][index+2])
91 | }
92 | tmp.ScriptID, _ = strconv.Atoi(ss[i][24])
93 | tmp.HeroLevel, _ = strconv.Atoi(ss[i][25])
94 | tmp.ConsumeMoney, _ = strconv.Atoi(ss[i][26])
95 | tmp.LearnType, _ = strconv.Atoi(ss[i][27])
96 |
97 | G_Skill[tmp.SkillId] = tmp
98 | }
99 | return true
100 | }
101 | func ReadHeroAttrCsv(filename string) bool {
102 | //获取数据
103 | fileName := "./Config/" + filename
104 | cntb, err := ioutil.ReadFile(fileName)
105 | if err != nil {
106 | fmt.Println(err)
107 | return false
108 | }
109 |
110 | r := csv.NewReader(strings.NewReader(string(cntb)))
111 | ss, _ := r.ReadAll()
112 | sz := len(ss)
113 | for i := 2; i < sz; i++ {
114 | tmp := TableRowHeroAttr{}
115 | tmp.ID, _ = strconv.Atoi(ss[i][0])
116 | tmp.SpiritID, _ = strconv.Atoi(ss[i][1])
117 | tmp.Name = ss[i][2]
118 | tmp.Profession, _ = strconv.Atoi(ss[i][3])
119 | tmp.InitQuality, _ = strconv.Atoi(ss[i][4])
120 | tmp.InitLevel, _ = strconv.Atoi(ss[i][5])
121 | tmp.LevelLimit, _ = strconv.Atoi(ss[i][6])
122 | tmp.LevelCrossRole, _ = strconv.Atoi(ss[i][7])
123 | tmp.InitExp, _ = strconv.Atoi(ss[i][8])
124 | tmp.TakeLevel, _ = strconv.Atoi(ss[i][9])
125 | tmp.EffectAttackByGrowRate, _ = strconv.Atoi(ss[i][10])
126 | tmp.EffectDefendByGrowRate, _ = strconv.Atoi(ss[i][11])
127 | tmp.EffectHPByGrowRate, _ = strconv.Atoi(ss[i][12])
128 | tmp.EffectMPByGrowRate, _ = strconv.Atoi(ss[i][13])
129 | tmp.EffectPhysicAttackByLevel, _ = strconv.Atoi(ss[i][14])
130 | tmp.EffectPhysicDefendByLevel, _ = strconv.Atoi(ss[i][15])
131 | tmp.EffectHpByLevel, _ = strconv.Atoi(ss[i][16])
132 | tmp.EffectMpByLevel, _ = strconv.Atoi(ss[i][17])
133 | tmp.InitAttackSpeed, _ = strconv.Atoi(ss[i][18])
134 | tmp.InitPhysicAttack, _ = strconv.Atoi(ss[i][19])
135 | tmp.InitMagicAttack, _ = strconv.Atoi(ss[i][20])
136 | tmp.InitPhysicDefence, _ = strconv.Atoi(ss[i][21])
137 | tmp.InitMagicDefence, _ = strconv.Atoi(ss[i][22])
138 | tmp.InitHP, _ = strconv.Atoi(ss[i][23])
139 | tmp.InitMP, _ = strconv.Atoi(ss[i][24])
140 | tmp.InitHit, _ = strconv.Atoi(ss[i][25])
141 | tmp.InitDodge, _ = strconv.Atoi(ss[i][26])
142 | tmp.InitStrike, _ = strconv.Atoi(ss[i][27])
143 | tmp.InitContinuous, _ = strconv.Atoi(ss[i][28])
144 | tmp.InitBackAttack, _ = strconv.Atoi(ss[i][29])
145 | tmp.InitStrikeHurt, _ = strconv.Atoi(ss[i][30])
146 | tmp.InitConAttTimes, _ = strconv.Atoi(ss[i][31])
147 | tmp.InitConAttHurt, _ = strconv.Atoi(ss[i][32])
148 | tmp.InitBackAttHurt, _ = strconv.Atoi(ss[i][33])
149 | tmp.InitPhysicHurtDecay, _ = strconv.Atoi(ss[i][34])
150 | tmp.InitMagicHurtDecay, _ = strconv.Atoi(ss[i][35])
151 | tmp.FloatingHurt, _ = strconv.Atoi(ss[i][36])
152 | tmp.PhysicSkillID, _ = strconv.Atoi(ss[i][37])
153 | tmp.MagicSkillID1, _ = strconv.Atoi(ss[i][38])
154 | tmp.LearnedLevel1, _ = strconv.Atoi(ss[i][39])
155 | tmp.MagicSkillID2, _ = strconv.Atoi(ss[i][40])
156 | tmp.LearnedLevel2, _ = strconv.Atoi(ss[i][41])
157 | tmp.MaxGrowPoint, _ = strconv.Atoi(ss[i][42])
158 | tmp.InitBearPoint, _ = strconv.Atoi(ss[i][43])
159 | tmp.BearParam, _ = strconv.Atoi(ss[i][44])
160 | tmp.RequireHumanLevel, _ = strconv.Atoi(ss[i][47])
161 |
162 | G_HeroAttr[tmp.ID] = tmp
163 | }
164 | return true
165 | }
166 |
167 | func ImpactTableRow(impactId int) (TableRowImpact, error) {
168 | if impact, ok := G_Impact[impactId]; ok {
169 | return impact, nil
170 | } else {
171 | return TableRowImpact{}, errors.New("config err")
172 | }
173 | }
174 | func SkillTableRow(skillId int) (TableRowSkill, error) {
175 | if skill, ok := G_Skill[skillId]; ok {
176 | return skill, nil
177 | } else {
178 | return TableRowSkill{}, errors.New("config err")
179 | }
180 | }
181 | func HeroTableRow(id int) (TableRowHeroAttr, error) {
182 | if heroAttr, ok := G_HeroAttr[id]; ok {
183 | return heroAttr, nil
184 | } else {
185 | return TableRowHeroAttr{}, errors.New("config err")
186 | }
187 | }
188 |
--------------------------------------------------------------------------------
/.idea/workspace.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
27 |
32 |
33 |
34 |
35 |
36 |
37 |
38 |
39 |
40 |
41 |
42 |
43 |
44 |
45 |
46 |
47 |
48 |
49 |
50 |
51 |
52 |
53 |
54 |
55 |
56 |
57 |
58 |
59 |
60 |
61 |
62 |
63 |
64 |
65 |
66 |
67 |
68 |
69 |
70 |
71 |
72 |
73 |
74 |
75 |
76 |
77 |
78 |
79 |
80 |
81 |
82 |
83 |
84 |
85 |
86 |
87 |
88 |
89 |
90 |
91 |
92 |
93 |
94 |
95 |
96 |
97 |
98 |
99 |
100 |
101 |
102 |
103 |
104 |
105 |
106 |
107 |
108 |
109 |
110 |
111 |
112 |
113 |
114 |
115 |
116 |
117 |
118 |
119 |
120 |
121 |
122 |
123 |
124 |
125 |
126 |
127 |
128 |
129 |
130 |
131 |
132 |
133 |
134 |
135 |
136 |
137 |
138 |
139 |
140 |
141 |
142 |
143 |
144 |
153 |
154 |
155 |
156 | true
157 | https://goproxy.cn,direct
158 |
159 |
160 |
161 |
162 |
163 | file://$PROJECT_DIR$/Impact.go
164 | 435
165 |
166 |
167 |
168 | file://$PROJECT_DIR$/Skill.go
169 | 429
170 |
171 |
172 |
173 |
174 |
175 |
176 |
177 |
178 |
179 |
180 |
--------------------------------------------------------------------------------
/Config/HeroAttr.csv:
--------------------------------------------------------------------------------
1 | 英雄ID,魂魄ID,英雄名称,英雄职业,初始品质,初始等级,等级上限,英雄比人物高出等级上限,初始经验,可携带等级,成长值对英雄攻击点数的影响系数,成长值对英雄防御点数的影响系数,成长值对英雄生命上限点数的影响系数,成长值对英雄魔法上限点数的影响系数,英雄攻击随等级的增长系数,英雄防御随等级的增长系数,英雄生命上限随等级的增长系数,英雄魔法上限随等级的增长系数,初始速度,初始物理攻击,初始魔法攻击,初始物理防御,初始魔法防御,初始生命值,初始魔法值,初始命中值,初始闪避值,初始暴击值,初始连击值,初始反击值,初始暴击伤害,初始连击次数,初始连击伤害,初始反击伤害,初始物理减免,初始魔法减免,英雄伤害浮动,普通攻击技能,魔法技能1,学会等级,魔法技能2,学会等级,成长值上限,初始承载力,承载力随等级的增长系数,英雄图标,英雄出场声音,需要召唤师等级
2 | INT,INT,STRING,INT,INT,INT,INT,INT,INT,INT,INT,INT,INT,INT,INT,INT,INT,INT,INT,INT,INT,INT,INT,INT,INT,INT,INT,INT,INT,INT,INT,INT,INT,INT,INT,INT,INT,INT,INT,INT,INT,INT,INT,INT,INT,STRING,STRING,INT
3 | #id,spiritID,name,professional,quality,initlevel,levelLimit,levelCrossRole,initexp,takeLevel,effectAttack,effectDefend,effectHp,effectMp,effectAttackbyLevel,effectDefendbyLevel,effectHpbyLevel,effectMpbyLevel,initSpeed,initAttackPhysic,initAttackMagic,initDefencePhysic,initDefenceMagic,initHP,initMP,initHit,initDodge,initStrike,initContinuous,initBackAttack,initStrikeHurt,initConAttTimes,initConAttHurt,initBackAttHurt,initPhysicHurtDecay,initMagicHurtDecay,FloatingHurt,PhysicSkillID,MagicSkillID1,,MagicSkillID2,,MaxGrowPoint,initBearPoint,BearParam,Icon,wav,level
4 | 1,12020001,众神之王,1,1,1,70,5,0,1,50,50,50,50,270,110,3420,3510,11,45,0,5,0,511,260,100,0,0,0,0,0,0,100,100,0,0,5,0,100001,1,104201,6,0,10,10,zhongshenzhiwang.png,zsc_zhousi.mp3,5
5 | 2,12020002,水晶室女,1,1,1,70,5,0,1,50,50,50,50,290,160,3230,3770,8,40,0,5,0,454,273,100,0,0,0,0,0,0,100,100,0,0,5,0,100101,1,104301,6,0,10,10,shuijingshinv.png,zsc_shuijingshinv.mp3,1
6 | 3,12020003,流浪剑客,0,1,1,70,5,0,1,50,50,50,50,270,200,5130,1690,11,55,0,10,0,587,182,100,0,0,0,0,0,0,100,100,0,0,5,0,100201,1,104401,6,0,10,10,liulangjianke.png,zsc_liulangjianke.mp3,9
7 | 4,12020004,撼地神牛,0,1,1,70,5,0,1,50,50,50,50,250,140,4750,2340,12,51,0,10,0,568,208,100,0,0,0,0,0,0,100,100,0,0,5,0,100301,1,104501,6,0,10,10,handishenniu.png,zsc_handishenniu.mp3,1
8 | 5,12020005,秀逗魔导师,1,1,1,70,5,0,1,50,50,50,50,320,150,2850,4160,11,49,0,6,0,492,312,100,0,0,0,0,0,0,100,100,0,0,5,0,100401,1,104601,6,0,10,10,xiudoumodaoshi.png,zsc_xiudoumodaoshi.mp3,1
9 | 6,12020006,暗影萨满,1,1,1,70,5,0,1,50,50,50,50,300,160,3040,3900,9,50,0,7,0,511,273,100,0,0,0,0,0,0,100,100,0,0,5,0,100501,1,104701,6,0,10,10,anyingsaman.png,zsc_anyingsaman.mp3,5
10 | 7,12020007,刚背兽,0,1,1,70,5,0,1,50,50,50,50,220,180,4180,3640,11,57,0,17,0,568,182,100,0,0,0,0,0,0,100,100,0,0,5,0,100601,1,104801,6,0,10,10,gangbeishou.png,zsc_gangbeishou.mp3,9
11 | 8,12020008,半人马酋长,0,1,1,70,5,0,1,50,50,50,50,380,200,7220,2080,12,56,0,16,0,587,195,100,0,0,0,0,0,0,100,100,0,0,5,0,100701,1,104901,6,0,10,10,banrenmaqiuzhang.png,zsc_banrenmaqiuzhang.mp3,1
12 | 9,12020009,龙骑士,0,1,1,70,5,0,1,50,50,50,50,280,220,5320,2210,10,49,0,18,0,511,195,100,0,0,0,0,0,0,100,100,0,0,5,0,100801,1,105001,6,0,10,10,longqishi.png,zsc_longqishi.mp3,5
13 | 10,12020010,敌法师,0,1,1,70,5,0,1,50,50,50,50,280,280,2280,2340,15,51,0,10,0,530,195,100,0,0,0,0,0,0,100,100,0,0,5,0,100901,1,105101,6,0,10,10,difashi.png,zsc_difashi.mp3,9
14 | 11,12020011,黑暗游侠,1,1,1,70,5,0,1,50,50,50,50,190,190,3610,1820,15,50,0,15,0,473,195,100,0,0,0,0,0,0,100,100,0,0,5,0,101001,1,105201,6,0,10,10,heianyouxia.png,zsc_heianyouxia.mp3,9
15 | 12,12020012,全能骑士,0,1,1,70,5,0,1,50,50,50,50,265,175,5035,2340,13,56,0,20,0,530,221,100,0,0,0,0,0,0,100,100,0,0,5,0,101101,1,105301,6,0,10,10,quannengqishi.png,zsc_quannengshiqi.mp3,5
16 | 13,12020013,光之守卫,1,1,1,70,5,0,1,50,50,50,50,280,160,3420,3640,15,46,0,6,0,454,286,100,0,0,0,0,0,0,100,100,0,0,5,0,101201,1,105401,6,0,10,10,guangzhishouwei.png,zsc_guangzhishouwei.mp3,5
17 | 14,12020014,熊战士,0,1,1,70,5,0,1,50,50,50,50,210,210,5510,1950,14,47,0,30,0,587,208,100,0,0,0,0,0,0,100,100,0,0,5,0,101301,1,105501,6,0,10,10,xiongzhanshi.png,zsc_xiongzhanshi.mp3,9
18 | 15,12020015,食人魔法师,0,1,1,70,5,0,1,50,50,50,50,240,160,6080,3120,11,61,0,30,0,587,221,100,0,0,0,0,0,0,100,100,0,0,5,0,101401,1,105601,6,0,10,10,shirenmofashi.png,zsc_shirenmofashi.mp3,5
19 | 16,12020016,山岭巨人,0,1,1,70,5,0,1,50,50,50,50,300,90,5700,2080,9,64,0,1,0,606,182,100,0,0,0,0,0,0,100,100,0,0,5,0,101501,1,105701,6,0,10,10,shanlingjuren.png,zsc_shanlingjuren.mp3,1
20 | 17,12020017,圣骑士,1,1,1,70,5,0,1,50,50,50,50,280,210,2850,3640,12,48,0,6,0,530,273,100,0,0,0,0,0,0,100,100,0,0,5,0,101601,1,105801,6,0,10,10,shengqishi.png,zsc_shengqishi.mp3,9
21 | 18,12020018,兽王,0,1,1,70,5,0,1,50,50,50,50,220,160,4180,2470,14,58,0,23,0,587,208,100,0,0,0,0,0,0,100,100,0,0,5,0,101701,1,105901,6,0,10,10,shouwang.png,zsc_shouwang.mp3,5
22 | 19,12020019,双头龙,1,1,1,70,5,0,1,50,50,50,50,280,120,4370,3640,10,50,0,12,0,606,364,100,0,0,0,0,0,0,100,100,0,0,5,0,101801,1,106001,6,0,10,10,shuangtoulong.png,zsc_shuangtoulong.mp3,5
23 | 20,12020020,月亮女祭司,1,1,1,70,5,0,1,50,50,50,50,275,275,3515,2145,12,43,0,10,0,473,221,100,0,0,0,0,0,0,100,100,0,0,5,0,101901,1,106101,6,0,10,10,yueliangnvjishi.png,zsc_yueliangnvjisi.mp3,1
24 | 21,12020021,暗夜魔王,0,1,1,70,5,0,1,50,50,50,50,280,225,5320,2080,11,59,0,28,0,587,208,100,0,0,0,0,0,0,100,100,0,0,5,0,102001,1,106201,6,0,10,10,anyemowang.png,zsc_anyemowang.mp3,5
25 | 22,12020022,骷髅王,0,1,1,70,5,0,1,50,50,50,50,290,170,5510,2080,12,55,0,18,0,568,169,100,0,0,0,0,0,0,100,100,0,0,5,0,102101,1,106301,6,0,10,10,kulouwang.png,zsc_kulouwang.mp3,9
26 | 23,12020023,地穴刺客,0,1,1,70,5,0,1,50,50,50,50,220,220,3800,2730,12,51,0,18,0,492,234,100,0,0,0,0,0,0,100,100,0,0,5,0,102201,1,106401,6,0,10,10,dixuecike.png,zsc_dixuecike.mp3,5
27 | 24,12020024,鱼人守卫,0,1,1,70,5,0,1,50,50,50,50,280,240,5320,1950,12,55,0,27,0,549,195,100,0,0,0,0,0,0,100,100,0,0,5,0,102301,1,106501,6,0,10,10,yurenshouwei.png,zsc_yurenshouwei.mp3,9
28 | 25,12020025,痛苦女王,1,1,1,70,5,0,1,50,50,50,50,250,200,3230,3250,12,49,0,8,0,454,312,100,0,0,0,0,0,0,100,100,0,0,5,0,102401,1,106601,6,0,10,10,tongkunvwang.png,zsc_tongkunvwang.mp3,1
29 | 26,12020026,虚空假面,0,1,1,70,5,0,1,50,50,50,50,270,270,3040,1950,15,61,0,20,0,587,195,100,0,0,0,0,0,0,100,100,0,0,5,0,102501,1,106701,6,0,10,10,xukongjiamian.png,zsc_xukongjiamian.mp3,9
30 | 27,12020027,冥界亚龙,1,1,1,70,5,0,1,50,50,50,50,250,250,3610,2340,9,45,0,10,0,473,195,100,0,0,0,0,0,0,100,100,0,0,5,0,102601,1,106801,6,0,10,10,mingjieyalong.png,zsc_mingjieyalong.mp3,5
31 | 28,12020028,受折磨的灵魂,1,1,1,70,5,0,1,50,50,50,50,300,170,2850,3900,15,47,0,15,0,454,338,100,0,0,0,0,0,0,100,100,0,0,5,0,102701,1,106901,6,0,10,10,shouzhemodelinghun.png,zsc_shouzhemodelinghun.mp3,1
32 | 29,12020029,巫妖,1,1,1,70,5,0,1,50,50,50,50,325,200,2945,4225,15,46,0,5,0,492,234,100,0,0,0,0,0,0,100,100,0,0,5,0,102801,1,107001,6,0,10,10,wuyao.png,zsc_wuyao.mp3,5
33 | 30,12020030,恶魔巫师,1,1,1,70,5,0,1,50,50,50,50,300,150,3230,3900,10,45,0,6,0,454,286,100,0,0,0,0,0,0,100,100,0,0,5,0,102901,1,107101,6,0,10,10,emowushi.png,zsc_emowushi.mp3,5
34 | 31,12020031,剧毒术士,1,1,1,70,5,0,1,50,50,50,50,260,260,3515,2275,10,47,0,16,0,492,195,100,0,0,0,0,0,0,100,100,0,0,5,0,103001,1,107201,6,0,10,10,judushushi.png,zsc_judushushi.mp3,5
35 | 32,12020032,半人猛犸,0,1,1,70,5,0,1,50,50,50,50,275,250,5225,2145,15,55,0,21,0,549,221,100,0,0,0,0,0,0,100,100,0,0,5,0,103101,1,107301,6,0,10,10,banrenmengma.png,zsc_banrenmengma.mp3,9
36 | 33,12020033,混沌骑士,0,1,1,70,5,0,1,50,50,50,50,290,210,5510,1560,15,64,0,20,0,530,208,100,0,0,0,0,0,0,100,100,0,0,5,0,103201,1,107401,6,0,10,10,hundunqishi.png,zsc_hundunqishi.mp3,9
37 | 34,12020034,幻影刺客,0,1,1,70,5,0,1,50,50,50,50,315,315,3895,1300,15,47,0,17,0,473,169,100,0,0,0,0,0,0,100,100,0,0,5,0,103301,1,107501,6,0,10,10,huanyingcike.png,zsc_huanyingcike.mp3,9
38 | 35,12020035,遗忘法师,1,1,1,70,5,0,1,50,50,50,50,400,100,2280,5200,15,49,0,7,0,473,338,100,0,0,0,0,0,0,100,100,0,0,5,0,103401,1,107601,6,0,10,10,yiwangfashi.png,zsc_yiwangfashi.mp3,9
39 | 36,12020036,潮汐猎人,0,1,1,70,5,0,1,50,50,50,50,300,150,5700,2210,14,50,0,17,0,568,208,100,0,0,0,0,0,0,100,100,0,0,5,0,103501,1,107701,6,0,10,10,chaoxilieren.png,zsc_chaoxilieren.mp3,5
40 | 37,12020037,沙王,0,1,1,70,5,0,1,50,50,50,50,260,210,4940,2340,12,51,0,13,0,492,208,100,0,0,0,0,0,0,100,100,0,0,5,0,103601,1,107801,6,0,10,10,shawang.png,zsc_shawang.mp3,1
41 | 38,12020038,斧王,0,1,1,70,5,0,1,50,50,50,50,250,220,4750,2080,10,51,0,9,0,625,234,100,0,0,0,0,0,0,100,100,0,0,5,0,103701,1,107901,6,0,10,10,fuwang.png,zsc_fuwang.mp3,5
42 | 39,12020039,黑曜毁灭者,1,1,1,70,5,0,1,50,50,50,50,330,200,3515,4290,12,57,0,21,0,511,338,100,0,0,0,0,0,0,100,100,0,0,5,0,103801,1,108001,6,0,10,10,heiyaoshihuimiezhe.png,zsc_heiyaohuimiezhe.mp3,5
43 | 40,12020040,暗影牧师,1,1,1,70,5,0,1,50,50,50,50,340,170,3515,4420,13,50,0,10,0,454,351,100,0,0,0,0,0,0,100,100,0,0,5,0,103901,1,108101,6,0,10,10,anyingmushi.png,zsc_anyingmushi.mp3,5
44 | 41,12020041,深渊领主,0,1,1,70,5,0,1,50,50,50,50,260,130,4940,3380,13,65,0,18,0,625,221,100,0,0,0,0,0,0,100,100,0,0,5,0,104001,1,108201,6,0,10,10,shenyuanlingzhu.png,zsc_shenyuanlingzhu.mp3,5
45 | 42,12020042,黑暗贤者,0,1,1,70,5,0,1,50,50,50,50,270,120,4370,3510,13,63,0,30,0,568,377,100,0,0,0,0,0,0,100,100,0,0,5,0,104101,1,108301,6,0,10,10,heianxianzhe.png,zsc_heianxianzhe.mp3,5
46 | 43,12020043,风行者,1,1,1,70,5,0,1,50,50,50,50,260,140,4750,3380,11,51,0,5,0,435,286,100,0,0,0,0,0,0,100,100,0,0,5,0,112001,1,112501,6,0,10,10,fengxingzhe.png,zsc_fengxingzhe.mp3,1
47 | 44,12020044,影魔,1,1,1,70,5,0,1,50,50,50,50,290,290,3800,2600,15,38,0,10,0,435,234,100,0,0,0,0,0,0,100,100,0,0,5,0,112101,1,112601,6,0,10,10,yingmo.png,zsc_yingmo.mp3,1
48 | 45,12020045,痛苦之源,1,1,1,70,5,0,1,50,50,50,50,210,210,3990,2730,15,54,0,18,0,568,286,100,0,0,0,0,0,0,100,100,0,0,5,0,112201,1,112701,6,0,10,10,tongkuzhiyuan.png,zsc_tongkuzhiyuan.mp3,5
49 | 46,12020046,船长,0,1,1,70,5,0,1,50,50,50,50,300,130,5700,1950,12,55,0,15,0,549,208,100,0,0,0,0,0,0,100,100,0,0,5,0,112301,1,112801,6,0,10,10,chuanzhang.png,zsc_chuanzhang.mp3,1
50 | 47,12020047,复仇之魂,1,1,1,70,5,0,1,50,50,50,50,280,280,4370,2275,11,46,0,16,0,454,195,100,0,0,0,0,0,0,100,100,0,0,5,0,112401,1,112901,6,0,10,10,fuchouzhihun.png,zsc_fuchouzhihun.mp3,5
51 | #伐木场,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
52 | 1001,-1,1级伐木场英雄,1,1,1,70,5,0,1,50,50,50,50,270,110,3420,3510,11,100,0,20,0,2000,260,100,0,0,0,0,0,0,100,100,0,0,5,0,500001,1,-1,6,0,10,10,famuchang.png,zsc_zhousi.mp3,100
53 | 1002,-1,2级伐木场英雄,1,1,1,70,5,0,1,50,50,50,50,270,110,3420,3510,11,200,0,40,0,3000,260,100,0,0,0,0,0,0,100,100,5,5,5,0,500002,1,-1,6,0,10,10,famuchang.png,zsc_zhousi.mp3,100
54 | 1003,-1,3级伐木场英雄,1,2,1,70,5,0,1,50,50,50,50,270,110,3420,3510,11,500,0,60,0,5000,260,100,0,0,0,0,0,0,100,100,10,10,5,0,500003,1,-1,6,0,10,10,famuchang.png,zsc_zhousi.mp3,100
55 | 1004,-1,4级伐木场英雄,1,2,1,70,5,0,1,50,50,50,50,270,110,3420,3510,11,1000,0,100,0,10000,260,100,0,0,0,0,0,0,100,100,15,15,5,0,500004,1,-1,6,0,10,10,famuchang.png,zsc_zhousi.mp3,100
56 | 1005,-1,5级伐木场英雄,1,3,1,70,5,0,1,50,50,50,50,270,110,3420,3510,11,1500,0,200,0,20000,260,100,0,0,0,0,0,0,100,100,20,20,5,0,500005,1,-1,6,0,10,10,famuchang.png,zsc_zhousi.mp3,100
57 | 1006,-1,6级伐木场英雄,1,3,1,70,5,0,1,50,50,50,50,270,110,3420,3510,11,2000,0,300,0,30000,260,100,0,0,0,0,0,0,100,100,25,25,5,0,500006,1,-1,6,0,10,10,famuchang.png,zsc_zhousi.mp3,100
58 | 1007,-1,7级伐木场英雄,1,4,1,70,5,0,1,50,50,50,50,270,110,3420,3510,11,2500,0,600,0,40000,260,100,0,0,0,0,0,0,100,100,30,30,5,0,500007,1,-1,6,0,10,10,famuchang.png,zsc_zhousi.mp3,100
59 | 1008,-1,8级伐木场英雄,1,4,1,70,5,0,1,50,50,50,50,270,110,3420,3510,11,3000,0,900,0,50000,260,100,0,0,0,0,0,0,100,100,35,35,5,0,500008,1,-1,6,0,10,10,famuchang.png,zsc_zhousi.mp3,100
60 | 1009,-1,9级伐木场英雄,1,5,1,70,5,0,1,50,50,50,50,270,110,3420,3510,11,3500,0,1200,0,60000,260,100,0,0,0,0,0,0,100,100,40,40,5,0,500009,1,-1,6,0,10,10,famuchang.png,zsc_zhousi.mp3,100
61 | 1010,-1,10级伐木场英雄,1,5,1,70,5,0,1,50,50,50,50,270,110,3420,3510,11,4000,0,1500,0,70000,260,100,0,0,0,0,0,0,100,100,45,45,5,0,500010,1,-1,6,0,10,10,famuchang.png,zsc_zhousi.mp3,100
62 | #女神,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
63 | 2001,-1,苍老师,1,5,1,70,5,0,1,50,50,50,50,270,110,3420,3510,11,1000,0,100,0,10000,260,100,0,0,0,0,0,0,100,100,15,15,5,0,600001,1,600002,1,0,10,10,canglaoshi.png,zsc_zhousi.mp3,100
64 | 2002,-1,龙泽MM,1,5,1,70,5,0,1,50,50,50,50,270,110,3420,3510,11,1000,0,100,0,10000,260,100,0,0,0,0,0,0,100,100,15,15,5,0,600003,1,600004,1,0,10,10,longze.png,zsc_zhousi.mp3,100
65 | 2003,-1,小泽女王,1,5,1,70,5,0,1,50,50,50,50,270,110,3420,3510,11,1000,0,100,0,10000,260,100,0,0,0,0,0,0,100,100,15,15,5,0,600005,1,600006,1,0,10,10,xiaozenvwang.png,zsc_zhousi.mp3,100
66 | 2004,-1,波多女神,1,5,1,70,5,0,1,50,50,50,50,270,110,3420,3510,11,1000,0,100,0,10000,260,100,0,0,0,0,0,0,100,100,15,15,5,0,600007,1,600008,1,0,10,10,boduonvshen.png,zsc_zhousi.mp3,100
67 | 2005,-1,拓也君,1,5,1,70,5,0,1,50,50,50,50,270,110,3420,3510,11,1000,0,100,0,10000,260,100,0,0,0,0,0,0,100,100,15,15,5,0,600009,1,600010,1,0,10,10,tuoyejun.png,zsc_zhousi.mp3,100
68 |
--------------------------------------------------------------------------------
/GameStruct.go:
--------------------------------------------------------------------------------
1 | package GameFight
2 |
3 | import (
4 | "fmt"
5 | )
6 |
7 | type FightDBData struct {
8 | Guid X_GUID //对象guid
9 | TableID int //表格id
10 | Type int //英雄出处
11 | Quality int //品质
12 | MatrixID int //阵法Id
13 | Profession int //职业 0近战 1远程
14 | Level int //等级
15 | HP int //血量
16 | Mp int //魔法值
17 | SkillCount int //技能数量
18 | Skill [MaxSkillNum]int //技能列表
19 | EquipSkillCount int //装备技能数量
20 | EquipSkill [MaxEquipNumPerHero]int //装备技能李彪
21 |
22 | //战斗属性
23 | PhysicAttack int //物理攻击
24 | MagicAttack int //魔法攻击
25 | PhysicDefence int //物理防御
26 | MagicDefence int //魔法防御
27 | MaxHP int //最大生命
28 | MaxMP int //最大魔法值
29 | Hit int //命中值
30 | Dodge int //闪避值
31 | Strike int //暴击值
32 | StrikeHurt int //暴击伤害
33 | Continuous int //连击值
34 | ConAttHurt int //连击伤害
35 | ConAttTimes int //连击次数
36 | BackAttack int //反击值
37 | BackAttHurt int //反击伤害
38 | AttackSpeed int //攻击速度
39 | PhysicHurtDecay int //物理减免
40 | MagicHurtDecay int //魔法减免
41 |
42 | Exp int //经验值
43 | GrowRate int //成长
44 | BearPoint int //负重
45 | Equip [MaxEquipNumPerHero]int //装备id
46 | Color int //颜色
47 | }
48 |
49 | func (f *FightDBData) CleanUp() {
50 | f.Guid = InvalidId
51 | for i := 0; i < MaxEquipNumPerHero; i++ {
52 | f.Equip[i] = InvalidId
53 | }
54 | }
55 |
56 | func (f *FightDBData) IsValid() bool {
57 | if f.Guid == 0 {
58 | return false
59 | }
60 | return f.Guid.IsValid()
61 | }
62 |
63 | type FightDB struct {
64 | HumanGuid X_GUID //玩家Guid
65 | FightCount int
66 | FightDBData [MaxMatrixCellCount]FightDBData
67 | }
68 |
69 | func (f *FightDB) CleanUp() {
70 | f.HumanGuid = InvalidId
71 | f.FightCount = 0
72 | }
73 |
74 | func (f *FightDB) IsValid() bool {
75 | return f.HumanGuid.IsValid()
76 | }
77 |
78 | func (f *FightDB) AddFightDBData(data FightDBData) {
79 | if f.FightCount >= 0 && f.FightCount < MaxMatrixCellCount {
80 | f.FightDBData[f.FightCount] = data
81 | f.FightCount += 1
82 | }
83 | }
84 |
85 | //impact信息
86 | type ImpactInfo struct {
87 | SkillID int
88 | ImpactID int
89 | TargetList [MaxMatrixCellCount]X_GUID
90 | TargetCount int
91 | ConAttTimes int
92 | Hurts [MaxMatrixCellCount][MaxConAttackTimes]int
93 | Mp [MaxMatrixCellCount]int //本次技能带给的魔法量变化 >0 减蓝 < 0 加蓝
94 | }
95 |
96 | func (impact ImpactInfo) String() string {
97 | return fmt.Sprintf("技能:%+v, impactId: %+v, 目标列表:%+v,伤害:%+v,ConAttTimes:%+v,Mp:%+v \n",
98 | impact.SkillID, impact.ImpactID, impact.TargetList, impact.Hurts, impact.ConAttTimes, impact.Mp)
99 | }
100 |
101 | func (impact ImpactInfo) GetTargetIndex(targetGuid X_GUID) int {
102 | if !targetGuid.IsValid() {
103 | return InvalidId
104 | }
105 | for i := 0; i < impact.TargetCount; i++ {
106 | if impact.TargetList[i] == targetGuid {
107 | return i
108 | }
109 | }
110 | return InvalidId
111 | }
112 |
113 | type AttributeEffect struct {
114 | AttrValue int
115 | }
116 |
117 | //技能信息
118 | type SkillAttack struct {
119 | SkillID int //技能ID
120 | SkillTarget X_GUID //技能目标
121 | CostMp int //消耗魔法量
122 | Impact [MaxSkillImpactCount]*ImpactInfo //impact列数
123 | ImpactCount int //impact个数
124 | }
125 |
126 | func (s *SkillAttack) String() string {
127 | impactString := ""
128 | for i := 0; i < s.ImpactCount; i++ {
129 | impactString += s.Impact[i].String()
130 | }
131 | return fmt.Sprintf("技能:%+v 命中目标%+v, Impact数量%+v\n, Impact信息:%+v", s.SkillID, s.SkillTarget, s.ImpactCount, impactString)
132 | }
133 | func (s *SkillAttack) AddImpactInfo(info *ImpactInfo) {
134 | s.Impact[s.ImpactCount] = info
135 | s.ImpactCount += 1
136 | }
137 |
138 | func (s SkillAttack) GetImpactInfo(impactId int) *ImpactInfo {
139 | for i := 0; i < MaxSkillImpactCount; i++ {
140 | if s.Impact[i].ImpactID == impactId {
141 | return s.Impact[i]
142 | }
143 | }
144 | return nil
145 | }
146 | func (s SkillAttack) IsValid() bool {
147 | return s.SkillID > 0
148 | }
149 |
150 | //出手信息
151 | type AttackInfo struct {
152 | CastGuid X_GUID //对象guid
153 | Skilled bool //魔法攻击还是普通攻击
154 | //魔法攻击
155 | SkillAttack [MaxEquipNumPerHero]*SkillAttack //如果是普通攻击先进行装备技能攻击
156 | SkillAttackCount int
157 | //普通攻击
158 | SkillTarget X_GUID //普通攻击目标
159 | BHit bool //是否命中
160 | BStrike bool //是否暴击
161 | Hurt int //伤害值
162 | BBackAttack bool //是否有反击
163 | BackAttackHurt int //反击伤害
164 | }
165 |
166 | func (c AttackInfo) String() string {
167 | skillAttackString := ""
168 | for i := 0; i < c.SkillAttackCount; i++ {
169 | skillAttackString += c.SkillAttack[i].String()
170 | }
171 | return fmt.Sprintf("攻击方英雄id: %+v 防守方英雄id: %+v, \n"+
172 | "是否使用了技能攻击 %+v,"+
173 | "是否命中:%+v,"+
174 | "是否暴击:%+v,\n"+
175 | "攻击伤害:%+v, "+
176 | "是否有反击:%+v, "+
177 | "反击伤害:%+v\n"+
178 | "技能攻击信息:%+v \n",
179 | c.CastGuid, c.SkillTarget, c.Skilled, c.BHit, c.BStrike, c.Hurt, c.BBackAttack, c.BackAttackHurt, skillAttackString)
180 | }
181 |
182 | func (c *AttackInfo) GetSkillAttack(SkillID int) *SkillAttack {
183 | for i := 0; i < c.SkillAttackCount; i++ {
184 | if c.SkillAttack[i].SkillID == SkillID {
185 | return c.SkillAttack[i]
186 | }
187 | }
188 | return nil
189 | }
190 | func (c AttackInfo) IsValid() bool {
191 | return c.CastGuid > 0
192 | }
193 |
194 | func (c *AttackInfo) CleanUp() {
195 | if c != nil {
196 | c.SkillAttackCount = 0
197 | c.CastGuid = InvalidId
198 | c.SkillTarget = InvalidId
199 | c.BHit = true
200 | }
201 | }
202 |
203 | func (c *AttackInfo) AllocSkillAttack() *SkillAttack {
204 | if c.SkillAttackCount >= MaxEquipNumPerHero {
205 | fmt.Println("超过最大携带数量")
206 | return nil
207 | }
208 | index := c.SkillAttackCount
209 | c.SkillAttackCount += 1
210 | c.SkillAttack[index] = new(SkillAttack)
211 | return c.SkillAttack[index]
212 | }
213 |
214 | //下发战斗信息
215 | type FObjectData struct {
216 | Guid X_GUID //对象guid
217 | TableID int //英雄表格id
218 | Quality int //品质
219 | Color int //颜色
220 | Profession int //职业
221 | Level int //等级
222 | MatrixID int //位置
223 | }
224 |
225 | func (f *FObjectData) CleanUp() {
226 | f.Guid = InvalidId
227 | }
228 |
229 | type FObjectInfo struct {
230 | Guid X_GUID //对象guid
231 | HP int //血量
232 | MaxHP int //最大血量
233 | MP int //魔法值
234 | MaxMP int //最大魔法
235 | FightDistance int //战斗条长度
236 | AttackSpeed int //速度
237 | EndDistance int //最后位置
238 | ImpactCount int
239 | ImpactList [MaxImpactNumber]int //身上impact
240 | ImpactHurt [MaxImpactNumber]int //持续impact伤害 + 掉血 - 加血
241 | ImpactMP [MaxImpactNumber]int //持续impact 蓝 + 掉蓝 - 加蓝
242 | }
243 |
244 | func (f *FObjectInfo) String() string {
245 | return fmt.Sprintf("英雄id: %+v 信息\n"+
246 | "HP:%+v MP:%+v MaxHP:%+v MaxMP:%+v \n"+
247 | "战斗条长度:%+v 速度:%+v 最后战斗条位置:%+v impact列表: %+v \n",
248 | f.Guid, f.HP, f.MP, f.MaxHP, f.MaxMP, f.FightDistance, f.AttackSpeed, f.EndDistance, f.ImpactList)
249 | }
250 |
251 | func (f *FObjectInfo) CleanUp() {
252 | f.Guid = InvalidId
253 | }
254 |
255 | func (f FObjectInfo) AddImpact(impactId int, hurt int, mp int) {
256 | f.ImpactList[f.ImpactCount] = impactId
257 | f.ImpactHurt[f.ImpactCount] = hurt
258 | f.ImpactMP[f.ImpactCount] = mp
259 | f.ImpactCount += 1
260 | }
261 |
262 | type FightRoundInfo struct {
263 | AttackObjectInfo [MaxMatrixCellCount]*FObjectInfo //本回合开始前状态数据
264 | AttackObjectCount int
265 |
266 | DefendObjectInfo [MaxMatrixCellCount]*FObjectInfo
267 | DefendObjectCount int
268 |
269 | AttackInfo [MaxMatrixCellCount * 2]AttackInfo //出手数据
270 | AttInfoCount int
271 | }
272 |
273 | func (f *FightRoundInfo) String() string {
274 |
275 | var s string = "攻击方信息:\n"
276 | for i := 0; i < f.AttackObjectCount; i++ {
277 | s += f.AttackObjectInfo[i].String() + ""
278 | }
279 | s += "防守方信息:\n"
280 | for i := 0; i < f.DefendObjectCount; i++ {
281 | s += f.DefendObjectInfo[i].String() + ""
282 | }
283 | s += "攻击信息\n"
284 | for i := 0; i < f.AttInfoCount; i++ {
285 | s += f.AttackInfo[i].String() + ""
286 | }
287 | return s
288 | }
289 |
290 | func (f *FightRoundInfo) CleanUp() {
291 | for i := 0; i < MaxMatrixCellCount; i++ {
292 | if f.AttackObjectInfo[i] != nil && f.DefendObjectInfo[i] != nil {
293 | f.AttackObjectInfo[i].CleanUp()
294 | f.DefendObjectInfo[i].CleanUp()
295 | f.AttackInfo[i].CleanUp()
296 | f.AttackInfo[i+MaxMatrixCellCount].CleanUp()
297 | }
298 | }
299 | f.AttackObjectCount = 0
300 | f.DefendObjectCount = 0
301 | f.AttInfoCount = 0
302 | }
303 |
304 | func (f *FightRoundInfo) AddAttackObjectInfo(objInfo *FObjectInfo) {
305 | f.AttackObjectInfo[f.AttackObjectCount] = objInfo
306 | f.AttackObjectCount += 1
307 | }
308 |
309 | func (f *FightRoundInfo) AddDefendObjectInfo(objInfo *FObjectInfo) {
310 | f.DefendObjectInfo[f.DefendObjectCount] = objInfo
311 | f.DefendObjectCount += 1
312 | }
313 |
314 | func (f *FightRoundInfo) AddAttackInfo(attackInfo AttackInfo) {
315 | f.AttackInfo[f.AttInfoCount] = attackInfo
316 | f.AttInfoCount++
317 | }
318 |
319 | func (f *FightRoundInfo) GetFObjectInfoByGuid(guid X_GUID) *FObjectInfo {
320 | if !guid.IsValid() {
321 | return nil
322 | }
323 | for i := 0; i < f.AttackObjectCount; i++ {
324 | if f.AttackObjectInfo[i].Guid == guid {
325 | return f.AttackObjectInfo[i]
326 | }
327 | }
328 | for i := 0; i < f.DefendObjectCount; i++ {
329 | if f.DefendObjectInfo[i].Guid == guid {
330 | return f.DefendObjectInfo[i]
331 | }
332 | }
333 | return nil
334 | }
335 |
336 | type FightInfo struct {
337 | AttackObjectData [MaxMatrixCellCount]FObjectData //攻击方
338 | AttackObjCount int //攻击方数量
339 | DefendObjectData [MaxMatrixCellCount]FObjectData //防守方
340 | DefendObjectCount int //防守方数量
341 | DefendType int //防守方类型 0 怪物 1人
342 |
343 | RoundInfo [MAX_FIGHT_ROUND]FightRoundInfo //每回合的战斗信息
344 | Rounds int //总回合
345 |
346 | MaxFightDistance int //战斗条长度
347 | BWin bool //挑战者是否胜利
348 | }
349 |
350 | func (f *FightInfo) CleanUp() {
351 | for i := 0; i < MaxMatrixCellCount; i++ {
352 | f.AttackObjectData[i].CleanUp()
353 | f.DefendObjectData[i].CleanUp()
354 | }
355 | for i := 0; i < MAX_FIGHT_ROUND; i++ {
356 | f.RoundInfo[i].CleanUp()
357 | }
358 | f.Rounds = 0
359 | f.AttackObjCount = 0
360 | f.DefendObjectCount = 0
361 | f.MaxFightDistance = 0
362 | f.BWin = false
363 | f.DefendType = 0
364 | }
365 |
366 | func (f *FightInfo) AddAttackObjectData(data FObjectData) {
367 | f.AttackObjectData[f.AttackObjCount] = data
368 | f.AttackObjCount += 1
369 | }
370 |
371 | func (f *FightInfo) AddDefendObjectData(data FObjectData) {
372 | f.DefendObjectData[f.DefendObjectCount] = data
373 | f.DefendObjectCount += 1
374 | }
375 |
376 | func (f *FightInfo) AddRoundInfo(roundInfo FightRoundInfo) {
377 | f.RoundInfo[f.Rounds] = roundInfo
378 | f.Rounds++
379 | }
380 |
381 | func (f *FightInfo) SetWin(Win bool) {
382 | f.BWin = Win
383 | }
384 |
385 | func (f *FightInfo) GetTableIDByGuid(guid X_GUID) int {
386 | if guid.IsValid() {
387 | return InvalidId
388 | }
389 | for i := 0; i < f.AttackObjCount; i++ {
390 | if f.AttackObjectData[i].Guid == guid {
391 | return f.AttackObjectData[i].TableID
392 | }
393 | }
394 | for i := 0; i < f.DefendObjectCount; i++ {
395 | if f.DefendObjectData[i].Guid == guid {
396 | return f.DefendObjectData[i].TableID
397 | }
398 | }
399 | return InvalidId
400 | }
401 |
402 | type TargetList struct {
403 | pObjectList [MaxMatrixCellCount]*FightObject
404 | nCount int
405 | }
406 |
407 | func (t *TargetList) CleanUp() {
408 | t.nCount = 0
409 | }
410 |
411 | func (t *TargetList) GetCount() int {
412 | return t.nCount
413 | }
414 |
415 | func (t *TargetList) GetFightObject(index int) *FightObject {
416 | if index >= 0 && index < t.nCount {
417 | return t.pObjectList[index]
418 | }
419 | return nil
420 | }
421 |
422 | func (t *TargetList) Add(pObject *FightObject) bool {
423 | if pObject == nil || t.nCount >= MaxMatrixCellCount {
424 | return false
425 | }
426 | t.pObjectList[t.nCount] = pObject
427 | t.nCount++
428 | return true
429 | }
430 |
--------------------------------------------------------------------------------
/FightObject.go:
--------------------------------------------------------------------------------
1 | package GameFight
2 |
3 | import (
4 | "errors"
5 | "math/rand"
6 | )
7 |
8 | type FightObject struct {
9 | FightDBData FightDBData
10 | bAttacker bool //是否为攻击方
11 | pFightCell *FightCell //战斗单元
12 | skillList [MaxSkillNum]Skill //主动技能列表
13 | commonKill Skill //普通攻击
14 | equipSkillCount int
15 | equipSkillList [MaxEquipNumPerHero]Skill //装备技能
16 | impactList [MaxImpactNumber]Impact //buff列表
17 | impactEffect [EmAttributeNumber]AttributeEffect //技能影响
18 | fightDistance int //战斗条长度
19 | attackInfo *AttackInfo //出手信息
20 | }
21 |
22 | func (f *FightObject) CleanUp() {
23 | f.FightDBData.CleanUp()
24 | for i := 0; i < MaxSkillNum; i++ {
25 | f.skillList[i].CleanUp()
26 | }
27 | for i := 0; i < MaxImpactNumber; i++ {
28 | f.impactList[i].CleanUp()
29 | }
30 | for i := 0; i < int(EmAttributeNumber); i++ {
31 | f.impactEffect[i].AttrValue = 0
32 | }
33 | f.commonKill.CleanUp()
34 | f.fightDistance = 0
35 | }
36 |
37 | func (f *FightObject) HeartBeat(uTime int) bool {
38 | //清空上回合的战斗信息
39 | f.attackInfo.CleanUp()
40 | //该回合自己的英雄信息
41 | pFightCell := f.GetFightCell()
42 | pRoundInfo := pFightCell.GetRoundInfo()
43 | pFObjectInfo := pRoundInfo.GetFObjectInfoByGuid(f.GetGuid())
44 |
45 | if pFObjectInfo != nil {
46 | pFObjectInfo.AttackSpeed = f.GetAttackSpeed()
47 | }
48 |
49 | if !f.IsActive() {
50 | return true
51 | }
52 | if uTime == 1 {
53 | //被动技能
54 | f.CastPassiveSkill(uTime)
55 | }
56 | pEnemyList := f.GetEnemyList()
57 | if pEnemyList.GetActiveCount() == 0 {
58 | return true
59 | }
60 |
61 | f.fightDistance += f.GetAttackSpeed()
62 | nDistance := Distance
63 | if f.fightDistance >= nDistance {
64 | f.fightDistance = 0
65 |
66 | bRet := f.SkillHeartBeat(uTime)
67 | //fmt.Println("释放技能", bRet)
68 | if !bRet {
69 | bRet = f.CastCommonSkill(uTime)
70 | }
71 | }
72 | //fmt.Printf("英雄: %+v 战斗条:%+v 是否触发攻击:%+v \n", f.GetGuid(), f.fightDistance, f.fightDistance >= nDistance)
73 |
74 | if pFObjectInfo != nil {
75 | pFObjectInfo.EndDistance = f.fightDistance
76 | if pFObjectInfo.MaxHP < f.GetMaxHP() {
77 | pFObjectInfo.MaxHP = f.GetMaxHP()
78 | }
79 | if pFObjectInfo.MaxMP < f.GetMaxMP() {
80 | pFObjectInfo.MaxMP = f.GetMaxMP()
81 | }
82 | //fmt.Println(pFObjectInfo.String())
83 | }
84 | return true
85 | }
86 |
87 | func (f FightObject) GetGuid() X_GUID {
88 | return f.FightDBData.Guid
89 | }
90 | func (f FightObject) GetMatrixID() int {
91 | return f.FightDBData.MatrixID
92 | }
93 | func (f *FightObject) SetMatrixID(index int) {
94 | f.FightDBData.MatrixID = index
95 | }
96 | func (f FightObject) GetTableID() int {
97 | return f.FightDBData.TableID
98 | }
99 | func (f FightObject) GetQuality() int {
100 | return f.FightDBData.Quality
101 | }
102 | func (f FightObject) GetColor() int {
103 | return f.FightDBData.Color
104 | }
105 |
106 | func (f FightObject) GetProfession() int {
107 | return f.FightDBData.Profession
108 | }
109 | func (f FightObject) GetFightDistance() int {
110 | return f.fightDistance
111 | }
112 | func (f FightObject) GetLevel() int {
113 | return f.FightDBData.Level
114 | }
115 | func (f *FightObject) InitFightDBData(fightDBData FightDBData) bool {
116 | f.FightDBData = fightDBData
117 | return true
118 | }
119 |
120 | func (f *FightObject) InitSkill() bool {
121 | for i := 0; i < f.FightDBData.SkillCount; i++ {
122 | if f.FightDBData.Skill[i] > 0 {
123 | bret := f.skillList[i].Init(f.FightDBData.Skill[i], f)
124 | if bret == false {
125 | return bret
126 | }
127 | }
128 | }
129 | f.equipSkillCount = f.FightDBData.EquipSkillCount
130 | for i := 0; i < f.equipSkillCount; i++ {
131 | if f.FightDBData.EquipSkill[i] > 0 {
132 | bret := f.equipSkillList[i].Init(f.FightDBData.EquipSkill[i], f)
133 | if bret == false {
134 | return bret
135 | }
136 | }
137 | }
138 | bret := f.commonKill.Init(f.FightDBData.Profession, f)
139 | if bret == false {
140 | return bret
141 | }
142 | return true
143 | }
144 |
145 | func (f *FightObject) GetMaxHP() int {
146 | nEffectValue := f.impactEffect[EmAttributeMaxHp].AttrValue
147 | nEffectValue += int(f.FightDBData.MaxHP * f.impactEffect[EmAttributePercentMaxHp].AttrValue / 100)
148 | nEndValue := f.FightDBData.MaxHP + nEffectValue
149 | nEndValue = ChkMin(nEndValue, 0)
150 | return nEndValue
151 | }
152 |
153 | func (f *FightObject) GetMaxMP() int {
154 | nEffectValue := f.impactEffect[EmAttributeMaxMp].AttrValue
155 | nEffectValue += f.FightDBData.MaxMP * f.impactEffect[EmAttributeMaxMp].AttrValue
156 | nEndValue := f.FightDBData.MaxMP + nEffectValue
157 | nEndValue = ChkMin(nEndValue, 0)
158 | return nEndValue
159 | }
160 |
161 | func (f *FightObject) GetMP() int {
162 | nEffectValue := f.impactEffect[EmAttributeMp].AttrValue
163 | nEndValue := f.FightDBData.Mp + nEffectValue
164 | nMaxMP := f.GetMaxMP()
165 | if nEndValue > nMaxMP {
166 | nEndValue = nMaxMP
167 | }
168 | nEndValue = ChkMin(nEndValue, 0)
169 | f.impactEffect[EmAttributeMp].AttrValue = 0
170 | f.FightDBData.Mp = nEndValue
171 | return nEndValue
172 | }
173 |
174 | //技能条
175 | func (f *FightObject) GetAttackSpeed() int {
176 | nEffectValue := f.impactEffect[EmAttributeAttackSpeed].AttrValue
177 | nEffectValue += int(f.FightDBData.AttackSpeed * f.impactEffect[EmAttributePercentAttackSpeed].AttrValue / 100)
178 | nEndValue := f.FightDBData.AttackSpeed + nEffectValue
179 | nEndValue = ChkMin(nEndValue, 0)
180 | return nEndValue
181 | }
182 |
183 | func (f *FightObject) SetMP(nMP int) {
184 | nMaxMP := f.GetMaxMP()
185 | if nMP > nMaxMP {
186 | nMP = nMaxMP
187 | }
188 | if nMP < 0 {
189 | nMP = 0
190 | }
191 | f.FightDBData.Mp = nMP
192 | }
193 |
194 | func (f *FightObject) GetAttackInfo() *AttackInfo {
195 | if f.attackInfo == nil {
196 | f.attackInfo = new(AttackInfo)
197 | }
198 | return f.attackInfo
199 | }
200 |
201 | func (f *FightObject) GetFightCell() *FightCell {
202 | return f.pFightCell
203 | }
204 |
205 | func (f *FightObject) SetFightCell(cell *FightCell) {
206 | f.pFightCell = cell
207 | }
208 |
209 | func (f *FightObject) SetAttacker(bAttacker bool) {
210 | f.bAttacker = bAttacker
211 | }
212 | func (f *FightObject) IsAttacker() bool {
213 | return f.bAttacker
214 | }
215 | func (f *FightObject) GetImpactList() [MaxImpactNumber]Impact {
216 | return f.impactList
217 | }
218 |
219 | //物理攻击
220 | func (f *FightObject) GetPhysicAttack() int {
221 |
222 | nEffectValue := f.impactEffect[EmAttributePhysicAttack].AttrValue
223 | nEffectValue += int(f.FightDBData.PhysicAttack * f.impactEffect[EmAttributePercentPhysicAttack].AttrValue / 100)
224 |
225 | nEndValue := f.FightDBData.PhysicAttack + nEffectValue
226 | nEndValue = ChkMin(nEndValue, 0)
227 | return nEndValue
228 | }
229 |
230 | //魔法攻击
231 | func (f *FightObject) GetMagicAttack() int {
232 | nEffectValue := f.impactEffect[EmAttributeMagicAttack].AttrValue
233 | nEffectValue += int(f.FightDBData.MagicAttack * f.impactEffect[EmAttributePercentMagicAttack].AttrValue / 100)
234 | nEndValue := f.FightDBData.MagicAttack + nEffectValue
235 | nEndValue = ChkMin(nEndValue, 0)
236 | return nEndValue
237 | }
238 |
239 | //物理防御
240 | func (f *FightObject) GetPhysicDefend() int {
241 | nEffectValue := f.impactEffect[EmAttributePhysicDefence].AttrValue
242 | nEffectValue += int(f.FightDBData.PhysicDefence * f.impactEffect[EmAttributePercentPhysicDefence].AttrValue / 100)
243 | nEndValue := f.FightDBData.PhysicDefence + nEffectValue
244 | nEndValue = ChkMin(nEndValue, 0)
245 | return nEndValue
246 | }
247 |
248 | //魔法防御
249 | func (f *FightObject) GetMagicDefend() int {
250 | nEffectValue := f.impactEffect[EmAttributeMagicDefence].AttrValue
251 | nEffectValue += int(f.FightDBData.MagicDefence * f.impactEffect[EmAttributePercentMagicDefence].AttrValue / 100)
252 | nEndValue := f.FightDBData.MagicDefence + nEffectValue
253 | nEndValue = ChkMin(nEndValue, 0)
254 | return nEndValue
255 | }
256 |
257 | //物理减免
258 | func (f *FightObject) GetPhysicHurtDecay() int {
259 |
260 | nEffectValue := f.impactEffect[EmAttributePhysicHurtDecay].AttrValue
261 | nEffectValue += int(f.FightDBData.PhysicHurtDecay * f.impactEffect[EmAttributePhysicHurtDecay].AttrValue / 100)
262 | nEndValue := f.FightDBData.PhysicHurtDecay + nEffectValue
263 | nEndValue = ChkMin(nEndValue, 0)
264 | //TODO 读最大物理减免值
265 | return nEndValue
266 | }
267 |
268 | //物理减免
269 | func (f *FightObject) GetMagicHurtDecay() int {
270 |
271 | nEffectValue := f.impactEffect[EmAttributeMagicHurtDecay].AttrValue
272 | nEffectValue += int(f.FightDBData.MagicHurtDecay * f.impactEffect[EmAttributeMagicHurtDecay].AttrValue / 100)
273 | nEndValue := f.FightDBData.MagicHurtDecay + nEffectValue
274 | nEndValue = ChkMin(nEndValue, 0)
275 | //TODO 读最大魔法减免值
276 | return nEndValue
277 | }
278 |
279 | //命中率
280 | func (f *FightObject) GetHit() int {
281 | nEffectValue := f.impactEffect[EmAttributeHit].AttrValue
282 | nEndValue := f.FightDBData.Hit + nEffectValue
283 | nEndValue = ChkMin(nEndValue, 0)
284 | return nEndValue
285 | }
286 |
287 | //闪避点数
288 | func (f *FightObject) GetDodge() int {
289 | nEffectValue := f.impactEffect[EmAttributeDodge].AttrValue
290 | nEndValue := f.FightDBData.Dodge + nEffectValue
291 | nEndValue = ChkMin(nEndValue, 0)
292 | return nEndValue
293 | }
294 |
295 | //暴击率
296 | func (f *FightObject) GetStrike() int {
297 | nEffectValue := f.impactEffect[EmAttributeStrike].AttrValue
298 | nEndValue := f.FightDBData.Strike + nEffectValue
299 | nEndValue = ChkMin(nEndValue, 0)
300 | //TODO 读最大暴击率
301 | return nEndValue
302 | }
303 |
304 | //暴击伤害
305 | func (f *FightObject) GetStrikeHurt() int {
306 | nEffectValue := f.impactEffect[EmAttributeHurtStrike].AttrValue
307 | nEndValue := f.FightDBData.StrikeHurt + nEffectValue
308 | nEndValue = ChkMin(nEndValue, 0)
309 | return nEndValue
310 | }
311 |
312 | //连击
313 | func (f *FightObject) GetContinuous() int {
314 | nEffectValue := f.impactEffect[EmAttributeContinuous].AttrValue
315 | nEndValue := f.FightDBData.Continuous + nEffectValue
316 | nEndValue = ChkMin(nEndValue, 0)
317 | return nEndValue
318 | }
319 |
320 | //连击次数
321 | func (f *FightObject) GetConAttTimes() int {
322 | nEffectValue := f.impactEffect[EmAttributeContinuousTimes].AttrValue
323 | nEndValue := f.FightDBData.ConAttTimes + nEffectValue
324 | nEndValue = ChkMin(nEndValue, 0)
325 | return nEndValue
326 | }
327 |
328 | //连击伤害
329 | func (f *FightObject) GetConAttHurt() int {
330 | nEffectValue := f.impactEffect[EmAttributeHurtContinuous].AttrValue
331 | nEndValue := f.FightDBData.ConAttHurt + nEffectValue
332 | nEndValue = ChkMin(nEndValue, 0)
333 | return nEndValue
334 | }
335 |
336 | //反击
337 | func (f *FightObject) GetAttackBack() int {
338 | nEffectValue := f.impactEffect[EmAttributeBackAttack].AttrValue
339 | nEndValue := f.FightDBData.BackAttack + nEffectValue
340 | nEndValue = ChkMin(nEndValue, 0)
341 | return nEndValue
342 | }
343 |
344 | //反击伤害
345 | func (f *FightObject) GetBackAttHurt() int {
346 | nEffectValue := f.impactEffect[EmAttributeHurtBackAttack].AttrValue
347 | nEndValue := f.FightDBData.BackAttHurt + nEffectValue
348 | nEndValue = ChkMin(nEndValue, 0)
349 | return nEndValue
350 | }
351 |
352 | func (f *FightObject) GetHeroAttr() (TableRowHeroAttr, error) {
353 | id := f.FightDBData.TableID
354 | if heroAttr, ok := G_HeroAttr[id]; ok {
355 | return heroAttr, nil
356 | } else {
357 | return TableRowHeroAttr{}, errors.New("config err")
358 | }
359 | }
360 |
361 | func (f *FightObject) GetFloatingHurt() int {
362 | pRowHero, err := f.GetHeroAttr()
363 | if err != nil {
364 | panic(err)
365 | }
366 | nFloatingHurt := pRowHero.FloatingHurt
367 | if nFloatingHurt > 0 {
368 | nFloatingHurt = rand.Intn(nFloatingHurt)
369 | }
370 | return nFloatingHurt
371 | }
372 |
373 | func (f *FightObject) CoolDownHeartBeat(uTime int) bool {
374 | return true
375 | }
376 |
377 | func (f *FightObject) ClearImpactEffect() {
378 | for i := 0; i < int(EmAttributeNumber); i++ {
379 | f.impactEffect[i].AttrValue = 0
380 | }
381 | }
382 |
383 | //impact攻击逻辑
384 | func (f *FightObject) ImpactHeartBeat(uTime int) {
385 | for i := 0; i < MaxImpactNumber; i++ {
386 | if f.impactList[i].IsValid() {
387 | f.impactList[i].HeartBeat(uTime)
388 | }
389 | }
390 | }
391 |
392 | func (f *FightObject) CompareAttackOrder(pFightObj *FightObject) int {
393 | matrixID := f.GetMatrixID()
394 | objMatrixID := pFightObj.GetMatrixID()
395 | var fAttack, objAttack int
396 | if f.IsAttacker() {
397 | fAttack = 1
398 | } else {
399 | fAttack = 0
400 | }
401 | if pFightObj.IsAttacker() {
402 | objAttack = 1
403 | } else {
404 | objAttack = 0
405 | }
406 | nOrder := (1-fAttack)*MaxMatrixCellCount + matrixID
407 | objOrder := (1-objAttack)*MaxMatrixCellCount + objMatrixID
408 | return nOrder - objOrder
409 | }
410 |
411 | func (f *FightObject) GetImpactLogicType(nImpactID int) EmTypeImpactLogic {
412 | pRowImpact, err := ImpactTableRow(nImpactID)
413 | if err != nil {
414 | panic(err)
415 | }
416 | switch pRowImpact.LogicID {
417 | case EmImpactLogic0, EmImpactLogic1, EmImpactLogic6:
418 | return EmTypeImpactLogicSingle
419 | case EmImpactLogic2, EmImpactLogic3, EmImpactLogic5:
420 | return EmTypeImpactLogicDeBuff
421 | case EmImpactLogic4:
422 | return EmTypeImpactLogicBuff
423 | default:
424 | return EmTypeImpactLogicInvalid
425 | }
426 | return EmTypeImpactLogicInvalid
427 | }
428 |
429 | func (f *FightObject) AddImpact(nImpactID, conAttTimes, nRound, nSkillID int, pCaster *FightObject) EmImpactResult {
430 | pRowImpactNew, err := ImpactTableRow(nImpactID)
431 | if err != nil {
432 | panic(err)
433 | }
434 | logicType := f.GetImpactLogicType(nImpactID)
435 | if logicType == EmTypeImpactLogicSingle {
436 | newImpact := new(Impact)
437 | newImpact.Init(nImpactID, conAttTimes, nRound, nSkillID, pCaster, f)
438 | newImpact.HeartBeat(nRound)
439 | return EmImpactResultNormal
440 | } else {
441 | //mutex
442 | if pRowImpactNew.ImpactMutexID >= 0 {
443 | for i := 0; i < MaxImpactNumber; i++ {
444 | if f.impactList[i].IsValid() {
445 | pRowImpact, err := ImpactTableRow(f.impactList[i].GetImpactID())
446 | if err != nil {
447 | panic(err)
448 | }
449 | if pRowImpactNew.ImpactMutexID == pRowImpact.ImpactMutexID {
450 | f.impactList[i].Init(nImpactID, conAttTimes, nRound, nSkillID, pCaster, f)
451 | f.impactList[i].HeartBeat(nRound)
452 | return EmImpactResultNormal
453 | } else {
454 | return EmImpactResultFail
455 | }
456 | }
457 | }
458 | }
459 |
460 | if logicType == EmTypeImpactLogicBuff {
461 | for i := 0; i < MaxBuffNumber; i++ {
462 | if !f.impactList[i].IsValid() {
463 | f.impactList[i].Init(nImpactID, conAttTimes, nRound, nSkillID, pCaster, f)
464 | f.impactList[i].HeartBeat(nRound)
465 | return EmImpactResultNormal
466 | }
467 | }
468 | }
469 |
470 | if logicType == EmTypeImpactLogicDeBuff {
471 | for i := MaxBuffNumber; i < MaxImpactNumber; i++ {
472 | if !f.impactList[i].IsValid() {
473 | f.impactList[i].Init(nImpactID, conAttTimes, nRound, nSkillID, pCaster, f)
474 | f.impactList[i].HeartBeat(nRound)
475 | return EmImpactResultNormal
476 | }
477 | }
478 | }
479 | }
480 | return EmImpactResultFail
481 | }
482 |
483 | func (f *FightObject) GetOwnerList() *FightObjList {
484 | if f.bAttacker {
485 | return f.pFightCell.GetAttackList()
486 | } else {
487 | return f.pFightCell.GetDefenceList()
488 | }
489 | }
490 |
491 | func (f *FightObject) GetHP() int {
492 | nEffectValue := f.impactEffect[EmAttributeHp].AttrValue
493 | nEndValue := f.FightDBData.HP + nEffectValue
494 | nMaxHP := f.GetMaxMP()
495 |
496 | if nEndValue > nMaxHP {
497 | nEndValue = nMaxHP
498 | }
499 | nEndValue = ChkMin(nEndValue, 0)
500 | f.FightDBData.HP = nEndValue
501 | f.impactEffect[EmAttributeHp].AttrValue = 0
502 | return nEndValue
503 | }
504 |
505 | func (f *FightObject) SetHP(nHP int) {
506 | nMaxHP := f.GetMaxMP()
507 | if nHP > nMaxHP {
508 | nHP = nMaxHP
509 | }
510 | if nHP < 0 {
511 | nHP = 0
512 | }
513 | f.FightDBData.HP = nHP
514 | if nHP == 0 {
515 | f.ClearImpact()
516 | }
517 | }
518 |
519 | func (f *FightObject) ClearImpact() bool {
520 | pOwnList := f.GetOwnerList()
521 | for i := 0; i < MaxMatrixCellCount; i++ {
522 | pFightObj := pOwnList.GetFightObject(i)
523 | if pFightObj != nil && pFightObj.IsActive() {
524 | pImpactList := pFightObj.GetImpactList()
525 | for j := 0; j < MaxImpactNumber; j++ {
526 | if pImpactList[j].IsValid() && pImpactList[j].GetCaster() == f {
527 | pImpactList[j].CleanUp()
528 | }
529 | }
530 | }
531 | }
532 | pOwnList = f.GetEnemyList()
533 | for i := 0; i < MaxMatrixCellCount; i++ {
534 | pFightObj := pOwnList.GetFightObject(i)
535 | if pFightObj != nil && pFightObj.IsActive() {
536 | pImpactList := pFightObj.GetImpactList()
537 | for j := 0; j < MaxImpactNumber; j++ {
538 | if pImpactList[j].IsValid() && pImpactList[j].GetCaster() == f {
539 | pImpactList[j].CleanUp()
540 | }
541 | }
542 | }
543 | }
544 | return true
545 | }
546 |
547 | func (f *FightObject) IsValid() bool {
548 | //fmt.Println(f.FightDBData.Guid)
549 | if f == nil {
550 | return false
551 | }
552 | return f.FightDBData.Guid.IsValid()
553 | }
554 |
555 | func (f *FightObject) IsActive() bool {
556 | if !f.IsValid() {
557 | return false
558 | }
559 | if f.GetHP() > 0 {
560 | return true
561 | }
562 | return false
563 | }
564 |
565 | func (f *FightObject) ChangeEffect(nAttrType EmAttribute, nValue int, bRemove bool) {
566 | if bRemove {
567 | f.impactEffect[nAttrType].AttrValue -= nValue
568 | } else {
569 | f.impactEffect[nAttrType].AttrValue += nValue
570 | }
571 | }
572 |
573 | //获取敌方对象列表
574 | func (f *FightObject) GetEnemyList() *FightObjList {
575 | if f.bAttacker {
576 | return f.pFightCell.GetDefenceList()
577 | } else {
578 | return f.pFightCell.GetAttackList()
579 | }
580 | }
581 |
582 | //技能攻击
583 | func (f *FightObject) SkillHeartBeat(uTime int) bool {
584 |
585 | for i := MaxSkillNum - 1; i >= 0; i-- {
586 | bLogic := f.skillList[i].SkillLogic(uTime)
587 | if bLogic {
588 | return true
589 | }
590 | }
591 | return false
592 | }
593 |
594 | //普通攻击
595 | func (f *FightObject) CastCommonSkill(uTime int) bool {
596 | return f.commonKill.CommonSkillLogic(uTime)
597 | }
598 |
599 | //被动技能
600 | func (f *FightObject) CastPassiveSkill(uTime int) {
601 | for i := 0; i < MaxSkillNum; i++ {
602 | //被动技能
603 | f.skillList[i].PassiveSkillLogic(uTime)
604 | }
605 | //武器被动技能
606 | for i := 0; i < f.equipSkillCount; i++ {
607 | f.equipSkillList[i].PassiveSkillLogic(uTime)
608 | }
609 | }
610 |
611 | //装备技能
612 | func (f *FightObject) CastEquipSkill(uTime int, pTarget *FightObject) {
613 | for i := 0; i < f.equipSkillCount; i++ {
614 | f.equipSkillList[i].EquipSkillLogic(uTime, pTarget)
615 | }
616 | }
617 |
--------------------------------------------------------------------------------
/Impact.go:
--------------------------------------------------------------------------------
1 | package GameFight
2 |
3 | import (
4 | "errors"
5 | )
6 |
7 | type Impact struct {
8 | LogicFuncArray [EmImpactLogicCount]func()
9 | impactID int //ID
10 | pHolder *FightObject //拥有者
11 | pCaster *FightObject //施放者
12 | skillID int //技能ID
13 | startTime int //开始时间
14 | life int //开始周期
15 | logicTime int //开始作用时间
16 | term int //开始间隔
17 | conAttTimes int //连击次数
18 | }
19 |
20 | func (impact Impact) GetImpactRow() (TableRowImpact, error) {
21 | id := impact.GetImpactID()
22 | if impact, ok := G_Impact[id]; ok {
23 | return impact, nil
24 | } else {
25 | return TableRowImpact{}, errors.New("config err")
26 | }
27 | }
28 |
29 | func (impact Impact) GetImpactID() int {
30 | return impact.impactID
31 | }
32 |
33 | func (impact Impact) GetHolder() *FightObject {
34 | return impact.pHolder
35 | }
36 |
37 | func (impact Impact) GetCaster() *FightObject {
38 | return impact.pCaster
39 | }
40 |
41 | func (impact Impact) IsValid() bool {
42 | if impact.impactID > 0 {
43 | return true
44 | }
45 | return false
46 | }
47 |
48 | func (impact *Impact) Init(nImpactID, conAttTimes, nRound, nSkillID int, pCaster, pHolder *FightObject) bool {
49 | impact.impactID = nImpactID
50 | impact.pHolder = pHolder
51 | impact.pCaster = pCaster
52 | impact.skillID = nSkillID
53 | impact.startTime = nRound
54 | impact.life = nRound
55 | impact.logicTime = nRound
56 | impact.conAttTimes = 0
57 | impact.term = 1
58 |
59 | pRow, err := impact.GetImpactRow()
60 | if err != nil {
61 | return false
62 | }
63 | switch pRow.LogicID {
64 | case EmImpactLogic0, EmImpactLogic1, EmImpactLogic6:
65 | if conAttTimes > 0 {
66 | impact.conAttTimes = conAttTimes
67 | }
68 | break
69 | case EmImpactLogic2,EmImpactLogic3:
70 | //2=物理持续攻击
71 | //逻辑参数3:持续时间,单位回合(10)
72 | //逻辑参数4:生效间隔,单位回合(2)
73 | impact.life += pRow.Param[2] - pRow.Param[3]
74 | impact.term = pRow.Param[3]
75 | break
76 | case EmImpactLogic4,EmImpactLogic5:
77 | //逻辑参数3:持续时间,单位回合(10)
78 | impact.life += pRow.Param[2] - 1
79 | break
80 | default:
81 | break
82 | }
83 | impact.LogicFuncArray[0] = impact.ImpactLogic0
84 | impact.LogicFuncArray[1] = impact.ImpactLogic1
85 | impact.LogicFuncArray[2] = impact.ImpactLogic2
86 | impact.LogicFuncArray[3] = impact.ImpactLogic3
87 | impact.LogicFuncArray[4] = impact.ImpactLogic4
88 | impact.LogicFuncArray[5] = impact.ImpactLogic5
89 | impact.LogicFuncArray[6] = impact.ImpactLogic6
90 | return true
91 | }
92 |
93 | //0=单次物理攻击;
94 | //逻辑参数1:从英雄物理攻击中取得的倍率(例:150)
95 | //逻辑参数2:额外增加的物理伤害(例:50)
96 | //如英雄物理攻击为100,则最终的技能物理攻击=英雄物理攻击(100)*逻辑参数1(150/100)+逻辑参数2(50)
97 | func (impact Impact) ImpactLogic0() {
98 | var (
99 | pImpactInfo *ImpactInfo
100 | pAttackInfo *AttackInfo
101 | pSkillAttack *SkillAttack
102 | pFightCell *FightCell
103 | index int
104 | pRow TableRowImpact
105 | nPhysicAttack int
106 | nAttack int
107 | nDefend int
108 | nDecay int
109 | nDamage int
110 | fConAttHurt int
111 | )
112 | index = InvalidId
113 | pAttackInfo = impact.pCaster.GetAttackInfo()
114 | if pAttackInfo != nil && pAttackInfo.IsValid() {
115 | pSkillAttack = pAttackInfo.GetSkillAttack(impact.skillID)
116 | if pSkillAttack != nil {
117 | pImpactInfo = pSkillAttack.GetImpactInfo(impact.impactID)
118 | if pImpactInfo != nil {
119 | index = pImpactInfo.GetTargetIndex(impact.pHolder.GetGuid())
120 | }
121 | }
122 | }
123 |
124 | pFightCell = impact.pHolder.GetFightCell()
125 | nPhysicAttack = impact.pCaster.GetPhysicAttack()
126 |
127 | pRow, err := impact.GetImpactRow()
128 | if err != nil {
129 | panic(err)
130 | }
131 | nAttack = int(nPhysicAttack*pRow.Param[0]/100 + pRow.Param[1])
132 | if pFightCell.GetFightType() == EmTypeFightStair && impact.pCaster.IsAttacker() {
133 | nAttack += nAttack * pFightCell.GetPlusAtt() / 100
134 | }
135 |
136 | nDefend = impact.pHolder.GetPhysicDefend()
137 | nDecay = impact.pHolder.GetPhysicHurtDecay()
138 | //本次物理攻击伤害=(自身当前经过连击计算后的物理攻击-目标物理防御)*(1-目标物理伤害减免/100)
139 | nDamage = CalcDamage(nAttack, nDefend, nDecay)
140 | nDamage = ChkMin(nDamage, 0)
141 | impact.pHolder.SetHP(impact.pHolder.GetHP() - nDamage)
142 |
143 | if pImpactInfo != nil && index >= 0 {
144 | pImpactInfo.Hurts[index][0] = nDamage
145 | }
146 | //连击
147 | fConAttHurt = impact.pCaster.GetConAttHurt() / 100
148 | for i := 1; i < impact.conAttTimes; i++ {
149 | nAttack = int(nAttack * fConAttHurt)
150 | nDamage = CalcDamage(nAttack, nDefend, nDecay)
151 | nDamage = ChkMin(nDamage, 0)
152 | impact.pHolder.SetHP(impact.pHolder.GetHP() - nDamage)
153 |
154 | if pImpactInfo != nil && index >= 0 {
155 | pImpactInfo.Hurts[index][i] = nDamage
156 | }
157 |
158 | }
159 | }
160 |
161 | func (impact Impact) ImpactLogic1() {
162 | var (
163 | pImpactInfo *ImpactInfo
164 | pAttackInfo *AttackInfo
165 | pSkillAttack *SkillAttack
166 | pFightCell *FightCell
167 | index int
168 | pRow TableRowImpact
169 | nPhysicAttack int
170 | nAttack int
171 | nDefend int
172 | nDecay int
173 | nDamage int
174 | fConAttHurt int
175 | )
176 | index = InvalidId
177 | pAttackInfo = impact.pCaster.GetAttackInfo()
178 | if pAttackInfo != nil && pAttackInfo.IsValid() {
179 | pSkillAttack = pAttackInfo.GetSkillAttack(impact.skillID)
180 | if pSkillAttack != nil {
181 | pImpactInfo = pSkillAttack.GetImpactInfo(impact.impactID)
182 | if pImpactInfo != nil {
183 | index = pImpactInfo.GetTargetIndex(impact.pHolder.GetGuid())
184 | }
185 | }
186 | }
187 |
188 | pFightCell = impact.pHolder.GetFightCell()
189 | nPhysicAttack = impact.pCaster.GetPhysicAttack()
190 | pRow, err := impact.GetImpactRow()
191 | if err != nil {
192 | panic(err)
193 | }
194 | nAttack = int(nPhysicAttack*pRow.Param[0]/100 + pRow.Param[1])
195 | if pFightCell.GetFightType() == EmTypeFightStair && impact.pCaster.IsAttacker() {
196 | nAttack += int(nAttack * pFightCell.GetPlusAtt() / 100)
197 | }
198 |
199 | nDefend = impact.pHolder.GetMagicDefend()
200 | nDecay = impact.pHolder.GetMagicHurtDecay()
201 | nDamage = CalcDamage(nAttack, nDefend, nDecay)
202 | nDamage = ChkMin(nDamage, 0)
203 | //本次魔法攻击伤害=(自身当前经过连击计算后的魔法攻击-目标魔法防御)*(1-目标魔法伤害减免/100)
204 |
205 | impact.pHolder.SetHP(impact.pHolder.GetHP() - nDamage)
206 | if pImpactInfo != nil && index >= 0 {
207 | pImpactInfo.Hurts[index][0] = nDamage
208 | }
209 | //连击
210 | fConAttHurt = impact.pCaster.GetConAttHurt() / 100
211 | for i := 1; i < impact.conAttTimes; i++ {
212 | nAttack = int(nAttack * fConAttHurt)
213 | nDamage = CalcDamage(nAttack, nDefend, nDecay)
214 | nDamage = ChkMin(nDamage, 0)
215 | impact.pHolder.SetHP(impact.pHolder.GetHP() - nDamage)
216 |
217 | if pImpactInfo != nil && index >= 0 {
218 | pImpactInfo.Hurts[index][i] = nDamage
219 | }
220 | }
221 | }
222 |
223 | //2=物理持续攻击
224 | //逻辑参数1:从英雄物理攻击中取得的倍率(例:150)
225 | //逻辑参数2:额外增加的物理伤害(例:50)
226 | //逻辑参数3:持续时间,单位回合(10)
227 | //逻辑参数4:生效间隔,单位回合(2)
228 | //此效果的最终效果为:每2回合对目标造成一次物理伤害,持续10回合(生效5次),每次造成的物理攻击具体数值=英雄物理攻击(100)*逻辑参数1(150/100)+逻辑参数2(50)
229 | func (impact Impact) ImpactLogic2() {
230 | var (
231 | pImpactInfo *ImpactInfo
232 | pAttackInfo *AttackInfo
233 | pSkillAttack *SkillAttack
234 | pFightCell *FightCell
235 | index int
236 | nPhysicAttack int
237 | nAttack int
238 | nDefend int
239 | nDecay int
240 | nDamage int
241 | pRoundInfo *FightRoundInfo
242 | pFObjectInfo *FObjectInfo
243 | )
244 | index = InvalidId
245 | pAttackInfo = impact.pCaster.GetAttackInfo()
246 | if pAttackInfo != nil && pAttackInfo.IsValid() {
247 | pSkillAttack = pAttackInfo.GetSkillAttack(impact.skillID)
248 | if pSkillAttack != nil {
249 | pImpactInfo = pSkillAttack.GetImpactInfo(impact.impactID)
250 | if pImpactInfo != nil {
251 | index = pImpactInfo.GetTargetIndex(impact.pHolder.GetGuid())
252 | }
253 | }
254 | }
255 | pFightCell = impact.pHolder.GetFightCell()
256 | if impact.logicTime <= impact.life {
257 | nPhysicAttack = impact.pCaster.GetPhysicAttack()
258 | pRow, err := impact.GetImpactRow()
259 | if err != nil {
260 | panic(err)
261 | }
262 | nAttack = int(nPhysicAttack*pRow.Param[0]/100 + pRow.Param[1])
263 | if pFightCell.GetFightType() == EmTypeFightStair && impact.pCaster.IsAttacker() {
264 | nAttack += nAttack * pFightCell.GetPlusAtt() / 100
265 | }
266 | nDefend = impact.pHolder.GetPhysicDefend()
267 | nDecay = impact.pHolder.GetPhysicHurtDecay()
268 | //本次物理攻击伤害=(自身当前经过连击计算后的物理攻击-目标物理防御)*(1-目标物理伤害减免/100)
269 | nDamage = CalcDamage(nAttack, nDefend, nDecay)
270 | nDamage = ChkMin(nDamage, 0)
271 | impact.pHolder.SetHP(impact.pHolder.GetHP() - nDamage)
272 |
273 | if impact.startTime == impact.logicTime {
274 | if pImpactInfo != nil && index >= 0 {
275 | pImpactInfo.Hurts[index][0] = nDamage
276 | }
277 | } else if impact.startTime < impact.logicTime {
278 | pRoundInfo = pFightCell.GetRoundInfo()
279 | pFObjectInfo = pRoundInfo.GetFObjectInfoByGuid(impact.pHolder.GetGuid())
280 | if pFObjectInfo != nil {
281 | for i := 0; i < pFObjectInfo.ImpactCount; i++ {
282 | if pFObjectInfo.ImpactList[i] == impact.impactID {
283 | pFObjectInfo.ImpactHurt[i] = nDamage
284 | break
285 | }
286 | }
287 | }
288 | }
289 | }
290 | impact.logicTime += impact.term
291 | }
292 |
293 | //3=持续魔法攻击
294 | //逻辑参数1:从英雄物理攻击(因为英雄默认没有魔法攻击)中取得的倍率(例:150)
295 | //逻辑参数2:额外增加的魔法伤害(例:50)
296 | //逻辑参数3:持续时间,单位回合(10)
297 | //逻辑参数4:生效间隔,单位回合(2)
298 | //此效果的最终效果为:每2回合对目标造成一次魔法伤害,持续10回合(生效5次),每次造成的魔法攻击具体数值=英雄物理攻击(100)*逻辑参数1(150/100)+逻辑参数2(50)
299 | func (impact *Impact) ImpactLogic3() {
300 | var (
301 | pImpactInfo *ImpactInfo
302 | pAttackInfo *AttackInfo
303 | pSkillAttack *SkillAttack
304 | pFightCell *FightCell
305 | index int
306 | nPhysicAttack int
307 | nAttack int
308 | nDefend int
309 | nDecay int
310 | nDamage int
311 | pRoundInfo *FightRoundInfo
312 | pFObjectInfo *FObjectInfo
313 | )
314 | index = InvalidId
315 | pAttackInfo = impact.pCaster.GetAttackInfo()
316 | if pAttackInfo != nil && pAttackInfo.IsValid() {
317 | pSkillAttack = pAttackInfo.GetSkillAttack(impact.skillID)
318 | if pSkillAttack != nil {
319 | pImpactInfo = pSkillAttack.GetImpactInfo(impact.impactID)
320 | if pImpactInfo != nil {
321 | index = pImpactInfo.GetTargetIndex(impact.pHolder.GetGuid())
322 | }
323 | }
324 | }
325 | pFightCell = impact.pHolder.GetFightCell()
326 | if impact.logicTime <= impact.life {
327 | nPhysicAttack = impact.pCaster.GetPhysicAttack()
328 | pRow, err := impact.GetImpactRow()
329 | if err != nil {
330 | panic(err)
331 | }
332 | nAttack = int(nPhysicAttack*pRow.Param[0]/100 + pRow.Param[1])
333 | if pFightCell.GetFightType() == EmTypeFightStair && impact.pCaster.IsAttacker() {
334 | nAttack += nAttack * pFightCell.GetPlusAtt() / 100
335 | }
336 | nDefend = impact.pHolder.GetMagicDefend()
337 | nDecay = impact.pHolder.GetMagicHurtDecay()
338 | //本次物理攻击伤害=(自身当前经过连击计算后的物理攻击-目标物理防御)*(1-目标物理伤害减免/100)
339 | nDamage = CalcDamage(nAttack, nDefend, nDecay)
340 | nDamage = ChkMin(nDamage, 0)
341 | impact.pHolder.SetHP(impact.pHolder.GetHP() - nDamage)
342 | }
343 | if impact.startTime == impact.logicTime {
344 | if pImpactInfo != nil && index >= 0 {
345 | pImpactInfo.Hurts[index][0] = nDamage
346 | }
347 | } else if impact.startTime < impact.logicTime {
348 | pRoundInfo = pFightCell.GetRoundInfo()
349 | pFObjectInfo = pRoundInfo.GetFObjectInfoByGuid(impact.pHolder.GetGuid())
350 | if pFObjectInfo != nil {
351 | for i := 0; i < pFObjectInfo.ImpactCount; i++ {
352 | if pFObjectInfo.ImpactList[i] == impact.impactID {
353 | pFObjectInfo.ImpactHurt[i] = nDamage
354 | break
355 | }
356 | }
357 | }
358 | }
359 | impact.logicTime += impact.term
360 | }
361 |
362 | func (impact *Impact) ImpactLogic4() {
363 | var (
364 | pImpactInfo *ImpactInfo
365 | pAttackInfo *AttackInfo
366 | pSkillAttack *SkillAttack
367 | pFightCell *FightCell
368 | index int
369 | pRoundInfo *FightRoundInfo
370 | pFObjectInfo *FObjectInfo
371 | )
372 | index = InvalidId
373 | pAttackInfo = impact.pCaster.GetAttackInfo()
374 | if pAttackInfo != nil && pAttackInfo.IsValid() {
375 | pSkillAttack = pAttackInfo.GetSkillAttack(impact.skillID)
376 | if pSkillAttack != nil {
377 | pImpactInfo = pSkillAttack.GetImpactInfo(impact.impactID)
378 | if pImpactInfo != nil {
379 | index = pImpactInfo.GetTargetIndex(impact.pHolder.GetGuid())
380 | }
381 | }
382 | }
383 | if impact.logicTime <= impact.life {
384 | pRow, err := impact.GetImpactRow()
385 | if err != nil {
386 | panic(err)
387 | }
388 | impact.pHolder.ChangeEffect(EmAttribute(pRow.Param[0]), pRow.Param[1], false)
389 | if impact.startTime == impact.logicTime {
390 | if pImpactInfo != nil && index >= 0 {
391 | if EmAttribute(pRow.Param[0]) == EmAttributeHp {
392 | impact.pHolder.SetHP(impact.pHolder.GetHP())
393 | pImpactInfo.Hurts[index][0] = pRow.Param[1] * -1
394 | }
395 | if EmAttribute(pRow.Param[0]) == EmAttributeMp {
396 | pImpactInfo.Mp[index] = pRow.Param[1] * -1
397 | }
398 | }
399 | } else if impact.startTime == impact.logicTime {
400 | pFightCell = impact.pHolder.GetFightCell()
401 | pRoundInfo = pFightCell.GetRoundInfo()
402 | pFObjectInfo = pRoundInfo.GetFObjectInfoByGuid(impact.pHolder.GetGuid())
403 | if pFObjectInfo != nil {
404 | for i := 0; i < pFObjectInfo.ImpactCount; i++ {
405 | if pFObjectInfo.ImpactList[i] == impact.impactID {
406 | if EmAttribute(pRow.Param[0]) == EmAttributeHp {
407 | pFObjectInfo.ImpactHurt[i] = pRow.Param[1] * -1
408 | }
409 | if EmAttribute(pRow.Param[0]) == EmAttributeMp {
410 | pFObjectInfo.ImpactMP[i] = pRow.Param[1] * -1
411 | }
412 | break
413 | }
414 | }
415 | }
416 | }
417 | }
418 | impact.logicTime += 1
419 | }
420 |
421 | //5=debuff削弱类
422 | //逻辑参数1:改变的英雄属性id,读取AttributeData.tab表。
423 | //逻辑参数2:改变的具体数值
424 | //逻辑参数3:持续时间,单位回合(10)
425 | //最终可实现的效果如敌人攻击减少X点持续10回合。
426 | func (impact *Impact) ImpactLogic5() {
427 | var (
428 | pImpactInfo *ImpactInfo
429 | pAttackInfo *AttackInfo
430 | pSkillAttack *SkillAttack
431 | pFightCell *FightCell
432 | index int
433 | pRoundInfo *FightRoundInfo
434 | pFObjectInfo *FObjectInfo
435 | )
436 | index = InvalidId
437 | pAttackInfo = impact.pCaster.GetAttackInfo()
438 | if pAttackInfo != nil && pAttackInfo.IsValid() {
439 | pSkillAttack = pAttackInfo.GetSkillAttack(impact.skillID)
440 | if pSkillAttack != nil {
441 | pImpactInfo = pSkillAttack.GetImpactInfo(impact.impactID)
442 | if pImpactInfo != nil {
443 | index = pImpactInfo.GetTargetIndex(impact.pHolder.GetGuid())
444 | }
445 | }
446 | }
447 | if impact.logicTime <= impact.life {
448 | pRow, err := impact.GetImpactRow()
449 | if err != nil {
450 | panic(err)
451 | }
452 | impact.pHolder.ChangeEffect(EmAttribute(pRow.Param[0]), pRow.Param[1]*(-1), false)
453 | if impact.startTime == impact.logicTime {
454 | if pImpactInfo != nil && index >= 0 {
455 | if EmAttribute(pRow.Param[0]) == EmAttributeHp {
456 | impact.pHolder.SetHP(impact.pHolder.GetHP())
457 | pImpactInfo.Hurts[index][0] = pRow.Param[1]
458 | }
459 | if EmAttribute(pRow.Param[0]) == EmAttributeMp {
460 | pImpactInfo.Mp[index] = pRow.Param[1]
461 | }
462 | }
463 | } else if impact.startTime == impact.logicTime {
464 | pFightCell = impact.pHolder.GetFightCell()
465 | pRoundInfo = pFightCell.GetRoundInfo()
466 | pFObjectInfo = pRoundInfo.GetFObjectInfoByGuid(impact.pHolder.GetGuid())
467 | if pFObjectInfo != nil {
468 | for i := 0; i < pFObjectInfo.ImpactCount; i++ {
469 | if pFObjectInfo.ImpactList[i] == impact.impactID {
470 | if EmAttribute(pRow.Param[0]) == EmAttributeHp {
471 | pFObjectInfo.ImpactHurt[i] = pRow.Param[1]
472 | }
473 | if EmAttribute(pRow.Param[0]) == EmAttributeMp {
474 | pFObjectInfo.ImpactMP[i] = pRow.Param[1]
475 | }
476 | break
477 | }
478 | }
479 | }
480 | }
481 | }
482 | impact.logicTime += 1
483 | }
484 |
485 | func (impact Impact) ImpactLogic6() {
486 | var (
487 | pImpactInfo *ImpactInfo
488 | pAttackInfo *AttackInfo
489 | pSkillAttack *SkillAttack
490 | nMagicAttack int
491 | nAttack int
492 | nDefend int
493 | nDecay int
494 | nDamage int
495 | fConAttHurt int
496 | pFightCell *FightCell
497 | index int
498 | )
499 | index = InvalidId
500 | pAttackInfo = impact.pCaster.GetAttackInfo()
501 | if pAttackInfo != nil && pAttackInfo.IsValid() {
502 | pSkillAttack = pAttackInfo.GetSkillAttack(impact.skillID)
503 | if pSkillAttack != nil {
504 | pImpactInfo = pSkillAttack.GetImpactInfo(impact.impactID)
505 | if pImpactInfo != nil {
506 | index = pImpactInfo.GetTargetIndex(impact.pHolder.GetGuid())
507 | }
508 | }
509 | }
510 |
511 | pFightCell = impact.pHolder.GetFightCell()
512 | nMagicAttack = impact.pCaster.GetMagicAttack()
513 | pRow, err := impact.GetImpactRow()
514 | if err != nil {
515 | panic(err)
516 | }
517 | nAttack = int(nMagicAttack*pRow.Param[0]/100 + pRow.Param[1])
518 | if pFightCell.GetFightType() == EmTypeFightStair && impact.pCaster.IsAttacker() {
519 | nAttack += int(nAttack * pFightCell.GetPlusAtt() / 100)
520 | }
521 | nDefend = impact.pHolder.GetMagicDefend()
522 | nDecay = impact.pHolder.GetMagicHurtDecay()
523 | nDamage = CalcDamage(nAttack, nDefend, nDecay)
524 | nDamage = ChkMin(nDamage, 0)
525 | //本次魔法攻击伤害=(自身当前经过连击计算后的魔法攻击-目标魔法防御)*(1-目标魔法伤害减免/100)
526 |
527 | impact.pHolder.SetHP(impact.pHolder.GetHP() - nDamage)
528 | if pImpactInfo != nil && index >= 0 {
529 | pImpactInfo.Hurts[index][0] = nDamage
530 | }
531 |
532 | //连击
533 | fConAttHurt = impact.pCaster.GetConAttHurt() / 100
534 | for i := 1; i < impact.conAttTimes; i++ {
535 | nAttack = int(nAttack * fConAttHurt)
536 | nDamage = CalcDamage(nAttack, nDefend, nDecay)
537 | nDamage = ChkMin(nDamage, 0)
538 | impact.pHolder.SetHP(impact.pHolder.GetHP() - nDamage)
539 |
540 | if pImpactInfo != nil && index >= 0 {
541 | pImpactInfo.Hurts[index][i] = nDamage
542 | }
543 | }
544 |
545 | }
546 |
547 | func (impact *Impact) CleanUp() {
548 | impact.impactID = InvalidId
549 | impact.pHolder = nil
550 | impact.pCaster = nil
551 | impact.startTime = 0
552 | impact.life = 0
553 | impact.term = 0
554 | impact.logicTime = 0
555 | impact.conAttTimes = 0
556 | }
557 |
558 | func (impact *Impact) HeartBeat(uTime int) bool {
559 | if !impact.IsValid() {
560 | return false
561 | }
562 | if uTime == impact.logicTime {
563 | pRow, err := impact.GetImpactRow()
564 | if err != nil {
565 | panic(err)
566 | }
567 | if pRow.LogicID >= 0 && pRow.LogicID < EmImpactLogicCount {
568 | logicFunc := impact.LogicFuncArray[pRow.LogicID]
569 | logicFunc()
570 | }
571 | }
572 |
573 | if uTime >= impact.life {
574 | impact.CleanUp()
575 | }
576 | return true
577 | }
--------------------------------------------------------------------------------
/Skill.go:
--------------------------------------------------------------------------------
1 | package GameFight
2 |
3 | import (
4 | "errors"
5 | "fmt"
6 | "math/rand"
7 | )
8 |
9 | type Skill struct {
10 | skillID int //技能id
11 | skillType EmSkillType //技能类型
12 | skillTime int //技能时间
13 | coolDownTime int //技能冷却时间
14 | pCaster *FightObject //施放者
15 | pTarget *FightObject //技能的目标
16 | }
17 |
18 | func (s Skill) String() string {
19 | return fmt.Sprintf("施放者 %+v 使用技能id %+v [技能类型 %+v 技能时间 %+v 技能冷却时间 %+v]",
20 | s.pCaster.GetGuid(), s.skillID, s.skillType, s.skillTime, s.coolDownTime)
21 | }
22 |
23 | func (s Skill) GetSkillRow() (TableRowSkill, error) {
24 | id := s.GetSkillID()
25 | if skill, ok := G_Skill[id]; ok {
26 | return skill, nil
27 | }
28 | return TableRowSkill{}, errors.New("config err")
29 | }
30 |
31 | func (s Skill) IsValid() bool {
32 | if s.skillID <= 0 {
33 | return false
34 | }
35 | return true
36 | }
37 |
38 | func (s Skill) CheckCondition(nRound int) bool {
39 | if s.skillType == EmSkillTypeHeroPassive || s.skillType == EmSkillTypeEquipPassive {
40 | return false
41 | }
42 | if nRound < s.skillTime {
43 | return false
44 | }
45 | if s.pCaster == nil {
46 | return false
47 | }
48 | pRow, err := s.GetSkillRow()
49 | if err != nil {
50 | return false
51 | }
52 | if s.pCaster.GetMP() < pRow.NeedMP {
53 | return false
54 | }
55 | nRand := rand.Intn(10000)
56 | if nRand > pRow.SkillRate {
57 | return false
58 | }
59 | return true
60 |
61 | }
62 |
63 | /*
64 | 3 4 5
65 |
66 | 0 1 2
67 | ------------
68 | 0 1 2
69 |
70 | 3 4 5
71 |
72 | */
73 | func (s *Skill) SelectTarget() bool {
74 | var (
75 | pEnemyList *FightObjList
76 | pFightObject *FightObject
77 | nCount int
78 | nIndexList [MaxMatrixCellCount]int
79 | )
80 | s.pTarget = nil
81 | pRow, err := s.GetSkillRow()
82 | if err != nil {
83 | panic(err)
84 | }
85 | pEnemyList = s.pCaster.GetEnemyList()
86 | switch pRow.SelectTargetOpt {
87 | case EmSkillTargetOptAuto: //自动选择
88 | s.pTarget = s.pCaster
89 | break
90 | case EmSkillTargetOptOrder: //0 顺序选择
91 | for i := 0; i < MaxMatrixCellCount/2; i++ {
92 | frontIndex := (s.pCaster.GetMatrixID() + i) % (MaxMatrixCellCount / 2)
93 | backIndex := frontIndex + MaxMatrixCellCount/2
94 | pFightObject = pEnemyList.GetFightObject(frontIndex)
95 | if pFightObject != nil && pFightObject.IsActive() {
96 | s.pTarget = pFightObject
97 | break
98 | }
99 | pFightObject = pEnemyList.GetFightObject(backIndex)
100 | if pFightObject != nil && pFightObject.IsActive() {
101 | s.pTarget = pFightObject
102 | break
103 | }
104 | }
105 | break
106 | case EmSkillTargetOptRand: //随机选择
107 | nCount = 0
108 | nIndexList = [MaxMatrixCellCount]int{}
109 | for i := 0; i < MaxMatrixCellCount; i++ {
110 | pFightObject = pEnemyList.GetFightObject(i)
111 | if pFightObject != nil && pFightObject.IsActive() {
112 | nIndexList[nCount] = i
113 | nCount++
114 | }
115 | }
116 | if nCount <= 0 {
117 | return false
118 | }
119 | rankIndex := rand.Intn(nCount)
120 | s.pTarget = pEnemyList.GetFightObject(nIndexList[rankIndex])
121 | break
122 | case EmSkillTargetOptSlow: //后排优先
123 | frontIndex := s.pCaster.GetMatrixID() % (MaxMatrixCellCount / 2)
124 | //后排 对线
125 | for i := 0; i < MaxMatrixCellCount/2; i++ {
126 | index := (frontIndex+i)%(MaxMatrixCellCount/2) + MaxMatrixCellCount/2
127 | pFightObject = pEnemyList.GetFightObject(index)
128 | if pFightObject != nil && pFightObject.IsActive() {
129 | s.pTarget = pFightObject
130 | return true
131 | }
132 | }
133 | //前排 对线
134 | for i := 0; i < MaxMatrixCellCount/2; i++ {
135 | index := (frontIndex + i) % (MaxMatrixCellCount / 2)
136 | pFightObject = pEnemyList.GetFightObject(index)
137 | if pFightObject != nil && pFightObject.IsActive() {
138 | s.pTarget = pFightObject
139 | return true
140 | }
141 | }
142 | break
143 | default:
144 | break
145 | }
146 |
147 | if s.pTarget != nil {
148 | return true
149 | }
150 | return false
151 | }
152 |
153 | func (s *Skill) GetConAttTimes() (nConAttTimes int) {
154 | nContinuous := s.pCaster.GetContinuous()
155 | if nContinuous > 100 {
156 | nConAttTimes = s.pCaster.GetConAttTimes()
157 | return
158 | }
159 | nRand := rand.Intn(100) + 1
160 | if nRand < nContinuous {
161 | nConAttTimes = s.pCaster.GetConAttTimes()
162 | return
163 | }
164 | return InvalidId
165 | }
166 |
167 | func (s *Skill) Init(SkillID int, Caster *FightObject) bool {
168 | s.skillID = SkillID
169 | s.pCaster = Caster
170 |
171 | SkillRow, err := s.GetSkillRow()
172 | if err != nil {
173 | return false
174 | }
175 | s.skillType = EmSkillType(SkillRow.SkillType)
176 | s.skillTime = SkillRow.StartRound
177 | s.coolDownTime = SkillRow.CoolDownTime
178 | return true
179 | }
180 |
181 | func (s Skill) GetSkillID() int {
182 | return s.skillID
183 | }
184 |
185 | func (s Skill) GetSkillType() EmSkillType {
186 | return s.skillType
187 | }
188 |
189 | func (s *Skill) CleanUp() {
190 | s.skillID = InvalidId
191 | s.skillType = EmSkillTypeInvalid
192 | s.pCaster = nil
193 | s.pTarget = nil
194 | }
195 |
196 | //获取施放者
197 | func (s *Skill) GetCaster() *FightObject {
198 | return s.pCaster
199 | }
200 |
201 | //设置技能目标列表
202 | func (s *Skill) SetSkillTarget(pTarget *FightObject) {
203 | s.pTarget = pTarget
204 | }
205 |
206 | func (s *Skill) GetTargetList(nType EmImpactTarget, targetList *TargetList) bool {
207 | targetList.CleanUp()
208 | switch nType {
209 | case EmImpactTargetOptSelf: //自身
210 | targetList.Add(s.pCaster)
211 | break
212 | case EmImpactTargetOwnerSignle: //己方个体
213 | pOwnerList := s.pCaster.GetOwnerList()
214 | if pOwnerList != nil {
215 | nIndexList := [MaxMatrixCellCount]int{}
216 | nCount := 0
217 | for i := 0; i < MaxMatrixCellCount; i++ {
218 | pFightObject := pOwnerList.GetFightObject(i)
219 | if pFightObject != nil && pFightObject.IsActive() {
220 | nIndexList[nCount] = i
221 | nCount++
222 | }
223 | }
224 | if nCount <= 0 {
225 | return false
226 | }
227 | randIndex := rand.Intn(nCount)
228 | targetList.Add(pOwnerList.GetFightObject(randIndex))
229 | }
230 | break
231 | case EmImpactTargetOwnerAll: //己方全体
232 | pOwnerList := s.pCaster.GetOwnerList()
233 | if pOwnerList != nil {
234 | for i := 0; i < MaxMatrixCellCount; i++ {
235 | pFightObject := pOwnerList.GetFightObject(i)
236 | if pFightObject != nil && pFightObject.IsActive() {
237 | targetList.Add(pFightObject)
238 | }
239 | }
240 | }
241 | break
242 | case EmImpactTargetEnemySignle: //敌方个体
243 | targetList.Add(s.pTarget)
244 | break
245 | case EmImpactTargetEnemyFront: //敌方横排
246 | matrixIndex := s.pTarget.GetMatrixID()
247 | pEnemyList := s.pCaster.GetEnemyList()
248 | if pEnemyList != nil {
249 | frontTargetList := TargetList{}
250 | backTargetList := TargetList{}
251 | for i := 0; i < MaxMatrixCellCount/2; i++ {
252 | pFightObject := pEnemyList.GetFightObject(i)
253 | if pFightObject != nil && pFightObject.IsActive() {
254 | frontTargetList.Add(pFightObject)
255 | }
256 | }
257 | for i := MaxMatrixCellCount / 2; i < MaxMatrixCellCount; i++ {
258 | pFightObject := pEnemyList.GetFightObject(i)
259 | if pFightObject != nil && pFightObject.IsActive() {
260 | backTargetList.Add(pFightObject)
261 | }
262 | }
263 | pTarget := &frontTargetList
264 | if matrixIndex < MaxMatrixCellCount/2 {
265 | if frontTargetList.GetCount() <= 0 {
266 | pTarget = &backTargetList
267 | }
268 | } else {
269 | if backTargetList.GetCount() > 0 {
270 | pTarget = &backTargetList
271 | }
272 | }
273 | targetList = pTarget
274 |
275 | }
276 | break
277 | case EmImpactTargetEnemyBehind: //敌方后排
278 | pEnemyList := s.pCaster.GetEnemyList()
279 | if pEnemyList != nil {
280 | for i := MaxMatrixCellCount / 2; i < MaxMatrixCellCount; i++ {
281 | pFightObject := pEnemyList.GetFightObject(i)
282 | if pFightObject != nil && pFightObject.IsActive() {
283 | targetList.Add(pFightObject)
284 | }
285 | }
286 | if targetList.GetCount() == 0 {
287 | for i := 0; i < MaxMatrixCellCount/2; i++ {
288 | pFightObject := pEnemyList.GetFightObject(i)
289 | if pFightObject != nil && pFightObject.IsActive() {
290 | targetList.Add(pFightObject)
291 | }
292 | }
293 | }
294 | }
295 | break
296 | case EmImpactTargetEnemyAll: //敌方全体
297 | pEnemyList := s.pCaster.GetEnemyList()
298 | if pEnemyList != nil {
299 | for i := 0; i < MaxMatrixCellCount; i++ {
300 | pFightObject := pEnemyList.GetFightObject(i)
301 | if pFightObject != nil && pFightObject.IsActive() {
302 | targetList.Add(pFightObject)
303 | }
304 | }
305 | }
306 | break
307 | case EmImpactTargetEnemyLine: //敌方目标竖排
308 | matrixIndex := s.pTarget.GetMatrixID()
309 | lineIndex := (matrixIndex + MaxMatrixCellCount/2) % MaxMatrixCellCount
310 | targetList.Add(s.pTarget)
311 | pEnemyList := s.pCaster.GetEnemyList()
312 | if pEnemyList != nil {
313 | pFightObject := pEnemyList.GetFightObject(lineIndex)
314 | if pFightObject != nil && pFightObject.IsActive() {
315 | targetList.Add(pFightObject)
316 | }
317 | }
318 | break
319 | case EmImpactTargetEnemyAround: //敌方目标及周围
320 | matrixIndex := s.pTarget.GetMatrixID()
321 | lineIndex := (matrixIndex + MaxMatrixCellCount/2) % MaxMatrixCellCount
322 | targetList.Add(s.pTarget)
323 | pEnemyList := s.pCaster.GetEnemyList()
324 | if pEnemyList != nil {
325 | pFightObject := pEnemyList.GetFightObject(lineIndex)
326 | if pFightObject != nil && pFightObject.IsActive() {
327 | targetList.Add(pFightObject)
328 | }
329 | if (matrixIndex+1)*2%MaxMatrixCellCount > 0 {
330 | pFightObject = pEnemyList.GetFightObject(matrixIndex + 1)
331 | if pFightObject != nil && pFightObject.IsActive() {
332 | targetList.Add(pFightObject)
333 | }
334 | }
335 | if (matrixIndex-1) >= 0 && matrixIndex*2%MaxMatrixCellCount > 0 {
336 | pFightObject = pEnemyList.GetFightObject(matrixIndex - 1)
337 | if pFightObject != nil && pFightObject.IsActive() {
338 | targetList.Add(pFightObject)
339 | }
340 | }
341 | }
342 | break
343 | case EmImpactTargetEnemyBehinDone: //后排个体
344 | pEnemyList := s.pCaster.GetEnemyList()
345 | if pEnemyList != nil {
346 | frontIndex := s.pTarget.GetMatrixID() % (MaxMatrixCellCount / 2)
347 | //后排对线
348 | for i := 0; i < MaxMatrixCellCount/2; i++ {
349 | index := (frontIndex+i)&(MaxMatrixCellCount/2) + MaxMatrixCellCount/2
350 | pFightObject := pEnemyList.GetFightObject(index)
351 | if pFightObject != nil && pFightObject.IsActive() {
352 | targetList.Add(pFightObject)
353 | return true
354 | }
355 | }
356 | //前排对线
357 | for i := 0; i < MaxMatrixCellCount/2; i++ {
358 | index := (frontIndex + i) % (MaxMatrixCellCount / 2)
359 | pFightObject := pEnemyList.GetFightObject(index)
360 | if pFightObject != nil && pFightObject.IsActive() {
361 | targetList.Add(pFightObject)
362 | return true
363 | }
364 | }
365 | }
366 | break
367 | case EmImpactTargetOwnerMinHp: //己方血最少
368 | index := InvalidId
369 | nMinHP := InvalidValue
370 | pOwnerList := s.pCaster.GetOwnerList()
371 | if pOwnerList != nil {
372 | for i := 0; i < MaxMatrixCellCount; i++ {
373 | pFightObject := pOwnerList.GetFightObject(i)
374 | if pFightObject != nil && pFightObject.IsActive() {
375 | if nMinHP < 0 {
376 | nMinHP = pFightObject.GetHP()
377 | index = i
378 | }
379 | if nMinHP > pFightObject.GetHP() {
380 | nMinHP = pFightObject.GetHP()
381 | index = i
382 | }
383 | }
384 | }
385 | if index >= 0 {
386 | targetList.Add(pOwnerList.GetFightObject(index))
387 | }
388 | }
389 | break
390 | case EmImpactTargetOwnerMinMp: //己方蓝最少
391 | index := InvalidId
392 | nMinMP := InvalidValue
393 | pOwnerList := s.pCaster.GetOwnerList()
394 | if pOwnerList != nil {
395 | for i := 0; i < MaxMatrixCellCount; i++ {
396 | pFightObject := pOwnerList.GetFightObject(i)
397 | if pFightObject != nil && pFightObject.IsActive() {
398 | if nMinMP < 0 {
399 | nMinMP = pFightObject.GetMP()
400 | index = i
401 | }
402 | if nMinMP > pFightObject.GetMP() {
403 | nMinMP = pFightObject.GetMP()
404 | index = i
405 | }
406 | }
407 | }
408 | if index >= 0 {
409 | targetList.Add(pOwnerList.GetFightObject(index))
410 | }
411 | }
412 | break
413 | default:
414 | break
415 | }
416 | return true
417 | }
418 |
419 | func (s *Skill) CastSkill(nRound int) bool {
420 | //fmt.Println("技能攻击流程:")
421 | var (
422 | nRand int
423 | nConAttTimes int
424 | pRowImpact TableRowImpact
425 | pAttackInfo *AttackInfo
426 | pSkillAttack *SkillAttack
427 | impactInfo *ImpactInfo
428 | targetList *TargetList
429 | )
430 | pRow, err := s.GetSkillRow()
431 | if err != nil {
432 | panic(err)
433 | }
434 | s.pCaster.SetMP(s.pCaster.GetMP() - pRow.NeedMP)
435 | s.skillTime = nRound + pRow.CoolDownTime
436 |
437 | pAttackInfo = s.pCaster.GetAttackInfo()
438 | pAttackInfo.CastGuid = s.pCaster.GetGuid()
439 | pAttackInfo.Skilled = true
440 | pSkillAttack = pAttackInfo.AllocSkillAttack()
441 | if pSkillAttack == nil {
442 | fmt.Println("技能攻击信息为空")
443 | return false
444 | }
445 | pSkillAttack.SkillID = s.skillID
446 | pSkillAttack.SkillTarget = s.pTarget.GetGuid()
447 | pSkillAttack.CostMp = pRow.NeedMP
448 |
449 | //连击
450 | nConAttTimes = s.GetConAttTimes()
451 | for i := 0; i < MaxSkillImpactCount; i++ {
452 | nRand = rand.Intn(10000)
453 | if nRand <= pRow.ImpactRate[i] && pRow.ImpactID[i] > 0 {
454 | pRowImpact, err = ImpactTableRow(pRow.ImpactID[i])
455 | if err != nil {
456 | panic(err)
457 | }
458 | if !(pRowImpact.LogicID == 0 || pRowImpact.LogicID == 1) {
459 | nConAttTimes = 0
460 | }
461 | impactInfo = new(ImpactInfo)
462 | impactInfo.SkillID = s.skillID
463 | impactInfo.ImpactID = pRow.ImpactID[i]
464 | impactInfo.ConAttTimes = nConAttTimes
465 |
466 | targetList = new(TargetList)
467 | s.GetTargetList(EmImpactTarget(pRow.ImpactTargetType[i]), targetList)
468 | if targetList.GetCount() == 0 {
469 | continue
470 | }
471 | for i := 0; i < targetList.GetCount(); i++ {
472 | pTarget := targetList.GetFightObject(i)
473 | if pTarget != nil && pTarget.IsActive() {
474 | impactInfo.TargetList[impactInfo.TargetCount] = pTarget.GetGuid()
475 | impactInfo.TargetCount++
476 | }
477 | }
478 | pSkillAttack.AddImpactInfo(impactInfo)
479 | for index := 0; index < targetList.GetCount(); index++ {
480 | pTarget := targetList.GetFightObject(index)
481 | if pTarget != nil && pTarget.IsActive() {
482 | fmt.Println(pRow.ImpactID[i])
483 | pTarget.AddImpact(pRow.ImpactID[i], nConAttTimes, nRound, s.skillID, s.pCaster)
484 | }
485 | }
486 | }
487 | }
488 | return true
489 | }
490 |
491 | //魔法技能流程
492 | func (s *Skill) SkillLogic(nRound int) bool {
493 | bRet := s.IsValid()
494 | if bRet == false {
495 | fmt.Println("技能id不合法")
496 | return false
497 | }
498 | bRet = s.CheckCondition(nRound)
499 | if bRet == false {
500 | //fmt.Println("技能达不到释放要求")
501 | return false
502 | }
503 | bRet = s.SelectTarget()
504 | if bRet == false {
505 | fmt.Println("目标选择错误")
506 | return false
507 | }
508 | //fmt.Printf("技能信息: %+v \n", s.String())
509 | bRet = s.CastSkill(nRound)
510 | if bRet == false {
511 | fmt.Println("技能逻辑错误")
512 | return false
513 | }
514 | return true
515 | }
516 |
517 | //被动技能
518 | func (s *Skill) PassiveSkillLogic(nRound int) bool {
519 | bRet := s.IsValid()
520 | if bRet == false {
521 | return false
522 | }
523 | if nRound != 1 {
524 | return false
525 | }
526 | if s.skillType != EmSkillTypeHeroPassive && s.skillType != EmSkillTypeEquipPassive {
527 | return false
528 | }
529 | bRet = s.CheckCondition(nRound)
530 | if bRet == false {
531 | return false
532 | }
533 | bRet = s.SelectTarget()
534 | if bRet == false {
535 | return false
536 | }
537 | fmt.Println(s.String())
538 | bRet = s.CastSkill(nRound)
539 | if bRet == false {
540 | return false
541 | }
542 | return true
543 | }
544 |
545 | //装备技能逻辑
546 | func (s *Skill) EquipSkillLogic(nRound int, pTarget *FightObject) bool {
547 | if s.skillType != EmSkillTypeEquipActive {
548 | return false
549 | }
550 | if nRound < s.skillTime {
551 | return false
552 | }
553 | pRow, err := s.GetSkillRow()
554 | if err != nil {
555 | panic(err)
556 | }
557 | if s.pCaster.GetMP() < pRow.NeedMP {
558 | return false
559 | }
560 | nRand := rand.Intn(10001)
561 | if nRand > pRow.SkillRate {
562 | return false
563 | }
564 | bRet := s.SelectTarget()
565 | if bRet == false {
566 | return false
567 | }
568 | bRet = s.CastSkill(nRound)
569 | if bRet == false {
570 | return false
571 | }
572 | return true
573 | }
574 |
575 | func (s Skill) CanHit() bool {
576 | nHit := s.pCaster.GetHit() - s.pTarget.GetDodge()
577 | if nHit >= 100 {
578 | return true
579 | }
580 | if nHit <= 0 {
581 | return false
582 | }
583 | nRand := rand.Intn(101)
584 | if nRand <= nHit {
585 | return true
586 | }
587 | return false
588 | }
589 |
590 | func (s Skill) CanStrike() bool {
591 | nStrike := s.pCaster.GetStrike()
592 | if nStrike >= 100 {
593 | return true
594 | }
595 | if nStrike <= 0 {
596 | return false
597 | }
598 | nRand := rand.Intn(101)
599 | if nRand <= nStrike {
600 | return true
601 | }
602 | return false
603 | }
604 |
605 | func (s Skill) CanBackAttack() bool {
606 | nAttackBack := s.pTarget.GetAttackBack()
607 | if nAttackBack >= 100 {
608 | return true
609 | }
610 | if nAttackBack <= 0 {
611 | return false
612 | }
613 | nRand := rand.Intn(101)
614 | if nRand <= nAttackBack {
615 | return true
616 | }
617 | return false
618 | }
619 |
620 | func (s *Skill) CommonSkillLogic(nRound int) bool {
621 | //fmt.Println("普通攻击流程: ")
622 | pAttackInfo := s.pCaster.GetAttackInfo()
623 | bRet := s.SelectTarget()
624 |
625 | if bRet == false {
626 | pAttackInfo.CastGuid = InvalidId
627 | return false
628 | }
629 | pAttackInfo.CastGuid = s.pCaster.GetGuid()
630 |
631 | //命中
632 | bRet = s.CanHit()
633 | pAttackInfo.BHit = bRet
634 | if bRet == false {
635 | return false
636 | }
637 | s.pCaster.CastEquipSkill(nRound, s.pTarget)
638 | if !s.pTarget.IsActive() {
639 | pAttackInfo.Skilled = false
640 | return true
641 | }
642 |
643 | pAttackInfo.Skilled = false
644 | nPhysicAttack := s.pCaster.GetPhysicAttack()
645 | bStrike := s.CanStrike()
646 |
647 | pAttackInfo.BStrike = bStrike
648 | pAttackInfo.SkillTarget = s.pTarget.GetGuid()
649 | if bStrike {
650 | //暴击攻击力=当前攻击力*(1+自身暴击伤害/100)
651 | nPhysicAttack = int(nPhysicAttack * (1 + s.pCaster.GetStrikeHurt()/100));
652 | }
653 |
654 | pFightCell := s.pCaster.GetFightCell()
655 | if pFightCell.GetFightType() == EmTypeFightStair && s.pCaster.IsAttacker() {
656 | nPhysicAttack += nPhysicAttack * pFightCell.GetPlusAtt() / 100
657 | }
658 |
659 | nDefend := s.pTarget.GetPhysicDefend()
660 | nDecay := s.pTarget.GetPhysicHurtDecay()
661 | //本次物理攻击伤害=(自身当前经过暴击计算后的物理攻击-目标物理防御)*(1-目标物理伤害减免/100)*(1+物理攻击伤害浮动)
662 | nDamage := CalcDamage(nPhysicAttack, nDefend, nDecay)
663 | nDamage = ChkMin(nDamage, 0)
664 |
665 | s.pTarget.SetHP(s.pTarget.GetHP() - nDamage)
666 | pAttackInfo.SkillTarget = s.pTarget.GetGuid()
667 | pAttackInfo.Hurt = nDamage
668 |
669 | //反击
670 | if s.pTarget.IsActive() && s.CanBackAttack() {
671 | //反击伤害=自身攻击*反击衰减
672 | backAttack := s.pTarget.GetPhysicAttack() * s.pTarget.GetBackAttHurt() / 100
673 | s.pCaster.SetHP(s.pCaster.GetHP() - backAttack)
674 | pAttackInfo.BBackAttack = true
675 | pAttackInfo.BackAttackHurt = backAttack
676 | }
677 |
678 | //fmt.Println(pAttackInfo.String())
679 | return true
680 | }
681 |
--------------------------------------------------------------------------------
/Config/Equip.csv:
--------------------------------------------------------------------------------
1 | TableID,装备名称,装备名称颜色,装备描述,装备图标,等级需求,装备重量,装备点,物理攻击,物理防御,生命值,魔法值,附加属性1,附加数值1,附加属性2,附加数值2,附加属性3,附加数值3,附加属性4,附加数值4,触发技能类型,触发技能ID,触发技能CD,触发技能概率,购买价格,出售货币类型,出售价格,适应规则,职业需求,广播ID,脚本ID,装备升级需求等级,配方ID,掉落id,等级,是否可升级
2 | INT,STRING,STRING,STRING,STRING,INT,INT,INT,INT,INT,INT,INT,INT,INT,INT,INT,INT,INT,INT,INT,Int,INT,INT,INT,INT,INT,INT,INT,INT,INT,INT,INT,INT,INT,INT,INT
3 | 10010001,远行鞋,FFFFFF,重量200.,z_yuanxingxie.jpg,1,200,-1,-1,-1,-1,-1,3,8,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,2450,0,16,9,-1,-1,-1,-1,1001,-1,-1,-1
4 | 10010002,相位之靴,FFFFFF,重量80.,z_xiangweixie.jpg,1,80,-1,24,-1,-1,-1,3,5,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,1350,0,9,9,-1,-1,-1,-1,1002,-1,-1,-1
5 | 10010003,力量假腿,FFFFFF,重量80.,z_jiatuililiang.jpg,1,80,-1,8,-1,152,-1,3,4,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,1400,0,9,9,-1,-1,-1,-1,1003,-1,-1,-1
6 | 10010004,敏捷假腿,FFFFFF,重量80.,z_jiatuiminjie.jpg,1,80,-1,8,8,-1,-1,3,4,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,1400,0,9,9,-1,-1,-1,-1,1004,-1,-1,-1
7 | 10010005,智力假腿,FFFFFF,重量80.,z_jiatuizhili.jpg,1,80,-1,8,-1,-1,104,3,4,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,1400,0,9,9,-1,-1,-1,-1,1005,-1,-1,-1
8 | 10010006,空明杖,FFFFFF,重量61.,z_kongmingzhang.jpg,1,61,-1,21,-1,-1,129,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,1675,0,11,8,-1,-1,-1,-1,1006,-1,-1,-1
9 | 10010007,坚韧球,FFFFFF,重量100.,z_jianrenqiu.jpg,1,100,-1,10,-1,125,85,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,1750,0,11,8,-1,-1,-1,-1,1007,-1,-1,-1
10 | 10010008,穷鬼盾,FFFFFF,重量10.,z_qiongguidun.jpg,1,10,-1,6,16,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,550,0,3,9,-1,-1,-1,-1,1008,-1,-1,-1
11 | 10010009,护腕,FFFFFF,重量10.,z_huwan.jpg,1,10,-1,12,3,114,39,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,525,0,3,8,-1,-1,-1,-1,1009,-1,-1,-1
12 | 10010010,幽灵系带,FFFFFF,重量10.,z_youlingxidai.jpg,1,10,-1,12,6,57,39,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,485,0,3,8,-1,-1,-1,-1,1010,-1,-1,-1
13 | 10010011,空灵挂件,FFFFFF,重量10.,z_guajian.jpg,1,10,-1,12,3,57,78,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,480,0,3,8,-1,-1,-1,-1,1011,-1,-1,-1
14 | 10010012,魔杖,FFFFFF,重量10.,z_damobang.jpg,1,10,-1,9,3,100,100,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,509,0,3,9,-1,-1,-1,-1,1012,-1,-1,-1
15 | 10010013,梅肯斯姆,FFFFFF,增加己方全体250点生命上限,该效果不可叠加。重量125.,z_meikensimu.jpg,1,125,-1,5,30,195,65,-1,-1,-1,-1,-1,-1,-1,-1,0,108401,-1,-1,2306,0,15,9,-1,-1,-1,-1,1013,-1,-1,1
16 | 10010014,秘法鞋,FFFFFF,被动增加己方全体魔法值上限270,该效果不可叠加。重量66.,z_mifaxie.jpg,1,66,-1,-1,-1,-1,250,3,3,-1,-1,-1,-1,-1,-1,0,108501,-1,-1,1450,0,9,9,-1,-1,-1,-1,1014,-1,-1,1
17 | 10010015,天鹰之戒,FFFFFF,重量30.,z_tianyingzhijie.jpg,1,30,-1,21,21,57,73,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,985,0,6,9,-1,-1,-1,-1,1015,-1,-1,-1
18 | 10010016,玄冥盾牌,FFFFFF,重量25.,z_xuanmingdunpai.jpg,1,25,-1,6,25,38,26,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,803,0,5,8,-1,-1,-1,-1,1101,-1,-1,-1
19 | 10010017,圣殿指环,FFFFFF,重量10.,z_wangzhezhijie.jpg,1,10,-1,6,15,-1,26,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,500,0,3,8,-1,-1,-1,-1,1102,-1,-1,-1
20 | 10010018,卡嘉之洞察长笛,FFFFFF,魔免上限为60,重量120.,z_dizi.jpg,1,120,-1,-1,-1,250,-1,21,40,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,3628,0,24,9,-1,-1,-1,-1,1103,-1,-1,1
21 | 10010019,回复头巾,FFFFFF,重量10.,z_huifutoujin.jpg,1,10,-1,6,2,113,26,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,603,0,4,8,-1,-1,-1,-1,1104,-1,-1,-1
22 | 10010020,勇气勋章,FFFFFF,对敌方单体英雄削弱物理防御力25持续7回合。重量30.,z_yongqixunzhang.jpg,1,30,-1,-1,25,-1,34,-1,-1,-1,-1,-1,-1,-1,-1,1,108601,7,10000,1075,0,7,9,-1,-1,-1,-1,1105,-1,-1,-1
23 | 10010021,古之忍耐姜歌,FFFFFF,为己方所有单位增加1的攻击速度,该效果不可叠加。重量100.,z_guzhirennaijiangge.jpg,1,100,-1,30,9,171,117,3,1,-1,-1,-1,-1,-1,-1,0,108701,-1,-1,1726,0,11,9,-1,-1,-1,-1,1106,-1,-1,1
24 | 10010022,静谧之鞋,FFFFFF,施展回春,为自己恢复170点生命值。重量40.,z_jingmizhixie.jpg,1,40,-1,-1,15,75,-1,3,5,-1,-1,-1,-1,-1,-1,1,108801,60,10000,975,0,6,9,-1,-1,-1,-1,1107,-1,-1,-1
25 | 10010023,羊刀,FFFFFF,将敌方单位变成青蛙,持续5回合。重量620.,z_yangdao.jpg,1,620,-1,35,10,190,659,-1,-1,-1,-1,-1,-1,-1,-1,1,108901,35,10000,5675,0,38,9,-1,-1,-1,-1,1108,-1,-1,1
26 | 10010024,紫怨,FFFFFF,使敌方单体在20回合内减少魔法伤害减免20%。重量173.,z_ziyuan.jpg,1,173,-1,55,-1,-1,427,-1,-1,-1,-1,-1,-1,-1,-1,1,109001,25,10000,4125,0,27,9,-1,-1,-1,-1,1109,-1,-1,1
27 | 10010025,风杖,FFFFFF,重量248.,z_fengzhang.jpg,1,248,-1,10,-1,-1,232,3,3,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,2700,0,18,9,-1,-1,-1,-1,1110,-1,-1,-1
28 | 10010026,红杖,FFFFFF,对敌方单体使用能量冲击造成400点魔法伤害。重量165.,z_hongzhang.jpg,1,165,-1,30,3,57,195,-1,-1,-1,-1,-1,-1,-1,-1,1,109101,40,10000,2780,0,18,9,-1,-1,-1,-1,1111,-1,-1,1
29 | 10010027,死灵书,FFFFFF,召唤死灵减少敌方单体目标200点法力值和生命值。重量165.,z_silingshu.jpg,1,165,-1,20,-1,114,195,-1,-1,-1,-1,-1,-1,-1,-1,1,109201,80,10000,2700,0,18,9,-1,-1,-1,-1,1112,-1,-1,1
30 | 10010028,A杖,FFFFFF,重量260.,z_azhang.jpg,1,260,-1,30,10,390,280,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,4200,0,28,9,-1,-1,-1,-1,1113,-1,-1,-1
31 | 10010029,纷争面纱,FFFFFF,减少敌方全体10%魔法伤害减免,持续20回合。重量173.,z_fenzhengmiansha.jpg,1,173,-1,12,6,150,156,-1,-1,-1,-1,-1,-1,-1,-1,1,109301,30,10000,3100,0,20,9,-1,-1,-1,-1,1114,-1,-1,1
32 | 10010030,阿托斯之棍,FFFFFF,使敌方单体减少攻击速度60%,持续3回合。重量260.,z_atuosizhigun.jpg,1,260,-1,25,-1,325,325,-1,-1,-1,-1,-1,-1,-1,-1,1,109401,16,10000,3100,0,20,9,-1,-1,-1,-1,1115,-1,-1,-1
33 | 10010031,强袭装甲,FFFFFF,减少敌方物理防御25点和物理免疫15点,不可叠加。重量580.,z_qiangxi.jpg,1,580,-1,-1,75,-1,-1,3,3,-1,-1,-1,-1,-1,-1,0,109501,-1,-1,5350,0,35,9,-1,-1,-1,-1,1201,-1,-1,1
34 | 10010032,魔龙之心,FFFFFF,重量580.,z_molongzhixin.jpg,1,580,-1,40,-1,1060,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,5500,0,36,8,-1,-1,-1,-1,1202,-1,-1,1
35 | 10010033,黑皇杖,FFFFFF,使自身免受50%魔法伤害,魔免上限为60。重量216.,z_heihuang.jpg,1,216,-1,34,-1,190,-1,-1,-1,-1,-1,-1,-1,-1,-1,1,109601,55,10000,3900,0,26,9,-1,-1,-1,-1,1203,-1,-1,1
36 | 10010034,西瓦的守护,FFFFFF,对敌方全体使用极寒冲击,造成400点魔法伤害。重量560.,z_xiwa.jpg,1,560,-1,30,75,-1,390,-1,-1,-1,-1,-1,-1,-1,-1,1,109701,30,10000,4700,0,31,9,-1,-1,-1,-1,1204,-1,-1,1
37 | 10010035,血精石,FFFFFF,重量311.,z_xuejingshi.jpg,1,311,-1,-1,-1,725,536,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,5050,0,33,9,-1,-1,-1,-1,1205,-1,-1,1
38 | 10010036,林肯法球,FFFFFF,重量580.,z_linkenfaqiu.jpg,1,580,-1,45,15,435,297,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,5175,0,34,9,-1,-1,-1,-1,1206,-1,-1,-1
39 | 10010037,先锋盾,FFFFFF,物理免疫上限为60,重量93.,z_xianfengdun.jpg,1,93,-1,-1,28,400,-1,15,10,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,2225,0,15,9,-1,-1,-1,-1,1207,-1,-1,1
40 | 10010038,振魂石,FFFFFF,重量260.,z_zhenhunshi.jpg,1,260,-1,-1,-1,550,468,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,3300,0,22,8,-1,-1,-1,-1,1208,-1,-1,-1
41 | 10010039,挑战头巾,FFFFFF,魔免上限为60,重量100.,z_tiaozhan.jpg,1,100,-1,-1,-1,200,-1,21,30,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,2125,0,14,8,-1,-1,-1,-1,1209,-1,-1,-1
42 | 10010040,幻影斧,FFFFFF,对敌方单体造成物理攻击3倍再附加100的伤害。重量560.,z_huanyingfu.jpg,1,560,-1,46,26,190,130,3,3,-1,-1,-1,-1,-1,-1,1,109801,35,10000,5050,0,33,9,-1,-1,-1,-1,1210,-1,-1,1
43 | 10010041,散夜对剑,FFFFFF,使目标残废,削弱其攻击速度30%,持续3回合。重量173.,z_duijian.jpg,1,173,-1,44,16,304,-1,3,3,-1,-1,-1,-1,-1,-1,1,109901,0,1500,4100,0,27,9,-1,-1,-1,-1,1211,-1,-1,1
44 | 10010042,撒旦之邪力,FFFFFF,主动使用不洁狂热使自身恢复500点生命值。重量620.,z_sadanzhixieli.jpg,1,620,-1,45,25,475,-1,-1,-1,-1,-1,-1,-1,-1,-1,1,110001,35,10000,6150,0,41,9,-1,-1,-1,-1,1212,-1,-1,1
45 | 10010043,雷神之锤,FFFFFF,连环闪电使敌方全体受到200点魔法伤害。重量580.,z_dadiancui.jpg,1,580,-1,24,-1,-1,-1,3,8,-1,-1,-1,-1,-1,-1,1,110101,30,10000,5500,0,36,9,-1,-1,-1,-1,1213,-1,-1,1
46 | 10010044,斯嘉蒂之眼,FFFFFF,霜冻使敌方单体减少速度20%,持续3回合。重量620.,z_bingyan.jpg,1,620,-1,75,75,725,575,-1,-1,-1,-1,-1,-1,-1,-1,1,110201,0,10000,5850,0,39,9,-1,-1,-1,-1,1214,-1,-1,1
47 | 10010045,散华,FFFFFF,使目标残废,削弱其攻击速度20%,持续3回合。重量100.,z_sanhua.jpg,1,100,-1,26,-1,304,-1,-1,-1,-1,-1,-1,-1,-1,-1,1,110301,0,1500,2050,0,13,9,-1,-1,-1,-1,1215,-1,-1,-1
48 | 10010046,夜叉,FFFFFF,重量100.,z_yecha.jpg,1,100,-1,16,16,-1,-1,3,3,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,2050,0,13,9,-1,-1,-1,-1,1301,-1,-1,-1
49 | 10010047,支配头盔,FFFFFF,攻击敌人使自身瞬间恢复100点生命值。重量100.,z_zhipei.jpg,1,100,-1,20,25,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,1,110401,0,10000,1850,0,12,9,-1,-1,-1,-1,1302,-1,-1,-1
50 | 10010048,漩涡,FFFFFF,连环闪电使敌方全体受到120点魔法伤害。重量248.,z_leicui.jpg,1,248,-1,24,-1,-1,-1,3,3,-1,-1,-1,-1,-1,-1,1,110501,0,2500,2700,0,18,9,-1,-1,-1,-1,1303,-1,-1,-1
51 | 10010049,黯灭,FFFFFF,减少单体物理防御30点物理免疫30点,持续15回合。重量173.,z_anmie.jpg,1,173,-1,60,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,1,110601,0,10000,4100,0,27,9,-1,-1,-1,-1,1304,-1,-1,1
52 | 10010050,散失之刃,FFFFFF,使敌方目标受到100点伤害,并减少100点魔法值。重量173.,z_sanshi.jpg,1,173,-1,22,22,-1,78,-1,-1,-1,-1,-1,-1,-1,-1,1,110701,0,10000,3300,0,22,9,-1,-1,-1,-1,1305,-1,-1,1
53 | 10010051,天堂之戟,FFFFFF,使目标残废,削弱其攻击速度20%,持续3回合。重量277.,z_tiantangzhiji.jpg,1,277,-1,40,-1,380,-1,7,25,-1,-1,-1,-1,-1,-1,1,110801,0,1500,3950,0,26,9,-1,-1,-1,-1,1306,-1,-1,1
54 | 10010052,圣剑,FFFFFF,重量900.,z_shengjian.jpg,1,900,-1,250,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,6200,0,66,8,-1,-1,-1,-1,1307,-1,-1,1
55 | 10010053,金箍棒,FFFFFF,猛击对方单体目标使其受到300点伤害。重量580.,z_jingubang.jpg,1,580,-1,80,-1,-1,-1,6,100,-1,-1,-1,-1,-1,-1,1,110901,0,3500,5400,0,36,9,-1,-1,-1,-1,1308,-1,-1,1
56 | 10010054,辉耀,FFFFFF,使敌方全体受到每2回合90点的持续伤害,不可叠加。重量200.,z_huiyao.jpg,1,200,-1,60,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,0,111001,-1,-1,5150,0,34,9,-1,-1,-1,-1,1309,-1,-1,1
57 | 10010055,蝴蝶,FFFFFF,重量620.,z_hudie.jpg,1,620,-1,60,30,-1,-1,3,6,7,30,-1,-1,-1,-1,-1,-1,-1,-1,6000,0,40,9,-1,-1,-1,-1,1310,-1,-1,1
58 | 10010056,大炮,FFFFFF,重量620.,z_dapao.jpg,1,620,-1,81,-1,-1,-1,8,25,14,240,-1,-1,-1,-1,-1,-1,-1,-1,5600,0,37,9,-1,-1,-1,-1,1311,-1,-1,1
59 | 10010057,碎骨锤,FFFFFF,主动使用使敌方眩晕2回合。重量248.,z_suiguchui.jpg,1,248,-1,46,-1,114,-1,-1,-1,-1,-1,-1,-1,-1,-1,1,111101,0,2500,2950,0,19,9,-1,-1,-1,-1,1312,-1,-1,-1
60 | 10010058,狂战斧,FFFFFF,溅射使敌方目标周围受到自身攻击50%伤害。重量173.,z_kuangzhan.jpg,1,173,-1,65,-1,150,102,-1,-1,-1,-1,-1,-1,-1,-1,1,111201,0,10000,4350,0,29,9,-1,-1,-1,-1,1313,-1,-1,1
61 | 10010059,深渊之刃,FFFFFF,主动使用压服使敌方单体目标眩晕3回合。重量620.,z_shenyuanzhiren.jpg,1,620,-1,110,-1,190,-1,-1,-1,-1,-1,-1,-1,-1,-1,1,111301,60,10000,6750,0,45,9,-1,-1,-1,-1,1314,-1,-1,1
62 | 10010060,水晶剑,FFFFFF,重量260.,z_shuijingjian.jpg,1,260,-1,30,-1,-1,-1,8,20,14,175,-1,-1,-1,-1,-1,-1,-1,-1,2150,0,14,9,-1,-1,-1,-1,1315,-1,-1,-1
63 | 10010061,攻击之爪,FFFFFF,重量9.,z_gongjizhizhua.jpg,1,9,-1,9,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,450,0,3,8,-1,-1,-1,-1,-1,100411,-1,-1
64 | 10010062,大剑,FFFFFF,重量90.,z_dajian.jpg,1,90,-1,21,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,1400,0,9,8,-1,-1,-1,-1,-1,2,-1,-1
65 | 10010063,阔剑,FFFFFF,重量90.,z_kuojian.jpg,1,90,-1,18,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,1200,0,8,8,-1,-1,-1,-1,-1,2,-1,-1
66 | 10010064,短棍,FFFFFF,重量40.,z_duangun.jpg,1,40,-1,10,-1,-1,-1,3,1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,900,0,6,8,-1,-1,-1,-1,-1,1,-1,-1
67 | 10010065,守护指环,FFFFFF,重量4.,z_shouhuzhihuan.jpg,1,4,-1,-1,10,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,175,0,1,8,-1,-1,-1,-1,-1,100208,-1,-1
68 | 10010066,圆盾,FFFFFF,重量5.,z_xiaoyuandun.jpg,1,5,-1,-1,12,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,250,0,1,8,-1,-1,-1,-1,-1,100204,-1,-1
69 | 10010067,标枪,FFFFFF,主动使用对敌方单体造成40点伤害。重量90.,z_biaoqiang.jpg,1,90,-1,21,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,1,111401,0,2000,1500,0,10,8,-1,-1,-1,-1,-1,3,-1,-1
70 | 10010068,秘银锤,FFFFFF,重量90.,z_miyancui.jpg,1,90,-1,24,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,1600,0,10,8,-1,-1,-1,-1,-1,3,-1,-1
71 | 10010069,锁子甲,FFFFFF,重量20.,z_suozijia.jpg,1,20,-1,-1,25,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,550,0,3,8,-1,-1,-1,-1,-1,100510,-1,-1
72 | 10010070,铁意头盔,FFFFFF,重量50.,z_tieyitoukui.jpg,1,50,-1,-1,25,75,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,950,0,6,8,-1,-1,-1,-1,-1,1,-1,-1
73 | 10010071,板甲,FFFFFF,重量90.,z_banjia.jpg,1,90,-1,-1,50,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,1400,0,9,8,-1,-1,-1,-1,-1,2,-1,-1
74 | 10010072,力量拳套,FFFFFF,重量3.,z_quantao.jpg,1,3,-1,3,-1,57,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,150,0,3,8,-1,-1,-1,-1,-1,100102,-1,-1
75 | 10010073,敏捷便鞋,FFFFFF,重量3.,z_minjiebianxie.jpg,1,3,-1,3,3,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,150,0,3,8,-1,-1,-1,-1,-1,100103,-1,-1
76 | 10010074,智力斗篷,FFFFFF,重量3.,z_zhilidoupeng.jpg,1,3,-1,3,-1,-1,39,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,150,0,3,8,-1,-1,-1,-1,-1,100104,-1,-1
77 | 10010075,铁树枝干,FFFFFF,重量1.,z_shuzhi.jpg,1,1,-1,3,1,19,13,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,53,0,1,8,-1,-1,-1,-1,-1,100001,-1,-1
78 | 10010076,巨人力量腰带,FFFFFF,重量9.,z_jurenliliangyaodai.jpg,1,9,-1,6,-1,114,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,450,0,3,8,-1,-1,-1,-1,-1,100406,-1,-1
79 | 10010077,精灵皮靴,FFFFFF,重量9.,z_jinglingpixue.jpg,1,9,-1,6,6,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,450,0,3,8,-1,-1,-1,-1,-1,100410,-1,-1
80 | 10010078,法师长袍,FFFFFF,重量9.,z_fashichangpao.jpg,1,9,-1,6,-1,-1,78,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,450,0,3,8,-1,-1,-1,-1,-1,100411,-1,-1
81 | 10010079,贵族圆环,FFFFFF,重量4.,z_guizuyuanhuan.jpg,1,4,-1,6,2,38,26,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,185,0,1,8,-1,-1,-1,-1,-1,100105,-1,-1
82 | 10010080,食人魔之斧,FFFFFF,重量50.,z_shirenmozhifu.jpg,1,50,-1,10,-1,190,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,1000,0,6,8,-1,-1,-1,-1,-1,2,-1,-1
83 | 10010081,欢欣之刃,FFFFFF,重量50.,z_huanxinzhiren.jpg,1,50,-1,10,10,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,1000,0,6,8,-1,-1,-1,-1,-1,2,-1,-1
84 | 10010082,魔力法杖,FFFFFF,重量50.,z_molifazhang.jpg,1,50,-1,10,-1,-1,130,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,1000,0,6,8,-1,-1,-1,-1,-1,2,-1,-1
85 | 10010083,极限法球,FFFFFF,重量100.,z_jixianfaqiu.jpg,1,100,-1,30,10,190,130,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,2100,0,14,8,-1,-1,-1,-1,-1,4,-1,-1
86 | 10010084,加速手套,FFFFFF,重量10.,z_jiasushoutao .jpg,1,10,-1,-1,-1,-1,-1,3,2,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,500,0,3,8,-1,-1,-1,-1,-1,100511,-1,-1
87 | 10010085,死亡面具,FFFFFF,攻击使自身恢复50点生命值。重量40.,z_siwangmianju.jpg,1,40,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,1,111501,0,10000,900,0,6,9,-1,-1,-1,-1,-1,1,-1,-1
88 | 10010086,跳刀,FFFFFF,重量100.,z_tiaodao.jpg,1,100,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,2150,0,14,9,-1,-1,-1,-1,-1,-1,-1,-1
89 | 10010087,艺人面罩,FFFFFF,重量7.,z_yirenmianzhao.jpg,1,7,-1,-1,-1,-1,34,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,325,0,2,8,-1,-1,-1,-1,-1,100204,-1,-1
90 | 10010088,速度之靴,FFFFFF,重量9.,z_xie.jpg,1,9,-1,-1,-1,-1,-1,3,3,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,450,0,3,9,-1,-1,-1,-1,-1,100310,-1,-1
91 | 10010089,流浪法师斗篷,FFFFFF,魔免上限为60,重量20.,z_doupeng.jpg,1,20,-1,-1,-1,-1,-1,21,15,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,550,0,3,9,-1,-1,-1,-1,-1,100511,-1,-1
92 | 10010090,魔棒,FFFFFF,重量4.,z_mobang.jpg,1,4,-1,-1,-1,60,60,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,200,0,1,9,-1,-1,-1,-1,-1,100106,-1,-1
93 | 10010091,闪避护符,FFFFFF,重量90.,z_shanbihufu.jpg,1,90,-1,-1,-1,-1,-1,7,25,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,1800,0,12,9,-1,-1,-1,-1,-1,3,-1,-1
94 | 10010092,绿杖,FFFFFF,使自己受到物理伤害减少30%,物免上限为60,重量260.,z_lvzhang.jpg,1,260,-1,21,7,133,91,-1,-1,-1,-1,-1,-1,-1,-1,0,111601,30,10000,1600,0,10,9,-1,-1,-1,-1,-1,3,-1,1
95 | 10010093,暗影护符,FFFFFF,重量90.,z_anyinghufu.jpg,1,90,-1,-1,-1,-1,-1,3,4,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,1600,0,10,9,-1,-1,-1,-1,-1,3,-1,-1
96 | 10010094,小净化药水,FFFFFF,重量1.,z_jinghuayaoshui.jpg,1,1,-1,-1,-1,-1,100,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,50,0,1,9,-1,-1,-1,-1,-1,100002,-1,-1
97 | 10010095,治疗药膏,FFFFFF,重量2.,z_dayao.jpg,1,2,-1,-1,-1,200,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,100,0,2,9,-1,-1,-1,-1,-1,100101,-1,-1
98 | 10010096,艾西非的远古祭祀,FFFFFF,重量1.,z_aixifeideyuangujishi.jpg,1,1,-1,-1,-1,90,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,30,0,1,9,-1,-1,-1,-1,-1,100003,-1,-1
99 | 10010097,魔瓶,FFFFFF,重量10.,z_pingzi.jpg,1,10,-1,-1,-1,200,100,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,600,0,4,9,-1,-1,-1,-1,-1,100209,-1,-1
100 | 10010098,恶魔刀锋,FFFFFF,重量150.,z_emodaofeng.jpg,1,150,-1,46,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,2400,0,16,8,-1,-1,-1,-1,-1,4,-1,-1
101 | 10010099,圣者遗物,FFFFFF,重量260.,z_shengzheyiwu.jpg,1,260,-1,60,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,3800,0,25,8,-1,-1,-1,-1,-1,4,-1,-1
102 | 10010100,鹰角弓,FFFFFF,重量150.,z_yingjiaogong.jpg,1,150,-1,25,25,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,3300,0,22,8,-1,-1,-1,-1,-1,4,-1,-1
103 | 10010101,希梅斯特的掠夺,FFFFFF,重量150.,z_meisaisidelueduo.jpg,1,150,-1,25,-1,475,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,3200,0,21,8,-1,-1,-1,-1,-1,4,-1,-1
104 | 10010102,神秘法杖,FFFFFF,重量150.,z_shenmifazhang.jpg,1,150,-1,25,-1,-1,325,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,2700,0,18,8,-1,-1,-1,-1,-1,4,-1,-1
105 | 10010103,振奋宝石,FFFFFF,重量100.,z_zhenfenbaoshi.jpg,1,100,-1,-1,-1,-1,-1,3,4,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,2100,0,14,8,-1,-1,-1,-1,-1,4,-1,-1
106 | 10010104,虚无宝石,FFFFFF,重量40.,z_xuwubaoshi.jpg,1,40,-1,-1,-1,-1,68,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,875,0,6,8,-1,-1,-1,-1,-1,100607,-1,-1
107 | 10010105,治疗指环,FFFFFF,重量40.,z_zhiliaozhihuan.jpg,1,40,-1,-1,-1,125,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,875,0,6,8,-1,-1,-1,-1,-1,100608,-1,-1
108 | 10010106,活力之球,FFFFFF,重量50.,z_huolizhiqiu.jpg,1,50,-1,-1,-1,250,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,1100,0,7,8,-1,-1,-1,-1,-1,2,-1,-1
109 | 10010107,能量之球,FFFFFF,重量50.,z_nengliangzhiqiu.jpg,1,50,-1,-1,-1,-1,250,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,1000,0,6,8,-1,-1,-1,-1,-1,2,-1,-1
110 | 10010108,精气之球,FFFFFF,重量50.,z_jingqizhiqiu.jpg,1,50,-1,-1,-1,200,150,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,1200,0,8,8,-1,-1,-1,-1,-1,2,-1,-1
111 | 10010109,淬毒之珠,FFFFFF,使敌方攻击速度减少2点,持续3回合。重量20.,z_cuiduzhizhu.jpg,1,20,-1,4,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,1,111701,0,10000,275,0,2,9,-1,-1,-1,-1,-1,1,-1,-1
112 | 10010110,回复戒指,FFFFFF,重量7.,z_huifujiezhi.jpg,1,7,-1,-1,-1,50,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,350,0,2,8,-1,-1,-1,-1,-1,100506,-1,-1
113 | 10011001,远行鞋卷轴,FFFFFF,重量57.,z_yuanxingxie.jpg,1,57,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,2000,0,13,8,-1,-1,-1,-1,-1,3,-3,-1
114 | 10011002,黯灭卷轴,FFFFFF,重量28.,z_anmie.jpg,1,28,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,900,0,6,8,-1,-1,-1,-1,-1,3,-3,-1
115 | 10011003,大炮卷轴,FFFFFF,重量31.,z_dapao.jpg,1,31,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,1000,0,6,8,-1,-1,-1,-1,-1,4,-3,-1
116 | 10011004,纷争面纱卷轴,FFFFFF,重量38.,z_fenzhengmiansha.jpg,1,38,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,1250,0,8,8,-1,-1,-1,-1,-1,2,-3,-1
117 | 10011005,风杖卷轴,FFFFFF,重量18.,z_fengzhang.jpg,1,18,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,500,0,3,8,-1,-1,-1,-1,-1,2,-3,-1
118 | 10011006,古之忍耐姜歌卷轴,FFFFFF,重量25.,z_guzhirennaijiangge.jpg,1,25,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,750,0,5,8,-1,-1,-1,-1,-1,1,-3,-1
119 | 10011007,黑皇杖卷轴,FFFFFF,重量39.,z_heihuang.jpg,1,39,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,1300,0,8,8,-1,-1,-1,-1,-1,3,-3,-1
120 | 10011008,红杖卷轴,FFFFFF,重量39.,z_hongzhang.jpg,1,39,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,1350,0,8,8,-1,-1,-1,-1,-1,2,-3,-1
121 | 10011009,护腕卷轴,FFFFFF,重量9.,z_huwan.jpg,1,9,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,190,0,3,8,-1,-1,-1,-1,-1,100310,-3,-1
122 | 10011010,幻影斧卷轴,FFFFFF,重量28.,z_huanyingfu.jpg,1,28,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,900,0,6,8,-1,-1,-1,-1,-1,4,-3,-1
123 | 10011011,辉耀卷轴,FFFFFF,重量40.,z_huiyao.jpg,1,40,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,1350,0,9,8,-1,-1,-1,-1,-1,4,-3,-1
124 | 10011012,回复头巾卷轴,FFFFFF,重量10.,z_huifutoujin.jpg,1,10,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,200,0,1,8,-1,-1,-1,-1,-1,100506,-3,-1
125 | 10011013,卡嘉之洞察长笛卷轴,FFFFFF,重量28.,z_dizi.jpg,1,28,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,900,0,6,8,-1,-1,-1,-1,-1,3,-3,-1
126 | 10011014,空灵挂件卷轴,FFFFFF,重量8.,z_guajian.jpg,1,8,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,145,0,2,8,-1,-1,-1,-1,-1,100305,-3,-1
127 | 10011015,雷神之锤卷轴,FFFFFF,重量21.,z_dadiancui.jpg,1,21,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,600,0,4,8,-1,-1,-1,-1,-1,4,-3,-1
128 | 10011016,林肯法球卷轴,FFFFFF,重量39.,z_linkenfaqiu.jpg,1,39,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,1325,0,8,8,-1,-1,-1,-1,-1,4,-3,-1
129 | 10011017,梅肯斯姆卷轴,FFFFFF,重量28.,z_meikensimu.jpg,1,28,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,900,0,6,8,-1,-1,-1,-1,-1,100809,-3,-1
130 | 10011018,魔龙之心卷轴,FFFFFF,重量36.,z_molongzhixin.jpg,1,36,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,1200,0,8,8,-1,-1,-1,-1,-1,4,-3,-1
131 | 10011019,魔杖卷轴,FFFFFF,重量9.,z_damobang.jpg,1,9,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,150,0,3,8,-1,-1,-1,-1,-1,100208,-3,-1
132 | 10011020,强袭装甲卷轴,FFFFFF,重量39.,z_qiangxi.jpg,1,39,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,1300,0,8,8,-1,-1,-1,-1,-1,4,-3,-1
133 | 10011021,撒旦之邪力卷轴,FFFFFF,重量34.,z_sadanzhixieli.jpg,1,34,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,1100,0,7,8,-1,-1,-1,-1,-1,4,-3,-1
134 | 10011022,散华卷轴,FFFFFF,重量21.,z_sanhua.jpg,1,21,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,600,0,4,8,-1,-1,-1,-1,-1,1,-3,-1
135 | 10011023,散失之刃卷轴,FFFFFF,重量27.,z_sanshi.jpg,1,27,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,850,0,5,8,-1,-1,-1,-1,-1,2,-3,-1
136 | 10011024,水晶剑卷轴,FFFFFF,重量18.,z_shuijingjian.jpg,1,18,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,500,0,3,8,-1,-1,-1,-1,-1,1,-3,-1
137 | 10011025,死灵书卷轴,FFFFFF,重量38.,z_silingshu.jpg,1,38,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,1250,0,8,8,-1,-1,-1,-1,-1,2,-3,-1
138 | 10011026,碎骨锤卷轴,FFFFFF,重量31.,z_suiguchui.jpg,1,31,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,1000,0,6,8,-1,-1,-1,-1,-1,2,-3,-1
139 | 10011027,西瓦的守护卷轴,FFFFFF,重量21.,z_xiwa.jpg,1,21,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,600,0,4,8,-1,-1,-1,-1,-1,3,-3,-1
140 | 10011028,玄冥盾牌卷轴,FFFFFF,重量10.,z_xuanmingdunpai.jpg,1,10,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,200,0,1,8,-1,-1,-1,-1,-1,100510,-3,-1
141 | 10011029,漩涡卷轴,FFFFFF,重量21.,z_leicui.jpg,1,21,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,600,0,4,8,-1,-1,-1,-1,-1,2,-3,-1
142 | 10011030,夜叉卷轴,FFFFFF,重量21.,z_yecha.jpg,1,21,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,600,0,4,8,-1,-1,-1,-1,-1,1,-3,-1
143 | 10011031,勇气勋章卷轴,FFFFFF,重量10.,z_yongqixunzhang.jpg,1,10,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,200,0,1,8,-1,-1,-1,-1,-1,1,-3,-1
144 | 10011032,幽灵系带卷轴,FFFFFF,重量9.,z_youlingxidai.jpg,1,9,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,150,0,3,8,-1,-1,-1,-1,-1,100309,-3,-1
145 | 10011033,紫怨卷轴,FFFFFF,重量25.,z_ziyuan.jpg,1,25,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,775,0,5,8,-1,-1,-1,-1,-1,3,-3,-1
146 | 10012001,大剑碎片,FFFFFF,重量15.,z_dajian.jpg,2,15,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,775,0,1,8,-1,-1,-1,-1,-1,101710,-2,-1
147 | 10012002,阔剑碎片,FFFFFF,重量15.,z_kuojian.jpg,3,15,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,775,0,1,8,-1,-1,-1,-1,-1,101610,-2,-1
148 | 10012003,短棍碎片,FFFFFF,重量15.,z_duangun.jpg,4,15,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,775,0,1,8,-1,-1,-1,-1,-1,101107,-2,-1
149 | 10012004,标枪碎片,FFFFFF,重量15.,z_biaoqiang.jpg,5,15,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,775,0,1,8,-1,-1,-1,-1,-1,101807,-2,-1
150 | 10012005,秘银锤碎片,FFFFFF,重量15.,z_miyancui.jpg,6,15,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,775,0,1,8,-1,-1,-1,-1,-1,101810,-2,-1
151 | 10012006,铁意头盔碎片,FFFFFF,重量15.,z_tieyitoukui.jpg,7,15,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,775,0,1,8,-1,-1,-1,-1,-1,101014,-2,-1
152 | 10012007,食人魔之斧碎片,FFFFFF,重量15.,z_shirenmozhifu.jpg,8,15,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,775,0,1,8,-1,-1,-1,-1,-1,101409,-2,-1
153 | 10012008,欢欣之刃碎片,FFFFFF,重量15.,z_huanxinzhiren.jpg,9,15,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,775,0,1,8,-1,-1,-1,-1,-1,101412,-2,-1
154 | 10012009,魔力法杖碎片,FFFFFF,重量15.,z_molifazhang.jpg,10,15,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,775,0,1,8,-1,-1,-1,-1,-1,101210,-2,-1
155 | 10012010,死亡面具碎片,FFFFFF,重量15.,z_siwangmianju.jpg,11,15,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,775,0,1,8,-1,-1,-1,-1,-1,101012,-2,-1
156 | 10012012,活力之球碎片,FFFFFF,重量15.,z_huolizhiqiu.jpg,13,15,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,775,0,1,8,-1,-1,-1,-1,-1,100712,-2,-1
157 | 10012013,能量之球碎片,FFFFFF,重量15.,z_nengliangzhiqiu.jpg,14,15,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,775,0,1,8,-1,-1,-1,-1,-1,100708,-2,-1
158 | 10012014,精气之球碎片,FFFFFF,重量15.,z_jingqizhiqiu.jpg,15,15,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,775,0,1,8,-1,-1,-1,-1,-1,101213,-2,-1
159 | 10012015,黯灭卷轴碎片,FFFFFF,重量15.,z_anmie.jpg,16,15,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,775,0,1,8,-1,-1,-1,-1,-1,102004,-2,-1
160 | 10012016,古之忍耐姜歌卷轴碎片,FFFFFF,重量15.,z_guzhirennaijiangge.jpg,17,15,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,775,0,1,8,-1,-1,-1,-1,-1,100805,-2,-1
161 | 10012017,黑皇杖卷轴碎片,FFFFFF,重量15.,z_heihuang.jpg,18,15,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,775,0,1,8,-1,-1,-1,-1,-1,102005,-2,-1
162 | 10012018,红杖卷轴碎片,FFFFFF,重量15.,z_hongzhang.jpg,19,15,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,775,0,1,8,-1,-1,-1,-1,-1,101307,-2,-1
163 | 10012019,卡嘉之洞察长笛卷轴碎片,FFFFFF,重量15.,z_dizi.jpg,20,15,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,775,0,1,8,-1,-1,-1,-1,-1,100909,-2,-1
164 | 10012020,梅肯斯姆卷轴碎片,FFFFFF,重量15.,z_meikensimu.jpg,21,15,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,775,0,1,8,-1,-1,-1,-1,-1,100809,-2,-1
165 | 10012021,散华卷轴碎片,FFFFFF,重量15.,z_sanhua.jpg,22,15,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,775,0,1,8,-1,-1,-1,-1,-1,101505,-2,-1
166 | 10012022,散失之刃卷轴碎片,FFFFFF,重量15.,z_sanshi.jpg,23,15,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,775,0,1,8,-1,-1,-1,-1,-1,101713,-2,-1
167 | 10012023,水晶剑卷轴碎片,FFFFFF,重量15.,z_shuijingjian.jpg,24,15,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,775,0,1,8,-1,-1,-1,-1,-1,101612,-2,-1
168 | 10012024,死灵书卷轴碎片,FFFFFF,重量15.,z_silingshu.jpg,25,15,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,775,0,1,8,-1,-1,-1,-1,-1,101311,-2,-1
169 | 10012025,碎骨锤卷轴碎片,FFFFFF,重量15.,z_suiguchui.jpg,26,15,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,775,0,1,8,-1,-1,-1,-1,-1,101904,-2,-1
170 | 10012026,漩涡卷轴碎片,FFFFFF,重量15.,z_leicui.jpg,27,15,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,775,0,1,8,-1,-1,-1,-1,-1,101905,-2,-1
171 | 10012027,夜叉卷轴碎片,FFFFFF,重量15.,z_yecha.jpg,28,15,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,775,0,1,8,-1,-1,-1,-1,-1,101509,-2,-1
172 | 10012028,紫怨卷轴碎片,FFFFFF,重量15.,z_ziyuan.jpg,29,15,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,775,0,1,8,-1,-1,-1,-1,-1,101112,-2,-1
173 | 10012029,纷争面纱卷轴碎片,FFFFFF,重量15.,z_fenzhengmiansha.jpg,30,15,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,775,0,1,8,-1,-1,-1,-1,-1,100906,-2,-1
174 | 10012030,神秘法杖碎片,FFFFFF,重量15.,z_shenmifazhang.jpg,1,15,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,775,0,1,8,-1,-1,-1,-1,-1,-1,-2,-1
175 | 10012031,极限法球碎片,FFFFFF,重量15.,z_jixianfaqiu.jpg,1,15,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,775,0,1,8,-1,-1,-1,-1,-1,-1,-2,-1
176 | 10012032,振奋宝石碎片,FFFFFF,重量15.,z_zhenfenbaoshi.jpg,1,15,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,775,0,1,8,-1,-1,-1,-1,-1,-1,-2,-1
177 | 10012033,板甲碎片,FFFFFF,重量15.,z_banjia.jpg,1,15,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,775,0,1,8,-1,-1,-1,-1,-1,-1,-2,-1
178 | 10012034,强袭装甲卷轴碎片,FFFFFF,重量15.,z_qiangxi.jpg,1,15,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,775,0,1,8,-1,-1,-1,-1,-1,-1,-2,-1
179 | 10012035,希梅斯特的掠夺碎片,FFFFFF,重量15.,z_meisaisidelueduo.jpg,1,15,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,775,0,1,8,-1,-1,-1,-1,-1,-1,-2,-1
180 | 10012036,魔龙之心卷轴碎片,FFFFFF,重量15.,z_molongzhixin.jpg,1,15,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,775,0,1,8,-1,-1,-1,-1,-1,-1,-2,-1
181 | 10012037,西瓦的守护卷轴碎片,FFFFFF,重量15.,z_xiwa.jpg,1,15,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,775,0,1,8,-1,-1,-1,-1,-1,-1,-2,-1
182 | 10012038,幻影斧卷轴碎片,FFFFFF,重量15.,z_huanyingfu.jpg,1,15,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,775,0,1,8,-1,-1,-1,-1,-1,-1,-2,-1
183 | 10012039,撒旦之邪力卷轴碎片,FFFFFF,重量15.,z_sadanzhixieli.jpg,1,15,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,775,0,1,8,-1,-1,-1,-1,-1,-1,-2,-1
184 | 10012040,雷神之锤卷轴碎片,FFFFFF,重量15.,z_dadiancui.jpg,1,15,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,775,0,1,8,-1,-1,-1,-1,-1,-1,-2,-1
185 | 10012041,淬毒之珠碎片,FFFFFF,重量15.,z_cuiduzhizhu.jpg,1,15,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,775,0,1,8,-1,-1,-1,-1,-1,-1,-2,-1
186 | 10012042,恶魔刀锋碎片,FFFFFF,重量15.,z_emodaofeng.jpg,1,15,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,775,0,1,8,-1,-1,-1,-1,-1,-1,-2,-1
187 | 10012043,圣者遗物碎片,FFFFFF,重量15.,z_shengzheyiwu.jpg,1,15,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,775,0,1,8,-1,-1,-1,-1,-1,-1,-2,-1
188 | 10012044,辉耀卷轴碎片,FFFFFF,重量15.,z_huiyao.jpg,1,15,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,775,0,1,8,-1,-1,-1,-1,-1,-1,-2,-1
189 | 10012045,闪避护符碎片,FFFFFF,重量15.,z_shanbihufu.jpg,1,15,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,775,0,1,8,-1,-1,-1,-1,-1,-1,-2,-1
190 | 10012046,鹰角弓碎片,FFFFFF,重量15.,z_yingjiaogong.jpg,1,15,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,775,0,1,8,-1,-1,-1,-1,-1,-1,-2,-1
191 | 10012047,奥术之尘,FFFFFF,将装备升到二级的必需品,从零单排及后期副本掉落,z_aoshuzhichen.jpg,1,1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,775,0,1,8,-1,-1,-1,-1,-1,-1,-4,-1
192 | 10012048,烈焰之晶,FFFFFF,将装备升到三级的必需品,从零单排及后期副本掉落,z_lieyanzhijing.jpg,1,1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,775,0,1,8,-1,-1,-1,-1,-1,-1,-4,-1
193 | 10012049,海怒之沙,FFFFFF,将装备升到四级的必需品,从零单排及后期副本掉落,z_nuhaizhisha.jpg,1,1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,775,0,1,8,-1,-1,-1,-1,-1,-1,-4,-1
194 | 10012050,银月之辉,FFFFFF,将装备升到五级的必需品,从零单排及后期副本掉落,z_yinyuezhihui.jpg,1,1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,775,0,1,8,-1,-1,-1,-1,-1,-1,-4,-1
195 | 10012051,升6级材料,FFFFFF,将装备升到六级的必需品,从零单排及后期副本掉落,z_yinyuezhihui.jpg,1,1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,775,0,1,8,-1,-1,-1,-1,-1,-1,-4,-1
196 | 10012052,升7级材料,FFFFFF,将装备升到七级的必需品,从零单排及后期副本掉落,z_yinyuezhihui.jpg,1,1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,775,0,1,8,-1,-1,-1,-1,-1,-1,-4,-1
197 | 10012053,升8级材料,FFFFFF,将装备升到八级的必需品,从零单排及后期副本掉落,z_yinyuezhihui.jpg,1,1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,775,0,1,8,-1,-1,-1,-1,-1,-1,-4,-1
198 | 10012054,升9级材料,FFFFFF,将装备升到九级的必需品,从零单排及后期副本掉落,z_yinyuezhihui.jpg,1,1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,775,0,1,8,-1,-1,-1,-1,-1,-1,-4,-1
199 | 10012055,升10级材料,FFFFFF,将装备升到十级的必需品,从零单排及后期副本掉落,z_yinyuezhihui.jpg,1,1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,775,0,1,8,-1,-1,-1,-1,-1,-1,-4,-1
200 | 10013001,梅肯斯姆2级,FFFFFF,增加己方全体375点生命上限,该效果不可叠加。重量150.,z_meikensimu.jpg,1,150,-1,6,57,351,88,-1,-1,-1,-1,-1,-1,-1,-1,0,108402,-1,-1,2306,0,30,9,-1,-1,-1,-1,1345,-1,2,1
201 | 10013002,秘法鞋2级,FFFFFF,被动增加己方全体魔法值上限405,该效果不可叠加。重量79.,z_mifaxie.jpg,1,79,-1,0,0,0,338,3,3,-1,-1,-1,-1,-1,-1,0,108502,-1,-1,1450,0,20,9,-1,-1,-1,-1,1346,-1,2,1
202 | 10013003,古之忍耐姜歌2级,FFFFFF,为己方所有单位增加1的攻击速度,该效果不可叠加。重量120.,z_guzhirennaijiangge.jpg,1,120,-1,35,12,308,158,3,1,-1,-1,-1,-1,-1,-1,0,108702,-1,-1,1726,0,23,9,-1,-1,-1,-1,1347,-1,2,1
203 | 10013004,羊刀2级,FFFFFF,将敌方单位变成青蛙,持续6回合。重量744.,z_yangdao.jpg,1,744,-1,46,15,380,989,-1,-1,-1,-1,-1,-1,-1,-1,1,108902,35,10000,5675,0,68,9,-1,-1,-1,-1,1348,-1,2,1
204 | 10013005,紫怨2级,FFFFFF,使敌方单体在20回合内减少魔法伤害减免25%。重量207.,z_ziyuan.jpg,1,207,-1,64,0,0,576,-1,-1,-1,-1,-1,-1,-1,-1,1,109002,25,10000,4125,0,50,9,-1,-1,-1,-1,1349,-1,2,1
205 | 10013006,红杖2级,FFFFFF,对敌方单体使用能量冲击造成600点魔法伤害。重量197.,z_hongzhang.jpg,1,197,-1,35,4,103,263,-1,-1,-1,-1,-1,-1,-1,-1,1,109102,40,10000,2780,0,35,9,-1,-1,-1,-1,1350,-1,2,1
206 | 10013007,死灵书2级,FFFFFF,召唤死灵减少敌方单体目标300点法力值和生命值。重量197.,z_silingshu.jpg,1,197,-1,23,0,205,263,-1,-1,-1,-1,-1,-1,-1,-1,1,109202,80,10000,2700,0,34,9,-1,-1,-1,-1,1351,-1,2,1
207 | 10013008,纷争面纱2级,FFFFFF,减少敌方全体15%魔法伤害减免,持续20回合。重量207.,z_fenzhengmiansha.jpg,1,207,-1,14,8,270,211,-1,-1,-1,-1,-1,-1,-1,-1,1,109302,30,10000,3100,0,39,9,-1,-1,-1,-1,1352,-1,2,1
208 | 10013009,强袭装甲2级,FFFFFF,减少敌方物理防御50点和物理免疫15点,不可叠加。重量696.,z_qiangxi.jpg,1,696,-1,0,113,0,0,3,4,-1,-1,-1,-1,-1,-1,0,109502,-1,-1,5350,0,64,9,-1,-1,-1,-1,1353,-1,2,1
209 | 10013010,魔龙之心2级,FFFFFF,重量696.,z_molongzhixin.jpg,1,696,-1,52,0,2120,0,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,5500,0,66,8,-1,-1,-1,-1,1354,-1,2,1
210 | 10013011,西瓦的守护2级,FFFFFF,对敌方全体使用极寒冲击,造成500点魔法伤害。重量672.,z_xiwa.jpg,1,672,-1,39,113,0,585,-1,-1,-1,-1,-1,-1,-1,-1,1,109702,30,10000,4700,0,57,9,-1,-1,-1,-1,1355,-1,2,1
211 | 10013012,血精石2级,FFFFFF,重量400.,z_xuejingshi.jpg,1,400,-1,0,0,1305,724,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,5050,0,61,9,-1,-1,-1,-1,1356,-1,2,1
212 | 10013013,幻影斧2级,FFFFFF,对敌方单体造成物理攻击3倍再附加200的伤害。重量672.,z_huanyingfu.jpg,1,672,-1,60,39,380,195,3,3,-1,-1,-1,-1,-1,-1,1,109802,35,10000,5050,0,61,9,-1,-1,-1,-1,1357,-1,2,1
213 | 10013014,撒旦之邪力2级,FFFFFF,主动使用不洁狂热使自身恢复750点生命值。重量744.,z_sadanzhixieli.jpg,1,744,-1,59,38,950,0,-1,-1,-1,-1,-1,-1,-1,-1,1,110002,35,10000,6150,0,73,9,-1,-1,-1,-1,1358,-1,2,1
214 | 10013015,雷神之锤2级,FFFFFF,连环闪电使敌方全体受到300点魔法伤害。重量696.,z_dadiancui.jpg,1,696,-1,31,0,0,0,3,9,-1,-1,-1,-1,-1,-1,1,110102,30,10000,5500,0,66,9,-1,-1,-1,-1,1359,-1,2,1
215 | 10013016,斯嘉蒂之眼2级,FFFFFF,霜冻使敌方单体减少速度20%,持续3回合。重量744.,z_bingyan.jpg,1,744,-1,98,113,1450,863,-1,-1,-1,-1,-1,-1,-1,-1,1,110202,0,10000,5850,0,70,9,-1,-1,-1,-1,1360,-1,2,1
216 | 10013017,黯灭2级,FFFFFF,减少单体物理防御60点物理免疫30点,持续15回合。重量207.,z_anmie.jpg,1,207,-1,70,0,0,0,-1,-1,-1,-1,-1,-1,-1,-1,1,110602,0,10000,4100,0,50,9,-1,-1,-1,-1,1361,-1,2,1
217 | 10013018,散失之刃2级,FFFFFF,使敌方目标受到150点伤害,并减少150点魔法值。重量207.,z_sanshi.jpg,1,207,-1,26,30,0,105,-1,-1,-1,-1,-1,-1,-1,-1,1,110702,0,10000,3300,0,41,9,-1,-1,-1,-1,1362,-1,2,1
218 | 10013019,天堂之戟2级,FFFFFF,使目标残废,削弱其攻击速度20%,持续3回合。重量332.,z_tiantangzhiji.jpg,1,332,-1,47,0,684,0,7,30,-1,-1,-1,-1,-1,-1,1,110802,0,1500,3950,0,48,9,-1,-1,-1,-1,1363,-1,2,1
219 | 10013020,圣剑2级,FFFFFF,重量1080.,z_shengjian.jpg,1,1080,-1,325,0,0,0,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,6200,0,117,8,-1,-1,-1,-1,1364,-1,2,1
220 | 10013021,金箍棒2级,FFFFFF,猛击对方单体目标使其受到450点伤害。重量696.,z_jingubang.jpg,1,696,-1,104,0,0,0,6,100,-1,-1,-1,-1,-1,-1,1,110902,0,3500,5400,0,65,9,-1,-1,-1,-1,1365,-1,2,1
221 | 10013022,辉耀2级,FFFFFF,使敌方全体受到每2回合120点的持续伤害,不可叠加。重量240.,z_huiyao.jpg,1,240,-1,78,0,0,0,-1,-1,-1,-1,-1,-1,-1,-1,0,111002,-1,-1,5150,0,62,9,-1,-1,-1,-1,1366,-1,2,1
222 | 10013023,蝴蝶2级,FFFFFF,重量744.,z_hudie.jpg,1,744,-1,78,45,0,0,3,7,7,35,-1,-1,-1,-1,-1,-1,-1,-1,6000,0,72,9,-1,-1,-1,-1,1367,-1,2,1
223 | 10013024,大炮2级,FFFFFF,重量744.,z_dapao.jpg,1,744,-1,105,0,0,0,8,25,14,250,-1,-1,-1,-1,-1,-1,-1,-1,5600,0,67,9,-1,-1,-1,-1,1368,-1,2,1
224 | 10013025,狂战斧2级,FFFFFF,溅射使敌方目标周围受到自身攻击55%伤害。重量207.,z_kuangzhan.jpg,1,207,-1,76,0,270,138,-1,-1,-1,-1,-1,-1,-1,-1,1,111202,0,10000,4350,0,53,9,-1,-1,-1,-1,1369,-1,2,1
225 | 10013026,深渊之刃2级,FFFFFF,主动使用压服使敌方单体目标眩晕4回合。重量744.,z_shenyuanzhiren.jpg,1,744,-1,143,0,380,0,-1,-1,-1,-1,-1,-1,-1,-1,1,111302,60,10000,6750,0,80,9,-1,-1,-1,-1,1370,-1,2,1
226 | 10013027,梅肯斯姆3级,FFFFFF,增加己方全体560点生命上限,该效果不可叠加。重量180.,z_meikensimu.jpg,1,180,-1,7,77,632,119,-1,-1,-1,-1,-1,-1,-1,-1,0,108403,-1,-1,2306,0,34,9,-1,-1,-1,-1,1371,-1,3,1
227 | 10013028,秘法鞋3级,FFFFFF,被动增加己方全体魔法值上限600,该效果不可叠加。重量94.,z_mifaxie.jpg,1,94,-1,0,0,0,456,3,3,-1,-1,-1,-1,-1,-1,0,108503,-1,-1,1450,0,22,9,-1,-1,-1,-1,1372,-1,3,1
228 | 10013029,古之忍耐姜歌3级,FFFFFF,为己方所有单位增加1的攻击速度,该效果不可叠加。重量144.,z_guzhirennaijiangge.jpg,1,144,-1,41,16,554,213,3,1,-1,-1,-1,-1,-1,-1,0,108703,-1,-1,1726,0,26,9,-1,-1,-1,-1,1373,-1,3,1
229 | 10013030,羊刀3级,FFFFFF,将敌方单位变成青蛙,持续7回合。重量892.,z_yangdao.jpg,1,892,-1,60,23,760,1484,-1,-1,-1,-1,-1,-1,-1,-1,1,108903,35,10000,5675,0,78,9,-1,-1,-1,-1,1374,-1,3,1
230 | 10013031,紫怨3级,FFFFFF,使敌方单体在20回合内减少魔法伤害减免30%。重量248.,z_ziyuan.jpg,1,248,-1,75,0,0,778,-1,-1,-1,-1,-1,-1,-1,-1,1,109003,25,10000,4125,0,57,9,-1,-1,-1,-1,1375,-1,3,1
231 | 10013032,红杖3级,FFFFFF,对敌方单体使用能量冲击造成900点魔法伤害。重量236.,z_hongzhang.jpg,1,236,-1,41,5,185,355,-1,-1,-1,-1,-1,-1,-1,-1,1,109103,40,10000,2780,0,40,9,-1,-1,-1,-1,1376,-1,3,1
232 | 10013033,死灵书3级,FFFFFF,召唤死灵减少敌方单体目标400点法力值和生命值。重量236.,z_silingshu.jpg,1,236,-1,27,0,369,355,-1,-1,-1,-1,-1,-1,-1,-1,1,109203,80,10000,2700,0,39,9,-1,-1,-1,-1,1377,-1,3,1
233 | 10013034,纷争面纱3级,FFFFFF,减少敌方全体20%魔法伤害减免,持续20回合。重量248.,z_fenzhengmiansha.jpg,1,248,-1,16,11,486,285,-1,-1,-1,-1,-1,-1,-1,-1,1,109303,30,10000,3100,0,44,9,-1,-1,-1,-1,1378,-1,3,1
234 | 10013035,强袭装甲3级,FFFFFF,减少敌方物理防御100点和物理免疫15点,不可叠加。重量835.,z_qiangxi.jpg,1,835,-1,0,170,0,0,3,5,-1,-1,-1,-1,-1,-1,0,109503,-1,-1,5350,0,73,9,-1,-1,-1,-1,1379,-1,3,1
235 | 10013036,魔龙之心3级,FFFFFF,重量835.,z_molongzhixin.jpg,1,835,-1,68,0,4240,0,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,5500,0,75,8,-1,-1,-1,-1,1380,-1,3,1
236 | 10013037,西瓦的守护3级,FFFFFF,对敌方全体使用极寒冲击,造成600点魔法伤害。重量806.,z_xiwa.jpg,1,806,-1,51,170,0,878,-1,-1,-1,-1,-1,-1,-1,-1,1,109703,30,10000,4700,0,65,9,-1,-1,-1,-1,1381,-1,3,1
237 | 10013038,血精石3级,FFFFFF,重量447.,z_xuejingshi.jpg,1,447,-1,0,0,2349,977,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,5050,0,69,9,-1,-1,-1,-1,1382,-1,3,1
238 | 10013039,幻影斧3级,FFFFFF,对敌方单体造成物理攻击3倍再附加300的伤害。重量806.,z_huanyingfu.jpg,1,806,-1,78,59,760,293,3,3,-1,-1,-1,-1,-1,-1,1,109803,35,10000,5050,0,69,9,-1,-1,-1,-1,1383,-1,3,1
239 | 10013040,撒旦之邪力3级,FFFFFF,主动使用不洁狂热使自身恢复1000点生命值。重量892.,z_sadanzhixieli.jpg,1,892,-1,77,57,1900,0,-1,-1,-1,-1,-1,-1,-1,-1,1,110003,35,10000,6150,0,83,9,-1,-1,-1,-1,1384,-1,3,1
240 | 10013041,雷神之锤3级,FFFFFF,连环闪电使敌方全体受到400点魔法伤害。重量835.,z_dadiancui.jpg,1,835,-1,40,0,0,0,3,10,-1,-1,-1,-1,-1,-1,1,110103,30,10000,5500,0,75,9,-1,-1,-1,-1,1385,-1,3,1
241 | 10013042,斯嘉蒂之眼3级,FFFFFF,霜冻使敌方单体减少速度20%,持续3回合。重量892.,z_bingyan.jpg,1,892,-1,127,170,2900,1295,-1,-1,-1,-1,-1,-1,-1,-1,1,110203,0,10000,5850,0,79,9,-1,-1,-1,-1,1386,-1,3,1
242 | 10013043,黯灭3级,FFFFFF,减少单体物理防御120点物理免疫30点,持续15回合。重量248.,z_anmie.jpg,1,248,-1,82,0,0,0,-1,-1,-1,-1,-1,-1,-1,-1,1,110603,0,10000,4100,0,57,9,-1,-1,-1,-1,1387,-1,3,1
243 | 10013044,散失之刃3级,FFFFFF,使敌方目标受到250点伤害,并减少250点魔法值。重量248.,z_sanshi.jpg,1,248,-1,30,41,0,142,-1,-1,-1,-1,-1,-1,-1,-1,1,110703,0,10000,3300,0,47,9,-1,-1,-1,-1,1388,-1,3,1
244 | 10013045,天堂之戟3级,FFFFFF,使目标残废,削弱其攻击速度20%,持续3回合。重量398.,z_tiantangzhiji.jpg,1,398,-1,55,0,1231,0,7,35,-1,-1,-1,-1,-1,-1,1,110803,0,1500,3950,0,55,9,-1,-1,-1,-1,1389,-1,3,1
245 | 10013046,圣剑3级,FFFFFF,重量1296.,z_shengjian.jpg,1,1296,-1,423,0,0,0,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,6200,0,134,8,-1,-1,-1,-1,1390,-1,3,1
246 | 10013047,金箍棒3级,FFFFFF,猛击对方单体目标使其受到600点伤害。重量835.,z_jingubang.jpg,1,835,-1,135,0,0,0,6,100,-1,-1,-1,-1,-1,-1,1,110903,0,3500,5400,0,74,9,-1,-1,-1,-1,1391,-1,3,1
247 | 10013048,辉耀3级,FFFFFF,使敌方全体受到每2回合160点的持续伤害,不可叠加。重量288.,z_huiyao.jpg,1,288,-1,101,0,0,0,-1,-1,-1,-1,-1,-1,-1,-1,0,111003,-1,-1,5150,0,70,9,-1,-1,-1,-1,1392,-1,3,1
248 | 10013049,蝴蝶3级,FFFFFF,重量892.,z_hudie.jpg,1,892,-1,101,68,0,0,3,8,7,40,-1,-1,-1,-1,-1,-1,-1,-1,6000,0,82,9,-1,-1,-1,-1,1393,-1,3,1
249 | 10013050,大炮3级,FFFFFF,重量892.,z_dapao.jpg,1,892,-1,137,0,0,0,8,25,14,260,-1,-1,-1,-1,-1,-1,-1,-1,5600,0,76,9,-1,-1,-1,-1,1394,-1,3,1
250 | 10013051,狂战斧3级,FFFFFF,溅射使敌方目标周围受到自身攻击60%伤害。重量248.,z_kuangzhan.jpg,1,248,-1,89,0,486,186,-1,-1,-1,-1,-1,-1,-1,-1,1,111203,0,10000,4350,0,60,9,-1,-1,-1,-1,1395,-1,3,1
251 | 10013052,深渊之刃3级,FFFFFF,主动使用压服使敌方单体目标眩晕5回合。重量892.,z_shenyuanzhiren.jpg,1,892,-1,186,0,760,0,-1,-1,-1,-1,-1,-1,-1,-1,1,111303,60,10000,6750,0,91,9,-1,-1,-1,-1,1396,-1,3,1
252 | 10013053,梅肯斯姆4级,FFFFFF,增加己方全体800点生命上限,该效果不可叠加。重量215.,z_meikensimu.jpg,1,215,-1,8,104,1138,161,-1,-1,-1,-1,-1,-1,-1,-1,0,108404,-1,-1,2306,0,38,9,-1,-1,-1,-1,1397,-1,4,1
253 | 10013054,秘法鞋4级,FFFFFF,被动增加己方全体魔法值上限900,该效果不可叠加。重量112.,z_mifaxie.jpg,1,112,-1,0,0,0,616,3,3,-1,-1,-1,-1,-1,-1,0,108504,-1,-1,1450,0,25,9,-1,-1,-1,-1,1398,-1,4,1
254 | 10013055,古之忍耐姜歌4级,FFFFFF,为己方所有单位增加1的攻击速度,该效果不可叠加。重量172.,z_guzhirennaijiangge.jpg,1,172,-1,48,22,997,288,3,1,-1,-1,-1,-1,-1,-1,0,108704,-1,-1,1726,0,30,9,-1,-1,-1,-1,1399,-1,4,1
255 | 10013056,羊刀4级,FFFFFF,将敌方单位变成青蛙,持续8回合。重量1070.,z_yangdao.jpg,1,1070,-1,78,35,1520,2226,-1,-1,-1,-1,-1,-1,-1,-1,1,108904,35,10000,5675,0,88,9,-1,-1,-1,-1,1400,-1,4,1
256 | 10013057,紫怨4级,FFFFFF,使敌方单体在20回合内减少魔法伤害减免35%。重量297.,z_ziyuan.jpg,1,297,-1,88,0,0,1050,-1,-1,-1,-1,-1,-1,-1,-1,1,109004,25,10000,4125,0,65,9,-1,-1,-1,-1,1401,-1,4,1
257 | 10013058,红杖4级,FFFFFF,对敌方单体使用能量冲击造成1200点魔法伤害。重量283.,z_hongzhang.jpg,1,283,-1,48,7,333,479,-1,-1,-1,-1,-1,-1,-1,-1,1,109104,40,10000,2780,0,45,9,-1,-1,-1,-1,1402,-1,4,1
258 | 10013059,死灵书4级,FFFFFF,召唤死灵减少敌方单体目标600点法力值和生命值。重量283.,z_silingshu.jpg,1,283,-1,32,0,664,479,-1,-1,-1,-1,-1,-1,-1,-1,1,109204,80,10000,2700,0,44,9,-1,-1,-1,-1,1403,-1,4,1
259 | 10013060,纷争面纱4级,FFFFFF,减少敌方全体25%魔法伤害减免,持续20回合。重量297.,z_fenzhengmiansha.jpg,1,297,-1,19,15,875,385,-1,-1,-1,-1,-1,-1,-1,-1,1,109304,30,10000,3100,0,50,9,-1,-1,-1,-1,1404,-1,4,1
260 | 10013061,强袭装甲4级,FFFFFF,减少敌方物理防御150点和物理免疫15点,不可叠加。重量1002.,z_qiangxi.jpg,1,1002,-1,0,255,0,0,3,6,-1,-1,-1,-1,-1,-1,0,109504,-1,-1,5350,0,83,9,-1,-1,-1,-1,1405,-1,4,1
261 | 10013062,魔龙之心4级,FFFFFF,重量1002.,z_molongzhixin.jpg,1,1002,-1,88,0,8480,0,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,5500,0,85,8,-1,-1,-1,-1,1406,-1,4,1
262 | 10013063,西瓦的守护4级,FFFFFF,对敌方全体使用极寒冲击,造成700点魔法伤害。重量967.,z_xiwa.jpg,1,967,-1,66,255,0,1317,-1,-1,-1,-1,-1,-1,-1,-1,1,109704,30,10000,4700,0,74,9,-1,-1,-1,-1,1407,-1,4,1
263 | 10013064,血精石4级,FFFFFF,重量536.,z_xuejingshi.jpg,1,536,-1,0,0,4228,1319,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,5050,0,79,9,-1,-1,-1,-1,1408,-1,4,1
264 | 10013065,幻影斧4级,FFFFFF,对敌方单体造成物理攻击3倍再附加400的伤害。重量967.,z_huanyingfu.jpg,1,967,-1,101,89,1520,440,3,3,-1,-1,-1,-1,-1,-1,1,109804,35,10000,5050,0,79,9,-1,-1,-1,-1,1409,-1,4,1
265 | 10013066,撒旦之邪力4级,FFFFFF,主动使用不洁狂热使自身恢复1300点生命值。重量1070.,z_sadanzhixieli.jpg,1,1070,-1,100,86,3800,0,-1,-1,-1,-1,-1,-1,-1,-1,1,110004,35,10000,6150,0,95,9,-1,-1,-1,-1,1410,-1,4,1
266 | 10013067,雷神之锤4级,FFFFFF,连环闪电使敌方全体受到500点魔法伤害。重量1002.,z_dadiancui.jpg,1,1002,-1,52,0,0,0,3,11,-1,-1,-1,-1,-1,-1,1,110104,30,10000,5500,0,85,9,-1,-1,-1,-1,1411,-1,4,1
267 | 10013068,斯嘉蒂之眼4级,FFFFFF,霜冻使敌方单体减少速度20%,持续3回合。重量1070.,z_bingyan.jpg,1,1070,-1,165,255,5800,1943,-1,-1,-1,-1,-1,-1,-1,-1,1,110204,0,10000,5850,0,90,9,-1,-1,-1,-1,1412,-1,4,1
268 | 10013069,黯灭4级,FFFFFF,减少单体物理防御200点物理免疫30点,持续15回合。重量297.,z_anmie.jpg,1,297,-1,96,0,0,0,-1,-1,-1,-1,-1,-1,-1,-1,1,110604,0,10000,4100,0,65,9,-1,-1,-1,-1,1413,-1,4,1
269 | 10013070,散失之刃4级,FFFFFF,使敌方目标受到375点伤害,并减少375点魔法值。重量297.,z_sanshi.jpg,1,297,-1,35,55,0,192,-1,-1,-1,-1,-1,-1,-1,-1,1,110704,0,10000,3300,0,53,9,-1,-1,-1,-1,1414,-1,4,1
270 | 10013071,天堂之戟4级,FFFFFF,使目标残废,削弱其攻击速度20%,持续3回合。重量478.,z_tiantangzhiji.jpg,1,478,-1,64,0,2216,0,7,40,-1,-1,-1,-1,-1,-1,1,110804,0,1500,3950,0,62,9,-1,-1,-1,-1,1415,-1,4,1
271 | 10013072,圣剑4级,FFFFFF,重量1555.,z_shengjian.jpg,1,1555,-1,550,0,0,0,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,6200,0,152,8,-1,-1,-1,-1,1416,-1,4,1
272 | 10013073,金箍棒4级,FFFFFF,猛击对方单体目标使其受到800点伤害。重量1002.,z_jingubang.jpg,1,1002,-1,176,0,0,0,6,100,-1,-1,-1,-1,-1,-1,1,110904,0,3500,5400,0,84,9,-1,-1,-1,-1,1417,-1,4,1
273 | 10013074,辉耀4级,FFFFFF,使敌方全体受到每2回合200点的持续伤害,不可叠加。重量346.,z_huiyao.jpg,1,346,-1,131,0,0,0,-1,-1,-1,-1,-1,-1,-1,-1,0,111004,-1,-1,5150,0,80,9,-1,-1,-1,-1,1418,-1,4,1
274 | 10013075,蝴蝶4级,FFFFFF,重量1070.,z_hudie.jpg,1,1070,-1,131,102,0,0,3,9,7,45,-1,-1,-1,-1,-1,-1,-1,-1,6000,0,93,9,-1,-1,-1,-1,1419,-1,4,1
275 | 10013076,大炮4级,FFFFFF,重量1070.,z_dapao.jpg,1,1070,-1,178,0,0,0,8,25,14,270,-1,-1,-1,-1,-1,-1,-1,-1,5600,0,87,9,-1,-1,-1,-1,1420,-1,4,1
276 | 10013077,狂战斧4级,FFFFFF,溅射使敌方目标周围受到自身攻击70%伤害。重量297.,z_kuangzhan.jpg,1,297,-1,104,0,875,251,-1,-1,-1,-1,-1,-1,-1,-1,1,111204,0,10000,4350,0,68,9,-1,-1,-1,-1,1421,-1,4,1
277 | 10013078,深渊之刃4级,FFFFFF,主动使用压服使敌方单体目标眩晕6回合。重量1070.,z_shenyuanzhiren.jpg,1,1070,-1,242,0,1520,0,-1,-1,-1,-1,-1,-1,-1,-1,1,111304,60,10000,6750,0,104,9,-1,-1,-1,-1,1422,-1,4,1
278 | 10013079,梅肯斯姆5级,FFFFFF,增加己方全体1000点生命上限,该效果不可叠加。重量257.,z_meikensimu.jpg,1,257,-1,9,140,2048,217,-1,-1,-1,-1,-1,-1,-1,-1,0,108405,-1,-1,2306,0,44,9,-1,-1,-1,-1,1423,-1,5,1
279 | 10013080,秘法鞋5级,FFFFFF,被动增加己方全体魔法值上限1200,该效果不可叠加。重量134.,z_mifaxie.jpg,1,134,-1,0,0,0,832,3,3,-1,-1,-1,-1,-1,-1,0,108505,-1,-1,1450,0,29,9,-1,-1,-1,-1,1424,-1,5,1
280 | 10013081,古之忍耐姜歌5级,FFFFFF,为己方所有单位增加1的攻击速度,该效果不可叠加。重量205.,z_guzhirennaijiangge.jpg,1,205,-1,56,30,1795,389,3,1,-1,-1,-1,-1,-1,-1,0,108705,-1,-1,1726,0,34,9,-1,-1,-1,-1,1425,-1,5,1
281 | 10013082,羊刀5级,FFFFFF,将敌方单位变成青蛙,持续9回合。重量1284.,z_yangdao.jpg,1,1284,-1,101,53,3040,3339,-1,-1,-1,-1,-1,-1,-1,-1,1,108905,35,10000,5675,0,101,9,-1,-1,-1,-1,1426,-1,5,1
282 | 10013083,紫怨5级,FFFFFF,使敌方单体在20回合内减少魔法伤害减免40%。重量356.,z_ziyuan.jpg,1,356,-1,103,0,0,1418,-1,-1,-1,-1,-1,-1,-1,-1,1,109005,25,10000,4125,0,74,9,-1,-1,-1,-1,1427,-1,5,1
283 | 10013084,红杖5级,FFFFFF,对敌方单体使用能量冲击造成1600点魔法伤害。重量339.,z_hongzhang.jpg,1,339,-1,56,9,599,647,-1,-1,-1,-1,-1,-1,-1,-1,1,109105,40,10000,2780,0,52,9,-1,-1,-1,-1,1428,-1,5,1
284 | 10013085,死灵书5级,FFFFFF,召唤死灵减少敌方单体目标800点法力值和生命值。重量339.,z_silingshu.jpg,1,339,-1,37,0,1195,647,-1,-1,-1,-1,-1,-1,-1,-1,1,109205,80,10000,2700,0,50,9,-1,-1,-1,-1,1429,-1,5,1
285 | 10013086,纷争面纱5级,FFFFFF,减少敌方全体30%魔法伤害减免,持续20回合。重量356.,z_fenzhengmiansha.jpg,1,356,-1,22,20,1575,520,-1,-1,-1,-1,-1,-1,-1,-1,1,109305,30,10000,3100,0,57,9,-1,-1,-1,-1,1430,-1,5,1
286 | 10013087,强袭装甲5级,FFFFFF,减少敌方物理防御250点和物理免疫15点,不可叠加。重量1202.,z_qiangxi.jpg,1,1202,-1,0,383,0,0,3,7,-1,-1,-1,-1,-1,-1,0,109505,-1,-1,5350,0,95,9,-1,-1,-1,-1,1431,-1,5,1
287 | 10013088,魔龙之心5级,FFFFFF,重量1202.,z_molongzhixin.jpg,1,1202,-1,114,0,16960,0,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,5500,0,97,8,-1,-1,-1,-1,1432,-1,5,1
288 | 10013089,西瓦的守护5级,FFFFFF,对敌方全体使用极寒冲击,造成800点魔法伤害。重量1160.,z_xiwa.jpg,1,1160,-1,86,383,0,1976,-1,-1,-1,-1,-1,-1,-1,-1,1,109705,30,10000,4700,0,84,9,-1,-1,-1,-1,1433,-1,5,1
289 | 10013090,血精石5级,FFFFFF,重量642.,z_xuejingshi.jpg,1,642,-1,0,0,7610,1781,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,5050,0,90,9,-1,-1,-1,-1,1434,-1,5,1
290 | 10013091,幻影斧5级,FFFFFF,对敌方单体造成物理攻击3倍再附加500的伤害。重量1160.,z_huanyingfu.jpg,1,1160,-1,131,134,3040,660,3,3,-1,-1,-1,-1,-1,-1,1,109805,35,10000,5050,0,90,9,-1,-1,-1,-1,1435,-1,5,1
291 | 10013092,撒旦之邪力5级,FFFFFF,主动使用不洁狂热使自身恢复1600点生命值。重量1284.,z_sadanzhixieli.jpg,1,1284,-1,130,129,7600,0,-1,-1,-1,-1,-1,-1,-1,-1,1,110005,35,10000,6150,0,108,9,-1,-1,-1,-1,1436,-1,5,1
292 | 10013093,雷神之锤5级,FFFFFF,连环闪电使敌方全体受到600点魔法伤害。重量1202.,z_dadiancui.jpg,1,1202,-1,68,0,0,0,3,12,-1,-1,-1,-1,-1,-1,1,110105,30,10000,5500,0,97,9,-1,-1,-1,-1,1437,-1,5,1
293 | 10013094,斯嘉蒂之眼5级,FFFFFF,霜冻使敌方单体减少速度20%,持续3回合。重量1284.,z_bingyan.jpg,1,1284,-1,215,383,11600,2915,-1,-1,-1,-1,-1,-1,-1,-1,1,110205,0,10000,5850,0,103,9,-1,-1,-1,-1,1438,-1,5,1
294 | 10013095,黯灭5级,FFFFFF,减少单体物理防御300点物理免疫30点,持续15回合。重量356.,z_anmie.jpg,1,356,-1,112,0,0,0,-1,-1,-1,-1,-1,-1,-1,-1,1,110605,0,10000,4100,0,74,9,-1,-1,-1,-1,1439,-1,5,1
295 | 10013096,散失之刃5级,FFFFFF,使敌方目标受到450点伤害,并减少450点魔法值。重量356.,z_sanshi.jpg,1,356,-1,41,74,0,295,-1,-1,-1,-1,-1,-1,-1,-1,1,110705,0,10000,3300,0,60,9,-1,-1,-1,-1,1440,-1,5,1
296 | 10013097,天堂之戟5级,FFFFFF,使目标残废,削弱其攻击速度20%,持续3回合。重量572.,z_tiantangzhiji.jpg,1,572,-1,75,0,3989,0,7,45,-1,-1,-1,-1,-1,-1,1,110805,0,1500,3950,0,71,9,-1,-1,-1,-1,1441,-1,5,1
297 | 10013098,圣剑5级,FFFFFF,重量1866.,z_shengjian.jpg,1,1866,-1,715,0,0,0,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,6200,0,174,8,-1,-1,-1,-1,1442,-1,5,1
298 | 10013099,金箍棒5级,FFFFFF,猛击对方单体目标使其受到1000点伤害。重量1202.,z_jingubang.jpg,1,1202,-1,229,0,0,0,6,100,-1,-1,-1,-1,-1,-1,1,110905,0,3500,5400,0,96,9,-1,-1,-1,-1,1443,-1,5,1
299 | 10013100,辉耀5级,FFFFFF,使敌方全体受到每2回合240点的持续伤害,不可叠加。重量416.,z_huiyao.jpg,1,416,-1,170,0,0,0,-1,-1,-1,-1,-1,-1,-1,-1,0,111005,-1,-1,5150,0,91,9,-1,-1,-1,-1,1444,-1,5,1
300 | 10013101,蝴蝶5级,FFFFFF,重量1284.,z_hudie.jpg,1,1284,-1,170,153,0,0,3,10,7,50,-1,-1,-1,-1,-1,-1,-1,-1,6000,0,106,9,-1,-1,-1,-1,1445,-1,5,1
301 | 10013102,大炮5级,FFFFFF,重量1284.,z_dapao.jpg,1,1284,-1,231,0,0,0,8,25,14,280,-1,-1,-1,-1,-1,-1,-1,-1,5600,0,99,9,-1,-1,-1,-1,1446,-1,5,1
302 | 10013103,狂战斧5级,FFFFFF,溅射使敌方目标周围受到自身攻击80%伤害。重量356.,z_kuangzhan.jpg,1,356,-1,122,0,1575,339,-1,-1,-1,-1,-1,-1,-1,-1,1,111205,0,10000,4350,0,78,9,-1,-1,-1,-1,1447,-1,5,1
303 | 10013104,深渊之刃5级,FFFFFF,主动使用压服使敌方单体目标眩晕7回合。重量1284.,z_shenyuanzhiren.jpg,1,1284,-1,315,0,3040,0,-1,-1,-1,-1,-1,-1,-1,-1,1,111305,60,10000,6750,0,118,9,-1,-1,-1,-1,1448,-1,5,1
304 | 10013105,黑皇杖2级,FFFFFF,使自身免受50%魔法伤害,魔免上限为60。重量245.,z_heihuang.jpg,1,245,-1,40,-1,342,-1,-1,-1,-1,-1,-1,-1,-1,-1,1,109601,55,10000,3900,0,52,9,-1,-1,-1,-1,1203,-1,2,1
305 | 10013106,绿杖2级,FFFFFF,使自己受到物理伤害减少30%,物免上限为60,。重量296.,z_lvzhang.jpg,1,296,-1,27,11,266,137,-1,-1,-1,-1,-1,-1,-1,-1,0,111601,30,10000,1600,0,10,9,-1,-1,-1,-1,-1,-1,2,1
306 | 10013107,黑皇杖3级,FFFFFF,使自身免受50%魔法伤害,魔免上限为60。重量279.,z_heihuang.jpg,1,279,-1,47,-1,616,-1,-1,-1,-1,-1,-1,-1,-1,-1,1,109601,55,10000,3900,0,78,9,-1,-1,-1,-1,1203,-1,3,1
307 | 10013108,绿杖3级,FFFFFF,使自己受到物理伤害减少30%,物免上限为60,。重量338.,z_lvzhang.jpg,1,338,-1,35,17,532,206,-1,-1,-1,-1,-1,-1,-1,-1,0,111601,30,10000,1600,0,20,9,-1,-1,-1,-1,-1,-1,3,1
308 | 10013109,黑皇杖4级,FFFFFF,使自身免受50%魔法伤害,魔免上限为60。重量317.,z_heihuang.jpg,1,317,-1,55,-1,1109,-1,-1,-1,-1,-1,-1,-1,-1,-1,1,109601,55,10000,3900,0,104,9,-1,-1,-1,-1,1203,-1,4,1
309 | 10013110,绿杖4级,FFFFFF,使自己受到物理伤害减少30%,物免上限为60,。重量385.,z_lvzhang.jpg,1,385,-1,46,26,1064,309,-1,-1,-1,-1,-1,-1,-1,-1,0,111601,30,10000,1600,0,30,9,-1,-1,-1,-1,-1,-1,4,1
310 | 10013111,黑皇杖5级,FFFFFF,使自身免受50%魔法伤害,魔免上限为60。重量361.,z_heihuang.jpg,1,361,-1,64,-1,1996,-1,-1,-1,-1,-1,-1,-1,-1,-1,1,109601,55,10000,3900,0,130,9,-1,-1,-1,-1,1203,-1,5,1
311 | 10013112,绿杖5级,FFFFFF,使自己受到物理伤害减少30%,物免上限为60,。重量439.,z_lvzhang.jpg,1,439,-1,60,39,2128,464,-1,-1,-1,-1,-1,-1,-1,-1,0,111601,30,10000,1600,0,40,9,-1,-1,-1,-1,-1,-1,5,1
312 | 10013113,散夜对剑2级,FFFFFF,使目标残废,削弱其攻击速度30%,持续3回合。重量207.,z_duijian.jpg,1,207,-1,51,22,547,-1,3,3,-1,-1,-1,-1,-1,-1,1,109901,0,1500,4100,0,54,9,-1,-1,-1,-1,1474,-1,2,1
313 | 10013114,散夜对剑3级,FFFFFF,使目标残废,削弱其攻击速度30%,持续3回合。重量248.,z_duijian.jpg,1,248,-1,60,30,985,-1,3,4,-1,-1,-1,-1,-1,-1,1,109901,0,1500,4100,0,81,9,-1,-1,-1,-1,1475,-1,3,1
314 | 10013115,散夜对剑4级,FFFFFF,使目标残废,削弱其攻击速度30%,持续3回合。重量297.,z_duijian.jpg,1,297,-1,70,41,1773,-1,3,4,-1,-1,-1,-1,-1,-1,1,109901,0,1500,4100,0,108,9,-1,-1,-1,-1,1476,-1,4,1
315 | 10013116,散夜对剑5级,FFFFFF,使目标残废,削弱其攻击速度30%,持续3回合。重量356.,z_duijian.jpg,1,356,-1,82,55,3191,-1,3,5,-1,-1,-1,-1,-1,-1,1,109901,0,1500,4100,0,135,9,-1,-1,-1,-1,1477,-1,5,1
316 | 10013117,先锋盾2级,FFFFFF,物免上限为60,重量106.,z_xianfengdun.jpg,1,106,-1,-1,28,760,-1,15,10,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,2225,0,30,9,-1,-1,-1,-1,1478,-1,2,1
317 | 10013118,先锋盾3级,FFFFFF,物免上限为60,重量120.,z_xianfengdun.jpg,1,120,-1,-1,28,1444,-1,15,10,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,2225,0,45,9,-1,-1,-1,-1,1479,-1,3,1
318 | 10013119,先锋盾4级,FFFFFF,物免上限为60,重量136.,z_xianfengdun.jpg,1,136,-1,-1,28,2744,-1,15,10,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,2225,0,60,9,-1,-1,-1,-1,1480,-1,4,1
319 | 10013120,先锋盾5级,FFFFFF,物免上限为60,重量155.,z_xianfengdun.jpg,1,155,-1,-1,28,5213,-1,15,10,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,2225,0,75,9,-1,-1,-1,-1,1481,-1,5,1
320 | 10013121,卡嘉之洞察长笛2级,FFFFFF,魔免上限为60,重量197.,z_dizi.jpg,1,197,-1,-1,-1,475,-1,21,40,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,3628,0,48,9,-1,-1,-1,-1,1482,-1,2,1
321 | 10013122,卡嘉之洞察长笛3级,FFFFFF,魔免上限为60,重量224.,z_dizi.jpg,1,224,-1,-1,-1,903,-1,21,40,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,3628,0,72,9,-1,-1,-1,-1,1483,-1,3,1
322 | 10013123,卡嘉之洞察长笛4级,FFFFFF,魔免上限为60,重量255.,z_dizi.jpg,1,255,-1,-1,-1,1715,-1,21,40,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,3628,0,96,9,-1,-1,-1,-1,1484,-1,4,1
323 | 10013124,卡嘉之洞察长笛5级,FFFFFF,魔免上限为60,重量290.,z_dizi.jpg,1,290,-1,-1,-1,3258,-1,21,40,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,3628,0,120,9,-1,-1,-1,-1,1485,-1,5,1
324 | 10013125,梅肯斯姆6级,FFFFFF,增加己方全体1200点生命上限,该效果不可叠加。重量79.,z_meikensimu.jpg,1,257,-1,10,196,2560,303,-1,-1,-1,-1,-1,-1,-1,-1,0,108406,-1,-1,2306,0,1,9,-1,-1,-1,-1,1486,-1,6,1
325 | 10013126,秘法鞋6级,FFFFFF,被动增加己方全体魔法值上限1500,该效果不可叠加。重量53.,z_mifaxie.jpg,1,134,-1,0,0,0,1164,3,3,-1,-1,-1,-1,-1,-1,0,108506,-1,-1,1450,0,1,9,-1,-1,-1,-1,1487,-1,6,1
326 | 10013127,古之忍耐姜歌6级,FFFFFF,为己方所有单位增加1的攻击速度,该效果不可叠加。重量62.,z_guzhirennaijiangge.jpg,1,205,-1,67,42,2243,544,3,1,-1,-1,-1,-1,-1,-1,0,108706,-1,-1,1726,0,1,9,-1,-1,-1,-1,1488,-1,6,1
327 | 10013128,羊刀6级,FFFFFF,将敌方单位变成青蛙,持续10回合。重量181.,z_yangdao.jpg,1,1284,-1,121,74,3800,4674,-1,-1,-1,-1,-1,-1,-1,-1,1,108906,35,10000,5675,0,1,9,-1,-1,-1,-1,1489,-1,6,1
328 | 10013129,紫怨6级,FFFFFF,使敌方单体在20回合内减少魔法伤害减免50%。重量134.,z_ziyuan.jpg,1,356,-1,123,0,0,1985,-1,-1,-1,-1,-1,-1,-1,-1,1,109006,25,10000,4125,0,1,9,-1,-1,-1,-1,1490,-1,6,1
329 | 10013130,红杖6级,FFFFFF,对敌方单体使用能量冲击造成1900点魔法伤害。重量94.,z_hongzhang.jpg,1,339,-1,67,12,748,905,-1,-1,-1,-1,-1,-1,-1,-1,1,109106,40,10000,2780,0,1,9,-1,-1,-1,-1,1491,-1,6,1
330 | 10013131,死灵书6级,FFFFFF,召唤死灵减少敌方单体目标1000点法力值和生命值。重量91.,z_silingshu.jpg,1,339,-1,44,0,1493,905,-1,-1,-1,-1,-1,-1,-1,-1,1,109206,80,10000,2700,0,1,9,-1,-1,-1,-1,1492,-1,6,1
331 | 10013132,纷争面纱6级,FFFFFF,减少敌方全体35%魔法伤害减免,持续20回合。重量103.,z_fenzhengmiansha.jpg,1,356,-1,26,28,1968,728,-1,-1,-1,-1,-1,-1,-1,-1,1,109306,30,10000,3100,0,1,9,-1,-1,-1,-1,1493,-1,6,1
332 | 10013133,强袭装甲6级,FFFFFF,减少敌方物理防御350点和物理免疫15点,不可叠加。重量170.,z_qiangxi.jpg,1,1202,-1,0,536,0,0,3,7,-1,-1,-1,-1,-1,-1,0,109506,-1,-1,5350,0,1,9,-1,-1,-1,-1,1494,-1,6,1
333 | 10013134,魔龙之心6级,FFFFFF,重量175.,z_molongzhixin.jpg,1,1202,-1,136,0,21200,0,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,5500,0,1,8,-1,-1,-1,-1,1495,-1,6,1
334 | 10013135,西瓦的守护6级,FFFFFF,对敌方全体使用极寒冲击,造成900点魔法伤害。重量151.,z_xiwa.jpg,1,1160,-1,103,536,0,2766,-1,-1,-1,-1,-1,-1,-1,-1,1,109706,30,10000,4700,0,1,9,-1,-1,-1,-1,1496,-1,6,1
335 | 10013136,血精石6级,FFFFFF,重量161.,z_xuejingshi.jpg,1,963,-1,0,0,9512,2493,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,5050,0,1,9,-1,-1,-1,-1,1497,-1,6,1
336 | 10013137,幻影斧6级,FFFFFF,对敌方单体造成物理攻击3倍再附加800的伤害。重量161.,z_huanyingfu.jpg,1,1160,-1,157,187,3800,924,3,3,-1,-1,-1,-1,-1,-1,1,109806,35,10000,5050,0,1,9,-1,-1,-1,-1,1498,-1,6,1
337 | 10013138,撒旦之邪力6级,FFFFFF,主动使用不洁狂热使自身恢复1900点生命值。重量194.,z_sadanzhixieli.jpg,1,1284,-1,156,180,9500,0,-1,-1,-1,-1,-1,-1,-1,-1,1,110006,35,10000,6150,0,1,9,-1,-1,-1,-1,1499,-1,6,1
338 | 10013139,雷神之锤6级,FFFFFF,连环闪电使敌方全体受到700点魔法伤害。重量175.,z_dadiancui.jpg,1,1202,-1,81,0,0,0,3,12,-1,-1,-1,-1,-1,-1,1,110106,30,10000,5500,0,1,9,-1,-1,-1,-1,1500,-1,6,1
339 | 10013140,斯嘉蒂之眼6级,FFFFFF,霜冻使敌方单体减少速度20%,持续3回合。重量185.,z_bingyan.jpg,1,1284,-1,258,536,14500,4081,-1,-1,-1,-1,-1,-1,-1,-1,1,110206,0,10000,5850,0,1,9,-1,-1,-1,-1,1501,-1,6,1
340 | 10013141,黯灭6级,FFFFFF,减少单体物理防御400点物理免疫30点,持续15回合。重量133.,z_anmie.jpg,1,356,-1,134,0,0,0,-1,-1,-1,-1,-1,-1,-1,-1,1,110606,0,10000,4100,0,1,9,-1,-1,-1,-1,1502,-1,6,1
341 | 10013142,散失之刃6级,FFFFFF,使敌方目标受到575点伤害,并减少450点魔法值。重量109.,z_sanshi.jpg,1,356,-1,49,103,0,362,-1,-1,-1,-1,-1,-1,-1,-1,1,110706,0,10000,3300,0,1,9,-1,-1,-1,-1,1503,-1,6,1
342 | 10013143,天堂之戟6级,FFFFFF,使目标残废,削弱其攻击速度20%,持续3回合。重量128.,z_tiantangzhiji.jpg,1,859,-1,90,0,4986,0,7,45,-1,-1,-1,-1,-1,-1,1,110806,0,1500,3950,0,1,9,-1,-1,-1,-1,1504,-1,6,1
343 | 10013144,圣剑6级,FFFFFF,重量310.,z_shengjian.jpg,1,1866,-1,858,0,0,0,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,6200,0,1,8,-1,-1,-1,-1,1505,-1,6,1
344 | 10013145,金箍棒6级,FFFFFF,猛击对方单体目标使其受到1200点伤害。重量172.,z_jingubang.jpg,1,1202,-1,274,0,0,0,6,100,-1,-1,-1,-1,-1,-1,1,110906,0,3500,5400,0,1,9,-1,-1,-1,-1,1506,-1,6,1
345 | 10013146,辉耀6级,FFFFFF,使敌方全体受到每2回合140点的持续伤害,不可叠加。重量164.,z_huiyao.jpg,1,1160,-1,204,0,0,0,-1,-1,-1,-1,-1,-1,-1,-1,0,111006,-1,-1,5150,0,1,9,-1,-1,-1,-1,1507,-1,6,1
346 | 10013147,蝴蝶6级,FFFFFF,重量190.,z_hudie.jpg,1,1284,-1,204,214,0,0,3,10,7,50,-1,-1,-1,-1,-1,-1,-1,-1,6000,0,1,9,-1,-1,-1,-1,1508,-1,6,1
347 | 10013148,大炮6级,FFFFFF,重量178.,z_dapao.jpg,1,1284,-1,277,0,0,0,8,25,14,290,-1,-1,-1,-1,-1,-1,-1,-1,5600,0,1,9,-1,-1,-1,-1,1509,-1,6,1
348 | 10013149,狂战斧6级,FFFFFF,溅射使敌方目标周围受到自身攻击90%伤害。重量140.,z_kuangzhan.jpg,1,356,-1,146,0,1968,474,-1,-1,-1,-1,-1,-1,-1,-1,1,111206,0,10000,4350,0,1,9,-1,-1,-1,-1,1510,-1,6,1
349 | 10013150,深渊之刃6级,FFFFFF,主动使用压服使敌方单体目标眩晕8回合。重量212.,z_shenyuanzhiren.jpg,1,1284,-1,378,0,3800,0,-1,-1,-1,-1,-1,-1,-1,-1,1,111306,60,10000,6750,0,1,9,-1,-1,-1,-1,1511,-1,6,1
350 | 10013151,黑皇杖6级,FFFFFF,使自身免受50%魔法伤害,z_heihuang.jpg,1,361,-1,76,0,2495,0,-1,-1,-1,-1,-1,-1,-1,-1,1,109601,55,10000,3900,0,1,9,-1,-1,-1,-1,1512,-1,6,1
351 | 10013152,绿杖6级,FFFFFF,使自己受到物理伤害减少30%,z_lvzhang.jpg,1,439,-1,72,54,2660,649,-1,-1,-1,-1,-1,-1,-1,-1,0,111601,30,10000,1600,0,1,9,-1,-1,-1,-1,1513,-1,6,1
352 | 10013153,散夜对剑6级,FFFFFF,使目标残废,削弱其攻击速度30%,持续3回合。,z_duijian.jpg,1,356,-1,98,77,3988,0,3,5,-1,-1,-1,-1,-1,-1,1,109901,0,1500,4100,0,1,9,-1,-1,-1,-1,1514,-1,6,1
353 | 10013154,先锋盾6级,FFFFFF,,z_xianfengdun.jpg,1,155,-1,0,39,6516,0,15,10,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,2225,0,1,9,-1,-1,-1,-1,1515,-1,6,1
354 | 10013155,卡嘉之洞察长笛6级,FFFFFF,,z_dizi.jpg,1,290,-1,0,0,4072,0,21,40,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,3628,0,1,9,-1,-1,-1,-1,1516,-1,6,1
355 | 10013156,梅肯斯姆7级,FFFFFF,增加己方全体1400点生命上限,该效果不可叠加。重量79.,z_meikensimu.jpg,1,257,-1,11,254,3123,393,-1,-1,-1,-1,-1,-1,-1,-1,0,108407,-1,-1,2306,0,1,9,-1,-1,-1,-1,1517,-1,7,1
356 | 10013157,秘法鞋7级,FFFFFF,被动增加己方全体魔法值上限1800,该效果不可叠加。重量53.,z_mifaxie.jpg,1,134,-1,0,0,0,1513,3,3,-1,-1,-1,-1,-1,-1,0,108507,-1,-1,1450,0,1,9,-1,-1,-1,-1,1518,-1,7,1
357 | 10013158,古之忍耐姜歌7级,FFFFFF,为己方所有单位增加1的攻击速度,该效果不可叠加。重量62.,z_guzhirennaijiangge.jpg,1,205,-1,79,54,2736,707,3,1,-1,-1,-1,-1,-1,-1,0,108707,-1,-1,1726,0,1,9,-1,-1,-1,-1,1519,-1,7,1
358 | 10013159,羊刀7级,FFFFFF,将敌方单位变成青蛙,持续10回合。重量181.,z_yangdao.jpg,1,1284,-1,142,96,4636,6076,-1,-1,-1,-1,-1,-1,-1,-1,1,108907,35,10000,5675,0,1,9,-1,-1,-1,-1,1520,-1,7,1
359 | 10013160,紫怨7级,FFFFFF,使敌方单体在20回合内减少魔法伤害减免55%。重量134.,z_ziyuan.jpg,1,356,-1,145,0,0,2580,-1,-1,-1,-1,-1,-1,-1,-1,1,109007,25,10000,4125,0,1,9,-1,-1,-1,-1,1521,-1,7,1
360 | 10013161,红杖7级,FFFFFF,对敌方单体使用能量冲击造成2200点魔法伤害。重量94.,z_hongzhang.jpg,1,339,-1,79,15,912,1176,-1,-1,-1,-1,-1,-1,-1,-1,1,109107,40,10000,2780,0,1,9,-1,-1,-1,-1,1522,-1,7,1
361 | 10013162,死灵书7级,FFFFFF,召唤死灵减少敌方单体目标1200点法力值和生命值。重量91.,z_silingshu.jpg,1,339,-1,51,0,1821,1176,-1,-1,-1,-1,-1,-1,-1,-1,1,109207,80,10000,2700,0,1,9,-1,-1,-1,-1,1523,-1,7,1
362 | 10013163,纷争面纱7级,FFFFFF,减少敌方全体40%魔法伤害减免,持续20回合。重量103.,z_fenzhengmiansha.jpg,1,356,-1,30,36,2400,946,-1,-1,-1,-1,-1,-1,-1,-1,1,109307,30,10000,3100,0,1,9,-1,-1,-1,-1,1524,-1,7,1
363 | 10013164,强袭装甲7级,FFFFFF,减少敌方物理防御400点和物理免疫15点,不可叠加。重量170.,z_qiangxi.jpg,1,1202,-1,0,696,0,0,3,7,-1,-1,-1,-1,-1,-1,0,109507,-1,-1,5350,0,1,9,-1,-1,-1,-1,1525,-1,7,1
364 | 10013165,魔龙之心7级,FFFFFF,重量175.,z_molongzhixin.jpg,1,1202,-1,160,0,25864,0,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,5500,0,1,8,-1,-1,-1,-1,1526,-1,7,1
365 | 10013166,西瓦的守护7级,FFFFFF,对敌方全体使用极寒冲击,造成1000点魔法伤害。重量151.,z_xiwa.jpg,1,1160,-1,121,696,0,3595,-1,-1,-1,-1,-1,-1,-1,-1,1,109707,30,10000,4700,0,1,9,-1,-1,-1,-1,1527,-1,7,1
366 | 10013167,血精石7级,FFFFFF,重量161.,z_xuejingshi.jpg,1,963,-1,0,0,11604,3240,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,5050,0,1,9,-1,-1,-1,-1,1528,-1,7,1
367 | 10013168,幻影斧7级,FFFFFF,对敌方单体造成物理攻击3倍再附加900的伤害。重量161.,z_huanyingfu.jpg,1,1160,-1,185,243,4636,1201,3,3,-1,-1,-1,-1,-1,-1,1,109807,35,10000,5050,0,1,9,-1,-1,-1,-1,1529,-1,7,1
368 | 10013169,撒旦之邪力7级,FFFFFF,主动使用不洁狂热使自身恢复2200点生命值。重量194.,z_sadanzhixieli.jpg,1,1284,-1,184,234,11590,0,-1,-1,-1,-1,-1,-1,-1,-1,1,110007,35,10000,6150,0,1,9,-1,-1,-1,-1,1530,-1,7,1
369 | 10013170,雷神之锤7级,FFFFFF,连环闪电使敌方全体受到800点魔法伤害。重量175.,z_dadiancui.jpg,1,1202,-1,95,0,0,0,3,12,-1,-1,-1,-1,-1,-1,1,110107,30,10000,5500,0,1,9,-1,-1,-1,-1,1531,-1,7,1
370 | 10013171,斯嘉蒂之眼7级,FFFFFF,霜冻使敌方单体减少速度20%,持续3回合。重量185.,z_bingyan.jpg,1,1284,-1,304,696,17690,5305,-1,-1,-1,-1,-1,-1,-1,-1,1,110207,0,10000,5850,0,1,9,-1,-1,-1,-1,1532,-1,7,1
371 | 10013172,黯灭7级,FFFFFF,减少单体物理防御500点物理免疫30点,持续15回合。重量133.,z_anmie.jpg,1,356,-1,158,0,0,0,-1,-1,-1,-1,-1,-1,-1,-1,1,110607,0,10000,4100,0,1,9,-1,-1,-1,-1,1533,-1,7,1
372 | 10013173,散失之刃7级,FFFFFF,使敌方目标受到700点伤害,并减少450点魔法值。重量109.,z_sanshi.jpg,1,356,-1,57,133,0,470,-1,-1,-1,-1,-1,-1,-1,-1,1,110707,0,10000,3300,0,1,9,-1,-1,-1,-1,1534,-1,7,1
373 | 10013174,天堂之戟7级,FFFFFF,使目标残废,削弱其攻击速度20%,持续3回合。重量128.,z_tiantangzhiji.jpg,1,859,-1,106,0,6082,0,7,45,-1,-1,-1,-1,-1,-1,1,110807,0,1500,3950,0,1,9,-1,-1,-1,-1,1535,-1,7,1
374 | 10013175,圣剑7级,FFFFFF,重量310.,z_shengjian.jpg,1,1866,-1,1012,0,0,0,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,6200,0,1,8,-1,-1,-1,-1,1536,-1,7,1
375 | 10013176,金箍棒7级,FFFFFF,猛击对方单体目标使其受到1400点伤害。重量172.,z_jingubang.jpg,1,1202,-1,323,0,0,0,6,100,-1,-1,-1,-1,-1,-1,1,110907,0,3500,5400,0,1,9,-1,-1,-1,-1,1537,-1,7,1
376 | 10013177,辉耀7级,FFFFFF,使敌方全体受到每2回合160点的持续伤害,不可叠加。重量164.,z_huiyao.jpg,1,1160,-1,240,0,0,0,-1,-1,-1,-1,-1,-1,-1,-1,0,111007,-1,-1,5150,0,1,9,-1,-1,-1,-1,1538,-1,7,1
377 | 10013178,蝴蝶7级,FFFFFF,重量190.,z_hudie.jpg,1,1284,-1,240,278,0,0,3,10,7,50,-1,-1,-1,-1,-1,-1,-1,-1,6000,0,1,9,-1,-1,-1,-1,1539,-1,7,1
378 | 10013179,大炮7级,FFFFFF,重量178.,z_dapao.jpg,1,1284,-1,326,0,0,0,8,25,14,300,-1,-1,-1,-1,-1,-1,-1,-1,5600,0,1,9,-1,-1,-1,-1,1540,-1,7,1
379 | 10013180,狂战斧7级,FFFFFF,溅射使敌方目标周围受到自身攻击100%伤害。重量140.,z_kuangzhan.jpg,1,356,-1,172,0,2400,616,-1,-1,-1,-1,-1,-1,-1,-1,1,111207,0,10000,4350,0,1,9,-1,-1,-1,-1,1541,-1,7,1
380 | 10013181,深渊之刃7级,FFFFFF,主动使用压服使敌方单体目标眩晕9回合。重量212.,z_shenyuanzhiren.jpg,1,1284,-1,446,0,4636,0,-1,-1,-1,-1,-1,-1,-1,-1,1,111307,60,10000,6750,0,1,9,-1,-1,-1,-1,1542,-1,7,1
381 | 10013182,黑皇杖7级,FFFFFF,使自身免受50%魔法伤害,z_heihuang.jpg,1,361,-1,89,0,3043,0,-1,-1,-1,-1,-1,-1,-1,-1,1,109601,55,10000,3900,0,1,9,-1,-1,-1,-1,1543,-1,7,1
382 | 10013183,绿杖7级,FFFFFF,使自己受到物理伤害减少30%,z_lvzhang.jpg,1,439,-1,84,70,3245,843,-1,-1,-1,-1,-1,-1,-1,-1,0,111601,30,10000,1600,0,1,9,-1,-1,-1,-1,1544,-1,7,1
383 | 10013184,散夜对剑7级,FFFFFF,使目标残废,削弱其攻击速度30%,持续3回合。,z_duijian.jpg,1,356,-1,115,100,4865,0,3,5,-1,-1,-1,-1,-1,-1,1,109901,0,1500,4100,0,1,9,-1,-1,-1,-1,1545,-1,7,1
384 | 10013185,先锋盾7级,FFFFFF,,z_xianfengdun.jpg,1,155,-1,0,50,7949,0,15,10,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,2225,0,1,9,-1,-1,-1,-1,1546,-1,7,1
385 | 10013186,卡嘉之洞察长笛7级,FFFFFF,,z_dizi.jpg,1,290,-1,0,0,4967,0,21,40,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,3628,0,1,9,-1,-1,-1,-1,1547,-1,7,1
386 | 10013187,梅肯斯姆8级,FFFFFF,增加己方全体1600点生命上限,该效果不可叠加。重量79.,z_meikensimu.jpg,1,257,-1,12,304,3560,471,-1,-1,-1,-1,-1,-1,-1,-1,0,108408,-1,-1,2306,0,1,9,-1,-1,-1,-1,1548,-1,8,1
387 | 10013188,秘法鞋8级,FFFFFF,被动增加己方全体魔法值上限2100,该效果不可叠加。重量53.,z_mifaxie.jpg,1,134,-1,0,0,0,1815,3,3,-1,-1,-1,-1,-1,-1,0,108508,-1,-1,1450,0,1,9,-1,-1,-1,-1,1549,-1,8,1
388 | 10013189,古之忍耐姜歌8级,FFFFFF,为己方所有单位增加1的攻击速度,该效果不可叠加。重量62.,z_guzhirennaijiangge.jpg,1,205,-1,90,64,3119,848,3,1,-1,-1,-1,-1,-1,-1,0,108708,-1,-1,1726,0,1,9,-1,-1,-1,-1,1550,-1,8,1
389 | 10013190,羊刀8级,FFFFFF,将敌方单位变成青蛙,持续11回合。重量181.,z_yangdao.jpg,1,1284,-1,163,115,5285,7291,-1,-1,-1,-1,-1,-1,-1,-1,1,108908,35,10000,5675,0,1,9,-1,-1,-1,-1,1551,-1,8,1
390 | 10013191,紫怨8级,FFFFFF,使敌方单体在20回合内减少魔法伤害减免60%。重量134.,z_ziyuan.jpg,1,356,-1,166,0,0,3096,-1,-1,-1,-1,-1,-1,-1,-1,1,109008,25,10000,4125,0,1,9,-1,-1,-1,-1,1552,-1,8,1
391 | 10013192,红杖8级,FFFFFF,对敌方单体使用能量冲击造成2500点魔法伤害。重量94.,z_hongzhang.jpg,1,339,-1,90,18,1039,1411,-1,-1,-1,-1,-1,-1,-1,-1,1,109108,40,10000,2780,0,1,9,-1,-1,-1,-1,1553,-1,8,1
392 | 10013193,死灵书8级,FFFFFF,召唤死灵减少敌方单体目标1400点法力值和生命值。重量91.,z_silingshu.jpg,1,339,-1,58,0,2075,1411,-1,-1,-1,-1,-1,-1,-1,-1,1,109208,80,10000,2700,0,1,9,-1,-1,-1,-1,1554,-1,8,1
393 | 10013194,纷争面纱8级,FFFFFF,减少敌方全体45%魔法伤害减免,持续20回合。重量103.,z_fenzhengmiansha.jpg,1,356,-1,34,43,2736,1135,-1,-1,-1,-1,-1,-1,-1,-1,1,109308,30,10000,3100,0,1,9,-1,-1,-1,-1,1555,-1,8,1
394 | 10013195,强袭装甲8级,FFFFFF,减少敌方物理防御450点和物理免疫15点,不可叠加。重量170.,z_qiangxi.jpg,1,1202,-1,0,835,0,0,3,7,-1,-1,-1,-1,-1,-1,0,109508,-1,-1,5350,0,1,9,-1,-1,-1,-1,1556,-1,8,1
395 | 10013196,魔龙之心8级,FFFFFF,重量175.,z_molongzhixin.jpg,1,1202,-1,184,0,29484,0,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,5500,0,1,8,-1,-1,-1,-1,1557,-1,8,1
396 | 10013197,西瓦的守护8级,FFFFFF,对敌方全体使用极寒冲击,造成1100点魔法伤害。重量151.,z_xiwa.jpg,1,1160,-1,139,835,0,4314,-1,-1,-1,-1,-1,-1,-1,-1,1,109708,30,10000,4700,0,1,9,-1,-1,-1,-1,1558,-1,8,1
397 | 10013198,血精石8级,FFFFFF,重量161.,z_xuejingshi.jpg,1,963,-1,0,0,13228,3888,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,5050,0,1,9,-1,-1,-1,-1,1559,-1,8,1
398 | 10013199,幻影斧8级,FFFFFF,对敌方单体造成物理攻击3倍再附加1000的伤害。重量161.,z_huanyingfu.jpg,1,1160,-1,212,291,5285,1441,3,3,-1,-1,-1,-1,-1,-1,1,109808,35,10000,5050,0,1,9,-1,-1,-1,-1,1560,-1,8,1
399 | 10013200,撒旦之邪力8级,FFFFFF,主动使用不洁狂热使自身恢复2500点生命值。重量194.,z_sadanzhixieli.jpg,1,1284,-1,211,280,13212,0,-1,-1,-1,-1,-1,-1,-1,-1,1,110008,35,10000,6150,0,1,9,-1,-1,-1,-1,1561,-1,8,1
400 | 10013201,雷神之锤8级,FFFFFF,连环闪电使敌方全体受到900点魔法伤害。重量175.,z_dadiancui.jpg,1,1202,-1,109,0,0,0,3,12,-1,-1,-1,-1,-1,-1,1,110108,30,10000,5500,0,1,9,-1,-1,-1,-1,1562,-1,8,1
401 | 10013202,斯嘉蒂之眼8级,FFFFFF,霜冻使敌方单体减少速度20%,持续3回合。重量185.,z_bingyan.jpg,1,1284,-1,349,835,20166,6366,-1,-1,-1,-1,-1,-1,-1,-1,1,110208,0,10000,5850,0,1,9,-1,-1,-1,-1,1563,-1,8,1
402 | 10013203,黯灭8级,FFFFFF,减少单体物理防御580点物理免疫30点,持续15回合。重量133.,z_anmie.jpg,1,356,-1,181,0,0,0,-1,-1,-1,-1,-1,-1,-1,-1,1,110608,0,10000,4100,0,1,9,-1,-1,-1,-1,1564,-1,8,1
403 | 10013204,散失之刃8级,FFFFFF,使敌方目标受到825点伤害,并减少450点魔法值。重量109.,z_sanshi.jpg,1,356,-1,65,159,0,564,-1,-1,-1,-1,-1,-1,-1,-1,1,110708,0,10000,3300,0,1,9,-1,-1,-1,-1,1565,-1,8,1
404 | 10013205,天堂之戟8级,FFFFFF,使目标残废,削弱其攻击速度20%,持续3回合。重量128.,z_tiantangzhiji.jpg,1,859,-1,121,0,6933,0,7,45,-1,-1,-1,-1,-1,-1,1,110808,0,1500,3950,0,1,9,-1,-1,-1,-1,1566,-1,8,1
405 | 10013206,圣剑8级,FFFFFF,重量310.,z_shengjian.jpg,1,1866,-1,1163,0,0,0,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,6200,0,1,8,-1,-1,-1,-1,1567,-1,8,1
406 | 10013207,金箍棒8级,FFFFFF,猛击对方单体目标使其受到1600点伤害。重量172.,z_jingubang.jpg,1,1202,-1,371,0,0,0,6,100,-1,-1,-1,-1,-1,-1,1,110908,0,3500,5400,0,1,9,-1,-1,-1,-1,1568,-1,8,1
407 | 10013208,辉耀8级,FFFFFF,使敌方全体受到每2回合180点的持续伤害,不可叠加。重量164.,z_huiyao.jpg,1,1160,-1,276,0,0,0,-1,-1,-1,-1,-1,-1,-1,-1,0,111008,-1,-1,5150,0,1,9,-1,-1,-1,-1,1569,-1,8,1
408 | 10013209,蝴蝶8级,FFFFFF,重量190.,z_hudie.jpg,1,1284,-1,276,333,0,0,3,10,7,50,-1,-1,-1,-1,-1,-1,-1,-1,6000,0,1,9,-1,-1,-1,-1,1570,-1,8,1
409 | 10013210,大炮8级,FFFFFF,重量178.,z_dapao.jpg,1,1284,-1,374,0,0,0,8,25,14,310,-1,-1,-1,-1,-1,-1,-1,-1,5600,0,1,9,-1,-1,-1,-1,1571,-1,8,1
410 | 10013211,狂战斧8级,FFFFFF,溅射使敌方目标周围受到自身攻击110%伤害。重量140.,z_kuangzhan.jpg,1,356,-1,197,0,2736,739,-1,-1,-1,-1,-1,-1,-1,-1,1,111208,0,10000,4350,0,1,9,-1,-1,-1,-1,1572,-1,8,1
411 | 10013212,深渊之刃8级,FFFFFF,主动使用压服使敌方单体目标眩晕10回合。重量212.,z_shenyuanzhiren.jpg,1,1284,-1,512,0,5285,0,-1,-1,-1,-1,-1,-1,-1,-1,1,111308,60,10000,6750,0,1,9,-1,-1,-1,-1,1573,-1,8,1
412 | 10013213,黑皇杖8级,FFFFFF,使自身免受50%魔法伤害,z_heihuang.jpg,1,361,-1,102,0,3469,0,-1,-1,-1,-1,-1,-1,-1,-1,1,109601,55,10000,3900,0,1,9,-1,-1,-1,-1,1574,-1,8,1
413 | 10013214,绿杖8级,FFFFFF,使自己受到物理伤害减少30%,z_lvzhang.jpg,1,439,-1,96,84,3699,1011,-1,-1,-1,-1,-1,-1,-1,-1,0,111601,30,10000,1600,0,1,9,-1,-1,-1,-1,1575,-1,8,1
414 | 10013215,散夜对剑8级,FFFFFF,使目标残废,削弱其攻击速度30%,持续3回合。,z_duijian.jpg,1,356,-1,132,120,5546,0,3,5,-1,-1,-1,-1,-1,-1,1,109901,0,1500,4100,0,1,9,-1,-1,-1,-1,1576,-1,8,1
415 | 10013216,先锋盾8级,FFFFFF,,z_xianfengdun.jpg,1,155,-1,0,60,9061,0,15,10,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,2225,0,1,9,-1,-1,-1,-1,1577,-1,8,1
416 | 10013217,卡嘉之洞察长笛8级,FFFFFF,,z_dizi.jpg,1,290,-1,0,0,5662,0,21,40,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,3628,0,1,9,-1,-1,-1,-1,1578,-1,8,1
417 | 10013218,梅肯斯姆9级,FFFFFF,增加己方全体1800点生命上限,该效果不可叠加。重量79.,z_meikensimu.jpg,1,257,-1,13,364,4094,565,-1,-1,-1,-1,-1,-1,-1,-1,0,108409,-1,-1,2306,0,1,9,-1,-1,-1,-1,1579,-1,9,1
418 | 10013219,秘法鞋9级,FFFFFF,被动增加己方全体魔法值上限2400,该效果不可叠加。重量53.,z_mifaxie.jpg,1,134,-1,0,0,0,2178,3,3,-1,-1,-1,-1,-1,-1,0,108509,-1,-1,1450,0,1,9,-1,-1,-1,-1,1580,-1,9,1
419 | 10013220,古之忍耐姜歌9级,FFFFFF,为己方所有单位增加1的攻击速度,该效果不可叠加。重量62.,z_guzhirennaijiangge.jpg,1,205,-1,103,76,3586,1017,3,1,-1,-1,-1,-1,-1,-1,0,108709,-1,-1,1726,0,1,9,-1,-1,-1,-1,1581,-1,9,1
420 | 10013221,羊刀9级,FFFFFF,将敌方单位变成青蛙,持续12回合。重量181.,z_yangdao.jpg,1,1284,-1,187,138,6077,8749,-1,-1,-1,-1,-1,-1,-1,-1,1,108909,35,10000,5675,0,1,9,-1,-1,-1,-1,1582,-1,9,1
421 | 10013222,紫怨9级,FFFFFF,使敌方单体在20回合内减少魔法伤害减免60%。重量134.,z_ziyuan.jpg,1,356,-1,190,0,0,3715,-1,-1,-1,-1,-1,-1,-1,-1,1,109009,25,10000,4125,0,1,9,-1,-1,-1,-1,1583,-1,9,1
422 | 10013223,红杖9级,FFFFFF,对敌方单体使用能量冲击造成2800点魔法伤害。重量94.,z_hongzhang.jpg,1,339,-1,103,21,1194,1693,-1,-1,-1,-1,-1,-1,-1,-1,1,109109,40,10000,2780,0,1,9,-1,-1,-1,-1,1584,-1,9,1
423 | 10013224,死灵书9级,FFFFFF,召唤死灵减少敌方单体目标1600点法力值和生命值。重量91.,z_silingshu.jpg,1,339,-1,66,0,2386,1693,-1,-1,-1,-1,-1,-1,-1,-1,1,109209,80,10000,2700,0,1,9,-1,-1,-1,-1,1585,-1,9,1
424 | 10013225,纷争面纱9级,FFFFFF,减少敌方全体50%魔法伤害减免,持续20回合。重量103.,z_fenzhengmiansha.jpg,1,356,-1,39,51,3146,1362,-1,-1,-1,-1,-1,-1,-1,-1,1,109309,30,10000,3100,0,1,9,-1,-1,-1,-1,1586,-1,9,1
425 | 10013226,强袭装甲9级,FFFFFF,减少敌方物理防御500点和物理免疫15点,不可叠加。重量170.,z_qiangxi.jpg,1,1202,-1,0,1002,0,0,3,7,-1,-1,-1,-1,-1,-1,0,109509,-1,-1,5350,0,1,9,-1,-1,-1,-1,1587,-1,9,1
426 | 10013227,魔龙之心9级,FFFFFF,重量175.,z_molongzhixin.jpg,1,1202,-1,211,0,33906,0,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,5500,0,1,8,-1,-1,-1,-1,1588,-1,9,1
427 | 10013228,西瓦的守护9级,FFFFFF,对敌方全体使用极寒冲击,造成1200点魔法伤害。重量151.,z_xiwa.jpg,1,1160,-1,159,1002,0,5176,-1,-1,-1,-1,-1,-1,-1,-1,1,109709,30,10000,4700,0,1,9,-1,-1,-1,-1,1589,-1,9,1
428 | 10013229,血精石9级,FFFFFF,重量161.,z_xuejingshi.jpg,1,963,-1,0,0,15212,4665,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,5050,0,1,9,-1,-1,-1,-1,1590,-1,9,1
429 | 10013230,幻影斧9级,FFFFFF,对敌方单体造成物理攻击3倍再附加1100的伤害。重量161.,z_huanyingfu.jpg,1,1160,-1,243,349,6077,1729,3,3,-1,-1,-1,-1,-1,-1,1,109809,35,10000,5050,0,1,9,-1,-1,-1,-1,1591,-1,9,1
430 | 10013231,撒旦之邪力9级,FFFFFF,主动使用不洁狂热使自身恢复2800点生命值。重量194.,z_sadanzhixieli.jpg,1,1284,-1,242,336,15193,0,-1,-1,-1,-1,-1,-1,-1,-1,1,110009,35,10000,6150,0,1,9,-1,-1,-1,-1,1592,-1,9,1
431 | 10013232,雷神之锤9级,FFFFFF,连环闪电使敌方全体受到1000点魔法伤害。重量175.,z_dadiancui.jpg,1,1202,-1,125,0,0,0,3,12,-1,-1,-1,-1,-1,-1,1,110109,30,10000,5500,0,1,9,-1,-1,-1,-1,1593,-1,9,1
432 | 10013233,斯嘉蒂之眼9级,FFFFFF,霜冻使敌方单体减少速度20%,持续3回合。重量185.,z_bingyan.jpg,1,1284,-1,401,1002,23190,7639,-1,-1,-1,-1,-1,-1,-1,-1,1,110209,0,10000,5850,0,1,9,-1,-1,-1,-1,1594,-1,9,1
433 | 10013234,黯灭9级,FFFFFF,减少单体物理防御660点物理免疫30点,持续15回合。重量133.,z_anmie.jpg,1,356,-1,208,0,0,0,-1,-1,-1,-1,-1,-1,-1,-1,1,110609,0,10000,4100,0,1,9,-1,-1,-1,-1,1595,-1,9,1
434 | 10013235,散失之刃9级,FFFFFF,使敌方目标受到950点伤害,并减少450点魔法值。重量109.,z_sanshi.jpg,1,356,-1,74,190,0,676,-1,-1,-1,-1,-1,-1,-1,-1,1,110709,0,10000,3300,0,1,9,-1,-1,-1,-1,1596,-1,9,1
435 | 10013236,天堂之戟9级,FFFFFF,使目标残废,削弱其攻击速度20%,持续3回合。重量128.,z_tiantangzhiji.jpg,1,859,-1,139,0,7972,0,7,45,-1,-1,-1,-1,-1,-1,1,110809,0,1500,3950,0,1,9,-1,-1,-1,-1,1597,-1,9,1
436 | 10013237,圣剑9级,FFFFFF,重量310.,z_shengjian.jpg,1,1866,-1,1337,0,0,0,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,6200,0,1,8,-1,-1,-1,-1,1598,-1,9,1
437 | 10013238,金箍棒9级,FFFFFF,猛击对方单体目标使其受到1800点伤害。重量172.,z_jingubang.jpg,1,1202,-1,426,0,0,0,6,100,-1,-1,-1,-1,-1,-1,1,110909,0,3500,5400,0,1,9,-1,-1,-1,-1,1599,-1,9,1
438 | 10013239,辉耀9级,FFFFFF,使敌方全体受到每2回合200点的持续伤害,不可叠加。重量164.,z_huiyao.jpg,1,1160,-1,317,0,0,0,-1,-1,-1,-1,-1,-1,-1,-1,0,111009,-1,-1,5150,0,1,9,-1,-1,-1,-1,1600,-1,9,1
439 | 10013240,蝴蝶9级,FFFFFF,重量190.,z_hudie.jpg,1,1284,-1,317,399,0,0,3,10,7,50,-1,-1,-1,-1,-1,-1,-1,-1,6000,0,1,9,-1,-1,-1,-1,1601,-1,9,1
440 | 10013241,大炮9级,FFFFFF,重量178.,z_dapao.jpg,1,1284,-1,430,0,0,0,8,25,14,310,-1,-1,-1,-1,-1,-1,-1,-1,5600,0,1,9,-1,-1,-1,-1,1602,-1,9,1
441 | 10013242,狂战斧9级,FFFFFF,溅射使敌方目标周围受到自身攻击120%伤害。重量140.,z_kuangzhan.jpg,1,356,-1,226,0,3146,886,-1,-1,-1,-1,-1,-1,-1,-1,1,111209,0,10000,4350,0,1,9,-1,-1,-1,-1,1603,-1,9,1
442 | 10013243,深渊之刃9级,FFFFFF,主动使用压服使敌方单体目标眩晕11回合。重量212.,z_shenyuanzhiren.jpg,1,1284,-1,588,0,6077,0,-1,-1,-1,-1,-1,-1,-1,-1,1,111309,60,10000,6750,0,1,9,-1,-1,-1,-1,1604,-1,9,1
443 | 10013244,黑皇杖9级,FFFFFF,使自身免受50%魔法伤害,z_heihuang.jpg,1,361,-1,117,0,3989,0,-1,-1,-1,-1,-1,-1,-1,-1,1,109601,55,10000,3900,0,1,9,-1,-1,-1,-1,1605,-1,9,1
444 | 10013245,绿杖9级,FFFFFF,使自己受到物理伤害减少30%,z_lvzhang.jpg,1,439,-1,110,100,4253,1213,-1,-1,-1,-1,-1,-1,-1,-1,0,111601,30,10000,1600,0,1,9,-1,-1,-1,-1,1606,-1,9,1
445 | 10013246,散夜对剑9级,FFFFFF,使目标残废,削弱其攻击速度30%,持续3回合。,z_duijian.jpg,1,356,-1,151,144,6377,0,3,5,-1,-1,-1,-1,-1,-1,1,109901,0,1500,4100,0,1,9,-1,-1,-1,-1,1607,-1,9,1
446 | 10013247,先锋盾9级,FFFFFF,,z_xianfengdun.jpg,1,155,-1,0,72,10420,0,15,10,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,2225,0,1,9,-1,-1,-1,-1,1608,-1,9,1
447 | 10013248,卡嘉之洞察长笛9级,FFFFFF,,z_dizi.jpg,1,290,-1,0,0,6511,0,21,40,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,3628,0,1,9,-1,-1,-1,-1,1609,-1,9,1
448 | 10013249,梅肯斯姆10级,FFFFFF,增加己方全体2000点生命上限,该效果不可叠加。重量79.,z_meikensimu.jpg,1,257,-1,14,418,4789,649,-1,-1,-1,-1,-1,-1,-1,-1,0,1084010,-1,-1,2306,0,1,9,-1,-1,-1,-1,1610,-1,10,-1
449 | 10013250,秘法鞋10级,FFFFFF,被动增加己方全体魔法值上限2700,该效果不可叠加。重量53.,z_mifaxie.jpg,1,134,-1,0,0,0,2504,3,3,-1,-1,-1,-1,-1,-1,0,108510,-1,-1,1450,0,1,9,-1,-1,-1,-1,1611,-1,10,-1
450 | 10013251,古之忍耐姜歌10级,FFFFFF,为己方所有单位增加1的攻击速度,该效果不可叠加。重量62.,z_guzhirennaijiangge.jpg,1,205,-1,118,87,4195,1169,3,1,-1,-1,-1,-1,-1,-1,0,108710,-1,-1,1726,0,1,9,-1,-1,-1,-1,1612,-1,10,-1
451 | 10013252,羊刀10级,FFFFFF,将敌方单位变成青蛙,持续13回合。重量181.,z_yangdao.jpg,1,1284,-1,215,158,7110,10061,-1,-1,-1,-1,-1,-1,-1,-1,1,108910,35,10000,5675,0,1,9,-1,-1,-1,-1,1613,-1,10,-1
452 | 10013253,紫怨10级,FFFFFF,使敌方单体在20回合内减少魔法伤害减免60%。重量134.,z_ziyuan.jpg,1,356,-1,218,0,0,4272,-1,-1,-1,-1,-1,-1,-1,-1,1,109010,25,10000,4125,0,1,9,-1,-1,-1,-1,1614,-1,10,-1
453 | 10013254,红杖10级,FFFFFF,对敌方单体使用能量冲击造成3100点魔法伤害。重量94.,z_hongzhang.jpg,1,339,-1,118,24,1396,1946,-1,-1,-1,-1,-1,-1,-1,-1,1,109110,40,10000,2780,0,1,9,-1,-1,-1,-1,1615,-1,10,-1
454 | 10013255,死灵书10级,FFFFFF,召唤死灵减少敌方单体目标1800点法力值和生命值。重量91.,z_silingshu.jpg,1,339,-1,75,0,2791,1946,-1,-1,-1,-1,-1,-1,-1,-1,1,109210,80,10000,2700,0,1,9,-1,-1,-1,-1,1616,-1,10,-1
455 | 10013256,纷争面纱10级,FFFFFF,减少敌方全体55%魔法伤害减免,持续20回合。重量103.,z_fenzhengmiansha.jpg,1,356,-1,44,58,3680,1566,-1,-1,-1,-1,-1,-1,-1,-1,1,109310,30,10000,3100,0,1,9,-1,-1,-1,-1,1617,-1,10,-1
456 | 10013257,强袭装甲10级,FFFFFF,减少敌方物理防御550点和物理免疫15点,不可叠加。重量170.,z_qiangxi.jpg,1,1202,-1,0,1152,0,0,3,7,-1,-1,-1,-1,-1,-1,0,109510,-1,-1,5350,0,1,9,-1,-1,-1,-1,1618,-1,10,-1
457 | 10013258,魔龙之心10级,FFFFFF,重量175.,z_molongzhixin.jpg,1,1202,-1,242,0,39670,0,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,5500,0,1,8,-1,-1,-1,-1,1619,-1,10,-1
458 | 10013259,西瓦的守护10级,FFFFFF,对敌方全体使用极寒冲击,造成1300点魔法伤害。重量151.,z_xiwa.jpg,1,1160,-1,182,1152,0,5952,-1,-1,-1,-1,-1,-1,-1,-1,1,109710,30,10000,4700,0,1,9,-1,-1,-1,-1,1620,-1,10,-1
459 | 10013260,血精石10级,FFFFFF,重量161.,z_xuejingshi.jpg,1,963,-1,0,0,17798,5364,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,5050,0,1,9,-1,-1,-1,-1,1621,-1,10,-1
460 | 10013261,幻影斧10级,FFFFFF,对敌方单体造成物理攻击3倍再附加1200的伤害。重量161.,z_huanyingfu.jpg,1,1160,-1,279,401,7110,1988,3,3,-1,-1,-1,-1,-1,-1,1,109810,35,10000,5050,0,1,9,-1,-1,-1,-1,1622,-1,10,-1
461 | 10013262,撒旦之邪力10级,FFFFFF,主动使用不洁狂热使自身恢复3100点生命值。重量194.,z_sadanzhixieli.jpg,1,1284,-1,278,386,17775,0,-1,-1,-1,-1,-1,-1,-1,-1,1,110010,35,10000,6150,0,1,9,-1,-1,-1,-1,1623,-1,10,-1
462 | 10013263,雷神之锤10级,FFFFFF,连环闪电使敌方全体受到1100点魔法伤害。重量175.,z_dadiancui.jpg,1,1202,-1,143,0,0,0,3,12,-1,-1,-1,-1,-1,-1,1,110110,30,10000,5500,0,1,9,-1,-1,-1,-1,1624,-1,10,-1
463 | 10013264,斯嘉蒂之眼10级,FFFFFF,霜冻使敌方单体减少速度20%,持续3回合。重量185.,z_bingyan.jpg,1,1284,-1,461,1152,27132,8784,-1,-1,-1,-1,-1,-1,-1,-1,1,110210,0,10000,5850,0,1,9,-1,-1,-1,-1,1625,-1,10,-1
464 | 10013265,黯灭10级,FFFFFF,减少单体物理防御740点物理免疫30点,持续15回合。重量133.,z_anmie.jpg,1,356,-1,239,0,0,0,-1,-1,-1,-1,-1,-1,-1,-1,1,110610,0,10000,4100,0,1,9,-1,-1,-1,-1,1626,-1,10,-1
465 | 10013266,散失之刃10级,FFFFFF,使敌方目标受到1075点伤害,并减少450点魔法值。重量109.,z_sanshi.jpg,1,356,-1,85,218,0,777,-1,-1,-1,-1,-1,-1,-1,-1,1,110710,0,10000,3300,0,1,9,-1,-1,-1,-1,1627,-1,10,-1
466 | 10013267,天堂之戟10级,FFFFFF,使目标残废,削弱其攻击速度20%,持续3回合。重量128.,z_tiantangzhiji.jpg,1,859,-1,159,0,9327,0,7,45,-1,-1,-1,-1,-1,-1,1,110810,0,1500,3950,0,1,9,-1,-1,-1,-1,1628,-1,10,-1
467 | 10013268,圣剑10级,FFFFFF,重量310.,z_shengjian.jpg,1,1866,-1,1537,0,0,0,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,6200,0,1,8,-1,-1,-1,-1,1629,-1,10,-1
468 | 10013269,金箍棒10级,FFFFFF,猛击对方单体目标使其受到2000点伤害。重量172.,z_jingubang.jpg,1,1202,-1,489,0,0,0,6,100,-1,-1,-1,-1,-1,-1,1,110910,0,3500,5400,0,1,9,-1,-1,-1,-1,1630,-1,10,-1
469 | 10013270,辉耀10级,FFFFFF,使敌方全体受到每2回合220点的持续伤害,不可叠加。重量164.,z_huiyao.jpg,1,1160,-1,364,0,0,0,-1,-1,-1,-1,-1,-1,-1,-1,0,111010,-1,-1,5150,0,1,9,-1,-1,-1,-1,1631,-1,10,-1
470 | 10013271,蝴蝶10级,FFFFFF,重量190.,z_hudie.jpg,1,1284,-1,364,458,0,0,3,10,7,50,-1,-1,-1,-1,-1,-1,-1,-1,6000,0,1,9,-1,-1,-1,-1,1632,-1,10,-1
471 | 10013272,大炮10级,FFFFFF,重量178.,z_dapao.jpg,1,1284,-1,494,0,0,0,8,25,14,310,-1,-1,-1,-1,-1,-1,-1,-1,5600,0,1,9,-1,-1,-1,-1,1633,-1,10,-1
472 | 10013273,狂战斧10级,FFFFFF,溅射使敌方目标周围受到自身攻击130%伤害。重量140.,z_kuangzhan.jpg,1,356,-1,259,0,3680,1018,-1,-1,-1,-1,-1,-1,-1,-1,1,111210,0,10000,4350,0,1,9,-1,-1,-1,-1,1634,-1,10,-1
473 | 10013274,深渊之刃10级,FFFFFF,主动使用压服使敌方单体目标眩晕12回合。重量212.,z_shenyuanzhiren.jpg,1,1284,-1,676,0,7110,0,-1,-1,-1,-1,-1,-1,-1,-1,1,111310,60,10000,6750,0,1,9,-1,-1,-1,-1,1635,-1,10,-1
474 | 10013275,黑皇杖10级,FFFFFF,使自身免受50%魔法伤害,z_heihuang.jpg,1,361,-1,134,0,4667,0,-1,-1,-1,-1,-1,-1,-1,-1,1,109610,55,10000,3900,0,1,9,-1,-1,-1,-1,1636,-1,10,-1
475 | 10013276,绿杖10级,FFFFFF,使自己受到物理伤害减少30%,z_lvzhang.jpg,1,439,-1,126,115,4976,1394,-1,-1,-1,-1,-1,-1,-1,-1,0,111610,30,10000,1600,0,1,9,-1,-1,-1,-1,1637,-1,10,-1
476 | 10013277,散夜对剑10级,FFFFFF,使目标残废,削弱其攻击速度30%,持续3回合。,z_duijian.jpg,1,356,-1,173,165,7461,0,3,5,-1,-1,-1,-1,-1,-1,1,109910,0,1500,4100,0,1,9,-1,-1,-1,-1,1638,-1,10,-1
477 | 10013278,先锋盾10级,FFFFFF,,z_xianfengdun.jpg,1,155,-1,0,82,12191,0,15,10,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,2225,0,1,9,-1,-1,-1,-1,1639,-1,10,-1
478 | 10013279,卡嘉之洞察长笛10级,FFFFFF,,z_dizi.jpg,1,290,-1,0,0,7617,0,21,40,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,3628,0,1,9,-1,-1,-1,-1,1640,-1,10,-1
479 |
--------------------------------------------------------------------------------