Ver código fonte

提交天梯赛相关代码和荣耀任务分段下发

SCFC 11 meses atrás
pai
commit
3f6b8b02f8

+ 18 - 5
script/common/CommonDB.lua

@@ -39,7 +39,7 @@ KEY_VOUCHER_INFLATE = "tVoucherInflateInfo"				-- 代金券膨胀信息
 kEY_RECOMMENDLINEUP = "recommendlineup"					-- 推荐阵容
 KEY_FIREWORKBONUS_TIME="fireWorksBonusTime"             -- 烟花加成时间
 KEY_COMMERCEACT_INFO = "commerceActInfo"				-- 跨服活动信息
-KEY_JJCLADDER_TIME = "jjcladderEndTime"					-- 天梯赛结束时间
+KEY_JJCLADDER_INFO = "jjcNewladderInfo"					-- 天梯赛信息
 KEY_COMMERCEACT_MIDDLE_INFO = "commerceMiddleActInfo"	-- 中心服跨服商业活动信息
 KEY_BAN_DATA = "banData"								-- 封禁数据
 KEY_REBATE_DATA = "rebateData"							-- 渠道返利数据
@@ -69,7 +69,7 @@ db = db or {
 	recommendlineup = {},								-- 推荐阵容
 	fireWorksBonusTime = nil,                           -- 烟花加成时间
 	commerceActInfo = {},								-- 跨服商业活动信息
-	jjcladderEndTime = nil,								-- 天梯赛结束时间
+	jjcNewladderInfo = {},								-- 天梯赛信息
 	commerceMiddleActInfo = {},							-- 中心服跨服商业活动信息
 }
 
@@ -503,13 +503,26 @@ end
 
 -- 天梯赛结束时间
 function GetJjcLadderEndTime()
-	return db.jjcladderEndTime or 0
+	return db.jjcNewladderInfo.nEndTime or 0
 end
 
 -- 设置天梯赛结束时间
 function SetJjcLadderEndTime(nEndTime)
-	db.jjcladderEndTime = nEndTime
-	updateValue(KEY_JJCLADDER_TIME, nEndTime)
+	db.jjcNewladderInfo.nEndTime = nEndTime
+
+	updateValue(KEY_JJCLADDER_INFO, db.jjcNewladderInfo)
+end
+
+-- 设置天梯赛前三数据
+function SetJjcLadderLast3RankInfo(tData)
+	db.jjcNewladderInfo.tLast3Rank = tData
+
+	updateValue(KEY_JJCLADDER_INFO, db.jjcNewladderInfo)
+end
+
+-- 获取天梯赛前三数据
+function GetJjcLadderLast3RankInfo()
+	return db.jjcNewladderInfo.tLast3Rank
 end
 
 -- 获取中心服跨服商业活动信息

+ 89 - 12
script/common/InnerHandler.lua

@@ -337,75 +337,78 @@ end
 -- 请求天梯赛排行榜数据(普通->中心)
 function LW_JJC_NEWLADDER_QUERY_RANK_O2C(fd, msg)
     if _G.is_middle ~= true then return end
-    
+    MiddleConnect.LW_JJC_NEWLADDER_QUERY_RANK_O2C(msg)
 end
 
 -- 请求天梯赛排行榜数据(中心->战区数据服)
 function WL_JJC_NEWLADDER_QUERY_RANK_C2D(fd, msg)
-    
+    JjcNewLadderMidder.WL_JJC_NEWLADDER_QUERY_RANK_C2D(msg)
 end
 
 -- 请求天梯赛排行榜数据(数据服->中心)
 function LW_JJC_NEWLADDER_QUERY_RANK_D2C(fd, msg)
     if _G.is_middle ~= true then return end
-    
+    MiddleConnect.LW_JJC_NEWLADDER_QUERY_RANK_D2C(msg)
 end
 
 -- 请求天梯赛排行榜数据(中心->普通)
 function WL_JJC_NEWLADDER_QUERY_RANK_C2O(fd, msg)
-    
+    JjcNewLadderMidder.WL_JJC_NEWLADDER_QUERY_RANK_C2O(msg)
 end
 
 -- 查询是否能够战斗(普通->中心)
 function LW_JJC_NEWLADDER_QUERY_CAN_FIGHT_O2C(fd, msg)
     if _G.is_middle ~= true then return end
-    
+    MiddleConnect.LW_JJC_NEWLADDER_QUERY_CAN_FIGHT_O2C(msg)
 end
 
 -- 查询是否能够战斗(中心->战区数据服)
 function WL_JJC_NEWLADDER_QUERY_CAN_FIGHT_C2D(fd, msg)
-    
+    JjcNewLadderMidder.WL_JJC_NEWLADDER_QUERY_CAN_FIGHT_C2D(msg)
 end
 
 -- 查询是否能够战斗(数据服->中心)
 function LW_JJC_NEWLADDER_QUERY_CAN_FIGHT_D2C(fd, msg)
     if _G.is_middle ~= true then return end
-    
+    MiddleConnect.LW_JJC_NEWLADDER_QUERY_CAN_FIGHT_D2C(msg)
 end
 
 -- 查询是否能够战斗(中心->普通)
 function WL_JJC_NEWLADDER_QUERY_CAN_FIGHT_C2O(fd, msg)
-    
+    JjcNewLadderMidder.WL_JJC_NEWLADDER_QUERY_CAN_FIGHT_C2O(msg)
 end
 
 -- 战斗结束(普通->中心)
 function LW_JJC_NEWLADDER_CANCEL_FIGHT_END_O2C(fd, msg)
     if _G.is_middle ~= true then return end
+    MiddleConnect.LW_JJC_NEWLADDER_CANCEL_FIGHT_END_O2C(msg)
 end
 
 -- 战斗结束(中心->战区数据服)
 function WL_JJC_NEWLADDER_CANCEL_FIGHT_END_C2D(fd, msg)
-    
+    JjcNewLadderMidder.WL_JJC_NEWLADDER_CANCEL_FIGHT_END_C2D(msg)
 end
 
 -- 战斗结束(数据服->中心)
 function LW_JJC_NEWLADDER_CANCEL_FIGHT_END_D2C(fd, msg)
     if _G.is_middle ~= true then return end
+    MiddleConnect.LW_JJC_NEWLADDER_CANCEL_FIGHT_END_D2C(msg)
 end
 
--- 战斗结束
+-- 战斗结束(中心 -> 普通)
 function WL_JJC_NEWLADDER_CANCEL_FIGHT_END_C2O(fd, msg)
-    
+    JjcNewLadderMidder.WL_JJC_NEWLADDER_CANCEL_FIGHT_END_C2O(msg)
 end
 
 -- 发送战败邮件(数据->中心)
 function LW_JJC_NEWLADDER_SEND_MAIL_D2C(fd, msg)
     if _G.is_middle ~= true then return end
+    MiddleConnect.LW_JJC_NEWLADDER_SEND_MAIL_D2C(msg)
 end
 
 -- 发送战败邮件(中心->目标)
 function WL_JJC_NEWLADDER_SEND_MAIL_C2O(fd, msg)
-    
+    JjcNewLadderMidder.WL_JJC_NEWLADDER_SEND_MAIL_C2O(msg)
 end
 
 -- 请求刷新对战列表(普通->中心)
@@ -429,6 +432,80 @@ end
 function WL_JJC_NEWLADDER_REFRESH_C2O(fd, msg)
     JjcNewLadderMidder.WL_JJC_NEWLADDER_REFRESH_C2O(fd, msg)
 end
+
+-- 请求上一轮排名前三数据(普通->中心)
+function LW_JJC_NEWLADDER_LAST3RANK_O2C(fd, msg)
+    if _G.is_middle ~= true then return end
+    MiddleConnect.LW_JJC_NEWLADDER_LAST3RANK_O2C(msg)
+end
+
+-- 请求上一轮排名数据(中心->数据)
+function WL_JJC_NEWLADDER_LAST3RANK_C2D(fd, msg)
+    JjcNewLadderMidder.WL_JJC_NEWLADDER_LAST3RANK_C2D(msg)
+end
+
+-- 请求上一轮排名数据(数据->中心)
+function LW_JJC_NEWLADDER_LAST3RANK_D2O(fd, msg)
+    if _G.is_middle ~= true then return end
+    MiddleConnect.LW_JJC_NEWLADDER_LAST3RANK_D2O(msg)
+end
+
+-- 请求上一轮前3玩家信息(中心-普通)
+function WL_JJC_NEWLADDER_LAST3RANK_C2O(fd, msg)
+    JjcNewLadderMidder.WL_JJC_NEWLADDER_LAST3RANK_C2O(msg)
+end
+
+-- 进行点赞(普通->中心)
+function LW_JJC_NEWLADDER_SEND_WORSHIP_O2C(fd, msg)
+    if _G.is_middle ~= true then return end
+    MiddleConnect.LW_JJC_NEWLADDER_SEND_WORSHIP_O2C(msg)
+end
+
+-- 进行点赞(中心->数据(被点赞玩家所在服))
+function WL_JJC_NEWLADDER_SEND_WORSHIP_C2D(fd, msg)
+    JjcNewLadderMidder.WL_JJC_NEWLADDER_SEND_WORSHIP_C2D(msg)
+end
+
+-- 进行点赞(数据(被点赞玩家所在服)->中心)
+function LW_JJC_NEWLADDER_SEND_WORSHIP_D2C(fd, msg)
+    if _G.is_middle ~= true then return end
+    MiddleConnect.LW_JJC_NEWLADDER_SEND_WORSHIP_D2C(msg)
+end
+
+-- 进行点赞回复(中心->普通)
+function WL_JJC_NEWLADDER_SEND_WORSHIP_C2O(fd, msg)
+    JjcNewLadderMidder.WL_JJC_NEWLADDER_SEND_WORSHIP_C2O(msg)
+end
+
+-- 告诉战区服点赞数改变(中心->战区数据服)
+-- 改变战区数据服记录的点赞数量
+function WL_JJC_NEWLADDER_WORSHIP_CHANGE_C2D(fd, msg)
+    JjcNewLadderMidder.WL_JJC_NEWLADDER_WORSHIP_CHANGE_C2D(msg)
+end
+
+-- 通知中心服最新的点赞数
+function LW_JJC_NEWLADDER_WORSHIP_CHANGE_D2C(fd, msg)
+    if _G.is_middle ~= true then return end
+
+    MiddleConnect.LW_JJC_NEWLADDER_WORSHIP_CHANGE_D2C(msg)
+end
+
+-- 通知对应战区所属服务器更新最新的点赞数
+function WL_JJC_NEWLADDER_WORSHIP_UPDATE_D2C(fd, msg)
+    JjcNewLadderMidder.WL_JJC_NEWLADDER_WORSHIP_UPDATE_D2C(msg)
+end
+
+-- 发送排名奖励(数据->中心)
+function LW_JJC_NEWLADDER_SEND_RANK_PRIZE_D2C(fd, msg)
+    if _G.is_middle ~= true then return end
+
+    MiddleConnect.LW_JJC_NEWLADDER_SEND_RANK_PRIZE_D2C(msg)
+end
+
+-- 发送排名奖励(中心->普通)
+function WL_JJC_NEWLADDER_SEND_RANK_PRIZE_C2O(fd, msg)
+    JjcNewLadderMidder.WL_JJC_NEWLADDER_SEND_RANK_PRIZE_C2O(msg)
+end
 -------------------- 天梯赛结束 ---------------------------
 
 

+ 109 - 1
script/common/InnerProto.lua

@@ -374,6 +374,7 @@ LW_JJC_NEWLADDER_QUERY_RANK_D2C =
 {
   {"nSrcServerID",      "int"},       -- 服务器ID
   {"nIsEnd",            "int"},       -- 是否发送完成 0 未 1 发送完
+  {"nFirst",            "int"},       -- 是否开始 1 第一次发送 0 不是第一次
   {"tRankInfo",         "table"},     -- 排行榜数据
 }
 
@@ -381,6 +382,7 @@ LW_JJC_NEWLADDER_QUERY_RANK_D2C =
 WL_JJC_NEWLADDER_QUERY_RANK_C2O = 
 {
   {"nIsEnd",            "int"},       -- 是否发送完成 0 未 1 发送完
+  {"nFirst",            "int"},       -- 是否开始 1 第一次发送 0 不是第一次
   {"tRankInfo",         "table"},     -- 排行榜数据
 }
 
@@ -419,6 +421,7 @@ LW_JJC_NEWLADDER_CANCEL_FIGHT_END_O2C = {
   {"uuidDes",           "string"},    -- 目标uid
   {"nSrcServerID",      "int"},       -- 服务器ID
   {"nResult",           "int"},       -- 战斗结果 0 输 1赢
+  {"tEnemyUid",         "table"},     -- 对战列表UID
 }
 
 -- 战斗结束(中心->战区数据服)
@@ -427,20 +430,28 @@ WL_JJC_NEWLADDER_CANCEL_FIGHT_END_C2D = {
   {"uuidDes",           "string"},    -- 目标uid
   {"nSrcServerID",      "int"},       -- 服务器ID
   {"nResult",           "int"},       -- 战斗结果 0 输 1赢
+  {"tEnemyUid",         "table"},     -- 对战列表UID
 }
 
 -- 战斗结束(数据服->中心)
 LW_JJC_NEWLADDER_CANCEL_FIGHT_END_D2C = {
   {"uuid",              "string"},    -- 玩家uid
+  {"uuidDes",           "string"},    -- 目标uid(用于替换旧的数据)
   {"nSrcServerID",      "int"},       -- 服务器ID
   {"nNewRank",          "int"},       -- 新的排名
+  {"nNewPoint",         "int"},       -- 新的积分
+  {"tNewOneEnemy",      "table"},     -- 新的对战人物
+  {"tOldEnemyData",     "table"},     -- 旧的对战人物数据
 }
 
 -- 战斗结束
 WL_JJC_NEWLADDER_CANCEL_FIGHT_END_C2O = {
   {"uuid",              "string"},    -- 玩家uid
-  {"nSrcServerID",      "int"},       -- 服务器ID
+  {"uuidDes",           "string"},    -- 目标uid(用于替换旧的数据)
   {"nNewRank",          "int"},       -- 新的排名
+  {"nNewPoint",         "int"},       -- 新的积分
+  {"tNewOneEnemy",      "table"},     -- 新的对战人物
+  {"tOldEnemyData",     "table"},     -- 旧的对战人物数据
 }
 
 -- 发送战败邮件(数据->中心)
