jjcNewLadderLogic.lua 65 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061106210631064106510661067106810691070107110721073107410751076107710781079108010811082108310841085108610871088108910901091109210931094109510961097109810991100110111021103110411051106110711081109111011111112111311141115111611171118111911201121112211231124112511261127112811291130113111321133113411351136113711381139114011411142114311441145114611471148114911501151115211531154115511561157115811591160116111621163116411651166116711681169117011711172117311741175117611771178117911801181118211831184118511861187118811891190119111921193119411951196119711981199120012011202120312041205120612071208120912101211121212131214121512161217121812191220122112221223122412251226122712281229123012311232123312341235123612371238123912401241124212431244124512461247124812491250125112521253125412551256125712581259126012611262126312641265126612671268126912701271127212731274127512761277127812791280128112821283128412851286128712881289129012911292129312941295129612971298129913001301130213031304130513061307130813091310131113121313131413151316131713181319132013211322132313241325132613271328132913301331133213331334133513361337133813391340134113421343134413451346134713481349135013511352135313541355135613571358135913601361136213631364136513661367136813691370137113721373137413751376137713781379138013811382138313841385138613871388138913901391139213931394139513961397139813991400140114021403140414051406140714081409141014111412141314141415141614171418141914201421142214231424142514261427142814291430143114321433143414351436143714381439144014411442144314441445144614471448144914501451145214531454145514561457145814591460146114621463146414651466146714681469147014711472147314741475147614771478147914801481148214831484148514861487148814891490149114921493149414951496149714981499150015011502150315041505150615071508150915101511151215131514151515161517151815191520152115221523152415251526152715281529153015311532153315341535153615371538153915401541154215431544154515461547154815491550155115521553155415551556155715581559156015611562156315641565156615671568156915701571157215731574157515761577157815791580158115821583158415851586158715881589159015911592159315941595159615971598159916001601160216031604160516061607160816091610161116121613161416151616161716181619162016211622162316241625162616271628162916301631163216331634163516361637163816391640164116421643164416451646164716481649165016511652165316541655165616571658165916601661166216631664166516661667166816691670167116721673167416751676167716781679168016811682168316841685168616871688168916901691169216931694169516961697169816991700170117021703170417051706170717081709171017111712171317141715171617171718171917201721172217231724172517261727172817291730173117321733173417351736173717381739174017411742174317441745174617471748174917501751175217531754175517561757175817591760176117621763176417651766176717681769177017711772177317741775177617771778177917801781178217831784
  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. local nOldRankEnemy = JjcNewLadderDB.JjcNewLadderDB_GetRankByuid(uuidDes)
  784. print("[JjcNewLadderLogic_FightEnd] 当前老玩家的排名 nOldRank = "..nOldRank)
  785. -- 修改为可以继续战斗
  786. tPlayerInfo.nInFight = JjcNewLadderDefine.JJC_NEWLADDER_NOIN_FIGHT
  787. tEnemyInfo.nInFight = JjcNewLadderDefine.JJC_NEWLADDER_NOIN_FIGHT
  788. -- 修改战斗力
  789. tPlayerInfo.zhandouli = tData.nZhanDouLi
  790. --table.print_lua_table(tData)
  791. print("[JjcNewLadderLogic_FightEnd] 战斗结束 (中心->战区数据服)\n")
  792. -- 增加积分(会重新排序)
  793. if nResult == CombatDefine.RESULT_WIN then
  794. print("[JjcNewLadderLogic_FightEnd] 交换排名开始 ")
  795. -- JjcNewLadderDB.JjcNewLadderDB_AddPoint(uuid, 1)
  796. JjcNewLadderDB.JjcNewLadderDB_ExChangeRank(uuid, uuidDes)
  797. print("[JjcNewLadderLogic_FightEnd] 交换排名完成")
  798. end
  799. local nNewPlayerRank = JjcNewLadderDB.JjcNewLadderDB_GetRankByuid(uuid)
  800. local nNewEnemyRank = JjcNewLadderDB.JjcNewLadderDB_GetRankByuid(uuidDes)
  801. print("[JjcNewLadderLogic_FightEnd] 玩家新的排名 nNewPlayerRank = "..nNewPlayerRank)
  802. if nResult == CombatDefine.RESULT_WIN then
  803. -- 真人要发邮件
  804. if tEnemyInfo.nIsHuman == 1 and nOldRankEnemy ~= nNewEnemyRank then
  805. print("[JjcNewLadderLogic_FightEnd] 敌方是真人, 需要发送邮件")
  806. JjcNewLadder_SendFailMail(uuidDes, tEnemyInfo.nServerID, tPlayerInfo.szServerName, tPlayerInfo.name, nNewEnemyRank)
  807. end
  808. end
  809. -- 操作对战列表
  810. local tOldEnemyData, tChoseRank = {}, {}
  811. -- 防止选到已对战的角色
  812. tChoseRank[nNewEnemyRank] = 1
  813. for _, uuidEnemy in ipairs(tData.tEnemyUid) do
  814. if uuidEnemy ~= uuidDes then
  815. local nRank = JjcNewLadderDB.JjcNewLadderDB_GetRankByuid(uuidEnemy)
  816. if nRank then
  817. local tRankData = JjcNewLadderDB.JjcNewLadderDB_GetDBDataByRank(nRank)
  818. table.insert(tOldEnemyData, {uuid = uuidEnemy, nRank = nRank, nPoint = tRankData.point})
  819. tChoseRank[nRank] = 1
  820. end
  821. end
  822. end
  823. print("[JjcNewLadderLogic_FightEnd] 组装数据旧的敌方数据完成")
  824. print("[JjcNewLadderLogic_FightEnd] 匹配一名新的对手开始")
  825. local nNewOneRank = JjcNewLadderDB.JjcNewLadderDB_MatchOneRival(uuid, tChoseRank)
  826. if -1 >= nNewOneRank then
  827. nNewOneRank = nNewEnemyRank
  828. end
  829. -- 组装新的对战人物数据
  830. local tJjcData = JjcNewLadderDB.JjcNewLadderDB_GetDBDataByRank(nNewOneRank)
  831. local tSendData = {
  832. name = tJjcData.name,
  833. head = tJjcData.head,
  834. headFrame = tJjcData.headFrame or 0,
  835. uuid = tJjcData.uuid,
  836. nIsHuman = tJjcData.nIsHuman,
  837. nRank = nNewOneRank,
  838. zhandouli = tJjcData.zhandouli,
  839. point = tJjcData.point,
  840. nServerID = tJjcData.nServerID or Config.SVR_INDEX,
  841. monsterOutID = tJjcData.monsterOutID or 0
  842. }
  843. print("[JjcNewLadderLogic_FightEnd] 组装新的对手数据完成")
  844. print("[JjcNewLadderLogic_FightEnd]")
  845. JjcNewLadderMiddle.JjcNewLadderMiddle_ReplyFightD2C(uuid, uuidDes, tData.nSrcServerID, nNewPlayerRank, tPlayerInfo.point, tOldEnemyData, tSendData)
  846. end
  847. function JjcNewLadderLogic_FightEndOK(tData)
  848. -- 战斗结束(中心 -> 普通)
  849. local uuid, nNewRank, nNewPoint = tData.uuid, tData.nNewRank, tData.nNewPoint
  850. local uuidDes, tNewOneEnemy, tOldEnemyData = tData.uuidDes, tData.tNewOneEnemy, tData.tOldEnemyData
  851. local human = ObjHuman.onlineUuid[uuid]
  852. local bSave = false
  853. if not human then
  854. human = {}
  855. human.db = RoleDBLogic.getDb(uuid)
  856. bSave = true
  857. end
  858. print("[JjcNewLadderLogic_FightEndOK] 战斗结束(中心 -> 普通) ")
  859. JjcNewLadder_SetHumanRank(human, nNewRank)
  860. JjcNewLadder_SetHumanPoint(human, nNewPoint)
  861. -- 更新对战列表数据
  862. print("[JjcNewLadderLogic_FightEndOK] 更新对战列表数据开始 ")
  863. local tEnemy = JjcNewLadder_GetHumanEnemy(human)
  864. local nIndex = nil
  865. for i, v in ipairs(tEnemy) do
  866. if v.uuid == uuidDes then
  867. nIndex = i
  868. else
  869. for _, tUpdateData in ipairs(tOldEnemyData) do
  870. if tUpdateData.uuid == v.uuid then
  871. v.point = tUpdateData.nPoint
  872. v.nRank = tUpdateData.nRank
  873. end
  874. end
  875. end
  876. end
  877. if nIndex then
  878. tEnemy[nIndex] = tNewOneEnemy
  879. else
  880. print("[JjcNewLadderLogic_FightEndOK] 居然找不到对应对战角色数据记录的下标")
  881. end
  882. print("[JjcNewLadderLogic_FightEndOK] 更新对战列表数据结束")
  883. if true == bSave then
  884. print("[JjcNewLadderLogic_FightEndOK] 存一次DB")
  885. RoleDBLogic.saveRole(human.db)
  886. else
  887. JjcNewLadderLogic_TargetFind(human)
  888. RoleSystemLogic.onDot(human,RoleSystemDefine.ROLE_SYS_ID_1300)
  889. end
  890. end
  891. -- 发送战败邮件
  892. function JjcNewLadderLogic_SendFailMailOK(tData)
  893. print("[JjcNewLadderLogic_SendFailMailOK] 获取到战败邮件\n")
  894. table.print_lua_table(tData)
  895. local uuid, szServerName, szName, nNewRank = tData.uuidDes, tData.szServerName, tData.szName, tData.nNewRank
  896. local human = ObjHuman.onlineUuid[uuid]
  897. local bSave = false
  898. if not human then
  899. human = {}
  900. human.db = RoleDBLogic.getDb(uuid)
  901. bSave = true
  902. end
  903. local mailConfig = MailExcel.mail[JjcNewLadderDefine.JJC_NEWLADDER_FAIL_MAIL_ID]
  904. local title = mailConfig.title
  905. local senderName = mailConfig.senderName
  906. local content = Util.format(mailConfig.content, szServerName, szName, nNewRank)
  907. print("[JjcNewLadderLogic_SendFailMailOK] 打印邮件信息 title = "..title.." content = "..content)
  908. MailManager.add(MailManager.SYSTEM, human.db._id, title, content, nil, senderName)
  909. print("[JjcNewLadderLogic_SendFailMailOK] 发送邮件结束")
  910. -- 改变排名
  911. JjcNewLadder_SetHumanRank(human, nNewRank)
  912. if bSave == true then
  913. RoleDBLogic.saveRole(human.db)
  914. end
  915. end
  916. -- 发送排名奖励(中心->普通)
  917. function JjcNewLadderLogic_SendPrizeMail(tData)
  918. local tConfig = JjcExcel.skyladderRank
  919. local uuid, nRank = tData.uuid, tData.nRank
  920. print("[JjcNewLadderLogic_SendPrizeMail] 获取到奖励邮件,进行发奖励操作 uuid = "..uuid.." nRank = "..nRank)
  921. local tPrize = nil
  922. for _, v in ipairs(tConfig) do
  923. if v.nMinRank <= nRank and v.nMaxRank >= nRank then
  924. tPrize = v.tPrize
  925. break
  926. end
  927. end
  928. -- 发送奖励
  929. if tPrize then
  930. local mailConfig = MailExcel.mail[JjcNewLadderDefine.JJC_NEWLADDER_RANKPRIZE_MAIL_ID]
  931. local title = mailConfig.title
  932. local senderName = mailConfig.senderName
  933. local content = mailConfig.content
  934. MailManager.add(MailManager.SYSTEM, uuid,
  935. title, Util.format(content, nRank), tPrize, senderName)
  936. print("[JjcNewLadderLogic_SendPrizeMail] 发送邮件奖励结束")
  937. end
  938. end
  939. function JjcNewLadderLogic_QueryWorship(tData)
  940. local human = ObjHuman.onlineUuid[tData.uuid]
  941. if not human then
  942. human = {}
  943. human.db = RoleDBLogic.getDb(tData.uuid)
  944. end
  945. local nNowWorship = human.db.jjcBeWorship
  946. JjcNewLadderMiddle.JjcNewLadderMiddle_QueryWorShipO2C(tData.uuid, tData.nFromServerID, nNowWorship)
  947. end
  948. ---------------------------------- 客户端请求 ----------------------------------------------
  949. -- 请求天梯赛信息
  950. function JjcNewLadderLogic_Query(human)
  951. if not human.db.JjcNewLadder then
  952. JjcNewLadderLogic_CreatDB(human)
  953. end
  954. print("[JjcNewLadderLogic_Query] 请求天梯赛信息")
  955. if false == JjcNewLadderLogic_GetJoin(human) then
  956. if true == JjcNewLadderLogic_CheckIsOpen() then
  957. local uuid = human.db._id
  958. if not tQueryJoinPlayer[uuid] then
  959. tQueryJoinPlayer[uuid] = os.time()
  960. JjcNewLadderLogic_JoinLadder(human)
  961. else
  962. if tQueryJoinPlayer[uuid] + JjcNewLadderDefine.JJC_NEWLADDER_JOINTIME <= os.time() then
  963. tQueryJoinPlayer[uuid] = os.time()
  964. JjcNewLadderLogic_JoinLadder(human)
  965. else
  966. return
  967. end
  968. end
  969. else
  970. JjcNewLadder_GetInterfaceInfo(human)
  971. end
  972. else
  973. JjcNewLadder_GetInterfaceInfo(human)
  974. end
  975. end
  976. -- 天梯赛对战记录查询
  977. function JjcNewLadderLogic_RecordQuery(human)
  978. JjcNewLadder_TryDelRecordList(human)
  979. local tRecordList = JjcNewLadder_GetRecordList(human)
  980. local tMsgData = Msg.gc.GC_JJC_NEW_LADDER_RECORD_QUERY
  981. tMsgData.leftFreeCnt = JjcNewLadder_GetHumanFreeNum(human)
  982. tMsgData.recordList[0] = 0
  983. if tRecordList then
  984. for i, v in ipairs(tRecordList) do
  985. local videoUuid = v.videoUuid
  986. local combatVideo = CombatVideo.getCombatVideo(videoUuid)
  987. if combatVideo then
  988. tMsgData.recordList[0] = tMsgData.recordList[0] + 1
  989. local net = tMsgData.recordList[tMsgData.recordList[0]]
  990. local combatInfo = combatVideo.combatInfo
  991. local parms = combatInfo.endParam and Util.split(combatInfo.endParam, "|")
  992. net.time = combatInfo.time
  993. net.identity = combatVideo._id
  994. if combatInfo.attacker.uuid == human.db._id then
  995. RoleLogic.makeRoleBase(combatInfo.defender, net.roleBase)
  996. net.result = combatInfo.isWin and JJC_RESULT_ATK_WIN or JJC_RESULT_ATK_FAIL
  997. net.jifenChange = tonumber(parms and parms[3]) or 0
  998. else
  999. RoleLogic.makeRoleBase(combatInfo.attacker, net.roleBase)
  1000. net.result = (not combatInfo.isWin) and JJC_RESULT_DEF_WIN or JJC_RESULT_DEF_FAIL
  1001. net.jifenChange = tonumber(parms and parms[4]) or 0
  1002. end
  1003. end
  1004. end
  1005. end
  1006. Msg.send(tMsgData, human.fd)
  1007. end
  1008. -- 天梯赛对手查询
  1009. function JjcNewLadderLogic_TargetFind(human)
  1010. if false == JjcNewLadderLogic_CheckIsOpen() then
  1011. JjcNewLadder_PopNoOpenTips(human)
  1012. return
  1013. end
  1014. JjcNewLadderMiddle.JjcNewLadderMiddle_RefreshEnemy(human)
  1015. end
  1016. -- 膜拜
  1017. function JjcNewLadderLogic_Worship(human, uuid)
  1018. if not tLast3RankPlayerInfo or not tLast3RankPlayerInfo.tLastRankInfo then
  1019. print("[JjcNewLadderLogic_Worship] 不存在上一轮数据排名前3的数据")
  1020. return
  1021. end
  1022. local nState = JjcNewLadderLogic_GetWorShip(human, uuid)
  1023. if nState == JjcNewLadderDefine.JJC_NEWLADDER_WORSHIP then
  1024. return
  1025. end
  1026. local nServerID
  1027. for _, v in pairs(tLast3RankPlayerInfo.tLastRankInfo) do
  1028. if v.uuid == uuid then
  1029. nServerID = v.nServerID
  1030. break
  1031. end
  1032. end
  1033. if not nServerID then
  1034. print("[JjcNewLadderLogic_Worship] 获取对应uuid对应的服务器ID失败 name = "..human.db.name.." uuid = "..uuid)
  1035. return
  1036. end
  1037. JjcNewLadderMiddle.JjcNewLadderMiddle_SendWorShip(human.db._id, uuid, nServerID)
  1038. -- 点赞奖励
  1039. local tItem = {}
  1040. table.insert(tItem, {JjcNewLadderDefine.JJC_NEWLADDER_WORSHIP_GOODID, JjcNewLadderDefine.JJC_NEWLADDER_WORSHIP_GOODNUM})
  1041. BagLogic.addItemList(human, tItem, "jjc_ladder")
  1042. JjcNewLadderLogic_SetWorShip(human, uuid, JjcNewLadderDefine.JJC_NEWLADDER_WORSHIP)
  1043. end
  1044. -- 排行榜查询
  1045. function JjcNewLadderLogic_RankQuery(human)
  1046. if not tCacheRankInfo or not tCacheRankInfo.tRankList then
  1047. local uuid = human.db._id
  1048. if tCacheQueryRankPlaeyer[uuid] then
  1049. return
  1050. else
  1051. tCacheQueryRankPlaeyer[uuid] = 1
  1052. if not bQueryRank then
  1053. bQueryRank = true
  1054. JjcNewLadderMiddle.JjcNewLadderMiddle_QueryRankInfo()
  1055. end
  1056. return
  1057. end
  1058. else
  1059. JjcNewLadder_SendRankInfo(human)
  1060. -- 时间过期了,再次请求排行榜数据
  1061. local nNextUpdateTime = tCacheRankInfo.nNextUpdateTime
  1062. if nNextUpdateTime <= os.time() then
  1063. JjcNewLadderMiddle.JjcNewLadderMiddle_QueryRankInfo()
  1064. end
  1065. end
  1066. end
  1067. -- 请求一键挑战 -- 直接获取奖励
  1068. function JjcNewLadderLogic_OneClickChange(human)
  1069. if false == JjcNewLadderLogic_CheckIsOpen() then
  1070. JjcNewLadder_PopNoOpenTips(human)
  1071. return
  1072. end
  1073. local tConfig = JjcExcel.skyladderFightPrize
  1074. local nFreeNum = JjcNewLadder_GetHumanFreeNum(human)
  1075. if 0 >= nFreeNum then
  1076. return
  1077. end
  1078. local tItem = {}
  1079. for _, v in ipairs(tConfig[1].tPrize) do
  1080. local nGoodNum = v[2] * nFreeNum
  1081. local nGoodID = v[1]
  1082. table.insert(tItem, {nGoodID, nGoodNum})
  1083. end
  1084. if nil ~= _G.next(tItem) then
  1085. BagLogic.addItemList(human, tItem, "jjc_ladder")
  1086. JjcNewLadder_SetHumanFreeNum(human, -nFreeNum)
  1087. JjcNewLadderLogic_Query(human)
  1088. RoleSystemLogic.onDot(human,RoleSystemDefine.ROLE_SYS_ID_1300)
  1089. end
  1090. end
  1091. -- 请求天梯赛上一轮排名前三
  1092. function JjcNewLadderLogic_LastRankQuery(human)
  1093. print("[JjcNewLadderLogic_LastRankQuery] 进入请求天梯赛上一轮排名前三 操作")
  1094. if not tLast3RankPlayerInfo then
  1095. print("[JjcNewLadderLogic_LastRankQuery] 不存在缓存数据进行操作")
  1096. local uuid = human.db._id
  1097. if tQueryLast3Rank[uuid] then
  1098. return
  1099. end
  1100. tQueryLast3Rank[uuid] = 1
  1101. if bQueryLast == false then
  1102. print("[JjcNewLadderLogic_LastRankQuery] 开始请求中心服")
  1103. JjcNewLadderMiddle.JjcNewLadderMiddle_QueryLastRank()
  1104. bQueryLast = true
  1105. end
  1106. else
  1107. print("[JjcNewLadderLogic_LastRankQuery] 存在缓存数据直接发送")
  1108. JjcNewLadder_SendLast3Rank(human)
  1109. end
  1110. end
  1111. -- 请求排行榜奖励信息
  1112. function JjcNewLadderLogic_RankPrizeQuery(human)
  1113. local tMsgData = Msg.gc.GC_JJC_NEW_LADDER_QUERY_RANKPRIZE
  1114. tMsgData.nOwnRank = JjcNewLadder_GetHumanRank(human)
  1115. tMsgData.tOwnPrize[0] = 0
  1116. tMsgData.tRankPrize[0] = 0
  1117. for _, v in ipairs(JjcExcel.skyladderRank) do
  1118. tMsgData.tRankPrize[0] = tMsgData.tRankPrize[0] + 1
  1119. local tData = tMsgData.tRankPrize[tMsgData.tRankPrize[0]]
  1120. tData.nMinRank = v.nMinRank
  1121. tData.nMaxRank = v.nMaxRank
  1122. tData.tList[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(tData.tList[nIndex], nGoodsID, nGoodNum)
  1127. end
  1128. -- 个人排行榜奖励
  1129. if tData.nMinRank <= tMsgData.nOwnRank and tData.nMaxRank >= tMsgData.nOwnRank then
  1130. tMsgData.tOwnPrize[0] = #v.tPrize
  1131. for nIndex, tItem in ipairs(v.tPrize) do
  1132. local nGoodsID = tItem[1]
  1133. local nGoodNum = tItem[2]
  1134. Grid.makeItem(tMsgData.tOwnPrize[nIndex], nGoodsID, nGoodNum)
  1135. end
  1136. end
  1137. end
  1138. Msg.send(tMsgData, human.fd)
  1139. end
  1140. -- 请求人物所有信息
  1141. function JjcNewLadderLogic_QueryAllInfo(human, uuid, nType)
  1142. if false == JjcNewLadderLogic_CheckIsOpen() then
  1143. JjcNewLadder_PopNoOpenTips(human)
  1144. return
  1145. end
  1146. print("[JjcNewLadderLogic_QueryAllInfo] 请求人物所以信息开始 name = "..human.db.name.." uuid = "..uuid.." nType = "..nType)
  1147. local tPlayInfo = JjcNewLadderLogic_GetInfoByUUID(human, uuid, nType)
  1148. if nil == tPlayInfo then
  1149. print("[JjcNewLadderLogic_QueryAllInfo] 获取所有数据失败 name = "..human.db.name)
  1150. return
  1151. end
  1152. -- 假人不用请求了, 直接组装
  1153. if 0 == tPlayInfo.nIsHuman then
  1154. print("[JjcNewLadderLogic_QueryAllInfo] 当前请求的是机器人")
  1155. local msgRet = Msg.gc.GC_JJC_NEW_LADDER_QUERT_ALLINFO
  1156. msgRet.nType = nType
  1157. -- 参考 makePlayInfoByOther
  1158. RoleLogic.makeOtherPlayInfo(msgRet.data, tPlayInfo)
  1159. msgRet.data.roleBase.uuid = tostring(tPlayInfo.uuid)
  1160. msgRet.data.svrName = tPlayInfo.szServerName or Config.NEW_SVR_INDEX.."区"
  1161. msgRet.data.yjUuid = ""
  1162. print("[JjcNewLadderLogic_QueryAllInfo] 组装数据完成")
  1163. print("[JjcNewLadderLogic_QueryAllInfo] rolebase.uuid = "..msgRet.data.roleBase.uuid.." Type = "..type(msgRet.data.roleBase.uuid))
  1164. for i = 1, msgRet.data.defenceList[0], 1 do
  1165. local tHeroData = msgRet.data.defenceList[i]
  1166. if tHeroData and tHeroData.uuid then
  1167. print("[JjcNewLadderLogic_QueryAllInfo] 组装的英雄对应的 uuid = "..tHeroData.uuid.." type = "..type(tHeroData.uuid))
  1168. end
  1169. end
  1170. Msg.send(msgRet, human.fd)
  1171. else
  1172. print("[JjcNewLadderLogic_QueryAllInfo] 当前请求的是真人")
  1173. local tQueryMsg =
  1174. {
  1175. uuid = uuid,
  1176. nServerIndex = tPlayInfo.nServerID,
  1177. nFrom = CommonDefine.COMMON_PLAY_INFO_JJC,
  1178. nType = nType,
  1179. }
  1180. MiddleCommonLogic.MiddleCommonLogic_GetChatPlayInfo_LW(human, tQueryMsg)
  1181. print("[JjcNewLadderLogic_QueryAllInfo] 先中心服发送请求数据")
  1182. end
  1183. end
  1184. -- 获取到跨服玩家信息
  1185. function JjcNewLadderLogic_GetPlayerInfo(msg)
  1186. local nSrcUID = msg.nSrcUID
  1187. local human = ObjHuman.onlineUuid[nSrcUID]
  1188. if not human then
  1189. print("[JjcNewLadderLogic_GetPlayerInfo] 玩家不在线直接返回")
  1190. return
  1191. end
  1192. print("[JjcNewLadderLogic_GetPlayerInfo] 获取到玩家数据")
  1193. local msgRet = Msg.gc.GC_JJC_NEW_LADDER_QUERT_ALLINFO
  1194. msgRet.nType = msg.nType
  1195. msgRet.data.roleBase = msg.tData.data.roleBase
  1196. msgRet.data.defenceList = msg.tData.data.defenceList
  1197. msgRet.data.svrName = msg.tData.data.svrName
  1198. msgRet.data.yjUuid = msg.tData.data.yjUuid
  1199. Msg.send(msgRet, human.fd)
  1200. end
  1201. ---------------------------------- 战斗相关 ----------------------------------------------
  1202. -- 检测能否战斗
  1203. function CheckCanFight(human, uuidEnemy)
  1204. print("[JjcLadderLogic_CheckCanFight] 开始检测能否战斗")
  1205. if false == JjcNewLadderLogic_CheckIsOpen() then
  1206. JjcNewLadder_PopNoOpenTips(human)
  1207. return
  1208. end
  1209. JjcNewLadderMiddle.JjcNewLadderMiddle_CheckCanFightBegin(human, uuidEnemy)
  1210. end
  1211. function JjcLadderLogic_TrueFight(human, uuidDes)
  1212. print("[JjcLadderLogic_TrueFight] 当前可以战斗, 开始战斗流程")
  1213. local tPlayInfo = JjcNewLadderLogic_GetInfoByUUID(human, uuidDes, JjcNewLadderDefine.JJC_NEWLADDER_QUERYUID_ENEMY_TYPE)
  1214. if not tPlayInfo then
  1215. print("[JjcLadderLogic_TrueFight] 不存在对应的敌方数据, 上一步是如何通过的")
  1216. return
  1217. end
  1218. -- 扣门票
  1219. -- BagLogic.delItem(human, ItemDefine.ITEM_JJC_TICKET_ID, 3, "jjc_fight")
  1220. local nFreeNum = JjcNewLadder_GetHumanFreeNum(human)
  1221. if nFreeNum > 0 then
  1222. JjcNewLadder_SetHumanFreeNum(human, -1)
  1223. else
  1224. -- local nPayNum = JjcNewLadder_GetHumanPayNum(human)
  1225. -- if nPayNum > 0 then
  1226. -- JjcNewLadder_SetHumanPayNumNum(human, -1)
  1227. -- end
  1228. local nNowNum = BagLogic.getItemCnt(human, ItemDefine.ITEM_JJC_TICKET_ID)
  1229. if JjcNewLadderDefine.JJC_NEWLADDER_COST_ITEM_NUM > nNowNum then
  1230. return
  1231. end
  1232. -- 扣门票
  1233. BagLogic.delItem(human, ItemDefine.ITEM_JJC_TICKET_ID, JjcNewLadderDefine.JJC_NEWLADDER_COST_ITEM_NUM, "jjc_fight")
  1234. end
  1235. if 0 == tPlayInfo.nIsHuman then
  1236. local args = {
  1237. [1] = uuidDes
  1238. }
  1239. print("[JjcLadderLogic_TrueFight] 对战的角色是人机进行对战")
  1240. CombatLogic.combatBegin(human, nil, args, CombatDefine.COMBAT_TYPE15, uuidDes)
  1241. else
  1242. local tData =
  1243. {
  1244. combatType = CombatDefine.COMBAT_TYPE15,
  1245. nServerIndex = tPlayInfo.nServerID,
  1246. param = uuidDes.."|"..human.db._id
  1247. }
  1248. print("[JjcLadderLogic_TrueFight] 与真人开始对战 nServerID = "..tPlayInfo.nServerID)
  1249. MiddleCommonLogic.MiddleCommonLogic_CombatBegin_LW(human, tData)
  1250. end
  1251. end
  1252. -- 调用开始战斗
  1253. function fight(human, args, combatType)
  1254. print("[JjcLadderLogic_fight] 调用开始战斗 ")
  1255. if CombatDefine.COMBAT_TYPE15 ~= combatType then
  1256. return
  1257. end
  1258. -- 对战角色的UID
  1259. local uuidEnemy = args[1]
  1260. local tPlayInfo = JjcNewLadderLogic_GetInfoByUUID(human, uuidEnemy, JjcNewLadderDefine.JJC_NEWLADDER_QUERYUID_ENEMY_TYPE)
  1261. if not tPlayInfo then
  1262. print("[JjcNewLadderLogic_fight] 不存在对应的敌方数据")
  1263. return
  1264. end
  1265. -- 检测挑战次数
  1266. local nFreeNum = JjcNewLadder_GetHumanFreeNum(human)
  1267. if nFreeNum <= 0 then
  1268. local nNowNum = BagLogic.getItemCnt(human, ItemDefine.ITEM_JJC_TICKET_ID)
  1269. if JjcNewLadderDefine.JJC_NEWLADDER_COST_ITEM_NUM > nNowNum then
  1270. print("[JjcNewLadderLogic_fight] 可用的挑战次数不足")
  1271. return
  1272. end
  1273. end
  1274. -- 去中心服查询是否能够战斗
  1275. CheckCanFight(human, uuidEnemy)
  1276. print("[JjcNewLadderLogic_fight] 去中心服查询是否能够战斗结束")
  1277. end
  1278. -- 获取人物对战列表
  1279. function getCombatObjList(human, side, args)
  1280. if side == CombatDefine.ATTACK_SIDE then
  1281. if not human then
  1282. print("[JjcNewLadderLogic_getCombatObjList] 获取进攻方,但是不存在对应的human")
  1283. return
  1284. end
  1285. print("[JjcNewLadderLogic_getCombatObjList] 进攻方 获取人物对战列表")
  1286. local objList, helpList, rolebase, formation,jiban, elfList = CombatLogic.getHumanObjList(human, CombatDefine.COMBAT_TYPE16)
  1287. if not objList or nil == _G.next(objList) then
  1288. print("[JjcNewLadderLogic_getCombatObjList] 没有获取到对应的天梯赛进攻方防守阵容,取默认对战阵容")
  1289. objList, helpList, rolebase, formation,jiban, elfList = CombatLogic.getHumanObjList(human, CombatDefine.COMBAT_TYPE1)
  1290. end
  1291. return objList, helpList, rolebase, formation,jiban, elfList
  1292. elseif CombatDefine.DEFEND_SIDE == side then
  1293. local uuid = args[1]
  1294. if not uuid then
  1295. print("[JjcNewLadderLogic_getCombatObjList] 获取防守方阵容,但是不存在对应的")
  1296. return
  1297. end
  1298. local fakeHuman = CombatLogic.createCombatFakeHuman(uuid)
  1299. if not fakeHuman then
  1300. print("[JjcNewLadderLogic_getCombatObjList] 获取不到对应的地方db数据")
  1301. return
  1302. end
  1303. print("[JjcNewLadderLogic_getCombatObjList] 防守方 获取人物对战列表")
  1304. local objList, helpList, rolebase, formation,jiban, elfList = CombatLogic.getHumanObjList(fakeHuman, CombatDefine.COMBAT_TYPE16)
  1305. if not objList or nil == _G.next(objList) then
  1306. print("[JjcNewLadderLogic_getCombatObjList] 没有获取到对应的天梯赛防守阵容,取默认对战阵容")
  1307. objList, helpList, rolebase, formation,jiban, elfList = CombatLogic.getHumanObjList(fakeHuman, CombatDefine.COMBAT_TYPE1)
  1308. end
  1309. return objList, helpList, rolebase, formation,jiban, elfList
  1310. else
  1311. print("[JjcNewLadderLogic_getCombatObjList] 不是进攻也不是防守,直接返回")
  1312. return
  1313. end
  1314. end
  1315. -- 获取机器人对应战斗ID
  1316. function getCombatMonsterOutID(human, side, args)
  1317. if side ~= CombatDefine.DEFEND_SIDE then
  1318. return
  1319. end
  1320. print("[JjcNewLadderLogic_getCombatMonsterOutID] 获取机器人对应战斗ID")
  1321. local uuid = args[1]
  1322. local tPlayInfo = JjcNewLadderLogic_GetInfoByUUID(human, uuid, JjcNewLadderDefine.JJC_NEWLADDER_QUERYUID_ENEMY_TYPE)
  1323. if not tPlayInfo then
  1324. return
  1325. end
  1326. if not tPlayInfo.monsterOutID then
  1327. return
  1328. end
  1329. return tPlayInfo.monsterOutID, tPlayInfo.zhandouli
  1330. end
  1331. -- 挑战结束
  1332. function onFightEnd(human, result, combatType, defUuid, combatInfo)
  1333. print("[JjcNewLadderLogic_onFightEnd] 挑战结束 result = "..result)
  1334. local tPrize = result == CombatDefine.RESULT_WIN and JjcExcel.skyladderFightPrize[1] or JjcExcel.skyladderFightPrize[2]
  1335. if result == CombatDefine.RESULT_WIN then
  1336. WarOrder.trigger(human, 5) -- 5 表示战令类型中的天梯战令
  1337. end
  1338. -- 存对战录像
  1339. print("[JjcNewLadderLogic_onFightEnd] 开始存战斗录像")
  1340. JjcNewLadder_SaveRecord(human, combatInfo)
  1341. print("[JjcNewLadderLogic_onFightEnd] 结束存战斗录像")
  1342. -- 添加战报
  1343. print("[JjcNewLadderLogic_onFightEnd] 开始添加战报")
  1344. local nMyRank = JjcNewLadder_GetHumanRank(human)
  1345. local tPlayInfo = JjcNewLadderLogic_GetInfoByUUID(human, defUuid, JjcNewLadderDefine.JJC_NEWLADDER_QUERYUID_ENEMY_TYPE)
  1346. if tPlayInfo then
  1347. -- 不是玩家重新组装
  1348. if tPlayInfo.nIsHuman == 0 then
  1349. combatInfo.defender.head = tPlayInfo.head
  1350. combatInfo.defender.name = tPlayInfo.name
  1351. combatInfo.defender.lv = 50
  1352. combatInfo.defender.zhandouli = tPlayInfo.zhandouli
  1353. combatInfo.defender.uuid = tPlayInfo.uuid
  1354. end
  1355. WarReportLogic.add(WarReportLogic.WAR_REPORT_3, combatInfo, nMyRank, tPlayInfo.nRank)
  1356. else
  1357. print("[JjcNewLadderLogic_onFightEnd] 不存在对战人物的缓存信息")
  1358. end
  1359. print("[JjcNewLadderLogic_onFightEnd] 结束添加战报")
  1360. local tMsgData = Msg.gc.GC_JJC_NEW_LADDER_AFTER_FIGHT
  1361. tMsgData.result = result
  1362. tMsgData.atkPoint = 0
  1363. tMsgData.atkPointChange = 0
  1364. tMsgData.defPoint = 0
  1365. tMsgData.defPointChange = 0
  1366. tMsgData.items[0] = #tPrize.tPrize
  1367. for i, v in ipairs(tPrize.tPrize) do
  1368. local nGoodsID = v[1]
  1369. local nGoodsNum = v[2]
  1370. Grid.makeItem(tMsgData.items[i], nGoodsID, nGoodsNum)
  1371. end
  1372. local tDefInfo = JjcNewLadderLogic_GetInfoByUUID(human, defUuid, JjcNewLadderDefine.JJC_NEWLADDER_QUERYUID_ENEMY_TYPE)
  1373. if not tDefInfo then
  1374. print("[JjcNewLadderLogic_onFightEnd] 为什么获取不到对应的数据!!!")
  1375. else
  1376. JjcNewLaader_GetBaseInfo(tMsgData.defRole, tDefInfo)
  1377. end
  1378. JjcNewLaader_GetHumanBaseInfo(tMsgData.atkRole, human)
  1379. Msg.send(tMsgData, human.fd)
  1380. -- 给物品
  1381. print("[JjcNewLadderLogic_onFightEnd] 给奖励")
  1382. for _, v in ipairs(tPrize.tPrize) do
  1383. BagLogic.addItem(human, v[1], v[2], "jjc_fight")
  1384. end
  1385. -- BagLogic.addItemList(human, tPrize.tPrize, "jjc_fight")
  1386. -- 获取对战列表的UID,需要刷新
  1387. local tEnemyUuid = JjcNewLaader_GetAllEnemyUID(human)
  1388. -- 通知中心服对战结果
  1389. print("[JjcNewLadderLogic_onFightEnd] 开始通知中心服对战结果")
  1390. JjcNewLadderMiddle.JjcNewLadderMiddle_FightEndO2C(human.db._id, defUuid, result, tEnemyUuid, human.db.zhandouli)
  1391. RoleSystemLogic.onDot(human,RoleSystemDefine.ROLE_SYS_ID_1300)
  1392. end
  1393. ---------------------------------- 刷新相关 ----------------------------------------------
  1394. -- 延迟几秒处理在线玩家
  1395. function JjcLadderLogic_LaterResetHuman()
  1396. for _, human in pairs(ObjHuman.onlineUuid) do
  1397. JjcNewLadderLogic_CreatDB(human)
  1398. JjcNewLadderLogic_Query(human)
  1399. JjcNewLadderLogic_WriteLog("[JjcLadderLogic_LaterResetHuman] 对在线玩家数据进行了重置,重新查询数据 进行处理 name = "..human.db.name)
  1400. end
  1401. end
  1402. function JjcLadderLogic_LaterOperate()
  1403. JjcNewLadderDB.JjcNewLadderDB_SetEndTime()
  1404. JjcNewLadderLogic_WriteLog("[JjcLadderLogic_LaterOperate] 准点处理,重新生成了结束时间")
  1405. -- 清除数据
  1406. JjcNewLadderDB.JjcNewLadderDB_OnHourOpen()
  1407. JjcNewLadderLogic_WriteLog("[JjcLadderLogic_LaterOperate] 清楚数据结束")
  1408. local nRandTime = math.random(10, 20)
  1409. Timer.addLater(nRandTime, JjcLadderLogic_LaterResetHuman)
  1410. end
  1411. -- 定时处理
  1412. function onHour(nHour)
  1413. print("[JjcLadderLogic_onHour] 进入定时处理 nHour = "..nHour)
  1414. if JjcNewLadderDefine.JJC_NEWLADDER_OPENTIME ~= nHour and JjcNewLadderDefine.JJC_NEWLADDER_ENDTIME ~= nHour then
  1415. print("[JjcLadderLogic_onHour] 不符合条件不进行处理 nHour = "..nHour)
  1416. return
  1417. end
  1418. print("[JjcLadderLogic_onHour] 当前对应的时间为 nHour = "..nHour)
  1419. local nNowTime = os.time()
  1420. local tDate = os.date("*t",nNowTime)
  1421. -- 凌晨
  1422. if JjcNewLadderDefine.JJC_NEWLADDER_OPENTIME == nHour then
  1423. if JjcNewLadderDefine.JJC_NEWLADDER_OPENDAY == tDate.wday then
  1424. Timer.addLater(JjcNewLadderDefine.JJC_NEWLADDER_OPEN_LATER_TIME, JjcLadderLogic_LaterOperate)
  1425. else
  1426. local nNowEndTime = CommonDB.GetJjcLadderEndTime()
  1427. -- 还在活动时间内
  1428. if nNowEndTime > nNowTime then
  1429. for _, human in pairs(ObjHuman.onlineUuid) do
  1430. if not human.db.JjcNewLadder then
  1431. JjcNewLadderLogic_CreatDB(human)
  1432. else
  1433. local nLastEndTime = JjcNewLadder_GetHumanLastEndTime(human)
  1434. if nNowEndTime > nLastEndTime then
  1435. JjcNewLadderLogic_CreatDB(human)
  1436. else
  1437. local nRefreshTime = JjcNewLadder_GetHumanRefreshTime(human)
  1438. if true ~= Util.isSameDayByTimes(nRefreshTime, nNowTime) then
  1439. JjcNewLadder_SetHumanRefreshTime(human, nNowTime)
  1440. JjcNewLadder_SetHumanFreeNum(human, JjcNewLadderDefine.JJC_NEWLADDER_JJC_DAY_FREE_NUM)
  1441. print("[JjcLadderLogic_onHour] 玩家定时重置数据完成 name = "..human.db.name)
  1442. end
  1443. end
  1444. end
  1445. end
  1446. end
  1447. end
  1448. elseif JjcNewLadderDefine.JJC_NEWLADDER_ENDDAY == tDate.wday and JjcNewLadderDefine.JJC_NEWLADDER_ENDTIME == nHour then
  1449. print("[JjcLadderLogic_onHour] 进入活动结束流程 nHour = "..nHour)
  1450. JjcNewLadderDB.JjcNewLadderDB_SendRankMail()
  1451. end
  1452. end
  1453. -- 玩家登录处理
  1454. function onLogin(human)
  1455. print("[JjcLadderLogic_onLogin] 玩家登录处理开始 name = "..human.db.name)
  1456. if false == JjcNewLadderLogic_CheckIsOpen() then
  1457. print("[JjcLadderLogic_onLogin] 当前活动未开启直接返回")
  1458. return
  1459. end
  1460. print("[JjcLadderLogic_onLogin] 玩家登录 name = "..human.db.name)
  1461. if not human.db.JjcNewLadder then
  1462. JjcNewLadderLogic_CreatDB(human)
  1463. else
  1464. local nLastEndTime = JjcNewLadder_GetHumanLastEndTime(human)
  1465. local nNowEndTime = CommonDB.GetJjcLadderEndTime()
  1466. print("[JjcLadderLogic_onLogin] 玩家登录 name = "..human.db.name.." nLastEndTime = "..nLastEndTime.." nNowEndTime = "..nNowEndTime)
  1467. if nNowEndTime > nLastEndTime then
  1468. JjcNewLadderLogic_CreatDB(human)
  1469. else
  1470. local nRefreshTime = JjcNewLadder_GetHumanRefreshTime(human)
  1471. local nNowTime = os.time()
  1472. print("[JjcLadderLogic_onLogin] 玩家登录 name = "..human.db.name.." nRefreshTime = "..nRefreshTime.." nNowTime = "..nNowTime)
  1473. if true ~= Util.isSameDayByTimes(nRefreshTime, nNowTime) then
  1474. JjcNewLadder_SetHumanRefreshTime(human, nNowTime)
  1475. JjcNewLadder_SetHumanFreeNum(human, JjcNewLadderDefine.JJC_NEWLADDER_JJC_DAY_FREE_NUM)
  1476. print("[JjcLadderLogic_onLogin] 玩家登录重置数据完成 name = "..human.db.name)
  1477. end
  1478. end
  1479. end
  1480. end
  1481. -- 获取活动状态
  1482. function getActState()
  1483. local bRet = JjcNewLadderLogic_CheckIsOpen()
  1484. if false == bRet then
  1485. return JjcActLogic.STATE_NOOPEN, 0
  1486. end
  1487. return JjcActLogic.STATE_START, JjcNewLadder_GetLeftTime()
  1488. end
  1489. function isActRed(human)
  1490. if human.db.lv < 50 then
  1491. return false
  1492. end
  1493. if false == JjcNewLadderLogic_CheckIsOpen() then
  1494. return false
  1495. end
  1496. if not human.db.JjcNewLadder then
  1497. JjcNewLadderLogic_CreatDB(human)
  1498. end
  1499. local nFreeNum = JjcNewLadder_GetHumanFreeNum(human)
  1500. if nFreeNum > 0 then
  1501. return true
  1502. end
  1503. local nPayNum = JjcNewLadder_GetHumanPayNum(human)
  1504. if nPayNum > 0 then
  1505. return true
  1506. end
  1507. return false
  1508. end
  1509. function Init()
  1510. JjcNewLadderDB.JjcNewLadderDB_initAfterStart()
  1511. end
  1512. function isActRed(human)
  1513. if true == JjcNewLadderLogic_CheckIsOpen() then
  1514. local nFreeNum = JjcNewLadder_GetHumanFreeNum(human)
  1515. if 0 < nFreeNum then
  1516. return true
  1517. end
  1518. end
  1519. return false
  1520. end
  1521. function MainJieMianDot(human)
  1522. return true == isActRed(human) and 1 or 0
  1523. end