gitxsm 4 месяцев назад
Родитель
Сommit
b6cbc52483

+ 1 - 1
script/common/InnerHandler.lua

@@ -679,7 +679,7 @@ function LW_BATTLEGROUND_CHALLENGE_END(fd, msg)
 end
 
 function WL_BATTLEGROUND_NOTIFY_PLAYER(fd, msg)
-    ServerCommerceActBattleGroundNS.BG_C2N_RankReduce(msg)
+    ServerCommerceActBattleGroundNS.BG_C2N_RankUpdate(msg)
 end
 
 function LW_BATTLEGROUND_LINEUP_UPDATE(fd, msg)

+ 3 - 1
script/common/InnerProto.lua

@@ -1098,14 +1098,16 @@ LW_BATTLEGROUND_CHALLENGE_END = {
   {"playerShowData",          "table"},      -- 挑战方玩家展示信息
 }
 
--- 通知玩家排名降低了
+-- 通知玩家更新数据
 WL_BATTLEGROUND_NOTIFY_PLAYER = {
   {"playerUuid",              "string"},     -- 玩家uuid
   {"newRank",                 "int"},        -- 最新排名
   {"atkeServerId",            "int"},        -- 挑战方服务器Id
   {"atkName",                 "string"},     -- 挑战者名字
+  {"updateType",              "int"},        -- 更新类型, 1-排名上升, 2-排名下降
 }
 
+
 -- 玩家更新阵容
 LW_BATTLEGROUND_LINEUP_UPDATE = {
   {"sourceServerId",          "int"},        -- 请求服服务器Id

+ 1 - 1
script/common/ProtoID.lua

@@ -1749,6 +1749,6 @@ _ENV[1789]="CG_SERVEERCOMMERCE_ACT_BATTLEGROUND_RANK_QUERY"
 _ENV[1790]="GC_SERVEERCOMMERCE_ACT_BATTLEGROUND_RANK_QUERY"
 _ENV[1791]="CG_SERVEERCOMMERCE_ACT_BATTLEGROUND_RANKAWARD_QUERY"
 _ENV[1792]="GC_SERVEERCOMMERCE_ACT_BATTLEGROUND_RANKAWARD_QUERY"
-_ENV[1793]="CG_SERVEERCOMMERCE_ACT_BATTLEGROUND_ATKLINEUP_UPDATE"
+_ENV[1793]="CG_SERVEERCOMMERCE_ACT_BATTLEGROUND_UPDATE_MATCHLIST"
 
 _ENV[1795]="GC_AB_TIPS"

+ 2 - 2
script/module/serverCommerce/Handler.lua

@@ -95,6 +95,6 @@ function CG_SERVEERCOMMERCE_ACT_BATTLEGROUND_RANKAWARD_QUERY(human, msg)
     ServerCommerceActBattleGroundNS.BattleGround_RankAward_Query(human)
 end
 
-function CG_SERVEERCOMMERCE_ACT_BATTLEGROUND_ATKLINEUP_UPDATE(human, msg)
-    ServerCommerceActBattleGroundNS.BattleGround_Lineup_Update(human, msg)
+function CG_SERVEERCOMMERCE_ACT_BATTLEGROUND_UPDATE_MATCHLIST(human, msg)
+    ServerCommerceActBattleGroundNS.BattleGround_Update_MatchList(human, msg)
 end

+ 3 - 5
script/module/serverCommerce/Proto.lua

@@ -303,8 +303,6 @@ GC_SERVEERCOMMERCE_ACT_BATTLEGROUND_RANKAWARD_QUERY = {
     {"rankAwardList",           10,      SERVEERCOMMERCE_ACT_RANKAWARD_INFO}, -- 排行榜奖励
 }
 
--- 设置进攻阵容
-CG_SERVEERCOMMERCE_ACT_BATTLEGROUND_ATKLINEUP_UPDATE = {
-    {"formation",	1,	    "short"},--阵法
-	{"heroList"	,	1,		"string"}, --上阵英雄
-}
+-- 更新匹配列表
+CG_SERVEERCOMMERCE_ACT_BATTLEGROUND_UPDATE_MATCHLIST = {}
+

+ 38 - 10
script/module/serverCommerce/ServerCommerceActBattleGroundCS.lua

@@ -227,6 +227,10 @@ local function findVal(list, val)
     end
 end
 
+local function writeLog(logStr)
+    Log.write(Log.LOGID_OSS_COMMON_ACT, logStr)
+end
+
 -- 发奖
 local function issueReward(fd, rankArr)
     local msgData = InnerMsg.wl.WL_BATTLEGROUND_NOTIFY_PRIZEAWARD
@@ -324,6 +328,7 @@ function BG_N2C_RankList_Req(msg)
             name = rankInfo.name,
             heroHeadId = rankInfo.headId,
             heroHeadFrameId = rankInfo.headFrameId,
+            playerUuid = rankInfo.playerUuid,
         }
     end
 
