NewLogic.lua 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325
  1. local Msg = require("core.Msg")
  2. local Broadcast = require("broadcast.Broadcast")
  3. local Lang = require("common.Lang")
  4. local ItemDefine = require("bag.ItemDefine")
  5. local Grid = require("bag.Grid")
  6. local DrawCardLogic = require("drawCard.DrawCardLogic")
  7. local MergeRule = require("excel.mergeConfig").rule
  8. local BagLogic = require("bag.BagLogic")
  9. local Log = require("common.Log")
  10. local Util = require("common.Util")
  11. local ItemLogic = require("bag.ItemLogic")
  12. local HeroLogic = require("hero.HeroLogic")
  13. local HeroExcel = require("excel.hero")
  14. local RoleDefine = require("role.RoleDefine")
  15. local ObjHuman = require("core.ObjHuman")
  16. local HeroGrid = require("hero.HeroGrid")
  17. AD_DRAW_REWARD_TYPE = 10 --观看广告领取召唤券
  18. QUERY_MERGE_INFO_TYPE = 11 --获取融合信息
  19. HATCH_SCCUESS_TYPE = 12 -- 孵化成功
  20. MERGE_HERO_TYPE = 13 --融合
  21. QUICK_HATCH_TYPE = 14 --加速
  22. function NewProto(human, type, param)
  23. -- print("newProto:",type,param)
  24. -- local msgRet = Msg.gc.GC_ROLE_CHANGE_BASEINFO
  25. -- msgRet.ret = type
  26. -- msgRet.tip = "test data"
  27. -- Msg.send(msgRet,human.fd)
  28. -- 观看广告获取召唤券
  29. if type == AD_DRAW_REWARD_TYPE then
  30. human.db.adRewardCnt = human.db.adRewardCnt or 0
  31. if human.db.adRewardCnt > 4 then
  32. Broadcast.sendErr(human, Lang.AD_DRAW_REWARD_LIMIT_ERROR)
  33. return
  34. end
  35. --增加今日观看次数
  36. human.db.adRewardCnt = (human.db.adRewardCnt or 0) + 1
  37. -- 添加高级召唤卷
  38. BagLogic.addItem(human, 118, 1, "draw_ad_reward")
  39. local msgRet = Msg.gc.GC_ROLE_CHANGE_BASEINFO
  40. msgRet.ret = AD_DRAW_REWARD_TYPE
  41. msgRet.tip = Lang.AD_DRAW_REWARD_SUCCESS
  42. Msg.send(msgRet, human.fd)
  43. Broadcast.sendErr(human, Lang.AD_DRAW_REWARD_SUCCESS)
  44. end
  45. -- 开始融合
  46. if type == MERGE_HERO_TYPE then
  47. local tb = Util.split(param, "|")
  48. if tb[1] and tb[2] then
  49. -- 初始化
  50. initMergeInfo(human)
  51. human.db.heroBag = human.db.heroBag or {}
  52. local itemId = 178 --生命雨露
  53. local fatherHeroBagIndex = tonumber(tb[1]) or 0
  54. local motherHeroBagIndex = tonumber(tb[2]) or 0
  55. Log.write(Log.LOGID_TEST,
  56. "开始融合 fatherHeroBagIndex: " .. fatherHeroBagIndex .. "motherHeroBagIndex: " .. motherHeroBagIndex)
  57. local fatherHeroGrid = human.db.heroBag[fatherHeroBagIndex]
  58. if not heroGrid then
  59. return
  60. end
  61. local motherHeroGrid = human.db.heroBag[motherHeroBagIndex]
  62. if not heroGrid then
  63. return
  64. end
  65. Log.write(Log.LOGID_TEST, "motherHeroGrid: " .. Json.Encode(motherHeroGrid))
  66. Log.write(Log.LOGID_TEST, "fatherHeroGrid: " .. Json.Encode(fatherHeroGrid))
  67. local fatherHeroAttr = ObjHuman.getHeroAttrs(human, fatherHeroBagIndex)
  68. local motherHeroAttr = ObjHuman.getHeroAttrs(human, motherHeroBagIndex)
  69. Log.write(Log.LOGID_TEST, "fatherHeroAttr: " .. Json.Encode(fatherHeroAttr))
  70. Log.write(Log.LOGID_TEST, "motherHeroAttr: " .. Json.Encode(motherHeroAttr))
  71. local mergeInfo = {}
  72. local attrs = RoleDefine.PANEL_ATTR_KEY
  73. local sonHeroID = mergeHero(fatherHeroGrid.id, motherHeroGrid.id)
  74. if sonHeroID <= 0 then
  75. return
  76. end
  77. Log.write(Log.LOGID_TEST, "sonHeroID: " .. sonHeroID)
  78. for key, value in pairs(attrs) do
  79. local param1 = fatherHeroAttr[key] or 0
  80. local param2 = motherHeroAttr[key] or 0
  81. attrs[key] = math.floor(((param1 + param2) / 4))
  82. end
  83. Log.write(Log.LOGID_TEST, "融合后的属性: " .. Json.Encode(attrs))
  84. local xLv = getxLv(fatherHeroGrid, motherHeroGrid)
  85. local cnt = math.floor(xLv / 2) + 1
  86. Log.write(Log.LOGID_TEST, "xLv: " .. xLv)
  87. Log.write(Log.LOGID_TEST, "cnt: " .. cnt)
  88. --使用道具
  89. ItemLogic.use(human, itemId, cnt)
  90. Log.write(Log.LOGID_TEST, "删除开始")
  91. -- 删除英雄
  92. HeroLogic.delHeroByIndex(human, fatherHeroBagIndex, "hero_merge")
  93. HeroLogic.delHeroByIndex(human, motherHeroBagIndex, "hero_merge")
  94. Log.write(Log.LOGID_TEST, "删除结束")
  95. -- for heroIndex = 1, human.db.heroBag[0] do
  96. -- local heroGrid = human.db.heroBag[heroIndex]
  97. -- if heroGrid.id == fatherHeroID or heroGrid.id == motherHeroID then
  98. -- end
  99. -- end
  100. -- 记录融合英雄
  101. human.db.mergeInfo.heroId = sonHeroID
  102. human.db.mergeInfo.xLv = xLv
  103. human.db.mergeInfo.heroAttrs = attrs
  104. human.db.mergeInfo.mergeStartTime = os.time()
  105. human.db.mergeInfo.mergeEndTime = os.time() + getHatchTime(xLv)
  106. human.db.mergeInfo.mergeTime = getHatchTime(xLv)
  107. Log.write(Log.LOGID_TEST, "human.db.mergeInfo : " .. Json.Encode(human.db.mergeInfo))
  108. mergeInfo.mergeTime = human.db.mergeInfo.mergeTime
  109. mergeInfo.heroId = human.db.mergeInfo.heroId
  110. Log.write(Log.LOGID_TEST, "mergeInfo: " .. Json.Encode(mergeInfo))
  111. local msgRet = Msg.gc.GC_ROLE_CHANGE_BASEINFO
  112. msgRet.ret = MERGE_HERO_TYPE
  113. msgRet.tip = Json.Encode(mergeInfo)
  114. Msg.send(msgRet, human.fd)
  115. end
  116. return
  117. end
  118. -- 获取融合信息
  119. if type == QUERY_MERGE_INFO_TYPE then
  120. local mergeInfo = {}
  121. -- 初始化
  122. initMergeInfo(human)
  123. local nowTime = os.time()
  124. local mergeTime = human.db.mergeInfo.mergeEndTime - nowTime
  125. Log.write(Log.LOGID_TEST, "mergeTime: " .. mergeTime)
  126. -- 孵化成功
  127. if mergeTime <= 0 then
  128. hatchHero(human)
  129. return
  130. end
  131. local heroSimple = {}
  132. heroSimple.general = heroSimple.general or {}
  133. HeroGrid.makeHeroSimpleByID(heroSimple, human.db.mergeInfo.heroId, nil, nil, human)
  134. mergeInfo.mergeTime = human.db.mergeInfo.mergeTime
  135. mergeInfo.heroData = heroSimple
  136. Log.write(Log.LOGID_TEST, "mergeInfo: " .. Json.Encode(mergeInfo))
  137. local msgRet = Msg.gc.GC_ROLE_CHANGE_BASEINFO
  138. msgRet.ret = QUERY_MERGE_INFO_TYPE
  139. msgRet.tip = Json.Encode(mergeInfo)
  140. Msg.send(msgRet, human.fd)
  141. return
  142. end
  143. -- 加速孵化
  144. if type == QUICK_HATCH_TYPE then
  145. local tb = Util.split(param, "|")
  146. local itemId = tonumber(tb[1]) or 0
  147. local cnt = tonumber(tb[2]) or 0
  148. if tb[1] and tb[2] then
  149. -- 初始化
  150. initMergeInfo(human)
  151. --使用道具
  152. ItemLogic.use(human, itemId, cnt)
  153. local remainingTime = human.db.mergeInfo.mergeTime - (60 * cnt)
  154. Log.write(Log.LOGID_TEST, "remainingTime: " .. remainingTime)
  155. -- 孵化成功
  156. if remainingTime <= 0 then
  157. hatchHero(human)
  158. -- return
  159. end
  160. Log.write(Log.LOGID_TEST, "加速后 human.db.mergeInfo : " .. Json.Encode(human.db.mergeInfo))
  161. Broadcast.sendErr(human, Lang.QUICK_HATCH_SUCCESS)
  162. local mergeInfo = {}
  163. local heroSimple = {}
  164. heroSimple.general = heroSimple.general or {}
  165. HeroGrid.makeHeroSimpleByID(heroSimple, human.db.mergeInfo.heroId, nil, nil, human)
  166. mergeInfo.mergeTime = human.db.mergeInfo.mergeTime
  167. mergeInfo.heroData = heroSimple
  168. local msgRet = Msg.gc.GC_ROLE_CHANGE_BASEINFO
  169. msgRet.ret = QUICK_HATCH_TYPE
  170. msgRet.tip = Json.Encode(mergeInfo)
  171. Msg.send(msgRet, human.fd)
  172. return
  173. end
  174. return
  175. end
  176. end
  177. -- 孵化英雄
  178. function hatchHero(human)
  179. --添加英雄
  180. local heroIndex, fjlist = HeroLogic.addHero(human, human.db.mergeInfo.heroInfo.heroID, nil, 1,
  181. "hero_merge")
  182. local data = {}
  183. local heroSimple = {}
  184. local msgRet = Msg.gc.GC_ROLE_CHANGE_BASEINFO
  185. human.db.mergeInfo.mergeStartTime = 0
  186. human.db.mergeInfo.mergeEndTime = 0
  187. human.db.mergeInfo.mergeTime = 0
  188. human.db.mergeInfo.heroInfo = {}
  189. human.db.mergeInfo.heroInfo.heroID = 0
  190. human.db.mergeInfo.heroInfo.xLv = 0
  191. human.db.mergeInfo.heroInfo.heroAttrs = RoleDefine.PANEL_ATTR_KEY
  192. human.db.heroBag = human.db.heroBag or {}
  193. local heroGrid = human.db.heroBag[heroIndex]
  194. if type(heroGrid) ~= "table" then return end
  195. heroSimple.general = heroSimple.general or {}
  196. HeroGrid.makeHeroSimple(heroSimple, heroGrid, nil, human)
  197. data.heroData = heroSimple
  198. data.mergeTime = human.db.mergeInfo.mergeTime
  199. msgRet.ret = HATCH_SCCUESS_TYPE
  200. msgRet.tip = Json.Encode(data)
  201. Msg.send(msgRet, human.fd)
  202. end
  203. -- 初始化融合信息
  204. function initMergeInfo(human)
  205. human.db.mergeInfo = human.db.mergeInfo or {}
  206. human.db.mergeInfo.mergeStartTime = human.db.mergeInfo.mergeStartTime or 0
  207. human.db.mergeInfo.mergeEndTime = human.db.mergeInfo.mergeEndTime or 0
  208. human.db.mergeInfo.mergeTime = human.db.mergeInfo.mergeTime or 0
  209. human.db.mergeInfo.heroInfo = human.db.mergeInfo.heroInfo or {}
  210. human.db.mergeInfo.heroInfo.heroID = human.db.mergeInfo.heroInfo.heroID or 0
  211. human.db.mergeInfo.heroInfo.xLv = human.db.mergeInfo.heroInfo.xLv or 0
  212. human.db.mergeInfo.heroInfo.heroAttrs = human.db.mergeInfo.heroInfo.heroAttrs or RoleDefine.PANEL_ATTR_KEY
  213. end
  214. -- 获取孵化时间 单位s
  215. function getHatchTime(human, xLv)
  216. local time = (xLv * 5) + (xLv - 1) * (xLv - 1) - 5
  217. if time < 0 then
  218. return 0
  219. end
  220. return time * 60
  221. end
  222. -- 获取xlv
  223. function getxLv(fatherHeroGrid, motherHeroGrid)
  224. local params1 = math.max(fatherHeroGrid.xLv, motherHeroGrid.xLv)
  225. local params2 = math.floor((fatherHeroGrid.lv + motherHeroGrid.lv) / 200) + 1
  226. return params1 + params2
  227. end
  228. -- 融合获取英雄ID
  229. function mergeHero(fatherHeroID, motherHeroID)
  230. local fatherHeroConfig = HeroExcel.hero[fatherHeroID]
  231. local motherHeroConfig = HeroExcel.hero[motherHeroID]
  232. if not fatherHeroConfig or not motherHeroConfig then
  233. return 0
  234. end
  235. --规则3 heroID + heroID
  236. for _, config in pairs(MergeRule[3].items) do
  237. if fatherHeroID == config[1] and motherHeroID == config[2] then
  238. return config[3]
  239. end
  240. end
  241. --规则2 种族 + heroID
  242. for _, config in pairs(MergeRule[2].items) do
  243. if fatherHeroConfig.camp == config[1] and motherHeroID == config[2] then
  244. return config[3]
  245. end
  246. end
  247. --规则1 种族 + 种族
  248. for _, config in pairs(MergeRule[1].items) do
  249. if fatherHeroConfig.camp == config[1] and motherHeroConfig.camp == config[2] then
  250. return config[3]
  251. end
  252. end
  253. return 0
  254. end