JjcGodWarLogic.lua 50 KB

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