From 7a58a47083cb8c7920733c8378ca41964e9330e4 Mon Sep 17 00:00:00 2001
From: hxp <ale99527@vip.qq.com>
Date: 星期一, 02 三月 2020 20:07:26 +0800
Subject: [PATCH] 8389 【后端开发】天星塔挑战榜

---
 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GameWorldLogic/FBProcess/GameLogic_SkyTower.py |   62 +++++++++++++++
 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/RemoteQuery/GY_Query_SkyTower.py        |   50 ++++++++++++
 PyNetPack                                                                                                          |    2 
 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ShareDefine.py                                 |    7 +
 ServerPython/CoreServerGroup/GameServer/Script/Player/PlayerQuery.py                                               |    8 ++
 ServerPython/CoreServerGroup/GameServer/Script/ChConfig.py                                                         |    1 
 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/ChPlayer.py                             |    4 +
 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GM/Commands/SetSkyTower.py                     |    1 
 ServerPython/CoreServerGroup/GameServer/Script/Player/ChPlayer.py                                                  |    3 
 ServerPython/CoreServerGroup/GameServer/Script/ShareDefine.py                                                      |    7 +
 ServerPython/CoreServerGroup/GameServer/Script/GameWorldLogic/GameWorldSkyTower.py                                 |   84 +++++++++++++++++++++
 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChConfig.py                                    |    4 
 12 files changed, 226 insertions(+), 7 deletions(-)

diff --git a/PyNetPack b/PyNetPack
new file mode 160000
index 0000000..5d2c941
--- /dev/null
+++ b/PyNetPack
@@ -1 +1 @@
-Subproject commit 0000000000000000000000000000000000000000
+Subproject commit 5d2c941bb636d7725df79f71f03afb2375bb2db8
diff --git a/ServerPython/CoreServerGroup/GameServer/Script/ChConfig.py b/ServerPython/CoreServerGroup/GameServer/Script/ChConfig.py
index dd4965b..619a29e 100644
--- a/ServerPython/CoreServerGroup/GameServer/Script/ChConfig.py
+++ b/ServerPython/CoreServerGroup/GameServer/Script/ChConfig.py
@@ -568,6 +568,7 @@
             ShareDefine.Def_BT_FightPower_Horse         : 100,           #坐骑战斗力总榜
             ShareDefine.Def_BT_FightPower_Pet           : 100,           #宠物总战力榜
             ShareDefine.Def_BT_TrialTower               : 100,           #天神之塔榜
+            ShareDefine.Def_BT_SkyTower                 : 100,           #天星塔榜
             ShareDefine.Def_BT_OffLineEfficient         : 100,           #脱机效率榜
             ShareDefine.Def_BT_Realm                    : 100,           #境界榜
             ShareDefine.Def_BT_TotalRecharge            : 100,           #充值榜
