JibanLogic.lua 7.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294
  1. local Msg = require("core.Msg")
  2. local Util = require("common.Util")
  3. local CombatPosLogic = require("combat.CombatPosLogic")
  4. local HeroGrid = require("hero.HeroGrid")
  5. local BeSkill = require("combat.BeSkill")
  6. local CombatDefine = require("combat.CombatDefine")
  7. local JibanExcel = require("excel.jiban")
  8. local RoleSystemLogic = require("roleSystem.RoleSystemLogic")
  9. local RoleSystemDefine = require("roleSystem.RoleSystemDefine")
  10. local Broadcast = require("broadcast.Broadcast")
  11. local Lang = require("common.Lang")
  12. local HeroLogic = require("hero.HeroLogic")
  13. local GuideLogic = require("guide.GuideLogic")
  14. local CombatExcel = require("excel.combat")
  15. CMD1 = 1 -- 主线通关
  16. CMD2 = 2 -- 获得英雄
  17. CMD3 = 3 -- 通关通天塔
  18. CMD4 = 4 -- 等级
  19. FATHER2ID = nil
  20. HERO2ID = nil
  21. CMD2POS = nil
  22. local function getDB(human)
  23. human.db.jiban = human.db.jiban or {[1] = 1}
  24. return human.db.jiban
  25. end
  26. local function fontJibanInfo(net,id)
  27. local conf = JibanExcel.jiban[id]
  28. net.id = id
  29. net.name = conf.name
  30. net.desc = conf.desc
  31. net.quality = conf.quality
  32. local len = 0
  33. for _,v in ipairs(conf.hero) do
  34. len = len + 1
  35. HeroGrid.makeHeroSimpleByID(net.heroList[len], v)
  36. end
  37. net.heroList[0] = len
  38. end
  39. function initAfterHot()
  40. FATHER2ID = {}
  41. HERO2ID = {}
  42. local temp = {}
  43. for k,v in ipairs(JibanExcel.jiban) do
  44. temp[#temp + 1] = {v.quality,k}
  45. for _,v1 in ipairs(v.hero) do
  46. HERO2ID[v1] = HERO2ID[v1] or {}
  47. HERO2ID[v1][#HERO2ID[v1] + 1] = k
  48. end
  49. end
  50. table.sort(temp,function(a,b)
  51. if a[1] > b[1] then
  52. return true
  53. elseif a[1] == b[1] and a[2] < b[2] then
  54. return true
  55. else
  56. return false
  57. end
  58. end)
  59. local msgRet = Msg.gc.GC_JIBAN_PREVIEW
  60. local len = 0
  61. for k,v in ipairs(temp) do
  62. local conf = JibanExcel.jiban[v[2]]
  63. FATHER2ID[conf.father] = FATHER2ID[conf.father] or {}
  64. FATHER2ID[conf.father][#FATHER2ID[conf.father] + 1] = v[2]
  65. len = len + 1
  66. local net = msgRet.list[len]
  67. fontJibanInfo(net,k)
  68. end
  69. msgRet.list[0] = len
  70. CMD2POS = {}
  71. for k,v in ipairs(JibanExcel.pos) do
  72. if v.cmd > 0 then
  73. CMD2POS[v.cmd] = k
  74. end
  75. end
  76. end
  77. function query(human,combatType,heroID)
  78. local flag = RoleSystemLogic.isOpen(human,RoleSystemDefine.ROLE_SYS_ID_207)
  79. if flag ~= true then
  80. return
  81. end
  82. local msgRet = Msg.gc.GC_JIBAN_QUERY
  83. local len = 0
  84. if HERO2ID[heroID] then
  85. for k,v in ipairs(HERO2ID[heroID]) do
  86. len = len + 1
  87. local net = msgRet.jibanList[len]
  88. fontJibanInfo(net,v)
  89. end
  90. end
  91. msgRet.jibanList[0] = len
  92. len = 0
  93. local db = getDB(human)
  94. local combatHeroDB = CombatPosLogic.getCombatHeroDB(human,combatType)
  95. local jibanDB = combatHeroDB.jiban or {}
  96. for k,v in ipairs(JibanExcel.pos) do
  97. len = len + 1
  98. local net = msgRet.posList[len]
  99. net.id = k
  100. net.tip = v.tip
  101. net.isOpen = db[k] or 0
  102. net.sort = v.sort
  103. local heroGrid
  104. if jibanDB[k] and jibanDB[k] ~= "" and jibanDB[k] ~= "0" then
  105. heroGrid = HeroLogic.getHeroGridByUuid(human, jibanDB[k])
  106. end
  107. index = heroGrid and heroGrid.bagIndex or 0
  108. HeroGrid.makeHeroSimple(net.hero, heroGrid, index)
  109. end
  110. msgRet.posList[0] = len
  111. Msg.send(msgRet,human.fd)
  112. end
  113. --
  114. function sendQuery(human,combatType, teamType)
  115. local msgRet = Msg.gc.GC_JIBAN_QUERY_ALL
  116. local len = 0
  117. local db = getDB(human)
  118. msgRet.type = teamType
  119. local combatHeroDB = CombatPosLogic.getCombatHeroDB(human,combatType)
  120. local jibanDB = combatHeroDB.jiban or {}
  121. for k,v in ipairs(JibanExcel.pos) do
  122. len = len + 1
  123. local net = msgRet.posList[len]
  124. net.id = k
  125. net.tip = v.tip
  126. net.isOpen = db[k] or 0
  127. net.sort = v.sort
  128. local heroGrid
  129. if jibanDB[k] and jibanDB[k] ~= "" and jibanDB[k] ~= "0" then
  130. heroGrid = HeroLogic.getHeroGridByUuid(human, jibanDB[k])
  131. end
  132. index = heroGrid and heroGrid.bagIndex or 0
  133. HeroGrid.makeHeroSimple(net.hero, heroGrid, index)
  134. end
  135. msgRet.posList[0] = len
  136. Msg.send(msgRet,human.fd)
  137. end
  138. function preview(human)
  139. local msgRet = Msg.gc.GC_JIBAN_PREVIEW
  140. Msg.send(msgRet,human.fd)
  141. end
  142. function getPosList(human)
  143. return getDB(human)
  144. end
  145. function onCallback(human,cmd,arg)
  146. local pos = CMD2POS[cmd]
  147. local db = getDB(human)
  148. if db[pos] then
  149. return
  150. end
  151. local conf = JibanExcel.pos[pos]
  152. if arg >= conf.arg then
  153. db[pos] = 1
  154. end
  155. end
  156. function getJiban(objList,jibanList)
  157. local objHero = {}
  158. local jibanHero = {}
  159. for i = 1,CombatDefine.COMBAT_HERO_CNT - 1 do
  160. local obj = objList[i]
  161. -- 不是玩家不计算羁绊
  162. if obj and obj.type == CombatDefine.COMBAT_OBJ_TYPE1 then
  163. objHero[obj.id] = objHero[obj.id] or 0
  164. objHero[obj.id] = objHero[obj.id] + 1
  165. end
  166. end
  167. if jibanList then
  168. for k,v in pairs(jibanList) do
  169. if v > 0 then
  170. objHero[v] = objHero[v] or 0
  171. objHero[v] = objHero[v] + 1
  172. end
  173. end
  174. end
  175. local jiban = {}
  176. for _,v in pairs(FATHER2ID) do
  177. for _,v1 in ipairs(v) do
  178. local conf = JibanExcel.jiban[v1]
  179. local canUse = true
  180. for _,v2 in ipairs(conf.hero) do
  181. if not objHero[v2] then
  182. canUse = false
  183. break
  184. end
  185. end
  186. if canUse then
  187. jiban[v1] = 1
  188. break
  189. end
  190. end
  191. end
  192. return jiban
  193. end
  194. function getJibanHero(human,combatHeroDB)
  195. local jibanHero = {}
  196. if combatHeroDB.jiban then
  197. for k, uuid in pairs(combatHeroDB.jiban) do
  198. if uuid ~= "0" and uuid ~= "" then
  199. heroGrid = HeroLogic.getHeroGridByUuid(human, uuid)
  200. if heroGrid then
  201. jibanHero[k] = heroGrid.id
  202. end
  203. end
  204. end
  205. end
  206. return jibanHero
  207. end
  208. function getDesc(jiban)
  209. local desc = {}
  210. local len = 0
  211. for k,v in pairs(jiban) do
  212. local conf = JibanExcel.jiban[k]
  213. if len > 0 then
  214. len = len + 1
  215. desc[len] = "|"
  216. end
  217. len = len + 1
  218. desc[len] = conf.name
  219. len = len + 1
  220. desc[len] = ","
  221. len = len + 1
  222. desc[len] = conf.desc
  223. len = len + 1
  224. desc[len] = ","
  225. len = len + 1
  226. desc[len] = conf.quality
  227. end
  228. local descStr = table.concat(desc)
  229. return descStr
  230. end
  231. function setBeSkill(objList,jiban)
  232. if not jiban then return end
  233. local skillList = {}
  234. for k in pairs(jiban) do
  235. local conf = JibanExcel.jiban[k]
  236. local skillID = conf.skill
  237. if skillID > 0 then
  238. for i = 1,CombatDefine.COMBAT_HERO_CNT - 1 do
  239. local obj = objList[i]
  240. if obj then
  241. BeSkill.setBeSkillID(obj,skillID)
  242. end
  243. end
  244. end
  245. end
  246. end
  247. function update(human,combatType,jibanListStr)
  248. local conf = CombatExcel.combat[combatType]
  249. if not conf then return end
  250. local posList = getPosList(human)
  251. local jibanList = Util.split(jibanListStr,",")
  252. local combatHeroDB = CombatPosLogic.getCombatHeroDB(human,combatType)
  253. for k,v in ipairs(jibanList) do
  254. local uuid = v or "0"
  255. if uuid ~= "" and uuid ~= "0" then
  256. --检测有没有再阵容上
  257. for _, combatUuid in ipairs(combatHeroDB.list) do
  258. if uuid == combatUuid then return end
  259. end
  260. if not posList[k] then return end
  261. local heroGrid = HeroLogic.getHeroGridByUuid(human, uuid)
  262. if not heroGrid then return end
  263. end
  264. end
  265. combatHeroDB.jiban = jibanList
  266. GuideLogic.setDoSpecialGuide(human, GuideLogic.SKIPTYPE_JUMP_JIBAN_GROUP)
  267. sendQuery(human,combatType, conf.teamType)
  268. end