@@ -489,6 +500,103 @@ WL_JJC_NEWLADDER_REFRESH_C2O =
   {"tEnemy",            "table"},     -- 对战列表
 }
 
+-- 请求上一轮前3玩家信息(普通->中心)
+LW_JJC_NEWLADDER_LAST3RANK_O2C = 
+{
+  {"nSrcServerID",      "int"},       -- 服务器ID
+}
+
+-- 请求上一轮前3玩家信息(中心->数据)
+WL_JJC_NEWLADDER_LAST3RANK_C2D = 
+{
+  {"nSrcServerID",      "int"},       -- 服务器ID
+}
+
+-- 请求上一轮前3玩家信息(数据->中心)
+LW_JJC_NEWLADDER_LAST3RANK_D2O = 
+{
+  {"nSrcServerID",      "int"},       -- 服务器ID
+  {"nExist",            "int"},       -- 是否存在数据
+  {"tLastRankInfo",     "table"}      -- 上一次排名数据
+}
+
+-- 请求上一轮前3玩家信息(中心-普通)
+WL_JJC_NEWLADDER_LAST3RANK_C2O = 
+{
+  {"nExist",            "int"},       -- 是否存在数据
+  {"tLastRankInfo",     "table"}      -- 上一次排名数据
+}
+
+-- 进行点赞(普通->中心)
+LW_JJC_NEWLADDER_SEND_WORSHIP_O2C = 
+{
+  {"uuidSrc",           "string"},
+  {"uuidDes",           "string"},
+  {"nSrcServerID",      "int"},
+  {"nDesServerID",      "int"},
+}
+
+-- 进行点赞(中心->数据(被点赞玩家所在服))
+WL_JJC_NEWLADDER_SEND_WORSHIP_C2D = {
+  {"uuidSrc",           "string"},
+  {"uuidDes",           "string"},
+  {"nSrcServerID",      "int"},
+}
+
+-- 进行点赞(数据->中心(被点赞玩家所在服))
+LW_JJC_NEWLADDER_SEND_WORSHIP_D2C =
+{
+  {"uuidSrc",           "string"},
+  {"nSrcServerID",      "int"},
+  {"uuidDes",           "string"},
+  {"nNowWorShip",       "int"}
+}
+
+-- 进行点赞(中心->普通)
+WL_JJC_NEWLADDER_SEND_WORSHIP_C2O =
+{
+  {"uuidSrc",           "string"},
+  {"uuidDes",           "string"},
+  {"nNowWorShip",       "int"}
+}
+
+-- 告诉战区服点赞数改变(中心->战区数据服)
+-- 改变战区数据服记录的点赞数量
+WL_JJC_NEWLADDER_WORSHIP_CHANGE_C2D =
+{
+  {"uuidDes",           "string"},
+  {"nAddNum",           "int"},     -- 增加数量
+}
+
+-- 通知中心服最新的点赞数
+LW_JJC_NEWLADDER_WORSHIP_CHANGE_D2C = 
+{
+  {"uuidDes",           "string"},
+  {"nNowWorShip",       "int"},
+  {"nSrcServerID",      "int"},
+}
+
+-- 通知对应战区所属服务器更新最新的点赞数
+WL_JJC_NEWLADDER_WORSHIP_UPDATE_D2C = 
+{
+  {"uuidDes",           "string"},
+  {"nNowWorShip",       "int"}
+}
+
+-- 发送排名奖励(数据->中心)
+LW_JJC_NEWLADDER_SEND_RANK_PRIZE_D2C =
+{
+  {"uuid",              "string"},    -- 玩家uid
+  {"nServerID",         "int"},       -- 服务器ID
+  {"nRank",             "int"},       -- 排名
+}
+
+-- 发送排名奖励(中心->普通)
+WL_JJC_NEWLADDER_SEND_RANK_PRIZE_C2O =
+{
+  {"uuid",              "string"},    -- 玩家uid
+  {"nRank",             "int"},       -- 排名
+}
 -------------------- 天梯赛结束 -----------------------------------
 
 

+ 1 - 0
script/common/Lang.lua

@@ -779,3 +779,4 @@ BATTLE_GET_MOPUPNUM = [[你获得{1}次主线扫荡次数]]
 
 HEROPUB_STAR_NOT_ENOUGH = [[星级不足]]
 
+JJCNEWLADDERNOFIGHT = [[当前挑战角色正在战斗中稍后重试]]

+ 2 - 0
script/common/ProtoID.lua

@@ -1450,6 +1450,8 @@ _ENV[1484]="GC_QUERY_DAY_ZHUANPAN_TIMES"
 -- _ENV[1503]="CG_JJC_NEW_LADDER_QUERY_LAST_RANK"
 -- _ENV[1504]="GC_JJC_NEW_LADDER_QUERY_LAST_RANK"
 -- _ENV[1505]="CG_JJC_NEW_LADDER_QUERY_ALLINFO"
+-- _ENV[1506]="CG_JJC_NEW_LADDER_QUERY_RANKPRIZE"
+-- _ENV[1507]="GC_JJC_NEW_LADDER_QUERY_RANKPRIZE"
 
 
 _ENV[1511]="CG_HEROPUB_QUERY"

+ 2 - 0
script/core/ObjHuman.lua

@@ -99,6 +99,7 @@ local ClutterDataLogic = require("clutter.ClutterDataLogic")
 local QQBigShot = require("platform.QQBigShot")
 local RebateLogic = require("platform.RebateLogic")
 local HeroPubLogic = require("hero.HeroPubLogic")
+local JjcNewLadderLogic = require("jjcnewladder.jjcNewLadderLogic")
 
 local Json = require("common.Json")
 
@@ -786,6 +787,7 @@ function onLogin(human, isNew)
 	ClutterDataLogic.onLogin(human)
 	HeroPubLogic.onLogin(human)
 	-- QQBigShot.onLogin(human)
+	JjcNewLadderLogic.onLogin(human)
 
     HeroLogLogic.finishTaskCB(human,HeroLogLogic.HERO_LOG_TYPE_1,1)
 	-- 红点 检测   需要放在通用的onLogin 后面  保持数据的正确性 再检测红点

+ 3 - 0
script/core/Timer.lua

@@ -44,6 +44,7 @@ local LostTempleLogic = require("lostTemple.lostTempleLogic")
 local MainDianLogic = require("MaiDian.MaiDianLogic")
 local VoucherShopLogic = require("voucher.VoucherShopLogic")
 local ServerCommerceMiddle = require("serverCommerce.ServerCommerceMiddle")
