From bb01c49e46123647c2b82b7847909fdd3c0bd300 Mon Sep 17 00:00:00 2001
From: hxp <ale99527@vip.qq.com>
Date: 星期二, 05 十二月 2023 15:41:53 +0800
Subject: [PATCH] 10024 【主干】【港台】【砍树】新增三种战令

---
 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerZhanling.py |  140 +++++++++++++++++
 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChPyNetSendPack.py       |  126 +++++++++++++++
 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/IpyGameDataPY.py         |   29 +++
 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/ChPlayer.py       |    5 
 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerCoin.py     |    2 
 PySysDB/PySysDBPY.h                                                                          |   11 +
 ServerPython/CoreServerGroup/GameServer/Script/ChPyNetSendPack.py                            |  126 +++++++++++++++
 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChConfig.py              |    7 
 8 files changed, 445 insertions(+), 1 deletions(-)

diff --git a/PySysDB/PySysDBPY.h b/PySysDB/PySysDBPY.h
index 204ad62..17d2ce4 100644
--- a/PySysDB/PySysDBPY.h
+++ b/PySysDB/PySysDBPY.h
@@ -2858,3 +2858,14 @@
 	BYTE		_AwardID;	//奖励ID 1~n
 	list		AwardItemList;	//物品奖励[[物品ID,个数,是否拍品], ...]
 };
+
+//战令表
+
+struct tagZhanling
+{
+	BYTE		_ZhanlingType;	//战令类型
+	DWORD		_NeedValue;	//所需值
+	BYTE		RewardIndex;	//奖励记录索引,0~n,同个战令类型不可重复
+	list		FreeRewardItemList;	//免费奖励物品列表 [[物品ID,个数,是否拍品],...]
+	list		ZLRewardItemList;	//战令奖励物品列表 [[物品ID,个数,是否拍品],...]
+};
diff --git a/ServerPython/CoreServerGroup/GameServer/Script/ChPyNetSendPack.py b/ServerPython/CoreServerGroup/GameServer/Script/ChPyNetSendPack.py
index 03c840d..bcddf2d 100644
--- a/ServerPython/CoreServerGroup/GameServer/Script/ChPyNetSendPack.py
+++ b/ServerPython/CoreServerGroup/GameServer/Script/ChPyNetSendPack.py
@@ -43825,6 +43825,132 @@
 
 
 #------------------------------------------------------
