From 64bf77e08f655fe64d4c1a4519fa571860622ae3 Mon Sep 17 00:00:00 2001
From: hxp <ale99527@vip.qq.com>
Date: 星期二, 27 八月 2024 19:09:26 +0800
Subject: [PATCH] 10251 【越南】【砍树】骑宠养成-新增养成战令

---
 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerZhanling.py |   75 +++++++++++++++++++++++++++++++++++++
 1 files changed, 74 insertions(+), 1 deletions(-)

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 bf33463..b9f3c00 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerZhanling.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerZhanling.py
@@ -21,6 +21,7 @@
 import PlayerControl
 import ChPyNetSendPack
 import PlayerGatherTheSoul
+import PlayerActHorsePetTrain
 import ItemControler
 import IPY_GameWorld
 import PlayerGubao
@@ -35,7 +36,8 @@
 ZhanlingType_GubaoStar,
 ZhanlingType_Login,
 ZhanlingType_GatherTheSoulLV,
-) = range(1, 1 + 6)
+ZhanlingType_HorsePetTrain,
+) = range(1, 1 + 7)
 
 def OnPlayerLogin(curPlayer):
     for zhanlingType in ZhanlingTypeList:
@@ -81,6 +83,75 @@
         break
     return
 
+def ResetZhanling(curPlayer, zhanlingType, backValue=None):
+    ''' 重置战令
+    @param zhanlingType: 战令类型 
+    @param backValue: 重置战令时的战令奖励值,用于返还未领取奖励
+    '''
+    state = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_ZhanlingState)
+    stateH = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_ZhanlingStateH)
+    updState = GameWorld.SetBitValue(state, zhanlingType, 0)
+    updStateH = GameWorld.SetBitValue(stateH, zhanlingType, 0)
+    PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_ZhanlingState, updState)
+    PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_ZhanlingStateH, updStateH)
+    GameWorld.Log("重置战令: zhanlingType=%s,backValue=%s,state=(%s to %s) stateH=(%s to %s)" 
+                  % (zhanlingType, backValue, state, updState, stateH, updStateH), curPlayer.GetPlayerID())
+    
+    if backValue:
+        __giveUngetAward(curPlayer, zhanlingType, backValue, state&pow(2, zhanlingType), stateH&pow(2, zhanlingType))
+        
+    for keyNum in range(10):
+        PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_ZhanlingReward % (zhanlingType, keyNum), 0)
+        PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_ZhanlingRewardH % (zhanlingType, keyNum), 0)
+        PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_ZhanlingRewardFree % (zhanlingType, keyNum), 0)
+    SyncZhanlingInfo(curPlayer, zhanlingType)
+    return
+
+def __giveUngetAward(curPlayer, zhanlingType, backValue, activeState, activeStateH):
+    ipyDataList = IpyGameDataPY.GetIpyGameDataByCondition("Zhanling", {"ZhanlingType":zhanlingType}, True)
+    if not ipyDataList:
+        return
+    if not backValue:
+        return
+    playerID = curPlayer.GetPlayerID()
+    GameWorld.DebugLog("处理战令重置补发奖励: zhanlingType=%s,backValue=%s,activeState=%s,activeStateH=%s" 
+                       % (zhanlingType, backValue, activeState, activeStateH), playerID)
+    ungetItemDict = {}
+    for ipyData in ipyDataList:
+        needValue = ipyData.GetNeedValue()
+        rewardIndex = ipyData.GetRewardIndex()
+        if backValue < needValue:
+            break
+        
+        if not GameWorld.GetDictValueByBit(curPlayer, ChConfig.Def_PDict_ZhanlingRewardFree, rewardIndex, True, [zhanlingType]):
+            rewardItemList = ipyData.GetFreeRewardItemList()
+            for itemID, itemCount, _ in rewardItemList:
+                ungetItemDict[itemID] = ungetItemDict.get(itemID, 0) + itemCount
+            GameWorld.DebugLog("    战令补发免费奖励: rewardIndex=%s,needValue=%s,%s, %s" % (rewardIndex, needValue, rewardItemList, ungetItemDict), playerID)
+                
+        if activeState and not GameWorld.GetDictValueByBit(curPlayer, ChConfig.Def_PDict_ZhanlingReward, rewardIndex, True, [zhanlingType]):
+            rewardItemList = ipyData.GetZLRewardItemList()
+            for itemID, itemCount, _ in rewardItemList:
+                ungetItemDict[itemID] = ungetItemDict.get(itemID, 0) + itemCount
+            GameWorld.DebugLog("    战令补发普通奖励: rewardIndex=%s,needValue=%s,%s, %s" % (rewardIndex, needValue, rewardItemList, ungetItemDict), playerID)
+                
+        if activeStateH and not GameWorld.GetDictValueByBit(curPlayer, ChConfig.Def_PDict_ZhanlingRewardH, rewardIndex, True, [zhanlingType]):
+            rewardItemList = ipyData.GetZLRewardItemListH()
+            for itemID, itemCount, _ in rewardItemList:
+                ungetItemDict[itemID] = ungetItemDict.get(itemID, 0) + itemCount
+            GameWorld.DebugLog("    战令补发高级奖励: rewardIndex=%s,needValue=%s,%s, %s" % (rewardIndex, needValue, rewardItemList, ungetItemDict), playerID)
+            
+    if not ungetItemDict:
+        return
+    paramList = [zhanlingType]
+    itemList = []
+    for itemID, itemCount in ungetItemDict.items():
+        itemList.append([itemID, itemCount, 0])
+    GameWorld.DebugLog("    战令补发奖励汇总: %s, %s" % (itemList, ungetItemDict), playerID)
+    
+    PlayerControl.SendMailByKey("ZhanlingRewardUnget", [playerID], itemList, paramList)
+    return
+
 def GetZhanlingReward(curPlayer, zhanlingType, rewardID):
     ## 领取战令奖励
     rewardID = GameWorld.ToIntDef(rewardID)
@@ -107,6 +178,8 @@
         curValue = GameWorld.GetDiff_Day(int(time.time()), firstLoginTime) + 1      
     elif zhanlingType == ZhanlingType_GatherTheSoulLV:
         curValue = PlayerGatherTheSoul.GetGatherTheSoulTotalLV(curPlayer)
+    elif zhanlingType == ZhanlingType_HorsePetTrain:
+        curValue = PlayerActHorsePetTrain.GetActHorsePetTrainScore(curPlayer)
     else:
         return
         

--
Gitblit v1.8.0