jjcNewLadderLogic.lua 65 KB

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