From fc7847f19424c902c7e6fdac1d024b5039b3d725 Mon Sep 17 00:00:00 2001
From: xdh <xiefantasy@qq.com>
Date: 星期四, 14 二月 2019 15:16:49 +0800
Subject: [PATCH] 5315 【后端】【1.6】登录奖励活动
---
ServerPython/CoreServerGroup/GameServer/Script/GameWorldLogic/GameWorldActionControl.py | 4
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerLuckyTreasure.py | 11 +
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ShareDefine.py | 1
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChPyNetSendPack.py | 79 +++----------
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/IpyGameDataPY.py | 4
PySysDB/PySysDBPY.h | 2
ServerPython/CoreServerGroup/GameServer/Script/GameWorldLogic/GameWorldAverageLv.py | 32 +++++
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerActLogin.py | 94 ++++++++-------
ServerPython/CoreServerGroup/GameServer/Script/ShareDefine.py | 1
ServerPython/CoreServerGroup/GameServer/Script/ChPyNetSendPack.py | 79 +++----------
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChConfig.py | 2
11 files changed, 143 insertions(+), 166 deletions(-)
diff --git a/PySysDB/PySysDBPY.h b/PySysDB/PySysDBPY.h
index 7afe1df..d2029f1 100644
--- a/PySysDB/PySysDBPY.h
+++ b/PySysDB/PySysDBPY.h
@@ -1633,7 +1633,7 @@
BYTE ActionType; //活动条目ID
DWORD TotalTimes; //可完成的总次数,0表示不限次数
WORD SingleTimes; //单次领奖需要的次数
- list Reward; //奖励物品
+ char Reward; //奖励物品
};
//诛仙装备套装属性表
diff --git a/ServerPython/CoreServerGroup/GameServer/Script/ChPyNetSendPack.py b/ServerPython/CoreServerGroup/GameServer/Script/ChPyNetSendPack.py
index 66948d9..a79ee37 100644
--- a/ServerPython/CoreServerGroup/GameServer/Script/ChPyNetSendPack.py
+++ b/ServerPython/CoreServerGroup/GameServer/Script/ChPyNetSendPack.py
@@ -20479,56 +20479,13 @@
#------------------------------------------------------
# AA 0C 登录奖励活动信息 #tagMCActLoginAwardInfo
-class tagMCActLoginAwardItem(Structure):
- _pack_ = 1
- _fields_ = [
- ("ItemID", c_int), # 物品ID
- ("ItemCnt", c_ushort), # 物品数量
- ("IsBind", c_ubyte), # 是否绑定
- ]
-
- def __init__(self):
- self.Clear()
- return
-
- def ReadData(self, stringData, _pos=0, _len=0):
- self.Clear()
- memmove(addressof(self), stringData[_pos:], self.GetLength())
- return _pos + self.GetLength()
-
- def Clear(self):
- self.ItemID = 0
- self.ItemCnt = 0
- self.IsBind = 0
- return
-
- def GetLength(self):
- return sizeof(tagMCActLoginAwardItem)
-
- def GetBuffer(self):
- return string_at(addressof(self), self.GetLength())
-
- def OutputString(self):
- DumpString = '''// AA 0C 登录奖励活动信息 //tagMCActLoginAwardInfo:
- ItemID:%d,
- ItemCnt:%d,
- IsBind:%d
- '''\
- %(
- self.ItemID,
- self.ItemCnt,
- self.IsBind
- )
- return DumpString
-
-
class tagMCActLoginAwardAction(Structure):
TemplateID = 0 #(DWORD TemplateID)// 模板ID
ActionType = 0 #(WORD ActionType)// 活动类别
TotalTimes = 0 #(DWORD TotalTimes)// 可完成的总次数,0表示不限次数
SingleTimes = 0 #(DWORD SingleTimes)// 单次领奖需要的次数
- Count = 0 #(BYTE Count)// 物品数
- ItemInfo = list() #(vector<tagMCActLoginAwardItem> ItemInfo)// 物品信息
+ Count = 0 #(WORD Count)// 物品配置长度
+ ItemInfo = "" #(String ItemInfo)// 物品信息
data = None
def __init__(self):
@@ -20541,11 +20498,8 @@
self.ActionType,_pos = CommFunc.ReadWORD(_lpData, _pos)
self.TotalTimes,_pos = CommFunc.ReadDWORD(_lpData, _pos)
self.SingleTimes,_pos = CommFunc.ReadDWORD(_lpData, _pos)
- self.Count,_pos = CommFunc.ReadBYTE(_lpData, _pos)
- for i in range(self.Count):
- temItemInfo = tagMCActLoginAwardItem()
- _pos = temItemInfo.ReadData(_lpData, _pos)
- self.ItemInfo.append(temItemInfo)
+ self.Count,_pos = CommFunc.ReadWORD(_lpData, _pos)
+ self.ItemInfo,_pos = CommFunc.ReadString(_lpData, _pos,self.Count)
return _pos
def Clear(self):
@@ -20554,7 +20508,7 @@
self.TotalTimes = 0
self.SingleTimes = 0
self.Count = 0
- self.ItemInfo = list()
+ self.ItemInfo = ""
return
def GetLength(self):
@@ -20563,9 +20517,8 @@
length += 2
length += 4
length += 4
- length += 1
- for i in range(self.Count):
- length += self.ItemInfo[i].GetLength()
+ length += 2
+ length += len(self.ItemInfo)
return length
@@ -20575,9 +20528,8 @@
data = CommFunc.WriteWORD(data, self.ActionType)
data = CommFunc.WriteDWORD(data, self.TotalTimes)
data = CommFunc.WriteDWORD(data, self.SingleTimes)
- data = CommFunc.WriteBYTE(data, self.Count)
- for i in range(self.Count):
- data = CommFunc.WriteString(data, self.ItemInfo[i].GetLength(), self.ItemInfo[i].GetBuffer())
+ data = CommFunc.WriteWORD(data, self.Count)
+ data = CommFunc.WriteString(data, self.Count, self.ItemInfo)
return data
def OutputString(self):
@@ -20595,7 +20547,7 @@
self.TotalTimes,
self.SingleTimes,
self.Count,
- "..."
+ self.ItemInfo
)
return DumpString
@@ -20603,6 +20555,7 @@
class tagMCActLoginAwardDayInfo(Structure):
ActCnt = 0 #(BYTE ActCnt)// 数量
TemplateList = list() #(vector<WORD> TemplateList)// 模板列表
+ WorldLV = 0 #(WORD WorldLV)// 世界等级
data = None
def __init__(self):
@@ -20615,17 +20568,20 @@
for i in range(self.ActCnt):
value,_pos=CommFunc.ReadWORD(_lpData,_pos)
self.TemplateList.append(value)
+ self.WorldLV,_pos = CommFunc.ReadWORD(_lpData, _pos)
return _pos
def Clear(self):
self.ActCnt = 0
self.TemplateList = list()
+ self.WorldLV = 0
return
def GetLength(self):
length = 0
length += 1
length += 2 * self.ActCnt
+ length += 2
return length
@@ -20634,16 +20590,19 @@
data = CommFunc.WriteBYTE(data, self.ActCnt)
for i in range(self.ActCnt):
data = CommFunc.WriteWORD(data, self.TemplateList[i])
+ data = CommFunc.WriteWORD(data, self.WorldLV)
return data
def OutputString(self):
DumpString = '''
ActCnt:%d,
- TemplateList:%s
+ TemplateList:%s,
+ WorldLV:%d
'''\
%(
self.ActCnt,
- "..."
+ "...",
+ self.WorldLV
)
return DumpString
diff --git a/ServerPython/CoreServerGroup/GameServer/Script/GameWorldLogic/GameWorldActionControl.py b/ServerPython/CoreServerGroup/GameServer/Script/GameWorldLogic/GameWorldActionControl.py
index 5c55fe9..4f1976e 100644
--- a/ServerPython/CoreServerGroup/GameServer/Script/GameWorldLogic/GameWorldActionControl.py
+++ b/ServerPython/CoreServerGroup/GameServer/Script/GameWorldLogic/GameWorldActionControl.py
@@ -34,6 +34,7 @@
import PlayerFairyCeremony
import PlayerNewFairyCeremony
import PlayerUniversalGameRec
+import GameWorldAverageLv
import GameWorldProcess
import ChPyNetSendPack
import NetPackCommon
@@ -312,6 +313,9 @@
if not activityIpyData or (isActivity and not isEnd):
activityIpyData = ipyData
activityInfoDict = {ShareDefine.ActKey_CfgID:cfgID}
+ if actName == ShareDefine.OperationActionName_LoginAward:
+ #活动每天的世界等级
+ activityInfoDict[ShareDefine.ActKey_WorldLVList] = GameWorldAverageLv.GetWorldLVListByTime(startDayDate, (endDayDate - startDayDate).days)
if startDayDate <= curDateTime < endDayDate:
dayIndex = 0
diff --git a/ServerPython/CoreServerGroup/GameServer/Script/GameWorldLogic/GameWorldAverageLv.py b/ServerPython/CoreServerGroup/GameServer/Script/GameWorldLogic/GameWorldAverageLv.py
index d7ebfa8..696ac71 100644
--- a/ServerPython/CoreServerGroup/GameServer/Script/GameWorldLogic/GameWorldAverageLv.py
+++ b/ServerPython/CoreServerGroup/GameServer/Script/GameWorldLogic/GameWorldAverageLv.py
@@ -23,6 +23,8 @@
import PlayerDBGSEvent
import ChConfig
import IpyGameDataPY
+
+import datetime
#------------------------------------------------------------------------------
@@ -87,3 +89,33 @@
return worldLV
+def GetWorldLVListByTime(startTime, day=1):
+ ##根据时间计算多个世界等级
+ initOpenServerTime = PlayerDBGSEvent.GetDBGSTrig_ByKey(PlayerDBGSEvent.Def_InitOpenServerTime)
+ if initOpenServerTime <= 0:
+ return []
+ worldlvList = []
+ diffSecond = PlayerDBGSEvent.GetDBGSTrig_ByKey(PlayerDBGSEvent.Def_WorldLVExtraTime) #额外时间参数
+ initOpenServerTime = GameWorld.ChangeTimeNumToDatetime(initOpenServerTime, ChConfig.TYPE_Time_Format)
+ if startTime < initOpenServerTime:
+ return []
+ ipyMgr = IpyGameDataPY.IPY_Data()
+ for dayIndex in xrange(day):
+ nextTime = startTime + datetime.timedelta(days=dayIndex)
+ pastTimeDelta = nextTime - initOpenServerTime
+ pastSeconds = max(0, pastTimeDelta.days * 24 * 60 * 60 + pastTimeDelta.seconds + diffSecond)
+ maxCnt = ipyMgr.GetWorldLVCount()
+ worldLV = 0
+ for i in xrange(maxCnt):
+ curIpyData = ipyMgr.GetWorldLVByIndex(i)
+ if i == maxCnt - 1:
+ worldLV = curIpyData.GetWorldLV()
+ else:
+ nextIpyData = ipyMgr.GetWorldLVByIndex(i+1)
+ if curIpyData.GetOpenServerSecond() <= pastSeconds < nextIpyData.GetOpenServerSecond():
+ worldLV = curIpyData.GetWorldLV()
+ break
+ worldlvList.append(worldLV)
+
+ GameWorld.DebugLog(' GetWorldLVByTime startTime=%s,day=%s,worldlvList=%s'%(str(startTime), day, worldlvList))
+ return worldlvList
\ No newline at end of file
diff --git a/ServerPython/CoreServerGroup/GameServer/Script/ShareDefine.py b/ServerPython/CoreServerGroup/GameServer/Script/ShareDefine.py
index ef34332..194ae5e 100644
--- a/ServerPython/CoreServerGroup/GameServer/Script/ShareDefine.py
+++ b/ServerPython/CoreServerGroup/GameServer/Script/ShareDefine.py
@@ -256,6 +256,7 @@
ActKey_CfgID = "CfgID" # 活动表配置ID
ActKey_DayIndex = "DayIndex" # 活动表配置ID
ActKey_WorldLV = "WorldLV" # 活动开启时世界等级
+ActKey_WorldLVList = "WorldLVList" # 活动每天的世界等级列表
#答题类型枚举
Def_Game_ExamTypeList = range(1, 4 + 1)
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChConfig.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChConfig.py
index b714457..7a4a4d5 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChConfig.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChConfig.py
@@ -3775,6 +3775,7 @@
Def_PDict_LoginAwardID = "LoginAwardID" # 玩家身上的BOSS复活活动ID,唯一标识,取活动开始日期time值
Def_PDict_LoginAwardCurTimes = "LoginAwardCurTimes_%s_%s" #当前完成次数 参数(第X天,模板ID)
Def_PDict_LoginAwardGotTimes = "LoginAwardGotTimes_%s_%s" #当前已领次数 参数(第X天,模板ID)
+Def_PDict_LoginAwardWorldLV = "LoginAwardWorldLV%s" #活动开启时世界等级参数(第X天)
#诛仙BOSS
Def_PDict_ZhuXianBossHelpCnt = "ZhuXianBossHelpCnt" # 协助次数
@@ -3783,6 +3784,7 @@
Def_PDict_LuckyTreasureID = "LuckyTreasureID" # 玩家身上的活动ID,唯一标识,取活动开始日期time值
Def_PDict_LuckyTreasureFree = "LuckyTreasureFree" #是否免费过
Def_PDict_LuckyTreasurePoint = "LuckyTreasurePoint" #幸运值
+Def_PDict_LuckyTreasureCnt = "LuckyTreasureCnt" #鉴宝次数
#-------------------------------------------------------------------------------
#类型 Def_PDictType_OnlinePrize
Def_PDict1_OnlinePrizeCnt = "OnlinePrizeCnt" # 新手在线已领取奖励次数
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChPyNetSendPack.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChPyNetSendPack.py
index 66948d9..a79ee37 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChPyNetSendPack.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChPyNetSendPack.py
@@ -20479,56 +20479,13 @@
#------------------------------------------------------
# AA 0C 登录奖励活动信息 #tagMCActLoginAwardInfo
-class tagMCActLoginAwardItem(Structure):
- _pack_ = 1
- _fields_ = [
- ("ItemID", c_int), # 物品ID
- ("ItemCnt", c_ushort), # 物品数量
- ("IsBind", c_ubyte), # 是否绑定
- ]
-
- def __init__(self):
- self.Clear()
- return
-
- def ReadData(self, stringData, _pos=0, _len=0):
- self.Clear()
- memmove(addressof(self), stringData[_pos:], self.GetLength())
- return _pos + self.GetLength()
-
- def Clear(self):
- self.ItemID = 0
- self.ItemCnt = 0
- self.IsBind = 0
- return
-
- def GetLength(self):
- return sizeof(tagMCActLoginAwardItem)
-
- def GetBuffer(self):
- return string_at(addressof(self), self.GetLength())
-
- def OutputString(self):
- DumpString = '''// AA 0C 登录奖励活动信息 //tagMCActLoginAwardInfo:
- ItemID:%d,
- ItemCnt:%d,
- IsBind:%d
- '''\
- %(
- self.ItemID,
- self.ItemCnt,
- self.IsBind
- )
- return DumpString
-
-
class tagMCActLoginAwardAction(Structure):
TemplateID = 0 #(DWORD TemplateID)// 模板ID
ActionType = 0 #(WORD ActionType)// 活动类别
TotalTimes = 0 #(DWORD TotalTimes)// 可完成的总次数,0表示不限次数
SingleTimes = 0 #(DWORD SingleTimes)// 单次领奖需要的次数
- Count = 0 #(BYTE Count)// 物品数
- ItemInfo = list() #(vector<tagMCActLoginAwardItem> ItemInfo)// 物品信息
+ Count = 0 #(WORD Count)// 物品配置长度
+ ItemInfo = "" #(String ItemInfo)// 物品信息
data = None
def __init__(self):
@@ -20541,11 +20498,8 @@
self.ActionType,_pos = CommFunc.ReadWORD(_lpData, _pos)
self.TotalTimes,_pos = CommFunc.ReadDWORD(_lpData, _pos)
self.SingleTimes,_pos = CommFunc.ReadDWORD(_lpData, _pos)
- self.Count,_pos = CommFunc.ReadBYTE(_lpData, _pos)
- for i in range(self.Count):
- temItemInfo = tagMCActLoginAwardItem()
- _pos = temItemInfo.ReadData(_lpData, _pos)
- self.ItemInfo.append(temItemInfo)
+ self.Count,_pos = CommFunc.ReadWORD(_lpData, _pos)
+ self.ItemInfo,_pos = CommFunc.ReadString(_lpData, _pos,self.Count)
return _pos
def Clear(self):
@@ -20554,7 +20508,7 @@
self.TotalTimes = 0
self.SingleTimes = 0
self.Count = 0
- self.ItemInfo = list()
+ self.ItemInfo = ""
return
def GetLength(self):
@@ -20563,9 +20517,8 @@
length += 2
length += 4
length += 4
- length += 1
- for i in range(self.Count):
- length += self.ItemInfo[i].GetLength()
+ length += 2
+ length += len(self.ItemInfo)
return length
@@ -20575,9 +20528,8 @@
data = CommFunc.WriteWORD(data, self.ActionType)
data = CommFunc.WriteDWORD(data, self.TotalTimes)
data = CommFunc.WriteDWORD(data, self.SingleTimes)
- data = CommFunc.WriteBYTE(data, self.Count)
- for i in range(self.Count):
- data = CommFunc.WriteString(data, self.ItemInfo[i].GetLength(), self.ItemInfo[i].GetBuffer())
+ data = CommFunc.WriteWORD(data, self.Count)
+ data = CommFunc.WriteString(data, self.Count, self.ItemInfo)
return data
def OutputString(self):
@@ -20595,7 +20547,7 @@
self.TotalTimes,
self.SingleTimes,
self.Count,
- "..."
+ self.ItemInfo
)
return DumpString
@@ -20603,6 +20555,7 @@
class tagMCActLoginAwardDayInfo(Structure):
ActCnt = 0 #(BYTE ActCnt)// 数量
TemplateList = list() #(vector<WORD> TemplateList)// 模板列表
+ WorldLV = 0 #(WORD WorldLV)// 世界等级
data = None
def __init__(self):
@@ -20615,17 +20568,20 @@
for i in range(self.ActCnt):
value,_pos=CommFunc.ReadWORD(_lpData,_pos)
self.TemplateList.append(value)
+ self.WorldLV,_pos = CommFunc.ReadWORD(_lpData, _pos)
return _pos
def Clear(self):
self.ActCnt = 0
self.TemplateList = list()
+ self.WorldLV = 0
return
def GetLength(self):
length = 0
length += 1
length += 2 * self.ActCnt
+ length += 2
return length
@@ -20634,16 +20590,19 @@
data = CommFunc.WriteBYTE(data, self.ActCnt)
for i in range(self.ActCnt):
data = CommFunc.WriteWORD(data, self.TemplateList[i])
+ data = CommFunc.WriteWORD(data, self.WorldLV)
return data
def OutputString(self):
DumpString = '''
ActCnt:%d,
- TemplateList:%s
+ TemplateList:%s,
+ WorldLV:%d
'''\
%(
self.ActCnt,
- "..."
+ "...",
+ self.WorldLV
)
return DumpString
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/IpyGameDataPY.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/IpyGameDataPY.py
index f6939be..0535903 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/IpyGameDataPY.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/IpyGameDataPY.py
@@ -1282,7 +1282,7 @@
("BYTE", "ActionType", 0),
("DWORD", "TotalTimes", 0),
("WORD", "SingleTimes", 0),
- ("list", "Reward", 0),
+ ("char", "Reward", 0),
),
"ZhuXianSuitAttr":(
@@ -3995,7 +3995,7 @@
self.ActionType = 0
self.TotalTimes = 0
self.SingleTimes = 0
- self.Reward = []
+ self.Reward = ""
return
def GetTemplateID(self): return self.TemplateID # 模板ID
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerActLogin.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerActLogin.py
index 1206580..396122b 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerActLogin.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerActLogin.py
@@ -30,6 +30,7 @@
import PyGameData
import ItemCommon
+import json
def OnLogin(curPlayer):
isReset = __CheckPlayerLoginAwardAction(curPlayer)
@@ -57,7 +58,7 @@
playerID = curPlayer.GetPlayerID()
actLoginAwardInfo = PyGameData.g_operationActionDict.get(ShareDefine.OperationActionName_LoginAward, {})
- #LoginAwardID = actLoginAwardInfo.get(ShareDefine.ActKey_ID, 0)
+ #loginAwardID = actLoginAwardInfo.get(ShareDefine.ActKey_ID, 0)
state = actLoginAwardInfo.get(ShareDefine.ActKey_State, 0)
cfgID = actLoginAwardInfo.get(ShareDefine.ActKey_CfgID, 0)
if state:
@@ -70,16 +71,20 @@
if cfgID == playerLoginAwardID:
#GameWorld.DebugLog("登录奖励活动ID不变,不处理!", curPlayer.GetPlayerID())
return
+ actWorldLVList = actLoginAwardInfo.get(ShareDefine.ActKey_WorldLVList, [])
# 未领取的奖励邮件发放
- __SendLoginAwardMail(curPlayer, playerLoginAwardID)
+ if playerLoginAwardID:
+ __SendLoginAwardMail(curPlayer, playerLoginAwardID)
- if not cfgID:
- GameWorld.DebugLog(' 登录奖励活动重置!')
- curPlayer.ClearNomalDict(ChConfig.Def_PDictType_LoginAward)
+ #if not cfgID:
+ GameWorld.DebugLog(' 登录奖励活动重置!')
+ curPlayer.ClearNomalDict(ChConfig.Def_PDictType_LoginAward)
- GameWorld.DebugLog("登录奖励变更! state=%s,cfgID=%s,playerLoginAwardID=%s" % (state, cfgID, playerLoginAwardID), playerID)
+ GameWorld.DebugLog("登录奖励变更! state=%s,cfgID=%s,playerLoginAwardID=%s,actWorldLVList=%s" % (state, cfgID, playerLoginAwardID, actWorldLVList), playerID)
PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_LoginAwardID, cfgID, ChConfig.Def_PDictType_LoginAward)
+ for i, actWorldLV in enumerate(actWorldLVList):
+ PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_LoginAwardWorldLV % i, actWorldLV, ChConfig.Def_PDictType_LoginAward)
SyncLoginAwardInfo(curPlayer)
return True
@@ -87,15 +92,17 @@
def __SendLoginAwardMail(curPlayer, cfgID):
# 未领取的奖励邮件发放
- actBossIpyData = IpyGameDataPY.GetIpyGameData("ActLoginAward", cfgID)
- if not actBossIpyData:
+ actIpyData = IpyGameDataPY.GetIpyGameData("ActLoginAward", cfgID)
+ if not actIpyData:
return
- templateIDList = actBossIpyData.GetTemplateID()
+ templateIDList = actIpyData.GetTemplateID()
if not templateIDList:
return
totalItemDict = {}
for day, tidList in enumerate(templateIDList):
+ playerWorldLV = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_LoginAwardWorldLV % day, 0, ChConfig.Def_PDictType_LoginAward)
+
for tid in tidList:
ipyData = IpyGameDataPY.GetIpyGameData('LoginAward', tid)
if not ipyData:
@@ -106,13 +113,13 @@
canGotCnt = (curTimes - gotTimes) / singleTimes
if not canGotCnt:
continue
- itemDict = __GetAwardItem(curPlayer, ipyData, canGotCnt)
+ itemDict = __GetAwardItem(curPlayer, ipyData, playerWorldLV, canGotCnt)
GameWorld.AddDictValue(totalItemDict, itemDict)
if not totalItemDict:
return
totalItemList = [[itemID, itemCnt, 1] for itemID, itemCnt in totalItemDict.items()]
- PlayerControl.SendMailByKey('SecondWeekReward', [curPlayer.GetID()], totalItemList)
+ PlayerControl.SendMailByKey('LoginAward_1', [curPlayer.GetID()], totalItemList)
return
@@ -127,10 +134,10 @@
if not state or not cfgID:
return
- actBossIpyData = IpyGameDataPY.GetIpyGameData("ActLoginAward", cfgID)
- if not actBossIpyData:
+ actIpyData = IpyGameDataPY.GetIpyGameData("ActLoginAward", cfgID)
+ if not actIpyData:
return
- templateIDList = actBossIpyData.GetTemplateID()
+ templateIDList = actIpyData.GetTemplateID()
dayIndex = actLoginAwardInfo.get(ShareDefine.ActKey_DayIndex, 0)
if dayIndex >= len(templateIDList):
return
@@ -175,9 +182,9 @@
gotTimes = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_LoginAwardGotTimes % (day, templateID), 0, ChConfig.Def_PDictType_LoginAward)
if curTimes - gotTimes < singleTimes:
return
-
+ playerWorldLV = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_LoginAwardWorldLV % day, 0, ChConfig.Def_PDictType_LoginAward)
#给奖励
- awardDict = __GetAwardItem(curPlayer, ipyData)
+ awardDict = __GetAwardItem(curPlayer, ipyData, playerWorldLV)
# 检查背包
needSpace = len(awardDict)
packSpace = ItemCommon.GetItemPackSpace(curPlayer, IPY_GameWorld.rptItem, needSpace)
@@ -195,15 +202,23 @@
return
-
-def __GetAwardItem(curPlayer, ipyData, times=1):
- awardDict = {}
- for itemID, itemCnt, isbind in ipyData.GetReward():
+def __GetAwardItem(curPlayer, ipyData, worldLV, times=1):
+ awardItemDict = {}
+ awardDict = eval(ipyData.GetReward())
+ wlvList = [int(lv) for lv in awardDict]
+ wlvList.sort()
+ findWlv = wlvList[-1]
+ for wlv in wlvList:
+ if worldLV <= wlv:
+ findWlv = wlv
+ break
+ itemList = awardDict[findWlv]
+ for itemID, itemCnt, isbind in itemList:
if not itemID or not itemCnt:
continue
- awardDict[itemID] = awardDict.get(itemID, 0) + itemCnt * times
+ awardItemDict[itemID] = awardItemDict.get(itemID, 0) + itemCnt * times
- return awardDict
+ return awardItemDict
def SyncLoginAwardPlayerInfo(curPlayer, day=-1, templateID=-1):
@@ -213,10 +228,10 @@
cfgID = actLoginAwardInfo.get(ShareDefine.ActKey_CfgID, 0)
if not state or not cfgID:
return
- actBossIpyData = IpyGameDataPY.GetIpyGameData("ActLoginAward", cfgID)
- if not actBossIpyData:
+ actIpyData = IpyGameDataPY.GetIpyGameData("ActLoginAward", cfgID)
+ if not actIpyData:
return
- templateIDList = actBossIpyData.GetTemplateID()
+ templateIDList = actIpyData.GetTemplateID()
if not templateIDList:
return
if day != -1:
@@ -256,21 +271,22 @@
cfgID = actLoginAwardInfo.get(ShareDefine.ActKey_CfgID, 0)
if not cfgID:
return
- actBossIpyData = IpyGameDataPY.GetIpyGameData("ActLoginAward", cfgID)
- if not actBossIpyData:
+ actIpyData = IpyGameDataPY.GetIpyGameData("ActLoginAward", cfgID)
+ if not actIpyData:
return
- templateIDList = actBossIpyData.GetTemplateID()
+ templateIDList = actIpyData.GetTemplateID()
if not templateIDList:
return
+ actWorldLVList = actLoginAwardInfo.get(ShareDefine.ActKey_WorldLVList, [])
openServerDay = GameWorld.GetGameWorld().GetGameWorldDictByKey(ShareDefine.Def_Notify_WorldKey_ServerDay) + 1
actInfo = ChPyNetSendPack.tagMCActLoginAwardInfo()
actInfo.Clear()
- actInfo.StartDate = GameWorld.GetOperationActionDateStr(actBossIpyData.GetStartDate(), openServerDay)
- actInfo.EndtDate = GameWorld.GetOperationActionDateStr(actBossIpyData.GetEndDate(), openServerDay)
- actInfo.AdvanceMinutes = actBossIpyData.GetAdvanceMinutes()
- actInfo.IsDayReset = actBossIpyData.GetIsDayReset()
- actInfo.ResetType = actBossIpyData.GetResetType()
- actInfo.LimitLV = actBossIpyData.GetLVLimit()
+ actInfo.StartDate = GameWorld.GetOperationActionDateStr(actIpyData.GetStartDate(), openServerDay)
+ actInfo.EndtDate = GameWorld.GetOperationActionDateStr(actIpyData.GetEndDate(), openServerDay)
+ actInfo.AdvanceMinutes = actIpyData.GetAdvanceMinutes()
+ actInfo.IsDayReset = actIpyData.GetIsDayReset()
+ actInfo.ResetType = actIpyData.GetResetType()
+ actInfo.LimitLV = actIpyData.GetLVLimit()
actInfo.DayInfoList = []
tidList = []
for day, dayActList in enumerate(templateIDList):
@@ -280,7 +296,7 @@
for tid in dayActList:
if tid not in tidList:
tidList.append(tid)
-
+ dayInfo.WorldLV = actWorldLVList[day] if day < len(actWorldLVList) else 0
actInfo.DayInfoList.append(dayInfo)
actInfo.DayCnt = len(actInfo.DayInfoList)
actInfo.ActionInfo = []
@@ -294,13 +310,7 @@
tInfo.ActionType = ipyData.GetActionType()
tInfo.TotalTimes = ipyData.GetTotalTimes()
tInfo.SingleTimes = ipyData.GetSingleTimes()
- tInfo.ItemInfo = []
- for itemID, itemCnt, isBind in ipyData.GetReward():
- awardItem = ChPyNetSendPack.tagMCActLoginAwardItem()
- awardItem.ItemID = itemID
- awardItem.ItemCnt = itemCnt
- awardItem.IsBind = isBind
- tInfo.ItemInfo.append(awardItem)
+ tInfo.ItemInfo = ipyData.GetReward()
tInfo.Count = len(tInfo.ItemInfo)
actInfo.ActionInfo.append(tInfo)
actInfo.TCount = len(actInfo.ActionInfo)
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerLuckyTreasure.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerLuckyTreasure.py
index 30c9f4f..db152ca 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerLuckyTreasure.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerLuckyTreasure.py
@@ -79,6 +79,8 @@
PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_LuckyTreasureFree, 0)
PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_LuckyTreasurePoint, 0)
+ PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_LuckyTreasureCnt, 0)
+
SyncLuckyTreasureInfo(curPlayer)
SyncLuckyTreasureResultInfo(curPlayer)
@@ -153,13 +155,19 @@
greatItem = randomRateList[-1][1]
curLuckyPoint = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_LuckyTreasurePoint)
+ curLuckyCnt = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_LuckyTreasureCnt)
+
maxLuckyPoint = actIpyData.GetLuckyPoint()
singlePoint = IpyGameDataPY.GetFuncCfg('LuckyAppraisal', 2)
if curLuckyPoint + singlePoint >= maxLuckyPoint:
giveItem = greatItem
newLuckyPoint = 0
else:
- randomResultList = GameWorld.GetResultByRandomListEx(randomRateList, 1, [])
+ if curLuckyCnt < IpyGameDataPY.GetFuncCfg('LuckyAppraisal', 3):
+ #前X次鉴宝不能出大奖
+ randomResultList = GameWorld.GetResultByRandomListEx(randomRateList[:-1], 1, [])
+ else:
+ randomResultList = GameWorld.GetResultByRandomListEx(randomRateList, 1, [])
if len(randomResultList) != 1:
GameWorld.DebugLog(' 开始幸运鉴宝 随机库结果 获取错误 !')
return
@@ -179,6 +187,7 @@
PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_LuckyTreasureFree, 1)
#更新幸运值
PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_LuckyTreasurePoint, newLuckyPoint)
+ PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_LuckyTreasureCnt, curLuckyCnt + 1)
for itemID, itemCount, isBind in [giveItem]:
ItemControler.GivePlayerItem(curPlayer, itemID, itemCount, isBind, [IPY_GameWorld.rptItem], event=[ChConfig.ItemGive_LuckyTreasure, False, {"isFree":not hasFree}])
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ShareDefine.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ShareDefine.py
index ef34332..194ae5e 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ShareDefine.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ShareDefine.py
@@ -256,6 +256,7 @@
ActKey_CfgID = "CfgID" # 活动表配置ID
ActKey_DayIndex = "DayIndex" # 活动表配置ID
ActKey_WorldLV = "WorldLV" # 活动开启时世界等级
+ActKey_WorldLVList = "WorldLVList" # 活动每天的世界等级列表
#答题类型枚举
Def_Game_ExamTypeList = range(1, 4 + 1)
--
Gitblit v1.8.0