From d23208b14e51460535a5fc13d7834c16709f3663 Mon Sep 17 00:00:00 2001
From: hxp <ale99527@vip.qq.com>
Date: 星期五, 12 七月 2024 19:02:46 +0800
Subject: [PATCH] 10208 10206 【越南】新增大额战令(新增登录战令;战令支持高级战令;)
---
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerZhanling.py | 56 ++++++++++++++++++++++++---
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChPyNetSendPack.py | 28 +++++++++++--
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/IpyGameDataPY.py | 4 +
PySysDB/PySysDBPY.h | 1
ServerPython/CoreServerGroup/GameServer/Script/ChPyNetSendPack.py | 28 +++++++++++--
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChConfig.py | 3 +
6 files changed, 102 insertions(+), 18 deletions(-)
diff --git a/PySysDB/PySysDBPY.h b/PySysDB/PySysDBPY.h
index c2e9085..c101e2d 100644
--- a/PySysDB/PySysDBPY.h
+++ b/PySysDB/PySysDBPY.h
@@ -3081,6 +3081,7 @@
BYTE RewardIndex; //奖励记录索引,0~n,同个战令类型不可重复
list FreeRewardItemList; //免费奖励物品列表 [[物品ID,个数,是否拍品],...]
list ZLRewardItemList; //战令奖励物品列表 [[物品ID,个数,是否拍品],...]
+ list ZLRewardItemListH; //高级战令奖励物品列表 [[物品ID,个数,是否拍品],...]
};
//仙树等级表
diff --git a/ServerPython/CoreServerGroup/GameServer/Script/ChPyNetSendPack.py b/ServerPython/CoreServerGroup/GameServer/Script/ChPyNetSendPack.py
index d48cc59..5f9b483 100644
--- a/ServerPython/CoreServerGroup/GameServer/Script/ChPyNetSendPack.py
+++ b/ServerPython/CoreServerGroup/GameServer/Script/ChPyNetSendPack.py
@@ -47497,8 +47497,9 @@
_pack_ = 1
_fields_ = [
("NeedValue", c_int), # 奖励所需值
- ("FreeRewardState", c_ubyte), # 免费奖励是否已领取
- ("ZLRewardState", c_ubyte), # 战令奖励是否已领取
+ ("FreeRewardState", c_ubyte), # 免费战令奖励是否已领取
+ ("ZLRewardState", c_ubyte), # 普通战令奖励是否已领取
+ ("ZLRewardStateH", c_ubyte), # 高级战令奖励是否已领取
]
def __init__(self):
@@ -47514,6 +47515,7 @@
self.NeedValue = 0
self.FreeRewardState = 0
self.ZLRewardState = 0
+ self.ZLRewardStateH = 0
return
def GetLength(self):
@@ -47526,12 +47528,14 @@
DumpString = '''// B1 20 战令信息 //tagMCZhanlingInfo:
NeedValue:%d,
FreeRewardState:%d,
- ZLRewardState:%d
+ ZLRewardState:%d,
+ ZLRewardStateH:%d
'''\
%(
self.NeedValue,
self.FreeRewardState,
- self.ZLRewardState
+ self.ZLRewardState,
+ self.ZLRewardStateH
)
return DumpString
@@ -47539,7 +47543,9 @@
class tagMCZhanlingInfo(Structure):
Head = tagHead()
ZhanlingType = 0 #(BYTE ZhanlingType)// 战令类型
- IsActivite = 0 #(BYTE IsActivite)// 是否已激活
+ IsActivite = 0 #(BYTE IsActivite)// 普通战令是否已激活
+ IsActiviteH = 0 #(BYTE IsActiviteH)// 高级战令是否已激活
+ Value1 = 0 #(DWORD Value1)// 战令对应的自定义值,可选,如登录战令代表开始计算日期时间戳
RewardCount = 0 #(WORD RewardCount)
RewardList = list() #(vector<tagMCZhanling> RewardList)
data = None
@@ -47555,6 +47561,8 @@
_pos = self.Head.ReadData(_lpData, _pos)
self.ZhanlingType,_pos = CommFunc.ReadBYTE(_lpData, _pos)
self.IsActivite,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+ self.IsActiviteH,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+ self.Value1,_pos = CommFunc.ReadDWORD(_lpData, _pos)
self.RewardCount,_pos = CommFunc.ReadWORD(_lpData, _pos)
for i in range(self.RewardCount):
temRewardList = tagMCZhanling()
@@ -47569,6 +47577,8 @@
self.Head.SubCmd = 0x20
self.ZhanlingType = 0
self.IsActivite = 0
+ self.IsActiviteH = 0
+ self.Value1 = 0
self.RewardCount = 0
self.RewardList = list()
return
@@ -47578,6 +47588,8 @@
length += self.Head.GetLength()
length += 1
length += 1
+ length += 1
+ length += 4
length += 2
for i in range(self.RewardCount):
length += self.RewardList[i].GetLength()
@@ -47589,6 +47601,8 @@
data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer())
data = CommFunc.WriteBYTE(data, self.ZhanlingType)
data = CommFunc.WriteBYTE(data, self.IsActivite)
+ data = CommFunc.WriteBYTE(data, self.IsActiviteH)
+ data = CommFunc.WriteDWORD(data, self.Value1)
data = CommFunc.WriteWORD(data, self.RewardCount)
for i in range(self.RewardCount):
data = CommFunc.WriteString(data, self.RewardList[i].GetLength(), self.RewardList[i].GetBuffer())
@@ -47599,6 +47613,8 @@
Head:%s,
ZhanlingType:%d,
IsActivite:%d,
+ IsActiviteH:%d,
+ Value1:%d,
RewardCount:%d,
RewardList:%s
'''\
@@ -47606,6 +47622,8 @@
self.Head.OutputString(),
self.ZhanlingType,
self.IsActivite,
+ self.IsActiviteH,
+ self.Value1,
self.RewardCount,
"..."
)
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChConfig.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChConfig.py
index 145252b..139a452 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChConfig.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChConfig.py
@@ -4144,8 +4144,11 @@
Def_PDict_DailyPackBuyGiftOnDayTime = "DailyPackBuyGiftOnDayTime" # 每日打包直购礼包 - 上次处理过天时间戳
#战令
+Def_PDict_ZhanlingValue1 = "ZhanlingValue1_%s" # 战令类型对应自定义值1,参数(类型)
Def_PDict_ZhanlingState = "ZhanlingState" # 战令已激活状态,按类型二进制位运算记录是否已激活
+Def_PDict_ZhanlingStateH = "ZhanlingStateH" # 高级战令已激活状态,按类型二进制位运算记录是否已激活
Def_PDict_ZhanlingReward = "ZhanlingReward_%s_%s" # 战令奖励领取记录,按类型二进制位运算记录是否已领取,参数(类型,key编号)
+Def_PDict_ZhanlingRewardH = "ZhanlingRewardH_%s_%s" # 高级战令奖励领取记录,按类型二进制位运算记录是否已领取,参数(类型,key编号)
Def_PDict_ZhanlingRewardFree = "ZhanlingRewardFree_%s_%s" # 战令免费奖励领取记录,按类型二进制位运算记录是否已领取,参数(类型,key编号)
#登录活动新
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChPyNetSendPack.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChPyNetSendPack.py
index d48cc59..5f9b483 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChPyNetSendPack.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChPyNetSendPack.py
@@ -47497,8 +47497,9 @@
_pack_ = 1
_fields_ = [
("NeedValue", c_int), # 奖励所需值
- ("FreeRewardState", c_ubyte), # 免费奖励是否已领取
- ("ZLRewardState", c_ubyte), # 战令奖励是否已领取
+ ("FreeRewardState", c_ubyte), # 免费战令奖励是否已领取
+ ("ZLRewardState", c_ubyte), # 普通战令奖励是否已领取
+ ("ZLRewardStateH", c_ubyte), # 高级战令奖励是否已领取
]
def __init__(self):
@@ -47514,6 +47515,7 @@
self.NeedValue = 0
self.FreeRewardState = 0
self.ZLRewardState = 0
+ self.ZLRewardStateH = 0
return
def GetLength(self):
@@ -47526,12 +47528,14 @@
DumpString = '''// B1 20 战令信息 //tagMCZhanlingInfo:
NeedValue:%d,
FreeRewardState:%d,
- ZLRewardState:%d
+ ZLRewardState:%d,
+ ZLRewardStateH:%d
'''\
%(
self.NeedValue,
self.FreeRewardState,
- self.ZLRewardState
+ self.ZLRewardState,
+ self.ZLRewardStateH
)
return DumpString
@@ -47539,7 +47543,9 @@
class tagMCZhanlingInfo(Structure):
Head = tagHead()
ZhanlingType = 0 #(BYTE ZhanlingType)// 战令类型
- IsActivite = 0 #(BYTE IsActivite)// 是否已激活
+ IsActivite = 0 #(BYTE IsActivite)// 普通战令是否已激活
+ IsActiviteH = 0 #(BYTE IsActiviteH)// 高级战令是否已激活
+ Value1 = 0 #(DWORD Value1)// 战令对应的自定义值,可选,如登录战令代表开始计算日期时间戳
RewardCount = 0 #(WORD RewardCount)
RewardList = list() #(vector<tagMCZhanling> RewardList)
data = None
@@ -47555,6 +47561,8 @@
_pos = self.Head.ReadData(_lpData, _pos)
self.ZhanlingType,_pos = CommFunc.ReadBYTE(_lpData, _pos)
self.IsActivite,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+ self.IsActiviteH,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+ self.Value1,_pos = CommFunc.ReadDWORD(_lpData, _pos)
self.RewardCount,_pos = CommFunc.ReadWORD(_lpData, _pos)
for i in range(self.RewardCount):
temRewardList = tagMCZhanling()
@@ -47569,6 +47577,8 @@
self.Head.SubCmd = 0x20
self.ZhanlingType = 0
self.IsActivite = 0
+ self.IsActiviteH = 0
+ self.Value1 = 0
self.RewardCount = 0
self.RewardList = list()
return
@@ -47578,6 +47588,8 @@
length += self.Head.GetLength()
length += 1
length += 1
+ length += 1
+ length += 4
length += 2
for i in range(self.RewardCount):
length += self.RewardList[i].GetLength()
@@ -47589,6 +47601,8 @@
data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer())
data = CommFunc.WriteBYTE(data, self.ZhanlingType)
data = CommFunc.WriteBYTE(data, self.IsActivite)
+ data = CommFunc.WriteBYTE(data, self.IsActiviteH)
+ data = CommFunc.WriteDWORD(data, self.Value1)
data = CommFunc.WriteWORD(data, self.RewardCount)
for i in range(self.RewardCount):
data = CommFunc.WriteString(data, self.RewardList[i].GetLength(), self.RewardList[i].GetBuffer())
@@ -47599,6 +47613,8 @@
Head:%s,
ZhanlingType:%d,
IsActivite:%d,
+ IsActiviteH:%d,
+ Value1:%d,
RewardCount:%d,
RewardList:%s
'''\
@@ -47606,6 +47622,8 @@
self.Head.OutputString(),
self.ZhanlingType,
self.IsActivite,
+ self.IsActiviteH,
+ self.Value1,
self.RewardCount,
"..."
)
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/IpyGameDataPY.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/IpyGameDataPY.py
index e807aa8..647ddd9 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/IpyGameDataPY.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/IpyGameDataPY.py
@@ -2385,6 +2385,7 @@
("BYTE", "RewardIndex", 0),
("list", "FreeRewardItemList", 0),
("list", "ZLRewardItemList", 0),
+ ("list", "ZLRewardItemListH", 0),
),
"TreeLV":(
@@ -5951,7 +5952,8 @@
def GetNeedValue(self): return self.attrTuple[1] # 所需值 DWORD
def GetRewardIndex(self): return self.attrTuple[2] # 奖励记录索引,0~n,同个战令类型不可重复 BYTE
def GetFreeRewardItemList(self): return self.attrTuple[3] # 免费奖励物品列表 [[物品ID,个数,是否拍品],...] list
- def GetZLRewardItemList(self): return self.attrTuple[4] # 战令奖励物品列表 [[物品ID,个数,是否拍品],...] list
+ def GetZLRewardItemList(self): return self.attrTuple[4] # 战令奖励物品列表 [[物品ID,个数,是否拍品],...] list
+ def GetZLRewardItemListH(self): return self.attrTuple[5] # 高级战令奖励物品列表 [[物品ID,个数,是否拍品],...] list
# 仙树等级表
class IPY_TreeLV():
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerZhanling.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerZhanling.py
index eec96a8..3662208 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerZhanling.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerZhanling.py
@@ -24,6 +24,7 @@
import IPY_GameWorld
import PlayerGubao
import ChConfig
+import time
# 战令类型
ZhanlingTypeList = (
@@ -31,10 +32,17 @@
ZhanlingType_Realm,
ZhanlingType_SkyTower,
ZhanlingType_GubaoStar,
-) = range(1, 1 + 4)
+ZhanlingType_Login,
+) = range(1, 1 + 5)
def OnPlayerLogin(curPlayer):
for zhanlingType in ZhanlingTypeList:
+ if zhanlingType == ZhanlingType_Login:
+ value1 = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_ZhanlingValue1 % zhanlingType)
+ if not value1:
+ firstLoginTime = int(time.time())
+ PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_ZhanlingValue1 % zhanlingType, firstLoginTime)
+ GameWorld.DebugLog("设置登录战令首次登录时间: %s" % firstLoginTime, curPlayer.GetPlayerID())
SyncZhanlingInfo(curPlayer, zhanlingType)
return
@@ -51,15 +59,30 @@
updState = state|pow(2, zhanlingType)
PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_ZhanlingState, updState)
SyncZhanlingInfo(curPlayer, zhanlingType)
- GameWorld.Log("激活战令: zhanlingType=%s,updState=%s" % (zhanlingType, updState), curPlayer.GetPlayerID())
+ GameWorld.Log("激活战令普通: zhanlingType=%s,updState=%s" % (zhanlingType, updState), curPlayer.GetPlayerID())
break
+ # 高级战令
+ zhanlingCTGIDDictH = IpyGameDataPY.GetFuncEvalCfg("Zhanling", 3)
+ for zhanlingTypeStr, ctgIDList in zhanlingCTGIDDictH.items():
+ if ctgID not in ctgIDList:
+ continue
+ zhanlingType = int(zhanlingTypeStr)
+ state = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_ZhanlingStateH)
+ if state&pow(2, zhanlingType):
+ break
+
+ updState = state|pow(2, zhanlingType)
+ PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_ZhanlingStateH, updState)
+ SyncZhanlingInfo(curPlayer, zhanlingType)
+ GameWorld.Log("激活战令高级: zhanlingType=%s,updState=%s" % (zhanlingType, updState), curPlayer.GetPlayerID())
+ break
return
def GetZhanlingReward(curPlayer, zhanlingType, rewardID):
## 领取战令奖励
rewardID = GameWorld.ToIntDef(rewardID)
- needValue, isFree = rewardID/10, rewardID%10
+ needValue, rewardType = rewardID/10, rewardID%10 # rewardType: 0-免费;1-普通;2-高级
playerID = curPlayer.GetPlayerID()
ipyData = IpyGameDataPY.GetIpyGameData("Zhanling", zhanlingType, needValue)
@@ -75,6 +98,11 @@
curValue = curPlayer.NomalDictGetProperty(ChConfig.Def_Player_Dict_SkyTowerFloor)
elif zhanlingType == ZhanlingType_GubaoStar:
_, curValue = PlayerGubao.GetGubaoTotalLVStar(curPlayer)
+ elif zhanlingType == ZhanlingType_Login:
+ firstLoginTime = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_ZhanlingValue1 % zhanlingType)
+ if not firstLoginTime:
+ return
+ curValue = GameWorld.GetDiff_Day(int(time.time()), firstLoginTime) + 1
else:
return
@@ -85,16 +113,27 @@
rewardIndex = ipyData.GetRewardIndex()
itemList = ipyData.GetFreeRewardItemList()
rewardKey = ChConfig.Def_PDict_ZhanlingRewardFree
- if not isFree:
+ if rewardType == 1:
itemList = ipyData.GetZLRewardItemList()
rewardKey = ChConfig.Def_PDict_ZhanlingReward
state = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_ZhanlingState)
if not state&pow(2, zhanlingType):
- GameWorld.DebugLog("战令未激活,无法领取战令奖励: zhanlingType=%s,state=%s,isFree=%s" % (zhanlingType, state, isFree), playerID)
+ GameWorld.DebugLog("普通战令未激活,无法领取战令奖励: zhanlingType=%s,state=%s" % (zhanlingType, state), playerID)
+ return
+ elif rewardType == 2:
+ itemList = ipyData.GetZLRewardItemListH()
+ rewardKey = ChConfig.Def_PDict_ZhanlingRewardH
+ state = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_ZhanlingStateH)
+ if not state&pow(2, zhanlingType):
+ GameWorld.DebugLog("高级战令未激活,无法领取战令奖励: zhanlingType=%s,state=%s" % (zhanlingType, state), playerID)
return
+ if not itemList:
+ GameWorld.DebugLog("没有该战令奖励! zhanlingType=%s,needValue=%s,rewardType=%s" % (zhanlingType, needValue, rewardType), playerID)
+ return
+
if GameWorld.GetDictValueByBit(curPlayer, rewardKey, rewardIndex, True, [zhanlingType]):
- GameWorld.DebugLog("已经领取过该战令奖励! zhanlingType=%s,needValue=%s,isFree=%s" % (zhanlingType, needValue, isFree), playerID)
+ GameWorld.DebugLog("已经领取过该战令奖励! zhanlingType=%s,needValue=%s,rewardType=%s" % (zhanlingType, needValue, rewardType), playerID)
return
# 检查背包
@@ -104,7 +143,7 @@
# 更新已领取成功标记
GameWorld.SetDictValueByBit(curPlayer, rewardKey, rewardIndex, 1, True, [zhanlingType])
SyncZhanlingInfo(curPlayer, zhanlingType, ipyData)
- GameWorld.DebugLog("领取战令奖励: zhanlingType=%s,needValue=%s,isFree=%s" % (zhanlingType, needValue, isFree), playerID)
+ GameWorld.DebugLog("领取战令奖励: zhanlingType=%s,needValue=%s,rewardType=%s,itemList=%s" % (zhanlingType, needValue, rewardType, itemList), playerID)
# 给物品
for itemID, itemCount, isAuctionItem in itemList:
@@ -131,12 +170,15 @@
reward.NeedValue = ipyData.GetNeedValue()
reward.FreeRewardState = 1 if GameWorld.GetDictValueByBit(curPlayer, ChConfig.Def_PDict_ZhanlingRewardFree, rewardIndex, True, [zhanlingType]) else 0
reward.ZLRewardState = 1 if GameWorld.GetDictValueByBit(curPlayer, ChConfig.Def_PDict_ZhanlingReward, rewardIndex, True, [zhanlingType]) else 0
+ reward.ZLRewardStateH = 1 if GameWorld.GetDictValueByBit(curPlayer, ChConfig.Def_PDict_ZhanlingRewardH, rewardIndex, True, [zhanlingType]) else 0
rewardList.append(reward)
clientPack = ChPyNetSendPack.tagMCZhanlingInfo()
clientPack.Clear()
clientPack.ZhanlingType = zhanlingType
clientPack.IsActivite = 1 if curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_ZhanlingState)&pow(2, zhanlingType) else 0
+ clientPack.IsActiviteH = 1 if curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_ZhanlingStateH)&pow(2, zhanlingType) else 0
+ clientPack.Value1 = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_ZhanlingValue1 % zhanlingType)
clientPack.RewardList = rewardList
clientPack.RewardCount = len(clientPack.RewardList)
NetPackCommon.SendFakePack(curPlayer, clientPack)
--
Gitblit v1.8.0