@@ -389,6 +394,10 @@ function BG_N2C_Challenge_End(msg)
         atkRank = getPlayerRankByUuid(myWarZoneRankList, msg.playerUuid)
     end
 
+    -- 如果挑战者排名高于被挑战者排名, 则不做任何操作
+    if atkRank > atkRank then
+        return
+    end
 
     local defTemp = myWarZoneRankList[defRank]
 
@@ -412,19 +421,29 @@ function BG_N2C_Challenge_End(msg)
         myWarZoneRankList[atkRank] = defTemp
     end
 
+    -- 保存排行榜数据
+    local warZoneServerIdx = getWarZoneServerIdx(msg.sourceServerId)
+    updateValue("allAreaRankList".."."..warZoneServerIdx, battleGroundData.allAreaRankList[warZoneServerIdx])
+
+
+    -- 通知挑战者排名提高
+    local msgData = InnerMsg.wl.WL_BATTLEGROUND_NOTIFY_PLAYER
+    local fd = MiddleManager.getFDBySvrIndex(atkRanker.serverId)
+    msgData.playerUuid = atkRanker.playerUuid
+    msgData.newRank = atkRanker.rank
+    msgData.atkeServerId = msg.sourceServerId
+    msgData.atkName = atkRanker.name
+    msgData.updateType = 1
+    InnerMsg.sendMsg(fd, msgData)
+
     -- 如果被挑战方是真实玩家, 则通知
     if defTemp and defTemp.serverId and defTemp.serverId ~= 0 then
-        local msgData = InnerMsg.wl.WL_BATTLEGROUND_NOTIFY_PLAYER
         msgData.playerUuid = defTemp.playerUuid
         msgData.newRank = defTemp.rank
-        msgData.atkeServerId = msg.sourceServerId
-        msgData.atkName = atkRanker.name
-        local fd = MiddleManager.getFDBySvrIndex(defTemp.serverId)
+        msgData.updateType = 2
+        fd = MiddleManager.getFDBySvrIndex(defTemp.serverId)
         InnerMsg.sendMsg(fd, msgData)
     end
-
-    local warZoneServerIdx = getWarZoneServerIdx(msg.sourceServerId)
-    updateValue("allAreaRankList".."."..warZoneServerIdx, battleGroundData.allAreaRankList[warZoneServerIdx])
 end
 
 -- 更换战斗阵容
@@ -446,12 +465,21 @@ function BG_N2C_Act_End(msg)
         return
     end
 
+    local logData = {
+        joinList = battleGroundData.joinList,
+        allAreaRankList = battleGroundData.allAreaRankList,
+    }
+
+    local logTb = Util.serialize(logData)
+    local logStr = table.concat(logTb)
+    writeLog(logStr)
+
     local fd_2_Rank = {}
     local joinList = battleGroundData.joinList
     local allAreaRankList = battleGroundData.allAreaRankList
 
     -- 参与玩家(包括在榜玩家)
-    for _, playerInfo in ipairs(joinList) do
+    for _, playerInfo in ipairs(joinList or {}) do
         local serverId = playerInfo[1]
         local fd = MiddleManager.getFDBySvrIndex(serverId)
         fd_2_Rank[fd] = fd_2_Rank[fd] or {}
@@ -478,8 +506,8 @@ function BG_N2C_Act_End(msg)
         end
 
         -- 重置排行榜数据
