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 +++++++++++++++++++++++++++++++++++++++++++++++++-------
 1 files changed, 49 insertions(+), 7 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 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