+# B1 20 战令信息 #tagMCZhanlingInfo
+
+class  tagMCZhanling(Structure):
+    _pack_ = 1
+    _fields_ = [
+                  ("NeedValue", c_int),    # 奖励所需值
+                  ("FreeRewardState", c_ubyte),    # 免费奖励是否已领取
+                  ("ZLRewardState", 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.NeedValue = 0
+        self.FreeRewardState = 0
+        self.ZLRewardState = 0
+        return
+
+    def GetLength(self):
+        return sizeof(tagMCZhanling)
+
+    def GetBuffer(self):
+        return string_at(addressof(self), self.GetLength())
+
+    def OutputString(self):
+        DumpString = '''// B1 20 战令信息 //tagMCZhanlingInfo:
+                                NeedValue:%d,
+                                FreeRewardState:%d,
+                                ZLRewardState:%d
+                                '''\
+                                %(
+                                self.NeedValue,
+                                self.FreeRewardState,
+                                self.ZLRewardState
+                                )
+        return DumpString
+
+
+class  tagMCZhanlingInfo(Structure):
+    Head = tagHead()
+    ZhanlingType = 0    #(BYTE ZhanlingType)// 战令类型
+    IsActivite = 0    #(BYTE IsActivite)// 是否已激活
+    RewardCount = 0    #(WORD RewardCount)
+    RewardList = list()    #(vector<tagMCZhanling> RewardList)
+    data = None
+
+    def __init__(self):
+        self.Clear()
+        self.Head.Cmd = 0xB1
+        self.Head.SubCmd = 0x20
+        return
+
+    def ReadData(self, _lpData, _pos=0, _Len=0):
+        self.Clear()
+        _pos = self.Head.ReadData(_lpData, _pos)
+        self.ZhanlingType,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+        self.IsActivite,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+        self.RewardCount,_pos = CommFunc.ReadWORD(_lpData, _pos)
+        for i in range(self.RewardCount):
+            temRewardList = tagMCZhanling()
+            _pos = temRewardList.ReadData(_lpData, _pos)
+            self.RewardList.append(temRewardList)
+        return _pos
+
+    def Clear(self):
+        self.Head = tagHead()
+        self.Head.Clear()
+        self.Head.Cmd = 0xB1
+        self.Head.SubCmd = 0x20
+        self.ZhanlingType = 0
+        self.IsActivite = 0
+        self.RewardCount = 0
+        self.RewardList = list()
+        return
+
+    def GetLength(self):
+        length = 0
+        length += self.Head.GetLength()
+        length += 1
+        length += 1
+        length += 2
+        for i in range(self.RewardCount):
+            length += self.RewardList[i].GetLength()
+
+        return length
+
+    def GetBuffer(self):
+        data = ''
+        data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer())
+        data = CommFunc.WriteBYTE(data, self.ZhanlingType)
+        data = CommFunc.WriteBYTE(data, self.IsActivite)
+        data = CommFunc.WriteWORD(data, self.RewardCount)
+        for i in range(self.RewardCount):
+            data = CommFunc.WriteString(data, self.RewardList[i].GetLength(), self.RewardList[i].GetBuffer())
+        return data
+
+    def OutputString(self):
+        DumpString = '''
+                                Head:%s,
+                                ZhanlingType:%d,
+                                IsActivite:%d,
+                                RewardCount:%d,
+                                RewardList:%s
+                                '''\
+                                %(
+                                self.Head.OutputString(),
+                                self.ZhanlingType,
+                                self.IsActivite,
+                                self.RewardCount,
+                                "..."
+                                )
+        return DumpString
+
+
+m_NAtagMCZhanlingInfo=tagMCZhanlingInfo()
+ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCZhanlingInfo.Head.Cmd,m_NAtagMCZhanlingInfo.Head.SubCmd))] = m_NAtagMCZhanlingInfo
+
+
+#------------------------------------------------------
 # B2 08 获得仙缘币信息 #tagMCAddXianyuanCoinMsg
 
 class  tagMCAddXianyuanCoinMsg(Structure):
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChConfig.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChConfig.py
index abd54b5..5482ec3 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChConfig.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChConfig.py
@@ -4048,6 +4048,10 @@
 Def_PDict_DailyPackBuyGiftPackTime = "DailyPackBuyGiftPackTime"  # 每日打包直购礼包 - 打包购买时间戳
 Def_PDict_DailyPackBuyGiftOnDayTime = "DailyPackBuyGiftOnDayTime"  # 每日打包直购礼包 - 上次处理过天时间戳
 
+#战令
+Def_PDict_ZhanlingState = "ZhanlingState"  # 战令已激活状态,按类型二进制位运算记录是否已激活
+Def_PDict_ZhanlingReward = "ZhanlingReward_%s_%s"  # 战令奖励领取记录,按类型二进制位运算记录是否已领取,参数(类型,key编号)
+Def_PDict_ZhanlingRewardFree = "ZhanlingRewardFree_%s_%s"  # 战令免费奖励领取记录,按类型二进制位运算记录是否已领取,参数(类型,key编号)
 #-------------------------------------------------------------------------------
 
 #开服活动,Def_PDictType_OpenServerCampaign
@@ -5813,7 +5817,8 @@
 Def_RewardType_RealmXXZL, #境界修仙之路奖励 62
 Def_RewardType_FamilyBossHurt, #仙盟boss伤害奖励 63
 Def_RewardType_DailyPackBuyGift, #打包直购礼包奖励 64
-)= range(65)
+Def_RewardType_Zhanling, #战令奖励 65
+)= range(66)
 
 
 #boss复活相关活动定义
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChPyNetSendPack.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChPyNetSendPack.py
index 03c840d..bcddf2d 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChPyNetSendPack.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChPyNetSendPack.py
@@ -43825,6 +43825,132 @@
 
 
 #------------------------------------------------------