-        battleGroundData = {}
-        saveAllData()
+        -- battleGroundData = {}
+        -- saveAllData()
 
         -- 更新标识
         notifyActEnd = true

+ 117 - 45
script/module/serverCommerce/ServerCommerceActBattleGroundNS.lua

@@ -304,6 +304,76 @@ local function populatePlayerShowData(human, showData, rank)
     showData.heroArr = getLineupHeroArr(human)
 end
 
+-- 排名提高
+local function rankImprove(msg)
+    local human = ObjHuman.onlineUuid[msg.playerUuid]
+    if not human then
+        local db = RoleDBLogic.getDb(msg.playerUuid)
+        if not db then
+            return
+        end
+
+        human = {}
+        human.db = db
+    end
+
+    human.battleGroundRank = msg.newRank
+    local newMatchList = matchListAlgorithm(human.battleGroundRank)
+
+    -- 更新对手列表
+    local battleGroundData = human.db.ServerCommerce.battleGround
+    battleGroundData.matchList = newMatchList
+
+    -- 检查是否能解锁新英雄
+    local idx, unlockHeroInfo = getUnlockHeroInfoByRank(human.battleGroundRank)
+    if idx ~= battleGroundData.unLockIdx then
+        unlockHero(human, unlockHeroInfo)
+        battleGroundData.unLockIdx = idx
+        battleGroundData.isHaveNewHero = true
+    end
+
+    -- 玩家在线
+    if human.fd then
+        BattleGround_MatchPage_Query(human)
+        return
+    end
+
+    -- 玩家不在线,则保存数据
+    ObjHuman.save(human)
+end
+
+-- 排名降低
+local function rankReduce(msg)
+    local human = ObjHuman.onlineUuid[msg.playerUuid]
+    if not human then
+        local db = RoleDBLogic.getDb(msg.playerUuid)
+        if not db then
+            return
+        end
+
+        human = {}
+        human.db = db
+    end
+
+    -- 更新对手列表
+    local battleGroundData = human.db.ServerCommerce.battleGround
+    battleGroundData.matchList = matchListAlgorithm(msg.newRank)
+
+    -- 邮件通知
+    local varCfg = battleGroundConfig.var[1]
+    local arg = {msg.atkeServerId - 810537, msg.atkName, msg.newRank}
+    rankReduceMail(varCfg.defeatMailId, human.db._id, arg)
+
+    -- 玩家在线
+    if human.fd then
+        human.battleGroundRank = msg.newRank
+        return
+    end
+
+    -- 玩家不在线,则保存数据
+    ObjHuman.save(human)
+end
+
 -- 战斗结束处理
 local function fightEndHanle(human, result)
     local msgData = InnerMsg.lw.LW_BATTLEGROUND_CHALLENGE_END
@@ -318,22 +388,10 @@ local function fightEndHanle(human, result)
     local challengeAward = varCfg.defeatAward
 
     if result == CombatDefine.RESULT_WIN then
-        human.battleGroundRank = human.battleGroundCache.defRank
-        local newMatchList = matchListAlgorithm(human.battleGroundRank)
-
-        -- 更新对手列表
-        local battleGroundData = human.db.ServerCommerce.battleGround
-        battleGroundData.matchList = newMatchList
-
-        -- 检查是否能解锁新英雄
-        local idx, unlockHeroInfo = getUnlockHeroInfoByRank(human.battleGroundRank)
-        if idx ~= battleGroundData.unLockIdx then
-            unlockHero(human, unlockHeroInfo)
-            battleGroundData.unLockIdx = idx
-        end
-
         -- 展示数据
-        populatePlayerShowData(human, msgData.playerShowData, human.battleGroundCache.defRank)
+        --if human.battleGroundRank <= ServerCommerceActDefine.COMMERCEACT_NPC_CNT then
+            populatePlayerShowData(human, msgData.playerShowData, human.battleGroundCache.defRank)
+        --end
 
         -- 挑战奖励
         challengeAward = varCfg.winAward
@@ -459,6 +517,20 @@ function onUpdatePos(human)
     BattleGround_Lineup_Update(human)
 end
 