diff --git a/ServerPython/CoreServerGroup/GameServer/Script/GameWorldLogic/GameWorldSkyTower.py b/ServerPython/CoreServerGroup/GameServer/Script/GameWorldLogic/GameWorldSkyTower.py
new file mode 100644
index 0000000..48d25e7
--- /dev/null
+++ b/ServerPython/CoreServerGroup/GameServer/Script/GameWorldLogic/GameWorldSkyTower.py
@@ -0,0 +1,84 @@
+#!/usr/bin/python
+# -*- coding: GBK -*-
+#-------------------------------------------------------------------------------
+#
+##@package GameWorldSkyTower
+#
+# @todo:天星塔
+# @author hxp
+# @date 2020年03月02日
+# @version 1.0
+#
+# 详细描述: 天星塔
+#
+#-------------------------------------------------------------------------------
+#"""Version = 2020年03月02日 20:00"""
+#-------------------------------------------------------------------------------
+
+import GameWorld
+import ShareDefine
+import PlayerUniversalGameRec
+
+import time
+
+def OnPlayerLogin(curPlayer):
+    PlayerUniversalGameRec.SendUniversalGameRecInfo(curPlayer, ShareDefine.Def_UniversalGameRecType_SkyTowerPassPlayer)
+    return
+
+def __GetPassPlayerRecDataByFloorID(floorID):
+    ## 获取过关层记录数据
+    recTypeListData = GameWorld.GetUniversalRecMgr().GetTypeList(ShareDefine.Def_UniversalGameRecType_SkyTowerPassPlayer)
+    
+    recData = None
+    for index in xrange(recTypeListData.Count()):
+        universalRecData = recTypeListData.At(index)
+        if universalRecData.GetValue1() == floorID:
+            recData = universalRecData
+            break
+        
+    return recData
+
+def MapServer_SkyTowerInfo(msgList):
+    ## 天星塔过关
+    msgType, msgData = msgList
+    
+    # 过关
+    if msgType == "ServerChallengePass":
+        __OnServerChallengePass(msgData)
+        return
+    
+    # 领奖
+    if msgType == "ServerChallengeReward":
+        floorID = msgData[0]
+        recData = __GetPassPlayerRecDataByFloorID(floorID)
+        isPass = 1 if recData else 0
+        return msgList + [isPass]
+    
+    return
+
+def __OnServerChallengePass(msgData):
+    ## 全服挑战层过关
+    floorID, playerID, playerName, job, playerLV, realmLV = msgData
+    
+    recData = __GetPassPlayerRecDataByFloorID(floorID)
+    if recData:
+        GameWorld.DebugLog("该天星塔已经有人先过关了,不处理!floorID=%s" % floorID, playerID)
+        return
+    GameWorld.DebugLog("新增天星塔全服挑战层过关记录!floorID=%s" % floorID, playerID)
+    
+    recTypeListData = GameWorld.GetUniversalRecMgr().GetTypeList(ShareDefine.Def_UniversalGameRecType_SkyTowerPassPlayer)
+    recData = recTypeListData.AddRec()
+    recData.SetTime(int(time.time()))
+    recData.SetValue1(floorID)
+    recData.SetValue2(playerID)
+    recData.SetValue3(playerLV)
+    recData.SetValue4(job)
+    recData.SetValue5(realmLV)
+    recData.SetStrValue1(playerName)
+    
+    # 广播单条数据
+    PlayerUniversalGameRec.SendUniversalGameRecSingle(None, recData)
+    return
+
+
+
diff --git a/ServerPython/CoreServerGroup/GameServer/Script/Player/ChPlayer.py b/ServerPython/CoreServerGroup/GameServer/Script/Player/ChPlayer.py
index 2e6964a..d7f244e 100644
--- a/ServerPython/CoreServerGroup/GameServer/Script/Player/ChPlayer.py
+++ b/ServerPython/CoreServerGroup/GameServer/Script/Player/ChPlayer.py
@@ -56,6 +56,7 @@
 import GameWorldActionControl
 import GameWorldFamilyWar
 import PlayerFBHelpBattle
+import GameWorldSkyTower
 import GMT_CTG
 import PyGameData
 import GMShell
@@ -190,6 +191,8 @@
         PlayerHorsePetBoss.OnLogin(curPlayer)
         #协助
         PlayerAssist.OnPlayerLogin(curPlayer, False)
+        #天星塔
+        GameWorldSkyTower.OnPlayerLogin(curPlayer)
         GMT_CTG.OnPlayerLogin(curPlayer)
         
     else:
diff --git a/ServerPython/CoreServerGroup/GameServer/Script/Player/PlayerQuery.py b/ServerPython/CoreServerGroup/GameServer/Script/Player/PlayerQuery.py
index 0738828..3bc8090 100644
--- a/ServerPython/CoreServerGroup/GameServer/Script/Player/PlayerQuery.py
+++ b/ServerPython/CoreServerGroup/GameServer/Script/Player/PlayerQuery.py
@@ -73,6 +73,7 @@
 import NetPackCommon
 import AuctionHouse
 import PlayerFairyDomain
+import GameWorldSkyTower
 import GameWorldItem
 import PlayerAssist
 
@@ -927,6 +928,13 @@
         if ret == None:
             return
         resultName = '%s' % ret
+    
+    # 天星塔
+    if callName == "SkyTower":
+        ret = GameWorldSkyTower.MapServer_SkyTowerInfo(eval(resultName))
+        if ret == None:
+            return
+        resultName = '%s' % ret
         
 #    # 战盟仓库
 #    if callName == "FamilyStore":
diff --git a/ServerPython/CoreServerGroup/GameServer/Script/ShareDefine.py b/ServerPython/CoreServerGroup/GameServer/Script/ShareDefine.py
index 17db528..7523028 100644
--- a/ServerPython/CoreServerGroup/GameServer/Script/ShareDefine.py
+++ b/ServerPython/CoreServerGroup/GameServer/Script/ShareDefine.py
@@ -653,8 +653,10 @@
     Def_BT_Campaign_StarLV,                   #升星等级(开服活动榜) 25
     Def_BT_Campaign_Wash,                     #洗练战力(开服活动榜)
     
