dps.go 12 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458
  1. package gmmodule
  2. //import (
  3. // "encoding/json"
  4. // "leafstalk/covenant/model"
  5. // "leafstalk/log"
  6. // "os"
  7. //)
  8. //
  9. //// 计算玩家攻击力、血量、闪避
  10. //
  11. //type PlayerBattleAttr struct {
  12. // RoleId int64
  13. // State int //战斗状态 0死亡 1后台 2出战
  14. // Atk int64 //基础攻击
  15. // AtkUp float64 //伤害加成 1
  16. // Def int64 //基础防御
  17. // DefUp float64 //防御加成 1
  18. // Hp int64 //基础血量
  19. // CurrentHp int64 //当前血量
  20. // HpUp float64 //生命加成 1
  21. // AtkSpeed float64 //射速
  22. // AtkSpeedUp float64 //攻速加成 1
  23. // Shift int //偏移
  24. // ShiftUp float64 //精准度提升 1 shiftUp
  25. // LukUp float64 //暴击加成 0 crit
  26. // AvdUp float64 //闪避加成 0 dodge
  27. // CrtUp float64 //暴伤加成 1 critHarm
  28. // BossUp float64 //BOSS伤害加成
  29. // MonUp float64 //小怪伤害加成
  30. // InLukUp float64 //游戏内暴击加成 0 crit // 客户端实际也可能是暴击率加成 critUp
  31. // InAvdUp float64 //游戏内闪避加成 0 dodge
  32. // HpDown float64 //血量扣除
  33. // EleType int64 //元素类型
  34. // EleAtk int64 //基础元素伤害
  35. // EleAtkUp float64 //基础元素伤害加成
  36. // EleAllDef [MaxElement]int64 //元素减伤
  37. // EleAllDefUp [MaxElement]float64 //元素减伤减伤加成
  38. //}
  39. //
  40. //const (
  41. // /**攻击力*/
  42. // TalentAtk = 1
  43. // /**射速 */
  44. // TalentAtkSpeedUp = 2
  45. // /**暴击 */
  46. // TalentLuck = 3
  47. // /**暴击伤害 */
  48. // TalentCrit = 4
  49. // /**生命值 */
  50. // TalentHp = 5
  51. // /**免伤 */
  52. // TalentDef = 6
  53. // // /**红心恢复固定值 */
  54. // // TalentHpUPbloodUpNum = 7
  55. // // /**升级恢复固定值 */
  56. // // TalentUPLevelHpNum = 8
  57. // /**闪避 */
  58. // TalentAvd = 9
  59. // /**BOSS伤害 */
  60. // TalentBossUP = 10
  61. // /**怪物伤害 */
  62. // TalentMonUP = 11
  63. // /**高品质技能获得概率增加 */
  64. // // TalentLuckySkill = 12
  65. // /**换弹速度 */
  66. // // TalentReloadTimeUp = 13
  67. // /**降低机关伤害 */
  68. // // TalentBackstabberHarm = 14
  69. // /**等级上限 */
  70. // // TalentLevelLimit = 16
  71. //)
  72. //
  73. //const (
  74. // /**生命增加 */
  75. // SkillHp = 2
  76. // /**金币加成 */
  77. // // SkillCoinUp = 4,
  78. // /** 攻击加成*/
  79. // SkillAtkUp = 6
  80. // /**换弹加成 */
  81. // // SkillReloadTimeUp = 8
  82. // /**降低机关伤害 */
  83. // // SkillBackstabberHarm = 10
  84. // /**免伤加成 */
  85. // SkillDefUp = 11
  86. // /**暴击伤害 */
  87. // SkillCrit = 13
  88. // /**弹道偏移 */
  89. // SkillShiftUp = 14
  90. // /**弹夹加成 */
  91. // // SkillBulletNumUp = 16
  92. // /**攻击伤害 */
  93. // SkillAtk = 20
  94. // /**闪避加成 */
  95. // SkillAvd = 22
  96. // // 触发暴击概率
  97. // SkilTrigLuck = 7
  98. // // 触发攻速
  99. // SkillTrigAtkSpeedUp1 = 15
  100. // // 触发攻速
  101. // SkillTrigAtkSpeedUp2 = 16
  102. // // 触发伤害提升
  103. // SkillTrigAtkUp = 17
  104. // // 触发暴击概率
  105. // SkilTriglLuck2 = 18
  106. //)
  107. //
  108. //const (
  109. // SelectSkillAtkUp = 0 //伤害提升%
  110. // SelectSkillAtkSpeedUp = 1 //射速提升%
  111. // SelectSkillShiftUp = 2 // 弹道偏移
  112. // SelectSkillAvd = 3 //闪避加成%
  113. // SelectSkilLuck = 4 //暴击概率%
  114. // SelectSkillHpUp = 5 //血量加成%
  115. // // SelectSkillAtkUp = 6 //换单速度
  116. // // SelectSkillAtkUp = 7 //击杀怪物恢复血量
  117. // SelectSkillCritUp = 8 //暴击伤害加成
  118. // // SelectSkill = 9 //双重射击
  119. // // SelectSkill = 10 //扩充弹夹
  120. // // SelectSkill = 11 //蜘蛛炸弹-冰
  121. // // SelectSkill = 12 //蜘蛛炸弹-火
  122. // // SelectSkill = 13 //蜘蛛炸弹-雷
  123. // // SelectSkill = 14 //蜘蛛炸弹-毒
  124. // // SelectSkill = 15 //低级治疗
  125. // // SelectSkill = 16 //弹射子弹
  126. // // SelectSkill = 17 //跟踪飞弹
  127. // // SelectSkill = 18 //爆头
  128. // // SelectSkill = 19 //旋转盾牌
  129. // // SelectSkill = 20 //治疗增幅
  130. // // SelectSkill = 21 //无敌
  131. // // SelectSkill = 22 //神佑
  132. // // SelectSkill = 23 //愤怒
  133. // // SelectSkill = 24 //火焰灵符
  134. // // SelectSkill = 25 //寒冰灵符
  135. // // SelectSkill = 26 //闪电灵符
  136. // // SelectSkill = 27 //巫毒灵符
  137. // // SelectSkill = 28 //死亡冰冻
  138. // // SelectSkill = 29 //死亡爆炸
  139. // // SelectSkill = 30 //机关术
  140. // // SelectSkill = 31 //唤灵
  141. // // SelectSkill = 32 //多重子弹
  142. // SelectSkillAtkUp2 = 33 //弹药专家(中)
  143. // SelectSkillAtkSpeedUp2 = 34 //高速子弹(中)
  144. // SelectSkillAvd2 = 35 //身手敏捷(中)
  145. // SelectSkillLuck2 = 36 //专注射击(中)
  146. // SelectSkillHpUp2 = 37 //肾上腺素(中)
  147. // SelectSkillCritUp2 = 38 //高效杀伤(中)
  148. // // SelectSkill = 39 //扩容弹夹(中)
  149. // SelectSkillAtkUp3 = 40 //弹药专家(大)
  150. // SelectSkillAtkSpeedUp3 = 41 //高速子弹(大)
  151. // SelectSkillAvd3 = 42 //身手敏捷(大)
  152. // SelectSkillLuck3 = 43 //专注射击(大)
  153. // SelectSkillHpUp3 = 44 //肾上腺素(大)
  154. // SelectSkillCritUp3 = 45 //高效杀伤(大)
  155. // // SelectSkill = 46 //扩容弹夹(大)
  156. //)
  157. //
  158. //const (
  159. // BodyPartWeapon = 1
  160. // BodyPartHead = 2
  161. // BodyPartChest = 3
  162. // BodyPartNeck = 4
  163. // BodyPartGlove = 5
  164. // BodyPartRing = 6
  165. //)
  166. //
  167. //const (
  168. // // UnElement 无元素
  169. // UnElement = 0
  170. // // MetalElement 金
  171. // GoldElement = 1
  172. // // WoodElement 木
  173. // WoodElement = 2
  174. // // WaterElement 水
  175. // WaterElement = 3
  176. // // FireElement 火
  177. // FireElement = 4
  178. // // SoilElement 土
  179. // SoilElement = 5
  180. // // MaxElement .
  181. // MaxElement = 6
  182. //)
  183. //
  184. //var (
  185. // allEquipsAttr map[int64]*model.EquipBattleAttr
  186. // allRolesAttr map[int64]*model.RoleBattleAttr
  187. // allTalentAttr map[int]*model.PlayerTalentAttr
  188. // allSkills []*model.RoleSkill
  189. // allSelectSkills []*model.SelectSkill
  190. //)
  191. //
  192. //func NewPlayerBattleAttr() *PlayerBattleAttr {
  193. // ba := &PlayerBattleAttr{
  194. // AtkUp: 1,
  195. // DefUp: 1,
  196. // HpUp: 1,
  197. // AtkSpeedUp: 1,
  198. // CrtUp: 1,
  199. // ShiftUp: 1,
  200. // BossUp: 1,
  201. // MonUp: 1,
  202. // }
  203. // return ba
  204. //}
  205. //
  206. //func CalcBattleAttr(equips []int64, role int64, talents map[int]int, allRoles []int64) *PlayerBattleAttr {
  207. //
  208. // //初始值
  209. // ba := NewPlayerBattleAttr()
  210. //
  211. // //装备
  212. // roleRadio := AddEquipAttr(ba, equips)
  213. //
  214. // //角色
  215. // AddRoleAttr(ba, role, roleRadio)
  216. // ra, ok := allRolesAttr[role]
  217. // if ok {
  218. // AddRoleSkill(ba, ra.Skill, 2)
  219. // }
  220. //
  221. // for _, v := range allRoles {
  222. // ra, ok := allRolesAttr[v]
  223. // if !ok {
  224. // continue
  225. // }
  226. // AddRoleSkill(ba, ra.Skill, 1)
  227. // }
  228. //
  229. // //天赋
  230. // AddTalent(ba, talents)
  231. //
  232. // //结果
  233. // ba.AtkSpeed = ba.AtkSpeed / ba.AtkSpeedUp
  234. // ba.Atk = int64(float64(ba.Atk) * ba.AtkUp)
  235. // ba.Hp = int64(float64(ba.Hp) * ba.HpUp)
  236. // ba.Def = int64(float64(ba.Def) * ba.DefUp)
  237. // ba.Shift = int(float64(ba.Shift) / ba.ShiftUp)
  238. // log.Debugf("CalcBattleAttr %#v", *ba)
  239. // return ba
  240. //}
  241. //
  242. //// 增加装备属性
  243. //func AddEquipAttr(player *PlayerBattleAttr, equips []int64) (roleRadio float64) {
  244. // getPart := func(id int64) int {
  245. // return int(id / 10_000_000)
  246. // }
  247. //
  248. // for _, v := range equips {
  249. // part := getPart(v)
  250. // at, ok := allEquipsAttr[v]
  251. // if !ok {
  252. // continue
  253. // }
  254. // switch part {
  255. // case BodyPartWeapon:
  256. // player.Atk += at.Atk
  257. // player.AtkSpeed += float64(at.AtkSpeed)
  258. // player.Shift += at.Shift
  259. // roleRadio = at.RoleRadio
  260. // case BodyPartHead:
  261. // player.Def += at.Def
  262. // case BodyPartChest:
  263. // player.Hp += at.Hp
  264. // case BodyPartNeck:
  265. // player.Hp += at.Hp
  266. // case BodyPartGlove:
  267. // player.Def += at.Def
  268. // case BodyPartRing:
  269. // player.Hp += at.Hp
  270. // }
  271. // player.AtkSpeedUp += at.AtkSpeedUp * 0.01
  272. // player.LukUp += at.LukUp
  273. // player.AtkUp += at.AtkUp * 0.01
  274. // player.CrtUp += at.CrtUp * 0.01
  275. // player.HpUp += at.HpUp * 0.01
  276. // player.DefUp += at.DefUp * 0.01
  277. // player.AvdUp += at.AvdUp
  278. // player.ShiftUp += at.AccuUp * 0.01
  279. // player.BossUp += at.BossUp * 0.01
  280. // player.MonUp += at.MonUp * 0.01
  281. // }
  282. // return
  283. //}
  284. //
  285. //// 增加角色属性
  286. //func AddRoleAttr(player *PlayerBattleAttr, role int64, roleRadio float64) {
  287. // ra, ok := allRolesAttr[role]
  288. // if !ok {
  289. // return
  290. // }
  291. //
  292. // player.Atk += int64(float64(ra.Atk) / roleRadio)
  293. // player.Hp += ra.Hp
  294. // player.LukUp += ra.LuckUp
  295. // player.CrtUp += ra.CrtUp * 0.01
  296. // player.AtkSpeedUp += ra.AtkSpeedUp * 0.01
  297. // player.AvdUp += ra.AvdUp
  298. //}
  299. //
  300. //// 增加角色技能提升 skillRange=1,仅增加全体技能属性; skillRange=2,仅增加单体技能属性; skillRange=3,增加单体和全体技能属性;
  301. //func AddRoleSkill(player *PlayerBattleAttr, skills []int, skillRange int) {
  302. // for _, v := range skills {
  303. // sk := getSkill(v)
  304. //
  305. // // 非角色技能
  306. // if sk.Range < 0 {
  307. // continue
  308. // }
  309. //
  310. // if skillRange == 1 {
  311. // if sk.Range != 0 {
  312. // continue
  313. // }
  314. // } else if skillRange == 2 {
  315. // if sk.Range != 1 {
  316. // continue
  317. // }
  318. // } //else { }
  319. //
  320. // //以下无触发型技能
  321. // switch sk.Type {
  322. // case SkillHp:
  323. // player.Hp += int64(sk.Skill[0])
  324. // case SkillAtkUp:
  325. // player.AtkUp += sk.Skill[0]
  326. // case SkillDefUp:
  327. // player.DefUp += sk.Skill[0]
  328. // case SkillCrit:
  329. // player.CrtUp += sk.Skill[0]
  330. // case SkillShiftUp:
  331. // player.ShiftUp += sk.Skill[0]
  332. // case SkillAtk:
  333. // player.Atk += int64(sk.Skill[0])
  334. // case SkillAvd:
  335. // player.AvdUp += sk.Skill[0] * 100
  336. // }
  337. // }
  338. //}
  339. //
  340. //// 游戏内选择技能的加成
  341. //func AddSelectSkill(player *PlayerBattleAttr, skills map[int]int) {
  342. // for k, v := range skills {
  343. // sk := getSelectSkill(k)
  344. // if sk.Times == 1 {
  345. // v = 1
  346. // }
  347. //
  348. // up := sk.Value[0] * v
  349. // if up > sk.Max {
  350. // up = sk.Max
  351. // }
  352. //
  353. // //以下无触发型技能
  354. // switch sk.Type {
  355. // case SelectSkillAtkUp:
  356. // player.AtkUp += float64(up) * 0.01
  357. // case SelectSkillCritUp:
  358. // player.CrtUp += float64(up) * 0.01
  359. // case SelectSkillShiftUp:
  360. // player.ShiftUp += float64(up) * 0.01
  361. // case SelectSkillAvd:
  362. // player.AvdUp += float64(up)
  363. // case SelectSkillAtkSpeedUp:
  364. // player.AtkSpeedUp += float64(up) * 0.01
  365. // case SelectSkilLuck:
  366. // player.LukUp += float64(up)
  367. // case SelectSkillHpUp:
  368. // player.HpUp += float64(up) * 0.01
  369. // }
  370. // }
  371. //}
  372. //
  373. //// 增加天赋属性
  374. //func AddTalent(player *PlayerBattleAttr, talents map[int]int) {
  375. // getTalent := func(id int) *model.PlayerTalentAttr {
  376. // for _, v := range allTalentAttr {
  377. // if v.ID == id {
  378. // return v
  379. // }
  380. // }
  381. // return nil
  382. // }
  383. // for k, v := range talents {
  384. // tv := getTalent(k)
  385. // if tv == nil {
  386. // continue
  387. // }
  388. //
  389. // val := tv.UpValue * float64(v)
  390. // switch tv.ID {
  391. // case TalentAtk:
  392. // player.Atk += int64(val)
  393. // case TalentAtkSpeedUp:
  394. // player.AtkSpeedUp += val //* 0.001
  395. // case TalentLuck:
  396. // player.LukUp += val //* 0.001
  397. // case TalentCrit:
  398. // player.CrtUp += val //* 0.001
  399. // case TalentHp:
  400. // player.Hp += int64(val)
  401. // case TalentDef:
  402. // player.Def += int64(val)
  403. // case TalentAvd:
  404. // player.AvdUp += val //* 0.001
  405. // case TalentBossUP:
  406. // player.BossUp += val //* 0.001
  407. // case TalentMonUP:
  408. // player.MonUp += val //* 0.001
  409. // }
  410. // }
  411. //}
  412. //
  413. //func getSkill(id int) *model.RoleSkill {
  414. // for _, v := range allSkills {
  415. // if v.Id == id {
  416. // return v
  417. // }
  418. // }
  419. // return nil
  420. //}
  421. //
  422. //func getSelectSkill(id int) *model.SelectSkill {
  423. // for _, v := range allSelectSkills {
  424. // if v.Id == id {
  425. // return v
  426. // }
  427. // }
  428. // return nil
  429. //}
  430. //
  431. //func LoadBattleAttr(equipFile string, roleFile string, talentFile string, roleSkillFile string, selectSkillFile string) {
  432. //
  433. // allEquipsAttr = make(map[int64]*model.EquipBattleAttr)
  434. // allRolesAttr = make(map[int64]*model.RoleBattleAttr)
  435. // allTalentAttr = make(map[int]*model.PlayerTalentAttr, 16)
  436. //
  437. // loadJsonFile(equipFile, &allEquipsAttr)
  438. // loadJsonFile(roleFile, &allRolesAttr)
  439. // loadJsonFile(talentFile, &allTalentAttr)
  440. // loadJsonFile(roleSkillFile, &allSkills)
  441. // loadJsonFile(selectSkillFile, &allSelectSkills)
  442. //
  443. //}
  444. //
  445. //func loadJsonFile(filePath string, val interface{}) {
  446. // ptrFile, err := os.Open(filePath)
  447. // if err != nil {
  448. // log.Fatalln("读取json文件失败", err)
  449. // }
  450. // defer ptrFile.Close()
  451. //
  452. // decoder := json.NewDecoder(ptrFile)
  453. // err = decoder.Decode(val)
  454. // if err != nil {
  455. // log.Fatalln("loadJsonFile Decoder failed ", filePath, err.Error())
  456. // }
  457. //}