+local JjcNewLadderLogic = require("jjcnewladder.jjcNewLadderLogic")
 
 register_timer = {    
 	monitor = 60000,            -- 
@@ -127,6 +128,8 @@ function doZhengDian(hour)
     --    end
     --end
     JjcLogic.onHour(hour)
+    JjcNewLadderLogic.onHour(hour)
+    
     if hour == 2 then
         local weekDay = Util.getWeekDay()
         if weekDay == 2 then

+ 1 - 0
script/module/combat/CombatDefine.lua

@@ -188,6 +188,7 @@ COMBAT_TYPE25 = 25 --种族试炼-妖族
 COMBAT_TYPE26 = 26 --种族试炼-人族
 COMBAT_TYPE27 = 27 --种族试炼-兽族
 COMBAT_TYPE28 = 28 --种族试炼-仙魔族
+COMBAT_TYPE29 = 29 --新天梯赛
 
 COMBAT_TYPE_MAX = 24 --阵容最大数
 --对象类型

+ 55 - 38
script/module/dailyTask/HonorJourney.lua

@@ -29,6 +29,8 @@ local TriggerDefine = require("trigger.TriggerDefine")
 local HONORJOURNEY_SHOWTASK = 1         -- 显示任务
 local HONORJOURNEY_NOWSHOWTASK = 0      -- 非显示任务(需要完成前置任务)
 
+local HONORJOURNEY_LEN = nil            -- 荣耀任务长度
+
 -- 初始化DB数据
 local function HonorJourneyTask_CreateDB(human)
     human.db.HonorJourney = {
@@ -265,27 +267,56 @@ function HonorJourneyTaskQuery(human, isOnLogin)
 		return
 	end
 
-    -- print("1111111111111111111111111111111")
+    -- 先组装活跃数据
+    local nNowPoint = HonorJourney_GetTaskPoint(human)
+    local msgRet = Msg.gc.GC_HONORJOURNEY_QUERY
+	msgRet.nowHuoYue = nNowPoint
+	msgRet.huoYueBox[0] = 1
+    local ret = 1
+    -- 初始化box数据结构
+    for nID, v in ipairs(HonorJourneyExcel.Reward) do
+        local nState = HonorJourney_GetTaskPointPrize(human, nID)
+        print("[HonorJourneyTaskQuery] nID = "..nID .." nState = "..nState)
+        if nState ~= CommonDefine.COMMON_PRIZE_STATE_GET then
+            msgRet.huoYueBox[ret].boxID = nID
+            msgRet.huoYueBox[ret].needHuoYue = v.needcnt
+            msgRet.huoYueBox[ret].items[0] = #v.reward
+            for nIndex, tGoods in ipairs(v.reward) do
+                local itemID = tGoods[1]
+                local itemCnt = tGoods[2]
+                
+                Grid.makeItem(msgRet.huoYueBox[ret].items[nIndex], itemID, itemCnt)
+            end
+            
+            msgRet.huoYueBox[ret].isGet = 0
+            break
+        end
+    end
+
+
+    -- 组装荣耀数据
 	local HonorJourneyConfig = HonorJourneyExcel.HonorJourney
 	if not HonorJourneyConfig then return end
+
+    if not HONORJOURNEY_LEN then
+        HONORJOURNEY_LEN = 0
+        for nID, _ in pairs(HonorJourneyConfig) do 
+            HONORJOURNEY_LEN = HONORJOURNEY_LEN + 1
+        end
+    end
 	
-    local data = human and human.db and human.db.HonorJourney
-    local msgRet = Msg.gc.GC_HONORJOURNEY_QUERY 
-    local cnt = 0
+    local nFirst, cnt, nSendLen = 1, 0, 0
     for nID, value in pairs(HonorJourneyConfig) do 
         local nPreTaskID = HonorJourney_Gettaskpre(nID)
         local nState = HonorJourney_GetTaskStatus(human, nID)
-        local nFinishNum = HonorJourney_GetTaskFinishNum(human, nID)
-        --print("[HonorJourneyTaskQuery] nID = "..nID.." nState = "..nState.." nFinishNum = "..nFinishNum.." maxCnt = "..value.taskProcess)
+        nSendLen = nSendLen + 1
         if CommonDefine.COMMON_PRIZE_STATE_GET ~= nState then
             local bSow = value.isVisiable == HONORJOURNEY_SHOWTASK and true or false
 
             -- 获取前置任务状态
             if nPreTaskID then
                 local nPreTaskState = HonorJourney_GetTaskStatus(human, nPreTaskID)
-                --print("[HonorJourneyTaskQuery] 存在前置任务 nID = "..nID.." nPreTaskID = "..nPreTaskID.." nPreTaskState = "..nPreTaskState)
                 if CommonDefine.COMMON_PRIZE_STATE_NOGET ~= nPreTaskState then
-                    -- print("[HonorJourneyTaskQuery] 当前任务显示 nID = "..nID)
                     bSow = true
                 end
             end
@@ -297,7 +328,6 @@ function HonorJourneyTaskQuery(human, isOnLogin)
 
             -- 显示才下发
             if true == bSow then
-                -- print("[HonorJourneyTaskQuery] 判断通过的任务 ID  = "..nID)
                 cnt = cnt + 1
                 msgRet.list[cnt].taskID = nID
                 msgRet.list[cnt].desc = value.taskDesc
@@ -315,40 +345,27 @@ function HonorJourneyTaskQuery(human, isOnLogin)
 
                 msgRet.list[cnt].finishCnt = HonorJourney_GetTaskFinishNum(human, nID)
                 msgRet.list[cnt].isGet = (nState == CommonDefine.COMMON_PRIZE_STATE_GET) and 1 or 0
+
+                if cnt >= 30 then
+                    msgRet.list[0] = cnt
+                    msgRet.nFirst = nFirst
+                    msgRet.nEnd = nSendLen == HONORJOURNEY_LEN and 1 or 0
+                    print("[HonorJourneyTaskQuery] 发送数据 cnt = "..cnt.." nFirst = "..nFirst.." nSendLen = "..nSendLen)
+                    Msg.send(msgRet, human.fd)
+                    nFirst = 0
+                    cnt = 0
+                end
             end
         end
     end
-    msgRet.list[0] = cnt
 
-    local huoYueBoxConfig = HonorJourneyExcel.Reward
-    local nNowPoint = HonorJourney_GetTaskPoint(human)
-	msgRet.nowHuoYue = nNowPoint
-	msgRet.huoYueBox[0] = 1
-    local ret = 1
-    -- 初始化box数据结构
-    for nID, v in ipairs(HonorJourneyExcel.Reward) do
-        local nState = HonorJourney_GetTaskPointPrize(human, nID)
-        print("[HonorJourneyTaskQuery] nID = "..nID .." nState = "..nState)
-        if nState ~= CommonDefine.COMMON_PRIZE_STATE_GET then
-            msgRet.huoYueBox[ret].boxID = nID
-            msgRet.huoYueBox[ret].needHuoYue = v.needcnt
-            msgRet.huoYueBox[ret].items[0] = #v.reward
-            for nIndex, tGoods in ipairs(v.reward) do
-                local itemID = tGoods[1]
-                local itemCnt = tGoods[2]
-                
-                Grid.makeItem(msgRet.huoYueBox[ret].items[nIndex], itemID, itemCnt)
-            end
-            
-            msgRet.huoYueBox[ret].isGet = 0
-            break
-        end
+    if cnt > 0 then
+        msgRet.list[0] = cnt
+        msgRet.nFirst = nFirst
+        msgRet.nEnd = 1
+        print("[HonorJourneyTaskQuery] 最后一次发送数据 cnt = "..cnt.." nFirst = "..nFirst.." nSendLen = "..nSendLen)
+        Msg.send(msgRet, human.fd)
     end
-    -- table.print_lua_table(msgRet)
-	-- print("荣耀历程数据查询成功!")
-	--Msg.trace(msgRet)
-	Msg.send(msgRet, human.fd)
-    -- print("协议下发成功!")
 end
 
 function onHonorJourneyTaskHuoYue(human,sum)

+ 3 - 1
script/module/dailyTask/Proto.lua

@@ -159,9 +159,11 @@ CG_HONORJOURNEY_QUERY = {
 
 
 GC_HONORJOURNEY_QUERY = {
-	{"list",                    60,         DailyTaskData},
+	{"list",                    35,         DailyTaskData},
 	{"huoYueBox",			    5,		    DailyTaskHuoYueBox},
 	{"nowHuoYue",			    1,		    "short"},
+	{"nEnd",					1,			"byte"},		-- 1 结束 0 未结束
+	{"nFirst",					1,			"byte"},		-- 1 首次下发 0 非首次
 }
 
 -- 领取荣耀任务奖励

+ 10 - 0
script/module/jjcnewladder/Handler.lua

@@ -34,3 +34,13 @@
 -- function CG_JJC_NEW_LADDER_QUERY_LAST_RANK(human,msg)
 -- 	JjcNewLadderLogic.JjcNewLadderLogic_LastRankQuery(human)
 -- end
+
+-- -- 请求天梯赛排名奖励信息
+-- function CG_JJC_NEW_LADDER_QUERY_RANKPRIZE(human, msg)
+--     JjcNewLadderLogic.JjcNewLadderLogic_RankPrizeQuery(human)
+-- end
+
+-- 请求人物所有信息
+-- function JjcNewLadderLogic_RankPrizeQuery(human, msg)
+--     JjcNewLadderLogic.JjcNewLadderLogic_QueryAllInfo(human, msg.uuid, msg.nType)
+-- end

+ 20 - 1
script/module/jjcnewladder/Proto.lua

@@ -46,6 +46,13 @@ JJC_NEW_LADDER_LAST_RANK_INFO = {
 	{"worshipState",   1,       "byte"},	-- 膜拜状态,0已膜拜  1 未膜拜
 }
 
+-- 排行榜奖励信息
+JJC_NEW_LADDER_RANK_PRIZE = 
+{
+    {"nMinRank",    1,      "int"},         -- 最小排名
+    {"nMaxRank",    1,      "int"},         -- 最大排名
+    {"tList",       5,      ItemData}       -- 奖励
+}
 
 -- 请求天梯赛信息
 CG_JJC_NEW_LADDER_QUERY = {
@@ -140,5 +147,17 @@ GC_JJC_NEW_LADDER_QUERY_LAST_RANK = {
 
 -- 请求对战角色详细信息 -- 回复GC_CHAT_PLAYER_INFO
 CG_JJC_NEW_LADDER_QUERY_ALLINFO = {
-    {"uuid",        1,      "string"}
+    {"uuid",        1,      "string"},
+    {"nType",       1,      "byte"},        -- 1 对战列表人物 2 排行榜上人物
+}
+
+-- 请求排行榜奖励信息
+CG_JJC_NEW_LADDER_QUERY_RANKPRIZE = {}
+
+-- 请求排行榜奖励信息 回包
+GC_JJC_NEW_LADDER_QUERY_RANKPRIZE = 
+{
+    {"tRankPrize",      15,     JJC_NEW_LADDER_RANK_PRIZE},
+    {"nOwnRank",        1,      "int"},         -- 个人名次
+    {"tOwnPrize",       5,      ItemData}       -- 个人名次奖励
 }

+ 69 - 2
script/module/jjcnewladder/jjcNewLadderDB.lua

@@ -15,6 +15,8 @@ local CreateRole = require("role.CreateRole")
 local WarZoneConf = require("excel.WarZone")
 local JjcExcel = require("excel.jjc")
 local JjcNewLadderDefine = require("jjcnewladder.jjcNewLadderDefine")
+local Timer = require("core.Timer")
+local JjcNewLadderMiddle = require("jjcnewladder.jjcNewLadderMiddle")
 
 local nServerOffSet = 810538  -- 配置中服务器ID偏移量
 
@@ -102,8 +104,10 @@ local function JjcNewLadderDB_AddNpc(tNpcConfig, nID)
 	jjcData.time = os.time()
     jjcData.uuid = nID
     jjcData.nIsHuman = 0
-    -- jjcData.nServerID = Config.SVR_INDEX
-    -- jjcData.ServerName = "寻宝"..""
+    jjcData.nServerID = Config.SVR_INDEX
+    jjcData.ServerName = "寻宝"..Config.NEW_SVR_INDEX.."区"
+    jjcData.nInFight = 0
+    jjcData.nLastFightTime = 0
 	LuaMongo.insert(DB.db_jjcLadder, jjcData)
 	JJCNEWLADDERDB_ALL_RANK[#JJCNEWLADDERDB_ALL_RANK + 1] = jjcData
 	
@@ -152,6 +156,7 @@ local function JjcNewLadderDB_FirstServerRest(nOperate)
     JJCNEWLADDERDB_PLAYER_RANK = {}
     JJCNEWLADDERDB_ROBOT_RANK = {}
     JJCNEWLADDERDB_ALL_RANK = {}
+    UUID_2_RANK = {}
     LuaMongo.remove(DB.db_jjcLadder)
 
     -- for i = 1, nLen, 1 do
@@ -241,6 +246,11 @@ function JjcNewLadderDB_initAfterStart()
     end
 end
 
+-- 定时操作
+function JjcNewLadderDB_OnHourOpen()
+    JjcNewLadderDB_Init()
+end
+
 -------------------------------- 战区归宿的第一个服操作结束 ---------------------------
 
 -------------------------------- 内部调用函数 ---------------------------
@@ -301,6 +311,8 @@ function JjcNewLadderDB_AddHuman(tData)
         time = os.time(),
         point = JjcNewLadderDefine.JJC_NEWLADDER_POINT,
         tRival = {},
+        nInFight = 0,
+        nLastFightTime = 0
         -- zhandouli = tData.zhandouli
     }
 
@@ -349,6 +361,26 @@ function JjcNewLadderDB_MatchRival(uuid)
     return tChoseID
 end
 
+-- 匹配一次对手
+function JjcNewLadderDB_MatchOneRival(uuid, tChoseRank)
+    local nNowRank = UUID_2_RANK[uuid]
+    local nMachRank = nNowRank
+    if nNowRank < 1000 then
+        nMachRank = 1000
+    end
+    local nMatchMinRank = math.max(nMachRank - 50, 1)
+    local nMatchMaxRank = math.min(nMachRank + 10, 1000)
+
+    for i = 1, nRandNum, 1 do
+        local nFindRank = math.random(nMatchMinRank, nMatchMaxRank)
+        if not tChoseRank[nFindRank] then
+            return nFindRank
+        end
+    end
+
+    return -1
+end
+
 -- 通过uid获取对应的DB数据
 function JjcNewLadderDB_GetDBDataByuid(uuid)
     local nRank = UUID_2_RANK[uuid]
@@ -367,4 +399,39 @@ end
 function JjcNewLadderDB_GetRankByuid(uuid)
     return UUID_2_RANK[uuid]
 end
+
+-- 增加积分点数
+function JjcNewLadderDB_AddPoint(uuid, nAddPointNum)
+    local tRankData = JjcNewLadderDB_GetDBDataByuid(uuid)
+    if tRankData then
+        tRankData.point = tRankData.point + nAddPointNum
+        JjcNewLadderDB_SortRank()
+    end
+end
+
+-- 发送对应的数据给奖励
+function JjcNewLadderDB_OnSendPlayerRank(uuid, nServerID, nRank)
+    JjcNewLadderMiddle.JjcNewLadderMiddle_SendPrizeMail(uuid, nServerID, nRank)
+end
+
+-- 延迟时间 遍历排行榜 发送奖励
+function JjcNewLadderDB_OnTimeSendMail()
+    -- 再排序一次
+    JjcNewLadderDB_SortRank()
+
+    for nRank = 1, JjcNewLadderDefine.JJC_NEWLADDER_SEND_RANKPRIZE_LEN, 1 do
+        local tRankData = JJCNEWLADDERDB_ALL_RANK[nRank]
+        if tRankData.nIsHuman == 1 then
+            local nLaterTime = math.random(5, 10)
+            local uuid, nServerID = tRankData.uuid, tRankData.nServerID
+            Timer.addLater(nLaterTime, JjcNewLadderDB_OnSendPlayerRank, uuid, nServerID, nRank)
+        end
+    end
+end
+
+function JjcNewLadderDB_SendRankMail()
+    local nLaterTime = math.random(10, 60)
+    Timer.addLater(nLaterTime, JjcNewLadderDB_OnTimeSendMail)
+end
+
 -------------------------------- 内部调用函数 ---------------------------

+ 30 - 0
script/module/jjcnewladder/jjcNewLadderDefine.lua

@@ -18,3 +18,33 @@ JJC_NEWLADDER_JOINTIME = 10         -- 请求加入天梯赛过期时间 秒
 JJC_NEWLADDER_COST_ITEM_NUM = 3     -- 挑战消耗物品数量
 
 JJC_NEWLADDER_SAVE_RECORDLIST_LEN = 10  -- 挑战记录存取数量
+
+JJC_NEWLADDER_NOWORSHIP = 0             -- 未点赞
+JJC_NEWLADDER_WORSHIP = 1               -- 已点赞
+
+JJC_NEWLADDER_WORSHIP_GOODID = 101      -- 点赞物品
+JJC_NEWLADDER_WORSHIP_GOODNUM = 10000   -- 点赞物品数量
+
+JJC_NEWLADDER_RANK_SEND_LEN = 50        -- 发送排行榜长度
+JJC_NEWLADDER_RANK_ONE_SEND_LEN = 25    -- 一次性发送排行榜数据
+JJC_NEWLADDER_RANK_NEXT_UPDATE_TIME = 4*60  -- 下一次更新排行榜时间
+
+JJC_NEWLADDER_QUERYUID_ENEMY_TYPE = 1       -- 请求对战列表中角色全部信息
+JJC_NEWLADDER_QUERYUID_RANK_TYPE = 2        -- 请求排行榜角色全部信息
+
+JJC_NEWLADDER_CAN_FIGHT = 1                 -- 可以战斗
+JJC_NEWLADDER_NO_CAN_FIGHT = 0              -- 不可以战斗
+
+JJC_NEWLADDER_IN_FIGHT = 1                  -- 在战斗中
+JJC_NEWLADDER_NOIN_FIGHT = 0                -- 没有在战斗中
+
+JJC_NEWLADDER_FIGHT_DURATION = 90           -- 持续战斗时间
+
+JJC_NEWLADDER_OPEN_LATER_TIME = 10 * 60     -- 延迟时间开始
+
+JJC_NEWLADDER_SEND_RANKPRIZE_LEN = 1000         -- 发奖励最大排名数据
+
+JJC_NEWLADDER_FAIL_MAIL_ID = 7017               -- 天梯赛失败战败邮件
+JJC_NEWLADDER_RANKPRIZE_MAIL_ID = 7018          -- 天梯赛排行榜奖励邮件
+
+JJC_NEWLADDER_JJC_DAY_FREE_NUM = 5              -- 天梯赛每天免费次数

+ 868 - 9
script/module/jjcnewladder/jjcNewLadderLogic.lua

@@ -22,10 +22,36 @@ local RoleLogic = require("role.RoleLogic")
 local JjcNewLadderDefine = require("jjcnewladder.JjcNewLadderDefine")
 local JjcNewLadderMiddle = require("jjcnewladder.jjcNewLadderMiddle")
 local JjcNewLadderDB = require("jjcnewladder.jjcNewLadderDB")
+local BagLogic = require("bag.BagLogic")
+local MiddleCommonLogic = require("middle.MiddleCommonLogic")
+local CombatDefine = require("combat.CombatDefine")
+local Broadcast = require("broadcast.Broadcast")
+local CombatLogic = require("combat.CombatLogic")
+local WarReportLogic = require("warReport.WarReportLogic")
+local MailManager = require("mail.MailManager")
+local Timer = require("core.Timer")
 
--- 请求加入天梯赛的玩家回报
+
+-- 请求加入天梯赛的玩家
 local tQueryJoinPlayer = {}
 
+-- 请求天梯赛前三排名的数据的玩家
+local tQueryLast3Rank = {}
+local bQueryLast = false
+
+-- 上一轮天梯赛前三的排名玩家
+local tLast3RankPlayerInfo = nil
+
+-- 排行榜数据
+local tCacheRankInfo = {
+    -- nNextUpdateTime -- 更新时间
+    -- tRankList = {}
+}
+local bQueryRank = nil
+
+-- 缓存请求排行榜的玩家
+local tCacheQueryRankPlaeyer = {}
+
 ------------------------------------- 内部判断 ----------------------------------------------------
 -- 判断是否开启
 local function JjcNewLadderLogic_CheckIsOpen()
@@ -63,7 +89,7 @@ end
 local function JjcNewLadderLogic_CreatDB(human)
     human.db.JjcNewLadder = 
     {
-        nRefresh = os.time(),   -- 免费刷新次数
+        nRefresh = os.time(),   -- 免费刷新时间
         nFreeNum = 5,        -- 免费挑战次数
         nPayNum = 0,         -- 购买挑战次数
         bJoin = false,
@@ -71,9 +97,21 @@ local function JjcNewLadderLogic_CreatDB(human)
         nPoint = 0,     -- 积分
         tEnemy = nil,   -- 对战敌方数据
         recordList = nil,   -- 对战记录
+        tWorship = nil,     -- 点赞记录
+        nLastEndTime = CommonDB.GetJjcLadderEndTime(), -- 上一次活动结束时间
     }
 end
 
+-- 获取玩家上一次活动结束时间
+local function JjcNewLadder_GetHumanLastEndTime(human)
+    return human.db.JjcNewLadder.nLastEndTime
+end
+
+-- 设置玩家上一次活动结束时间
+local function JjcNewLadder_SetHumanLastEndTime(human, nValue)
+    human.db.JjcNewLadder.nLastEndTime = nValue
+end
+
 -- 获取玩家是否参加了天梯赛
 local function JjcNewLadder_GetHumanJoin(human)
     return human.db.JjcNewLadder.bJoin
@@ -131,7 +169,7 @@ end
 
 -- 设置玩家免费挑战次数
 local function JjcNewLadder_SetHumanFreeNum(human, nValue)
-    human.db.JjcNewLadder.nRefresh = human.db.JjcNewLadder.nRefresh + nValue
+    human.db.JjcNewLadder.nFreeNum = human.db.JjcNewLadder.nFreeNum + nValue
 end
 
 -- 获取玩家付费挑战次数
@@ -191,6 +229,56 @@ local function JjcNewLadderLogic_SetJoin(human, nValue)
     human.db.JjcNewLadder.bJoin = nValue
 end
 
+-- 获取是否点赞
+local function JjcNewLadderLogic_GetWorShip(human, uuid)
+    if not human.db.JjcNewLadder.tWorship or not human.db.JjcNewLadder.tWorship[uuid] then
+        return JjcNewLadderDefine.JJC_NEWLADDER_NOWORSHIP
+    end
+
+    return human.db.JjcNewLadder.tWorship[uuid]
+end
+
+-- 设置是否点赞
+local function JjcNewLadderLogic_SetWorShip(human, uuid, nValue)
+    if not human.db.JjcNewLadder.tWorship  then
+        human.db.JjcNewLadder.tWorship = {}
+    end
+
+    human.db.JjcNewLadder.tWorship[uuid] = nValue
+end
+
+-- 获取对应uuid的一些数据
+local function JjcNewLadderLogic_GetInfoByUUID(human, uuid, nType)
+    local tPlayInfo = nil
+    if nType == JjcNewLadderDefine.JJC_NEWLADDER_QUERYUID_ENEMY_TYPE then
+        local tEnemy = JjcNewLadder_GetHumanEnemy(human)
+        if not tEnemy or nil == _G.next(tEnemy) then
+            return tPlayInfo
+        end
+
+        for _, v in pairs(tEnemy) do
+            if v.uuid == uuid then
+                tPlayInfo = v
+                return tPlayInfo
+            end
+        end
+    else
+        for i = 1, JjcNewLadderDefine.JJC_NEWLADDER_RANK_SEND_LEN, 1 do
+            local tRankData = tCacheRankInfo.tRankList[i]
+            if not tRankData then
+                return tPlayInfo
+            end
+
+            if tRankData.uuid == uuid then
+                tPlayInfo = tRankData
+                return tPlayInfo
+            end
+        end
+    end
+
+    return tPlayInfo
+end
+
 -- 请求加入天梯赛
 local function JjcNewLadderLogic_JoinLadder(human)
     JjcNewLadderMiddle.JjcNewLadderMiddle_JoinLadder(human)
@@ -269,6 +357,88 @@ local function JjcNewLadder_SendEnemy(human)
     Msg.send(tMsgData, human.fd)
 end
 
+-- 发送上一轮前3名数据
+local function JjcNewLadder_SendLast3Rank(human)
+    local tMsgData = Msg.gc.GC_JJC_NEW_LADDER_QUERY_LAST_RANK
+    tMsgData.tList[0] = 0
+    if tLast3RankPlayerInfo then
+        local nIndex = 0
+        for _, v in pairs(tLast3RankPlayerInfo) do
+            nIndex = nIndex + 1
+            local tData = tMsgData.tList[nIndex]
+            tData.head = v.head
+            tData.headFrame = v.headFrame
+            tData.name = v.name
+            tData.szServerName = v.szServerName
+            tData.uuid = v.uuid
+            tData.worshipCnt = v.worshipCnt
+            tData.worshipState = JjcNewLadderLogic_GetWorShip(human, v.uuid)
+        end
+    end
+
+    Msg.send(tMsgData, human.fd)
+end
+
+-- 发送排行榜数据
+local function JjcNewLadder_SendRankInfo(human)
+    local tMsgData = Msg.gc.GC_JJC_NEW_LADDER_RANK_QUERY
+    tMsgData.ownRank.nRank = JjcNewLadder_GetHumanRank(human)
+    tMsgData.ownRank.head = human.db.head
+    tMsgData.ownRank.headFrame = human.db.headFrame
+    tMsgData.ownRank.nPower = human.db.zhandouli
+    tMsgData.ownRank.name = human.db.name
+    tMsgData.ownRank.szServerName = "寻宝"..Config.NEW_SVR_INDEX.."区"
+    tMsgData.ownRank.uuid = human.db.uuid
+
+    tMsgData.topList[0] = JjcNewLadderDefine.JJC_NEWLADDER_RANK_SEND_LEN
+    for i = 1, JjcNewLadderDefine.JJC_NEWLADDER_RANK_SEND_LEN, 1 do
+        local tRankData = tCacheRankInfo.tRankList[i]
+        if tRankData then
+            local tData = tMsgData.topList[i]
+            tData.nRank = i
+            tData.head = tRankData.head
+            tData.headFrame = tRankData.headFrame or -1
+            tData.nPower = tRankData.zhandouli
+            tData.name = tRankData.name
+            tData.uuid = tRankData.uuid
+            tData.szServerName = tRankData.szServerName
+        else
+            print("[JjcNewLadder_SendRankInfo] 不存在对应排名对应的排行榜数据 i = "..i)
+            return
+        end
+    end
+
+    Msg.send(tMsgData, human.fd)
+end
+
+-- 保存对战录像和数据
+local function JjcNewLadder_SaveRecord(human, combatInfo)
+    -- 添加录像
+    local combatVideo = CombatVideo.createCombatVideo(CombatVideo.VIDEOTYPE_JJCLODDER, combatInfo, human.db._id)
+    local videoUuid = combatVideo._id
+
+    JjcNewLadder_SetRecordList(human, videoUuid)
+end
+
+-- 发送战败邮件(真人)
+local function JjcNewLadder_SendFailMail(uuidDes, nServerID, SrcServerName, SrcName, nNewRank)
+    JjcNewLadderMiddle.JjcNewLadderMiddle_SendFailMail(uuidDes, nServerID, SrcServerName, SrcName, nNewRank)
+end
+
+-- 获取当前玩家对战列表缓存的uuid
+local function JjcNewLaader_GetAllEnemyUID(human)
+    local tEnemy = JjcNewLadder_GetHumanEnemy(human)
+    if not tEnemy then
+        return nil
+    end
+
+    local tEnemyUid = {}
+    for _, v in pairs(tEnemy) do
+        table.insert(tEnemyUid, v.uuid)
+    end
+
+    return tEnemyUid
+end
 
 ---------------------------------- 内部调用 ----------------------------------------------
 -- 请求加入天梯赛(数据服)
@@ -293,7 +463,7 @@ function JjcNewLadderLogic_JoinHuman(tData)
 
     local tRivalData = {}
     for nRank, v in pairs(tRival) do
-        local tJjcData = JjcNewLadderDB_GetDBDataByRank(nRank)
+        local tJjcData = JjcNewLadderDB.JjcNewLadderDB_GetDBDataByRank(nRank)
         if nil == tJjcData then
             print("[JjcNewLadderLogic_JoinHuman] 获取不到对应的DB数据 nRank = "..nRank)
             return
@@ -354,7 +524,7 @@ function JjcNewLadderLogic_RefeshEnemy(tData)
     
     local tRivalData = {}
     for nRank, v in pairs(tRival) do
-        local tJjcData = JjcNewLadderDB_GetDBDataByRank(nRank)
+        local tJjcData = JjcNewLadderDB.JjcNewLadderDB_GetDBDataByRank(nRank)
         if nil == tJjcData then
             print("[JjcNewLadderLogic_JoinHuman] 获取不到对应的DB数据 nRank = "..nRank)
             return
@@ -370,7 +540,9 @@ function JjcNewLadderLogic_RefeshEnemy(tData)
             zhandouli = tJjcData.zhandouli,
             point = tJjcData.point,
             nServerID = tJjcData.nServerID or Config.SVR_INDEX,
-            monsterOutID = tJjcData.monsterOutID or 0
+            monsterOutID = tJjcData.monsterOutID or 0,
+            lv = tJjcData.lv or 0,
+            identity = tJjcData.identity or 0,
         }
 
         table.insert(tRivalData, tSendData)
@@ -399,6 +571,360 @@ function JjcNewLadderLogic_RefeshEnemyOK(tData)
     end
 end
 
+-- 请求上一轮前3玩家信息(回包)
+function JjcNewLadderLogic_GetLast3RankOK(tData)
+    tLast3RankPlayerInfo = tData
+    for uuid, _ in pairs(tQueryLast3Rank) do
+        local human = ObjHuman.onlineUuid[uuid]
+        if human then
+            JjcNewLadder_SendLast3Rank(human)
+        end
+    end
+
+    tQueryLast3Rank = {}
+    bQueryLast = false
+end
+
+-- 进行点赞(中心->数据(被点赞玩家所在服))
+function JjcNewLadderLogic_AddWorShip(tData)
+    local uuidDes = tData.uuidDes
+    local human = ObjHuman.onlineUuid[uuidDes]
+    local bSave = false
+    if not human then
+        human = {}
+        human.db = RoleDBLogic.getDb(uuidDes)
+        bSave = true
+    end
+
+    if not human.db.jjcBeWorship then
+        human.db.jjcBeWorship = 0
+    end
+
+    human.db.jjcBeWorship = human.db.jjcBeWorship + 1
+
+    if true == bSave then
+        RoleDBLogic.saveRole(human.db)
+    end
+
+    JjcNewLadderMiddle.JjcNewLadderMiddle_AddWorShip_D2C(tData, human.db.jjcBeWorship)
+end
+
+-- 点赞成功
+function JjcNewLadderLogic_AddWorShipOK(tData)
+    if not tLast3RankPlayerInfo then
+        print("[JjcNewLadderLogic_AddWorShipOK] 为什么点赞完不存在数据了")
+        return
+    end
+
+    local uuidDes, nNowWorShip = tData.uuidDes, tData.nNowWorShip
+    for _, v in pairs(tLast3RankPlayerInfo) do
+        if v.uuid == uuidDes then
+            v.worshipCnt = nNowWorShip
+            break
+        end
+    end
+
+    local human = ObjHuman.onlineUuid[tData.uuidSrc]
+    local bSave = false
+    if not human then
+        human = {}
+        human.db = RoleDBLogic.getDb(uuidDes)
+        bSave = true
+    end
+
+    -- 设置已点赞
+    JjcNewLadderLogic_SetWorShip(human, uuidDes, JjcNewLadderDefine.JJC_NEWLADDER_WORSHIP)
+    if true == bSave then
+        RoleDBLogic.saveRole(human.db)
+    end
+
+    if false == bSave then
+        local tMsgData = Msg.gc.GC_JJC_NEW_LADDER_CHAMPION_WORSHIP
+        tMsgData.worshipCnt = nNowWorShip
+        tMsgData.dot = 0
+
+        Msg.send(tMsgData, human.fd)
+    end
+end
+
+-- 更新缓存的点赞数据
+function JjcNewLadderLogic_UpdateWorShip(tData)
+    if not tLast3RankPlayerInfo then
+        print("[JjcNewLadderLogic_UpdateWorShip] 更新缓存的点赞数据 为什么不存在数据了")
+        return
+    end
+
+    for _, v in pairs(tLast3RankPlayerInfo) do
+        if v.uuid == tData.uuidDes then
+            v.worshipCnt = tData.nNowWorShip
+            break
+        end
+    end
+end
+
+-- 请求天梯赛排行榜数据(中心->战区数据服)
+function JjcNewLadderLogic_GetRankInfo(tData)
+    local tSendRankData = {}
+    local nFirst = 1
+    for i = 1, JjcNewLadderDefine.JJC_NEWLADDER_RANK_SEND_LEN, 1 do
+        local tRank = JjcNewLadderDB.JjcNewLadderDB_GetDBDataByRank(i)
+        table.insert(tSendRankData, {tRankData = tRank, nRank = i})
+
+        local nLen = #tSendRankData
+        if JjcNewLadderDefine.JJC_NEWLADDER_RANK_ONE_SEND_LEN  <= nLen then
+            local nFinish = i == JjcNewLadderDefine.JJC_NEWLADDER_RANK_SEND_LEN and 1 or 0
+            JjcNewLadderMiddle.JjcNewLadderMiddle_QueryRankInfo_D2C(tSendRankData, nFinish, tData.nSrcServerID, nFirst)
+            nFirst = 0
+        end
+    end
+end
+
+-- 获取到天梯赛排行榜数据(中心->普通)
+function JjcNewLadderLogic_GetRankInfoOK(tData)
+    local nFirst, nIsEnd = tData.nFirst, tData.nIsEnd
+    local tRankInfo = tData.tRankInfo
+    if nFirst then
+        tCacheRankInfo = {
+            nNextUpdateTime = os.time() + JjcNewLadderDefine.JJC_NEWLADDER_RANK_NEXT_UPDATE_TIME + math.random(1, 30),
+            tRankList = {}
+        }
+    end
+
+    for _, v in ipairs(tRankInfo) do
+        local nRank = v.nRank
+        local tRankData = v.tRankData
+        tCacheRankInfo.tRankList[nRank] = tRankData
+    end
+
+    if nIsEnd == 1 then
+        for uuid, v in pairs(tCacheQueryRankPlaeyer) do
+            local human = ObjHuman.onlineUuid[uuid]
+            if human then
+                JjcNewLadder_SendRankInfo(human)
+            end
+        end
+
+        -- 清空缓存请求排行榜的玩家
+        tCacheQueryRankPlaeyer = {}
+        bQueryRank = nil
+    end
+
+end
+
+-- 查询是否能够战斗(中心->战区数据服)
+function JjcNewLadderLogic_CheckCanFight(tData)
+    local uuid, uuidDes = tData.uuid, tData.uuidDes
+    local nCanFight = JjcNewLadderDefine.JJC_NEWLADDER_NO_CAN_FIGHT
+
+    -- 检查挑战者
+    local tRankData = JjcNewLadderDB.JjcNewLadderDB_GetDBDataByuid(uuid)
+    if not tRankData then
+        JjcNewLadderMiddle.JjcNewLadderMiddle_ReplyCheckFight(tData, nCanFight)
+        return
+    end
+
+    if tRankData.nInFight == JjcNewLadderDefine.JJC_NEWLADDER_IN_FIGHT then
+        -- 还在持续时间内不能战斗
+        if tRankData.nLastFightTime + JjcNewLadderDefine.JJC_NEWLADDER_FIGHT_DURATION > os.time() then
+            JjcNewLadderMiddle.JjcNewLadderMiddle_ReplyCheckFight(tData, nCanFight)
+            return
+        end
+    end
+
+    -- 检查被挑战者
+    local tRankEnemyData = JjcNewLadderDB.JjcNewLadderDB_GetDBDataByuid(uuidDes)
+    if not tRankEnemyData then
+        JjcNewLadderMiddle.JjcNewLadderMiddle_ReplyCheckFight(tData, nCanFight)
+        return
+    end
+
+    if tRankEnemyData.nInFight == JjcNewLadderDefine.JJC_NEWLADDER_IN_FIGHT then
+        -- 还在持续时间内不能战斗
+        if tRankEnemyData.nLastFightTime + JjcNewLadderDefine.JJC_NEWLADDER_FIGHT_DURATION > os.time() then
+            JjcNewLadderMiddle.JjcNewLadderMiddle_ReplyCheckFight(tData, nCanFight)
+            return
+        end
+    end
+
+    -- 可以战斗
+    tRankData.nInFight = JjcNewLadderDefine.JJC_NEWLADDER_IN_FIGHT
+    tRankData.nLastFightTime = os.time()
+    tRankEnemyData.nInFight = JjcNewLadderDefine.JJC_NEWLADDER_IN_FIGHT
+    tRankEnemyData.nLastFightTime = os.time()
+
+    nCanFight = JjcNewLadderDefine.JJC_NEWLADDER_CAN_FIGHT
+    JjcNewLadderMiddle.JjcNewLadderMiddle_ReplyCheckFight(tData, nCanFight)
+end
+
+-- 查询是否能够战斗(中心->普通)
+function JjcNewLadderLogic_CheckCanFightOK(tData)
+    local uuid, uuidDes, nIsFight = tData.uuid, tData.uuidDes, tData.nIsFight
+    local human = ObjHuman.onlineUuid[uuid]
+    -- 已经不在线了,直接返回
+    if not human then
+        return
+    end
+
+    if JjcNewLadderDefine.JJC_NEWLADDER_NO_CAN_FIGHT == nIsFight then
+        return Broadcast.sendErr(human, Lang.JJCNEWLADDERNOFIGHT)
+    else
+        -- 开始正在的战斗流程
+        JjcLadderLogic_TrueFight(human, uuidDes)
+    end
+end
+
+-- 战斗结束(中心->战区数据服)
+function JjcNewLadderLogic_FightEnd(tData)
+    local uuid, uuidDes, nResult = tData.uuid, tData.uuidDes, tData.nResult
+    local tEnemyInfo = JjcNewLadderDB.JjcNewLadderDB_GetDBDataByuid(uuidDes)
+    if not tEnemyInfo then
+        print("[JjcNewLadderLogic_FightEnd] 不存在对战人物的DB数据 uuidDes = "..uuidDes.." nResult = "..nResult)
+        return
+    end
+
+    local tPlayerInfo = JjcNewLadderDB.JjcNewLadderDB_GetDBDataByuid(uuid)
+    if not tPlayerInfo then
+        print("[JjcNewLadderLogic_FightEnd] 不存在玩家的DB数据 uuidDes = "..uuid.." nResult = "..nResult)
+        return
+    end
+
+    -- 增加积分(会重新排序)
+    JjcNewLadderDB.JjcNewLadderDB_AddPoint(uuid, 1)
+
+    local nNewPlayerRank = JjcNewLadderDB.JjcNewLadderDB_GetRankByuid(uuid)
+    local nNewEnemyRank = JjcNewLadderDB.JjcNewLadderDB_GetRankByuid(uuidDes)
+    if nResult == CombatDefine.RESULT_WIN then
+        -- 真人要发邮件
+        if tEnemyInfo.nIsHuman == 1 then
+            JjcNewLadder_SendFailMail(uuidDes, tEnemyInfo.nServerID, tPlayerInfo.szServerName, tPlayerInfo.name, nNewEnemyRank)
+        end
+    end
+
+    -- 操作对战列表
+    local tOldEnemyData, tChoseRank = {}, {}
+
+    -- 防止选到已对战的角色
+    tChoseRank[nNewEnemyRank] = 1
+
+    for _, uuidEnemy in ipairs(tData.tEnemyUid) do
+        if uuidEnemy ~= uuidDes then
+            local tRankData = JjcNewLadderDB.JjcNewLadderDB_GetRankByuid(uuidEnemy)
+            if tRankData then
+                local nRank = JjcNewLadderDB_GetRankByuid(uuidEnemy)
+                table.insert(tOldEnemyData, {uuid = uuidEnemy, nRank = nRank, nPoint = v.point})
+                tChoseRank[nRank] = 1
+            end
+        end
+    end
+
+    local nNewOneRank = JjcNewLadderDB.JjcNewLadderDB_FindOneEnemy(uuid, tChoseRank)
+    if -1 >= nNewOneRank then
+        nNewOneRank = nNewEnemyRank
+    end
+
+    -- 组装新的对战人物数据
+    local tJjcData = JjcNewLadderDB.JjcNewLadderDB_GetDBDataByRank(nNewOneRank)
+    local tSendData = {
+        name = tJjcData.name,
+        head = tJjcData.head,
+        headFrame = tJjcData.headFrame,
+        uuid = tJjcData.uuid,
+        nIsHuman = tJjcData.nIsHuman,
+        nRank = nNewOneRank,
+        zhandouli = tJjcData.zhandouli,
+        point = tJjcData.point,
+        nServerID = tJjcData.nServerID or Config.SVR_INDEX,
+        monsterOutID = tJjcData.monsterOutID or 0
+    }
+
+    JjcNewLadderMiddle.JjcNewLadderMiddle_ReplyFightD2C(uuid, uuidDes, tData.nSrcServerID, nNewPlayerRank, tPlayerInfo.point, tOldEnemyData, tSendData)
+end
+
+-- 战斗结束(中心 -> 普通)
+function JjcNewLadderLogic_FightEndOK(tData)
+    local uuid, nNewRank, nNewPoint = tData.uuid, tData.nNewRank, tData.nNewPoint
+    local uuidDes, tNewOneEnemy, tOldEnemyData = tData.uuidDes, tData.tNewOneEnemy, tData.tOldEnemyData
+    local human = ObjHuman.onlineUuid[uuid]
+    local bSave = false
+    if not human then
+        human = {}
+        human.db = RoleDBLogic.getDb(uuid)
+        bSave = true
+    end
+
+    JjcNewLadder_SetHumanRank(human, nNewRank)
+    JjcNewLadder_SetHumanPoint(human, nNewPoint)
+
+    -- 更新对战列表数据
+    local tEnemy = JjcNewLadder_GetHumanEnemy(human)
+    local nIndex = nil
+    for i, v in ipairs(tEnemy) do
+        if v.uuid == uuidDes then
+            nIndex = i
+        else
+            for _, tUpdateData in ipairs(tOldEnemyData) do
+                if tUpdateData.uuid == v.uuid then
+                    v.point = tUpdateData.nPoint
+                    v.nRank = tUpdateData.nRank
+                end
+            end
+        end
+    end
+
+    if nIndex then
+        tEnemy[nIndex] = tNewOneEnemy
+    else
+        print("[JjcNewLadderLogic_FightEndOK] 居然找不到对应对战角色数据记录的下标")
+    end
+
+    if true == bSave then
+        RoleDBLogic.saveRole(human.db)
+    else
+        JjcNewLadderLogic_Query(human)
+    end
+end
+
+-- 发送战败邮件
+function JjcNewLadderLogic_SendFailMailOK(tData)
+    local uuid, szServerName, szName, nNewRank = tData.uuidDes, tData.szServerName, tData.szName, tData.nNewRank
+    local human = ObjHuman.onlineUuid[uuid]
+    local bSave = false
+    if not human then
+        human = {}
+        human.db = RoleDBLogic.getDb(uuid)
+        bSave = true
+    end
+
+    local mailConfig = MailExcel.mail[JjcNewLadderDefine.JJC_NEWLADDER_FAIL_MAIL_ID]
+    local title = mailConfig.title
+    local senderName = mailConfig.senderName
+    local content = Util.format(mailConfig.content, szServerName, szName, nNewRank)
+    MailManager.add(MailManager.SYSTEM, human.db._id, title, content, nil, senderName)
+end
+
+-- 发送排名奖励(中心->普通)
+function JjcNewLadderLogic_SendPrizeMail(tData)
+    local tConfig = JjcExcel.skyladderRank
+    local uuid, nRank = tData.uuid, tData.nRank
+
+    local tPrize = nil
+    for _, v in ipairs(tConfig) do
+        if v.nMinRank <= nRank and v.nMaxRank >= nRank then
+            tPrize = v.tPrize
+            break
+        end
+    end
+
+    -- 发送奖励
+    if tPrize then
+        local mailConfig = MailExcel.mail[JjcNewLadderDefine.JJC_NEWLADDER_RANKPRIZE_MAIL_ID]
+        local title = mailConfig.title
+        local senderName = mailConfig.senderName
+        local content = mailConfig.content
+        MailManager.add(MailManager.SYSTEM, uuid,
+                                    title, Util.format(content, nRank), tPrize, senderName)
+    end
+end
 ---------------------------------- 客户端请求 ----------------------------------------------
 -- 请求天梯赛信息
 function JjcNewLadderLogic_Query(human)
@@ -467,20 +993,353 @@ end
 
 -- 膜拜
 function JjcNewLadderLogic_Worship(human, uuid)
-    
+    if not tLast3RankPlayerInfo then
+        print("[JjcNewLadderLogic_Worship] 不存在上一轮数据排名前3的数据")
+        return
+    end
+
+    local nState = JjcNewLadderLogic_GetWorShip(human, uuid)
+    if nState == JjcNewLadderDefine.JJC_NEWLADDER_WORSHIP then
+        return
+    end
+
+    local nServerID
+    for _, v in pairs(tLast3RankPlayerInfo) do
+        if v.uuid == uuid then
+            nServerID = v.nServerID
+            break
+        end
+    end
+
+    if not nServerID then
+        print("[JjcNewLadderLogic_Worship] 获取对应uuid对应的服务器ID失败 name = "..human.db.name.." uuid = "..uuid)
+        return
+    end
+
+    JjcNewLadderMiddle.JjcNewLadderMiddle_SendWorShip(human.db._id, uuid, nServerID)
+
+    -- 点赞奖励
+    local tItem = {}
+    table.insert(tItem, {JjcNewLadderDefine.JJC_NEWLADDER_WORSHIP_GOODID, JjcNewLadderDefine.JJC_NEWLADDER_WORSHIP_GOODNUM})
+    BagLogic.addItemList(human, tItem, "jjc_ladder")
+
+
+    -- JjcNewLadderLogic_SetWorShip(human, uuid, JjcNewLadderDefine.JJC_NEWLADDER_WORSHIP)
 end
 
 -- 排行榜查询
 function JjcNewLadderLogic_RankQuery(human)
-    
+    if not tCacheRankInfo or not tCacheRankInfo.tRankList then
+        local uuid = human.db._id
+        if tCacheQueryRankPlaeyer[uuid] then
+            return
+        else
+            tCacheQueryRankPlaeyer[uuid] = 1
+            if not bQueryRank then
+                bQueryRank = true
+                JjcNewLadderMiddle.JjcNewLadderMiddle_QueryRankInfo()
+            end
+
+            return
+        end
+    else
+        JjcNewLadder_SendRankInfo(human)
+
+        -- 时间过期了,再次请求排行榜数据
+        local nNextUpdateTime = tCacheRankInfo.nNextUpdateTime
+        if nNextUpdateTime <= os.time() then
+            JjcNewLadderMiddle.JjcNewLadderMiddle_QueryRankInfo()
+        end
+    end
 end
 
 -- 请求一键挑战 -- 直接获取奖励
 function JjcNewLadderLogic_OneClickChange(human)
-    
+    local tConfig = JjcExcel.skyladderFightPrize
+    local nFreeNum = JjcNewLadder_GetHumanFreeNum(human)
+    if 0 >= nFreeNum then
+        return
+    end
+
+    local tItem = {}
+    for _, v in ipairs(tConfig[1].tPrize) do
+        local nGoodNum = v[2] * nFreeNum
+        local nGoodID = v[1]
+
+        table.insert(tItem, {nGoodID, nGoodNum})
+    end
+
+    if nil ~= _G.next(tItem) then
+        BagLogic.addItemList(human, tItem, "jjc_ladder")
+        JjcNewLadder_SetHumanFreeNum(human, -nFreeNum)
+        JjcNewLadderLogic_Query(human)
+    end
 end
 
 -- 请求天梯赛上一轮排名前三
 function JjcNewLadderLogic_LastRankQuery(human)
+    if not tLast3RankPlayerInfo then
+        local uuid = human.db._id
+        if  tQueryLast3Rank[uuid]  then
+            return
+        end
+
+        tQueryLast3Rank[uuid] = 1
+        if bQueryLast == false then
+            JjcNewLadderMiddle.JjcNewLadderMiddle_QueryLastRank()
+            bQueryLast = true
+        end
+    else
+        JjcNewLadder_SendLast3Rank(human)
+    end
+end
+
+-- 请求排行榜奖励信息
+function JjcNewLadderLogic_RankPrizeQuery(human)
+    local tMsgData = Msg.gc.GC_JJC_NEW_LADDER_QUERY_RANKPRIZE
+    tMsgData.nOwnRank = JjcNewLadder_GetHumanRank(human)
+    tMsgData.tOwnPrize[0] = 0
+    tMsgData.tRankPrize[0] = 0
+    for _, v in ipairs(JjcExcel.skyladderRank) do
+        tMsgData.tRankPrize[0] = tMsgData.tRankPrize[0] + 1
+        local tData = tMsgData.tRankPrize[tMsgData.tRankPrize[0]]
+        tData.nMinRank = v.nMinRank
+        tData.nMaxRank = v.nMaxRank
+        tData.tList = #v.tPrize
+
+        for nIndex, tItem in ipairs(v.tPrize) do
+            local nGoodsID = tItem[1]
+            local nGoodNum = tItem[2]
+
+            Grid.makeItem(tData.tList[nIndex], nGoodsID, nGoodNum)
+        end
+
+        -- 个人排行榜奖励
+        if tData.nMinRank <= tMsgData.nOwnRank and tData.nMaxRank >= tMsgData.nOwnRank  then
+            tMsgData.tOwnPrize[0] = #v.tPrize
+            for nIndex, tItem in ipairs(v.tPrize) do
+                local nGoodsID = tItem[1]
+                local nGoodNum = tItem[2]
     
+                Grid.makeItem(tMsgData.tOwnPrize[nIndex], nGoodsID, nGoodNum)
+            end
+        end
+    end
+
+    Msg.send(tMsgData, human.fd)
+end
+
+-- 请求人物所有信息
+function JjcNewLadderLogic_QueryAllInfo(human, uuid, nType)
+    local tPlayInfo = JjcNewLadderLogic_GetInfoByUUID(human, uuid, nType)
+    if nil == tPlayInfo then
+        print("[JjcNewLadderLogic_QueryAllInfo] 获取所有数据失败 name = "..human.db.name)
+        return
+    end
+
+    -- 假人不用请求了, 直接组装
+    if 0 == tPlayInfo.nIsHuman then
+        local msgRet = Msg.gc.GC_CHAT_PLAYER_INFO
+        -- 参考 makePlayInfoByOther 
+        RoleLogic.makeOtherPlayInfo(msgRet, tPlayInfo)
+        msgRet.vipLv = 0
+        msgRet.isFriend = 0
+        msgRet.unionName = ""
+        msgRet.svrName = tPlayInfo.ServerName
+        Msg.send(msgRet, human.fd)
+    else
+        local tQueryMsg = 
+        {
+            uuid = uuid,
+            nServerIndex = tPlayInfo.nServerID
+        }
+		MiddleCommonLogic.MiddleCommonLogic_GetChatPlayInfo_LW(human, tQueryMsg)
+    end
+end
+---------------------------------- 战斗相关 ----------------------------------------------
+-- 检测能否战斗
+function CheckCanFight(human, uuidEnemy)
+    JjcNewLadderMiddle.JjcNewLadderMiddle_CheckCanFightBegin(human, uuidEnemy)
+end
+
+function JjcLadderLogic_TrueFight(human, uuidDes)
+    local tPlayInfo = JjcNewLadderLogic_GetInfoByUUID(human, uuidDes, JjcNewLadderDefine.JJC_NEWLADDER_QUERYUID_ENEMY_TYPE)
+    if not tPlayInfo then
+        print("[JjcLadderLogic_TrueFight] 不存在对应的敌方数据, 上一步是如何通过的")
+        return
+    end
+
+    -- 扣门票
+    BagLogic.delItem(human, ItemDefine.ITEM_JJC_TICKET_ID, 3, "jjc_fight")		
+	local nFreeNum = JjcNewLadder_GetHumanFreeNum(human)
+    if nFreeNum > 0 then
+        JjcNewLadder_SetHumanFreeNum(human, -1)
+    else 
+        local nPayNum = JjcNewLadder_GetHumanPayNum(human)
+        if nPayNum > 0 then
+            JjcNewLadder_SetHumanPayNumNum(human, -1)
+        end
+    end
+
+    if 0 == tPlayInfo.nIsHuman then
+        local args = {
+            [1] = uuidDes
+        }
+        CombatLogic.combatBegin(human, nil, args, CombatDefine.COMBAT_TYPE29, uuidDes)
+        print("[JjcLadderLogic_TrueFight] 对战的角色是人机进行对战")
+    else
+        local tData =
+        {
+            combatType = CombatDefine.COMBAT_TYPE29,
+            nServerIndex = tPlayInfo.nServerID,
+            param = uuidDes.."|"..human.db._id
+        }
+
+        MiddleCommonLogic.MiddleCommonLogic_CombatBegin_LW(human, tData)
+        print("[JjcLadderLogic_TrueFight] 与真人开始对战 nServerID = "..tPlayInfo.nServerID)
+    end
+end
+
+-- 调用开始战斗
+function fight(human, args, combatType)
+    if CombatDefine.COMBAT_TYPE29 ~= combatType then
+        return
+    end
+
+    -- 对战角色的UID
+    local uuidEnemy = args[1]
+    local tPlayInfo = JjcNewLadderLogic_GetInfoByUUID(human, uuidEnemy, JjcNewLadderDefine.JJC_NEWLADDER_QUERYUID_ENEMY_TYPE)
+    if not tPlayInfo then
+        print("[JjcNewLadderLogic_fight] 不存在对应的敌方数据")
+        return
+    end
+
+    -- 检测挑战次数
+    local nFreeNum = JjcNewLadder_GetHumanFreeNum(human)
+    if nFreeNum <= 0 then
+        local nPayNum = JjcNewLadder_GetHumanPayNum(human)
+        if nPayNum <= 0 then
+            print("[JjcNewLadderLogic_fight] 可用的挑战次数不足")
+            return
+        end
+    end
+
+    -- 去中心服查询是否能够战斗
+    CheckCanFight(human, uuidEnemy)
+end
+
+-- 获取人物对战列表
+function getCombatObjList(human, side, args)
+    if side ~= CombatDefine.ATTACK_SIDE then return end
+
+	return CombatLogic.getHumanObjList(human, CombatDefine.COMBAT_TYPE1)
+end
+
+-- 获取机器人对应战斗ID
+function getCombatMonsterOutID(human, side, args)
+    if side ~= CombatDefine.DEFEND_SIDE then
+        return
+    end
+
+	local uuid = args[1]
+    local tPlayInfo = JjcNewLadderLogic_GetInfoByUUID(human, uuid, JjcNewLadderDefine.JJC_NEWLADDER_QUERYUID_ENEMY_TYPE)
+
+	if not tPlayInfo then
+        return
+    end
+
+	if not tPlayInfo.monsterOutID then
+        return
+    end
+
+	return tPlayInfo.monsterOutID, tPlayInfo.zhandouli
+end
+
+-- 挑战结束
+function onFightEnd(human, result, combatType, defUuid, combatInfo)
+    local tPrize = result == CombatDefine.RESULT_WIN and JjcExcel.skyladderFightPrize[1] or JjcExcel.skyladderFightPrize[2]
+
+    -- 存对战录像
+    JjcNewLadder_SaveRecord(human, combatInfo)
+
+    -- 添加战报
+    local nMyRank = JjcNewLadder_GetHumanRank(human)
+    local tPlayInfo = JjcNewLadderLogic_GetInfoByUUID(human, defUuid, JjcNewLadderDefine.JJC_NEWLADDER_QUERYUID_ENEMY_TYPE)
+    if tPlayInfo then
+        WarReportLogic.add(WarReportLogic.WAR_REPORT_3, combatInfo, nMyRank, tPlayInfo.nRank)
+    else
+        print("[JjcNewLadderLogic_onFightEnd] 不存在对战人物的缓存信息")
+    end
+
+    -- 获取对战列表的UID,需要刷新
+    local tEnemyUuid = JjcNewLaader_GetAllEnemyUID(human)
+
+    -- 通知中心服对战结果
+    JjcNewLadderMiddle.JjcNewLadderMiddle_FightEndO2C(human.db._id, defUuid, result, tEnemyUuid)
+
+    -- 给物品
+    BagLogic.addItemList(human, tPrize.tPrize, "jjc_fight")
+end
+
+
+---------------------------------- 刷新相关 ----------------------------------------------
+function JjcLadderLogic_LaterOperate()
+    -- 清除数据
+    JjcNewLadderDB.JjcNewLadderDB_OnHourOpen()
+
+    for _, human in pairs(ObjHuman.onlineUuid) do
+        JjcNewLadderLogic_CreatDB(human)
+    end
+end
+
+-- 定时处理
+function onHour(nHour)
+    if JjcNewLadderDefine.JJC_NEWLADDER_OPENTIME ~= nHour or JjcNewLadderDefine.JJC_NEWLADDER_ENDTIME ~= nHour then
+        return
+    end
+
+    print("[JjcLadderLogic_onHour] 当前对应的时间为 nHour = "..nHour)
+
+    local nNowTime = os.time()
+    local tDate = os.date("*t",nNowTime)
+
+    if JjcNewLadderDefine.JJC_NEWLADDER_OPENDAY == tDate.wday and JjcNewLadderDefine.JJC_NEWLADDER_OPENTIME == nHour then
+        local nNextTime = nNowTime + 3 * 86400
+        local tEndDate = os.date("*t",nNextTime)
+        tEndDate.hour = 23
+        tEndDate.min = 0
+        tEndDate.sec = 0
+        local nEndTime = os.time(tEndDate)
+        CommonDB.SetJjcLadderEndTime(nEndTime)
+
+        Timer.addLater(JjcNewLadderDefine.JJC_NEWLADDER_OPEN_LATER_TIME, JjcLadderLogic_LaterOperate)
+    elseif JjcNewLadderDefine.JJC_NEWLADDER_ENDDAY == tDate.wday and JjcNewLadderDefine.JJC_NEWLADDER_ENDTIME == nHour then
+        JjcNewLadderDB.JjcNewLadderDB_SendRankMail()
+    else
+        return
+    end
+end
+
+-- 玩家登录处理
+function onLogin(human)
+    if false == JjcNewLadderLogic_CheckIsOpen() then
+        return
+    end
+
+    if not human.db.JjcNewLadder then
+        JjcNewLadderLogic_CreatDB(human)
+    else
+        local nLastEndTime = JjcNewLadder_GetHumanLastEndTime(human)
+        local nNowEndTime = CommonDB.GetJjcLadderEndTime()
+        if nNowEndTime > nLastEndTime then
+            JjcNewLadderLogic_CreatDB(human)
+        else
+            local nRefreshTime = JjcNewLadder_GetHumanRefreshTime(human)
+            local nNowTime = os.time()
+            if false == Util.isSameDayByTimes(nRefreshTime, nNowTime) then
+                JjcNewLadder_SetHumanRefreshTime(human, nNowTime)
+                JjcNewLadder_SetHumanFreeNum(human, JjcNewLadderDefine.JJC_NEWLADDER_JJC_DAY_FREE_NUM)
+            end
+        end
+    end
 end

+ 224 - 1
script/module/jjcnewladder/jjcNewLadderMiddle.lua

@@ -43,7 +43,8 @@ function JjcNewLadderMiddle_JoinLadder(human)
             nSrcServerID = Config.SVR_INDEX,
             head = human.db.head,
             headFrame = human.db.headFrame,
-            szServerName = "寻宝"..Config.NEW_SVR_INDEX.."区"
+            szServerName = "寻宝"..Config.NEW_SVR_INDEX.."区",
+            zhandouli = human.db.zhandouli
         }
 
         JjcNewLogic.JjcNewLadderLogic_JoinHuman(tMsgData)
@@ -55,6 +56,7 @@ function JjcNewLadderMiddle_JoinLadder(human)
         tMsgData.head = human.db.head
         tMsgData.headFrame = human.db.headFrame
         tMsgData.szServerName = "寻宝"..Config.NEW_SVR_INDEX.."区"
+        -- tMsgData.zhandouli = human.db.zhandouli
     
         InnerMsg.sendMsg(0, tMsgData)
     end
@@ -90,6 +92,124 @@ function JjcNewLadderMiddle_RefreshEnemy_D2C(uuid, nSrcServerID, tRivalData)
     InnerMsg.sendMsg(0, tMsgData)
 end
 
+-- 请求上一轮前3名玩家信息
+function JjcNewLadderMiddle_QueryLastRank()
+    local tMsgData = InnerMsg.lw.LW_JJC_NEWLADDER_LAST3RANK_O2C
+    tMsgData.nSrcServerID = Config.SVR_INDEX
+
+    InnerMsg.sendMsg(0, tMsgData)
+end
+
+-- 点赞对应玩家(发起人, 被点赞人, 被点赞人服务器ID)
+function JjcNewLadderMiddle_SendWorShip(uuidSrc, uuidDes, nDesServerID)
+    local tMsgData = InnerMsg.lw.LW_JJC_NEWLADDER_SEND_WORSHIP_O2C
+    tMsgData.uuidSrc = uuidSrc
+    tMsgData.uuidDes = uuidDes
+    tMsgData.nSrcServerID = Config.SVR_INDEX
+    tMsgData.nDesServerID = nDesServerID
+
+    InnerMsg.sendMsg(0, tMsgData)
+end
+
+-- 回复点赞数据
+function JjcNewLadderMiddle_AddWorShip_D2C(tData, nWorShipNum)
+    local tMsgData = InnerMsg.lw.LW_JJC_NEWLADDER_SEND_WORSHIP_D2C
+    tMsgData.uuidSrc = tData.uuidSrc
+    tMsgData.nSrcServerID = tData.nSrcServerID
+    tMsgData.uuidDes = tData.uuidDes
+    tMsgData.nNowWorShip = nWorShipNum
+
+    InnerMsg.sendMsg(0, tMsgData)
+end
+
+-- 请求排行榜数据
+function JjcNewLadderMiddle_QueryRankInfo()
+    local tMsgData = InnerMsg.lw.LW_JJC_NEWLADDER_QUERY_RANK_O2C
+    tMsgData.nSrcServerID = Config.SVR_INDEX
+
+    InnerMsg.sendMsg(0, tMsgData)
+end
+
+-- 回复排行榜数据给中心服
+function JjcNewLadderMiddle_QueryRankInfo_D2C(tRankData, nFinish, nServerID, nFirst)
+    local tMsgData = InnerMsg.lw.LW_JJC_NEWLADDER_QUERY_RANK_D2C
+    tMsgData.nSrcServerID = nServerID
+    tMsgData.nIsEnd = nFinish
+    tMsgData.nFirst = nFirst
+    tMsgData.tRankInfo = tRankData
+
+    InnerMsg.sendMsg(0, tMsgData)
+end
+
+-- 请求检测能否进入战斗
+function JjcNewLadderMiddle_CheckCanFightBegin(human, uuidEnemy)
+    local tMsgData = InnerMsg.lw.LW_JJC_NEWLADDER_QUERY_CAN_FIGHT_O2C
+    tMsgData.uuid = human.db._id
+    tMsgData.uuidDes = uuidEnemy
+    tMsgData.nSrcServerID = Config.SVR_INDEX
+
+    InnerMsg.sendMsg(0, tMsgData)
+end
+
+-- 数据服回复检测战斗完成
+function JjcNewLadderMiddle_ReplyCheckFight(tData, nCanFight)
+    local tMsgData = InnerMsg.lw.LW_JJC_NEWLADDER_QUERY_CAN_FIGHT_D2C
+    tMsgData.uuid = tData.uuid
+    tMsgData.uuidDes = tData.uuidDes
+    tMsgData.nSrcServerID = tData.nSrcServerID
+    tMsgData.nIsFight = nCanFight
+
+    InnerMsg.sendMsg(0, tMsgData)
+end
+
+-- 通知中心服战斗结果
+function JjcNewLadderMiddle_FightEndO2C(uuid, uuidDes, nResult, tEnemyUid)
+    local tMsgData = InnerMsg.lw.LW_JJC_NEWLADDER_CANCEL_FIGHT_END_O2C
+    tMsgData.uuid = uuid
+    tMsgData.uuidDes = uuidDes
+    tMsgData.nResult = nResult
+    tMsgData.nSrcServerID = Config.SVR_INDEX
+    tMsgData.tEnemyUid = tEnemyUid
+
+    InnerMsg.sendMsg(0, tMsgData)
+end
+
+-- 回复中心服战斗后最新的排名等数据
+function JjcNewLadderMiddle_ReplyFightD2C(uuid, uuidDes, nSrcServerID, nNewRank, nNewPoint, tOldEnemyData, tNewOneEnemy)
+    local tMsgData = InnerMsg.lw.LW_JJC_NEWLADDER_CANCEL_FIGHT_END_D2C
+    tMsgData.uuid = uuid
+    tMsgData.uuidDes = uuidDes
+    tMsgData.nSrcServerID = nSrcServerID
+    tMsgData.nNewRank = nNewRank
+    tMsgData.nNewPoint = nNewPoint
+    tMsgData.tOldEnemyData = tOldEnemyData
+    tMsgData.tNewOneEnemy = tNewOneEnemy
+
+    InnerMsg.sendMsg(0, tMsgData)
+end
+
+-- 发送战败邮件
+function JjcNewLadderMiddle_SendFailMail(uuidDes, nServerID, SrcServerName, SrcName, nNewRank)
+    local tMsgData = InnerMsg.lw.LW_JJC_NEWLADDER_SEND_MAIL_D2C
+    tMsgData.uuidDes = uuidDes
+    tMsgData.nDesServerID = nServerID
+    tMsgData.szServerName = SrcServerName
+    tMsgData.szName = SrcName
+    tMsgData.nNewRank = nNewRank
+
+    InnerMsg.sendMsg(0, tMsgData)
+end
+
+-- 发送奖励邮件
+function JjcNewLadderMiddle_SendPrizeMail(uuid, nServerID, nRank)
+    local tMsgData = InnerMsg.lw.LW_JJC_NEWLADDER_SEND_RANK_PRIZE_D2C
+    tMsgData.uuid = uuid
+    tMsgData.nServerID = nServerID
+    tMsgData.nRank = nRank
+
+    InnerMsg.sendMsg(0, tMsgData)
+end
+
 --------------------------- 收到跨服请求-----------------------------
 -- 收到其他服报名请求
 function WL_JJC_NEWLADDER_JOINLADDER_C2D(fd, msg)
@@ -109,4 +229,107 @@ end
 -- 请求刷新对战列表(中心-普通)
 function WL_JJC_NEWLADDER_REFRESH_C2O(fd, msg)
     JjcNewLogic.JjcNewLadderLogic_RefeshEnemyOK(msg)
+end
+
+-- 请求上一轮前3玩家信息(中心->数据)
+function WL_JJC_NEWLADDER_LAST3RANK_C2D(msg)
+    local tMsgData = InnerMsg.LW_JJC_NEWLADDER_LAST3RANK_D2O
+    tMsgData.nSrcServerID = msg.nSrcServerID
+
+    local tLast3RankInfo = CommonDB.GetJjcLadderLast3RankInfo()
+    if not tLast3RankInfo then
+        tMsgData.nExist = 0
+        tMsgData.tLastRankInfo = {}
+    else
+        tMsgData.nExist = 1
+        tMsgData.tLastRankInfo = tLast3RankInfo
+    end
+
+    InnerMsg.sendMsg(0, tMsgData)
+end
+
+-- 请求上一轮前3玩家信息(中心->普通)
+function WL_JJC_NEWLADDER_LAST3RANK_C2O(msg)
+    JjcNewLogic.JjcNewLadderLogic_GetLast3RankOK(msg)
+end
+
+-- 进行点赞(中心->数据(被点赞玩家所在服))
+function WL_JJC_NEWLADDER_SEND_WORSHIP_C2D(msg)
+    JjcNewLogic.JjcNewLadderLogic_AddWorShip(msg)
+end
+
+-- 进行点赞回复(中心->普通)
+function WL_JJC_NEWLADDER_SEND_WORSHIP_C2O(msg)
+    JjcNewLogic.JjcNewLadderLogic_AddWorShipOK(msg)
+end
+
+-- 改变战区数据服记录的点赞数量
+function WL_JJC_NEWLADDER_WORSHIP_CHANGE_C2D(msg)
+    local tLast3RankInfo = CommonDB.GetJjcLadderLast3RankInfo()
+    local uuid, nAddNum = msg.uuidDes, msg.nAddNum
+
+    local nNowWorShip
+    for _, v in pairs(tLast3RankInfo) do
+        if v.uuid == uuid then
+            v.worshipCnt = v.worshipCnt + nAddNum
+            nNowWorShip = v.worshipCnt + 1
+            break
+        end
+    end
+
+    if not nNowWorShip then
+        print("[WL_JJC_NEWLADDER_WORSHIP_CHANGE_C2D] 获取不到对应的点赞数据")
+        return
+    end
+
+    CommonDB.SetJjcLadderLast3RankInfo(tLast3RankInfo)
+
+    local tMsgData = InnerMsg.lw.LW_JJC_NEWLADDER_WORSHIP_CHANGE_D2C
+    tMsgData.uuidDes = uuid
+    tMsgData.nNowWorShip = nNowWorShip
+
+    InnerMsg.sendMsg(0, tMsgData)
+end
+
+-- 通知对应战区所属服务器更新最新的点赞数
+function WL_JJC_NEWLADDER_WORSHIP_UPDATE_D2C(msg)
+    JjcNewLogic.JjcNewLadderLogic_UpdateWorShip(msg)
+end
+
+-- 请求天梯赛排行榜数据(中心->战区数据服)
+function WL_JJC_NEWLADDER_QUERY_RANK_C2D(msg)
+    JjcNewLogic.JjcNewLadderLogic_GetRankInfo(msg)
+end
+
+-- 获取到天梯赛排行榜数据(中心->普通)
+function WL_JJC_NEWLADDER_QUERY_RANK_C2O(msg)
+    JjcNewLogic.JjcNewLadderLogic_GetRankInfoOK(msg)
+end
+
+-- 查询是否能够战斗(中心->战区数据服)
+function WL_JJC_NEWLADDER_QUERY_CAN_FIGHT_C2D(msg)
+    JjcNewLogic.JjcNewLadderLogic_CheckCanFight(msg)
+end
+
+-- 查询是否能够战斗(中心->普通)
+function WL_JJC_NEWLADDER_QUERY_CAN_FIGHT_C2O(msg)
+    JjcNewLogic.JjcNewLadderLogic_CheckCanFightOK(msg)
+end
+
+-- 战斗结束(中心->战区数据服)
+function WL_JJC_NEWLADDER_CANCEL_FIGHT_END_C2D(msg)
+    JjcNewLogic.JjcNewLadderLogic_FightEnd(msg)
+end
+
+-- 战斗结束(中心 -> 普通)
+function WL_JJC_NEWLADDER_CANCEL_FIGHT_END_C2O(msg)
+    JjcNewLogic.JjcNewLadderLogic_FightEndOK(msg)
+end
+
+function WL_JJC_NEWLADDER_SEND_MAIL_C2O(msg)
+    JjcNewLogic.JjcNewLadderLogic_SendFailMailOK(msg)
+end
+
+function WL_JJC_NEWLADDER_SEND_RANK_PRIZE_C2O(msg)
+    JjcNewLogic.JjcNewLadderLogic_SendPrizeMail(msg)
 end

+ 250 - 24
script/module/middle/MiddleConnect.lua

@@ -53,6 +53,26 @@ function MiddleConnect_TrueServerID2ConfServerID(nServerID)
     return nServerID - nServerOffSet + 1
 end
 
+local function MiddleConnect_GetWarFirstServerFD(nSrcServerID)
+    local nConfigServerID = MiddleConnect_TrueServerID2ConfServerID(nSrcServerID)
+    local nWarServerID = MiddleConnect_GetWarZoneServer(nConfigServerID)
+
+    if 0 >= nWarServerID then
+        print("[MiddleConnect_GetWarFirstServerFD] 获取不到对应的战区ID nSrcServerID = "..nSrcServerID
+        .." nConfigServerID = "..nConfigServerID.." nWarServerID = "..nWarServerID)
+        return
+    end
+
+    local nWarFD = MiddleManager.getFDBySvrIndex(nWarServerID)
+    if not nWarFD then
+        print("[MiddleConnect_GetWarFirstServerFD] 获取不到对应的战区的FD nSrcServerID = "..nSrcServerID
+        .." nConfigServerID = "..nConfigServerID.." nWarServerID = "..nWarServerID)
+        return
+    end
+
+    return nWarFD
+end
+
 function setMiddleInfo(ip, port, host)
 	if _G.is_middle == true then return end
 
@@ -411,23 +431,14 @@ end
 -- 请求参加天梯赛(普通->中心)
 function LW_JJC_NEWLADDER_JOINLADDER_O2C(fd, msg)
     local nSrcServerID = msg.nSrcServerID
-    local nConfigServerID = MiddleConnect_TrueServerID2ConfServerID(nSrcServerID)
-    local nWarServerID = MiddleConnect_GetWarZoneServer(nConfigServerID)
-
-    if 0 >= nWarServerID then
-        print("[LW_JJC_NEWLADDER_JOINLADDER_O2C] 获取不到对应的战区ID nSrcServerID = "..nSrcServerID
-        .." nConfigServerID = "..nConfigServerID.." nWarServerID = "..nWarServerID)
-        return
-    end
-    print("[LW_JJC_NEWLADDER_JOINLADDER_O2C] 玩家请求参加天梯赛")
-
-    local nWarFD = MiddleManager.getFDBySvrIndex(nWarServerID)
+    local nWarFD = MiddleConnect_GetWarFirstServerFD(nSrcServerID)
     if not nWarFD then
-        print("[LW_JJC_NEWLADDER_JOINLADDER_O2C] 获取不到对应的战区的FD nSrcServerID = "..nSrcServerID
-        .." nConfigServerID = "..nConfigServerID.." nWarServerID = "..nWarServerID)
+        print("[LW_JJC_NEWLADDER_JOINLADDER_O2C] 获取不到对应的战区的FD nSrcServerID = "..nSrcServerID)
         return
     end
 
+    print("[LW_JJC_NEWLADDER_JOINLADDER_O2C] 玩家请求参加天梯赛")
+
     local tMsgData = InnerMsg.wl.WL_JJC_NEWLADDER_JOINLADDER_C2D
     tMsgData.uuid = msg.uuid
     tMsgData.name = msg.name
@@ -460,19 +471,10 @@ end
 -- 请求刷新对战列表(普通->中心)
 function LW_JJC_NEWLADDER_REFRESH_O2C(msg)
     local nSrcServerID = msg.nSrcServerID
-    local nConfigServerID = MiddleConnect_TrueServerID2ConfServerID(nSrcServerID)
-    local nWarServerID = MiddleConnect_GetWarZoneServer(nConfigServerID)
 
-    if 0 >= nWarServerID then
-        print("[LW_JJC_NEWLADDER_REFRESH_O2C] 获取不到对应的战区ID nSrcServerID = "..nSrcServerID
-        .." nConfigServerID = "..nConfigServerID.." nWarServerID = "..nWarServerID)
-        return
-    end
-
-    local nWarFD = MiddleManager.getFDBySvrIndex(nWarServerID)
+    local nWarFD = MiddleConnect_GetWarFirstServerFD(nSrcServerID)
     if not nWarFD then
-        print("[LW_JJC_NEWLADDER_REFRESH_O2C] 获取不到对应的战区的FD nSrcServerID = "..nSrcServerID
-        .." nConfigServerID = "..nConfigServerID.." nWarServerID = "..nWarServerID)
+        print("[LW_JJC_NEWLADDER_REFRESH_O2C] 获取不到对应的战区的FD nSrcServerID = "..nSrcServerID)
         return
     end
 
@@ -501,4 +503,228 @@ function LW_JJC_NEWLADDER_REFRESH_D2C(msg)
     InnerMsg.sendMsg(nFd, tMsgData)
 end
 
+-- 请求上一轮排名前三数据(普通->中心)
+function LW_JJC_NEWLADDER_LAST3RANK_O2C(msg)
+    local nWarFD = MiddleConnect_GetWarFirstServerFD(msg.nSrcServerID)
+    if not nWarFD then
+        print("[LW_JJC_NEWLADDER_LAST3RANK_O2C] 获取不到对应的战区的FD nSrcServerID = "..msg.nSrcServerID)
+        return
+    end
+
+    local tMsgData = InnerMsg.wl.WL_JJC_NEWLADDER_LAST3RANK_C2D
+    tMsgData.nSrcServerID = msg.nSrcServerID
+
+    InnerMsg.sendMsg(nWarFD, tMsgData)
+end
+
+-- 请求上一轮排名前三数据(数据->中心)
+function LW_JJC_NEWLADDER_LAST3RANK_D2O(msg)
+    local nFd = MiddleManager.getFDBySvrIndex(msg.nSrcServerID)
+    if not nFd then
+        print("[LW_JJC_NEWLADDER_LAST3RANK_D2O] 获取不到对应的天梯赛回复的服务器FD  nSrcServerID = "..msg.nSrcServerID)
+        return
+    end
+
+    local tMsgData = InnerMsg.wl.WL_JJC_NEWLADDER_LAST3RANK_C2O
+    tMsgData.nExist = msg.nExist
+    tMsgData.tLastRankInfo = msg.tLastRankInfo
+
+    InnerMsg.sendMsg(nFd, tMsgData)
+end
+
+-- 进行点赞(普通->中心)
+function LW_JJC_NEWLADDER_SEND_WORSHIP_O2C(msg)
+    local nDesServerID = msg.nDesServerID
+    local nDesFD = MiddleManager.getFDBySvrIndex(nDesServerID)
+    if not nDesFD then
+        print("[LW_JJC_NEWLADDER_SEND_WORSHIP_O2C] 获取不到需要传递的服务器FD  nSrcServerID = "..msg.nSrcServerID.." nDesServerID = "..nDesServerID)
+        return
+    end
+
+    local tMsgData = InnerMsg.wl.WL_JJC_NEWLADDER_SEND_WORSHIP_C2D
+    tMsgData.uuidSrc = msg.uuidSrc
+    tMsgData.uuidDes = msg.uuidDes
+    tMsgData.nSrcServerID = msg.nSrcServerID
+
+    InnerMsg.sendMsg(nDesFD, tMsgData)
+end
+
+-- 进行点赞(数据(被点赞玩家所在服)->中心)
+function LW_JJC_NEWLADDER_SEND_WORSHIP_D2C(msg)
+    local nSrcFD = MiddleManager.getFDBySvrIndex(msg.nSrcServerID)
+    if not nSrcFD then
+        print("[LW_JJC_NEWLADDER_SEND_WORSHIP_D2C] 获取不到回复的服务器FD  nSrcServerID = "..msg.nSrcServerID)
+        return
+    end
+
+    local tMsgData = InnerMsg.wl.WL_JJC_NEWLADDER_SEND_WORSHIP_C2O
+    tMsgData.uuidSrc = msg.uuidSrc
+    tMsgData.uuidDes = msg.uuidDes
+    tMsgData.nNowWorShip = msg.nNowWorShip
+
+    -- 回复对应的服务器
+    InnerMsg.sendMsg(nSrcFD, tMsgData)
+
+    -- 发给战区数据服,更新点赞数
+    local nWarFD = MiddleConnect_GetWarFirstServerFD(msg.nSrcServerID)
+    if nWarFD then
+        tMsgData = InnerMsg.wl.WL_JJC_NEWLADDER_WORSHIP_CHANGE_C2D
+        tMsgData.uuidDes = msg.uuidDes
+        tMsgData.nAddNum = 1
+        InnerMsg.sendMsg(nWarFD, tMsgData)
+    else
+        print("[LW_JJC_NEWLADDER_SEND_WORSHIP_D2C] 不存在对应的战区fd")
+    end
+end
+
+-- 通知战区下属服务器最新的点赞数
+function LW_JJC_NEWLADDER_WORSHIP_CHANGE_D2C(msg)
+    local tMsgData = InnerMsg.wl.WL_JJC_NEWLADDER_WORSHIP_UPDATE_D2C
+    tMsgData.uuidDes = msg.uuidDes
+    tMsgData.nNowWorShip = msg.nNowWorShip
+
+    local nConfigServerID = MiddleConnect_TrueServerID2ConfServerID(msg.nSrcServerID)
+    local nMinServerID, nMaxServerID = MiddleConnect_GetWarZoneServer(nConfigServerID)
+    
+    for i = nMinServerID, nMaxServerID, 1 do
+        local nTrueServerID = MiddleConnect_ConfServerID2TrueServerID(i)
+        local nFD = MiddleManager.getFDBySvrIndex(nTrueServerID)
+        if nFD then
+            InnerMsg.sendMsg(nFD, tMsgData)
+        else
+            print("[LW_JJC_NEWLADDER_WORSHIP_CHANGE_D2C] 没有获取到对应的 nTrueServerID = "..nTrueServerID)
+        end
+    end
+end
+
+-- 请求天梯赛排行榜数据(普通->中心)
+function LW_JJC_NEWLADDER_QUERY_RANK_O2C(msg)
+    local nWarFD = MiddleConnect_GetWarFirstServerFD(msg.nSrcServerID)
+    if not nWarFD then
+        print("[LW_JJC_NEWLADDER_QUERY_RANK_O2C] 获取不到对应的战区的FD")    
+        return
+    end
+
+    local tMsgData = InnerMsg.wl.WL_JJC_NEWLADDER_QUERY_RANK_C2D
+    tMsgData.nSrcServerID = msg.nSrcServerID
+
+    InnerMsg.sendMsg(nWarFD, tMsgData)
+end
+
+-- 回复天梯赛排行榜数据(中心->数据服)
+function LW_JJC_NEWLADDER_QUERY_RANK_D2C(msg)
+    local nFD =  MiddleManager.getFDBySvrIndex(msg.nSrcServerID)
+    if not nFD then
+        print("[LW_JJC_NEWLADDER_QUERY_RANK_D2C] 找不到请求服务器对应的FD nSrcServerID = "..msg.nSrcServerID)
+        return
+    end
+
+    local tMsgData = InnerMsg.wl.WL_JJC_NEWLADDER_QUERY_RANK_C2O
+    tMsgData.nIsEnd = msg.nIsEnd
+    tMsgData.nFirst = msg.nFirst
+    tMsgData.tRankInfo = msg.tRankInfo
+
+    InnerMsg.sendMsg(nFD, tMsgData)
+end
+
+-- 查询是否能够战斗(普通->中心)
+function LW_JJC_NEWLADDER_QUERY_CAN_FIGHT_O2C(msg)
+    local nWarFD = MiddleConnect_GetWarFirstServerFD(msg.nSrcServerID)
+    if not nWarFD then
+        print("[LW_JJC_NEWLADDER_QUERY_CAN_FIGHT_O2C] 获取不到对应的战区的FD")    
+        return
+    end
+
+    local tMsgData = InnerMsg.wl.WL_JJC_NEWLADDER_QUERY_CAN_FIGHT_C2D
+    tMsgData.uuid = msg.uuid
+    tMsgData.uuidDes = msg.uuidDes
+    tMsgData.nSrcServerID = msg.nSrcServerID
+
+    InnerMsg.sendMsg(nWarFD, tMsgData)
+end
+
+-- 查询是否能够战斗(数据服->中心)
+function LW_JJC_NEWLADDER_QUERY_CAN_FIGHT_D2C(msg)
+    local nFD =  MiddleManager.getFDBySvrIndex(msg.nSrcServerID)
+    if not nFD then
+        print("[LW_JJC_NEWLADDER_QUERY_CAN_FIGHT_D2C] 找不到请求服务器对应的FD nSrcServerID = "..msg.nSrcServerID)
+        return
+    end
+
+    local tMsgData = InnerMsg.wl.WL_JJC_NEWLADDER_QUERY_CAN_FIGHT_C2O
+    tMsgData.uuid = msg.uuid
+    tMsgData.uuidDes = msg.uuidDes
+    tMsgData.nIsFight = msg.nIsFight
+
+    InnerMsg.sendMsg(nFD, tMsgData)
+end
+
+-- 战斗结束(普通->中心)
+function LW_JJC_NEWLADDER_CANCEL_FIGHT_END_O2C(msg)
+    local nWarFD = MiddleConnect_GetWarFirstServerFD(msg.nSrcServerID)
+    if not nWarFD then
+        print("[LW_JJC_NEWLADDER_CANCEL_FIGHT_END_O2C] 获取不到对应的战区的FD")    
+        return
+    end
+
+    local tMsgData = InnerMsg.wl.WL_JJC_NEWLADDER_CANCEL_FIGHT_END_C2D
+    tMsgData.uuid = msg.uuid
+    tMsgData.uuidDes = msg.uuidDes
+    tMsgData.nSrcServerID = msg.nSrcServerID
+    tMsgData.nResult = msg.nResult
+    tMsgData.tEnemyUid = msg.tEnemyUid
+
+    InnerMsg.sendMsg(nWarFD, tMsgData)
+end
+
+-- 战斗结束(数据服->中心)
+function LW_JJC_NEWLADDER_CANCEL_FIGHT_END_D2C(msg)
+    local nFD =  MiddleManager.getFDBySvrIndex(msg.nSrcServerID)
+    if not nFD then
+        print("[LW_JJC_NEWLADDER_CANCEL_FIGHT_END_D2C] 找不到请求服务器对应的FD nSrcServerID = "..msg.nSrcServerID)
+        return
+    end
+
+    local tMsgData = InnerMsg.wl.WL_JJC_NEWLADDER_CANCEL_FIGHT_END_C2O
+    tMsgData.uuid = msg.uuid
+    tMsgData.nNewRank = msg.nNewRank
+    tMsgData.nNewPoint = msg.nNewPoint
+    tMsgData.uuidDes = msg.uuidDes
+    tMsgData.tNewOneEnemy = msg.tNewOneEnemy
+    tMsgData.tOldEnemyData = msg.tOldEnemyData
+
+    InnerMsg.sendMsg(nFD, tMsgData)
+end
+
+--发送失败邮件
+function LW_JJC_NEWLADDER_SEND_MAIL_D2C(msg)
+    local nFD =  MiddleManager.getFDBySvrIndex(msg.nDesServerID)
+    if not nFD then
+        print("[LW_JJC_NEWLADDER_SEND_MAIL_D2C] 找不到请求服务器对应的FD nDesServerID = "..msg.nDesServerID)
+        return
+    end
+
+    local tMsgData = InnerMsg.lw.WL_JJC_NEWLADDER_SEND_MAIL_C2O
+    tMsgData.uuidDes = msg.uuidDes
+    tMsgData.szServerName = msg.szServerName
+    tMsgData.szName = msg.szName
+    tMsgData.nNewRank = msg.nNewRank
+
+    InnerMsg.sendMsg(nFD, tMsgData)
+end
+
+function LW_JJC_NEWLADDER_SEND_RANK_PRIZE_D2C(msg)
+    local nFD =  MiddleManager.getFDBySvrIndex(msg.nServerID)
+    if not nFD then
+        print("[LW_JJC_NEWLADDER_SEND_RANK_PRIZE_D2C] 找不到请求服务器对应的FD nServerID = "..msg.nServerID)
+        return
+    end
+
+    local tMsgData = InnerMsg.lw.WL_JJC_NEWLADDER_SEND_RANK_PRIZE_C2O
+    tMsgData.uuid = msg.uuid
+    tMsgData.nRank = msg.nRank
+
+    InnerMsg.sendMsg(nFD, tMsgData)
+end
+
 -------------------- 天梯赛结束 ---------------------------

+ 1 - 0
script/module/middle/MiddleDefine.lua

@@ -9,6 +9,7 @@ MIDDLE_ENTER_REASON_1 = 1 --
 MIDDLE_CAN_COMBAT = 
 {
     [14] = 1,           -- 切磋类型
+    [29] = 1,           -- 新天梯赛
 }
 
 MIDDLE_GET_COMBAT_TIME = 5      -- 跨服战斗请求数据超时时间

+ 2 - 2
script/module/warReport/WarReportLogic.lua

@@ -131,9 +131,9 @@ function initAfterStart()
 end
 
 -- db_war_report
--- ���Ӽ�¼ ���м�¼�����ķ�
+-- - 添加记录 所有记录存中心服
 function add(type, combatInfo, atkRank, defRank)
-    -- �Ż�֡���� ����
+    -- 优化帧数据 降低
     CombatLogic.killFrames(combatInfo)
 
    if not _G.is_middle then