+    Def_BT_SkyTower,                          #天星塔榜
+    
     Def_BT_Max,                               #排行榜最大类型
-) = range(0, 26 + 2) 
+) = range(0, 27 + 2) 
     
 #职业对应战力排行榜类型
 JobFightPowerBillboardDict = {
@@ -666,6 +668,7 @@
 #排行榜Value1存储境界信息的榜单列表
 BTValue1_OfficialRankList = [Def_BT_FightPower, Def_BT_FightPower_Warrior, Def_BT_FightPower_Wizard, Def_BT_FightPower_Assassin, 
                              Def_BT_LV, Def_BT_FightPower_Horse, Def_BT_FightPower_Pet, Def_BT_TrialTower, Def_BT_OffLineEfficient,
+                             Def_BT_SkyTower,
                              ]
 
 ##---比率---
@@ -1045,7 +1048,7 @@
                                 Def_UniversalGameRecType_YesterdayPlayerLVInfo,#昨日活跃玩家等级信息7
                                 Def_UniversalGameRecType_StoreServerCntRecord,  #商店全服购买记录 8,
                                 Def_UniversalGameRecType_FBHelpBattleCheckInPlayer, #助战玩家登记记录9
-                                Def_UniversalGameRecType_10,
+                                Def_UniversalGameRecType_SkyTowerPassPlayer, #天星塔过关玩家记录10
                                 Def_UniversalGameRecType_ZhuXianBossRecord, #诛仙BOSS结算记录11
                                 Def_UniversalGameRecType_LuckyTreasure, #幸运鉴宝大奖记录12
                                 Def_UniversalGameRecType_FairyDomain, #缥缈仙域事件次数记录13
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChConfig.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChConfig.py
index d470ea6..b1119c0 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChConfig.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChConfig.py
@@ -3635,6 +3635,7 @@
 Def_Player_Dict_TrialTower_LastDayPassLV = "Tower_LastDayPassLV"  # 试炼之塔昨日通关层数
 #天星塔
 Def_Player_Dict_SkyTowerFloor = "SkyTowerFloor"  # 天星塔已通关层数
+Def_Player_Dict_SkyTowerChallengeRewardRecord = "SkyTowerChallengeRewardRecord"  # 天星塔全服挑战层领奖记录,按奖励记录位二进制存储
 
 #古神禁地
 Def_Player_Dict_GodArea_Anger = "GodArea_Anger"  # 古神禁地怒气值
@@ -5298,7 +5299,8 @@
 Def_RewardType_HistoryChargeAward, #历史累计充值领取28
 Def_RewardType_DayFreeGoldGift, #每日免费直购礼包29
 Def_RewardType_ActivityPlace, #活跃放置奖励30
-)= range(31)
+Def_RewardType_SkyTowerServerChallengeReward, #天星塔全服挑战层领奖31
+)= range(32)
 
 
 #boss复活相关活动定义
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GM/Commands/SetSkyTower.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GM/Commands/SetSkyTower.py
index 8ffcb3d..d8694cf 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GM/Commands/SetSkyTower.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GM/Commands/SetSkyTower.py
@@ -32,6 +32,7 @@
 #  @return None
 def OnExec(curPlayer, cmdList):
     if len(cmdList) != 1:
+        GameWorld.DebugAnswer(curPlayer, "SetSkyTower 层")
         return
     fbLevel = cmdList[0]
     GameLogic_SkyTower.SetSkyTowerCurfloorID(curPlayer, fbLevel)
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GameWorldLogic/FBProcess/GameLogic_SkyTower.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GameWorldLogic/FBProcess/GameLogic_SkyTower.py
index 8a22982..0cdbd58 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GameWorldLogic/FBProcess/GameLogic_SkyTower.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GameWorldLogic/FBProcess/GameLogic_SkyTower.py
@@ -30,6 +30,7 @@
 import ChConfig
 import ChPlayer
 import PlayerActivity
+import PlayerBillboard
 
 
 g_runeTypeDict = {}
@@ -74,6 +75,7 @@
     ttInfo = ChPyNetSendPack.tagMCSkyTowerInfo()
     ttInfo.Clear()
     ttInfo.Floor = __GetSkyTowerCurFloor(curPlayer)
+    ttInfo.ServerRewardRecord = curPlayer.NomalDictGetProperty(ChConfig.Def_Player_Dict_SkyTowerChallengeRewardRecord)
     NetPackCommon.SendFakePack(curPlayer, ttInfo)
     return
 
