ChatPaoMaLogic.lua 10 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370
  1. local Msg = require("core.Msg")
  2. local Util = require("common.Util")
  3. local PaomaExcel = require("excel.paoma")
  4. local HeroExcel = require("excel.hero").hero
  5. local DrillLogic = require("drill.DrillLogic")
  6. local ItemExcel = require("excel.item").item
  7. local BattleExcel = require("excel.battle")
  8. local EquipExcel = require("excel.equip").equip
  9. PAOMA_TYPE_TIPS = 1 -- 贴士
  10. PAOMA_TYPE_BROAD = 2 -- 见闻
  11. PAOMA_TYPE_TRIGGER = 3 -- 收获
  12. PAOMA_TYPE_ACTIVITY = 4 -- 通告
  13. PAOMA_TYPE_WARN = 5 -- 警告
  14. PAOMA_TYPE_BROAD_TYPE1 = 1 --高级抽卡抽到指定权重的英雄
  15. PAOMA_TYPE_BROAD_TYPE2 = 2 --友情抽卡抽到指定权重的英雄
  16. PAOMA_TYPE_BROAD_TYPE3 = 3 --基础抽卡抽到指定权重的英雄
  17. PAOMA_TYPE_BROAD_TYPE4 = 4 --积分召唤获得英雄
  18. PAOMA_TYPE_BROAD_TYPE5 = 5 --通关指定关卡(实际上是领取指定关卡奖励)
  19. PAOMA_TYPE_BROAD_TYPE6 = 6 --通关通天塔(实际上是领取指定关卡奖励)
  20. PAOMA_TYPE_BROAD_TYPE7 = 7 --起源圣树获得指定权重的英雄
  21. PAOMA_TYPE_BROAD_TYPE8 = 8 --竞技场连胜次数
  22. PAOMA_TYPE_BROAD_TYPE9 = 9 --试炼通关x关
  23. PAOMA_TYPE_BROAD_TYPE10 =10 --许愿池抽奖抽到指定奖励档次的奖励
  24. PAOMA_TYPE_BROAD_TYPE11 =11 --高级许愿池抽奖抽到指定奖励档次的奖励
  25. PAOMA_TYPE_BROAD_TYPE12 =12 --进化学院合成5星6星英雄
  26. PAOMA_TYPE_BROAD_TYPE13 =13 --英雄升星至x星
  27. PAOMA_TYPE_BROAD_TYPE14 =14 --地牢通关x关
  28. PAOMA_TYPE_BROAD_TYPE15 =15 --激活首充
  29. PAOMA_TYPE_BROAD_TYPE16 =16 --激活特权卡
  30. PAOMA_TYPE_BROAD_TYPE17 =17 --激活高级特权卡
  31. PAOMA_TYPE_BROAD_TYPE18 =18 --达到VIP等级
  32. PAOMA_TYPE_BROAD_TYPE19 =19 --完成君临天下全部任务
  33. PAOMA_TYPE_BROAD_TYPE20 =20 --星空下的王者
  34. PAOMA_TYPE_BROAD_TYPE21 =21 --精英抽卡抽到指定权重英雄
  35. PAOMA_TYPE_BROAD_TYPE22 =22 --元宵活动放灯获得物品
  36. PAOMA_TYPE_BROAD_TYPE23 =23 --植树节
  37. PAOMA_TYPE_BROAD_TYPE24 =24 --公会红包
  38. PAOMA_TYPE_BROAD_TYPE25 =25 --战神殿
  39. PAOMA_TYPE_BROAD_CONDITION1 = 1 --高抽判定条件
  40. PAOMA_TYPE_BROAD_CONDITION2 = 2 --副本闯关条件
  41. PAOMA_TYPE_BROAD_CONDITION3 = 3 --通天塔闯关条件
  42. PAOMA_TYPE_BROAD_CONDITION4 = 4 --竞技场连胜
  43. PAOMA_TYPE_BROAD_CONDITION5 = 5 --竞技场连胜
  44. PAOMA_TYPE_BROAD_CONDITION6 = 6 --竞技场连胜
  45. PAOMA_TYPE_BROAD_CONDITION7 = 7 --竞技场连胜
  46. PAOMA_TYPE_BROAD_CONDITION8 = 8 --战神殿胜利
  47. PAOMA_TYPE_BROAD_CONDITION9 = 9 --发红包
  48. PAOMA_TYPE_TIPS1 = 1 --- 欢迎进入
  49. PAOMA_TYPE_TIPS2 = 2 --- 地牢开放
  50. ACTIVITY_TYPE1 = 1 --- 圣树试炼
  51. ACTIVITY_TYPE2 = 2 --- 冠军的试炼
  52. ACTIVITY_TYPE3 = 3 --- 组队竞技场
  53. ACTIVITY_TYPE4 = 4 --- 公会战
  54. ACTIVITY_TYPE5 = 5 --- 地牢挑战
  55. local ACTIVITY_TIPS = {}
  56. local HERO_HUONV = 305006
  57. local heroSs ={
  58. [1]="N",
  59. [2]="R",
  60. [3]="SR",
  61. [4]="SSR",
  62. }
  63. local BROADCAST_LIST = {}
  64. local BROADCAST_INDEX = 0
  65. local function paoma(human, msgType, recvMsg, isJson)
  66. if msgType == PAOMA_TYPE_BROAD then
  67. BROADCAST_INDEX = BROADCAST_INDEX + 1
  68. BROADCAST_LIST[BROADCAST_INDEX] = {}
  69. BROADCAST_LIST[BROADCAST_INDEX].msgType = msgType
  70. BROADCAST_LIST[BROADCAST_INDEX].recvMsg = recvMsg
  71. BROADCAST_LIST[BROADCAST_INDEX].isJson = isJson
  72. BROADCAST_LIST[BROADCAST_INDEX].name = ""
  73. BROADCAST_LIST[BROADCAST_INDEX].index = BROADCAST_INDEX
  74. return
  75. end
  76. if human == nil then
  77. return
  78. end
  79. local send_msg = Msg.gc.GC_CHAT_PAOMA
  80. send_msg.item.msgType = msgType
  81. send_msg.item.msg = recvMsg
  82. send_msg.item.isJson = isJson
  83. send_msg.item.name = human.db.name
  84. Msg.send(send_msg, human.fd)
  85. end
  86. --1 播报
  87. function broadcast(human, broadtype, condition, tb)
  88. local broadExcel = PaomaExcel.broad[broadtype]
  89. if broadExcel == nil or condition == nil then
  90. return
  91. end
  92. local len = #broadExcel.param
  93. local paramIndex = nil
  94. for i = 1, len do
  95. local param = broadExcel.param[i]
  96. if param == nil then
  97. return
  98. end
  99. if condition == param then
  100. paramIndex = true
  101. break
  102. end
  103. end
  104. if paramIndex == nil and len ~= 0 then
  105. return
  106. end
  107. local randomlen = #broadExcel.desc2
  108. if randomlen <= 0 then
  109. return
  110. end
  111. local random = math.random(1, randomlen)
  112. local desc2 = broadExcel.desc2[random]
  113. local desc = broadExcel.desc1 .. desc2
  114. local msg = nil
  115. if broadExcel.type == PAOMA_TYPE_BROAD_CONDITION1 then
  116. local heroID = broadtype == PAOMA_TYPE_BROAD_TYPE15 and HERO_HUONV or tb
  117. if heroID == nil then
  118. return
  119. end
  120. local star = HeroExcel[heroID].star
  121. local name = HeroExcel[heroID].name
  122. local grade = HeroExcel[heroID].grade
  123. local gradeDesc = heroSs[grade] or ""
  124. local heroColor = PaomaExcel.heroColor[star]
  125. if heroColor == nil then
  126. return
  127. end
  128. msg = Util.format(desc, human.db.name, heroColor.color, name, gradeDesc)
  129. elseif broadExcel.type == PAOMA_TYPE_BROAD_CONDITION2 then
  130. local config = BattleExcel.node[condition]
  131. if config == nil then
  132. return
  133. end
  134. local mapId = config.mapID
  135. local mapConfig = BattleExcel.map[mapId]
  136. if mapConfig == nil then
  137. return
  138. end
  139. if config.tongguan[1] == nil then
  140. return
  141. end
  142. local itemId = config.tongguan[1][1]
  143. local itemCnt = config.tongguan[1][2]
  144. local itemName = ItemExcel[itemId].name
  145. local itemRare = ItemExcel[itemId].rare
  146. local itemColor = PaomaExcel.itemColor[itemRare].color
  147. msg = Util.format(desc, human.db.name, condition, mapConfig.name, itemColor, itemName)
  148. elseif broadExcel.type == PAOMA_TYPE_BROAD_CONDITION3 then
  149. msg = Util.format(desc, human.db.name, condition)
  150. elseif broadExcel.type == PAOMA_TYPE_BROAD_CONDITION4 then
  151. msg = Util.format(desc, human.db.name, condition)
  152. elseif broadExcel.type == PAOMA_TYPE_BROAD_CONDITION5 then
  153. local heroID = tb
  154. if heroID == nil then
  155. return
  156. end
  157. local star = HeroExcel[heroID].star
  158. local name = HeroExcel[heroID].name
  159. local heroColor = PaomaExcel.heroColor[star]
  160. if heroColor == nil then
  161. return
  162. end
  163. msg = Util.format(desc, human.db.name, heroColor.color, name, condition)
  164. elseif broadExcel.type == PAOMA_TYPE_BROAD_CONDITION6 then
  165. elseif broadExcel.type == PAOMA_TYPE_BROAD_CONDITION7 then
  166. msg = Util.format(desc, human.db.name,condition)
  167. elseif broadExcel.type == PAOMA_TYPE_BROAD_CONDITION8 then
  168. msg = Util.format(desc, human.db.name, condition)
  169. elseif broadExcel.type == PAOMA_TYPE_BROAD_CONDITION9 then
  170. msg = Util.format(desc, human.db.name, condition)
  171. end
  172. if msg == nil then
  173. return
  174. end
  175. paoma(human, PAOMA_TYPE_BROAD, msg, 0)
  176. end
  177. -- 推送tips
  178. function onLogin(human)
  179. tips(human)
  180. end
  181. function loginTips(human)
  182. do return end
  183. if human.db.account == human.db.name then return end
  184. local tipsExcel = PaomaExcel.tips[PAOMA_TYPE_TIPS1]
  185. if tipsExcel ~= nil then
  186. local desc = Util.format(tipsExcel.desc, human.db.name, human.gameName)
  187. paoma(human, PAOMA_TYPE_TIPS, desc, 0)
  188. end
  189. end
  190. --2 tips
  191. function tips(human)
  192. loginTips(human)
  193. local msgRet = Msg.gc.GC_CHAT_TIPS
  194. local tipsCnt = #PaomaExcel.tips
  195. local len = 0
  196. for i = 3, tipsCnt do
  197. if i > 50 then
  198. break
  199. end
  200. len = len + 1
  201. local tip = PaomaExcel.tips[i]
  202. msgRet.item[len].msgType = PAOMA_TYPE_TIPS1
  203. msgRet.item[len].msg = tip.desc
  204. msgRet.item[len].isJson = 0
  205. msgRet.item[len].name = ""
  206. end
  207. msgRet.item[0] = len
  208. Msg.send(msgRet, human.fd)
  209. end
  210. TRIGGER_TYPE_1 = 1
  211. TRIGGER_TYPE_2 = 2
  212. function trigger(human, actType, itemId, itemCnt, delItemId, delItemCnt)
  213. local triggerExcel = PaomaExcel.trigger[actType]
  214. if triggerExcel == nil then
  215. return
  216. end
  217. local item = ItemExcel[itemId]
  218. if item == nil then
  219. item = EquipExcel[itemId]
  220. end
  221. if item == nil then
  222. return
  223. end
  224. local itemName = item.name
  225. local itemRare = item.rare
  226. local itemColor = PaomaExcel.itemColor[itemRare].color
  227. local msg = nil
  228. if actType == TRIGGER_TYPE_1 then
  229. local delItemName = ItemExcel[delItemId].name
  230. local delItemRare = ItemExcel[delItemId].rare
  231. local delItemColor = PaomaExcel.itemColor[delItemRare].color
  232. msg = Util.format(triggerExcel.desc, delItemColor, delItemName, delItemCnt, itemColor, itemName, itemCnt)
  233. elseif actType == TRIGGER_TYPE_2 then
  234. msg = Util.format(triggerExcel.desc, itemColor, itemName, itemCnt)
  235. end
  236. if msg == nil then
  237. return
  238. end
  239. paoma(human, PAOMA_TYPE_TRIGGER, msg, 0)
  240. end
  241. local function checkAct(actType)
  242. local now = os.time()
  243. local startTime = Util.getDayStartTime()
  244. if ACTIVITY_TIPS[actType] == nil then
  245. ACTIVITY_TIPS[actType] = {}
  246. end
  247. local act = PaomaExcel.activity[actType]
  248. if act == nil then
  249. return
  250. end
  251. local actTips = ACTIVITY_TIPS[actType]
  252. local tipTs = act.ts
  253. for i = 1, #tipTs do
  254. local tipTime = tipTs[i] * 60 + startTime
  255. if actTips[i] == nil and actTips[i] ~= tipTime and now > tipTime then
  256. index = i
  257. actTips[i] = tipTime
  258. return act
  259. end
  260. end
  261. end
  262. function activity()
  263. if _G.is_middle == true then return end
  264. --圣树试炼
  265. local isStart = DrillLogic.getState()
  266. if isStart == 1 then
  267. local act = checkAct(ACTIVITY_TYPE1)
  268. if act ~= nil then
  269. paoma(nil, PAOMA_TYPE_ACTIVITY, act.desc, 0)
  270. end
  271. end
  272. --公会战
  273. --[[ if UnionWarLogic.getState() == UnionWarLogic.STATE_JIFEN then
  274. local act = checkAct(ACTIVITY_TYPE4)
  275. if act ~= nil then
  276. paoma(nil, PAOMA_TYPE_ACTIVITY, act.desc, 0)
  277. end
  278. end
  279. ]]--
  280. end
  281. function sort(a,b)
  282. return a.index < b.index
  283. end
  284. function broad()
  285. if _G.is_middle == true then return end
  286. local broad = BROADCAST_LIST[1]
  287. if broad == nil then
  288. return
  289. end
  290. local send_msg = Msg.gc.GC_CHAT_PAOMA
  291. send_msg.item.msgType = broad.msgType
  292. send_msg.item.msg = broad.recvMsg
  293. send_msg.item.isJson = broad.isJson
  294. send_msg.item.name = broad.name
  295. Msg.sendWorld(send_msg)
  296. BROADCAST_LIST[1].index = os.time()
  297. table.sort(BROADCAST_LIST, sort)
  298. BROADCAST_LIST[BROADCAST_INDEX] = nil
  299. BROADCAST_INDEX = BROADCAST_INDEX - 1
  300. end
  301. function onTimer()
  302. broad()
  303. activity()
  304. end
  305. function notice(recvMsg)
  306. local send_msg = Msg.gc.GC_CHAT_PAOMA
  307. send_msg.item.msgType = PAOMA_TYPE_ACTIVITY
  308. send_msg.item.msg = recvMsg
  309. send_msg.item.isJson = 0
  310. send_msg.item.name = ""
  311. Msg.sendWorld(send_msg)
  312. end