jjcNewLadderLogic.lua 62 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189119011911192119311941195119611971198119912001201120212031204120512061207120812091210121112121213121412151216121712181219122012211222122312241225122612271228122912301231123212331234123512361237123812391240124112421243124412451246124712481249125012511252125312541255125612571258125912601261126212631264126512661267126812691270127112721273127412751276127712781279128012811282128312841285128612871288128912901291129212931294129512961297129812991300130113021303130413051306130713081309131013111312131313141315131613171318131913201321132213231324132513261327132813291330133113321333133413351336133713381339134013411342134313441345134613471348134913501351135213531354135513561357135813591360136113621363136413651366136713681369137013711372137313741375137613771378137913801381138213831384138513861387138813891390139113921393139413951396139713981399140014011402140314041405140614071408140914101411141214131414141514161417141814191420142114221423142414251426142714281429143014311432143314341435143614371438143914401441144214431444144514461447144814491450145114521453145414551456145714581459146014611462146314641465146614671468146914701471147214731474147514761477147814791480148114821483148414851486148714881489149014911492149314941495149614971498149915001501150215031504150515061507150815091510151115121513151415151516151715181519152015211522152315241525152615271528152915301531153215331534153515361537153815391540154115421543154415451546154715481549155015511552155315541555155615571558155915601561156215631564156515661567156815691570157115721573157415751576157715781579158015811582158315841585158615871588158915901591159215931594159515961597159815991600160116021603160416051606160716081609161016111612161316141615161616171618161916201621162216231624162516261627162816291630163116321633163416351636163716381639164016411642164316441645164616471648164916501651165216531654165516561657165816591660166116621663166416651666166716681669167016711672167316741675167616771678167916801681168216831684168516861687168816891690169116921693169416951696169716981699170017011702170317041705170617071708170917101711171217131714
  1. --------------------------------
  2. -- 文件名 : jjcNewLadderLogic.lua
  3. -- 文件说明 : 天梯赛-管理器
  4. -- 创建时间 : 2025/05/07
  5. -- 创建人 : FC
  6. --------------------------------
  7. local Util = require("common.Util")
  8. local Lang = require("common.Lang")
  9. local CommonDB = require("common.CommonDB")
  10. local JjcExcel = require("excel.jjc")
  11. local MonsterExcel = require("excel.monster")
  12. local MailExcel = require("excel.mail")
  13. local Msg = require("core.Msg")
  14. local ObjHuman = require("core.ObjHuman")
  15. local RoleDBLogic = require("role.RoleDBLogic")
  16. local Config = require("Config")
  17. local ItemDefine = require("bag.ItemDefine")
  18. local Grid = require("bag.Grid")
  19. local CombatVideo = require("combat.CombatVideo")
  20. local RoleLogic = require("role.RoleLogic")
  21. local JjcNewLadderDefine = require("jjcnewladder.jjcNewLadderDefine")
  22. local JjcNewLadderMiddle = require("jjcnewladder.jjcNewLadderMiddle")
  23. local JjcNewLadderDB = require("jjcnewladder.jjcNewLadderDB")
  24. local BagLogic = require("bag.BagLogic")
  25. local MiddleCommonLogic = require("middle.MiddleCommonLogic")
  26. local CombatDefine = require("combat.CombatDefine")
  27. local Broadcast = require("broadcast.Broadcast")
  28. local CombatLogic = require("combat.CombatLogic")
  29. local WarReportLogic = require("warReport.WarReportLogic")
  30. local MailManager = require("mail.MailManager")
  31. local Timer = require("core.Timer")
  32. local JjcActLogic = require("jjc.JjcActLogic")
  33. local CommonDefine = require("common.CommonDefine")
  34. -- 请求加入天梯赛的玩家
  35. local tQueryJoinPlayer = {}
  36. -- 请求天梯赛前三排名的数据的玩家
  37. local tQueryLast3Rank = {}
  38. local bQueryLast = false
  39. -- 上一轮天梯赛前三的排名玩家
  40. local tLast3RankPlayerInfo = nil
  41. -- 排行榜数据
  42. local tCacheRankInfo = {
  43. -- nNextUpdateTime -- 更新时间
  44. -- tRankList = {}
  45. }
  46. local bQueryRank = nil
  47. -- 缓存请求排行榜的玩家
  48. local tCacheQueryRankPlaeyer = {}
  49. ------------------------------------- 内部判断 ----------------------------------------------------
  50. -- 判断是否开启
  51. local function JjcNewLadderLogic_CheckIsOpen()
  52. local nNowTime = os.time()
  53. local nEndTime = CommonDB.GetJjcLadderEndTime()
  54. print("[JjcNewLadderLogic_CheckIsOpen] nNowTime = "..nNowTime.." nEndTime = "..nEndTime)
  55. if 0 >= nEndTime then
  56. local tDate = os.date("*t",nNowTime)
  57. -- table.print_lua_table(tDate)
  58. if tDate.wday >= JjcNewLadderDefine.JJC_NEWLADDER_OPENDAY and JjcNewLadderDefine.JJC_NEWLADDER_ENDDAY >= tDate.wday then
  59. if JjcNewLadderDefine.JJC_NEWLADDER_OPENDAY == tDate.wday then
  60. if tDate.hour >= JjcNewLadderDefine.JJC_NEWLADDER_ENDTIME then
  61. return false
  62. end
  63. end
  64. return true
  65. end
  66. return false
  67. else
  68. return nEndTime > nNowTime
  69. end
  70. end
  71. -- 获取剩余时间
  72. local function JjcNewLadder_GetLeftTime()
  73. local nNowTime = os.time()
  74. local nEndTime = CommonDB.GetJjcLadderEndTime()
  75. if not nEndTime or nEndTime < nNowTime then
  76. return 0
  77. end
  78. return nEndTime - nNowTime
  79. end
  80. -- 初始化玩家DB
  81. local function JjcNewLadderLogic_CreatDB(human)
  82. human.db.JjcNewLadder =
  83. {
  84. nRefresh = os.time(), -- 免费刷新时间
  85. nFreeNum = 5, -- 免费挑战次数
  86. nPayNum = 0, -- 购买挑战次数
  87. bJoin = false,
  88. nRank = -1,
  89. nPoint = 0, -- 积分
  90. tEnemy = nil, -- 对战敌方数据
  91. recordList = nil, -- 对战记录
  92. tWorship = nil, -- 点赞记录
  93. nLastEndTime = CommonDB.GetJjcLadderEndTime(), -- 上一次活动结束时间
  94. }
  95. end
  96. -- 获取玩家上一次活动结束时间
  97. local function JjcNewLadder_GetHumanLastEndTime(human)
  98. return human.db.JjcNewLadder.nLastEndTime
  99. end
  100. -- 设置玩家上一次活动结束时间
  101. local function JjcNewLadder_SetHumanLastEndTime(human, nValue)
  102. human.db.JjcNewLadder.nLastEndTime = nValue
  103. end
  104. -- 获取玩家是否参加了天梯赛
  105. local function JjcNewLadder_GetHumanJoin(human)
  106. return human.db.JjcNewLadder.bJoin
  107. end
  108. -- 设置玩家是否参加了天梯赛
  109. local function JjcNewLadder_SetHumanJoin(human, nValue)
  110. human.db.JjcNewLadder.bJoin = nValue
  111. end
  112. -- 获取玩家敌方数据
  113. local function JjcNewLadder_GetHumanEnemy(human)
  114. return human.db.JjcNewLadder.tEnemy
  115. end
  116. -- 设置玩家敌方数据
  117. local function JjcNewLadder_SetHumanEnemy(human, tEnemy)
  118. human.db.JjcNewLadder.tEnemy = tEnemy
  119. end
  120. -- 获取玩家排名数据
  121. local function JjcNewLadder_GetHumanRank(human)
  122. return human.db.JjcNewLadder.nRank
  123. end
  124. -- 设置玩家排名数据
  125. local function JjcNewLadder_SetHumanRank(human, nValue)
  126. human.db.JjcNewLadder.nRank = nValue
  127. end
  128. -- 获取玩家积分数据
  129. local function JjcNewLadder_GetHumanPoint(human)
  130. return human.db.JjcNewLadder.nPoint
  131. end
  132. -- 设置玩家积分数据
  133. local function JjcNewLadder_SetHumanPoint(human, nValue)
  134. human.db.JjcNewLadder.nPoint = nValue
  135. end
  136. -- 获取玩家免费刷新时间
  137. local function JjcNewLadder_GetHumanRefreshTime(human)
  138. return human.db.JjcNewLadder.nRefresh
  139. end
  140. -- 设置玩家免费刷新时间
  141. local function JjcNewLadder_SetHumanRefreshTime(human, nValue)
  142. human.db.JjcNewLadder.nRefresh = nValue
  143. end
  144. -- 获取玩家免费挑战次数
  145. local function JjcNewLadder_GetHumanFreeNum(human)
  146. return human.db.JjcNewLadder.nFreeNum
  147. end
  148. -- 设置玩家免费挑战次数
  149. local function JjcNewLadder_SetHumanFreeNum(human, nValue)
  150. human.db.JjcNewLadder.nFreeNum = human.db.JjcNewLadder.nFreeNum + nValue
  151. end
  152. -- 获取玩家付费挑战次数
  153. local function JjcNewLadder_GetHumanPayNum(human)
  154. return human.db.JjcNewLadder.nPayNum
  155. end
  156. -- 设置玩家付费挑战次数
  157. local function JjcNewLadder_SetHumanPayNumNum(human, nValue)
  158. human.db.JjcNewLadder.nPayNum = human.db.JjcNewLadder.nPayNum + nValue
  159. end
  160. -- 获取玩家所有挑战次数
  161. local function JjcNewLadder_GetAllFightNum(human)
  162. return JjcNewLadder_GetHumanFreeNum(human) + JjcNewLadder_GetHumanPayNum(human)
  163. end
  164. -- 获取对战记录
  165. local function JjcNewLadder_GetRecordList(human)
  166. return human.db.JjcNewLadder.recordList
  167. end
  168. -- 设置对战记录
  169. local function JjcNewLadder_SetRecordList(human, videoUuid)
  170. if not human.db.JjcNewLadder.recordList then
  171. human.db.JjcNewLadder.recordList = {}
  172. end
  173. table.insert(human.db.JjcNewLadder.recordList, {videoUuid = videoUuid, time = os.time()})
  174. end
  175. -- 尝试删除对战记录的视频
  176. local function JjcNewLadder_TryDelRecordList(human)
  177. local tRecordList = JjcNewLadder_GetRecordList(human)
  178. if nil == tRecordList then
  179. return
  180. end
  181. local nLen = #tRecordList
  182. if JjcNewLadderDefine.JJC_NEWLADDER_SAVE_RECORDLIST_LEN >= nLen then
  183. return
  184. end
  185. local nDelLen = nLen - JjcNewLadderDefine.JJC_NEWLADDER_SAVE_RECORDLIST_LEN
  186. local nAllLen = #tRecordList
  187. for i = nDelLen, 1, -1 do
  188. local tData = tRecordList[nAllLen]
  189. CombatVideo.removeCombatVideo(tData.videoUuid)
  190. table.remove(tRecordList, nAllLen)
  191. nAllLen = nAllLen - 1
  192. end
  193. end
  194. -- 获取是否加入天梯赛
  195. local function JjcNewLadderLogic_GetJoin(human)
  196. return human.db.JjcNewLadder.bJoin
  197. end
  198. -- 设置是否加入天梯赛
  199. local function JjcNewLadderLogic_SetJoin(human, nValue)
  200. human.db.JjcNewLadder.bJoin = nValue
  201. end
  202. -- 获取是否点赞
  203. local function JjcNewLadderLogic_GetWorShip(human, uuid)
  204. if not human.db.JjcNewLadder.tWorship or not human.db.JjcNewLadder.tWorship[uuid] then
  205. return JjcNewLadderDefine.JJC_NEWLADDER_NOWORSHIP
  206. end
  207. return human.db.JjcNewLadder.tWorship[uuid]
  208. end
  209. -- 设置是否点赞
  210. local function JjcNewLadderLogic_SetWorShip(human, uuid, nValue)
  211. if not human.db.JjcNewLadder.tWorship then
  212. human.db.JjcNewLadder.tWorship = {}
  213. end
  214. human.db.JjcNewLadder.tWorship[uuid] = nValue
  215. end
  216. -- 获取对应uuid的一些数据
  217. local function JjcNewLadderLogic_GetInfoByUUID(human, uuid, nType)
  218. local tPlayInfo = nil
  219. if nType == JjcNewLadderDefine.JJC_NEWLADDER_QUERYUID_ENEMY_TYPE then
  220. local tEnemy = JjcNewLadder_GetHumanEnemy(human)
  221. if not tEnemy or nil == _G.next(tEnemy) then
  222. print("[JjcNewLadderLogic_GetInfoByUUID] 不存在对应的对战列表")
  223. return tPlayInfo
  224. end
  225. for _, v in pairs(tEnemy) do
  226. print("[JjcNewLadderLogic_GetInfoByUUID] 进行判断的 uuid = "..v.uuid.." nType = "..type(v.uuid))
  227. if tostring(v.uuid) == uuid then
  228. tPlayInfo = v
  229. print("[JjcNewLadderLogic_GetInfoByUUID] 寻找到了对应的假人数据")
  230. return tPlayInfo
  231. end
  232. end
  233. print("[JjcNewLadderLogic_GetInfoByUUID] 不存在对应的数据")
  234. else
  235. for i = 1, JjcNewLadderDefine.JJC_NEWLADDER_RANK_SEND_LEN, 1 do
  236. local tRankData = tCacheRankInfo.tRankList[i]
  237. if not tRankData then
  238. return tPlayInfo
  239. end
  240. if tRankData.uuid == uuid then
  241. tPlayInfo = tRankData
  242. return tPlayInfo
  243. end
  244. end
  245. end
  246. return tPlayInfo
  247. end
  248. -- 请求加入天梯赛
  249. local function JjcNewLadderLogic_JoinLadder(human)
  250. JjcNewLadderMiddle.JjcNewLadderMiddle_JoinLadder(human)
  251. end
  252. -- 进行匹配对手
  253. local function JjcNewLadderLogic_MatchRival(uuid)
  254. return JjcNewLadderDB.JjcNewLadderDB_MatchRival(uuid)
  255. end
  256. -- 获取对应uid的DB数据
  257. local function JjcNewLadderLogic_GetDataByuid(uuid)
  258. return JjcNewLadderDB.JjcNewLadderDB_GetDBDataByuid(uuid)
  259. end
  260. -- 组装下发的主界面数据
  261. local function JjcNewLadder_GetInterfaceInfo(human)
  262. local tMsgData = Msg.gc.GC_JJC_NEW_LADDER_QUERY
  263. tMsgData.ownRank = JjcNewLadder_GetHumanRank(human)
  264. tMsgData.ownJifen = JjcNewLadder_GetHumanPoint(human)
  265. tMsgData.atkZDL = human.db.zhandouli
  266. tMsgData.leftSec = JjcNewLadder_GetLeftTime()
  267. tMsgData.challengeCnt = JjcNewLadder_GetAllFightNum(human)
  268. tMsgData.isQuick = 0
  269. Grid.makeItem(tMsgData.challengeCostItem,ItemDefine.ITEM_JJC_TICKET_ID, JjcNewLadderDefine.JJC_NEWLADDER_COST_ITEM_NUM)
  270. -- 红点
  271. tMsgData.dotList[0] = 3
  272. tMsgData.dotList[1] = tMsgData.challengeCnt > 0 and 1 or 0
  273. tMsgData.dotList[2] = 0
  274. tMsgData.dotList[3] = 0
  275. -- 敌人
  276. local tEnemy = JjcNewLadder_GetHumanEnemy(human)
  277. if not tEnemy then
  278. tMsgData.tEnemy[0] = 0
  279. else
  280. tMsgData.tEnemy[0] = 5
  281. local nIndex = 0
  282. for _, v in pairs(tEnemy) do
  283. nIndex = nIndex + 1
  284. local tData = tMsgData.tEnemy[nIndex]
  285. tData.head = v.head
  286. tData.headFrame = v.headFrame or 0
  287. tData.nPower = v.zhandouli
  288. tData.name = v.name
  289. tData.nPoint = v.point
  290. tData.uuid = tostring(v.uuid)
  291. tData.szServerName = v.szServerName or Config.NEW_SVR_INDEX.."区"
  292. tData.nRank = v.nRank
  293. end
  294. -- table.print_lua_table(tMsgData.tEnemy)
  295. -- print("[JjcNewLadder_GetInterfaceInfo] 打印封装的数据完成")
  296. end
  297. Msg.send(tMsgData, human.fd)
  298. print("[JjcNewLadder_GetInterfaceInfo] 发送协议完成")
  299. end
  300. -- 发送对手数据
  301. local function JjcNewLadder_SendEnemy(human)
  302. local tMsgData = Msg.gc.GC_JJC_NEW_LADDER_TARGET_FIND
  303. tMsgData.leftFreeCnt = JjcNewLadder_GetHumanFreeNum(human)
  304. local tEnemy = JjcNewLadder_GetHumanEnemy(human)
  305. if not tEnemy then
  306. tMsgData.targetList[0] = 0
  307. else
  308. tMsgData.targetList[0] = 5
  309. local nIndex = 0
  310. for _, v in pairs(tEnemy) do
  311. nIndex = nIndex + 1
  312. local tData = tMsgData.targetList[nIndex]
  313. tData.head = v.head
  314. tData.headFrame = v.headFrame or 0
  315. tData.nPower = v.zhandouli
  316. tData.name = v.name
  317. tData.nPoint = v.point
  318. tData.uuid = tostring(v.uuid)
  319. tData.szServerName = v.szServerName or Config.NEW_SVR_INDEX.."区"
  320. tData.nRank = v.nRank
  321. end
  322. end
  323. Msg.send(tMsgData, human.fd)
  324. end
  325. -- 发送上一轮前3名数据
  326. local function JjcNewLadder_SendLast3Rank(human)
  327. local tMsgData = Msg.gc.GC_JJC_NEW_LADDER_QUERY_LAST_RANK
  328. tMsgData.tList[0] = 0
  329. table.print_lua_table(tLast3RankPlayerInfo)
  330. if tLast3RankPlayerInfo and tLast3RankPlayerInfo.tLastRankInfo and
  331. nil ~= _G.next(tLast3RankPlayerInfo.tLastRankInfo) then
  332. local nIndex = 0
  333. for _, v in pairs(tLast3RankPlayerInfo.tLastRankInfo) do
  334. nIndex = nIndex + 1
  335. local tData = tMsgData.tList[nIndex]
  336. tData.head = v.head
  337. tData.headFrame = v.headFrame or 0
  338. tData.name = v.name
  339. tData.szServerName = v.szServerName
  340. tData.uuid = v.uuid
  341. tData.worshipCnt = v.worshipCnt
  342. tData.worshipState = JjcNewLadderLogic_GetWorShip(human, v.uuid)
  343. end
  344. end
  345. Msg.send(tMsgData, human.fd)
  346. print("[JjcNewLadder_SendLast3Rank] 发送上一轮数据完成")
  347. end
  348. -- 发送排行榜数据
  349. local function JjcNewLadder_SendRankInfo(human)
  350. local tMsgData = Msg.gc.GC_JJC_NEW_LADDER_RANK_QUERY
  351. tMsgData.ownRank.nRank = JjcNewLadder_GetHumanRank(human)
  352. tMsgData.ownRank.head = human.db.head
  353. tMsgData.ownRank.headFrame = human.db.headFrame or 0
  354. tMsgData.ownRank.nPower = human.db.zhandouli
  355. tMsgData.ownRank.name = human.db.name
  356. tMsgData.ownRank.szServerName = Config.NEW_SVR_INDEX.."区"
  357. tMsgData.ownRank.uuid = human.db._id
  358. tMsgData.topList[0] = JjcNewLadderDefine.JJC_NEWLADDER_RANK_SEND_LEN
  359. for i = 1, JjcNewLadderDefine.JJC_NEWLADDER_RANK_SEND_LEN, 1 do
  360. local tRankData = tCacheRankInfo.tRankList[i]
  361. if tRankData then
  362. local tData = tMsgData.topList[i]
  363. tData.nRank = i
  364. tData.head = tRankData.head
  365. tData.headFrame = tRankData.headFrame or 0
  366. tData.nPower = tRankData.zhandouli
  367. tData.name = tRankData.name
  368. tData.uuid = tostring(tRankData.uuid)
  369. -- print("[JjcNewLadder_SendRankInfo] nRank = "..i.." uuid = "..tRankData.uuid.." type1 = "..type(tRankData.uuid).." type2 = "..type(tData.uuid))
  370. tData.szServerName = tRankData.szServerName
  371. else
  372. print("[JjcNewLadder_SendRankInfo] 不存在对应排名对应的排行榜数据 i = "..i)
  373. return
  374. end
  375. end
  376. print("[JjcNewLadder_SendRankInfo] 开始下发数据")
  377. Msg.send(tMsgData, human.fd)
  378. print("[JjcNewLadder_SendRankInfo] 结束下发数据")
  379. end
  380. -- 保存对战录像和数据
  381. local function JjcNewLadder_SaveRecord(human, combatInfo)
  382. -- 添加录像
  383. local combatVideo = CombatVideo.createCombatVideo(CombatVideo.VIDEOTYPE_JJCLODDER, combatInfo, human.db._id)
  384. local videoUuid = combatVideo._id
  385. JjcNewLadder_TryDelRecordList(human)
  386. JjcNewLadder_SetRecordList(human, videoUuid)
  387. end
  388. -- 发送战败邮件(真人)
  389. local function JjcNewLadder_SendFailMail(uuidDes, nServerID, SrcServerName, SrcName, nNewRank)
  390. JjcNewLadderMiddle.JjcNewLadderMiddle_SendFailMail(uuidDes, nServerID, SrcServerName, SrcName, nNewRank)
  391. end
  392. -- 获取当前玩家对战列表缓存的uuid
  393. local function JjcNewLaader_GetAllEnemyUID(human)
  394. local tEnemy = JjcNewLadder_GetHumanEnemy(human)
  395. if not tEnemy then
  396. return nil
  397. end
  398. local tEnemyUid = {}
  399. for _, v in pairs(tEnemy) do
  400. table.insert(tEnemyUid, v.uuid)
  401. end
  402. return tEnemyUid
  403. end
  404. -- 获取 对战显示基础数据(JJC_NEW_LADDER_BASE_ENEMY) 敌方或排行榜
  405. local function JjcNewLaader_GetBaseInfo(tData, tBaseData)
  406. tData.head = tBaseData.head
  407. tData.headFrame = tBaseData.headFrame or 0
  408. tData.nPower = tBaseData.zhandouli
  409. tData.name = tBaseData.name
  410. tData.nPoint = tBaseData.point
  411. tData.uuid = tostring(tBaseData.uuid)
  412. tData.szServerName = tBaseData.szServerName or Config.NEW_SVR_INDEX.."区"
  413. tData.nRank = tBaseData.nRank
  414. end
  415. local function JjcNewLaader_GetHumanBaseInfo(tData, human)
  416. tData.head = human.db.head
  417. tData.headFrame = human.db.headFrame or 0
  418. tData.nPower = human.db.zhandouli
  419. tData.name = human.db.name
  420. tData.nPoint = JjcNewLadder_GetHumanPoint(human)
  421. tData.uuid = tostring(human.db._id)
  422. tData.szServerName = Config.NEW_SVR_INDEX.."区"
  423. tData.nRank = JjcNewLadder_GetHumanRank(human)
  424. end
  425. -- 弹不在活动提示
  426. local function JjcNewLadder_PopNoOpenTips(human)
  427. Broadcast.sendErr(human, Lang.JJCNEWLADDERNOOPEN)
  428. end
  429. ---------------------------------- 内部调用 ----------------------------------------------
  430. -- 请求加入天梯赛(数据服)
  431. function JjcNewLadderLogic_JoinHuman(tData)
  432. local bRet = JjcNewLadderDB.JjcNewLadderDB_AddHuman(tData)
  433. if false == bRet then
  434. print("[JjcNewLadderLogic_JoinHuman] 加入DB数据失败")
  435. return
  436. end
  437. print("[JjcNewLadderLogic_JoinHuman] 请求加入天梯赛 ")
  438. local nNowRank = JjcNewLadderDB.JjcNewLadderDB_GetRankByuid(tData.uuid)
  439. local nPoint = JjcNewLadderDB.JjcNewLadderDB_GetPointByuid(tData.uuid)
  440. if not nNowRank or 0 >= nPoint then
  441. print("[JjcNewLadderLogic_JoinHuman] 加入DB后还是不存在对应的排名值 uuid = "..tData.uuid)
  442. return
  443. end
  444. print("[JjcNewLadderLogic_JoinHuman] 请求加入天梯赛 name = "..tData.name.." nNowRank = "..nNowRank)
  445. local tRival = JjcNewLadderLogic_MatchRival(tData.uuid)
  446. if nil == tRival then
  447. print("[JjcNewLadderLogic_JoinHuman] 获取匹配对手的uid失败")
  448. return
  449. end
  450. print("[JjcNewLadderLogic_JoinHuman] 匹配对战对象成功 name = "..tData.name.." nNowRank = "..nNowRank)
  451. local tRivalData = {}
  452. for nRank, v in pairs(tRival) do
  453. local tJjcData = JjcNewLadderDB.JjcNewLadderDB_GetDBDataByRank(nRank)
  454. if nil == tJjcData then
  455. print("[JjcNewLadderLogic_JoinHuman] 获取不到对应的DB数据 nRank = "..nRank)
  456. return
  457. end
  458. local tSendData = {
  459. name = tJjcData.name,
  460. head = tJjcData.head,
  461. headFrame = tJjcData.headFrame or 0,
  462. uuid = tJjcData.uuid,
  463. nIsHuman = tJjcData.nIsHuman,
  464. nRank = nRank,
  465. zhandouli = tJjcData.zhandouli,
  466. point = tJjcData.point,
  467. nServerID = tJjcData.nServerID or Config.SVR_INDEX,
  468. monsterOutID = tJjcData.monsterOutID or 0,
  469. szServerName = tJjcData.szServerName
  470. }
  471. table.insert(tRivalData, tSendData)
  472. end
  473. print("[JjcNewLadderLogic_JoinHuman] 开始发送回包 name = "..tData.name.." nNowRank = "..nNowRank)
  474. JjcNewLadderMiddle.JjcNewLadderMiddle_JoinLadder_D2C(tData.uuid, tData.nSrcServerID, nNowRank, tRivalData, nPoint)
  475. end
  476. -- 加入天梯赛回包(普通服)
  477. function JjcNewLadderLogic_JoinHumanOk(tData)
  478. print("[JjcNewLadderLogic_JoinHumanOk] 加入天梯赛回包(普通服) 收到回包")
  479. table.print_lua_table(tData)
  480. local uuid, nRank, nPoint, tEnemy = tData.uuid, tData.nRank, tData.nPoint, tData.tEnemy
  481. local human = ObjHuman.onlineUuid[uuid]
  482. if not human then
  483. human = {}
  484. human.db = RoleDBLogic.getDb(uuid)
  485. human.db.JjcNewLadder.bJoin = true
  486. human.db.JjcNewLadder.nRank = nRank
  487. human.db.JjcNewLadder.tEnemy = tEnemy
  488. human.db.JjcNewLadder.nPoint = nPoint
  489. RoleDBLogic.saveRole(human.db)
  490. else
  491. human.db.JjcNewLadder.bJoin = true
  492. human.db.JjcNewLadder.nRank = nRank
  493. human.db.JjcNewLadder.tEnemy = tEnemy
  494. human.db.JjcNewLadder.nPoint = nPoint
  495. JjcNewLadder_GetInterfaceInfo(human)
  496. -- local tMsgData = JjcNewLadder_GetInterfaceInfo(human)
  497. -- Msg.send(tMsgData, human.fd)
  498. -- print("[JjcNewLadderLogic_JoinHumanOk] 下发数据结束")
  499. end
  500. end
  501. -- 数据服收到刷新对战列表
  502. function JjcNewLadderLogic_RefeshEnemy(tData)
  503. print("[JjcNewLadderLogic_RefeshEnemy] 开始刷新数据")
  504. local tRival = JjcNewLadderLogic_MatchRival(tData.uuid)
  505. if nil == tRival then
  506. print("[JjcNewLadderLogic_RefeshEnemy] 获取匹配对手的uid失败")
  507. return
  508. end
  509. print("[JjcNewLadderLogic_RefeshEnemy] 数据服收到刷新对战列表")
  510. local tRivalData = {}
  511. for nRank, v in pairs(tRival) do
  512. local tJjcData = JjcNewLadderDB.JjcNewLadderDB_GetDBDataByRank(nRank)
  513. if nil == tJjcData then
  514. print("[JjcNewLadderLogic_JoinHuman] 获取不到对应的DB数据 nRank = "..nRank)
  515. return
  516. end
  517. local tSendData = {
  518. name = tJjcData.name,
  519. head = tJjcData.head,
  520. headFrame = tJjcData.headFrame or 0,
  521. uuid = tJjcData.uuid,
  522. nIsHuman = tJjcData.nIsHuman,
  523. nRank = nRank,
  524. zhandouli = tJjcData.zhandouli,
  525. point = tJjcData.point,
  526. nServerID = tJjcData.nServerID or Config.SVR_INDEX,
  527. monsterOutID = tJjcData.monsterOutID or 0,
  528. lv = tJjcData.lv or 0,
  529. identity = tJjcData.identity or 0,
  530. szServerName = tJjcData.szServerName or Config.SVR_INDEX.."区"
  531. }
  532. table.insert(tRivalData, tSendData)
  533. end
  534. JjcNewLadderMiddle.JjcNewLadderMiddle_RefreshEnemy_D2C(tData.uuid, tData.nSrcServerID, tRivalData)
  535. print("[JjcNewLadderLogic_RefeshEnemy] 回复数据完成")
  536. end
  537. -- 刷新对战列表回包(普通服)
  538. function JjcNewLadderLogic_RefeshEnemyOK(tData)
  539. print("[JjcNewLadderLogic_RefeshEnemyOK] 刷新对战列表回包(普通服)")
  540. local uuid, tEnemy = tData.uuid, tData.tEnemy
  541. local human = ObjHuman.onlineUuid[uuid]
  542. if not human then
  543. human = {}
  544. human.db = RoleDBLogic.getDb(uuid)
  545. human.db.JjcNewLadder.tEnemy = tEnemy
  546. RoleDBLogic.saveRole(human.db)
  547. else
  548. JjcNewLadder_SetHumanEnemy(human, tEnemy)
  549. JjcNewLadder_SendEnemy(human)
  550. print("[JjcNewLadderLogic_RefeshEnemyOK] 发送完成")
  551. end
  552. end
  553. -- 请求上一轮前3玩家信息(回包)
  554. function JjcNewLadderLogic_GetLast3RankOK(tData)
  555. print("[JjcNewLadderLogic_GetLast3RankOK] 普通服获取到对应的数据了")
  556. table.print_lua_table(tData)
  557. print("\n")
  558. tLast3RankPlayerInfo = tData
  559. for uuid, _ in pairs(tQueryLast3Rank) do
  560. local human = ObjHuman.onlineUuid[uuid]
  561. if human then
  562. JjcNewLadder_SendLast3Rank(human)
  563. end
  564. end
  565. tQueryLast3Rank = {}
  566. bQueryLast = false
  567. end
  568. -- 进行点赞(中心->数据(被点赞玩家所在服))
  569. function JjcNewLadderLogic_AddWorShip(tData)
  570. local uuidDes = tData.uuidDes
  571. local human = ObjHuman.onlineUuid[uuidDes]
  572. local bSave = false
  573. if not human then
  574. human = {}
  575. human.db = RoleDBLogic.getDb(uuidDes)
  576. bSave = true
  577. end
  578. if not human.db.jjcBeWorship then
  579. human.db.jjcBeWorship = 0
  580. end
  581. human.db.jjcBeWorship = human.db.jjcBeWorship + 1
  582. if true == bSave then
  583. RoleDBLogic.saveRole(human.db)
  584. end
  585. JjcNewLadderMiddle.JjcNewLadderMiddle_AddWorShip_D2C(tData, human.db.jjcBeWorship)
  586. end
  587. -- 点赞成功
  588. function JjcNewLadderLogic_AddWorShipOK(tData)
  589. if not tLast3RankPlayerInfo then
  590. print("[JjcNewLadderLogic_AddWorShipOK] 为什么点赞完不存在数据了")
  591. return
  592. end
  593. local uuidDes, nNowWorShip = tData.uuidDes, tData.nNowWorShip
  594. for _, v in pairs(tLast3RankPlayerInfo) do
  595. if v.uuid == uuidDes then
  596. v.worshipCnt = nNowWorShip
  597. break
  598. end
  599. end
  600. local human = ObjHuman.onlineUuid[tData.uuidSrc]
  601. local bSave = false
  602. if not human then
  603. human = {}
  604. human.db = RoleDBLogic.getDb(uuidDes)
  605. bSave = true
  606. end
  607. -- 设置已点赞
  608. JjcNewLadderLogic_SetWorShip(human, uuidDes, JjcNewLadderDefine.JJC_NEWLADDER_WORSHIP)
  609. if true == bSave then
  610. RoleDBLogic.saveRole(human.db)
  611. end
  612. if false == bSave then
  613. local tMsgData = Msg.gc.GC_JJC_NEW_LADDER_CHAMPION_WORSHIP
  614. tMsgData.worshipCnt = nNowWorShip
  615. tMsgData.dot = 0
  616. Msg.send(tMsgData, human.fd)
  617. end
  618. end
  619. -- 更新缓存的点赞数据
  620. function JjcNewLadderLogic_UpdateWorShip(tData)
  621. if not tLast3RankPlayerInfo then
  622. print("[JjcNewLadderLogic_UpdateWorShip] 更新缓存的点赞数据 为什么不存在数据了")
  623. return
  624. end
  625. for _, v in pairs(tLast3RankPlayerInfo) do
  626. if v.uuid == tData.uuidDes then
  627. v.worshipCnt = tData.nNowWorShip
  628. break
  629. end
  630. end
  631. end
  632. -- 请求天梯赛排行榜数据(中心->战区数据服)
  633. function JjcNewLadderLogic_GetRankInfo(tData)
  634. local tSendRankData = {}
  635. local nFirst = 1
  636. for i = 1, JjcNewLadderDefine.JJC_NEWLADDER_RANK_SEND_LEN, 1 do
  637. local tRank = JjcNewLadderDB.JjcNewLadderDB_GetDBDataByRank(i)
  638. table.insert(tSendRankData, {tRankData = tRank, nRank = i})
  639. local nLen = #tSendRankData
  640. if JjcNewLadderDefine.JJC_NEWLADDER_RANK_ONE_SEND_LEN <= nLen then
  641. local nFinish = i == JjcNewLadderDefine.JJC_NEWLADDER_RANK_SEND_LEN and 1 or 0
  642. JjcNewLadderMiddle.JjcNewLadderMiddle_QueryRankInfo_D2C(tSendRankData, nFinish, tData.nSrcServerID, nFirst)
  643. print("[JjcNewLadderLogic_GetRankInfo] 发送一次数据 nFirst = "..nFirst.." nFinish = "..nFinish)
  644. nFirst = 0
  645. tSendRankData = {}
  646. end
  647. end
  648. if nil ~= _G.next(tSendRankData) then
  649. JjcNewLadderMiddle.JjcNewLadderMiddle_QueryRankInfo_D2C(tSendRankData, 1, tData.nSrcServerID, nFirst)
  650. print("[JjcNewLadderLogic_GetRankInfo] 发送完成数据 nFirst = "..nFirst)
  651. end
  652. end
  653. -- 获取到天梯赛排行榜数据(中心->普通)
  654. function JjcNewLadderLogic_GetRankInfoOK(tData)
  655. local nFirst, nIsEnd = tData.nFirst, tData.nIsEnd
  656. print("[JjcNewLadderLogic_GetRankInfoOK] nFirst = "..nFirst.." nIsEnd = "..nIsEnd)
  657. local tRankInfo = tData.tRankInfo
  658. if nFirst == 1 then
  659. print("[JjcNewLadderLogic_GetRankInfoOK] 获取到天梯赛排行榜数据(中心->普通) 进行重置")
  660. tCacheRankInfo = {
  661. nNextUpdateTime = os.time() + JjcNewLadderDefine.JJC_NEWLADDER_RANK_NEXT_UPDATE_TIME + math.random(1, 30),
  662. tRankList = {}
  663. }
  664. end
  665. for _, v in ipairs(tRankInfo) do
  666. local nRank = v.nRank
  667. local tRankData = v.tRankData
  668. tCacheRankInfo.tRankList[nRank] = tRankData
  669. end
  670. if nIsEnd == 1 then
  671. for uuid, v in pairs(tCacheQueryRankPlaeyer) do
  672. local human = ObjHuman.onlineUuid[uuid]
  673. if human then
  674. JjcNewLadder_SendRankInfo(human)
  675. end
  676. end
  677. -- 清空缓存请求排行榜的玩家
  678. tCacheQueryRankPlaeyer = {}
  679. bQueryRank = nil
  680. end
  681. end
  682. -- 查询是否能够战斗(中心->战区数据服)
  683. function JjcNewLadderLogic_CheckCanFight(tData)
  684. print("[JjcNewLadderLogic_CheckCanFight] 查询是否能够战斗(中心->战区数据服) 开始")
  685. local uuid, uuidDes = tData.uuid, tData.uuidDes
  686. local nCanFight = JjcNewLadderDefine.JJC_NEWLADDER_NO_CAN_FIGHT
  687. -- 检查挑战者
  688. local tRankData = JjcNewLadderDB.JjcNewLadderDB_GetDBDataByuid(uuid)
  689. if not tRankData then
  690. print("[JjcNewLadderLogic_CheckCanFight] 不存在数据无法挑战返回")
  691. JjcNewLadderMiddle.JjcNewLadderMiddle_ReplyCheckFight(tData, nCanFight)
  692. return
  693. end
  694. if tRankData.nInFight == JjcNewLadderDefine.JJC_NEWLADDER_IN_FIGHT then
  695. print("[JjcNewLadderLogic_CheckCanFight] 当前玩家记录的是在挑战中")
  696. -- 还在持续时间内不能战斗
  697. if tRankData.nLastFightTime + JjcNewLadderDefine.JJC_NEWLADDER_FIGHT_DURATION > os.time() then
  698. print("[JjcNewLadderLogic_CheckCanFight] 当前玩家记录的是在挑战中,并且在持续战斗时间内")
  699. JjcNewLadderMiddle.JjcNewLadderMiddle_ReplyCheckFight(tData, nCanFight)
  700. return
  701. end
  702. end
  703. -- 检查被挑战者
  704. local tRankEnemyData = JjcNewLadderDB.JjcNewLadderDB_GetDBDataByuid(uuidDes)
  705. if not tRankEnemyData then
  706. print("[JjcNewLadderLogic_CheckCanFight] 不存在 被挑战者 数据无法挑战返回")
  707. JjcNewLadderMiddle.JjcNewLadderMiddle_ReplyCheckFight(tData, nCanFight)
  708. return
  709. end
  710. if tRankEnemyData.nInFight == JjcNewLadderDefine.JJC_NEWLADDER_IN_FIGHT then
  711. print("[JjcNewLadderLogic_CheckCanFight] 被挑战者 当前在战斗中")
  712. -- 还在持续时间内不能战斗
  713. if tRankEnemyData.nLastFightTime + JjcNewLadderDefine.JJC_NEWLADDER_FIGHT_DURATION > os.time() then
  714. print("[JjcNewLadderLogic_CheckCanFight] 被挑战者 当前在战斗中, 并且在持续战斗时间内")
  715. JjcNewLadderMiddle.JjcNewLadderMiddle_ReplyCheckFight(tData, nCanFight)
  716. return
  717. end
  718. end
  719. -- 可以战斗
  720. print("[JjcNewLadderLogic_CheckCanFight] 双方可以战斗进行设置操作")
  721. tRankData.nInFight = JjcNewLadderDefine.JJC_NEWLADDER_IN_FIGHT
  722. tRankData.nLastFightTime = os.time()
  723. tRankEnemyData.nInFight = JjcNewLadderDefine.JJC_NEWLADDER_IN_FIGHT
  724. tRankEnemyData.nLastFightTime = os.time()
  725. nCanFight = JjcNewLadderDefine.JJC_NEWLADDER_CAN_FIGHT
  726. JjcNewLadderMiddle.JjcNewLadderMiddle_ReplyCheckFight(tData, nCanFight)
  727. end
  728. -- 查询是否能够战斗(中心->普通)
  729. function JjcNewLadderLogic_CheckCanFightOK(tData)
  730. print("[JjcNewLadderLogic_CheckCanFightOK] 收到查询能否战斗的回包")
  731. table.print_lua_table(tData)
  732. local uuid, uuidDes, nIsFight = tData.uuid, tData.uuidDes, tData.nIsFight
  733. local human = ObjHuman.onlineUuid[uuid]
  734. -- 已经不在线了,直接返回
  735. if not human then
  736. return
  737. end
  738. if JjcNewLadderDefine.JJC_NEWLADDER_NO_CAN_FIGHT == nIsFight then
  739. return Broadcast.sendErr(human, Lang.JJCNEWLADDERNOFIGHT)
  740. else
  741. -- 开始正在的战斗流程
  742. print("[JjcNewLadderLogic_CheckCanFightOK] 开始真正的战斗流程")
  743. JjcLadderLogic_TrueFight(human, uuidDes)
  744. end
  745. end
  746. -- 战斗结束(中心->战区数据服)
  747. function JjcNewLadderLogic_FightEnd(tData)
  748. print("[JjcNewLadderLogic_FightEnd] 进入 战斗结束 (中心->战区数据服)")
  749. local uuid, uuidDes, nResult = tData.uuid, tData.uuidDes, tData.nResult
  750. local tEnemyInfo = JjcNewLadderDB.JjcNewLadderDB_GetDBDataByuid(uuidDes)
  751. if not tEnemyInfo then
  752. print("[JjcNewLadderLogic_FightEnd] 不存在对战人物的DB数据 uuidDes = "..uuidDes.." nResult = "..nResult)
  753. return
  754. end
  755. local tPlayerInfo = JjcNewLadderDB.JjcNewLadderDB_GetDBDataByuid(uuid)
  756. if not tPlayerInfo then
  757. print("[JjcNewLadderLogic_FightEnd] 不存在玩家的DB数据 uuidDes = "..uuid.." nResult = "..nResult)
  758. return
  759. end
  760. local nOldRank = JjcNewLadderDB.JjcNewLadderDB_GetRankByuid(uuid)
  761. print("[JjcNewLadderLogic_FightEnd] 当前老玩家的排名 nOldRank = "..nOldRank)
  762. -- 修改为可以继续战斗
  763. tPlayerInfo.nInFight = JjcNewLadderDefine.JJC_NEWLADDER_NOIN_FIGHT
  764. tEnemyInfo.nInFight = JjcNewLadderDefine.JJC_NEWLADDER_NOIN_FIGHT
  765. table.print_lua_table(tData)
  766. print("[JjcNewLadderLogic_FightEnd] 战斗结束 (中心->战区数据服)\n")
  767. -- 增加积分(会重新排序)
  768. if nResult == CombatDefine.RESULT_WIN then
  769. print("[JjcNewLadderLogic_FightEnd] 交换排名开始 ")
  770. -- JjcNewLadderDB.JjcNewLadderDB_AddPoint(uuid, 1)
  771. JjcNewLadderDB.JjcNewLadderDB_ExChangeRank(uuid, uuidDes)
  772. print("[JjcNewLadderLogic_FightEnd] 交换排名完成")
  773. end
  774. local nNewPlayerRank = JjcNewLadderDB.JjcNewLadderDB_GetRankByuid(uuid)
  775. local nNewEnemyRank = JjcNewLadderDB.JjcNewLadderDB_GetRankByuid(uuidDes)
  776. print("[JjcNewLadderLogic_FightEnd] 玩家新的排名 nNewPlayerRank = "..nNewPlayerRank)
  777. if nResult == CombatDefine.RESULT_WIN then
  778. -- 真人要发邮件
  779. if tEnemyInfo.nIsHuman == 1 then
  780. print("[JjcNewLadderLogic_FightEnd] 敌方是真人, 需要发送邮件")
  781. JjcNewLadder_SendFailMail(uuidDes, tEnemyInfo.nServerID, tPlayerInfo.szServerName, tPlayerInfo.name, nNewEnemyRank)
  782. end
  783. end
  784. -- 操作对战列表
  785. local tOldEnemyData, tChoseRank = {}, {}
  786. -- 防止选到已对战的角色
  787. tChoseRank[nNewEnemyRank] = 1
  788. for _, uuidEnemy in ipairs(tData.tEnemyUid) do
  789. if uuidEnemy ~= uuidDes then
  790. local nRank = JjcNewLadderDB.JjcNewLadderDB_GetRankByuid(uuidEnemy)
  791. if nRank then
  792. local tRankData = JjcNewLadderDB.JjcNewLadderDB_GetDBDataByRank(nRank)
  793. table.insert(tOldEnemyData, {uuid = uuidEnemy, nRank = nRank, nPoint = tRankData.point})
  794. tChoseRank[nRank] = 1
  795. end
  796. end
  797. end
  798. print("[JjcNewLadderLogic_FightEnd] 组装数据旧的敌方数据完成")
  799. print("[JjcNewLadderLogic_FightEnd] 匹配一名新的对手开始")
  800. local nNewOneRank = JjcNewLadderDB.JjcNewLadderDB_MatchOneRival(uuid, tChoseRank)
  801. if -1 >= nNewOneRank then
  802. nNewOneRank = nNewEnemyRank
  803. end
  804. -- 组装新的对战人物数据
  805. local tJjcData = JjcNewLadderDB.JjcNewLadderDB_GetDBDataByRank(nNewOneRank)
  806. local tSendData = {
  807. name = tJjcData.name,
  808. head = tJjcData.head,
  809. headFrame = tJjcData.headFrame or 0,
  810. uuid = tJjcData.uuid,
  811. nIsHuman = tJjcData.nIsHuman,
  812. nRank = nNewOneRank,
  813. zhandouli = tJjcData.zhandouli,
  814. point = tJjcData.point,
  815. nServerID = tJjcData.nServerID or Config.SVR_INDEX,
  816. monsterOutID = tJjcData.monsterOutID or 0
  817. }
  818. print("[JjcNewLadderLogic_FightEnd] 组装新的对手数据完成")
  819. print("[JjcNewLadderLogic_FightEnd]")
  820. JjcNewLadderMiddle.JjcNewLadderMiddle_ReplyFightD2C(uuid, uuidDes, tData.nSrcServerID, nNewPlayerRank, tPlayerInfo.point, tOldEnemyData, tSendData)
  821. end
  822. -- 战斗结束(中心 -> 普通)
  823. function JjcNewLadderLogic_FightEndOK(tData)
  824. local uuid, nNewRank, nNewPoint = tData.uuid, tData.nNewRank, tData.nNewPoint
  825. local uuidDes, tNewOneEnemy, tOldEnemyData = tData.uuidDes, tData.tNewOneEnemy, tData.tOldEnemyData
  826. local human = ObjHuman.onlineUuid[uuid]
  827. local bSave = false
  828. if not human then
  829. human = {}
  830. human.db = RoleDBLogic.getDb(uuid)
  831. bSave = true
  832. end
  833. print("[JjcNewLadderLogic_FightEndOK] 战斗结束(中心 -> 普通) ")
  834. JjcNewLadder_SetHumanRank(human, nNewRank)
  835. JjcNewLadder_SetHumanPoint(human, nNewPoint)
  836. -- 更新对战列表数据
  837. print("[JjcNewLadderLogic_FightEndOK] 更新对战列表数据开始 ")
  838. local tEnemy = JjcNewLadder_GetHumanEnemy(human)
  839. local nIndex = nil
  840. for i, v in ipairs(tEnemy) do
  841. if v.uuid == uuidDes then
  842. nIndex = i
  843. else
  844. for _, tUpdateData in ipairs(tOldEnemyData) do
  845. if tUpdateData.uuid == v.uuid then
  846. v.point = tUpdateData.nPoint
  847. v.nRank = tUpdateData.nRank
  848. end
  849. end
  850. end
  851. end
  852. if nIndex then
  853. tEnemy[nIndex] = tNewOneEnemy
  854. else
  855. print("[JjcNewLadderLogic_FightEndOK] 居然找不到对应对战角色数据记录的下标")
  856. end
  857. print("[JjcNewLadderLogic_FightEndOK] 更新对战列表数据结束")
  858. if true == bSave then
  859. print("[JjcNewLadderLogic_FightEndOK] 存一次DB")
  860. RoleDBLogic.saveRole(human.db)
  861. else
  862. JjcNewLadderLogic_TargetFind(human)
  863. end
  864. end
  865. -- 发送战败邮件
  866. function JjcNewLadderLogic_SendFailMailOK(tData)
  867. print("[JjcNewLadderLogic_SendFailMailOK] 获取到战败邮件\n")
  868. table.print_lua_table(tData)
  869. local uuid, szServerName, szName, nNewRank = tData.uuidDes, tData.szServerName, tData.szName, tData.nNewRank
  870. local human = ObjHuman.onlineUuid[uuid]
  871. if not human then
  872. human = {}
  873. human.db = RoleDBLogic.getDb(uuid)
  874. end
  875. local mailConfig = MailExcel.mail[JjcNewLadderDefine.JJC_NEWLADDER_FAIL_MAIL_ID]
  876. local title = mailConfig.title
  877. local senderName = mailConfig.senderName
  878. local content = Util.format(mailConfig.content, szServerName, szName, nNewRank)
  879. print("[JjcNewLadderLogic_SendFailMailOK] 打印邮件信息 title = "..title.." content = "..content)
  880. MailManager.add(MailManager.SYSTEM, human.db._id, title, content, nil, senderName)
  881. print("[JjcNewLadderLogic_SendFailMailOK] 发送邮件结束")
  882. end
  883. -- 发送排名奖励(中心->普通)
  884. function JjcNewLadderLogic_SendPrizeMail(tData)
  885. local tConfig = JjcExcel.skyladderRank
  886. local uuid, nRank = tData.uuid, tData.nRank
  887. print("[JjcNewLadderLogic_SendPrizeMail] 获取到奖励邮件,进行发奖励操作 uuid = "..uuid.." nRank = "..nRank)
  888. local tPrize = nil
  889. for _, v in ipairs(tConfig) do
  890. if v.nMinRank <= nRank and v.nMaxRank >= nRank then
  891. tPrize = v.tPrize
  892. break
  893. end
  894. end
  895. -- 发送奖励
  896. if tPrize then
  897. local mailConfig = MailExcel.mail[JjcNewLadderDefine.JJC_NEWLADDER_RANKPRIZE_MAIL_ID]
  898. local title = mailConfig.title
  899. local senderName = mailConfig.senderName
  900. local content = mailConfig.content
  901. MailManager.add(MailManager.SYSTEM, uuid,
  902. title, Util.format(content, nRank), tPrize, senderName)
  903. print("[JjcNewLadderLogic_SendPrizeMail] 发送邮件奖励结束")
  904. end
  905. end
  906. function JjcNewLadderLogic_QueryWorship(tData)
  907. local human = ObjHuman.onlineUuid[tData.uuid]
  908. if not human then
  909. human = {}
  910. human.db = RoleDBLogic.getDb(tData.uuid)
  911. end
  912. local nNowWorship = human.db.jjcBeWorship
  913. JjcNewLadderMiddle.JjcNewLadderMiddle_QueryWorShipO2C(tData.uuid, tData.nFromServerID, nNowWorship)
  914. end
  915. ---------------------------------- 客户端请求 ----------------------------------------------
  916. -- 请求天梯赛信息
  917. function JjcNewLadderLogic_Query(human)
  918. if false == JjcNewLadderLogic_CheckIsOpen() then
  919. JjcNewLadder_PopNoOpenTips(human)
  920. return
  921. end
  922. if not human.db.JjcNewLadder then
  923. JjcNewLadderLogic_CreatDB(human)
  924. end
  925. if false == JjcNewLadderLogic_GetJoin(human) then
  926. local uuid = human.db._id
  927. if not tQueryJoinPlayer[uuid] then
  928. tQueryJoinPlayer[uuid] = os.time()
  929. JjcNewLadderLogic_JoinLadder(human)
  930. else
  931. if tQueryJoinPlayer[uuid] + JjcNewLadderDefine.JJC_NEWLADDER_JOINTIME <= os.time() then
  932. tQueryJoinPlayer[uuid] = os.time()
  933. JjcNewLadderLogic_JoinLadder(human)
  934. else
  935. return
  936. end
  937. end
  938. else
  939. JjcNewLadder_GetInterfaceInfo(human)
  940. end
  941. end
  942. -- 天梯赛对战记录查询
  943. function JjcNewLadderLogic_RecordQuery(human)
  944. if false == JjcNewLadderLogic_CheckIsOpen() then
  945. JjcNewLadder_PopNoOpenTips(human)
  946. return
  947. end
  948. JjcNewLadder_TryDelRecordList(human)
  949. local tRecordList = JjcNewLadder_GetRecordList(human)
  950. local tMsgData = Msg.gc.GC_JJC_NEW_LADDER_RECORD_QUERY
  951. tMsgData.leftFreeCnt = JjcNewLadder_GetHumanFreeNum(human)
  952. tMsgData.recordList[0] = 0
  953. if tRecordList then
  954. for i, v in ipairs(tRecordList) do
  955. local videoUuid = v.videoUuid
  956. local combatVideo = CombatVideo.getCombatVideo(videoUuid)
  957. if combatVideo then
  958. tMsgData.recordList[0] = tMsgData.recordList[0] + 1
  959. local net = tMsgData.recordList[tMsgData.recordList[0]]
  960. local combatInfo = combatVideo.combatInfo
  961. local parms = combatInfo.endParam and Util.split(combatInfo.endParam, "|")
  962. net.time = combatInfo.time
  963. net.identity = combatVideo._id
  964. if combatInfo.attacker.uuid == human.db._id then
  965. RoleLogic.makeRoleBase(combatInfo.defender, net.roleBase)
  966. net.result = combatInfo.isWin and JJC_RESULT_ATK_WIN or JJC_RESULT_ATK_FAIL
  967. net.jifenChange = tonumber(parms and parms[3]) or 0
  968. else
  969. RoleLogic.makeRoleBase(combatInfo.attacker, net.roleBase)
  970. net.result = (not combatInfo.isWin) and JJC_RESULT_DEF_WIN or JJC_RESULT_DEF_FAIL
  971. net.jifenChange = tonumber(parms and parms[4]) or 0
  972. end
  973. end
  974. end
  975. end
  976. Msg.send(tMsgData, human.fd)
  977. end
  978. -- 天梯赛对手查询
  979. function JjcNewLadderLogic_TargetFind(human)
  980. if false == JjcNewLadderLogic_CheckIsOpen() then
  981. JjcNewLadder_PopNoOpenTips(human)
  982. return
  983. end
  984. JjcNewLadderMiddle.JjcNewLadderMiddle_RefreshEnemy(human)
  985. end
  986. -- 膜拜
  987. function JjcNewLadderLogic_Worship(human, uuid)
  988. if not tLast3RankPlayerInfo then
  989. print("[JjcNewLadderLogic_Worship] 不存在上一轮数据排名前3的数据")
  990. return
  991. end
  992. local nState = JjcNewLadderLogic_GetWorShip(human, uuid)
  993. if nState == JjcNewLadderDefine.JJC_NEWLADDER_WORSHIP then
  994. return
  995. end
  996. local nServerID
  997. for _, v in pairs(tLast3RankPlayerInfo) do
  998. if v.uuid == uuid then
  999. nServerID = v.nServerID
  1000. break
  1001. end
  1002. end
  1003. if not nServerID then
  1004. print("[JjcNewLadderLogic_Worship] 获取对应uuid对应的服务器ID失败 name = "..human.db.name.." uuid = "..uuid)
  1005. return
  1006. end
  1007. JjcNewLadderMiddle.JjcNewLadderMiddle_SendWorShip(human.db._id, uuid, nServerID)
  1008. -- 点赞奖励
  1009. local tItem = {}
  1010. table.insert(tItem, {JjcNewLadderDefine.JJC_NEWLADDER_WORSHIP_GOODID, JjcNewLadderDefine.JJC_NEWLADDER_WORSHIP_GOODNUM})
  1011. BagLogic.addItemList(human, tItem, "jjc_ladder")
  1012. JjcNewLadderLogic_SetWorShip(human, uuid, JjcNewLadderDefine.JJC_NEWLADDER_WORSHIP)
  1013. end
  1014. -- 排行榜查询
  1015. function JjcNewLadderLogic_RankQuery(human)
  1016. if false == JjcNewLadderLogic_CheckIsOpen() then
  1017. JjcNewLadder_PopNoOpenTips(human)
  1018. return
  1019. end
  1020. if not tCacheRankInfo or not tCacheRankInfo.tRankList then
  1021. local uuid = human.db._id
  1022. if tCacheQueryRankPlaeyer[uuid] then
  1023. return
  1024. else
  1025. tCacheQueryRankPlaeyer[uuid] = 1
  1026. if not bQueryRank then
  1027. bQueryRank = true
  1028. JjcNewLadderMiddle.JjcNewLadderMiddle_QueryRankInfo()
  1029. end
  1030. return
  1031. end
  1032. else
  1033. JjcNewLadder_SendRankInfo(human)
  1034. -- 时间过期了,再次请求排行榜数据
  1035. local nNextUpdateTime = tCacheRankInfo.nNextUpdateTime
  1036. if nNextUpdateTime <= os.time() then
  1037. JjcNewLadderMiddle.JjcNewLadderMiddle_QueryRankInfo()
  1038. end
  1039. end
  1040. end
  1041. -- 请求一键挑战 -- 直接获取奖励
  1042. function JjcNewLadderLogic_OneClickChange(human)
  1043. if false == JjcNewLadderLogic_CheckIsOpen() then
  1044. JjcNewLadder_PopNoOpenTips(human)
  1045. return
  1046. end
  1047. local tConfig = JjcExcel.skyladderFightPrize
  1048. local nFreeNum = JjcNewLadder_GetHumanFreeNum(human)
  1049. if 0 >= nFreeNum then
  1050. return
  1051. end
  1052. local tItem = {}
  1053. for _, v in ipairs(tConfig[1].tPrize) do
  1054. local nGoodNum = v[2] * nFreeNum
  1055. local nGoodID = v[1]
  1056. table.insert(tItem, {nGoodID, nGoodNum})
  1057. end
  1058. if nil ~= _G.next(tItem) then
  1059. BagLogic.addItemList(human, tItem, "jjc_ladder")
  1060. JjcNewLadder_SetHumanFreeNum(human, -nFreeNum)
  1061. JjcNewLadderLogic_Query(human)
  1062. end
  1063. end
  1064. -- 请求天梯赛上一轮排名前三
  1065. function JjcNewLadderLogic_LastRankQuery(human)
  1066. print("[JjcNewLadderLogic_LastRankQuery] 进入请求天梯赛上一轮排名前三 操作")
  1067. if not tLast3RankPlayerInfo then
  1068. print("[JjcNewLadderLogic_LastRankQuery] 不存在缓存数据进行操作")
  1069. local uuid = human.db._id
  1070. if tQueryLast3Rank[uuid] then
  1071. return
  1072. end
  1073. tQueryLast3Rank[uuid] = 1
  1074. if bQueryLast == false then
  1075. print("[JjcNewLadderLogic_LastRankQuery] 开始请求中心服")
  1076. JjcNewLadderMiddle.JjcNewLadderMiddle_QueryLastRank()
  1077. bQueryLast = true
  1078. end
  1079. else
  1080. print("[JjcNewLadderLogic_LastRankQuery] 存在缓存数据直接发送")
  1081. JjcNewLadder_SendLast3Rank(human)
  1082. end
  1083. end
  1084. -- 请求排行榜奖励信息
  1085. function JjcNewLadderLogic_RankPrizeQuery(human)
  1086. if false == JjcNewLadderLogic_CheckIsOpen() then
  1087. JjcNewLadder_PopNoOpenTips(human)
  1088. return
  1089. end
  1090. local tMsgData = Msg.gc.GC_JJC_NEW_LADDER_QUERY_RANKPRIZE
  1091. tMsgData.nOwnRank = JjcNewLadder_GetHumanRank(human)
  1092. tMsgData.tOwnPrize[0] = 0
  1093. tMsgData.tRankPrize[0] = 0
  1094. for _, v in ipairs(JjcExcel.skyladderRank) do
  1095. tMsgData.tRankPrize[0] = tMsgData.tRankPrize[0] + 1
  1096. local tData = tMsgData.tRankPrize[tMsgData.tRankPrize[0]]
  1097. tData.nMinRank = v.nMinRank
  1098. tData.nMaxRank = v.nMaxRank
  1099. tData.tList[0] = #v.tPrize
  1100. for nIndex, tItem in ipairs(v.tPrize) do
  1101. local nGoodsID = tItem[1]
  1102. local nGoodNum = tItem[2]
  1103. Grid.makeItem(tData.tList[nIndex], nGoodsID, nGoodNum)
  1104. end
  1105. -- 个人排行榜奖励
  1106. if tData.nMinRank <= tMsgData.nOwnRank and tData.nMaxRank >= tMsgData.nOwnRank then
  1107. tMsgData.tOwnPrize[0] = #v.tPrize
  1108. for nIndex, tItem in ipairs(v.tPrize) do
  1109. local nGoodsID = tItem[1]
  1110. local nGoodNum = tItem[2]
  1111. Grid.makeItem(tMsgData.tOwnPrize[nIndex], nGoodsID, nGoodNum)
  1112. end
  1113. end
  1114. end
  1115. Msg.send(tMsgData, human.fd)
  1116. end
  1117. -- 请求人物所有信息
  1118. function JjcNewLadderLogic_QueryAllInfo(human, uuid, nType)
  1119. if false == JjcNewLadderLogic_CheckIsOpen() then
  1120. JjcNewLadder_PopNoOpenTips(human)
  1121. return
  1122. end
  1123. print("[JjcNewLadderLogic_QueryAllInfo] 请求人物所以信息开始 name = "..human.db.name.." uuid = "..uuid.." nType = "..nType)
  1124. local tPlayInfo = JjcNewLadderLogic_GetInfoByUUID(human, uuid, nType)
  1125. if nil == tPlayInfo then
  1126. print("[JjcNewLadderLogic_QueryAllInfo] 获取所有数据失败 name = "..human.db.name)
  1127. return
  1128. end
  1129. -- 假人不用请求了, 直接组装
  1130. if 0 == tPlayInfo.nIsHuman then
  1131. print("[JjcNewLadderLogic_QueryAllInfo] 当前请求的是机器人")
  1132. local msgRet = Msg.gc.GC_JJC_NEW_LADDER_QUERT_ALLINFO
  1133. msgRet.nType = nType
  1134. -- 参考 makePlayInfoByOther
  1135. RoleLogic.makeOtherPlayInfo(msgRet.data, tPlayInfo)
  1136. msgRet.data.roleBase.uuid = tostring(tPlayInfo.uuid)
  1137. msgRet.data.svrName = tPlayInfo.szServerName or Config.NEW_SVR_INDEX.."区"
  1138. msgRet.data.yjUuid = ""
  1139. print("[JjcNewLadderLogic_QueryAllInfo] 组装数据完成")
  1140. print("[JjcNewLadderLogic_QueryAllInfo] rolebase.uuid = "..msgRet.data.roleBase.uuid.." Type = "..type(msgRet.data.roleBase.uuid))
  1141. for i = 1, msgRet.data.defenceList[0], 1 do
  1142. local tHeroData = msgRet.data.defenceList[i]
  1143. if tHeroData and tHeroData.uuid then
  1144. print("[JjcNewLadderLogic_QueryAllInfo] 组装的英雄对应的 uuid = "..tHeroData.uuid.." type = "..type(tHeroData.uuid))
  1145. end
  1146. end
  1147. Msg.send(msgRet, human.fd)
  1148. else
  1149. print("[JjcNewLadderLogic_QueryAllInfo] 当前请求的是真人")
  1150. local tQueryMsg =
  1151. {
  1152. uuid = uuid,
  1153. nServerIndex = tPlayInfo.nServerID,
  1154. nFrom = CommonDefine.COMMON_PLAY_INFO_JJC,
  1155. nType = nType,
  1156. }
  1157. MiddleCommonLogic.MiddleCommonLogic_GetChatPlayInfo_LW(human, tQueryMsg)
  1158. print("[JjcNewLadderLogic_QueryAllInfo] 先中心服发送请求数据")
  1159. end
  1160. end
  1161. -- 获取到跨服玩家信息
  1162. function JjcNewLadderLogic_GetPlayerInfo(msg)
  1163. local nSrcUID = msg.nSrcUID
  1164. local human = ObjHuman.onlineUuid[nSrcUID]
  1165. if not human then
  1166. print("[JjcNewLadderLogic_GetPlayerInfo] 玩家不在线直接返回")
  1167. return
  1168. end
  1169. print("[JjcNewLadderLogic_GetPlayerInfo] 获取到玩家数据")
  1170. local msgRet = Msg.gc.GC_JJC_NEW_LADDER_QUERT_ALLINFO
  1171. msgRet.nType = msg.nType
  1172. msgRet.data.roleBase = msg.tData.data.roleBase
  1173. msgRet.data.defenceList = msg.tData.data.defenceList
  1174. msgRet.data.svrName = msg.tData.data.svrName
  1175. msgRet.data.yjUuid = msg.tData.data.yjUuid
  1176. Msg.send(msgRet, human.fd)
  1177. end
  1178. ---------------------------------- 战斗相关 ----------------------------------------------
  1179. -- 检测能否战斗
  1180. function CheckCanFight(human, uuidEnemy)
  1181. print("[JjcLadderLogic_CheckCanFight] 开始检测能否战斗")
  1182. JjcNewLadderMiddle.JjcNewLadderMiddle_CheckCanFightBegin(human, uuidEnemy)
  1183. end
  1184. function JjcLadderLogic_TrueFight(human, uuidDes)
  1185. print("[JjcLadderLogic_TrueFight] 当前可以战斗, 开始战斗流程")
  1186. local tPlayInfo = JjcNewLadderLogic_GetInfoByUUID(human, uuidDes, JjcNewLadderDefine.JJC_NEWLADDER_QUERYUID_ENEMY_TYPE)
  1187. if not tPlayInfo then
  1188. print("[JjcLadderLogic_TrueFight] 不存在对应的敌方数据, 上一步是如何通过的")
  1189. return
  1190. end
  1191. -- 扣门票
  1192. -- BagLogic.delItem(human, ItemDefine.ITEM_JJC_TICKET_ID, 3, "jjc_fight")
  1193. local nFreeNum = JjcNewLadder_GetHumanFreeNum(human)
  1194. if nFreeNum > 0 then
  1195. JjcNewLadder_SetHumanFreeNum(human, -1)
  1196. else
  1197. -- local nPayNum = JjcNewLadder_GetHumanPayNum(human)
  1198. -- if nPayNum > 0 then
  1199. -- JjcNewLadder_SetHumanPayNumNum(human, -1)
  1200. -- end
  1201. local nNowNum = BagLogic.getItemCnt(human, ItemDefine.ITEM_JJC_TICKET_ID)
  1202. if JjcNewLadderDefine.JJC_NEWLADDER_COST_ITEM_NUM > nNowNum then
  1203. return
  1204. end
  1205. -- 扣门票
  1206. BagLogic.delItem(human, ItemDefine.ITEM_JJC_TICKET_ID, JjcNewLadderDefine.JJC_NEWLADDER_COST_ITEM_NUM, "jjc_fight")
  1207. end
  1208. if 0 == tPlayInfo.nIsHuman then
  1209. local args = {
  1210. [1] = uuidDes
  1211. }
  1212. print("[JjcLadderLogic_TrueFight] 对战的角色是人机进行对战")
  1213. CombatLogic.combatBegin(human, nil, args, CombatDefine.COMBAT_TYPE15, uuidDes)
  1214. else
  1215. local tData =
  1216. {
  1217. combatType = CombatDefine.COMBAT_TYPE15,
  1218. nServerIndex = tPlayInfo.nServerID,
  1219. param = uuidDes.."|"..human.db._id
  1220. }
  1221. print("[JjcLadderLogic_TrueFight] 与真人开始对战 nServerID = "..tPlayInfo.nServerID)
  1222. MiddleCommonLogic.MiddleCommonLogic_CombatBegin_LW(human, tData)
  1223. end
  1224. end
  1225. -- 调用开始战斗
  1226. function fight(human, args, combatType)
  1227. print("[JjcLadderLogic_fight] 调用开始战斗 ")
  1228. if CombatDefine.COMBAT_TYPE15 ~= combatType then
  1229. return
  1230. end
  1231. -- 对战角色的UID
  1232. local uuidEnemy = args[1]
  1233. local tPlayInfo = JjcNewLadderLogic_GetInfoByUUID(human, uuidEnemy, JjcNewLadderDefine.JJC_NEWLADDER_QUERYUID_ENEMY_TYPE)
  1234. if not tPlayInfo then
  1235. print("[JjcNewLadderLogic_fight] 不存在对应的敌方数据")
  1236. return
  1237. end
  1238. -- 检测挑战次数
  1239. local nFreeNum = JjcNewLadder_GetHumanFreeNum(human)
  1240. if nFreeNum <= 0 then
  1241. local nNowNum = BagLogic.getItemCnt(human, ItemDefine.ITEM_JJC_TICKET_ID)
  1242. if JjcNewLadderDefine.JJC_NEWLADDER_COST_ITEM_NUM > nNowNum then
  1243. print("[JjcNewLadderLogic_fight] 可用的挑战次数不足")
  1244. return
  1245. end
  1246. end
  1247. -- 去中心服查询是否能够战斗
  1248. CheckCanFight(human, uuidEnemy)
  1249. print("[JjcNewLadderLogic_fight] 去中心服查询是否能够战斗结束")
  1250. end
  1251. -- 获取人物对战列表
  1252. function getCombatObjList(human, side, args)
  1253. if side == CombatDefine.ATTACK_SIDE then
  1254. if not human then
  1255. print("[JjcNewLadderLogic_getCombatObjList] 获取进攻方,但是不存在对应的human")
  1256. return
  1257. end
  1258. print("[JjcNewLadderLogic_getCombatObjList] 进攻方 获取人物对战列表")
  1259. return CombatLogic.getHumanObjList(human, CombatDefine.COMBAT_TYPE1)
  1260. elseif CombatDefine.DEFEND_SIDE then
  1261. local uuid = args[1]
  1262. if not uuid then
  1263. print("[JjcNewLadderLogic_getCombatObjList] 获取防守方阵容,但是不存在对应的")
  1264. return
  1265. end
  1266. local fakeHuman = CombatLogic.createCombatFakeHuman(uuid)
  1267. if not fakeHuman then
  1268. print("[JjcNewLadderLogic_getCombatObjList] 获取不到对应的地方db数据")
  1269. return
  1270. end
  1271. print("[JjcNewLadderLogic_getCombatObjList] 防守方 获取人物对战列表")
  1272. local objList, helpList, rolebase, formation,jiban = CombatLogic.getHumanObjList(fakeHuman, CombatDefine.COMBAT_TYPE15)
  1273. if not objList or nil == _G.next(objList) then
  1274. print("[JjcNewLadderLogic_getCombatObjList] 没有获取到对应的天梯赛防守阵容,取默认对战阵容")
  1275. objList, helpList, rolebase, formation,jiban = CombatLogic.getHumanObjList(fakeHuman, CombatDefine.COMBAT_TYPE1)
  1276. end
  1277. return objList, helpList, rolebase, formation,jiban
  1278. else
  1279. print("[JjcNewLadderLogic_getCombatObjList] 不是进攻也不是防守,直接返回")
  1280. return
  1281. end
  1282. end
  1283. -- 获取机器人对应战斗ID
  1284. function getCombatMonsterOutID(human, side, args)
  1285. if side ~= CombatDefine.DEFEND_SIDE then
  1286. return
  1287. end
  1288. print("[JjcNewLadderLogic_getCombatMonsterOutID] 获取机器人对应战斗ID")
  1289. local uuid = args[1]
  1290. local tPlayInfo = JjcNewLadderLogic_GetInfoByUUID(human, uuid, JjcNewLadderDefine.JJC_NEWLADDER_QUERYUID_ENEMY_TYPE)
  1291. if not tPlayInfo then
  1292. return
  1293. end
  1294. if not tPlayInfo.monsterOutID then
  1295. return
  1296. end
  1297. return tPlayInfo.monsterOutID, tPlayInfo.zhandouli
  1298. end
  1299. -- 挑战结束
  1300. function onFightEnd(human, result, combatType, defUuid, combatInfo)
  1301. print("[JjcNewLadderLogic_onFightEnd] 挑战结束")
  1302. local tPrize = result == CombatDefine.RESULT_WIN and JjcExcel.skyladderFightPrize[1] or JjcExcel.skyladderFightPrize[2]
  1303. -- 存对战录像
  1304. print("[JjcNewLadderLogic_onFightEnd] 开始存战斗录像")
  1305. JjcNewLadder_SaveRecord(human, combatInfo)
  1306. print("[JjcNewLadderLogic_onFightEnd] 结束存战斗录像")
  1307. -- 添加战报
  1308. print("[JjcNewLadderLogic_onFightEnd] 开始添加战报")
  1309. local nMyRank = JjcNewLadder_GetHumanRank(human)
  1310. local tPlayInfo = JjcNewLadderLogic_GetInfoByUUID(human, defUuid, JjcNewLadderDefine.JJC_NEWLADDER_QUERYUID_ENEMY_TYPE)
  1311. if tPlayInfo then
  1312. -- 不是玩家重新组装
  1313. if tPlayInfo.nIsHuman == 0 then
  1314. combatInfo.defender.head = tPlayInfo.head
  1315. combatInfo.defender.name = tPlayInfo.name
  1316. combatInfo.defender.lv = 50
  1317. combatInfo.defender.zhandouli = tPlayInfo.zhandouli
  1318. combatInfo.defender.uuid = tPlayInfo.uuid
  1319. end
  1320. WarReportLogic.add(WarReportLogic.WAR_REPORT_3, combatInfo, nMyRank, tPlayInfo.nRank)
  1321. else
  1322. print("[JjcNewLadderLogic_onFightEnd] 不存在对战人物的缓存信息")
  1323. end
  1324. print("[JjcNewLadderLogic_onFightEnd] 结束添加战报")
  1325. local tMsgData = Msg.gc.GC_JJC_NEW_LADDER_AFTER_FIGHT
  1326. tMsgData.result = result
  1327. tMsgData.atkPoint = 0
  1328. tMsgData.atkPointChange = 0
  1329. tMsgData.defPoint = 0
  1330. tMsgData.defPointChange = 0
  1331. tMsgData.items[0] = #tPrize.tPrize
  1332. for i, v in ipairs(tPrize.tPrize) do
  1333. local nGoodsID = v[1]
  1334. local nGoodsNum = v[2]
  1335. Grid.makeItem(tMsgData.items[i], nGoodsID, nGoodsNum)
  1336. end
  1337. local tDefInfo = JjcNewLadderLogic_GetInfoByUUID(human, defUuid, JjcNewLadderDefine.JJC_NEWLADDER_QUERYUID_ENEMY_TYPE)
  1338. if not tDefInfo then
  1339. print("[JjcNewLadderLogic_onFightEnd] 为什么获取不到对应的数据!!!")
  1340. else
  1341. JjcNewLaader_GetBaseInfo(tMsgData.defRole, tDefInfo)
  1342. end
  1343. JjcNewLaader_GetHumanBaseInfo(tMsgData.atkRole, human)
  1344. Msg.send(tMsgData, human.fd)
  1345. -- 给物品
  1346. print("[JjcNewLadderLogic_onFightEnd] 给奖励")
  1347. for _, v in ipairs(tPrize.tPrize) do
  1348. BagLogic.addItem(human, v[1], v[2], "jjc_fight")
  1349. end
  1350. -- BagLogic.addItemList(human, tPrize.tPrize, "jjc_fight")
  1351. -- 获取对战列表的UID,需要刷新
  1352. local tEnemyUuid = JjcNewLaader_GetAllEnemyUID(human)
  1353. -- 通知中心服对战结果
  1354. print("[JjcNewLadderLogic_onFightEnd] 开始通知中心服对战结果")
  1355. JjcNewLadderMiddle.JjcNewLadderMiddle_FightEndO2C(human.db._id, defUuid, result, tEnemyUuid)
  1356. end
  1357. ---------------------------------- 刷新相关 ----------------------------------------------
  1358. function JjcLadderLogic_LaterOperate()
  1359. -- 清除数据
  1360. JjcNewLadderDB.JjcNewLadderDB_OnHourOpen()
  1361. for _, human in pairs(ObjHuman.onlineUuid) do
  1362. JjcNewLadderLogic_CreatDB(human)
  1363. end
  1364. end
  1365. -- 定时处理
  1366. function onHour(nHour)
  1367. print("[JjcLadderLogic_onHour] 进入定时处理 nHour = "..nHour)
  1368. if JjcNewLadderDefine.JJC_NEWLADDER_OPENTIME ~= nHour and JjcNewLadderDefine.JJC_NEWLADDER_ENDTIME ~= nHour then
  1369. print("[JjcLadderLogic_onHour] 不符合条件不进行处理 nHour = "..nHour)
  1370. return
  1371. end
  1372. print("[JjcLadderLogic_onHour] 当前对应的时间为 nHour = "..nHour)
  1373. local nNowTime = os.time()
  1374. local tDate = os.date("*t",nNowTime)
  1375. -- 凌晨
  1376. if JjcNewLadderDefine.JJC_NEWLADDER_OPENTIME == nHour then
  1377. if JjcNewLadderDefine.JJC_NEWLADDER_OPENDAY == tDate.wday then
  1378. JjcNewLadderDB.JjcNewLadderDB_SetEndTime()
  1379. Timer.addLater(JjcNewLadderDefine.JJC_NEWLADDER_OPEN_LATER_TIME, JjcLadderLogic_LaterOperate)
  1380. else
  1381. local nNowEndTime = CommonDB.GetJjcLadderEndTime()
  1382. -- 还在活动时间内
  1383. if nNowEndTime > nNowTime then
  1384. for _, human in pairs(ObjHuman.onlineUuid) do
  1385. if not human.db.JjcNewLadder then
  1386. JjcNewLadderLogic_CreatDB(human)
  1387. else
  1388. local nLastEndTime = JjcNewLadder_GetHumanLastEndTime(human)
  1389. if nNowEndTime > nLastEndTime then
  1390. JjcNewLadderLogic_CreatDB(human)
  1391. else
  1392. local nRefreshTime = JjcNewLadder_GetHumanRefreshTime(human)
  1393. if false == Util.isSameDayByTimes(nRefreshTime, nNowTime) then
  1394. JjcNewLadder_SetHumanRefreshTime(human, nNowTime)
  1395. JjcNewLadder_SetHumanFreeNum(human, JjcNewLadderDefine.JJC_NEWLADDER_JJC_DAY_FREE_NUM)
  1396. print("[JjcLadderLogic_onHour] 玩家定时重置数据完成 name = "..human.db.name)
  1397. end
  1398. end
  1399. end
  1400. end
  1401. end
  1402. end
  1403. elseif JjcNewLadderDefine.JJC_NEWLADDER_ENDDAY == tDate.wday and JjcNewLadderDefine.JJC_NEWLADDER_ENDTIME == nHour then
  1404. print("[JjcLadderLogic_onHour] 进入活动结束流程 nHour = "..nHour)
  1405. JjcNewLadderDB.JjcNewLadderDB_SendRankMail()
  1406. end
  1407. end
  1408. -- 玩家登录处理
  1409. function onLogin(human)
  1410. print("[JjcLadderLogic_onLogin] 玩家登录处理开始 name = "..human.db.name)
  1411. if false == JjcNewLadderLogic_CheckIsOpen() then
  1412. print("[JjcLadderLogic_onLogin] 当前活动未开启直接返回")
  1413. return
  1414. end
  1415. print("[JjcLadderLogic_onLogin] 玩家登录 name = "..human.db.name)
  1416. if not human.db.JjcNewLadder then
  1417. JjcNewLadderLogic_CreatDB(human)
  1418. else
  1419. local nLastEndTime = JjcNewLadder_GetHumanLastEndTime(human)
  1420. local nNowEndTime = CommonDB.GetJjcLadderEndTime()
  1421. print("[JjcLadderLogic_onLogin] 玩家登录 name = "..human.db.name.." nLastEndTime = "..nLastEndTime.." nNowEndTime = "..nNowEndTime)
  1422. if nNowEndTime > nLastEndTime then
  1423. JjcNewLadderLogic_CreatDB(human)
  1424. else
  1425. local nRefreshTime = JjcNewLadder_GetHumanRefreshTime(human)
  1426. local nNowTime = os.time()
  1427. print("[JjcLadderLogic_onLogin] 玩家登录 name = "..human.db.name.." nRefreshTime = "..nRefreshTime.." nNowTime = "..nNowTime)
  1428. if false == Util.isSameDayByTimes(nRefreshTime, nNowTime) then
  1429. JjcNewLadder_SetHumanRefreshTime(human, nNowTime)
  1430. JjcNewLadder_SetHumanFreeNum(human, JjcNewLadderDefine.JJC_NEWLADDER_JJC_DAY_FREE_NUM)
  1431. print("[JjcLadderLogic_onLogin] 玩家登录重置数据完成 name = "..human.db.name)
  1432. end
  1433. end
  1434. end
  1435. end
  1436. -- 获取活动状态
  1437. function getActState()
  1438. local bRet = JjcNewLadderLogic_CheckIsOpen()
  1439. if false == bRet then
  1440. return JjcActLogic.STATE_NOOPEN, 0
  1441. end
  1442. return JjcActLogic.STATE_START, JjcNewLadder_GetLeftTime()
  1443. end
  1444. function isActRed(human)
  1445. if human.db.lv < 50 then
  1446. return false
  1447. end
  1448. if false == JjcNewLadderLogic_CheckIsOpen() then
  1449. return false
  1450. end
  1451. if not human.db.JjcNewLadder then
  1452. JjcNewLadderLogic_CreatDB(human)
  1453. end
  1454. local nFreeNum = JjcNewLadder_GetHumanFreeNum(human)
  1455. if nFreeNum > 0 then
  1456. return true
  1457. end
  1458. local nPayNum = JjcNewLadder_GetHumanPayNum(human)
  1459. if nPayNum > 0 then
  1460. return true
  1461. end
  1462. return false
  1463. end
  1464. function Init()
  1465. JjcNewLadderDB.JjcNewLadderDB_initAfterStart()
  1466. end