@@ -321,7 +323,6 @@
     if not ipyData:
         return
     
-            
     if ipyData.GetIsNotify():
         #IPY_Data = IpyGameDataPY.IPY_Data()
         #maxLevel = IPY_Data.GetRuneTowerByIndex(IPY_Data.GetRuneTowerCount()-1).GetID()
@@ -339,6 +340,21 @@
     
     SyncSkyTowerInfo(curPlayer) # 同步最新关卡信息
     __SetFBToFreeTime(tick)
+    
+    if floorID >= 10:
+        PlayerBillboard.UpdatePlayerBillboard(curPlayer, ShareDefine.Def_BT_SkyTower, floorID)
+        
+    # 全服目标
+    ipyDataServer = IpyGameDataPY.GetIpyGameDataNotLog("SkyTowerServerChallenge", floorID)
+    if ipyDataServer:
+        playerID = curPlayer.GetPlayerID()
+        playerName = curPlayer.GetPlayerName()
+        job = curPlayer.GetJob()
+        playerLV = curPlayer.GetLV()
+        realmLV = curPlayer.GetOfficialRank()
+        msgInfo = str(["ServerChallengePass", [floorID, playerID, playerName, job, playerLV, realmLV]])
+        GameWorld.GetPlayerManager().GameServer_QueryPlayerResult(playerID, 0, 0, "SkyTower", msgInfo, len(msgInfo))
+        
     return
 
 
@@ -422,3 +438,47 @@
     StartfloorID(curPlayer, floorID, tick)
     return
 
+def OnGetSkyTowerServerChallengeReward(curPlayer, floorID):
+    ## 领取全服挑战层奖励
+    playerID = curPlayer.GetPlayerID()
+    ipyData = IpyGameDataPY.GetIpyGameData("SkyTowerServerChallenge", floorID)
+    if not ipyData:
+        return
+    recordIndex = ipyData.GetRewardRecordIndex()
+    rewardInfo = ipyData.GetReward()
+    
+    rewardRecord = curPlayer.NomalDictGetProperty(ChConfig.Def_Player_Dict_SkyTowerChallengeRewardRecord)
+    if rewardRecord & pow(2, recordIndex):
+        GameWorld.DebugLog("天星塔全服挑战层已领奖!floorID=%s,recordIndex=%s,rewardRecord=%s" % (floorID, recordIndex, rewardRecord))
+        return
+    
+    ipyData.GetRewardRecordIndex()
+    msgInfo = str(["ServerChallengeReward", [floorID, recordIndex, rewardInfo]])
+    GameWorld.GetPlayerManager().GameServer_QueryPlayerResult(playerID, 0, 0, "SkyTower", msgInfo, len(msgInfo))
+    return
+
+def GameServer_SkyTowerInfo(curPlayer, resultList):
+    ## GameServer 返回信息
+    msgType, msgData = resultList[:2]
+    
+    if msgType == "ServerChallengeReward":
+        isPass = resultList[2]
+        floorID, recordIndex, rewardInfo = msgData
+        if not isPass:
+            return
+        
+        rewardRecord = curPlayer.NomalDictGetProperty(ChConfig.Def_Player_Dict_SkyTowerChallengeRewardRecord)
+        if rewardRecord & pow(2, recordIndex):
+            GameWorld.DebugLog("返回时天星塔全服挑战层已领奖!floorID=%s,recordIndex=%s,rewardRecord=%s" % (floorID, recordIndex, rewardRecord))
+            return
+        updRewardRecord = rewardRecord | pow(2, recordIndex)
+        PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_Player_Dict_SkyTowerChallengeRewardRecord, updRewardRecord)
+        SyncSkyTowerInfo(curPlayer)
+        
+        giveItemList = [[itemID, itemCnt, 0] for itemID, itemCnt in rewardInfo.items()]
+        event = ["SKYTowerServerChallengeReward", False, {"floorID":floorID}]
+        ItemControler.GivePlayerItemOrMail(curPlayer, giveItemList, None, event)
+        
+    return
+
+
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/ChPlayer.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/ChPlayer.py
index d2c2842..f16d602 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/ChPlayer.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/ChPlayer.py
@@ -67,6 +67,7 @@
 import PlayerFreeGoods
 import PlayerRecover
 import GameLogic_IceLode
+import GameLogic_SkyTower
 import PlayerEquipDecompose
 import PlayerGreatMaster
 import PlayerGatherSoul
