├── 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 | 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 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 32 | 33 | 34 | 35 | 38 | 39 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 | 49 | 50 | 51 | 52 | 53 | 54 | 55 | 56 | 57 | 58 | 59 | 60 | 61 | 62 | 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 | 142 | 143 | 154 | 155 | 156 | true 157 | https://goproxy.cn,direct 158 | 159 | 160 | 161 | 162 | 163 | file://$PROJECT_DIR$/Impact.go 164 | 435 165 | 167 | 168 | file://$PROJECT_DIR$/Skill.go 169 | 429 170 | 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 | --------------------------------------------------------------------------------