JjcGodWarLogic.lua 51 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191119211931194119511961197119811991200120112021203120412051206120712081209121012111212121312141215121612171218121912201221122212231224122512261227122812291230123112321233123412351236123712381239124012411242124312441245124612471248124912501251125212531254125512561257125812591260126112621263126412651266126712681269127012711272127312741275127612771278127912801281128212831284128512861287128812891290129112921293129412951296129712981299130013011302130313041305130613071308130913101311131213131314131513161317131813191320132113221323132413251326132713281329133013311332133313341335133613371338133913401341134213431344134513461347134813491350135113521353135413551356135713581359136013611362136313641365136613671368136913701371137213731374137513761377137813791380138113821383138413851386138713881389139013911392139313941395139613971398139914001401140214031404140514061407140814091410141114121413141414151416141714181419142014211422142314241425142614271428142914301431143214331434143514361437143814391440144114421443144414451446144714481449145014511452145314541455145614571458145914601461146214631464146514661467146814691470147114721473147414751476147714781479148014811482148314841485148614871488148914901491149214931494149514961497149814991500150115021503150415051506150715081509151015111512151315141515151615171518151915201521152215231524152515261527152815291530153115321533153415351536153715381539154015411542154315441545154615471548154915501551155215531554155515561557155815591560156115621563156415651566156715681569157015711572157315741575157615771578157915801581158215831584158515861587158815891590159115921593159415951596159715981599160016011602160316041605160616071608160916101611161216131614161516161617161816191620162116221623162416251626
  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, elfList
  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, _, elfList = CombatLogic.getHumanObjList(fakeHuman, CombatDefine.COMBAT_TYPE4)
  391. end
  392. end
  393. if not objList then
  394. objList = roleData.objList
  395. helpList = roleData.helpList
  396. elfList = roleData.elfList
  397. rolebase = roleData.rolebase
  398. formation = roleData.formation
  399. end
  400. net.formation = formation
  401. RoleLogic.makeRoleBase(rolebase,net.roleBase,CombatDefine.COMBAT_TYPE4)
  402. net.heroList[0] = CombatDefine.COMBAT_HERO_CNT
  403. for i=1,CombatDefine.COMBAT_HERO_CNT do
  404. local grid = objList and objList[i]
  405. local bagIndex = grid and grid.bagIndex or 0
  406. HeroGrid.makeHeroSimple(net.heroList[i], grid, bagIndex)
  407. end
  408. net.helpList[0] = 0
  409. if helpList and helpList[1] then
  410. local helpPos = CombatDefine.getHelpPos(side,CombatDefine.HELP_TYPE1)
  411. for _, help in pairs(helpList) do
  412. help.pos = helpPos
  413. if CombatLogic.fontCombatHelpNet(net.helpList[net.helpList[0] + 1], help, helpPos) then
  414. net.helpList[0] = net.helpList[0] + 1
  415. end
  416. end
  417. end
  418. --[[
  419. if helpList and helpList[1] then
  420. len = len + 1
  421. local helpPos = CombatDefine.getHelpPos(side,CombatDefine.HELP_TYPE1)
  422. MoshouLogic.setCombatHelp(net.helpList[len],helpList[1],helpPos)
  423. end
  424. net.helpList[0] = len
  425. ]]
  426. end
  427. local function makeGodWarTeamHistory(net,combatInfo,side)
  428. --require("common.Util").printTable(combatInfo)
  429. local rolebase = combatInfo.attacker
  430. local formation = combatInfo.atkFormation or 1
  431. if side == CombatDefine.DEFEND_SIDE then
  432. rolebase = combatInfo.defender
  433. formation = combatInfo.defFormation or 1
  434. end
  435. local objList = combatInfo.objList
  436. local helpList = combatInfo.helpList
  437. net.formation = formation
  438. RoleLogic.makeRoleBase(rolebase,net.roleBase)
  439. net.heroList[0] = 0
  440. for _,pos in ipairs(CombatDefine.SIDE2POS[side]) do
  441. local grid = objList and objList[pos]
  442. net.heroList[0] = net.heroList[0] + 1
  443. local index = net.heroList[0]
  444. local bagIndex = grid and grid.bagIndex or 0
  445. HeroGrid.makeHeroSimple(net.heroList[index], grid, bagIndex)
  446. end
  447. net.helpList[0] = 0
  448. if helpList and helpList[1] then
  449. local helpPos = CombatDefine.getHelpPos(side,CombatDefine.HELP_TYPE1)
  450. for _, help in pairs(helpList) do
  451. help.pos = helpPos
  452. if CombatLogic.fontCombatHelpNet(net.helpList[net.helpList[0] + 1], help, helpPos) then
  453. net.helpList[0] = net.helpList[0] + 1
  454. end
  455. end
  456. end
  457. --[[
  458. local len = 0
  459. if helpList and helpList[1] and helpList[1] > 0 then
  460. len = len + 1
  461. MoshouLogic.setHelp(net.helpList[len],helpList[1])
  462. end
  463. net.helpList[0] = len
  464. ]]
  465. end
  466. -- 我的比赛界面
  467. -- 活动开启倒计时,显示距开始xxxx
  468. -- 活动结束显示,有参与过战斗的显示最后一场战斗,没有资格的显示没资格
  469. -- 活动中,128名以外的显示没资格
  470. function CG_JJCGODWAR_MYMATCH(human)
  471. local msgRet = Msg.gc.GC_JJCGODWAR_MYMATCH
  472. msgRet.teams[0] = 0
  473. makeGodWarNowState(msgRet.state)
  474. msgRet.vestID = ""
  475. msgRet.history = 0
  476. msgRet.isWin = 0
  477. local state,round,leftTime = getNowGodWarState()
  478. --print("state,leftTime",state,leftTime)
  479. if state == GODWAR_STATE_WAIT then --尚未开启
  480. -- Msg.trace(msgRet)
  481. Msg.send(msgRet,human.fd)
  482. return
  483. end
  484. local pairsData,nowCombat,getMatch2FightState = JjcGodWarDB.getGodWarPairsDataByUuid(human.db._id)
  485. if pairsData then
  486. local atkUuid = pairsData.atkUuid
  487. local defUuid = pairsData.defUuid
  488. local winUuid = pairsData.winUuid
  489. msgRet.teams[0] = 2
  490. if nowCombat then
  491. local atkRoleData = JjcGodWarDB.getGodWarDataByUuid(atkUuid)
  492. local defRoleData = JjcGodWarDB.getGodWarDataByUuid(defUuid)
  493. makeGodWarTeam(msgRet.teams[1],atkRoleData,CombatDefine.ATTACK_SIDE)
  494. makeGodWarTeam(msgRet.teams[2],defRoleData,CombatDefine.DEFEND_SIDE)
  495. if round == GODWAR_JIEDUAN_COMBAT then
  496. msgRet.vestID = pairsData.vestID or ""
  497. end
  498. else
  499. local record = JjcGodWarDB.getRecord(pairsData.vestID)
  500. if not record then return end
  501. local combatInfo = record.combatInfo
  502. makeGodWarTeamHistory(msgRet.teams[1],combatInfo,CombatDefine.ATTACK_SIDE)
  503. makeGodWarTeamHistory(msgRet.teams[2],combatInfo,CombatDefine.DEFEND_SIDE)
  504. msgRet.history = getMatch2FightState
  505. msgRet.vestID = pairsData.vestID or ""
  506. if winUuid and winUuid == atkUuid then
  507. msgRet.isWin = 1
  508. end
  509. end
  510. end
  511. --Util.printTable(msgRet)
  512. -- Msg.trace(msgRet)
  513. Msg.send(msgRet,human.fd)
  514. end
  515. --竞猜界面
  516. function CG_JJCGODWAR_JINGCAI(human)
  517. if not RoleSystemLogic.isOpen(human, RoleSystemDefine.ROLE_SYS_ID_1302, true) then
  518. return
  519. end
  520. local msgRet = Msg.gc.GC_JJCGODWAR_JINGCAI
  521. local state,round,leftTime = getNowGodWarState()
  522. local jingCaiPairs = nil
  523. local needState = nil
  524. local jingcaiBi = 0
  525. if state == GODWAR_STATE_END or state == GODWAR_STATE_WAIT then
  526. jingCaiPairs = JjcGodWarDB.getGodWarJingCaiPairs(GODWAR_STATE_PAIWEI1)
  527. needState = GODWAR_STATE_PAIWEI1
  528. else
  529. jingCaiPairs = JjcGodWarDB.getGodWarJingCaiPairs(state)
  530. needState = state
  531. jingcaiBi = JjcGodWarDB.getJingCaiBiCnt(human,state)
  532. end
  533. if not jingCaiPairs and state < GODWAR_STATE_END and state > GODWAR_STATE_WAIT then
  534. --生成竞猜队伍 客户端自动切换的时候 服务端还未生成竞猜队伍处理
  535. JjcGodWarDB.godWarJingCaiPairs()
  536. jingCaiPairs = JjcGodWarDB.getGodWarJingCaiPairs(state)
  537. needState = state
  538. jingcaiBi = JjcGodWarDB.getJingCaiBiCnt(human,state)
  539. end
  540. local jingCaiExcel = JjcGodWarExcel.jingCai[1]
  541. local maxYa = jingCaiExcel.jingCaiYaOneMax
  542. msgRet.maxYa = maxYa
  543. msgRet.jingcaiBi = 0
  544. msgRet.yaUuid = ""
  545. msgRet.vestID = ""
  546. msgRet.jingcaiTeam[0] = 0
  547. msgRet.isWin = 0
  548. makeGodWarNowState(msgRet.state)
  549. if jingCaiPairs then
  550. local atkUuid = jingCaiPairs.atkUuid
  551. local defUuid = jingCaiPairs.defUuid
  552. local vestID = jingCaiPairs.vestID or ""
  553. local winUuid = jingCaiPairs.winUuid
  554. msgRet.jingcaiTeam[0] = 2
  555. if needState == state then
  556. local atkRoleData = JjcGodWarDB.getGodWarDataByUuid(atkUuid)
  557. local defRoleData = JjcGodWarDB.getGodWarDataByUuid(defUuid)
  558. makeGodWarTeam(msgRet.jingcaiTeam[1].team,atkRoleData,CombatDefine.ATTACK_SIDE)
  559. makeGodWarTeam(msgRet.jingcaiTeam[2].team,defRoleData,CombatDefine.DEFEND_SIDE)
  560. if round ~= GODWAR_JIEDUAN_COMBAT then
  561. vestID = ""
  562. end
  563. else
  564. local record = JjcGodWarDB.getRecord(vestID)
  565. if not record then return end
  566. local combatInfo = record.combatInfo
  567. makeGodWarTeamHistory(msgRet.jingcaiTeam[1].team,combatInfo,CombatDefine.ATTACK_SIDE)
  568. makeGodWarTeamHistory(msgRet.jingcaiTeam[2].team,combatInfo,CombatDefine.DEFEND_SIDE)
  569. end
  570. local atkPei,defPei = JjcGodWarDB.getJingcaiPei(needState)
  571. msgRet.jingcaiTeam[1].pei = atkPei * 100
  572. msgRet.jingcaiTeam[2].pei = defPei * 100
  573. msgRet.jingcaiBi = jingcaiBi
  574. msgRet.vestID = vestID
  575. local yaData = JjcGodWarDB.getJingCaiYaZhu(human.db._id)
  576. msgRet.yaUuid = yaData and yaData[needState] and yaData[needState].yaUuid or ""
  577. if winUuid and atkUuid == atkUuid then
  578. msgRet.isWin = 1
  579. end
  580. end
  581. --Msg.trace(msgRet)
  582. Msg.send(msgRet,human.fd)
  583. end
  584. --竞猜提醒
  585. function GC_JJCGODWAR_JINGCAI_TIP(human)
  586. local msgRet = Msg.gc.GC_JJCGODWAR_JINGCAI_TIP
  587. local jingCaiExcel = JjcGodWarExcel.jingCai[1]
  588. msgRet.items[0] = #jingCaiExcel.jingCaiShowReward
  589. for i=1,#jingCaiExcel.jingCaiShowReward do
  590. local itemID = jingCaiExcel.jingCaiShowReward[i][1]
  591. local itemCnt = jingCaiExcel.jingCaiShowReward[i][2]
  592. Grid.makeItem(msgRet.items[i],itemID,itemCnt)
  593. end
  594. --Msg.trace(msgRet)
  595. Msg.send(msgRet,human.fd)
  596. end
  597. --竞猜信息刷新
  598. function CG_JJCGODWAR_JINGCAI_CHECK(human)
  599. local state,round,leftTime = getNowGodWarState()
  600. if state == GODWAR_STATE_WAIT or state == GODWAR_STATE_END then return end
  601. if round ~= GODWAR_JIEDUAN_JINGCAI then
  602. return
  603. end
  604. local msgRet = Msg.gc.GC_JJCGODWAR_JINGCAI_CHECK
  605. local atkPei,defPei = JjcGodWarDB.getJingcaiPei(state)
  606. msgRet.peiLeft = atkPei * 100
  607. msgRet.peiRight = defPei * 100
  608. Msg.send(msgRet,human.fd)
  609. end
  610. --押注
  611. function CG_JJCGODWAR_JINGCAI_YA(human,targetUuid,yaZhuCnt)
  612. if yaZhuCnt <= 0 then return end
  613. local state,round,leftTime = getNowGodWarState()
  614. if round ~= GODWAR_JIEDUAN_JINGCAI
  615. or leftTime <= 0 then
  616. return Broadcast.sendErr(human,Lang.GODWAR_JINGCAI_ERR)
  617. end
  618. local yaData = JjcGodWarDB.getYaZhuDataByUuid(human.db._id)
  619. if not yaData then return end
  620. if yaData.jingCai and yaData.jingCai[state] then
  621. Broadcast.sendErr(human,Lang.GODWAR_JINGCAI_HAD)
  622. return
  623. end
  624. local jingCaiPairs = JjcGodWarDB.getGodWarJingCaiPairs(state)
  625. local atkUuid = jingCaiPairs.atkUuid
  626. local defUuid = jingCaiPairs.defUuid
  627. if targetUuid ~= atkUuid
  628. and targetUuid ~= defUuid then
  629. return
  630. end
  631. local jingCaiExcel = JjcGodWarExcel.jingCai[1]
  632. local maxYa = jingCaiExcel.jingCaiYaOneMax
  633. if yaZhuCnt > maxYa then
  634. Broadcast.sendErr(human,Lang.GODWAR_JINGCAI_OK)
  635. return
  636. end
  637. local now = JjcGodWarDB.getJingCaiBiCnt(human,state)
  638. if now < yaZhuCnt then return end
  639. yaData.jingCaiBi = now - yaZhuCnt
  640. JjcGodWarDB.updateGodWarYaZhuByUuid(yaData,human.db._id)
  641. JjcGodWarDB.updateYaZhuByUuid(human.db._id,targetUuid,yaZhuCnt)
  642. JjcGodWarDB.jingCaiYaUpdate(targetUuid)
  643. Broadcast.sendErr(human,Lang.GODWAR_JINGCAI_OK)
  644. CG_JJCGODWAR_JINGCAI(human)
  645. end
  646. local function calYaWinCnt(yaZhuCnt,yaUuid,winUuid)
  647. local jingCaiExcel = JjcGodWarExcel.jingCai[1]
  648. local gap = jingCaiExcel.jingCaiRealPei
  649. if yaUuid == winUuid then
  650. return math.floor(yaZhuCnt * gap)
  651. else
  652. return 0
  653. end
  654. end
  655. --我的竞猜查询(新一期活动开始清掉)
  656. function CG_JJCGODWAR_JINGCAI_MY(human)
  657. local warState,warRound,leftTime = getNowGodWarState()
  658. local msgRet = Msg.gc.GC_JJCGODWAR_JINGCAI_MY
  659. msgRet.jingcaiRecord[0] = 0
  660. local yaData = JjcGodWarDB.getJingCaiYaZhu(human.db._id)
  661. if yaData then
  662. for round,data in pairs(yaData) do
  663. local jingCaiData = JjcGodWarDB.getGodWarJingCaiPairs(round)
  664. if jingCaiData then
  665. msgRet.jingcaiRecord[0] = msgRet.jingcaiRecord[0] + 1
  666. local index = msgRet.jingcaiRecord[0]
  667. local winUuid = jingCaiData.winUuid or ""
  668. local atkUuid = jingCaiData.atkUuid
  669. local defUuid = jingCaiData.defUuid
  670. if warState > GODWAR_STATE_WAIT and warState <= round then
  671. winUuid = ""
  672. end
  673. local yaUuid = data.yaUuid
  674. local yaZhuCnt = data.yaZhuCnt
  675. local atkRoleData = JjcGodWarDB.getGodWarDataByUuid(atkUuid)
  676. local defRoleData = JjcGodWarDB.getGodWarDataByUuid(defUuid)
  677. msgRet.jingcaiRecord[index].roleBase[0] = 2
  678. local atkRolebase = atkRoleData.rolebase
  679. local defRolebase = defRoleData.rolebase
  680. if JjcDB.isNpc(atkRoleData) then
  681. atkRolebase = atkRoleData
  682. end
  683. if JjcDB.isNpc(defRoleData) then
  684. defRolebase = defRoleData
  685. end
  686. RoleLogic.makeRoleBase(atkRolebase,msgRet.jingcaiRecord[index].roleBase[1])
  687. RoleLogic.makeRoleBase(defRolebase,msgRet.jingcaiRecord[index].roleBase[2])
  688. msgRet.jingcaiRecord[index].winUuid = winUuid
  689. msgRet.jingcaiRecord[index].round = round
  690. local state = 1
  691. if winUuid ~= "" then
  692. state = 0
  693. end
  694. msgRet.jingcaiRecord[index].state = state
  695. msgRet.jingcaiRecord[index].yaCnt = yaZhuCnt
  696. local yaWinCnt = calYaWinCnt(yaZhuCnt,yaUuid,winUuid)
  697. msgRet.jingcaiRecord[index].yaWinCnt = yaWinCnt
  698. local yaLosCnt = 0
  699. if winUuid ~= "" and yaWinCnt == 0 then
  700. yaLosCnt = yaZhuCnt
  701. end
  702. msgRet.jingcaiRecord[index].yaLosCnt = yaLosCnt
  703. msgRet.jingcaiRecord[index].yaUuid = yaUuid
  704. msgRet.jingcaiRecord[index].vestID = jingCaiData.vestID or ""
  705. -- Util.printTable(jingCaiData)
  706. -- print(" jingCaiData.winUuid ", jingCaiData.winUuid ,msgRet.jingcaiRecord[index].vestID , msgRet.jingcaiRecord[index].state )
  707. -- print(" yaLosCnt ", yaLosCnt, yaWinCnt, msgRet.jingcaiRecord[index].winUuid , warState ,round )
  708. end
  709. end
  710. end
  711. -- Msg.trace(msgRet)
  712. Msg.send(msgRet,human.fd)
  713. end
  714. --竞猜成功回调
  715. function GC_JJCGODWAR_JINGCAI_WIN(state,godWarDB)
  716. if state < GODWAR_STATE_WAIT then return end
  717. local yaZhuDB = godWarDB.uuid2Yazhu
  718. local jingCaiCalcState = godWarDB.jingCaiCalcState or 0
  719. if state == jingCaiCalcState then return end
  720. if not yaZhuDB then return end
  721. local jingCaiItem = JjcGodWarExcel.jingCai[1].jingCaiItem
  722. local up = nil
  723. godWarDB.jingCaiCalcState = state
  724. local conf = JjcGodWarExcel.jingCai[1]
  725. for uuid,data in pairs(yaZhuDB) do
  726. if data.jingCai then
  727. local jingCai = data.jingCai[state]
  728. if jingCai then
  729. local jingCaiData = JjcGodWarDB.getGodWarJingCaiPairs(state)
  730. local winUuid = jingCaiData.winUuid
  731. local yaUuid = jingCai.yaUuid
  732. if yaUuid and winUuid then
  733. if yaUuid == winUuid then
  734. local winCnt = calYaWinCnt(jingCai.yaZhuCnt,jingCai.yaUuid,winUuid)
  735. up = true
  736. yaZhuDB[uuid].jingCaiBi = yaZhuDB[uuid].jingCaiBi + winCnt
  737. local sendHuman = ObjHuman.onlineUuid[uuid]
  738. if sendHuman then
  739. local msgRet = Msg.gc.GC_JJCGODWAR_JINGCAI_WIN
  740. msgRet.round = state
  741. Grid.makeItem(msgRet.items,jingCaiItem,winCnt)
  742. msgRet.jingcaiBi = yaZhuDB[uuid].jingCaiBi
  743. -- Msg.trace(msgRet)
  744. Msg.send(msgRet,sendHuman.fd)
  745. end
  746. end
  747. yaZhuDB[uuid].jingCaiBi = yaZhuDB[uuid].jingCaiBi + conf.jingCaiSongBi
  748. end
  749. end
  750. end
  751. end
  752. if state ~= GODWAR_STATE_PAIWEI1 and up then
  753. JjcGodWarDB.updateGodWarDB(godWarDB)
  754. end
  755. end
  756. --奖励展示
  757. local function makeGodWarRankReward(net,data)
  758. net.minRank = data.rankMin
  759. net.maxRank = data.rankMax
  760. net.rewards[0] = #data.reward
  761. for i=1,#data.reward do
  762. Grid.makeItem(net.rewards[i],data.reward[i][1],data.reward[i][2])
  763. end
  764. end
  765. function CG_JJCGODWAR_RANK_REWARD(human)
  766. local msgRet = Msg.gc.GC_JJCGODWAR_RANK_REWARD
  767. local config = JjcGodWarExcel.godWarBoard
  768. msgRet.godWarReward[0] = #config
  769. for index,data in ipairs(config) do
  770. makeGodWarRankReward(msgRet.godWarReward[index],data)
  771. end
  772. -- Msg.trace(msgRet)
  773. Msg.send(msgRet,human.fd)
  774. end
  775. --32强界面
  776. function CG_JJCGODWAR_PAIWEI_QUERY(human,checkState,fenzuID)
  777. local msgRet = Msg.gc.GC_JJCGODWAR_PAIWEI_QUERY
  778. makeGodWarNowState(msgRet.state)
  779. local godState,round,leftTime = getNowGodWarState()
  780. if checkState == GODWAR_STATE_PAIWEI32 and godState > GODWAR_STATE_PAIWEI32 then
  781. checkState = godState
  782. checkState = checkState > GODWAR_STATE_PAIWEI8 and GODWAR_STATE_PAIWEI8 or godState
  783. elseif checkState == GODWAR_STATE_PAIWEI4 and godState > GODWAR_STATE_PAIWEI4 then
  784. checkState = GODWAR_STATE_PAIWEI1
  785. elseif checkState == GODWAR_STATE_PAIWEI32 and godState == GODWAR_STATE_WAIT then -- 赛季未开启则查询上赛季的战绩
  786. checkState = GODWAR_STATE_PAIWEI8
  787. elseif checkState == GODWAR_STATE_PAIWEI4 and godState == GODWAR_STATE_WAIT then
  788. checkState = GODWAR_STATE_PAIWEI1
  789. end
  790. msgRet.group[0] = 0
  791. local group = JjcGodWarDB.getNowPaiWeiFenzu(checkState,fenzuID)
  792. --require("common.Util").printTable(group)
  793. if group then
  794. -- local jingcaiState,round,leftTime = getNowGodWarState()
  795. local jingcaiState = checkState
  796. round = GODWAR_JIEDUAN_JINGCAI_TIME
  797. local jingCaiData = JjcGodWarDB.getGodWarJingCaiData(jingcaiState)
  798. for state,data in pairs(group) do
  799. msgRet.group[0] = msgRet.group[0] + 1
  800. local index = msgRet.group[0]
  801. msgRet.group[index].checkState = state
  802. msgRet.group[index].fenzuID = fenzuID
  803. msgRet.group[index].roles[0] = #data
  804. for i=1,#data do
  805. local rolesNet = msgRet.group[index].roles[i]
  806. rolesNet.index = i
  807. rolesNet.roleBase[0] = 2
  808. local atkUuid = data[i].atkUuid
  809. local defUuid = data[i].defUuid
  810. local atkRoleData = JjcGodWarDB.getGodWarDataByUuid(atkUuid)
  811. local defRoleData = JjcGodWarDB.getGodWarDataByUuid(defUuid)
  812. local atkRolebase = atkRoleData.rolebase
  813. local defRolebase = defRoleData.rolebase
  814. if JjcDB.isNpc(atkRoleData) then
  815. atkRolebase = atkRoleData
  816. end
  817. if JjcDB.isNpc(defRoleData) then
  818. defRolebase = defRoleData
  819. end
  820. RoleLogic.makeRoleBase(atkRolebase,rolesNet.roleBase[1])
  821. RoleLogic.makeRoleBase(defRolebase,rolesNet.roleBase[2])
  822. rolesNet.vestID = data[i].vestID or ""
  823. rolesNet.winUuid = ""
  824. -- 32强赛中 比赛到下一回合 再显示出胜者给客户端
  825. if godState == GODWAR_STATE_WAIT or godState > state then
  826. rolesNet.winUuid = data[i].winUuid or ""
  827. end
  828. end
  829. local jingcaiIndex = 0
  830. if jingCaiData and round == GODWAR_JIEDUAN_JINGCAI_TIME
  831. and jingcaiState == state
  832. and jingCaiData.fenzuID == fenzuID then
  833. local jingCaiPairsIndex = jingCaiData.pairsIndex
  834. jingcaiIndex = jingCaiPairsIndex
  835. end
  836. msgRet.group[index].jingcaiIndex = jingcaiIndex
  837. end
  838. end
  839. --Msg.trace(msgRet)
  840. if Config.IS_JJCGODWAR then
  841. local info=Util.printTable(msgRet)
  842. Log.write(Log.LOGID_JJC_GODWAR,"GC_JJCGODWAR_PAIWEI_QUERY=>"..info)
  843. end
  844. Msg.send(msgRet,human.fd)
  845. end
  846. --获取竞猜猜对次数
  847. function getYaCorrectCnt(yazhuData)
  848. if not yazhuData or not yazhuData.jingCai then return 0 end
  849. local correctCnt = 0
  850. for state,data in pairs(yazhuData.jingCai) do
  851. local yaUuid = data.yaUuid
  852. local jingCaiData = JjcGodWarDB.getGodWarJingCaiPairs(state)
  853. if jingCaiData then
  854. local winUuid = jingCaiData.winUuid or ""
  855. if yaUuid == winUuid then
  856. correctCnt = correctCnt + 1
  857. end
  858. end
  859. end
  860. return correctCnt
  861. end
  862. local function makeTopRank(human,rank,isSave)
  863. human.db.jjcGodWar = human.db.jjcGodWar or {}
  864. if not human.db.jjcGodWar.topRank then
  865. human.db.jjcGodWar.topRank = rank
  866. else
  867. if human.db.jjcGodWar.topRank > rank then
  868. human.db.jjcGodWar.topRank = rank
  869. end
  870. end
  871. if isSave then
  872. ObjHuman.save(human)
  873. end
  874. end
  875. --发送排名奖励 竞技积分奖励
  876. function sendFinalReward(godWarDB)
  877. local mailConfig = MailExcel.mail[MailDefine.MAIL_ID_ZSZZ_SEASON]
  878. local title = mailConfig.title
  879. local senderName = mailConfig.senderName
  880. for _, config in ipairs(JjcGodWarExcel.godWarBoard) do
  881. for rank = config.rankMin, config.rankMax do
  882. local roleData = JjcGodWarDB.getGodWarDataByRank(rank)
  883. if roleData and not JjcDB.isNpc(roleData) then
  884. local content = Util.format(mailConfig.content, rank)
  885. MailManager.add(MailManager.SYSTEM, roleData.uuid, title, content, config.reward, senderName)
  886. --历练系统回调
  887. HeroGrowUp.onCallbackByUuid(roleData.uuid, HeroGrowUp.TASKTYPE14, rank)
  888. LiLianLogic.onCallbackByUuid(roleData.uuid,LiLianLogic.LILIAN_OUTID2,1,rank)
  889. end
  890. end
  891. end
  892. local defConf = JjcGodWarExcel.define[1]
  893. local mailConfig = MailExcel.mail[MailDefine.MAIL_ID_ZSZZ_GUESS]
  894. local title = mailConfig.title
  895. local senderName = mailConfig.senderName
  896. local uuid2Yazhu = godWarDB.uuid2Yazhu
  897. if not uuid2Yazhu then return end
  898. for uuid,data in pairs(uuid2Yazhu) do
  899. local cnt = data.jingCaiBi or 0
  900. if cnt > 0 then
  901. if cnt > GODWAR_END_JINGCAI then
  902. cnt = GODWAR_END_JINGCAI
  903. end
  904. uuid2Yazhu[uuid].jingCaiBi = 0
  905. local reward = {}
  906. reward[1] = {defConf.jingcaibiEnd,cnt}
  907. MailManager.add(MailManager.SYSTEM, uuid, title, mailConfig.content, reward, senderName)
  908. --历练系统回调
  909. local correctCnt = getYaCorrectCnt(data) --本次活动竞猜正确次数
  910. LiLianLogic.onCallbackByUuid(uuid,LiLianLogic.LILIAN_OUTID25,correctCnt)
  911. end
  912. end
  913. local rank2Uuid = JjcGodWarDB.getGodWarRank2Uuid()
  914. for rank,uuid in pairs(rank2Uuid) do
  915. local target = ObjHuman.onlineUuid[uuid]
  916. if target and target.fd then
  917. makeTopRank(target,rank)
  918. else
  919. local fakeDB = RoleDBLogic.getDb(uuid)
  920. if fakeDB then
  921. local fakeHuman = {}
  922. fakeHuman.db = fakeDB
  923. makeTopRank(fakeHuman,rank,true)
  924. end
  925. end
  926. end
  927. for _, human in pairs(ObjHuman.onlineUuid) do
  928. if human.fd then
  929. GC_JJCGODWAR_FINISH(human)
  930. end
  931. end
  932. end
  933. local function godwarChengHao(godWarDB)
  934. local lastTopThree = godWarDB.lastTopThree
  935. if lastTopThree then
  936. for rank,roleData in pairs(lastTopThree) do
  937. if roleData.chenghao then
  938. RoleHeadLogic.unActive(roleData.uuid, RoleHeadLogic.HEAD_TYPE_4, roleData.chenghao)
  939. end
  940. end
  941. end
  942. local conf = JjcGodWarExcel.chenghaoReward
  943. for rank=1,3 do
  944. local chenghao = conf[rank].chenghaoID
  945. local uuid = godWarDB.rank2Uuid[rank]
  946. local roleData = godWarDB.uuid2Roles[uuid]
  947. if roleData and not JjcDB.isNpc(roleData) then
  948. godWarDB.uuid2Roles[uuid].chenghao = chenghao --仅作记录,防止称号id配置更换
  949. -- 给予称号
  950. local target = ObjHuman.onlineUuid[uuid]
  951. if target and target.fd then
  952. RoleHeadLogic.active(target, RoleHeadLogic.HEAD_TYPE_4, chenghao)
  953. else
  954. local fakeDB = RoleDBLogic.getDb(uuid)
  955. if fakeDB then
  956. local fakeHuman = {}
  957. fakeHuman.db = fakeDB
  958. RoleHeadLogic.active(fakeHuman, RoleHeadLogic.HEAD_TYPE_4, chenghao)
  959. ObjHuman.save(fakeHuman)
  960. end
  961. end
  962. end
  963. end
  964. end
  965. function CG_JJCGODWAR_NOWSTATE(human)
  966. local msgRet = Msg.gc.GC_JJCGODWAR_NOWSTATE
  967. makeGodWarNowState(msgRet.state)
  968. --Msg.trace(msgRet)
  969. Msg.send(msgRet,human.fd)
  970. end
  971. JINGCAI_SHOW_TIP_HAD = JINGCAI_SHOW_TIP_HAD or nil
  972. function jingCaiShowTips(state)
  973. local need = nil
  974. for uuid, human in pairs(ObjHuman.onlineUuid) do
  975. if human.fd and RoleSystemLogic.isOpen(human, RoleSystemDefine.ROLE_SYS_ID_1302) then
  976. if not JINGCAI_SHOW_TIP_HAD or not JINGCAI_SHOW_TIP_HAD[uuid] then
  977. need = need or {}
  978. local index = #need
  979. need[index+1] = uuid
  980. if index == 10 then
  981. break
  982. end
  983. end
  984. end
  985. end
  986. if need then
  987. for i=1,#need do
  988. local uuid = need[i]
  989. JINGCAI_SHOW_TIP_HAD = JINGCAI_SHOW_TIP_HAD or {}
  990. JINGCAI_SHOW_TIP_HAD[uuid] = 1
  991. local human = ObjHuman.onlineUuid[uuid]
  992. local jjcGodWarData = human.db.jjcGodWar
  993. local jingCaiTip = jjcGodWarData and jjcGodWarData.jingCaiTip or 0
  994. if not jjcGodWarData or jingCaiTip == 0 then
  995. human.db.jjcGodWar = human.db.jjcGodWar or {}
  996. human.db.jjcGodWar.jingCaiTip = state
  997. GC_JJCGODWAR_JINGCAI_TIP(human)
  998. end
  999. end
  1000. end
  1001. end
  1002. local function pointCheck(state)
  1003. local godWarDB = JjcGodWarDB.getGodWarDB()
  1004. local uuid2Roles = godWarDB.uuid2Roles
  1005. local pointCheckState = godWarDB.pointCheckState
  1006. if pointCheckState and pointCheckState == state then return end
  1007. godWarDB.pointCheckState = state
  1008. for uuid in pairs(uuid2Roles) do
  1009. local combatResultList = JjcGodWarDB.getCombatResultListByUuid(uuid)
  1010. local point = combatResultList and combatResultList[state] or 0
  1011. if point ~= 0 then
  1012. uuid2Roles[uuid].point = uuid2Roles[uuid].point + point
  1013. end
  1014. end
  1015. JjcGodWarDB.updateGodWarDB(godWarDB)
  1016. end
  1017. --活动时间控制
  1018. --每一轮战斗需要1场竞猜队伍
  1019. --每一轮战斗结束后需要刷新排行榜
  1020. --每一轮战斗结束后需要结算竞猜结果,给奖励并弹提示
  1021. --每一轮准备阶段结束需要保存当前的队伍信息
  1022. --战斗阶段最后3s,已无战斗计算队伍,选拔赛6轮内按积分排位,排位赛按小组输赢晋级或止步,仅本轮止步者按原始积分排位
  1023. --战斗阶段最后3s,弹竞猜结果提示
  1024. function onTimer()
  1025. local godWarDB = JjcGodWarDB.getGodWarDB()
  1026. local state,round,leftTime = getNowGodWarState()
  1027. --print("state,round,leftTime",state,round,leftTime)
  1028. if not state then return end
  1029. if state == GODWAR_STATE_WAIT or state == GODWAR_STATE_END then
  1030. if godWarDB and godWarDB.time and godWarDB.time < os.time() and not godWarDB.isSendReward then
  1031. --结算决赛竞猜
  1032. GC_JJCGODWAR_JINGCAI_WIN(GODWAR_STATE_PAIWEI1,godWarDB)
  1033. --发送活动结束奖励
  1034. godWarDB.isSendReward = true
  1035. sendFinalReward(godWarDB)
  1036. --称号更替
  1037. godwarChengHao(godWarDB)
  1038. JjcGodWarDB.updateGodWarDB(godWarDB)
  1039. -- jjcGodWarIcon()
  1040. jingCaiShowTips(state)
  1041. end
  1042. return
  1043. end
  1044. --活动开始初始化
  1045. if not godWarDB.time or not Util.isSameDay(godWarDB.time) then
  1046. --print("initGodWar")
  1047. godWarDB = JjcGodWarDB.initGodWar()
  1048. -- jjcGodWarIcon()
  1049. --在线玩家竞猜提醒
  1050. jingCaiShowTips(state)
  1051. end
  1052. --容错操作 保证每个阶段必然有分组队伍
  1053. JjcGodWarDB.checkMatch(state)
  1054. --生成竞猜队伍
  1055. JjcGodWarDB.godWarJingCaiPairs()
  1056. --准备阶段结算上一阶段竞猜
  1057. if round == GODWAR_JIEDUAN_ZHUNBEI then
  1058. GC_JJCGODWAR_JINGCAI_WIN(state-1,godWarDB) --竞猜成功提示
  1059. end
  1060. --保存队伍信息
  1061. if round == GODWAR_JIEDUAN_JINGCAI then
  1062. --在线玩家竞猜提醒
  1063. jingCaiShowTips(state)
  1064. --保存队伍信息
  1065. JjcGodWarDB.saveCombatData(godWarDB,state)
  1066. --开始战斗
  1067. JjcGodWarCombat.timerCombat()
  1068. end
  1069. if round == GODWAR_JIEDUAN_COMBAT then
  1070. if JINGCAI_SHOW_TIP_HAD then
  1071. JINGCAI_SHOW_TIP_HAD = nil
  1072. end
  1073. --开始战斗 防止在 竞猜阶段 没有打完
  1074. JjcGodWarCombat.timerCombat()
  1075. if leftTime < 3 then
  1076. if state <= GODWAR_STATE_XUANBA6 then
  1077. --结算本场战斗的积分
  1078. pointCheck(state)
  1079. --选拔赛按积分排位
  1080. JjcGodWarDB.sortJifenBoard()
  1081. end
  1082. if state >= GODWAR_STATE_XUANBA6 then
  1083. if state >= GODWAR_STATE_PAIWEI32 then
  1084. --保存战报
  1085. if state >= GODWAR_STATE_PAIWEI16 then
  1086. JjcGodWarDB.makeZhanBao(state)
  1087. end
  1088. --print("sortPaiWeiBoard")
  1089. --排位赛胜者按积分排位,输者淘汰并按积分排位
  1090. JjcGodWarDB.sortPaiWeiBoard(state)
  1091. end
  1092. --print("paiweiFenzu")
  1093. --排位赛完成对手匹配
  1094. JjcGodWarDB.paiweiFenzu(state + 1)
  1095. end
  1096. end
  1097. end
  1098. end
  1099. --播放录像
  1100. function CG_JJCGODWAR_REPLAY(human,vestID)
  1101. local data = JjcGodWarDB.getRecord(vestID)
  1102. if not data then return end
  1103. CombatLogic.repeatCombat(human,data.combatInfo)
  1104. end
  1105. --查看两队伍布阵信息
  1106. function CG_JJCGODWAR_TEAM(human,vestID)
  1107. local record = JjcGodWarDB.getRecord(vestID)
  1108. if not record then return end
  1109. local msgRet = Msg.gc.GC_JJCGODWAR_TEAM
  1110. msgRet.teams[0] = 2
  1111. local combatInfo = record.combatInfo
  1112. makeGodWarTeamHistory(msgRet.teams[1],combatInfo,CombatDefine.ATTACK_SIDE)
  1113. makeGodWarTeamHistory(msgRet.teams[2],combatInfo,CombatDefine.DEFEND_SIDE)
  1114. -- Msg.trace(msgRet)
  1115. Msg.send(msgRet,human.fd)
  1116. end
  1117. --记录
  1118. function CG_JJCGODWAR_RECORD(human)
  1119. local checkState,round,leftTime = getNowGodWarState()
  1120. local msgRet = Msg.gc.GC_JJCGODWAR_RECORD
  1121. msgRet.record[0] = 0
  1122. local allMatch = JjcGodWarDB.getAllMatchByUuid(human.db._id)
  1123. if allMatch then
  1124. local combatResultList = JjcGodWarDB.getCombatResultListByUuid(human.db._id)
  1125. for i=1,#allMatch do
  1126. local matchData = allMatch[i]
  1127. local atkUuid = matchData.atkUuid
  1128. local defUuid = matchData.defUuid
  1129. local state = matchData.state
  1130. local winUuid = matchData.winUuid
  1131. local vestID = matchData.vestID
  1132. local point = combatResultList and combatResultList[state] or 0
  1133. local canSend = true
  1134. if winUuid == "" then
  1135. canSend = nil
  1136. end
  1137. if state == checkState and round ~= GODWAR_JIEDUAN_COMBAT then
  1138. canSend = nil
  1139. end
  1140. if state == checkState and round == GODWAR_JIEDUAN_COMBAT and leftTime > 1 then
  1141. canSend = nil
  1142. end
  1143. if canSend then
  1144. msgRet.record[0] = msgRet.record[0] + 1
  1145. local index = msgRet.record[0]
  1146. msgRet.record[index].roles[0] = 2
  1147. local atkRoleData = JjcGodWarDB.getGodWarDataByUuid(atkUuid)
  1148. local defRoleData = JjcGodWarDB.getGodWarDataByUuid(defUuid)
  1149. local atkRolebase = atkRoleData.rolebase
  1150. local defRolebase = defRoleData.rolebase
  1151. if JjcDB.isNpc(atkRoleData) then
  1152. atkRolebase = atkRoleData
  1153. end
  1154. if JjcDB.isNpc(defRoleData) then
  1155. defRolebase = defRoleData
  1156. end
  1157. RoleLogic.makeRoleBase(atkRolebase,msgRet.record[index].roles[1])
  1158. RoleLogic.makeRoleBase(defRolebase,msgRet.record[index].roles[2])
  1159. msgRet.record[index].winUuid = winUuid
  1160. msgRet.record[index].vestID = vestID
  1161. msgRet.record[index].state = state
  1162. msgRet.record[index].point = point
  1163. end
  1164. end
  1165. end
  1166. --Msg.trace(msgRet)
  1167. Msg.send(msgRet,human.fd)
  1168. end
  1169. --战报
  1170. function CG_JJCGODWAR_ZHANBAO(human,vestID)
  1171. if vestID == "" then return end
  1172. local record = JjcGodWarDB.getRecord(vestID)
  1173. if not record then return end
  1174. local combatInfo = record.combatInfo
  1175. if not combatInfo then return end
  1176. local msgRet = Msg.gc.GC_JJCGODWAR_ZHANBAO
  1177. msgRet.win = combatInfo.isWin and 1 or 2
  1178. msgRet.roles[0] = 2
  1179. msgRet.result[0] = 0
  1180. RoleLogic.makeRoleBase(combatInfo.attacker, msgRet.roles[2])
  1181. RoleLogic.makeRoleBase(combatInfo.defender, msgRet.roles[1])
  1182. for pos = 1, CombatDefine.COMBAT_HERO_ALL_CNT do
  1183. local obj = combatInfo.objList and combatInfo.objList[pos]
  1184. if obj then
  1185. msgRet.result[0] = msgRet.result[0] + 1
  1186. local index = msgRet.result[0]
  1187. CombatLogic.fontFinishResultNet(msgRet.result[index], obj)
  1188. end
  1189. end
  1190. msgRet.vestID = vestID
  1191. --Msg.trace(msgRet)
  1192. Msg.send(msgRet,human.fd)
  1193. end
  1194. function jjcGodWarFinishGm(human)
  1195. local state,round,leftTime = getNowGodWarState()
  1196. if state > GODWAR_STATE_WAIT and state < GODWAR_STATE_END then return end
  1197. local db = JjcGodWarDB.getGodWarDB()
  1198. if not db or not db.time then return end
  1199. local msgRet = Msg.gc.GC_JJCGODWAR_FINISH
  1200. msgRet.actTime = db.time
  1201. msgRet.roleBase[0] = 0
  1202. local rank2Uuid = JjcGodWarDB.getGodWarRank2Uuid()
  1203. local uuid2Roles = JjcGodWarDB.getGodWarUuid2Roles()
  1204. if not rank2Uuid or not uuid2Roles then return end
  1205. local conf = JjcGodWarExcel.chenghaoReward
  1206. msgRet.roleBase[0] = 3
  1207. for i=1,3 do
  1208. local uuid = rank2Uuid[i]
  1209. local roleData = uuid2Roles[uuid]
  1210. local rolebase = roleData.rolebase
  1211. if JjcDB.isNpc(roleData) then
  1212. rolebase = roleData
  1213. end
  1214. RoleLogic.makeRoleBase(rolebase, msgRet.roleBase[i])
  1215. msgRet.roleBase[i].chenghao = conf[i].chenghaoID
  1216. end
  1217. --Msg.trace(msgRet)
  1218. Msg.send(msgRet,human.fd)
  1219. end
  1220. --活动结算弹窗
  1221. function GC_JJCGODWAR_FINISH(human)
  1222. if not RoleSystemLogic.isOpen(human, RoleSystemDefine.ROLE_SYS_ID_1302) then
  1223. return
  1224. end
  1225. local state,round,leftTime = getNowGodWarState()
  1226. if state > GODWAR_STATE_WAIT and state < GODWAR_STATE_END then return end
  1227. local db = JjcGodWarDB.getGodWarDB()
  1228. if not db or not db.time then return end
  1229. if human.db.jjcGodWar then
  1230. local finishTipTime = human.db.jjcGodWar.finishTipTime
  1231. if finishTipTime then
  1232. if Util.isSameDayByTimes(finishTipTime,db.time) then return end
  1233. end
  1234. end
  1235. local msgRet = Msg.gc.GC_JJCGODWAR_FINISH
  1236. msgRet.actTime = db.time
  1237. msgRet.roleBase[0] = 0
  1238. local rank2Uuid = JjcGodWarDB.getGodWarRank2Uuid()
  1239. local uuid2Roles = JjcGodWarDB.getGodWarUuid2Roles()
  1240. if not rank2Uuid or #rank2Uuid <= 0 or not uuid2Roles or uuid2Roles == {} then return end
  1241. local conf = JjcGodWarExcel.chenghaoReward
  1242. msgRet.roleBase[0] = 3
  1243. for i=1,3 do
  1244. local uuid = rank2Uuid[i]
  1245. local roleData = uuid2Roles[uuid]
  1246. local rolebase = roleData.rolebase
  1247. if JjcDB.isNpc(roleData) then
  1248. rolebase = roleData
  1249. end
  1250. RoleLogic.makeRoleBase(rolebase, msgRet.roleBase[i])
  1251. msgRet.roleBase[i].chenghao = conf[i].chenghaoID
  1252. end
  1253. human.db.jjcGodWar = human.db.jjcGodWar or {}
  1254. human.db.jjcGodWar.finishTipTime = db.time
  1255. --Msg.trace(msgRet)
  1256. if Config.IS_JJCGODWAR then
  1257. local info=Util.printTable(msgRet)
  1258. Log.write(Log.LOGID_JJC_GODWAR,"GC_JJCGODWAR_FINISH=>"..info)
  1259. end
  1260. Msg.send(msgRet,human.fd)
  1261. end
  1262. function onLogin(human)
  1263. GC_JJCGODWAR_FINISH(human)
  1264. end
  1265. function updateDaily(human)
  1266. if not human.db.jjcGodWar then return end
  1267. human.db.jjcGodWar.mobaiList = nil
  1268. human.db.jjcGodWar.mobaiCnt = nil
  1269. human.db.jjcGodWar.jingCaiTip = nil
  1270. end
  1271. --------------------------------- JjcActLogic回调 -------------------------------
  1272. local function getActNearTime()
  1273. local startTime1,startTime2 = getStartTime()
  1274. if not startTime1 then
  1275. return JjcActLogic.STATE_NOOPEN, 0, 0
  1276. end
  1277. local now = os.time()
  1278. local endTime1 = startTime1 + GODWAR_ACT_TIME
  1279. local endTime2 = startTime2 + GODWAR_ACT_TIME
  1280. if startTime1 <= now and now < endTime1 then
  1281. return JjcActLogic.STATE_START, startTime1, endTime1 - now
  1282. end
  1283. if startTime2 <= now and now < endTime2 then
  1284. return JjcActLogic.STATE_START, startTime2, endTime2 - now
  1285. end
  1286. if now < startTime1 then
  1287. return JjcActLogic.STATE_READY, startTime1, startTime1 - now
  1288. end
  1289. if now < startTime2 then
  1290. return JjcActLogic.STATE_READY, startTime2, startTime2 - now
  1291. end
  1292. startTime1 = startTime1 + 86400 * 7
  1293. return JjcActLogic.STATE_NORMAL, startTime1, startTime1 - now
  1294. end
  1295. -- 活动状态 进行中/准备 剩余时间
  1296. function getActState(human)
  1297. local state, _, leftTime = getActNearTime()
  1298. --print("state, leftTime",state, leftTime)
  1299. return state, leftTime
  1300. end
  1301. function getActDesc(desc)
  1302. local _, startTime = getActNearTime()
  1303. local now = os.time()
  1304. if Util.isSameDay(startTime, now) or startTime == 0 then
  1305. local d = os.date("*t", startTime)
  1306. return Util.format(desc, d.month .. "." .. d.day)
  1307. else
  1308. local startTime1,startTime2 = getStartTime()
  1309. local realTime = 0
  1310. if now < startTime1 then
  1311. realTime = startTime1
  1312. elseif now < startTime2 then
  1313. realTime = startTime2
  1314. elseif now > startTime2 then
  1315. realTime = startTime2
  1316. end
  1317. local d = os.date("*t", realTime)
  1318. return Util.format(desc, d.month .. "月" .. d.day)
  1319. end
  1320. end
  1321. function fontActArgs(args, human)
  1322. args[0] = 1
  1323. args[1] = getMyTopRank(human)
  1324. end
  1325. function getLeftTime(human, YYInfo, funcConfig)
  1326. local state, startTime, leftTime = getActNearTime()
  1327. if state == JjcActLogic.STATE_READY and leftTime <= 75900 then
  1328. return leftTime
  1329. end
  1330. end
  1331. function isOpen(human)
  1332. local state, startTime, leftTime = getActNearTime()
  1333. if state == JjcActLogic.STATE_NOOPEN then return end
  1334. if state == JjcActLogic.STATE_READY and leftTime > 75900 then return end
  1335. return true
  1336. end
  1337. function getYunYingState(human, YYInfo, funcConfig)
  1338. local state,round = getNowGodWarState()
  1339. if state == GODWAR_STATE_WAIT or state == GODWAR_STATE_END then return end
  1340. return YunYingLogic.STATE_STARTING
  1341. end
  1342. function jjcGodWarIcon()
  1343. local msgRet = Msg.gc.GC_JJCGODWAR_ICON
  1344. makeGodWarNowState(msgRet.state)
  1345. for k , v in ipairs(JjcGodWarExcel.godWarBoard[1].reward) do
  1346. Grid.makeItem(msgRet.items[k], v[1], v[2])
  1347. msgRet.items[0] = k
  1348. end
  1349. for _, human in pairs(ObjHuman.onlineUuid) do
  1350. if human.fd then
  1351. Msg.send(msgRet,human.fd)
  1352. end
  1353. end
  1354. end
  1355. function checkCanPos(human)
  1356. local state,round = getNowGodWarState()
  1357. if state == GODWAR_STATE_WAIT or state == GODWAR_STATE_END then return true end
  1358. if round ~= GODWAR_JIEDUAN_ZHUNBEI then
  1359. return Broadcast.sendErr(human,Lang.GODWAR_POS_ERR)
  1360. end
  1361. return true
  1362. end
  1363. function queryGm(human, value)
  1364. print(" queryGm ", value)
  1365. local msgRet = Msg.gc.GC_JJCGODWAR_DANMU_QUERY
  1366. msgRet.cnt = 0
  1367. for i=1,value do
  1368. local net = msgRet.list[i]
  1369. net.uuid = "21312412412"
  1370. net.desc = "芜湖 芜湖 芜湖 芜湖"
  1371. end
  1372. msgRet.list[0] = value
  1373. Msg.send(msgRet,human.fd)
  1374. end
  1375. -- 弹幕
  1376. function danmuQuery(human)
  1377. local list = JjcGodWarDB.getGodWarDanMuList()
  1378. list = list or {}
  1379. local msgRet = Msg.gc.GC_JJCGODWAR_DANMU_QUERY
  1380. for k, v in ipairs(list) do
  1381. local net = msgRet.list[k]
  1382. net.uuid = v.uuid
  1383. net.desc = v.desc
  1384. end
  1385. msgRet.list[0] = #list
  1386. Grid.makeItem(msgRet.need, ItemDefine.ITEM_JINBI_ID, 1000)
  1387. Msg.send(msgRet,human.fd)
  1388. end
  1389. function danmuSpeak(human, desc)
  1390. local state,round = getNowGodWarState()
  1391. -- if state == GODWAR_STATE_WAIT or state >= GODWAR_STATE_END then return end
  1392. if BagLogic.getItemCnt(human, ItemDefine.ITEM_JINBI_ID) < 1000 then
  1393. return Broadcast.sendErr(human, Util.format(Lang.COMMON_NO_ITEM, ItemDefine.getValue(ItemDefine.ITEM_JINBI_ID, "name")))
  1394. end
  1395. BagLogic.delItem(human, ItemDefine.ITEM_JINBI_ID, 1000, "jjc_godwar")
  1396. desc = FilterUtil.filter(desc)
  1397. JjcGodWarDB.updateDanMu(human.db._id, desc)
  1398. local msgRet = Msg.gc.GC_JJCGODWAR_DANMU_SPEAK
  1399. msgRet.uuid = human.db._id
  1400. msgRet.desc = desc
  1401. for _, fakeHuman in pairs(ObjHuman.onlineUuid) do
  1402. Msg.send(msgRet,fakeHuman.fd)
  1403. end
  1404. end