jjcNewLadderLogic.lua 64 KB

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