+# B1 20 战令信息 #tagMCZhanlingInfo
+
+class  tagMCZhanling(Structure):
+    _pack_ = 1
+    _fields_ = [
+                  ("NeedValue", c_int),    # 奖励所需值
+                  ("FreeRewardState", c_ubyte),    # 免费奖励是否已领取
+                  ("ZLRewardState", 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.NeedValue = 0
+        self.FreeRewardState = 0
+        self.ZLRewardState = 0
+        return
+
+    def GetLength(self):
+        return sizeof(tagMCZhanling)
+
+    def GetBuffer(self):
+        return string_at(addressof(self), self.GetLength())
+
+    def OutputString(self):
+        DumpString = '''// B1 20 战令信息 //tagMCZhanlingInfo:
+                                NeedValue:%d,
+                                FreeRewardState:%d,
+                                ZLRewardState:%d
+                                '''\
+                                %(
+                                self.NeedValue,
+                                self.FreeRewardState,
+                                self.ZLRewardState
+                                )
+        return DumpString
+
+
+class  tagMCZhanlingInfo(Structure):
+    Head = tagHead()
+    ZhanlingType = 0    #(BYTE ZhanlingType)// 战令类型
+    IsActivite = 0    #(BYTE IsActivite)// 是否已激活
+    RewardCount = 0    #(WORD RewardCount)
+    RewardList = list()    #(vector<tagMCZhanling> RewardList)
+    data = None
+
+    def __init__(self):
+        self.Clear()
+        self.Head.Cmd = 0xB1
+        self.Head.SubCmd = 0x20
+        return
+
+    def ReadData(self, _lpData, _pos=0, _Len=0):
+        self.Clear()
+        _pos = self.Head.ReadData(_lpData, _pos)
+        self.ZhanlingType,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+        self.IsActivite,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+        self.RewardCount,_pos = CommFunc.ReadWORD(_lpData, _pos)
+        for i in range(self.RewardCount):
+            temRewardList = tagMCZhanling()
+            _pos = temRewardList.ReadData(_lpData, _pos)
+            self.RewardList.append(temRewardList)
+        return _pos
+
+    def Clear(self):
+        self.Head = tagHead()
+        self.Head.Clear()
+        self.Head.Cmd = 0xB1
+        self.Head.SubCmd = 0x20
+        self.ZhanlingType = 0
+        self.IsActivite = 0
+        self.RewardCount = 0
+        self.RewardList = list()
+        return
+
+    def GetLength(self):
+        length = 0
+        length += self.Head.GetLength()
+        length += 1
+        length += 1
+        length += 2
+        for i in range(self.RewardCount):
+            length += self.RewardList[i].GetLength()
+
+        return length
+
+    def GetBuffer(self):
+        data = ''
+        data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer())
+        data = CommFunc.WriteBYTE(data, self.ZhanlingType)
+        data = CommFunc.WriteBYTE(data, self.IsActivite)
+        data = CommFunc.WriteWORD(data, self.RewardCount)
+        for i in range(self.RewardCount):
+            data = CommFunc.WriteString(data, self.RewardList[i].GetLength(), self.RewardList[i].GetBuffer())
+        return data
+
+    def OutputString(self):
+        DumpString = '''
+                                Head:%s,
+                                ZhanlingType:%d,
+                                IsActivite:%d,
+                                RewardCount:%d,
+                                RewardList:%s
+                                '''\
+                                %(
+                                self.Head.OutputString(),
+                                self.ZhanlingType,
+                                self.IsActivite,
+                                self.RewardCount,
+                                "..."
+                                )
+        return DumpString
+
+
+m_NAtagMCZhanlingInfo=tagMCZhanlingInfo()
+ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCZhanlingInfo.Head.Cmd,m_NAtagMCZhanlingInfo.Head.SubCmd))] = m_NAtagMCZhanlingInfo
+
+
+#------------------------------------------------------
 # B2 08 获得仙缘币信息 #tagMCAddXianyuanCoinMsg
 
 class  tagMCAddXianyuanCoinMsg(Structure):
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/IpyGameDataPY.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/IpyGameDataPY.py
index e5ac6f5..d5ab22b 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/IpyGameDataPY.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/IpyGameDataPY.py
@@ -2203,6 +2203,14 @@
                         ("BYTE", "AwardID", 1),
                         ("list", "AwardItemList", 0),
                         ),
+
+                "Zhanling":(
+                        ("BYTE", "ZhanlingType", 1),
+                        ("DWORD", "NeedValue", 1),
+                        ("BYTE", "RewardIndex", 0),
+                        ("list", "FreeRewardItemList", 0),
+                        ("list", "ZLRewardItemList", 0),
+                        ),
                 }
 
 
@@ -6774,6 +6782,23 @@
         
     def GetAwardID(self): return self.AwardID # 奖励ID 1~n
     def GetAwardItemList(self): return self.AwardItemList # 物品奖励[[物品ID,个数,是否拍品], ...]
+
+# 战令表
+class IPY_Zhanling():
+    
+    def __init__(self):
+        self.ZhanlingType = 0
+        self.NeedValue = 0
+        self.RewardIndex = 0
+        self.FreeRewardItemList = []
+        self.ZLRewardItemList = []
+        return
+        
+    def GetZhanlingType(self): return self.ZhanlingType # 战令类型
+    def GetNeedValue(self): return self.NeedValue # 所需值
+    def GetRewardIndex(self): return self.RewardIndex # 奖励记录索引,0~n,同个战令类型不可重复
+    def GetFreeRewardItemList(self): return self.FreeRewardItemList # 免费奖励物品列表 [[物品ID,个数,是否拍品],...]
+    def GetZLRewardItemList(self): return self.ZLRewardItemList # 战令奖励物品列表 [[物品ID,个数,是否拍品],...]
 
 
 def Log(msg, playerID=0, par=0):
