From 21af42b4f4faaba0d2ccc6ee731c1deec4f514ab Mon Sep 17 00:00:00 2001
From: hxp <ale99527@vip.qq.com>
Date: 星期四, 27 一月 2022 11:10:38 +0800
Subject: [PATCH] 5349 【主干】【gt_1.103.1】【yn_1.0.1】【bt3_1.102.1】【bt4】【bt5】【bt5_1.101.1】【bt6】开服活动合服后上线的无法结算奖励bug
---
ServerPython/CoreServerGroup/GameServer/Script/GM/Commands/ClearOpenServerDay.py | 2
ServerPython/CoreServerGroup/GameServer/Script/IpyGameDataPY.py | 26 +++
ServerPython/CoreServerGroup/GameServer/Script/GameWorldLogic/GameWorldProcess.py | 2
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/OpenServerCampaign.py | 175 +++++++++---------------
ServerPython/CoreServerGroup/GameServer/Script/GameWorldLogic/GameWorldOpenServerCampaign.py | 144 ++++++++++++++++---
PySysDB/PySysDBG.h | 10 +
ServerPython/CoreServerGroup/GameServer/Script/Player/PlayerDBGSEvent.py | 5
7 files changed, 227 insertions(+), 137 deletions(-)
diff --git a/PySysDB/PySysDBG.h b/PySysDB/PySysDBG.h
index b2a77bc..26ad42b 100644
--- a/PySysDB/PySysDBG.h
+++ b/PySysDB/PySysDBG.h
@@ -232,6 +232,16 @@
list ServerFirstKillPlayerAward; // 全服首杀玩家奖励 [[物品ID,个数,是否拍品], ...]
};
+//全民冲榜排行奖励表
+
+struct tagOSCBillRankAward
+{
+ BYTE _OSCBillType; //冲榜类型
+ BYTE RankA; //排名A
+ BYTE RankB; //至排名B
+ dict RankAward; //排名奖励 {"职业":[[物品ID,个数],...], ...}
+};
+
//宴会题库表
struct tagQuestionBank
diff --git a/ServerPython/CoreServerGroup/GameServer/Script/GM/Commands/ClearOpenServerDay.py b/ServerPython/CoreServerGroup/GameServer/Script/GM/Commands/ClearOpenServerDay.py
index 717ac12..12a1a49 100644
--- a/ServerPython/CoreServerGroup/GameServer/Script/GM/Commands/ClearOpenServerDay.py
+++ b/ServerPython/CoreServerGroup/GameServer/Script/GM/Commands/ClearOpenServerDay.py
@@ -65,6 +65,8 @@
GameWorld.SendMapServerMsgEx(ShareDefine.Def_Notify_WorldKey_OpenServerWeekday, openServerWeekday)
# 清除开服活动相关排行榜
+ PlayerDBGSEvent.SetDBGSTrig_ByKey(PlayerDBGSEvent.Def_OSCBillAwardVerDay, 0)
+ PlayerDBGSEvent.SetDBGSTrig_ByKey(PlayerDBGSEvent.Def_OSCBillAwardRecord, 0)
for oscBillboardType in ShareDefine.Def_Campaign_Billboard_Dict.values():
PlayerBillboard.ClearBillboardByIndex(oscBillboardType)
diff --git a/ServerPython/CoreServerGroup/GameServer/Script/GameWorldLogic/GameWorldOpenServerCampaign.py b/ServerPython/CoreServerGroup/GameServer/Script/GameWorldLogic/GameWorldOpenServerCampaign.py
index 16c993e..a8f1a9a 100644
--- a/ServerPython/CoreServerGroup/GameServer/Script/GameWorldLogic/GameWorldOpenServerCampaign.py
+++ b/ServerPython/CoreServerGroup/GameServer/Script/GameWorldLogic/GameWorldOpenServerCampaign.py
@@ -15,43 +15,133 @@
#"""Version = 2018-03-06 11:00"""
#-------------------------------------------------------------------------------
-
import GameWorld
import ShareDefine
+import IpyGameDataPY
+import PlayerDBGSEvent
+import PlayerCompensation
+import PlayerFamilyRedPacket
+(
+OSC_BillLimitValue, # 上榜限制值
+OSC_StartDay, # 开启开服天
+OSC_EndDay, # 结束开服天
+) = range(3)
def CanGiveCampaignAward(curPlayer, msgList):
## 可否领取开服活动榜单奖励
-
- if not curPlayer:
- return msgList
-
- campTypeList, isEndMail = msgList
-
- queryResultList = []
- for oscType in campTypeList:
- queryResultList.append(__GetGiveCampaignAwardInfo(curPlayer, oscType))
- msgList.append(queryResultList)
-
- GameWorld.DebugLog("请求领取开服活动奖励: campTypeList=%s,isEndMail=%s,queryResultList=%s"
- % (campTypeList, isEndMail, queryResultList), curPlayer.GetPlayerID())
+ # 不可手动领取榜单奖励,改为过天直接结算发放
return msgList
+# if not curPlayer:
+# return msgList
+#
+# campTypeList, isEndMail = msgList
+#
+# queryResultList = []
+# for oscType in campTypeList:
+# queryResultList.append(__GetGiveCampaignAwardInfo(curPlayer, oscType))
+# msgList.append(queryResultList)
+#
+# GameWorld.DebugLog("请求领取开服活动奖励: campTypeList=%s,isEndMail=%s,queryResultList=%s"
+# % (campTypeList, isEndMail, queryResultList), curPlayer.GetPlayerID())
+# return msgList
+#
+#def __GetGiveCampaignAwardInfo(curPlayer, campaignType):
+# ## 获取领奖所需的信息
+#
+# awardBillboardType = ShareDefine.Def_Campaign_Billboard_Dict.get(campaignType)
+# if not awardBillboardType:
+# return 0
+#
+# billBoard = GameWorld.GetBillboard().FindBillboard(awardBillboardType)
+# if not billBoard:
+# return 0
+#
+# curPlayerID = curPlayer.GetPlayerID()
+# order = billBoard.IndexOfByID(curPlayerID) + 1 # 玩家在排行榜中的名次
+# GameWorld.DebugLog(" 奖励榜: campaignType=%s,order=%s" % (campaignType, order), curPlayerID)
+# return order
-def __GetGiveCampaignAwardInfo(curPlayer, campaignType):
- ## 获取领奖所需的信息
+def DoOnDay():
- awardBillboardType = ShareDefine.Def_Campaign_Billboard_Dict.get(campaignType)
- if not awardBillboardType:
- return 0
+ openServerDay = PlayerDBGSEvent.GetDBGSTrig_ByKey(PlayerDBGSEvent.Def_ServerDay) + 1
+ billAwardVerDay = PlayerDBGSEvent.GetDBGSTrig_ByKey(PlayerDBGSEvent.Def_OSCBillAwardVerDay)
+ billAwardRecord = PlayerDBGSEvent.GetDBGSTrig_ByKey(PlayerDBGSEvent.Def_OSCBillAwardRecord)
+ if not billAwardVerDay:
+ billAwardVerDay = openServerDay - 1
+ PlayerDBGSEvent.SetDBGSTrig_ByKey(PlayerDBGSEvent.Def_OSCBillAwardVerDay, billAwardVerDay)
+ GameWorld.Log("设置开服冲榜结算版本天: billAwardVerDay=%s" % (billAwardVerDay))
+ GameWorld.DebugLog("过天处理开服活动榜单结算: billAwardVerDay=%s,openServerDay=%s,billAwardRecord=%s" % (billAwardVerDay, openServerDay, billAwardRecord))
- billBoard = GameWorld.GetBillboard().FindBillboard(awardBillboardType)
+ OSCBillboardDataLimitDict = IpyGameDataPY.GetFuncEvalCfg("OSCBillboardOpen", 1)
+ for campType in ShareDefine.Def_Campaign_Type_List:
+ campTypeS = str(campType)
+ if campTypeS not in OSCBillboardDataLimitDict:
+ continue
+ endOpenServerDay = OSCBillboardDataLimitDict[campTypeS][OSC_EndDay]
+ if endOpenServerDay < billAwardVerDay:
+ GameWorld.DebugLog(" 该开服活动结算天在结算版本天之前,不处理! campType=%s,endOpenServerDay=%s < billAwardVerDay=%s"
+ % (campType, endOpenServerDay, billAwardVerDay))
+ continue
+ if openServerDay <= endOpenServerDay:
+ GameWorld.DebugLog(" 该开服活动还未结束,无需结算! campType=%s,openServerDay=%s <= endOpenServerDay=%s"
+ % (campType, openServerDay, endOpenServerDay))
+ continue
+ DoGiveOSCBillAward(openServerDay, campType)
+
+ return
+
+def DoGiveOSCBillAward(openServerDay, campType):
+ billAwardRecord = PlayerDBGSEvent.GetDBGSTrig_ByKey(PlayerDBGSEvent.Def_OSCBillAwardRecord)
+ if billAwardRecord & pow(2, campType):
+ GameWorld.DebugLog(" 该开服活动排行奖励已经结算过! campType=%s" % (campType))
+ return
+
+ billboardType = ShareDefine.Def_Campaign_Billboard_Dict.get(campType)
+ GameWorld.Log("结算开服活动榜单! openServerDay=%s,campType=%s,billboardType=%s,billAwardRecord=%s"
+ % (openServerDay, campType, billboardType, billAwardRecord))
+ billBoard = GameWorld.GetBillboard().FindBillboard(billboardType)
if not billBoard:
- return 0
+ return
- curPlayerID = curPlayer.GetPlayerID()
- order = billBoard.IndexOfByID(curPlayerID) + 1 # 玩家在排行榜中的名次
- GameWorld.DebugLog(" 奖励榜: campaignType=%s,order=%s" % (campaignType, order), curPlayerID)
- return order
-
-
+ billRankAwardIpyList = IpyGameDataPY.GetIpyGameDataList("OSCBillRankAward", campType)
+ if not billRankAwardIpyList:
+ return
+ orderAwardDict = {}
+ for billRankIpyData in billRankAwardIpyList:
+ orderAwardDict[int(billRankIpyData.GetRankB())] = billRankIpyData.GetRankAward()
+
+ updBillAwardRecord = billAwardRecord | pow(2, campType)
+ PlayerDBGSEvent.SetDBGSTrig_ByKey(PlayerDBGSEvent.Def_OSCBillAwardRecord, updBillAwardRecord)
+ redPacketIDDict = IpyGameDataPY.GetFuncEvalCfg('OSCRankRedpackAward', 1, {})
+ GameWorld.Log(" campType=%s,updBillAwardRecord=%s,orderAwardDict=%s,redPacketIDDict=%s"
+ % (campType, updBillAwardRecord, orderAwardDict, redPacketIDDict))
+
+ for index in xrange(billBoard.GetCount()):
+ billBoardData = billBoard.At(index)
+ if not billBoardData:
+ continue
+ order = index + 1
+ playerID = billBoardData.GetID()
+ job = billBoardData.GetType2()
+ jobAwardDict = GameWorld.GetOrderValueByDict(orderAwardDict, order, False)
+ if not jobAwardDict:
+ #GameWorld.ErrLog("没有开服活动榜单奖励! campType=%s,order=%s,playerID=%s" % (campType, order, playerID))
+ continue
+ if str(job) not in jobAwardDict:
+ GameWorld.ErrLog("没有配置该职业对应的开服活动榜单奖励! campType=%s,order=%s,job=%s,jobAwardDict=%s"
+ % (campType, order, job, jobAwardDict))
+ continue
+ awardItemList = jobAwardDict[str(job)]
+ paramList = [order]
+ GameWorld.Log("发放开服活动榜单奖励: campType=%s,billboardType=%s,order=%s,playerID=%s,job=%s,awardItemList=%s"
+ % (campType, billboardType, order, playerID, job, awardItemList))
+ PlayerCompensation.SendMailByKey("OSCBillAward%s" % campType, [playerID], awardItemList, paramList)
+
+ #红包奖励
+ redPacketID = GameWorld.GetDictValueByRangeKey(redPacketIDDict, order, 0)
+ if redPacketID:
+ PlayerFamilyRedPacket.CreateSystemRedPacket(redPacketID)
+
+ return
diff --git a/ServerPython/CoreServerGroup/GameServer/Script/GameWorldLogic/GameWorldProcess.py b/ServerPython/CoreServerGroup/GameServer/Script/GameWorldLogic/GameWorldProcess.py
index 6c323bc..f5a72f5 100644
--- a/ServerPython/CoreServerGroup/GameServer/Script/GameWorldLogic/GameWorldProcess.py
+++ b/ServerPython/CoreServerGroup/GameServer/Script/GameWorldLogic/GameWorldProcess.py
@@ -107,6 +107,7 @@
import CrossBoss
import ChPlayer
import PyDataManager
+import GameWorldOpenServerCampaign
#---------------------------------------------------------------------
#---------------------------------------------------------------------
@@ -167,6 +168,7 @@
# 通知开服天数
#openServerDay = PlayerDBGSEvent.GetDBGSTrig_ByKey(PlayerDBGSEvent.Def_ServerDay)
#GameWorld.SendMapServerMsgEx(ShareDefine.Def_Notify_WorldKey_ServerDay, openServerDay)
+ GameWorldOpenServerCampaign.DoOnDay()
#清理过期补偿
PlayerCompensation.ClearUpTimeOutCompensation()
#PlayerGeTui.ClearFMTGeTuiLimit()
diff --git a/ServerPython/CoreServerGroup/GameServer/Script/IpyGameDataPY.py b/ServerPython/CoreServerGroup/GameServer/Script/IpyGameDataPY.py
index 184986f..76e2ec6 100644
--- a/ServerPython/CoreServerGroup/GameServer/Script/IpyGameDataPY.py
+++ b/ServerPython/CoreServerGroup/GameServer/Script/IpyGameDataPY.py
@@ -209,6 +209,13 @@
("list", "ServerFirstKillPlayerAward", 0),
),
+ "OSCBillRankAward":(
+ ("BYTE", "OSCBillType", 1),
+ ("BYTE", "RankA", 0),
+ ("BYTE", "RankB", 0),
+ ("dict", "RankAward", 0),
+ ),
+
"QuestionBank":(
("DWORD", "ID", 1),
("char", "Answer", 0),
@@ -1190,6 +1197,21 @@
def GetNPCID(self): return self.NPCID # ID
def GetServerFirstKillPlayerAward(self): return self.ServerFirstKillPlayerAward # 全服首杀玩家奖励 [[物品ID,个数,是否拍品], ...]
+
+# 全民冲榜排行奖励表
+class IPY_OSCBillRankAward():
+
+ def __init__(self):
+ self.OSCBillType = 0
+ self.RankA = 0
+ self.RankB = 0
+ self.RankAward = {}
+ return
+
+ def GetOSCBillType(self): return self.OSCBillType # 冲榜类型
+ def GetRankA(self): return self.RankA # 排名A
+ def GetRankB(self): return self.RankB # 至排名B
+ def GetRankAward(self): return self.RankAward # 排名奖励 {"职业":[[物品ID,个数],...], ...}
# 宴会题库表
class IPY_QuestionBank():
@@ -2522,6 +2544,8 @@
self.ipyBOSSInfoLen = len(self.ipyBOSSInfoCache)
self.ipyBOSSFirstKillCache = self.__LoadFileData("BOSSFirstKill", IPY_BOSSFirstKill)
self.ipyBOSSFirstKillLen = len(self.ipyBOSSFirstKillCache)
+ self.ipyOSCBillRankAwardCache = self.__LoadFileData("OSCBillRankAward", IPY_OSCBillRankAward)
+ self.ipyOSCBillRankAwardLen = len(self.ipyOSCBillRankAwardCache)
self.ipyQuestionBankCache = self.__LoadFileData("QuestionBank", IPY_QuestionBank)
self.ipyQuestionBankLen = len(self.ipyQuestionBankCache)
self.ipyFamilyRedPackCache = self.__LoadFileData("FamilyRedPack", IPY_FamilyRedPack)
@@ -2836,6 +2860,8 @@
def GetBOSSInfoByIndex(self, index): return self.ipyBOSSInfoCache[index]
def GetBOSSFirstKillCount(self): return self.ipyBOSSFirstKillLen
def GetBOSSFirstKillByIndex(self, index): return self.ipyBOSSFirstKillCache[index]
+ def GetOSCBillRankAwardCount(self): return self.ipyOSCBillRankAwardLen
+ def GetOSCBillRankAwardByIndex(self, index): return self.ipyOSCBillRankAwardCache[index]
def GetQuestionBankCount(self): return self.ipyQuestionBankLen
def GetQuestionBankByIndex(self, index): return self.ipyQuestionBankCache[index]
def GetFamilyRedPackCount(self): return self.ipyFamilyRedPackLen
diff --git a/ServerPython/CoreServerGroup/GameServer/Script/Player/PlayerDBGSEvent.py b/ServerPython/CoreServerGroup/GameServer/Script/Player/PlayerDBGSEvent.py
index e9f1e45..bd006c6 100644
--- a/ServerPython/CoreServerGroup/GameServer/Script/Player/PlayerDBGSEvent.py
+++ b/ServerPython/CoreServerGroup/GameServer/Script/Player/PlayerDBGSEvent.py
@@ -77,6 +77,11 @@
#服务器合服首次启动OK
Def_IsMixServerInitOK = 'IsMixServerInitOK'
+#开服活动榜单结算版本更新时的开服天,主要用于旧服判断不重复发放奖励
+Def_OSCBillAwardVerDay = 'OSCBillAwardVerDay'
+#开服活动榜单结算状态,按冲榜类型二进制位存储是否已结算
+Def_OSCBillAwardRecord = 'OSCBillAwardRecord'
+
#上次合服时的开服天数
Def_LastMixServerDay = 'LastMixServerDay'
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/OpenServerCampaign.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/OpenServerCampaign.py
index 58c72e2..30a16b1 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/OpenServerCampaign.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/OpenServerCampaign.py
@@ -27,8 +27,6 @@
import PlayerFamilyRedPacket
import ItemCommon
-OSCBillAward_IsAutoMail = True # 排名奖励是否过天直接系统自动发放,如果不是则玩家可手动领取
-
(
OSC_BillLimitValue, # 上榜限制值
OSC_StartDay, # 开启开服天
@@ -140,8 +138,6 @@
awardEndOpenServerDay = IpyGameDataPY.GetFuncCfg("OSCBillboardOpen", 2)
if openServerDay <= awardEndOpenServerDay:
GameWorld.DebugLog("开服活动中,过天不处理!openServerDay=%s,awardEndOpenServerDay=%s" % (openServerDay, awardEndOpenServerDay))
- if OSCBillAward_IsAutoMail:
- __DoOSCBillAward_OnDayAutoGet(curPlayer, openServerDay)
return False
endMailState = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_OSC_EndMailState)
@@ -149,67 +145,27 @@
GameWorld.DebugLog("已经处理过开服活动奖励补发!")
return True
- billAwardRecord = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_OSC_BillAwardRecord)
- GameWorld.DebugLog("处理开服活动补发邮件, billAwardRecord=%s" % billAwardRecord, curPlayer.GetPlayerID())
-
- sendMailCampTypeList = []
for campType in ShareDefine.Def_Campaign_Type_List:
- if not billAwardRecord & pow(2, campType):
- sendMailCampTypeList.append(campType)
-
tagAwardIpyList = GetOSCTagAwardIpyList(campType)
for index, tagAwardIpyData in enumerate(tagAwardIpyList):
DoGiveOSCTagAward(curPlayer, campType, index, tagAwardIpyData, True)
- GameWorld.DebugLog(" 未领取奖励的活动榜单列表: %s" % sendMailCampTypeList)
- if sendMailCampTypeList:
- __SendOSCGameServerQuery(curPlayer, sendMailCampTypeList, True)
-
PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_OSC_EndMailState, 1)
return True
-def __DoOSCBillAward_OnDayAutoGet(curPlayer, openServerDay):
- ## 排行奖励过天自动领取处理
- playerID = curPlayer.GetPlayerID()
-
- billAwardRecord = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_OSC_BillAwardRecord)
- #GameWorld.DebugLog("过天系统自动帮玩家领取开服活动排行奖励! billAwardRecord=%s" % billAwardRecord, playerID)
-
- sendMailCampTypeList = []
- OSCBillboardDataLimitDict = IpyGameDataPY.GetFuncEvalCfg("OSCBillboardOpen", 1)
- for campType in ShareDefine.Def_Campaign_Type_List:
- campTypeS = str(campType)
- if campTypeS not in OSCBillboardDataLimitDict:
- continue
- endOpenServerDay = OSCBillboardDataLimitDict[campTypeS][OSC_EndDay]
- if openServerDay <= endOpenServerDay:
- #GameWorld.DebugLog(" 该开服活动还未结束,无需结算!campType=%s,openServerDay=%s <= endOpenServerDay=%s"
- # % (campType, openServerDay, endOpenServerDay), playerID)
- continue
- if billAwardRecord & pow(2, campType):
- #GameWorld.DebugLog(" 该开服活动排行奖励已经领取过!campType=%s" % (campType), playerID)
- continue
- sendMailCampTypeList.append(campType)
-
- #GameWorld.DebugLog(" 未领取奖励的活动榜单列表: %s" % sendMailCampTypeList, playerID)
- if sendMailCampTypeList:
- __SendOSCGameServerQuery(curPlayer, sendMailCampTypeList, True)
-
- return
-
-def __SendOSCGameServerQuery(curPlayer, campTypeList, isEndMail=False):
- # 以下为需要向GameServer请求领取奖励所需信息
- # @param isEndMail: 是否使用邮件发放
- if curPlayer.GetDictByKey(ChConfig.Def_PlayerKey_QueryOpenServerAwardState) == 1:
- #已经在查询中
- GameWorld.DebugLog(" 已经在查询中...")
- return
- curPlayer.SetDict(ChConfig.Def_PlayerKey_QueryOpenServerAwardState, 1)
-
- msgListStr = str([campTypeList, isEndMail])
- GameWorld.GetPlayerManager().GameServer_QueryPlayerResult(curPlayer.GetID(), 0, 0, 'OpenServerCampaignAward', msgListStr, len(msgListStr))
- GameWorld.DebugLog(" __SendOSCGameServerQuery campTypeList=%s, isEndMail=%s" % (campTypeList, isEndMail), curPlayer.GetPlayerID())
- return
+#def __SendOSCGameServerQuery(curPlayer, campTypeList, isEndMail=False):
+# # 以下为需要向GameServer请求领取奖励所需信息
+# # @param isEndMail: 是否使用邮件发放
+# if curPlayer.GetDictByKey(ChConfig.Def_PlayerKey_QueryOpenServerAwardState) == 1:
+# #已经在查询中
+# GameWorld.DebugLog(" 已经在查询中...")
+# return
+# curPlayer.SetDict(ChConfig.Def_PlayerKey_QueryOpenServerAwardState, 1)
+#
+# msgListStr = str([campTypeList, isEndMail])
+# GameWorld.GetPlayerManager().GameServer_QueryPlayerResult(curPlayer.GetID(), 0, 0, 'OpenServerCampaignAward', msgListStr, len(msgListStr))
+# GameWorld.DebugLog(" __SendOSCGameServerQuery campTypeList=%s, isEndMail=%s" % (campTypeList, isEndMail), curPlayer.GetPlayerID())
+# return
#// AB 11 开服活动奖励 #tagCMOpenServerCampaignAward
@@ -249,11 +205,9 @@
# 排行奖励
if awardType == 1:
- if OSCBillAward_IsAutoMail:
- GameWorld.DebugLog("开服排名奖励玩家不可手动领取!")
- return
- __SendOSCGameServerQuery(curPlayer, [campaignType])
-
+ # 自动发放,不可手动领取
+ return
+
# 目标奖励
elif awardType == 2:
tagAwardIpyList = GetOSCTagAwardIpyList(campaignType)
@@ -307,55 +261,56 @@
def DoGiveOSCBillAward(curPlayer, awardResultList):
## 给排行奖励
- campTypeList, isEndMail, queryResultList = awardResultList
- if len(campTypeList) != len(queryResultList):
- return
-
- job = str(curPlayer.GetJob())
- for i, campaignType in enumerate(campTypeList):
- billAwardRecord = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_OSC_BillAwardRecord)
- if billAwardRecord & pow(2, campaignType):
- GameWorld.DebugLog(" 已经领取过该排行活动奖励, campaignType=%s" % (campaignType), curPlayer.GetPlayerID())
- continue
-
- order = queryResultList[i]
- billAwardInfo = None
- billRankAwardIpyList = IpyGameDataPY.GetIpyGameDataList("OSCBillRankAward", campaignType)
- if not billRankAwardIpyList:
- continue
- for billRankIpyData in billRankAwardIpyList:
- if (billRankIpyData.GetRankA() <= order <= billRankIpyData.GetRankB()) \
- or (not billRankIpyData.GetRankB() and billRankIpyData.GetRankA() == order):
- billAwardInfo = billRankIpyData.GetRankAward()
- break
-
- if not billAwardInfo:
- GameWorld.DebugLog(" 玩家名次没有奖励!campaignType=%s,order=%s" % (campaignType, order), curPlayer.GetPlayerID())
- continue
-
- billAwardDict = billAwardInfo
- if job not in billAwardDict:
- GameWorld.ErrLog("没有配置该职业对应的开服活动榜单奖励!campaignType=%s,job=%s" % (campaignType, job))
- continue
- awardItemList = billAwardDict[job]
-
- updBillAwardRecord = billAwardRecord|pow(2, campaignType)
- PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_OSC_BillAwardRecord, updBillAwardRecord)
- GameWorld.DebugLog(" 发放活动榜单奖励,campaignType=%s,order=%s,awardItemList=%s,updBillAwardRecord=%s"
- % (campaignType, order, awardItemList, updBillAwardRecord), curPlayer.GetPlayerID())
-
- drDict = {"CampaignType":campaignType, "Order":order}
- mailTypeKey = "OSCBillAward%s" % campaignType
- mailParamList = [order]
- __DoGiveOSCAwardItem(curPlayer, awardItemList, drDict, isEndMail, mailTypeKey, mailParamList)
- #红包奖励
- redPacketIDDict = IpyGameDataPY.GetFuncEvalCfg('OSCRankRedpackAward', 1, {})
- redPacketID = GameWorld.GetDictValueByRangeKey(redPacketIDDict, order, 0)
- if redPacketID:
- PlayerFamilyRedPacket.CreatRedPacketByID(curPlayer, redPacketID)
- #if not isEndMail:
- Sync_OpenServerCampaignAward(curPlayer, campaignType)
return
+# campTypeList, isEndMail, queryResultList = awardResultList
+# if len(campTypeList) != len(queryResultList):
+# return
+#
+# job = str(curPlayer.GetJob())
+# for i, campaignType in enumerate(campTypeList):
+# billAwardRecord = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_OSC_BillAwardRecord)
+# if billAwardRecord & pow(2, campaignType):
+# GameWorld.DebugLog(" 已经领取过该排行活动奖励, campaignType=%s" % (campaignType), curPlayer.GetPlayerID())
+# continue
+#
+# order = queryResultList[i]
+# billAwardInfo = None
+# billRankAwardIpyList = IpyGameDataPY.GetIpyGameDataList("OSCBillRankAward", campaignType)
+# if not billRankAwardIpyList:
+# continue
+# for billRankIpyData in billRankAwardIpyList:
+# if (billRankIpyData.GetRankA() <= order <= billRankIpyData.GetRankB()) \
+# or (not billRankIpyData.GetRankB() and billRankIpyData.GetRankA() == order):
+# billAwardInfo = billRankIpyData.GetRankAward()
+# break
+#
+# if not billAwardInfo:
+# GameWorld.DebugLog(" 玩家名次没有奖励!campaignType=%s,order=%s" % (campaignType, order), curPlayer.GetPlayerID())
+# continue
+#
+# billAwardDict = billAwardInfo
+# if job not in billAwardDict:
+# GameWorld.ErrLog("没有配置该职业对应的开服活动榜单奖励!campaignType=%s,job=%s" % (campaignType, job))
+# continue
+# awardItemList = billAwardDict[job]
+#
+# updBillAwardRecord = billAwardRecord|pow(2, campaignType)
+# PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_OSC_BillAwardRecord, updBillAwardRecord)
+# GameWorld.DebugLog(" 发放活动榜单奖励,campaignType=%s,order=%s,awardItemList=%s,updBillAwardRecord=%s"
+# % (campaignType, order, awardItemList, updBillAwardRecord), curPlayer.GetPlayerID())
+#
+# drDict = {"CampaignType":campaignType, "Order":order}
+# mailTypeKey = "OSCBillAward%s" % campaignType
+# mailParamList = [order]
+# __DoGiveOSCAwardItem(curPlayer, awardItemList, drDict, isEndMail, mailTypeKey, mailParamList)
+# #红包奖励
+# redPacketIDDict = IpyGameDataPY.GetFuncEvalCfg('OSCRankRedpackAward', 1, {})
+# redPacketID = GameWorld.GetDictValueByRangeKey(redPacketIDDict, order, 0)
+# if redPacketID:
+# PlayerFamilyRedPacket.CreatRedPacketByID(curPlayer, redPacketID)
+# #if not isEndMail:
+# Sync_OpenServerCampaignAward(curPlayer, campaignType)
+# return
def __DoGiveOSCAwardItem(curPlayer, giveItemList, drDict, isEndMail, mailTypeKey, mailParamList):
## 给开服活动奖励 [[itemID, itemCount], ...], 默认绑定
--
Gitblit v1.8.0