From cdb5d93a9fd7b32a2ed178feed4eee20ee6502e5 Mon Sep 17 00:00:00 2001
From: hxp <ale99527@vip.qq.com>
Date: 星期一, 11 二月 2019 15:41:24 +0800
Subject: [PATCH] 5940 【后端】【1.6】跨服PK奖励配置规则优化
---
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/IpyGameDataPY.py | 50 ++++++++++++++++++++++++-
PySysDB/PySysDBPY.h | 22 ++++++++++-
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerCrossRealmPK.py | 34 ++++++++++++-----
3 files changed, 92 insertions(+), 14 deletions(-)
diff --git a/PySysDB/PySysDBPY.h b/PySysDB/PySysDBPY.h
index 35e2da1..bb29224 100644
--- a/PySysDB/PySysDBPY.h
+++ b/PySysDB/PySysDBPY.h
@@ -1478,8 +1478,26 @@
struct tagCrossRealmPKDan
{
BYTE _DanLV; //段位等级
- list DanLVAwardList; //段位达标奖励物品列表
- list SeasonDanLVAwardList; //赛季段位奖励物品列表
+};
+
+//跨服竞技场段位奖励表
+
+struct tagCrossRealmPKDanAward
+{
+ char _CrossZoneName; //跨服分区名
+ BYTE _SeasonID; //赛季ID
+ BYTE _DanLV; //段位等级
+ list DanLVAwardList; //段位达标奖励物品列表 [[奖励物品ID,个数,是否绑定], ...]
+ list SeasonDanLVAwardList; //赛季段位奖励物品列表 [[奖励物品ID,个数,是否绑定], ...]
+};
+
+//跨服竞技场排名奖励表
+
+struct tagCrossRealmPKOrderAward
+{
+ char _CrossZoneName; //跨服分区名
+ BYTE _SeasonID; //赛季ID
+ dict OrderAwardInfo; //赛季排名奖励信息 {"排名":[[奖励物品ID,个数,是否绑定], ...], ...}
};
//跨服分区表通用
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/IpyGameDataPY.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/IpyGameDataPY.py
index 96c7cf6..933fd8c 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/IpyGameDataPY.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/IpyGameDataPY.py
@@ -1169,8 +1169,20 @@
"CrossRealmPKDan":(
("BYTE", "DanLV", 1),
+ ),
+
+ "CrossRealmPKDanAward":(
+ ("char", "CrossZoneName", 1),
+ ("BYTE", "SeasonID", 1),
+ ("BYTE", "DanLV", 1),
("list", "DanLVAwardList", 0),
("list", "SeasonDanLVAwardList", 0),
+ ),
+
+ "CrossRealmPKOrderAward":(
+ ("char", "CrossZoneName", 1),
+ ("BYTE", "SeasonID", 1),
+ ("dict", "OrderAwardInfo", 0),
),
"CrossZoneComm":(
@@ -3725,14 +3737,40 @@
class IPY_CrossRealmPKDan():
def __init__(self):
+ self.DanLV = 0
+ return
+
+ def GetDanLV(self): return self.DanLV # 段位等级
+
+# 跨服竞技场段位奖励表
+class IPY_CrossRealmPKDanAward():
+
+ def __init__(self):
+ self.CrossZoneName = ""
+ self.SeasonID = 0
self.DanLV = 0
self.DanLVAwardList = []
self.SeasonDanLVAwardList = []
return
+ def GetCrossZoneName(self): return self.CrossZoneName # 跨服分区名
+ def GetSeasonID(self): return self.SeasonID # 赛季ID
def GetDanLV(self): return self.DanLV # 段位等级
- def GetDanLVAwardList(self): return self.DanLVAwardList # 段位达标奖励物品列表
- def GetSeasonDanLVAwardList(self): return self.SeasonDanLVAwardList # 赛季段位奖励物品列表
+ def GetDanLVAwardList(self): return self.DanLVAwardList # 段位达标奖励物品列表 [[奖励物品ID,个数,是否绑定], ...]
+ def GetSeasonDanLVAwardList(self): return self.SeasonDanLVAwardList # 赛季段位奖励物品列表 [[奖励物品ID,个数,是否绑定], ...]
+
+# 跨服竞技场排名奖励表
+class IPY_CrossRealmPKOrderAward():
+
+ def __init__(self):
+ self.CrossZoneName = ""
+ self.SeasonID = 0
+ self.OrderAwardInfo = {}
+ return
+
+ def GetCrossZoneName(self): return self.CrossZoneName # 跨服分区名
+ def GetSeasonID(self): return self.SeasonID # 赛季ID
+ def GetOrderAwardInfo(self): return self.OrderAwardInfo # 赛季排名奖励信息 {"排名":[[奖励物品ID,个数,是否绑定], ...], ...}
# 跨服分区表通用
class IPY_CrossZoneComm():
@@ -4333,6 +4371,10 @@
self.ipyGodWeaponEffectLen = len(self.ipyGodWeaponEffectCache)
self.ipyCrossRealmPKDanCache = self.__LoadFileData("CrossRealmPKDan", IPY_CrossRealmPKDan)
self.ipyCrossRealmPKDanLen = len(self.ipyCrossRealmPKDanCache)
+ self.ipyCrossRealmPKDanAwardCache = self.__LoadFileData("CrossRealmPKDanAward", IPY_CrossRealmPKDanAward)
+ self.ipyCrossRealmPKDanAwardLen = len(self.ipyCrossRealmPKDanAwardCache)
+ self.ipyCrossRealmPKOrderAwardCache = self.__LoadFileData("CrossRealmPKOrderAward", IPY_CrossRealmPKOrderAward)
+ self.ipyCrossRealmPKOrderAwardLen = len(self.ipyCrossRealmPKOrderAwardCache)
self.ipyCrossZoneCommCache = self.__LoadFileData("CrossZoneComm", IPY_CrossZoneComm)
self.ipyCrossZoneCommLen = len(self.ipyCrossZoneCommCache)
self.ipyCrossPenglaiZoneMapCache = self.__LoadFileData("CrossPenglaiZoneMap", IPY_CrossPenglaiZoneMap)
@@ -4757,6 +4799,10 @@
def GetGodWeaponEffectByIndex(self, index): return self.ipyGodWeaponEffectCache[index]
def GetCrossRealmPKDanCount(self): return self.ipyCrossRealmPKDanLen
def GetCrossRealmPKDanByIndex(self, index): return self.ipyCrossRealmPKDanCache[index]
+ def GetCrossRealmPKDanAwardCount(self): return self.ipyCrossRealmPKDanAwardLen
+ def GetCrossRealmPKDanAwardByIndex(self, index): return self.ipyCrossRealmPKDanAwardCache[index]
+ def GetCrossRealmPKOrderAwardCount(self): return self.ipyCrossRealmPKOrderAwardLen
+ def GetCrossRealmPKOrderAwardByIndex(self, index): return self.ipyCrossRealmPKOrderAwardCache[index]
def GetCrossZoneCommCount(self): return self.ipyCrossZoneCommLen
def GetCrossZoneCommByIndex(self, index): return self.ipyCrossZoneCommCache[index]
def GetCrossPenglaiZoneMapCount(self): return self.ipyCrossPenglaiZoneMapLen
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerCrossRealmPK.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerCrossRealmPK.py
index eae412f..9c53acb 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerCrossRealmPK.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerCrossRealmPK.py
@@ -93,6 +93,16 @@
return GameWorld.GetGameWorld().GetGameWorldDictByKey(ShareDefine.Def_Notify_WorldKey_CrossDailyActionState \
% ShareDefine.DailyActionID_CrossReamPK) == ChConfig.Def_Action_Open
+def GetCrossPKDanAwardIpyData(seasonID, awardDanLV, isLog):
+ ## 获取跨服段位奖励配置信息
+ crossZoneName = GameWorld.GetCrossZoneName()
+ danLVAwardIpyData = IpyGameDataPY.GetIpyGameDataNotLog("CrossRealmPKDanAward", crossZoneName, seasonID, awardDanLV)
+ if not danLVAwardIpyData:
+ danLVAwardIpyData = IpyGameDataPY.GetIpyGameDataNotLog("CrossRealmPKDanAward", "", seasonID, awardDanLV)
+ if not danLVAwardIpyData and isLog:
+ GameWorld.ErrLog("找不到段位奖励配置: seasonID=%s, awardDanLV=%s" % (seasonID, awardDanLV))
+ return danLVAwardIpyData
+
def OnCrossRealmPKSeasonChange(value):
## 赛区赛季状态变更,规定所有赛区的赛季ID都一样,且赛季ID一定是自增的,所以这里只判断赛季ID变更即可
@@ -139,10 +149,10 @@
# 邮件发放上赛季未领取的段位奖励、赛季奖励(排名或段位)
for awardDanLV in xrange(playerDanLV + 1):
- danLVIpyData = IpyGameDataPY.GetIpyGameData("CrossRealmPKDan", awardDanLV)
- if not danLVIpyData:
+ danLVAwardIpyData = GetCrossPKDanAwardIpyData(seasonID, awardDanLV, False)
+ if not danLVAwardIpyData:
continue
- awardItemList = danLVIpyData.GetDanLVAwardList()
+ awardItemList = danLVAwardIpyData.GetDanLVAwardList()
if not awardItemList:
continue
if pow(2, awardDanLV) & danLVAwardState:
@@ -452,12 +462,12 @@
if playerDanLV < awardDanLV:
GameWorld.DebugLog(" 段位未达标,无法领取!", playerID)
return
- danLVIpyData = IpyGameDataPY.GetIpyGameData("CrossRealmPKDan", awardDanLV)
- if not danLVIpyData:
+ danLVAwardIpyData = GetCrossPKDanAwardIpyData(seasonID, awardDanLV, True)
+ if not danLVAwardIpyData:
return
awardIndex = awardDanLV
awardStateDictName = ChConfig.Def_PDict_CrossPK_DanLVAwardState
- awardItemList = danLVIpyData.GetDanLVAwardList()
+ awardItemList = danLVAwardIpyData.GetDanLVAwardList()
eventName = "DanLV"
drDataDict = {"awardDanLV":awardDanLV}
@@ -569,7 +579,11 @@
"order":order, "danLV":danLV, "mapSeasonID":mapSeasonID}
if order > 0:
PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_CrossPK_SeasonOrder % seasonID, order)
- seasonOrderAwardDict = IpyGameDataPY.GetFuncEvalCfg("CrossRealmPKAward", 3, {}) # {"名次":[[物品ID,个数,是否绑定], ...], ...}
+ crossZoneName = GameWorld.GetCrossZoneName()
+ seasonOrderAwardIpyData = IpyGameDataPY.GetIpyGameDataNotLog("CrossRealmPKOrderAward", crossZoneName, seasonID)
+ if not seasonOrderAwardIpyData:
+ seasonOrderAwardIpyData = IpyGameDataPY.GetIpyGameData("CrossRealmPKOrderAward", "", seasonID)
+ seasonOrderAwardDict = {} if not seasonOrderAwardIpyData else seasonOrderAwardIpyData.GetOrderAwardInfo() # {"名次":[[物品ID,个数,是否绑定], ...], ...}
awardOrderList = seasonOrderAwardDict.keys()
awardOrderList = [int(k) for k in awardOrderList]
awardOrderList.sort()
@@ -590,10 +604,10 @@
# 没有奖励的话取段位奖励
if not awardItemList:
- danLVIpyData = IpyGameDataPY.GetIpyGameData("CrossRealmPKDan", danLV)
- if not danLVIpyData:
+ danLVAwardIpyData = GetCrossPKDanAwardIpyData(seasonID, danLV, False)
+ if not danLVAwardIpyData:
return
- awardItemList = danLVIpyData.GetSeasonDanLVAwardList()
+ awardItemList = danLVAwardIpyData.GetSeasonDanLVAwardList()
mailTypeKey = "CrossServer5"
notifyKey = "CrossMatching24"
mailParamList = [seasonID, danLV]
--
Gitblit v1.8.0