@@ -7249,6 +7274,8 @@
         self.ipyHistoryRechargeAwardLen = len(self.ipyHistoryRechargeAwardCache)
         self.ipyCustomAwardCache = self.__LoadFileData("CustomAward", IPY_CustomAward)
         self.ipyCustomAwardLen = len(self.ipyCustomAwardCache)
+        self.ipyZhanlingCache = self.__LoadFileData("Zhanling", IPY_Zhanling)
+        self.ipyZhanlingLen = len(self.ipyZhanlingCache)
         Log("IPY_FuncConfig count=%s" % len(self.ipyFuncConfigDict))
         Log("IPY_DataMgr InitOK!")
         return
@@ -7865,6 +7892,8 @@
     def GetHistoryRechargeAwardByIndex(self, index): return self.ipyHistoryRechargeAwardCache[index]
     def GetCustomAwardCount(self): return self.ipyCustomAwardLen
     def GetCustomAwardByIndex(self, index): return self.ipyCustomAwardCache[index]
+    def GetZhanlingCount(self): return self.ipyZhanlingLen
+    def GetZhanlingByIndex(self, index): return self.ipyZhanlingCache[index]
 
 IPYData = IPY_DataMgr()
 def IPY_Data(): return IPYData
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 e2439bf..2de8b03 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/ChPlayer.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/ChPlayer.py
@@ -150,6 +150,7 @@
 import PlayerGubao
 import PlayerShentong
 import PlayerCustomAward
+import PlayerZhanling
 import PlayerLianTi
 import PlayerYinji
 import PlayerLove
@@ -958,6 +959,7 @@
     
     PlayerGubao.OnPlayerLogin(curPlayer)
     PlayerShentong.OnPlayerLogin(curPlayer)
+    PlayerZhanling.OnPlayerLogin(curPlayer)
     # 上线查询一次充值订单
     curPlayer.SendDBQueryRecharge()
     
@@ -5698,6 +5700,9 @@
     #打包直购礼包奖励
     elif rewardType == ChConfig.Def_RewardType_DailyPackBuyGift:
         PlayerGoldGift.GetDailyPackBuyGift(curPlayer, dataEx)
+    #战令奖励
+    elif rewardType == ChConfig.Def_RewardType_Zhanling:
+        PlayerZhanling.GetZhanlingReward(curPlayer, dataEx, dataExStr)
     #玩法前瞻奖励
     elif rewardType == ChConfig.Def_RewardType_GameNotice:
         OnGiveAwardByClient(curPlayer, rewardType, ChConfig.Def_PDict_GameNoticeAwardState, IpyGameDataPY.GetFuncEvalCfg("GameNoticeReward", 1))
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerCoin.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerCoin.py
index 4b6fb45..6bdfd40 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerCoin.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerCoin.py
@@ -62,6 +62,7 @@
 import PlayerWeekParty
 import PlayerGoldInvest
 import PlayerActTurntable
+import PlayerZhanling
 import ItemCommon
 import PyGameData
 import CommFunc
@@ -571,6 +572,7 @@
         ctgID = ctgIpyData.GetRecordID()
         PlayerGoldInvest.InvestByCTG(curPlayer, ctgID)
         PlayerGoldGift.OnGiftByCTGID(curPlayer, ctgID)
