BattleManager.ts 6.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176
  1. import { Framework } from "../../framework/Framework";
  2. import { LoginMgr } from "../common/LoginManager";
  3. import { BattleData, BattleLayoutData, BattleLayoutPos, BattleLayoutScale, BattleOptsBase, BattleOptsKill, BattleOptsMerge, BattleOptsMove, BattleOptsNew, BattleOptsRemove, BattleOptsType } from "../data/BattleData";
  4. import { GameEvent } from "../data/GameEvent";
  5. import { RoleData } from "../data/RoleData";
  6. import { UserData } from "../data/UserData";
  7. import { BattlesConf } from "../ui/tower/conf/BattlesConf";
  8. import { GoodsManager } from "./GoodsManager";
  9. import { RoleManager } from "./RoleManager";
  10. //战斗消息管理
  11. export class BattleManager {
  12. /**
  13. * 发送战斗结束消息
  14. * @param id 新关卡id,
  15. * @param win 战斗结果(1-胜利,0-失败),
  16. * @param layout 布局信息, [key:BattleLayoutPos]:number
  17. * @param opts 操作指令顺序数组
  18. * @param callback
  19. */
  20. static sendBattleDuplicateMsg(id:number,win:boolean,layout:{[key:string]:number},opts:Array<BattleOptsBase>, callback,errorFun) {
  21. let args = {
  22. id:id, //新关卡id,
  23. win:win?1:0, // 战斗结果(1-胜利,0-失败),
  24. layout:layout, //布局信息,
  25. opts:[], //操作指令顺序数组
  26. }
  27. for(let item of opts) {
  28. switch(item.type) {
  29. case BattleOptsType.New:{
  30. let item_new = item as BattleOptsNew;
  31. args.opts.push([item_new.type, item_new.pos,item_new.raceID,item_new.level]);
  32. break;
  33. }
  34. case BattleOptsType.Move:{
  35. let item_move = item as BattleOptsMove;
  36. args.opts.push([item_move.type, item_move.srcPos,item_move.targetPos]);
  37. break;
  38. }
  39. case BattleOptsType.Merge:{
  40. let item_merge = item as BattleOptsMerge;
  41. args.opts.push([item_merge.type, item_merge.srcPos,item_merge.targetPos]);
  42. break;
  43. }
  44. case BattleOptsType.Remove:{
  45. let item_remove = item as BattleOptsRemove;
  46. args.opts.push([item_remove.type, item_remove.pos]);
  47. break;
  48. }
  49. case BattleOptsType.Kill:{
  50. let item_kill = item as BattleOptsKill;
  51. args.opts.push([item_kill.type, item_kill.typeID, item_kill.count]);
  52. break;
  53. }
  54. }
  55. }
  56. LoginMgr.sendPost('battle', 'duplicate', (data) => {
  57. console.log(data);
  58. if(data.duplicate){
  59. BattleData.duplicate = data.duplicate;
  60. }
  61. if(data.layout){
  62. BattleData.layout = data.layout;
  63. }
  64. if(data.roles?.newRoles){
  65. RoleManager.setData(data.roles.newRoles);
  66. }
  67. if(data.fight_role){
  68. RoleData.fightRole = data.fight_role
  69. Framework.event.fireEvent(GameEvent.FightRoleChange)
  70. }
  71. if(data.awards){
  72. let awards = Framework.unionManager.parseServerAwards(data.awards);
  73. Framework.unionManager.fireEventWithItem(awards)
  74. Framework.unionManager.showItemTips(awards);
  75. }
  76. UserData.food_timer = data.food_timer;
  77. UserData.status.food = data.food;
  78. callback&&callback();
  79. }, args,errorFun)
  80. }
  81. // 重置新章节
  82. static sendBattleDuplicateResetMsg(mapID:number) {
  83. let args = {
  84. id:mapID, //章节id,
  85. }
  86. LoginMgr.sendPost('battle', 'duplicate_reset', (data) => {
  87. if(data.duplicate){
  88. BattleData.duplicate = data.duplicate;
  89. }
  90. if(data.layout){
  91. BattleData.layout = data.layout;
  92. }
  93. if(data.awards){
  94. let awards = Framework.unionManager.parseServerAwards(data.awards);
  95. Framework.unionManager.fireEventWithItem(awards)
  96. Framework.unionManager.showItemTips(awards);
  97. }
  98. Framework.event.fireEvent(GameEvent.BattleDuplicateReset,data);
  99. }, args)
  100. }
  101. //领取章节奖励
  102. static sendBattleDuplicateRewardMsg(mapID:number) {
  103. let args = {
  104. id:mapID, //章节id
  105. }
  106. LoginMgr.sendPost('battle', 'duplicate_reward', (data) => {
  107. console.log(data);
  108. if(data.duplicate_reward){
  109. BattleData.duplicateReward = data.duplicate_reward;
  110. }
  111. if(data.awards){
  112. let awards = Framework.unionManager.parseServerAwards(data.awards);
  113. Framework.unionManager.fireEventWithItem(awards)
  114. Framework.unionManager.showItemTips(awards);
  115. }
  116. Framework.event.fireEvent(GameEvent.BattleDuplicateReward,data);
  117. }, args)
  118. }
  119. //切换同种族角色
  120. static sendBattleDuplicateFightRoleMsg(typeID:number, callback) {
  121. let args = {
  122. rid:typeID, //角色id
  123. }
  124. LoginMgr.sendPost('battle', 'set_fight_role', (data) => {
  125. RoleData.fightRole = data.fight_role
  126. callback&&callback();
  127. }, args)
  128. }
  129. //根据布局数据获取类型ID
  130. static getDataWithLayoutValue(value:number):BattleLayoutData{
  131. let fightRole = RoleData.fightRole;
  132. let level = value%BattleLayoutScale;
  133. let raceID = (value-level)/BattleLayoutScale;
  134. let typeID = fightRole[raceID-1];
  135. return {typeID: typeID,raceID: raceID,level: level}
  136. }
  137. //获取可领奖的最大章节
  138. static getRewardChapter(){
  139. let chapter = BattleData.duplicate.chapter-1;
  140. let curProcess = BattleData.duplicate.max_process
  141. let battlesConf = BattlesConf.data[curProcess];
  142. if(battlesConf){
  143. if(curProcess == battlesConf.BossProcess){
  144. chapter++;
  145. }
  146. }
  147. return chapter;
  148. }
  149. }