+-- 是否有红点
+function isRed(human)
+    if not human.db.ServerCommerce or not human.db.ServerCommerce.battleGround then
+        return false
+    end
+
+    local battleGroundData = human.db.ServerCommerce.battleGround
+    if not battleGroundData.freeChallengeCnt or battleGroundData.freeChallengeCnt <= 0 then
+        return false
+    end
+
+    return true
+end
+
 
 -- 推送主界面信息
 local function sendMainPageData(human)
@@ -477,7 +549,7 @@ local function sendRankListData(human)
     local msgRet = Msg.gc.GC_SERVEERCOMMERCE_ACT_BATTLEGROUND_RANK_QUERY
     msgRet.rankList[0] = 0
     msgRet.isEnd = 0
-    msgRet.myRankInfo.rank = human.battleGroundRank
+    msgRet.myRankInfo.rank = ServerCommerceActDefine.COMMERCEACT_NPC_CNT
     msgRet.myRankInfo.serverId = Config.SVR_INDEX - ServerCommerceActDefine.BG_SERVERID_START
     msgRet.myRankInfo.name = human.db.name
     msgRet.myRankInfo.heroHeadId = RoleHeadLogic.getRoleAppearance(human, RoleHeadLogic.HEAD_TYPE_1) or 0
@@ -496,6 +568,10 @@ local function sendRankListData(human)
         msgRet.rankList[len].heroHeadId = rankInfo.heroHeadId
         msgRet.rankList[len].heroHeadFrameId = rankInfo.heroHeadFrameId
 
+        if rankInfo.playerUuid == human.db._id then
+            msgRet.myRankInfo.rank = rank
+        end
+
         if len >= msgMaxLen then
             rankNum = rankNum - len
 
@@ -554,6 +630,23 @@ function BattleGround_MatchPage_Query(human)
     InnerMsg.sendMsg(0, msgData)
 end
 
+-- 刷新匹配对手
+function BattleGround_Update_MatchList(human)
+    if not isRunning() then
+        return Broadcast.sendErr(human, Lang.ACT_NOT_START)
+    end
+
+    if not human.battleGroundRank then
+        return
+    end
+
+    local battleGroundData = human.db.ServerCommerce.battleGround
+    battleGroundData.matchList = matchListAlgorithm(human.battleGroundRank)
+
+    BattleGround_MatchPage_Query(human)
+end
+
+
 -- 匹配对手查询
 function BattleGround_Player_Query(human, targetRank)
     if not isRunning() then
@@ -626,6 +719,8 @@ function BattleGround_HeroBag_Query(human)
         msgRet.isEnd = 1
         Msg.send(msgRet, human.fd)
     end
+
+    battleGroundData.isHaveNewHero = false
 end
 
 -- 排行榜查询
@@ -855,36 +950,13 @@ function BG_C2N_Challenge_Res(msg)
     end
 end
 
--- 跨服通知玩家排名下降
-function BG_C2N_RankReduce(msg)
-    local human = ObjHuman.onlineUuid[msg.playerUuid]
-    if not human then
-        local db = RoleDBLogic.getDb(msg.playerUuid)
-        if not db then
-            return
-        end
-
-        human = {}
-        human.db = db
-    end
-
-    -- 更新对手列表
-    local battleGroundData = human.db.ServerCommerce.battleGround
-    battleGroundData.matchList = matchListAlgorithm(msg.newRank)
-
-    -- 邮件通知
-    local varCfg = battleGroundConfig.var[1]
-    local arg = {msg.atkeServerId - 810537, msg.atkName, msg.newRank}
-    rankReduceMail(varCfg.defeatMailId, human.db._id, arg)
-
-    -- 玩家在线
-    if human.fd then
-        human.battleGroundRank = msg.newRank
-        return
+-- 跨服通知玩家排名更新
+function BG_C2N_RankUpdate(msg)
+    if msg.updateType == 1 then -- 排名提高
+        rankImprove(msg)
+    else
+        rankReduce(msg)
     end
-
-    -- 玩家不在线,则保存数据
-    ObjHuman.save(human)
 end
 
 -- 跨服通知发奖