+        PlayerZhanling.OnActiviteByCTGID(curPlayer, ctgID)
         
     serverDay = GameWorld.GetGameWorld().GetGameWorldDictByKey(ShareDefine.Def_Notify_WorldKey_ServerDay) + 1
     addDRDict.update({"gold":[goldBefore, goldAfter], "changeCoinPoint":[changeCoinPointBefore, changeCoinPointAfter], "todayCTGCoinTotal":todayCTGCoinTotal,
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerZhanling.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerZhanling.py
new file mode 100644
index 0000000..5c9b269
--- /dev/null
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerZhanling.py
@@ -0,0 +1,140 @@
+#!/usr/bin/python
+# -*- coding: GBK -*-
+#-------------------------------------------------------------------------------
+#
+##@package Player.PlayerZhanling
+#
+# @todo:战令
+# @author hxp
+# @date 2023-12-05
+# @version 1.0
+#
+# 详细描述: 战令
+#
+#-------------------------------------------------------------------------------
+#"""Version = 2023-12-05 15:30"""
+#-------------------------------------------------------------------------------
+
+import GameWorld
+import NetPackCommon
+import IpyGameDataPY
+import PlayerControl
+import ChPyNetSendPack
+import ItemControler
+import IPY_GameWorld
+import ChConfig
+
+# 战令类型
+ZhanlingTypeList = (
+ZhanlingType_LV,
+ZhanlingType_Realm,
+ZhanlingType_SkyTower,
+) = range(1, 1 + 3)
+
+def OnPlayerLogin(curPlayer):
+    for zhanlingType in ZhanlingTypeList:
+        SyncZhanlingInfo(curPlayer, zhanlingType)
+    return
+
+def OnActiviteByCTGID(curPlayer, ctgID):
+    zhanlingCTGIDDict = IpyGameDataPY.GetFuncEvalCfg("Zhanling", 1)
+    for zhanlingTypeStr, ctgIDList in zhanlingCTGIDDict.items():
+        if ctgID not in ctgIDList:
+            continue
+        zhanlingType = int(zhanlingTypeStr)
+        state = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_ZhanlingState)
+        if state&pow(2, zhanlingType):
+            break
+        
+        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())
+        break
+    
+    return
+
+def GetZhanlingReward(curPlayer, zhanlingType, rewardID):
+    ## 领取战令奖励
+    rewardID = GameWorld.ToIntDef(rewardID)
+    needValue, isFree = rewardID/10, rewardID%10
+    playerID = curPlayer.GetPlayerID()
+    
+    ipyData = IpyGameDataPY.GetIpyGameData("Zhanling", zhanlingType, needValue)
+    if not ipyData:
+        return
+    
+    curValue = 0
+    if zhanlingType == ZhanlingType_LV:
+        curValue = curPlayer.GetLV()
+    elif zhanlingType == ZhanlingType_Realm:
+        curValue = curPlayer.GetOfficialRank()
+    elif zhanlingType == ZhanlingType_SkyTower:
+        curValue = curPlayer.NomalDictGetProperty(ChConfig.Def_Player_Dict_SkyTowerFloor)
+    else:
+        return
+        
+    if curValue < needValue:
+        GameWorld.DebugLog("战令所需值不足,无法领奖: zhanlingType=%s,curValue=%s < %s" % (zhanlingType, curValue, needValue), playerID)
+        return
+    
+    rewardIndex = ipyData.GetRewardIndex()
+    itemList = ipyData.GetFreeRewardItemList()
+    rewardKey = ChConfig.Def_PDict_ZhanlingRewardFree
+    if not isFree:
+        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)
+            return
+        
+    if GameWorld.GetDictValueByBit(curPlayer, rewardKey, rewardIndex, True, [zhanlingType]):
+        GameWorld.DebugLog("已经领取过该战令奖励! zhanlingType=%s,needValue=%s,isFree=%s" % (zhanlingType, needValue, isFree), playerID)
+        return
+    
+    # 检查背包
+    if not ItemControler.CheckPackSpaceEnough(curPlayer, itemList):
+        return
+    
+    # 更新已领取成功标记
+    GameWorld.SetDictValueByBit(curPlayer, rewardKey, rewardIndex, 1, True, [zhanlingType])
+    SyncZhanlingInfo(curPlayer, zhanlingType, ipyData)
+    GameWorld.DebugLog("领取战令奖励: zhanlingType=%s,needValue=%s,isFree=%s" % (zhanlingType, needValue, isFree), playerID)
+    
+    # 给物品
+    for itemID, itemCount, isAuctionItem in itemList:
+        ItemControler.GivePlayerItem(curPlayer, itemID, itemCount, isAuctionItem, [IPY_GameWorld.rptItem])
+        
+    return
+
+def SyncZhanlingInfo(curPlayer, zhanlingType, ipyData=None):
+    
+    ipyDataList = []
+    if ipyData == None:
+        ipyDataList = IpyGameDataPY.GetIpyGameDataByCondition("Zhanling", {"ZhanlingType":zhanlingType}, True)
+    else:
+        ipyDataList = [ipyData]
+        
+    if not ipyDataList:
+        return
+            
+    rewardList = []
+    for ipyData in ipyDataList:
+        rewardIndex = ipyData.GetRewardIndex()
+        reward = ChPyNetSendPack.tagMCZhanling()
+        reward.Clear()
+        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
+        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.RewardList = rewardList
+    clientPack.RewardCount = len(clientPack.RewardList)
+    NetPackCommon.SendFakePack(curPlayer, clientPack)
+    return
+

--
Gitblit v1.8.0