123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458 |
- package gmmodule
- //import (
- // "encoding/json"
- // "leafstalk/covenant/model"
- // "leafstalk/log"
- // "os"
- //)
- //
- //// 计算玩家攻击力、血量、闪避
- //
- //type PlayerBattleAttr struct {
- // RoleId int64
- // State int //战斗状态 0死亡 1后台 2出战
- // Atk int64 //基础攻击
- // AtkUp float64 //伤害加成 1
- // Def int64 //基础防御
- // DefUp float64 //防御加成 1
- // Hp int64 //基础血量
- // CurrentHp int64 //当前血量
- // HpUp float64 //生命加成 1
- // AtkSpeed float64 //射速
- // AtkSpeedUp float64 //攻速加成 1
- // Shift int //偏移
- // ShiftUp float64 //精准度提升 1 shiftUp
- // LukUp float64 //暴击加成 0 crit
- // AvdUp float64 //闪避加成 0 dodge
- // CrtUp float64 //暴伤加成 1 critHarm
- // BossUp float64 //BOSS伤害加成
- // MonUp float64 //小怪伤害加成
- // InLukUp float64 //游戏内暴击加成 0 crit // 客户端实际也可能是暴击率加成 critUp
- // InAvdUp float64 //游戏内闪避加成 0 dodge
- // HpDown float64 //血量扣除
- // EleType int64 //元素类型
- // EleAtk int64 //基础元素伤害
- // EleAtkUp float64 //基础元素伤害加成
- // EleAllDef [MaxElement]int64 //元素减伤
- // EleAllDefUp [MaxElement]float64 //元素减伤减伤加成
- //}
- //
- //const (
- // /**攻击力*/
- // TalentAtk = 1
- // /**射速 */
- // TalentAtkSpeedUp = 2
- // /**暴击 */
- // TalentLuck = 3
- // /**暴击伤害 */
- // TalentCrit = 4
- // /**生命值 */
- // TalentHp = 5
- // /**免伤 */
- // TalentDef = 6
- // // /**红心恢复固定值 */
- // // TalentHpUPbloodUpNum = 7
- // // /**升级恢复固定值 */
- // // TalentUPLevelHpNum = 8
- // /**闪避 */
- // TalentAvd = 9
- // /**BOSS伤害 */
- // TalentBossUP = 10
- // /**怪物伤害 */
- // TalentMonUP = 11
- // /**高品质技能获得概率增加 */
- // // TalentLuckySkill = 12
- // /**换弹速度 */
- // // TalentReloadTimeUp = 13
- // /**降低机关伤害 */
- // // TalentBackstabberHarm = 14
- // /**等级上限 */
- // // TalentLevelLimit = 16
- //)
- //
- //const (
- // /**生命增加 */
- // SkillHp = 2
- // /**金币加成 */
- // // SkillCoinUp = 4,
- // /** 攻击加成*/
- // SkillAtkUp = 6
- // /**换弹加成 */
- // // SkillReloadTimeUp = 8
- // /**降低机关伤害 */
- // // SkillBackstabberHarm = 10
- // /**免伤加成 */
- // SkillDefUp = 11
- // /**暴击伤害 */
- // SkillCrit = 13
- // /**弹道偏移 */
- // SkillShiftUp = 14
- // /**弹夹加成 */
- // // SkillBulletNumUp = 16
- // /**攻击伤害 */
- // SkillAtk = 20
- // /**闪避加成 */
- // SkillAvd = 22
- // // 触发暴击概率
- // SkilTrigLuck = 7
- // // 触发攻速
- // SkillTrigAtkSpeedUp1 = 15
- // // 触发攻速
- // SkillTrigAtkSpeedUp2 = 16
- // // 触发伤害提升
- // SkillTrigAtkUp = 17
- // // 触发暴击概率
- // SkilTriglLuck2 = 18
- //)
- //
- //const (
- // SelectSkillAtkUp = 0 //伤害提升%
- // SelectSkillAtkSpeedUp = 1 //射速提升%
- // SelectSkillShiftUp = 2 // 弹道偏移
- // SelectSkillAvd = 3 //闪避加成%
- // SelectSkilLuck = 4 //暴击概率%
- // SelectSkillHpUp = 5 //血量加成%
- // // SelectSkillAtkUp = 6 //换单速度
- // // SelectSkillAtkUp = 7 //击杀怪物恢复血量
- // SelectSkillCritUp = 8 //暴击伤害加成
- // // SelectSkill = 9 //双重射击
- // // SelectSkill = 10 //扩充弹夹
- // // SelectSkill = 11 //蜘蛛炸弹-冰
- // // SelectSkill = 12 //蜘蛛炸弹-火
- // // SelectSkill = 13 //蜘蛛炸弹-雷
- // // SelectSkill = 14 //蜘蛛炸弹-毒
- // // SelectSkill = 15 //低级治疗
- // // SelectSkill = 16 //弹射子弹
- // // SelectSkill = 17 //跟踪飞弹
- // // SelectSkill = 18 //爆头
- // // SelectSkill = 19 //旋转盾牌
- // // SelectSkill = 20 //治疗增幅
- // // SelectSkill = 21 //无敌
- // // SelectSkill = 22 //神佑
- // // SelectSkill = 23 //愤怒
- // // SelectSkill = 24 //火焰灵符
- // // SelectSkill = 25 //寒冰灵符
- // // SelectSkill = 26 //闪电灵符
- // // SelectSkill = 27 //巫毒灵符
- // // SelectSkill = 28 //死亡冰冻
- // // SelectSkill = 29 //死亡爆炸
- // // SelectSkill = 30 //机关术
- // // SelectSkill = 31 //唤灵
- // // SelectSkill = 32 //多重子弹
- // SelectSkillAtkUp2 = 33 //弹药专家(中)
- // SelectSkillAtkSpeedUp2 = 34 //高速子弹(中)
- // SelectSkillAvd2 = 35 //身手敏捷(中)
- // SelectSkillLuck2 = 36 //专注射击(中)
- // SelectSkillHpUp2 = 37 //肾上腺素(中)
- // SelectSkillCritUp2 = 38 //高效杀伤(中)
- // // SelectSkill = 39 //扩容弹夹(中)
- // SelectSkillAtkUp3 = 40 //弹药专家(大)
- // SelectSkillAtkSpeedUp3 = 41 //高速子弹(大)
- // SelectSkillAvd3 = 42 //身手敏捷(大)
- // SelectSkillLuck3 = 43 //专注射击(大)
- // SelectSkillHpUp3 = 44 //肾上腺素(大)
- // SelectSkillCritUp3 = 45 //高效杀伤(大)
- // // SelectSkill = 46 //扩容弹夹(大)
- //)
- //
- //const (
- // BodyPartWeapon = 1
- // BodyPartHead = 2
- // BodyPartChest = 3
- // BodyPartNeck = 4
- // BodyPartGlove = 5
- // BodyPartRing = 6
- //)
- //
- //const (
- // // UnElement 无元素
- // UnElement = 0
- // // MetalElement 金
- // GoldElement = 1
- // // WoodElement 木
- // WoodElement = 2
- // // WaterElement 水
- // WaterElement = 3
- // // FireElement 火
- // FireElement = 4
- // // SoilElement 土
- // SoilElement = 5
- // // MaxElement .
- // MaxElement = 6
- //)
- //
- //var (
- // allEquipsAttr map[int64]*model.EquipBattleAttr
- // allRolesAttr map[int64]*model.RoleBattleAttr
- // allTalentAttr map[int]*model.PlayerTalentAttr
- // allSkills []*model.RoleSkill
- // allSelectSkills []*model.SelectSkill
- //)
- //
- //func NewPlayerBattleAttr() *PlayerBattleAttr {
- // ba := &PlayerBattleAttr{
- // AtkUp: 1,
- // DefUp: 1,
- // HpUp: 1,
- // AtkSpeedUp: 1,
- // CrtUp: 1,
- // ShiftUp: 1,
- // BossUp: 1,
- // MonUp: 1,
- // }
- // return ba
- //}
- //
- //func CalcBattleAttr(equips []int64, role int64, talents map[int]int, allRoles []int64) *PlayerBattleAttr {
- //
- // //初始值
- // ba := NewPlayerBattleAttr()
- //
- // //装备
- // roleRadio := AddEquipAttr(ba, equips)
- //
- // //角色
- // AddRoleAttr(ba, role, roleRadio)
- // ra, ok := allRolesAttr[role]
- // if ok {
- // AddRoleSkill(ba, ra.Skill, 2)
- // }
- //
- // for _, v := range allRoles {
- // ra, ok := allRolesAttr[v]
- // if !ok {
- // continue
- // }
- // AddRoleSkill(ba, ra.Skill, 1)
- // }
- //
- // //天赋
- // AddTalent(ba, talents)
- //
- // //结果
- // ba.AtkSpeed = ba.AtkSpeed / ba.AtkSpeedUp
- // ba.Atk = int64(float64(ba.Atk) * ba.AtkUp)
- // ba.Hp = int64(float64(ba.Hp) * ba.HpUp)
- // ba.Def = int64(float64(ba.Def) * ba.DefUp)
- // ba.Shift = int(float64(ba.Shift) / ba.ShiftUp)
- // log.Debugf("CalcBattleAttr %#v", *ba)
- // return ba
- //}
- //
- //// 增加装备属性
- //func AddEquipAttr(player *PlayerBattleAttr, equips []int64) (roleRadio float64) {
- // getPart := func(id int64) int {
- // return int(id / 10_000_000)
- // }
- //
- // for _, v := range equips {
- // part := getPart(v)
- // at, ok := allEquipsAttr[v]
- // if !ok {
- // continue
- // }
- // switch part {
- // case BodyPartWeapon:
- // player.Atk += at.Atk
- // player.AtkSpeed += float64(at.AtkSpeed)
- // player.Shift += at.Shift
- // roleRadio = at.RoleRadio
- // case BodyPartHead:
- // player.Def += at.Def
- // case BodyPartChest:
- // player.Hp += at.Hp
- // case BodyPartNeck:
- // player.Hp += at.Hp
- // case BodyPartGlove:
- // player.Def += at.Def
- // case BodyPartRing:
- // player.Hp += at.Hp
- // }
- // player.AtkSpeedUp += at.AtkSpeedUp * 0.01
- // player.LukUp += at.LukUp
- // player.AtkUp += at.AtkUp * 0.01
- // player.CrtUp += at.CrtUp * 0.01
- // player.HpUp += at.HpUp * 0.01
- // player.DefUp += at.DefUp * 0.01
- // player.AvdUp += at.AvdUp
- // player.ShiftUp += at.AccuUp * 0.01
- // player.BossUp += at.BossUp * 0.01
- // player.MonUp += at.MonUp * 0.01
- // }
- // return
- //}
- //
- //// 增加角色属性
- //func AddRoleAttr(player *PlayerBattleAttr, role int64, roleRadio float64) {
- // ra, ok := allRolesAttr[role]
- // if !ok {
- // return
- // }
- //
- // player.Atk += int64(float64(ra.Atk) / roleRadio)
- // player.Hp += ra.Hp
- // player.LukUp += ra.LuckUp
- // player.CrtUp += ra.CrtUp * 0.01
- // player.AtkSpeedUp += ra.AtkSpeedUp * 0.01
- // player.AvdUp += ra.AvdUp
- //}
- //
- //// 增加角色技能提升 skillRange=1,仅增加全体技能属性; skillRange=2,仅增加单体技能属性; skillRange=3,增加单体和全体技能属性;
- //func AddRoleSkill(player *PlayerBattleAttr, skills []int, skillRange int) {
- // for _, v := range skills {
- // sk := getSkill(v)
- //
- // // 非角色技能
- // if sk.Range < 0 {
- // continue
- // }
- //
- // if skillRange == 1 {
- // if sk.Range != 0 {
- // continue
- // }
- // } else if skillRange == 2 {
- // if sk.Range != 1 {
- // continue
- // }
- // } //else { }
- //
- // //以下无触发型技能
- // switch sk.Type {
- // case SkillHp:
- // player.Hp += int64(sk.Skill[0])
- // case SkillAtkUp:
- // player.AtkUp += sk.Skill[0]
- // case SkillDefUp:
- // player.DefUp += sk.Skill[0]
- // case SkillCrit:
- // player.CrtUp += sk.Skill[0]
- // case SkillShiftUp:
- // player.ShiftUp += sk.Skill[0]
- // case SkillAtk:
- // player.Atk += int64(sk.Skill[0])
- // case SkillAvd:
- // player.AvdUp += sk.Skill[0] * 100
- // }
- // }
- //}
- //
- //// 游戏内选择技能的加成
- //func AddSelectSkill(player *PlayerBattleAttr, skills map[int]int) {
- // for k, v := range skills {
- // sk := getSelectSkill(k)
- // if sk.Times == 1 {
- // v = 1
- // }
- //
- // up := sk.Value[0] * v
- // if up > sk.Max {
- // up = sk.Max
- // }
- //
- // //以下无触发型技能
- // switch sk.Type {
- // case SelectSkillAtkUp:
- // player.AtkUp += float64(up) * 0.01
- // case SelectSkillCritUp:
- // player.CrtUp += float64(up) * 0.01
- // case SelectSkillShiftUp:
- // player.ShiftUp += float64(up) * 0.01
- // case SelectSkillAvd:
- // player.AvdUp += float64(up)
- // case SelectSkillAtkSpeedUp:
- // player.AtkSpeedUp += float64(up) * 0.01
- // case SelectSkilLuck:
- // player.LukUp += float64(up)
- // case SelectSkillHpUp:
- // player.HpUp += float64(up) * 0.01
- // }
- // }
- //}
- //
- //// 增加天赋属性
- //func AddTalent(player *PlayerBattleAttr, talents map[int]int) {
- // getTalent := func(id int) *model.PlayerTalentAttr {
- // for _, v := range allTalentAttr {
- // if v.ID == id {
- // return v
- // }
- // }
- // return nil
- // }
- // for k, v := range talents {
- // tv := getTalent(k)
- // if tv == nil {
- // continue
- // }
- //
- // val := tv.UpValue * float64(v)
- // switch tv.ID {
- // case TalentAtk:
- // player.Atk += int64(val)
- // case TalentAtkSpeedUp:
- // player.AtkSpeedUp += val //* 0.001
- // case TalentLuck:
- // player.LukUp += val //* 0.001
- // case TalentCrit:
- // player.CrtUp += val //* 0.001
- // case TalentHp:
- // player.Hp += int64(val)
- // case TalentDef:
- // player.Def += int64(val)
- // case TalentAvd:
- // player.AvdUp += val //* 0.001
- // case TalentBossUP:
- // player.BossUp += val //* 0.001
- // case TalentMonUP:
- // player.MonUp += val //* 0.001
- // }
- // }
- //}
- //
- //func getSkill(id int) *model.RoleSkill {
- // for _, v := range allSkills {
- // if v.Id == id {
- // return v
- // }
- // }
- // return nil
- //}
- //
- //func getSelectSkill(id int) *model.SelectSkill {
- // for _, v := range allSelectSkills {
- // if v.Id == id {
- // return v
- // }
- // }
- // return nil
- //}
- //
- //func LoadBattleAttr(equipFile string, roleFile string, talentFile string, roleSkillFile string, selectSkillFile string) {
- //
- // allEquipsAttr = make(map[int64]*model.EquipBattleAttr)
- // allRolesAttr = make(map[int64]*model.RoleBattleAttr)
- // allTalentAttr = make(map[int]*model.PlayerTalentAttr, 16)
- //
- // loadJsonFile(equipFile, &allEquipsAttr)
- // loadJsonFile(roleFile, &allRolesAttr)
- // loadJsonFile(talentFile, &allTalentAttr)
- // loadJsonFile(roleSkillFile, &allSkills)
- // loadJsonFile(selectSkillFile, &allSelectSkills)
- //
- //}
- //
- //func loadJsonFile(filePath string, val interface{}) {
- // ptrFile, err := os.Open(filePath)
- // if err != nil {
- // log.Fatalln("读取json文件失败", err)
- // }
- // defer ptrFile.Close()
- //
- // decoder := json.NewDecoder(ptrFile)
- // err = decoder.Decode(val)
- // if err != nil {
- // log.Fatalln("loadJsonFile Decoder failed ", filePath, err.Error())
- // }
- //}
|