@@ -5374,6 +5375,9 @@
     #历史累计充值领取
     elif rewardType == ChConfig.Def_RewardType_HistoryChargeAward:
         PlayerGoldGift.OnGetHistoryRechargeAward(curPlayer, dataEx)
+    #天星塔全服挑战层领奖
+    elif rewardType == ChConfig.Def_RewardType_SkyTowerServerChallengeReward:
+        GameLogic_SkyTower.OnGetSkyTowerServerChallengeReward(curPlayer, dataEx)
     return
     
     
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/RemoteQuery/GY_Query_SkyTower.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/RemoteQuery/GY_Query_SkyTower.py
new file mode 100644
index 0000000..4f829a9
--- /dev/null
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/RemoteQuery/GY_Query_SkyTower.py
@@ -0,0 +1,50 @@
+#!/usr/bin/python
+# -*- coding: GBK -*-
+#-------------------------------------------------------------------------------
+#
+##@package Player.RemoteQuery.GY_Query_SkyTower
+#
+# @todo:天星塔
+# @author hxp
+# @date 2020年03月02日
+# @version 1.0
+#
+# 详细描述: 天星塔
+#
+#-------------------------------------------------------------------------------
+#"""Version = 2020年03月02日 20:00"""
+#-------------------------------------------------------------------------------
+
+import GameWorld
+import GameLogic_SkyTower
+
+#---------------------------------------------------------------------
+#逻辑实现
+## 请求逻辑
+#  @param query_Type 请求类型
+#  @param query_ID 请求的玩家ID
+#  @param packCMDList 发包命令 [ ]
+#  @param tick 当前时间
+#  @return "True" or "False" or ""
+#  @remarks 函数详细说明.
+def DoLogic(query_Type, query_ID, packCMDList, tick):
+    return ""
+
+#---------------------------------------------------------------------
+#执行结果
+## 执行结果
+#  @param curPlayer 发出请求的玩家
+#  @param callFunName 功能名称
+#  @param funResult 查询的结果
+#  @param tick 当前时间
+#  @return None
+#  @remarks 函数详细说明.
+def DoResult(curPlayer, callFunName, funResult, tick):
+    
+    GameWorld.DebugLog("GY_Query_SkyTower funResult=%s" % str(funResult))
+    if funResult == "":
+        return
+    GameLogic_SkyTower.GameServer_SkyTowerInfo(curPlayer, eval(funResult))
+    return
+
+
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ShareDefine.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ShareDefine.py
index 17db528..7523028 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ShareDefine.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ShareDefine.py
@@ -653,8 +653,10 @@
     Def_BT_Campaign_StarLV,                   #升星等级(开服活动榜) 25
     Def_BT_Campaign_Wash,                     #洗练战力(开服活动榜)
     
+    Def_BT_SkyTower,                          #天星塔榜
+    
     Def_BT_Max,                               #排行榜最大类型
-) = range(0, 26 + 2) 
+) = range(0, 27 + 2) 
     
 #职业对应战力排行榜类型
 JobFightPowerBillboardDict = {
@@ -666,6 +668,7 @@
 #排行榜Value1存储境界信息的榜单列表
 BTValue1_OfficialRankList = [Def_BT_FightPower, Def_BT_FightPower_Warrior, Def_BT_FightPower_Wizard, Def_BT_FightPower_Assassin, 
                              Def_BT_LV, Def_BT_FightPower_Horse, Def_BT_FightPower_Pet, Def_BT_TrialTower, Def_BT_OffLineEfficient,
+                             Def_BT_SkyTower,
                              ]
 
 ##---比率---
@@ -1045,7 +1048,7 @@
                                 Def_UniversalGameRecType_YesterdayPlayerLVInfo,#昨日活跃玩家等级信息7
                                 Def_UniversalGameRecType_StoreServerCntRecord,  #商店全服购买记录 8,
                                 Def_UniversalGameRecType_FBHelpBattleCheckInPlayer, #助战玩家登记记录9
-                                Def_UniversalGameRecType_10,
+                                Def_UniversalGameRecType_SkyTowerPassPlayer, #天星塔过关玩家记录10
                                 Def_UniversalGameRecType_ZhuXianBossRecord, #诛仙BOSS结算记录11
                                 Def_UniversalGameRecType_LuckyTreasure, #幸运鉴宝大奖记录12
                                 Def_UniversalGameRecType_FairyDomain, #缥缈仙域事件次数记录13

--
Gitblit v1.8.0