JjcGodWarLogic.lua 51 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061106210631064106510661067106810691070107110721073107410751076107710781079108010811082108310841085108610871088108910901091109210931094109510961097109810991100110111021103110411051106110711081109111011111112111311141115111611171118111911201121112211231124112511261127112811291130113111321133113411351136113711381139114011411142114311441145114611471148114911501151115211531154115511561157115811591160116111621163116411651166116711681169117011711172117311741175117611771178117911801181118211831184118511861187118811891190119111921193119411951196119711981199120012011202120312041205120612071208120912101211121212131214121512161217121812191220122112221223122412251226122712281229123012311232123312341235123612371238123912401241124212431244124512461247124812491250125112521253125412551256125712581259126012611262126312641265126612671268126912701271127212731274127512761277127812791280128112821283128412851286128712881289129012911292129312941295129612971298129913001301130213031304130513061307130813091310131113121313131413151316131713181319132013211322132313241325132613271328132913301331133213331334133513361337133813391340134113421343134413451346134713481349135013511352135313541355135613571358135913601361136213631364136513661367136813691370137113721373137413751376137713781379138013811382138313841385138613871388138913901391139213931394139513961397139813991400140114021403140414051406140714081409141014111412141314141415141614171418141914201421142214231424142514261427142814291430143114321433143414351436143714381439144014411442144314441445144614471448144914501451145214531454145514561457145814591460146114621463146414651466146714681469147014711472147314741475147614771478147914801481148214831484148514861487148814891490149114921493149414951496149714981499150015011502150315041505150615071508150915101511151215131514151515161517151815191520152115221523152415251526152715281529153015311532153315341535153615371538153915401541154215431544154515461547154815491550155115521553155415551556155715581559156015611562156315641565156615671568156915701571157215731574157515761577157815791580158115821583158415851586158715881589159015911592159315941595159615971598159916001601160216031604160516061607160816091610161116121613161416151616161716181619162016211622162316241625
  1. -- 竞技场 众神之战 王者争霸
  2. --
  3. -- 活动时间: 一周内,day2的21.05 - 21:49,day5重复
  4. -- 活动准备:竞技场排名前128名玩家(包含竞技场npc)
  5. -- 活动内容:6轮选拔赛+32强赛的5轮战斗,每轮战斗分别包含3个小阶段(准备(60s)、竞猜(60s)和战斗阶段(120s))
  6. --
  7. local ObjHuman = require("core.ObjHuman")
  8. local JjcGodWarExcel = require("excel.jjcGodWar")
  9. local JjcGodWarDB = require("jjcGodWar.JjcGodWarDB")
  10. local RoleLogic = require("role.RoleLogic")
  11. local Util = require("common.Util")
  12. local Msg = require("core.Msg")
  13. local Broadcast = require("broadcast.Broadcast")
  14. local Lang = require("common.Lang")
  15. local BagLogic = require("bag.BagLogic")
  16. local ItemDefine = require("bag.ItemDefine")
  17. local JjcDB = require("jjc.JjcDB")
  18. local JjcActLogic = require("jjc.JjcActLogic")
  19. local CombatDefine = require("combat.CombatDefine")
  20. local HeroGrid = require("hero.HeroGrid")
  21. local JjcGodWarCombat = require("jjcGodWar.JjcGodWarCombat")
  22. local MailExcel = require("excel.mail")
  23. local LiLianLogic = require("dailyTask.LiLianLogic")
  24. local MoshouLogic = require("moshou.MoshouLogic")
  25. local MailManager = require("mail.MailManager")
  26. local RoleHeadLogic = require("role.RoleHeadLogic")
  27. local RoleDBLogic = require("role.RoleDBLogic")
  28. local MonsterExcel = require("excel.monster")
  29. local Grid = require("bag.Grid")
  30. local CombatLogic = require("combat.CombatLogic")
  31. local CommonDB = require("common.CommonDB")
  32. local RoleSystemLogic = require("roleSystem.RoleSystemLogic")
  33. local RoleSystemDefine = require("roleSystem.RoleSystemDefine")
  34. local MailDefine = require("mail.MailIdDefine")
  35. local RoleExcel = require("excel.role")
  36. local YunYingLogic = require("yunying.YunYingLogic")
  37. local JjcLogic = require("jjc.JjcLogic")
  38. local FilterUtil = require("common.FilterUtil")
  39. local HeroGrowUp = require("absAct.HeroGrowUp")
  40. local Log = require("common.Log")
  41. local Config = require("Config")
  42. local Util = require("common.Util")
  43. GODWAR_STATE_WAIT = 0 --尚未开启
  44. GODWAR_STATE_XUANBA1 = 1 --选拔赛1
  45. GODWAR_STATE_XUANBA2 = 2 --选拔赛2
  46. GODWAR_STATE_XUANBA3 = 3 --选拔赛3
  47. GODWAR_STATE_XUANBA4 = 4 --选拔赛4
  48. GODWAR_STATE_XUANBA5 = 5 --选拔赛5
  49. GODWAR_STATE_XUANBA6 = 6 --选拔赛6
  50. GODWAR_STATE_PAIWEI32 = 7 --32强
  51. GODWAR_STATE_PAIWEI16 = 8 --16强
  52. GODWAR_STATE_PAIWEI8 = 9 --8强
  53. GODWAR_STATE_PAIWEI4 = 10 --4强
  54. GODWAR_STATE_PAIWEI1 = 11 --决赛
  55. GODWAR_STATE_END = 12 --活动结束(每周第二期众神之战活动结束后才有活动结束这个状态)
  56. GODWAR_JIEDUAN_ZHUNBEI = 1 --准备阶段
  57. GODWAR_JIEDUAN_JINGCAI = 2 --竞猜阶段
  58. GODWAR_JIEDUAN_COMBAT = 3 --战斗阶段
  59. GODWAR_START_DAY1 = 2 --竞技场每周擂台赛第二天
  60. GODWAR_START_DAY2 = 5 --竞技场每周擂台赛第五天
  61. GODWAR_START_TIME = 21 * 3600 + 5 * 60 --21.05开始本期活动 759000
  62. GODWAR_JIEDUAN_ZHUNBEI_TIME = 60 --准备阶段60s
  63. GODWAR_JIEDUAN_JINGCAI_TIME = 60 --竞猜阶段60s
  64. GODWAR_JIEDUAN_COMBAT_TIME = 120 --战斗阶段120s
  65. GODWAR_ACT_TIME = 11*(GODWAR_JIEDUAN_ZHUNBEI_TIME + GODWAR_JIEDUAN_JINGCAI_TIME + GODWAR_JIEDUAN_COMBAT_TIME)--一期活动持续时间
  66. GODWAR_PAIWEI_MAX = 32 --选拔赛后的32强人数
  67. local GODWAR_END_JINGCAI = 28100 --活动结束竞猜币转化上限
  68. -- human.db.jjcGodWar = {
  69. -- mobaiList = nil --今天已膜拜列表
  70. -- topRank = nil --历史最高等级
  71. -- mobaiCnt = nil --今天累计已膜拜次数
  72. -- finishTipTime = nil --活动结算弹窗 finishTipTime = time
  73. -- jingCaiTip = nil --竞猜活动提醒
  74. -- }
  75. function getStartTime()
  76. local _,_,startTime = JjcDB.getGodSeasonEndTime()
  77. if not startTime then return end
  78. local startTime1 = startTime + (GODWAR_START_DAY1 - 1) * 86400 + GODWAR_START_TIME
  79. local startTime2 = startTime + (GODWAR_START_DAY2 - 1) * 86400 + GODWAR_START_TIME
  80. return startTime1,startTime2
  81. end
  82. local function getStartEndTime()
  83. local startTime1,startTime2 = getStartTime()
  84. if not startTime1 then return end
  85. local godWarStartTime,godWarEndTime
  86. local nowTime = os.time()
  87. if nowTime < startTime1 + GODWAR_ACT_TIME then
  88. godWarStartTime = startTime1
  89. elseif nowTime >= startTime1 + GODWAR_ACT_TIME and nowTime < startTime2 + GODWAR_ACT_TIME then
  90. godWarStartTime = startTime2
  91. end
  92. if not godWarStartTime then return end
  93. godWarEndTime = godWarStartTime + GODWAR_ACT_TIME
  94. return godWarStartTime,godWarEndTime
  95. end
  96. --获取当前时间的状态
  97. --活动开启前后,仅返回状态和下一期活动开始的倒计时
  98. --若是本周的第二期活动则返回结束状态和倒计时0
  99. --活动期间,返回本期活动正在进行的比赛,什么阶段,倒计时
  100. function getNowGodWarState()
  101. local godWarStartTime,godWarEndTime = getStartEndTime()
  102. if not godWarEndTime or not godWarStartTime then
  103. return GODWAR_STATE_END, 0, 0
  104. end
  105. local now = os.time()
  106. if now < godWarStartTime then
  107. return GODWAR_STATE_WAIT, 0, godWarStartTime - now
  108. end
  109. for round=GODWAR_STATE_XUANBA1,GODWAR_STATE_PAIWEI1 do
  110. local nowStartTime = godWarStartTime + (round - 1) * (GODWAR_JIEDUAN_COMBAT_TIME + GODWAR_JIEDUAN_JINGCAI_TIME + GODWAR_JIEDUAN_ZHUNBEI_TIME)
  111. local nowEndTime = nowStartTime + GODWAR_JIEDUAN_COMBAT_TIME + GODWAR_JIEDUAN_JINGCAI_TIME + GODWAR_JIEDUAN_ZHUNBEI_TIME
  112. if now >= nowStartTime and now < nowEndTime then
  113. local middleTime = now - nowStartTime
  114. local state = GODWAR_JIEDUAN_ZHUNBEI
  115. local leftTime = nowStartTime + GODWAR_JIEDUAN_ZHUNBEI_TIME - now
  116. if middleTime >= GODWAR_JIEDUAN_ZHUNBEI_TIME and middleTime < GODWAR_JIEDUAN_ZHUNBEI_TIME + GODWAR_JIEDUAN_JINGCAI_TIME then
  117. state = GODWAR_JIEDUAN_JINGCAI
  118. leftTime = nowStartTime + GODWAR_JIEDUAN_ZHUNBEI_TIME + GODWAR_JIEDUAN_JINGCAI_TIME - now
  119. elseif middleTime >= GODWAR_JIEDUAN_ZHUNBEI_TIME + GODWAR_JIEDUAN_JINGCAI_TIME then
  120. state = GODWAR_JIEDUAN_COMBAT
  121. leftTime = nowStartTime + GODWAR_JIEDUAN_COMBAT_TIME + GODWAR_JIEDUAN_JINGCAI_TIME + GODWAR_JIEDUAN_ZHUNBEI_TIME - now
  122. end
  123. return round, state, leftTime
  124. end
  125. end
  126. end
  127. local function getSaiJiTime()
  128. local godWarStartTime,godWarEndTime = getStartEndTime()
  129. if not godWarEndTime or not godWarStartTime then
  130. return 0, 0
  131. end
  132. local now = os.time()
  133. local day = Util.getWeekDay(now) - 1
  134. if now < godWarStartTime then
  135. return godWarStartTime, godWarStartTime - now
  136. elseif now >= godWarStartTime and now < godWarEndTime then
  137. return godWarStartTime, godWarEndTime - now
  138. end
  139. end
  140. local function makeGodWarTopThree(net, human)
  141. local state,round,leftTime = getNowGodWarState()
  142. net[0] = 3
  143. local conf = JjcGodWarExcel.chenghaoReward
  144. local rank2Uuid = JjcGodWarDB.getGodWarRank2Uuid()
  145. local uuid2Roles = JjcGodWarDB.getGodWarUuid2Roles()
  146. local lastTopThreeData = JjcGodWarDB.getGodWarLastTopThree()
  147. for rank=1,3 do
  148. net[rank].name = ""
  149. net[rank].uuid = ""
  150. net[rank].rank = rank
  151. net[rank].beiMoBai = 0
  152. net[rank].kingBody = 304002
  153. net[rank].chenghaoID = conf[rank].chenghaoID
  154. net[rank].chenghaoName = ""
  155. if conf[rank].chenghaoID and RoleExcel.chenghao[conf[rank].chenghaoID] then
  156. net[rank].chenghaoName = RoleExcel.chenghao[conf[rank].chenghaoID].name
  157. end
  158. net[rank].isMoBai = 0
  159. local roleData = nil
  160. if state == GODWAR_STATE_WAIT or state == GODWAR_STATE_END then
  161. if rank2Uuid and uuid2Roles then
  162. local uuid = rank2Uuid[rank]
  163. roleData = uuid2Roles[uuid]
  164. end
  165. else
  166. if lastTopThreeData then
  167. roleData = lastTopThreeData[rank]
  168. end
  169. end
  170. if roleData then
  171. local rolebase = roleData.rolebase
  172. if JjcDB.isNpc(roleData) then
  173. rolebase = roleData
  174. local data = JjcDB.getJjcData(rolebase.uuid)
  175. net[rank].beiMoBai = data.worshipCnt or 0
  176. if data._id ~= human.db._id and (human.db.jjcWorship == nil or human.db.jjcWorship[data._id] == nil) then
  177. net[rank].isMoBai = 1
  178. end
  179. net[rank].kingBody = rolebase.body or 304002
  180. else
  181. local db = RoleDBLogic.getDb(roleData.uuid)
  182. if db ~= nil then
  183. net[rank].beiMoBai = db.jjcBeWorship or 0
  184. if db._id ~= human.db._id and (human.db.jjcWorship == nil or human.db.jjcWorship[db._id] == nil) then
  185. net[rank].isMoBai = 1
  186. end
  187. net[rank].kingBody = db and db.body or 304002
  188. end
  189. end
  190. net[rank].name = rolebase.name or ""
  191. net[rank].uuid = roleData.uuid
  192. end
  193. end
  194. end
  195. local function getMyTopRank(human)
  196. local myGodWar = human.db.jjcGodWar
  197. return myGodWar and myGodWar.topRank or 0
  198. end
  199. local function makeGodWarRank(net,human,rank,uuid,roleData)
  200. net.rank = rank
  201. local rolebase = roleData.rolebase
  202. local isNpc = false
  203. if JjcDB.isNpc(roleData) then
  204. isNpc = true
  205. rolebase = roleData
  206. end
  207. RoleLogic.makeRoleBase(rolebase,net.roleBase)
  208. net.beiMoBai = 0
  209. net.isMoBai = 0
  210. net.jifen = roleData.point or 0
  211. if isNpc then
  212. local data = JjcDB.getJjcData(rolebase.uuid)
  213. net.beiMoBai = data.worshipCnt or 0
  214. if uuid then
  215. if data._id ~= human.db._id and (human.db.jjcWorship == nil or human.db.jjcWorship[data._id] == nil) then
  216. net.isMoBai = 1
  217. end
  218. end
  219. else
  220. local db = RoleDBLogic.getDb(roleData.uuid)
  221. if db ~= nil then
  222. net.beiMoBai = db.jjcBeWorship or 0
  223. if db._id ~= human.db._id and (human.db.jjcWorship == nil or human.db.jjcWorship[db._id] == nil) then
  224. net.isMoBai = 1
  225. end
  226. else
  227. local data = JjcDB.getJjcData(rolebase.uuid)
  228. net.beiMoBai = data.worshipCnt or 0
  229. if uuid then
  230. if data._id ~= human.db._id and (human.db.jjcWorship == nil or human.db.jjcWorship[data._id] == nil) then
  231. net.isMoBai = 1
  232. end
  233. end
  234. end
  235. end
  236. end
  237. function CG_JJCGODWAR_QUERY(human)
  238. if not RoleSystemLogic.isOpen(human, RoleSystemDefine.ROLE_SYS_ID_1302, true) then
  239. return
  240. end
  241. local msgRet = Msg.gc.GC_JJCGODWAR_QUERY
  242. local myGodWarData = JjcGodWarDB.getGodWarDataByUuid(human.db._id)
  243. local myRank = JjcGodWarDB.getRankByUuid(human.db._id)
  244. msgRet.myBeiMoBai = myGodWarData and myGodWarData.beiMoBai or 0
  245. makeGodWarTopThree(msgRet.topThree, human)
  246. msgRet.myTopRank = getMyTopRank(human)
  247. msgRet.myRank = myRank or 0
  248. local now = os.time()
  249. local state,round,leftTime = getNowGodWarState()
  250. local startTime1,startTime2 = getStartTime()
  251. if startTime1 and startTime2 then
  252. -- 如果 第一阶段的 赛季结束 第二阶段未开始 强制 把 State 设置为 赛季结束 给予前端 默认显示 4强
  253. if now > startTime1 + GODWAR_ACT_TIME and now < startTime2 - 15 then
  254. state = GODWAR_STATE_END
  255. round = 0
  256. end
  257. end
  258. msgRet.state = state
  259. msgRet.jieDuan = round
  260. local startTime,leftTime = getSaiJiTime()
  261. msgRet.nextStartTime = startTime
  262. msgRet.leftTime = leftTime
  263. --Msg.trace(msgRet)
  264. Msg.send(msgRet,human.fd)
  265. local godWarDB = JjcGodWarDB.getGodWarDB()
  266. if myGodWarData and not myGodWarData.sendFinalTip and godWarDB.isSendReward then
  267. local msgRet = Msg.gc.GC_JJCGODWAR_RANK_TIP
  268. local allMatch = JjcGodWarDB.getAllMatchByUuid(human.db._id)
  269. if not allMatch then return end
  270. msgRet.myRank = myRank
  271. msgRet.totalFight = #allMatch
  272. local winCnt = 0
  273. for i=1,#allMatch do
  274. if allMatch[i].winUuid == human.db._id then
  275. winCnt = winCnt + 1
  276. end
  277. end
  278. msgRet.winCnt = winCnt
  279. Msg.send(msgRet,human.fd)
  280. myGodWarData.sendFinalTip = true
  281. JjcGodWarDB.updateGodWarRoleDataByUuid(myGodWarData,human.db._id)
  282. end
  283. end
  284. -- 排行榜
  285. function CG_JJCGODWAR_BOARD_QUERY(human)
  286. ObjHuman.updateDaily(human)
  287. local msgRet = Msg.gc.GC_JJCGODWAR_BOARD_QUERY
  288. local rank2Uuid = JjcGodWarDB.getGodWarRank2Uuid()
  289. msgRet.rankList[0] = 0
  290. if rank2Uuid then
  291. msgRet.rankList[0] = 50
  292. for rank=1,50 do
  293. local uuid = rank2Uuid[rank]
  294. local roleData = JjcGodWarDB.getGodWarDataByUuid(uuid)
  295. makeGodWarRank(msgRet.rankList[rank],human,rank,uuid,roleData)
  296. end
  297. end
  298. local myGodWarData = JjcGodWarDB.getGodWarDataByUuid(human.db._id)
  299. local myRank = JjcGodWarDB.getRankByUuid(human.db._id)
  300. if not myGodWarData then
  301. local net = msgRet.myRank
  302. net.rank = 0
  303. net.isMoBai = 0
  304. net.jifen = 0
  305. net.beiMoBai = 0
  306. RoleLogic.makeRoleBase(human.db,net.roleBase)
  307. else
  308. makeGodWarRank(msgRet.myRank,human,myRank,_,myGodWarData)
  309. end
  310. --Msg.trace(msgRet)
  311. Msg.send(msgRet,human.fd)
  312. end
  313. -- 膜拜
  314. function CG_JJCGODWAR_MOBAI(human,uuid)
  315. -- 不能膜拜自己
  316. if uuid == human.db._id then
  317. return
  318. end
  319. -- 初始化膜拜数据
  320. human.db.jjcWorship = human.db.jjcWorship or {}
  321. human.db.jjcWorship.count = human.db.jjcWorship.count or 0
  322. -- 每日膜拜已达上限
  323. if human.db.jjcWorship.count >= JjcLogic.JJC_WORSHIP_CNT then
  324. return Broadcast.sendErr(human, Lang.GODWAR_MOBAI_ERR)
  325. end
  326. -- 已膜拜过此玩家
  327. if human.db.jjcWorship[uuid] ~= nil then
  328. return Broadcast.sendErr(human, Lang.GODWAR_MOBAI_HAD)
  329. end
  330. -- 写数据库
  331. human.db.jjcWorship[uuid] = 1
  332. human.db.jjcWorship.count = human.db.jjcWorship.count + 1
  333. -- 写被膜拜玩家数据库
  334. local worshipCnt = 0
  335. local db = RoleDBLogic.getDb(uuid)
  336. if db == nil then
  337. JjcDB.updateWorshipCnt(uuid)
  338. worshipCnt = JjcDB.getWorshipCnt(uuid)
  339. else
  340. db.jjcBeWorship = db.jjcBeWorship or 0
  341. db.jjcBeWorship = db.jjcBeWorship + 1
  342. RoleDBLogic.saveRole(db)
  343. worshipCnt = db.jjcBeWorship
  344. end
  345. local config = JjcGodWarExcel.mobai[1]
  346. local reward = config.mobaiReward
  347. -- 给奖励
  348. BagLogic.addItem(human, reward[1], reward[2], "jjc_worship")
  349. Broadcast.sendErr(human, Util.format(Lang.JJC_WORSHIP_GOOD, reward[2]))
  350. local msgRet = Msg.gc.GC_JJCGODWAR_MOBAI
  351. msgRet.uuid = uuid
  352. msgRet.beiMoBai = worshipCnt
  353. Msg.send(msgRet,human.fd)
  354. --Broadcast.sendErr(human, Lang.GODWAR_MOBAI_REWARD)
  355. end
  356. local function makeGodWarNowState(net)
  357. local state,round,leftTime = getNowGodWarState()
  358. net.state = state
  359. net.jieDuan = round
  360. net.leftTime = leftTime
  361. end
  362. local function makeNpcInfo(net,roleData)
  363. local monsterOutID = roleData.monsterOutID
  364. local monsterOutConfig = MonsterExcel.monsterOut[monsterOutID]
  365. local fakeHuman = {}
  366. fakeHuman.db = roleData
  367. RoleLogic.getRoleBase(fakeHuman, net.roleBase)
  368. net.heroList[0] = CombatDefine.COMBAT_HERO_CNT
  369. net.formation = monsterOutConfig.formation
  370. local monsterObjList = CombatLogic.getMonsterObjList(monsterOutID)
  371. for i = 1, CombatDefine.COMBAT_HERO_CNT do
  372. local obj = monsterObjList[i]
  373. local monsterID = obj and obj.id or 0
  374. local index = obj and obj.bagIndex or 0
  375. HeroGrid.makeHeroSimpleByMonsterID(net.heroList[i], monsterID,{lv = obj and obj.lv or 0})
  376. net.heroList[i].index = index
  377. end
  378. net.helpList[0] = 0
  379. end
  380. local function makeGodWarTeam(net,roleData, side)
  381. if JjcDB.isNpc(roleData) then
  382. makeNpcInfo(net,roleData)
  383. return
  384. end
  385. local state,round,leftTime = getNowGodWarState()
  386. local objList, helpList, rolebase, formation
  387. if round == GODWAR_JIEDUAN_ZHUNBEI or round == GODWAR_JIEDUAN_JINGCAI then
  388. local fakeHuman = ObjHuman.onlineUuid[roleData.uuid]
  389. if fakeHuman then
  390. objList, helpList, rolebase, formation = CombatLogic.getHumanObjList(fakeHuman, CombatDefine.COMBAT_TYPE4)
  391. end
  392. end
  393. if not objList then
  394. objList = roleData.objList
  395. helpList = roleData.helpList
  396. rolebase = roleData.rolebase
  397. formation = roleData.formation
  398. end
  399. net.formation = formation
  400. RoleLogic.makeRoleBase(rolebase,net.roleBase,CombatDefine.COMBAT_TYPE4)
  401. net.heroList[0] = CombatDefine.COMBAT_HERO_CNT
  402. for i=1,CombatDefine.COMBAT_HERO_CNT do
  403. local grid = objList and objList[i]
  404. local bagIndex = grid and grid.bagIndex or 0
  405. HeroGrid.makeHeroSimple(net.heroList[i], grid, bagIndex)
  406. end
  407. net.helpList[0] = 0
  408. if helpList and helpList[1] then
  409. local helpPos = CombatDefine.getHelpPos(side,CombatDefine.HELP_TYPE1)
  410. for _, help in pairs(helpList) do
  411. help.pos = helpPos
  412. if CombatLogic.fontCombatHelpNet(net.helpList[net.helpList[0] + 1], help, helpPos) then
  413. net.helpList[0] = net.helpList[0] + 1
  414. end
  415. end
  416. end
  417. --[[
  418. if helpList and helpList[1] then
  419. len = len + 1
  420. local helpPos = CombatDefine.getHelpPos(side,CombatDefine.HELP_TYPE1)
  421. MoshouLogic.setCombatHelp(net.helpList[len],helpList[1],helpPos)
  422. end
  423. net.helpList[0] = len
  424. ]]
  425. end
  426. local function makeGodWarTeamHistory(net,combatInfo,side)
  427. --require("common.Util").printTable(combatInfo)
  428. local rolebase = combatInfo.attacker
  429. local formation = combatInfo.atkFormation or 1
  430. if side == CombatDefine.DEFEND_SIDE then
  431. rolebase = combatInfo.defender
  432. formation = combatInfo.defFormation or 1
  433. end
  434. local objList = combatInfo.objList
  435. local helpList = combatInfo.helpList
  436. net.formation = formation
  437. RoleLogic.makeRoleBase(rolebase,net.roleBase)
  438. net.heroList[0] = 0
  439. for _,pos in ipairs(CombatDefine.SIDE2POS[side]) do
  440. local grid = objList and objList[pos]
  441. net.heroList[0] = net.heroList[0] + 1
  442. local index = net.heroList[0]
  443. local bagIndex = grid and grid.bagIndex or 0
  444. HeroGrid.makeHeroSimple(net.heroList[index], grid, bagIndex)
  445. end
  446. net.helpList[0] = 0
  447. if helpList and helpList[1] then
  448. local helpPos = CombatDefine.getHelpPos(side,CombatDefine.HELP_TYPE1)
  449. for _, help in pairs(helpList) do
  450. help.pos = helpPos
  451. if CombatLogic.fontCombatHelpNet(net.helpList[net.helpList[0] + 1], help, helpPos) then
  452. net.helpList[0] = net.helpList[0] + 1
  453. end
  454. end
  455. end
  456. --[[
  457. local len = 0
  458. if helpList and helpList[1] and helpList[1] > 0 then
  459. len = len + 1
  460. MoshouLogic.setHelp(net.helpList[len],helpList[1])
  461. end
  462. net.helpList[0] = len
  463. ]]
  464. end
  465. -- 我的比赛界面
  466. -- 活动开启倒计时,显示距开始xxxx
  467. -- 活动结束显示,有参与过战斗的显示最后一场战斗,没有资格的显示没资格
  468. -- 活动中,128名以外的显示没资格
  469. function CG_JJCGODWAR_MYMATCH(human)
  470. local msgRet = Msg.gc.GC_JJCGODWAR_MYMATCH
  471. msgRet.teams[0] = 0
  472. makeGodWarNowState(msgRet.state)
  473. msgRet.vestID = ""
  474. msgRet.history = 0
  475. msgRet.isWin = 0
  476. local state,round,leftTime = getNowGodWarState()
  477. --print("state,leftTime",state,leftTime)
  478. if state == GODWAR_STATE_WAIT then --尚未开启
  479. -- Msg.trace(msgRet)
  480. Msg.send(msgRet,human.fd)
  481. return
  482. end
  483. local pairsData,nowCombat,getMatch2FightState = JjcGodWarDB.getGodWarPairsDataByUuid(human.db._id)
  484. if pairsData then
  485. local atkUuid = pairsData.atkUuid
  486. local defUuid = pairsData.defUuid
  487. local winUuid = pairsData.winUuid
  488. msgRet.teams[0] = 2
  489. if nowCombat then
  490. local atkRoleData = JjcGodWarDB.getGodWarDataByUuid(atkUuid)
  491. local defRoleData = JjcGodWarDB.getGodWarDataByUuid(defUuid)
  492. makeGodWarTeam(msgRet.teams[1],atkRoleData,CombatDefine.ATTACK_SIDE)
  493. makeGodWarTeam(msgRet.teams[2],defRoleData,CombatDefine.DEFEND_SIDE)
  494. if round == GODWAR_JIEDUAN_COMBAT then
  495. msgRet.vestID = pairsData.vestID or ""
  496. end
  497. else
  498. local record = JjcGodWarDB.getRecord(pairsData.vestID)
  499. if not record then return end
  500. local combatInfo = record.combatInfo
  501. makeGodWarTeamHistory(msgRet.teams[1],combatInfo,CombatDefine.ATTACK_SIDE)
  502. makeGodWarTeamHistory(msgRet.teams[2],combatInfo,CombatDefine.DEFEND_SIDE)
  503. msgRet.history = getMatch2FightState
  504. msgRet.vestID = pairsData.vestID or ""
  505. if winUuid and winUuid == atkUuid then
  506. msgRet.isWin = 1
  507. end
  508. end
  509. end
  510. --Util.printTable(msgRet)
  511. -- Msg.trace(msgRet)
  512. Msg.send(msgRet,human.fd)
  513. end
  514. --竞猜界面
  515. function CG_JJCGODWAR_JINGCAI(human)
  516. if not RoleSystemLogic.isOpen(human, RoleSystemDefine.ROLE_SYS_ID_1302, true) then
  517. return
  518. end
  519. local msgRet = Msg.gc.GC_JJCGODWAR_JINGCAI
  520. local state,round,leftTime = getNowGodWarState()
  521. local jingCaiPairs = nil
  522. local needState = nil
  523. local jingcaiBi = 0
  524. if state == GODWAR_STATE_END or state == GODWAR_STATE_WAIT then
  525. jingCaiPairs = JjcGodWarDB.getGodWarJingCaiPairs(GODWAR_STATE_PAIWEI1)
  526. needState = GODWAR_STATE_PAIWEI1
  527. else
  528. jingCaiPairs = JjcGodWarDB.getGodWarJingCaiPairs(state)
  529. needState = state
  530. jingcaiBi = JjcGodWarDB.getJingCaiBiCnt(human,state)
  531. end
  532. if not jingCaiPairs and state < GODWAR_STATE_END and state > GODWAR_STATE_WAIT then
  533. --生成竞猜队伍 客户端自动切换的时候 服务端还未生成竞猜队伍处理
  534. JjcGodWarDB.godWarJingCaiPairs()
  535. jingCaiPairs = JjcGodWarDB.getGodWarJingCaiPairs(state)
  536. needState = state
  537. jingcaiBi = JjcGodWarDB.getJingCaiBiCnt(human,state)
  538. end
  539. local jingCaiExcel = JjcGodWarExcel.jingCai[1]
  540. local maxYa = jingCaiExcel.jingCaiYaOneMax
  541. msgRet.maxYa = maxYa
  542. msgRet.jingcaiBi = 0
  543. msgRet.yaUuid = ""
  544. msgRet.vestID = ""
  545. msgRet.jingcaiTeam[0] = 0
  546. msgRet.isWin = 0
  547. makeGodWarNowState(msgRet.state)
  548. if jingCaiPairs then
  549. local atkUuid = jingCaiPairs.atkUuid
  550. local defUuid = jingCaiPairs.defUuid
  551. local vestID = jingCaiPairs.vestID or ""
  552. local winUuid = jingCaiPairs.winUuid
  553. msgRet.jingcaiTeam[0] = 2
  554. if needState == state then
  555. local atkRoleData = JjcGodWarDB.getGodWarDataByUuid(atkUuid)
  556. local defRoleData = JjcGodWarDB.getGodWarDataByUuid(defUuid)
  557. makeGodWarTeam(msgRet.jingcaiTeam[1].team,atkRoleData,CombatDefine.ATTACK_SIDE)
  558. makeGodWarTeam(msgRet.jingcaiTeam[2].team,defRoleData,CombatDefine.DEFEND_SIDE)
  559. if round ~= GODWAR_JIEDUAN_COMBAT then
  560. vestID = ""
  561. end
  562. else
  563. local record = JjcGodWarDB.getRecord(vestID)
  564. if not record then return end
  565. local combatInfo = record.combatInfo
  566. makeGodWarTeamHistory(msgRet.jingcaiTeam[1].team,combatInfo,CombatDefine.ATTACK_SIDE)
  567. makeGodWarTeamHistory(msgRet.jingcaiTeam[2].team,combatInfo,CombatDefine.DEFEND_SIDE)
  568. end
  569. local atkPei,defPei = JjcGodWarDB.getJingcaiPei(needState)
  570. msgRet.jingcaiTeam[1].pei = atkPei * 100
  571. msgRet.jingcaiTeam[2].pei = defPei * 100
  572. msgRet.jingcaiBi = jingcaiBi
  573. msgRet.vestID = vestID
  574. local yaData = JjcGodWarDB.getJingCaiYaZhu(human.db._id)
  575. msgRet.yaUuid = yaData and yaData[needState] and yaData[needState].yaUuid or ""
  576. if winUuid and atkUuid == atkUuid then
  577. msgRet.isWin = 1
  578. end
  579. end
  580. --Msg.trace(msgRet)
  581. Msg.send(msgRet,human.fd)
  582. end
  583. --竞猜提醒
  584. function GC_JJCGODWAR_JINGCAI_TIP(human)
  585. local msgRet = Msg.gc.GC_JJCGODWAR_JINGCAI_TIP
  586. local jingCaiExcel = JjcGodWarExcel.jingCai[1]
  587. msgRet.items[0] = #jingCaiExcel.jingCaiShowReward
  588. for i=1,#jingCaiExcel.jingCaiShowReward do
  589. local itemID = jingCaiExcel.jingCaiShowReward[i][1]
  590. local itemCnt = jingCaiExcel.jingCaiShowReward[i][2]
  591. Grid.makeItem(msgRet.items[i],itemID,itemCnt)
  592. end
  593. --Msg.trace(msgRet)
  594. Msg.send(msgRet,human.fd)
  595. end
  596. --竞猜信息刷新
  597. function CG_JJCGODWAR_JINGCAI_CHECK(human)
  598. local state,round,leftTime = getNowGodWarState()
  599. if state == GODWAR_STATE_WAIT or state == GODWAR_STATE_END then return end
  600. if round ~= GODWAR_JIEDUAN_JINGCAI then
  601. return
  602. end
  603. local msgRet = Msg.gc.GC_JJCGODWAR_JINGCAI_CHECK
  604. local atkPei,defPei = JjcGodWarDB.getJingcaiPei(state)
  605. msgRet.peiLeft = atkPei * 100
  606. msgRet.peiRight = defPei * 100
  607. Msg.send(msgRet,human.fd)
  608. end
  609. --押注
  610. function CG_JJCGODWAR_JINGCAI_YA(human,targetUuid,yaZhuCnt)
  611. if yaZhuCnt <= 0 then return end
  612. local state,round,leftTime = getNowGodWarState()
  613. if round ~= GODWAR_JIEDUAN_JINGCAI
  614. or leftTime <= 0 then
  615. return Broadcast.sendErr(human,Lang.GODWAR_JINGCAI_ERR)
  616. end
  617. local yaData = JjcGodWarDB.getYaZhuDataByUuid(human.db._id)
  618. if not yaData then return end
  619. if yaData.jingCai and yaData.jingCai[state] then
  620. Broadcast.sendErr(human,Lang.GODWAR_JINGCAI_HAD)
  621. return
  622. end
  623. local jingCaiPairs = JjcGodWarDB.getGodWarJingCaiPairs(state)
  624. local atkUuid = jingCaiPairs.atkUuid
  625. local defUuid = jingCaiPairs.defUuid
  626. if targetUuid ~= atkUuid
  627. and targetUuid ~= defUuid then
  628. return
  629. end
  630. local jingCaiExcel = JjcGodWarExcel.jingCai[1]
  631. local maxYa = jingCaiExcel.jingCaiYaOneMax
  632. if yaZhuCnt > maxYa then
  633. Broadcast.sendErr(human,Lang.GODWAR_JINGCAI_OK)
  634. return
  635. end
  636. local now = JjcGodWarDB.getJingCaiBiCnt(human,state)
  637. if now < yaZhuCnt then return end
  638. yaData.jingCaiBi = now - yaZhuCnt
  639. JjcGodWarDB.updateGodWarYaZhuByUuid(yaData,human.db._id)
  640. JjcGodWarDB.updateYaZhuByUuid(human.db._id,targetUuid,yaZhuCnt)
  641. JjcGodWarDB.jingCaiYaUpdate(targetUuid)
  642. Broadcast.sendErr(human,Lang.GODWAR_JINGCAI_OK)
  643. CG_JJCGODWAR_JINGCAI(human)
  644. end
  645. local function calYaWinCnt(yaZhuCnt,yaUuid,winUuid)
  646. local jingCaiExcel = JjcGodWarExcel.jingCai[1]
  647. local gap = jingCaiExcel.jingCaiRealPei
  648. if yaUuid == winUuid then
  649. return math.floor(yaZhuCnt * gap)
  650. else
  651. return 0
  652. end
  653. end
  654. --我的竞猜查询(新一期活动开始清掉)
  655. function CG_JJCGODWAR_JINGCAI_MY(human)
  656. local warState,warRound,leftTime = getNowGodWarState()
  657. local msgRet = Msg.gc.GC_JJCGODWAR_JINGCAI_MY
  658. msgRet.jingcaiRecord[0] = 0
  659. local yaData = JjcGodWarDB.getJingCaiYaZhu(human.db._id)
  660. if yaData then
  661. for round,data in pairs(yaData) do
  662. local jingCaiData = JjcGodWarDB.getGodWarJingCaiPairs(round)
  663. if jingCaiData then
  664. msgRet.jingcaiRecord[0] = msgRet.jingcaiRecord[0] + 1
  665. local index = msgRet.jingcaiRecord[0]
  666. local winUuid = jingCaiData.winUuid or ""
  667. local atkUuid = jingCaiData.atkUuid
  668. local defUuid = jingCaiData.defUuid
  669. if warState > GODWAR_STATE_WAIT and warState <= round then
  670. winUuid = ""
  671. end
  672. local yaUuid = data.yaUuid
  673. local yaZhuCnt = data.yaZhuCnt
  674. local atkRoleData = JjcGodWarDB.getGodWarDataByUuid(atkUuid)
  675. local defRoleData = JjcGodWarDB.getGodWarDataByUuid(defUuid)
  676. msgRet.jingcaiRecord[index].roleBase[0] = 2
  677. local atkRolebase = atkRoleData.rolebase
  678. local defRolebase = defRoleData.rolebase
  679. if JjcDB.isNpc(atkRoleData) then
  680. atkRolebase = atkRoleData
  681. end
  682. if JjcDB.isNpc(defRoleData) then
  683. defRolebase = defRoleData
  684. end
  685. RoleLogic.makeRoleBase(atkRolebase,msgRet.jingcaiRecord[index].roleBase[1])
  686. RoleLogic.makeRoleBase(defRolebase,msgRet.jingcaiRecord[index].roleBase[2])
  687. msgRet.jingcaiRecord[index].winUuid = winUuid
  688. msgRet.jingcaiRecord[index].round = round
  689. local state = 1
  690. if winUuid ~= "" then
  691. state = 0
  692. end
  693. msgRet.jingcaiRecord[index].state = state
  694. msgRet.jingcaiRecord[index].yaCnt = yaZhuCnt
  695. local yaWinCnt = calYaWinCnt(yaZhuCnt,yaUuid,winUuid)
  696. msgRet.jingcaiRecord[index].yaWinCnt = yaWinCnt
  697. local yaLosCnt = 0
  698. if winUuid ~= "" and yaWinCnt == 0 then
  699. yaLosCnt = yaZhuCnt
  700. end
  701. msgRet.jingcaiRecord[index].yaLosCnt = yaLosCnt
  702. msgRet.jingcaiRecord[index].yaUuid = yaUuid
  703. msgRet.jingcaiRecord[index].vestID = jingCaiData.vestID or ""
  704. -- Util.printTable(jingCaiData)
  705. -- print(" jingCaiData.winUuid ", jingCaiData.winUuid ,msgRet.jingcaiRecord[index].vestID , msgRet.jingcaiRecord[index].state )
  706. -- print(" yaLosCnt ", yaLosCnt, yaWinCnt, msgRet.jingcaiRecord[index].winUuid , warState ,round )
  707. end
  708. end
  709. end
  710. -- Msg.trace(msgRet)
  711. Msg.send(msgRet,human.fd)
  712. end
  713. --竞猜成功回调
  714. function GC_JJCGODWAR_JINGCAI_WIN(state,godWarDB)
  715. if state < GODWAR_STATE_WAIT then return end
  716. local yaZhuDB = godWarDB.uuid2Yazhu
  717. local jingCaiCalcState = godWarDB.jingCaiCalcState or 0
  718. if state == jingCaiCalcState then return end
  719. if not yaZhuDB then return end
  720. local jingCaiItem = JjcGodWarExcel.jingCai[1].jingCaiItem
  721. local up = nil
  722. godWarDB.jingCaiCalcState = state
  723. local conf = JjcGodWarExcel.jingCai[1]
  724. for uuid,data in pairs(yaZhuDB) do
  725. if data.jingCai then
  726. local jingCai = data.jingCai[state]
  727. if jingCai then
  728. local jingCaiData = JjcGodWarDB.getGodWarJingCaiPairs(state)
  729. local winUuid = jingCaiData.winUuid
  730. local yaUuid = jingCai.yaUuid
  731. if yaUuid and winUuid then
  732. if yaUuid == winUuid then
  733. local winCnt = calYaWinCnt(jingCai.yaZhuCnt,jingCai.yaUuid,winUuid)
  734. up = true
  735. yaZhuDB[uuid].jingCaiBi = yaZhuDB[uuid].jingCaiBi + winCnt
  736. local sendHuman = ObjHuman.onlineUuid[uuid]
  737. if sendHuman then
  738. local msgRet = Msg.gc.GC_JJCGODWAR_JINGCAI_WIN
  739. msgRet.round = state
  740. Grid.makeItem(msgRet.items,jingCaiItem,winCnt)
  741. msgRet.jingcaiBi = yaZhuDB[uuid].jingCaiBi
  742. -- Msg.trace(msgRet)
  743. Msg.send(msgRet,sendHuman.fd)
  744. end
  745. end
  746. yaZhuDB[uuid].jingCaiBi = yaZhuDB[uuid].jingCaiBi + conf.jingCaiSongBi
  747. end
  748. end
  749. end
  750. end
  751. if state ~= GODWAR_STATE_PAIWEI1 and up then
  752. JjcGodWarDB.updateGodWarDB(godWarDB)
  753. end
  754. end
  755. --奖励展示
  756. local function makeGodWarRankReward(net,data)
  757. net.minRank = data.rankMin
  758. net.maxRank = data.rankMax
  759. net.rewards[0] = #data.reward
  760. for i=1,#data.reward do
  761. Grid.makeItem(net.rewards[i],data.reward[i][1],data.reward[i][2])
  762. end
  763. end
  764. function CG_JJCGODWAR_RANK_REWARD(human)
  765. local msgRet = Msg.gc.GC_JJCGODWAR_RANK_REWARD
  766. local config = JjcGodWarExcel.godWarBoard
  767. msgRet.godWarReward[0] = #config
  768. for index,data in ipairs(config) do
  769. makeGodWarRankReward(msgRet.godWarReward[index],data)
  770. end
  771. -- Msg.trace(msgRet)
  772. Msg.send(msgRet,human.fd)
  773. end
  774. --32强界面
  775. function CG_JJCGODWAR_PAIWEI_QUERY(human,checkState,fenzuID)
  776. local msgRet = Msg.gc.GC_JJCGODWAR_PAIWEI_QUERY
  777. makeGodWarNowState(msgRet.state)
  778. local godState,round,leftTime = getNowGodWarState()
  779. if checkState == GODWAR_STATE_PAIWEI32 and godState > GODWAR_STATE_PAIWEI32 then
  780. checkState = godState
  781. checkState = checkState > GODWAR_STATE_PAIWEI8 and GODWAR_STATE_PAIWEI8 or godState
  782. elseif checkState == GODWAR_STATE_PAIWEI4 and godState > GODWAR_STATE_PAIWEI4 then
  783. checkState = GODWAR_STATE_PAIWEI1
  784. elseif checkState == GODWAR_STATE_PAIWEI32 and godState == GODWAR_STATE_WAIT then -- 赛季未开启则查询上赛季的战绩
  785. checkState = GODWAR_STATE_PAIWEI8
  786. elseif checkState == GODWAR_STATE_PAIWEI4 and godState == GODWAR_STATE_WAIT then
  787. checkState = GODWAR_STATE_PAIWEI1
  788. end
  789. msgRet.group[0] = 0
  790. local group = JjcGodWarDB.getNowPaiWeiFenzu(checkState,fenzuID)
  791. --require("common.Util").printTable(group)
  792. if group then
  793. -- local jingcaiState,round,leftTime = getNowGodWarState()
  794. local jingcaiState = checkState
  795. round = GODWAR_JIEDUAN_JINGCAI_TIME
  796. local jingCaiData = JjcGodWarDB.getGodWarJingCaiData(jingcaiState)
  797. for state,data in pairs(group) do
  798. msgRet.group[0] = msgRet.group[0] + 1
  799. local index = msgRet.group[0]
  800. msgRet.group[index].checkState = state
  801. msgRet.group[index].fenzuID = fenzuID
  802. msgRet.group[index].roles[0] = #data
  803. for i=1,#data do
  804. local rolesNet = msgRet.group[index].roles[i]
  805. rolesNet.index = i
  806. rolesNet.roleBase[0] = 2
  807. local atkUuid = data[i].atkUuid
  808. local defUuid = data[i].defUuid
  809. local atkRoleData = JjcGodWarDB.getGodWarDataByUuid(atkUuid)
  810. local defRoleData = JjcGodWarDB.getGodWarDataByUuid(defUuid)
  811. local atkRolebase = atkRoleData.rolebase
  812. local defRolebase = defRoleData.rolebase
  813. if JjcDB.isNpc(atkRoleData) then
  814. atkRolebase = atkRoleData
  815. end
  816. if JjcDB.isNpc(defRoleData) then
  817. defRolebase = defRoleData
  818. end
  819. RoleLogic.makeRoleBase(atkRolebase,rolesNet.roleBase[1])
  820. RoleLogic.makeRoleBase(defRolebase,rolesNet.roleBase[2])
  821. rolesNet.vestID = data[i].vestID or ""
  822. rolesNet.winUuid = ""
  823. -- 32强赛中 比赛到下一回合 再显示出胜者给客户端
  824. if godState == GODWAR_STATE_WAIT or godState > state then
  825. rolesNet.winUuid = data[i].winUuid or ""
  826. end
  827. end
  828. local jingcaiIndex = 0
  829. if jingCaiData and round == GODWAR_JIEDUAN_JINGCAI_TIME
  830. and jingcaiState == state
  831. and jingCaiData.fenzuID == fenzuID then
  832. local jingCaiPairsIndex = jingCaiData.pairsIndex
  833. jingcaiIndex = jingCaiPairsIndex
  834. end
  835. msgRet.group[index].jingcaiIndex = jingcaiIndex
  836. end
  837. end
  838. --Msg.trace(msgRet)
  839. if Config.IS_JJCGODWAR then
  840. local info=Util.printTable(msgRet)
  841. Log.write(Log.LOGID_JJC_GODWAR,"GC_JJCGODWAR_PAIWEI_QUERY=>"..info)
  842. end
  843. Msg.send(msgRet,human.fd)
  844. end
  845. --获取竞猜猜对次数
  846. function getYaCorrectCnt(yazhuData)
  847. if not yazhuData or not yazhuData.jingCai then return 0 end
  848. local correctCnt = 0
  849. for state,data in pairs(yazhuData.jingCai) do
  850. local yaUuid = data.yaUuid
  851. local jingCaiData = JjcGodWarDB.getGodWarJingCaiPairs(state)
  852. if jingCaiData then
  853. local winUuid = jingCaiData.winUuid or ""
  854. if yaUuid == winUuid then
  855. correctCnt = correctCnt + 1
  856. end
  857. end
  858. end
  859. return correctCnt
  860. end
  861. local function makeTopRank(human,rank,isSave)
  862. human.db.jjcGodWar = human.db.jjcGodWar or {}
  863. if not human.db.jjcGodWar.topRank then
  864. human.db.jjcGodWar.topRank = rank
  865. else
  866. if human.db.jjcGodWar.topRank > rank then
  867. human.db.jjcGodWar.topRank = rank
  868. end
  869. end
  870. if isSave then
  871. ObjHuman.save(human)
  872. end
  873. end
  874. --发送排名奖励 竞技积分奖励
  875. function sendFinalReward(godWarDB)
  876. local mailConfig = MailExcel.mail[MailDefine.MAIL_ID_ZSZZ_SEASON]
  877. local title = mailConfig.title
  878. local senderName = mailConfig.senderName
  879. for _, config in ipairs(JjcGodWarExcel.godWarBoard) do
  880. for rank = config.rankMin, config.rankMax do
  881. local roleData = JjcGodWarDB.getGodWarDataByRank(rank)
  882. if roleData and not JjcDB.isNpc(roleData) then
  883. local content = Util.format(mailConfig.content, rank)
  884. MailManager.add(MailManager.SYSTEM, roleData.uuid, title, content, config.reward, senderName)
  885. --历练系统回调
  886. HeroGrowUp.onCallbackByUuid(roleData.uuid, HeroGrowUp.TASKTYPE14, rank)
  887. LiLianLogic.onCallbackByUuid(roleData.uuid,LiLianLogic.LILIAN_OUTID2,1,rank)
  888. end
  889. end
  890. end
  891. local defConf = JjcGodWarExcel.define[1]
  892. local mailConfig = MailExcel.mail[MailDefine.MAIL_ID_ZSZZ_GUESS]
  893. local title = mailConfig.title
  894. local senderName = mailConfig.senderName
  895. local uuid2Yazhu = godWarDB.uuid2Yazhu
  896. if not uuid2Yazhu then return end
  897. for uuid,data in pairs(uuid2Yazhu) do
  898. local cnt = data.jingCaiBi or 0
  899. if cnt > 0 then
  900. if cnt > GODWAR_END_JINGCAI then
  901. cnt = GODWAR_END_JINGCAI
  902. end
  903. uuid2Yazhu[uuid].jingCaiBi = 0
  904. local reward = {}
  905. reward[1] = {defConf.jingcaibiEnd,cnt}
  906. MailManager.add(MailManager.SYSTEM, uuid, title, mailConfig.content, reward, senderName)
  907. --历练系统回调
  908. local correctCnt = getYaCorrectCnt(data) --本次活动竞猜正确次数
  909. LiLianLogic.onCallbackByUuid(uuid,LiLianLogic.LILIAN_OUTID25,correctCnt)
  910. end
  911. end
  912. local rank2Uuid = JjcGodWarDB.getGodWarRank2Uuid()
  913. for rank,uuid in pairs(rank2Uuid) do
  914. local target = ObjHuman.onlineUuid[uuid]
  915. if target and target.fd then
  916. makeTopRank(target,rank)
  917. else
  918. local fakeDB = RoleDBLogic.getDb(uuid)
  919. if fakeDB then
  920. local fakeHuman = {}
  921. fakeHuman.db = fakeDB
  922. makeTopRank(fakeHuman,rank,true)
  923. end
  924. end
  925. end
  926. for _, human in pairs(ObjHuman.onlineUuid) do
  927. if human.fd then
  928. GC_JJCGODWAR_FINISH(human)
  929. end
  930. end
  931. end
  932. local function godwarChengHao(godWarDB)
  933. local lastTopThree = godWarDB.lastTopThree
  934. if lastTopThree then
  935. for rank,roleData in pairs(lastTopThree) do
  936. if roleData.chenghao then
  937. RoleHeadLogic.unActive(roleData.uuid, RoleHeadLogic.HEAD_TYPE_4, roleData.chenghao)
  938. end
  939. end
  940. end
  941. local conf = JjcGodWarExcel.chenghaoReward
  942. for rank=1,3 do
  943. local chenghao = conf[rank].chenghaoID
  944. local uuid = godWarDB.rank2Uuid[rank]
  945. local roleData = godWarDB.uuid2Roles[uuid]
  946. if roleData and not JjcDB.isNpc(roleData) then
  947. godWarDB.uuid2Roles[uuid].chenghao = chenghao --仅作记录,防止称号id配置更换
  948. -- 给予称号
  949. local target = ObjHuman.onlineUuid[uuid]
  950. if target and target.fd then
  951. RoleHeadLogic.active(target, RoleHeadLogic.HEAD_TYPE_4, chenghao)
  952. else
  953. local fakeDB = RoleDBLogic.getDb(uuid)
  954. if fakeDB then
  955. local fakeHuman = {}
  956. fakeHuman.db = fakeDB
  957. RoleHeadLogic.active(fakeHuman, RoleHeadLogic.HEAD_TYPE_4, chenghao)
  958. ObjHuman.save(fakeHuman)
  959. end
  960. end
  961. end
  962. end
  963. end
  964. function CG_JJCGODWAR_NOWSTATE(human)
  965. local msgRet = Msg.gc.GC_JJCGODWAR_NOWSTATE
  966. makeGodWarNowState(msgRet.state)
  967. --Msg.trace(msgRet)
  968. Msg.send(msgRet,human.fd)
  969. end
  970. JINGCAI_SHOW_TIP_HAD = JINGCAI_SHOW_TIP_HAD or nil
  971. function jingCaiShowTips(state)
  972. local need = nil
  973. for uuid, human in pairs(ObjHuman.onlineUuid) do
  974. if human.fd and RoleSystemLogic.isOpen(human, RoleSystemDefine.ROLE_SYS_ID_1302) then
  975. if not JINGCAI_SHOW_TIP_HAD or not JINGCAI_SHOW_TIP_HAD[uuid] then
  976. need = need or {}
  977. local index = #need
  978. need[index+1] = uuid
  979. if index == 10 then
  980. break
  981. end
  982. end
  983. end
  984. end
  985. if need then
  986. for i=1,#need do
  987. local uuid = need[i]
  988. JINGCAI_SHOW_TIP_HAD = JINGCAI_SHOW_TIP_HAD or {}
  989. JINGCAI_SHOW_TIP_HAD[uuid] = 1
  990. local human = ObjHuman.onlineUuid[uuid]
  991. local jjcGodWarData = human.db.jjcGodWar
  992. local jingCaiTip = jjcGodWarData and jjcGodWarData.jingCaiTip or 0
  993. if not jjcGodWarData or jingCaiTip == 0 then
  994. human.db.jjcGodWar = human.db.jjcGodWar or {}
  995. human.db.jjcGodWar.jingCaiTip = state
  996. GC_JJCGODWAR_JINGCAI_TIP(human)
  997. end
  998. end
  999. end
  1000. end
  1001. local function pointCheck(state)
  1002. local godWarDB = JjcGodWarDB.getGodWarDB()
  1003. local uuid2Roles = godWarDB.uuid2Roles
  1004. local pointCheckState = godWarDB.pointCheckState
  1005. if pointCheckState and pointCheckState == state then return end
  1006. godWarDB.pointCheckState = state
  1007. for uuid in pairs(uuid2Roles) do
  1008. local combatResultList = JjcGodWarDB.getCombatResultListByUuid(uuid)
  1009. local point = combatResultList and combatResultList[state] or 0
  1010. if point ~= 0 then
  1011. uuid2Roles[uuid].point = uuid2Roles[uuid].point + point
  1012. end
  1013. end
  1014. JjcGodWarDB.updateGodWarDB(godWarDB)
  1015. end
  1016. --活动时间控制
  1017. --每一轮战斗需要1场竞猜队伍
  1018. --每一轮战斗结束后需要刷新排行榜
  1019. --每一轮战斗结束后需要结算竞猜结果,给奖励并弹提示
  1020. --每一轮准备阶段结束需要保存当前的队伍信息
  1021. --战斗阶段最后3s,已无战斗计算队伍,选拔赛6轮内按积分排位,排位赛按小组输赢晋级或止步,仅本轮止步者按原始积分排位
  1022. --战斗阶段最后3s,弹竞猜结果提示
  1023. function onTimer()
  1024. local godWarDB = JjcGodWarDB.getGodWarDB()
  1025. local state,round,leftTime = getNowGodWarState()
  1026. --print("state,round,leftTime",state,round,leftTime)
  1027. if not state then return end
  1028. if state == GODWAR_STATE_WAIT or state == GODWAR_STATE_END then
  1029. if godWarDB and godWarDB.time and godWarDB.time < os.time() and not godWarDB.isSendReward then
  1030. --结算决赛竞猜
  1031. GC_JJCGODWAR_JINGCAI_WIN(GODWAR_STATE_PAIWEI1,godWarDB)
  1032. --发送活动结束奖励
  1033. godWarDB.isSendReward = true
  1034. sendFinalReward(godWarDB)
  1035. --称号更替
  1036. godwarChengHao(godWarDB)
  1037. JjcGodWarDB.updateGodWarDB(godWarDB)
  1038. -- jjcGodWarIcon()
  1039. jingCaiShowTips(state)
  1040. end
  1041. return
  1042. end
  1043. --活动开始初始化
  1044. if not godWarDB.time or not Util.isSameDay(godWarDB.time) then
  1045. --print("initGodWar")
  1046. godWarDB = JjcGodWarDB.initGodWar()
  1047. -- jjcGodWarIcon()
  1048. --在线玩家竞猜提醒
  1049. jingCaiShowTips(state)
  1050. end
  1051. --容错操作 保证每个阶段必然有分组队伍
  1052. JjcGodWarDB.checkMatch(state)
  1053. --生成竞猜队伍
  1054. JjcGodWarDB.godWarJingCaiPairs()
  1055. --准备阶段结算上一阶段竞猜
  1056. if round == GODWAR_JIEDUAN_ZHUNBEI then
  1057. GC_JJCGODWAR_JINGCAI_WIN(state-1,godWarDB) --竞猜成功提示
  1058. end
  1059. --保存队伍信息
  1060. if round == GODWAR_JIEDUAN_JINGCAI then
  1061. --在线玩家竞猜提醒
  1062. jingCaiShowTips(state)
  1063. --保存队伍信息
  1064. JjcGodWarDB.saveCombatData(godWarDB,state)
  1065. --开始战斗
  1066. JjcGodWarCombat.timerCombat()
  1067. end
  1068. if round == GODWAR_JIEDUAN_COMBAT then
  1069. if JINGCAI_SHOW_TIP_HAD then
  1070. JINGCAI_SHOW_TIP_HAD = nil
  1071. end
  1072. --开始战斗 防止在 竞猜阶段 没有打完
  1073. JjcGodWarCombat.timerCombat()
  1074. if leftTime < 3 then
  1075. if state <= GODWAR_STATE_XUANBA6 then
  1076. --结算本场战斗的积分
  1077. pointCheck(state)
  1078. --选拔赛按积分排位
  1079. JjcGodWarDB.sortJifenBoard()
  1080. end
  1081. if state >= GODWAR_STATE_XUANBA6 then
  1082. if state >= GODWAR_STATE_PAIWEI32 then
  1083. --保存战报
  1084. if state >= GODWAR_STATE_PAIWEI16 then
  1085. JjcGodWarDB.makeZhanBao(state)
  1086. end
  1087. --print("sortPaiWeiBoard")
  1088. --排位赛胜者按积分排位,输者淘汰并按积分排位
  1089. JjcGodWarDB.sortPaiWeiBoard(state)
  1090. end
  1091. --print("paiweiFenzu")
  1092. --排位赛完成对手匹配
  1093. JjcGodWarDB.paiweiFenzu(state + 1)
  1094. end
  1095. end
  1096. end
  1097. end
  1098. --播放录像
  1099. function CG_JJCGODWAR_REPLAY(human,vestID)
  1100. local data = JjcGodWarDB.getRecord(vestID)
  1101. if not data then return end
  1102. CombatLogic.repeatCombat(human,data.combatInfo)
  1103. end
  1104. --查看两队伍布阵信息
  1105. function CG_JJCGODWAR_TEAM(human,vestID)
  1106. local record = JjcGodWarDB.getRecord(vestID)
  1107. if not record then return end
  1108. local msgRet = Msg.gc.GC_JJCGODWAR_TEAM
  1109. msgRet.teams[0] = 2
  1110. local combatInfo = record.combatInfo
  1111. makeGodWarTeamHistory(msgRet.teams[1],combatInfo,CombatDefine.ATTACK_SIDE)
  1112. makeGodWarTeamHistory(msgRet.teams[2],combatInfo,CombatDefine.DEFEND_SIDE)
  1113. -- Msg.trace(msgRet)
  1114. Msg.send(msgRet,human.fd)
  1115. end
  1116. --记录
  1117. function CG_JJCGODWAR_RECORD(human)
  1118. local checkState,round,leftTime = getNowGodWarState()
  1119. local msgRet = Msg.gc.GC_JJCGODWAR_RECORD
  1120. msgRet.record[0] = 0
  1121. local allMatch = JjcGodWarDB.getAllMatchByUuid(human.db._id)
  1122. if allMatch then
  1123. local combatResultList = JjcGodWarDB.getCombatResultListByUuid(human.db._id)
  1124. for i=1,#allMatch do
  1125. local matchData = allMatch[i]
  1126. local atkUuid = matchData.atkUuid
  1127. local defUuid = matchData.defUuid
  1128. local state = matchData.state
  1129. local winUuid = matchData.winUuid
  1130. local vestID = matchData.vestID
  1131. local point = combatResultList and combatResultList[state] or 0
  1132. local canSend = true
  1133. if winUuid == "" then
  1134. canSend = nil
  1135. end
  1136. if state == checkState and round ~= GODWAR_JIEDUAN_COMBAT then
  1137. canSend = nil
  1138. end
  1139. if state == checkState and round == GODWAR_JIEDUAN_COMBAT and leftTime > 1 then
  1140. canSend = nil
  1141. end
  1142. if canSend then
  1143. msgRet.record[0] = msgRet.record[0] + 1
  1144. local index = msgRet.record[0]
  1145. msgRet.record[index].roles[0] = 2
  1146. local atkRoleData = JjcGodWarDB.getGodWarDataByUuid(atkUuid)
  1147. local defRoleData = JjcGodWarDB.getGodWarDataByUuid(defUuid)
  1148. local atkRolebase = atkRoleData.rolebase
  1149. local defRolebase = defRoleData.rolebase
  1150. if JjcDB.isNpc(atkRoleData) then
  1151. atkRolebase = atkRoleData
  1152. end
  1153. if JjcDB.isNpc(defRoleData) then
  1154. defRolebase = defRoleData
  1155. end
  1156. RoleLogic.makeRoleBase(atkRolebase,msgRet.record[index].roles[1])
  1157. RoleLogic.makeRoleBase(defRolebase,msgRet.record[index].roles[2])
  1158. msgRet.record[index].winUuid = winUuid
  1159. msgRet.record[index].vestID = vestID
  1160. msgRet.record[index].state = state
  1161. msgRet.record[index].point = point
  1162. end
  1163. end
  1164. end
  1165. --Msg.trace(msgRet)
  1166. Msg.send(msgRet,human.fd)
  1167. end
  1168. --战报
  1169. function CG_JJCGODWAR_ZHANBAO(human,vestID)
  1170. if vestID == "" then return end
  1171. local record = JjcGodWarDB.getRecord(vestID)
  1172. if not record then return end
  1173. local combatInfo = record.combatInfo
  1174. if not combatInfo then return end
  1175. local msgRet = Msg.gc.GC_JJCGODWAR_ZHANBAO
  1176. msgRet.win = combatInfo.isWin and 1 or 2
  1177. msgRet.roles[0] = 2
  1178. msgRet.result[0] = 0
  1179. RoleLogic.makeRoleBase(combatInfo.attacker, msgRet.roles[2])
  1180. RoleLogic.makeRoleBase(combatInfo.defender, msgRet.roles[1])
  1181. for pos = 1, CombatDefine.COMBAT_HERO_ALL_CNT do
  1182. local obj = combatInfo.objList and combatInfo.objList[pos]
  1183. if obj then
  1184. msgRet.result[0] = msgRet.result[0] + 1
  1185. local index = msgRet.result[0]
  1186. CombatLogic.fontFinishResultNet(msgRet.result[index], obj)
  1187. end
  1188. end
  1189. msgRet.vestID = vestID
  1190. --Msg.trace(msgRet)
  1191. Msg.send(msgRet,human.fd)
  1192. end
  1193. function jjcGodWarFinishGm(human)
  1194. local state,round,leftTime = getNowGodWarState()
  1195. if state > GODWAR_STATE_WAIT and state < GODWAR_STATE_END then return end
  1196. local db = JjcGodWarDB.getGodWarDB()
  1197. if not db or not db.time then return end
  1198. local msgRet = Msg.gc.GC_JJCGODWAR_FINISH
  1199. msgRet.actTime = db.time
  1200. msgRet.roleBase[0] = 0
  1201. local rank2Uuid = JjcGodWarDB.getGodWarRank2Uuid()
  1202. local uuid2Roles = JjcGodWarDB.getGodWarUuid2Roles()
  1203. if not rank2Uuid or not uuid2Roles then return end
  1204. local conf = JjcGodWarExcel.chenghaoReward
  1205. msgRet.roleBase[0] = 3
  1206. for i=1,3 do
  1207. local uuid = rank2Uuid[i]
  1208. local roleData = uuid2Roles[uuid]
  1209. local rolebase = roleData.rolebase
  1210. if JjcDB.isNpc(roleData) then
  1211. rolebase = roleData
  1212. end
  1213. RoleLogic.makeRoleBase(rolebase, msgRet.roleBase[i])
  1214. msgRet.roleBase[i].chenghao = conf[i].chenghaoID
  1215. end
  1216. --Msg.trace(msgRet)
  1217. Msg.send(msgRet,human.fd)
  1218. end
  1219. --活动结算弹窗
  1220. function GC_JJCGODWAR_FINISH(human)
  1221. if not RoleSystemLogic.isOpen(human, RoleSystemDefine.ROLE_SYS_ID_1302) then
  1222. return
  1223. end
  1224. local state,round,leftTime = getNowGodWarState()
  1225. if state > GODWAR_STATE_WAIT and state < GODWAR_STATE_END then return end
  1226. local db = JjcGodWarDB.getGodWarDB()
  1227. if not db or not db.time then return end
  1228. if human.db.jjcGodWar then
  1229. local finishTipTime = human.db.jjcGodWar.finishTipTime
  1230. if finishTipTime then
  1231. if Util.isSameDayByTimes(finishTipTime,db.time) then return end
  1232. end
  1233. end
  1234. local msgRet = Msg.gc.GC_JJCGODWAR_FINISH
  1235. msgRet.actTime = db.time
  1236. msgRet.roleBase[0] = 0
  1237. local rank2Uuid = JjcGodWarDB.getGodWarRank2Uuid()
  1238. local uuid2Roles = JjcGodWarDB.getGodWarUuid2Roles()
  1239. if not rank2Uuid or #rank2Uuid <= 0 or not uuid2Roles or uuid2Roles == {} then return end
  1240. local conf = JjcGodWarExcel.chenghaoReward
  1241. msgRet.roleBase[0] = 3
  1242. for i=1,3 do
  1243. local uuid = rank2Uuid[i]
  1244. local roleData = uuid2Roles[uuid]
  1245. local rolebase = roleData.rolebase
  1246. if JjcDB.isNpc(roleData) then
  1247. rolebase = roleData
  1248. end
  1249. RoleLogic.makeRoleBase(rolebase, msgRet.roleBase[i])
  1250. msgRet.roleBase[i].chenghao = conf[i].chenghaoID
  1251. end
  1252. human.db.jjcGodWar = human.db.jjcGodWar or {}
  1253. human.db.jjcGodWar.finishTipTime = db.time
  1254. --Msg.trace(msgRet)
  1255. if Config.IS_JJCGODWAR then
  1256. local info=Util.printTable(msgRet)
  1257. Log.write(Log.LOGID_JJC_GODWAR,"GC_JJCGODWAR_FINISH=>"..info)
  1258. end
  1259. Msg.send(msgRet,human.fd)
  1260. end
  1261. function onLogin(human)
  1262. GC_JJCGODWAR_FINISH(human)
  1263. end
  1264. function updateDaily(human)
  1265. if not human.db.jjcGodWar then return end
  1266. human.db.jjcGodWar.mobaiList = nil
  1267. human.db.jjcGodWar.mobaiCnt = nil
  1268. human.db.jjcGodWar.jingCaiTip = nil
  1269. end
  1270. --------------------------------- JjcActLogic回调 -------------------------------
  1271. local function getActNearTime()
  1272. local startTime1,startTime2 = getStartTime()
  1273. if not startTime1 then
  1274. return JjcActLogic.STATE_NOOPEN, 0, 0
  1275. end
  1276. local now = os.time()
  1277. local endTime1 = startTime1 + GODWAR_ACT_TIME
  1278. local endTime2 = startTime2 + GODWAR_ACT_TIME
  1279. if startTime1 <= now and now < endTime1 then
  1280. return JjcActLogic.STATE_START, startTime1, endTime1 - now
  1281. end
  1282. if startTime2 <= now and now < endTime2 then
  1283. return JjcActLogic.STATE_START, startTime2, endTime2 - now
  1284. end
  1285. if now < startTime1 then
  1286. return JjcActLogic.STATE_READY, startTime1, startTime1 - now
  1287. end
  1288. if now < startTime2 then
  1289. return JjcActLogic.STATE_READY, startTime2, startTime2 - now
  1290. end
  1291. startTime1 = startTime1 + 86400 * 7
  1292. return JjcActLogic.STATE_NORMAL, startTime1, startTime1 - now
  1293. end
  1294. -- 活动状态 进行中/准备 剩余时间
  1295. function getActState(human)
  1296. local state, _, leftTime = getActNearTime()
  1297. --print("state, leftTime",state, leftTime)
  1298. return state, leftTime
  1299. end
  1300. function getActDesc(desc)
  1301. local _, startTime = getActNearTime()
  1302. local now = os.time()
  1303. if Util.isSameDay(startTime, now) or startTime == 0 then
  1304. local d = os.date("*t", startTime)
  1305. return Util.format(desc, d.month .. "." .. d.day)
  1306. else
  1307. local startTime1,startTime2 = getStartTime()
  1308. local realTime = 0
  1309. if now < startTime1 then
  1310. realTime = startTime1
  1311. elseif now < startTime2 then
  1312. realTime = startTime2
  1313. elseif now > startTime2 then
  1314. realTime = startTime2
  1315. end
  1316. local d = os.date("*t", realTime)
  1317. return Util.format(desc, d.month .. "月" .. d.day)
  1318. end
  1319. end
  1320. function fontActArgs(args, human)
  1321. args[0] = 1
  1322. args[1] = getMyTopRank(human)
  1323. end
  1324. function getLeftTime(human, YYInfo, funcConfig)
  1325. local state, startTime, leftTime = getActNearTime()
  1326. if state == JjcActLogic.STATE_READY and leftTime <= 75900 then
  1327. return leftTime
  1328. end
  1329. end
  1330. function isOpen(human)
  1331. local state, startTime, leftTime = getActNearTime()
  1332. if state == JjcActLogic.STATE_NOOPEN then return end
  1333. if state == JjcActLogic.STATE_READY and leftTime > 75900 then return end
  1334. return true
  1335. end
  1336. function getYunYingState(human, YYInfo, funcConfig)
  1337. local state,round = getNowGodWarState()
  1338. if state == GODWAR_STATE_WAIT or state == GODWAR_STATE_END then return end
  1339. return YunYingLogic.STATE_STARTING
  1340. end
  1341. function jjcGodWarIcon()
  1342. local msgRet = Msg.gc.GC_JJCGODWAR_ICON
  1343. makeGodWarNowState(msgRet.state)
  1344. for k , v in ipairs(JjcGodWarExcel.godWarBoard[1].reward) do
  1345. Grid.makeItem(msgRet.items[k], v[1], v[2])
  1346. msgRet.items[0] = k
  1347. end
  1348. for _, human in pairs(ObjHuman.onlineUuid) do
  1349. if human.fd then
  1350. Msg.send(msgRet,human.fd)
  1351. end
  1352. end
  1353. end
  1354. function checkCanPos(human)
  1355. local state,round = getNowGodWarState()
  1356. if state == GODWAR_STATE_WAIT or state == GODWAR_STATE_END then return true end
  1357. if round ~= GODWAR_JIEDUAN_ZHUNBEI then
  1358. return Broadcast.sendErr(human,Lang.GODWAR_POS_ERR)
  1359. end
  1360. return true
  1361. end
  1362. function queryGm(human, value)
  1363. print(" queryGm ", value)
  1364. local msgRet = Msg.gc.GC_JJCGODWAR_DANMU_QUERY
  1365. msgRet.cnt = 0
  1366. for i=1,value do
  1367. local net = msgRet.list[i]
  1368. net.uuid = "21312412412"
  1369. net.desc = "芜湖 芜湖 芜湖 芜湖"
  1370. end
  1371. msgRet.list[0] = value
  1372. Msg.send(msgRet,human.fd)
  1373. end
  1374. -- 弹幕
  1375. function danmuQuery(human)
  1376. local list = JjcGodWarDB.getGodWarDanMuList()
  1377. list = list or {}
  1378. local msgRet = Msg.gc.GC_JJCGODWAR_DANMU_QUERY
  1379. for k, v in ipairs(list) do
  1380. local net = msgRet.list[k]
  1381. net.uuid = v.uuid
  1382. net.desc = v.desc
  1383. end
  1384. msgRet.list[0] = #list
  1385. Grid.makeItem(msgRet.need, ItemDefine.ITEM_JINBI_ID, 1000)
  1386. Msg.send(msgRet,human.fd)
  1387. end
  1388. function danmuSpeak(human, desc)
  1389. local state,round = getNowGodWarState()
  1390. -- if state == GODWAR_STATE_WAIT or state >= GODWAR_STATE_END then return end
  1391. if BagLogic.getItemCnt(human, ItemDefine.ITEM_JINBI_ID) < 1000 then
  1392. return Broadcast.sendErr(human, Util.format(Lang.COMMON_NO_ITEM, ItemDefine.getValue(ItemDefine.ITEM_JINBI_ID, "name")))
  1393. end
  1394. BagLogic.delItem(human, ItemDefine.ITEM_JINBI_ID, 1000, "jjc_godwar")
  1395. desc = FilterUtil.filter(desc)
  1396. JjcGodWarDB.updateDanMu(human.db._id, desc)
  1397. local msgRet = Msg.gc.GC_JJCGODWAR_DANMU_SPEAK
  1398. msgRet.uuid = human.db._id
  1399. msgRet.desc = desc
  1400. for _, fakeHuman in pairs(ObjHuman.onlineUuid) do
  1401. Msg.send(msgRet,fakeHuman.fd)
  1402. end
  1403. end