jjcNewLadderLogic.lua 65 KB

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