From a1f9aded73d7c162d51f87a5a6659799f2f08c21 Mon Sep 17 00:00:00 2001
From: hxp <ale99527@vip.qq.com>
Date: 星期一, 17 十月 2022 17:09:34 +0800
Subject: [PATCH] 9684 【越南】坐骑幻化支持时效性

---
 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerHorse.py |  107 ++++++++++++++++++++++++++++++++++++++++++++---------
 1 files changed, 89 insertions(+), 18 deletions(-)

diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerHorse.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerHorse.py
index 32586b7..faeee70 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerHorse.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerHorse.py
@@ -38,6 +38,8 @@
 import PlayerSuccess
 import PlayerPet
 
+import time
+
 
 Def_HorseEquipIndex = 5
 
@@ -172,15 +174,25 @@
     if not GameFuncComm.GetFuncCanUse(curPlayer, ShareDefine.GameFuncID_Horse):
         return
     
-    activateState = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_HorserSkinPlusState)
-    if activateState & pow(2, activateID):
-        GameWorld.DebugLog("该坐骑已幻化!activateState=%s,activateID=%s" % (activateState, activateID))
-        return
-    
     ipyData = IpyGameDataPY.GetIpyGameData("HorseSkinPlus", activateID)
     if not ipyData:
         return
     
+    updSkinEndTime = 0
+    validTime = ipyData.GetSkinValidTime()
+    if validTime:
+        curTime = int(time.time())
+        skinEndTime = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_HorserSkinEndTime % activateID)
+        if curTime >= skinEndTime:
+            updSkinEndTime = curTime + validTime
+        else:
+            updSkinEndTime = skinEndTime + validTime
+    else:
+        activateState = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_HorserSkinPlusState)
+        if activateState & pow(2, activateID):
+            GameWorld.DebugLog("该坐骑已幻化!activateState=%s,activateID=%s" % (activateState, activateID))
+            return
+        
     needItemID = ipyData.GetUnlockItemID()
     needItemCnt = ipyData.GetUnlockItemCnt()
     itemPack = curPlayer.GetItemManager().GetPack(IPY_GameWorld.rptItem)
@@ -190,16 +202,23 @@
         return
     ItemCommon.ReduceItem(curPlayer, itemPack, itemList, needItemCnt, False, ChConfig.ItemDel_Horse)
     
-    PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_HorserSkinPlusState, activateState|pow(2, activateID))
-    
+    if validTime:
+        PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_HorserSkinEndTime % activateID, updSkinEndTime)
+        GameWorld.DebugLog("坐骑幻化时效 activateID=%s,updSkinEndTime=%s(%s)" % (activateID, updSkinEndTime, GameWorld.ChangeTimeNumToStr(updSkinEndTime)), playerID)
+    else:
+        PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_HorserSkinPlusState, activateState|pow(2, activateID))
+        
     playerEquip = curPlayer.GetItemManager().GetPack(IPY_GameWorld.rptEquip)
     itemRideHorse = playerEquip.GetAt(Def_HorseEquipIndex)
     #无指定道具
     if itemRideHorse.IsEmpty():
         DoChangeHorse(curPlayer, 2, activateID, tick)
         
-    Sync_HorseClassData(curPlayer)
-    GameWorld.Log("坐骑激活成功!activateID=%s" % (activateID), playerID)
+    if validTime:
+        SyncHorseSkinTimeInfo(curPlayer, activateID)
+    else:
+        Sync_HorseClassData(curPlayer)
+    GameWorld.Log("坐骑激活成功!activateID=%s,updSkinEndTime=%s" % (activateID, updSkinEndTime), playerID)
     
     # 刷属性,更新排行榜
     RefreshHorseAttr(curPlayer)
@@ -265,13 +284,10 @@
         
     # 按幻化
     elif chooseType == 2:
-        activateState = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_HorserSkinPlusState)
-        if not activateState & pow(2, lvID):
-            GameWorld.DebugLog("坐骑幻化未激活,无法使用该坐骑皮肤!  activateState=%s,lvID=%s" % (activateState, lvID))
-            return
-        
         skinPlusIpyData = IpyGameDataPY.GetIpyGameData("HorseSkinPlus", lvID)
         if not skinPlusIpyData:
+            return
+        if not CheckHorseSkinState(curPlayer, skinPlusIpyData):
             return
         horseItemID = skinPlusIpyData.GetHorseSkinPlusID()
         
@@ -306,6 +322,31 @@
             
     return True
 
+def CheckHorseSkinState(curPlayer, skinPlusIpyData):
+    skinID = skinPlusIpyData.GetID()
+    if skinPlusIpyData.GetSkinValidTime():
+        skinEndTime = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_HorserSkinEndTime % skinID)
+        if not skinEndTime:
+            return False
+        curTime = int(time.time())
+        if curTime >= skinEndTime:
+            playerID = curPlayer.GetPlayerID()
+            GameWorld.Log("坐骑幻化已过期! skinID=%s,skinEndTime=%s(%s)" % (skinID, skinEndTime, GameWorld.ChangeTimeNumToStr(skinEndTime)), playerID)
+            # 发送过期通知邮件,重置为0
+            PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_HorserSkinEndTime % skinID, 0)
+            
+            skinItemID = skinPlusIpyData.GetUnlockItemID()
+            addItemList = []
+            paramList = [skinItemID]
+            PlayerControl.SendMailByKey("HorseSkinInvalidNotify", [playerID], addItemList, paramList)
+            return False
+    else:
+        activateState = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_HorserSkinPlusState)
+        if not activateState & pow(2, skinID):
+            #GameWorld.DebugLog("坐骑幻化未激活! skinID=%s,activateState=%s" % (skinID, activateState), curPlayer.GetPlayerID())
+            return False
+    return True
+
 def DoHorseOpen(curPlayer):
     ## 马匹功能开启
     horseLV = 1
@@ -318,6 +359,12 @@
     PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_HorserSkinPlusState, 0)
     for trainType in xrange(1, GetHorseTrainTypes() + 1):
         PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_HorserTrainLV % trainType, 1)
+        
+    ipyDataMgr = IpyGameDataPY.IPY_Data()
+    for index in xrange(ipyDataMgr.GetHorseSkinPlusCount()):
+        skinPlusIpyData = ipyDataMgr.GetHorseSkinPlusByIndex(index)
+        skinID = skinPlusIpyData.GetID()
+        PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_HorserSkinEndTime % skinID, 0)
         
     horseID = ipyData.GetHorseSkinID()
     if not ItemCommon.FindItemInPackByItemID(curPlayer, horseID, IPY_GameWorld.rptEquip):
@@ -386,11 +433,9 @@
         
     # 幻化属性
     initFPAdd = 0 #初始战力
-    activateState = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_HorserSkinPlusState)
     for index in xrange(ipyDataMgr.GetHorseSkinPlusCount()):
         skinPlusIpyData = ipyDataMgr.GetHorseSkinPlusByIndex(index)
-        skinPlusID = skinPlusIpyData.GetID()
-        if not activateState & pow(2, skinPlusID):
+        if not CheckHorseSkinState(curPlayer, skinPlusIpyData):
             continue
         initFPAdd += skinPlusIpyData.GetInitFightPower()
         attrTypeList = skinPlusIpyData.GetAttrType()
@@ -643,6 +688,7 @@
             
     Sync_HorseClassData(curPlayer)
     SyncHorsePetSkinData(curPlayer)
+    SyncHorseSkinTimeInfo(curPlayer)
     return
 
 def Sync_HorseClassData(curPlayer):
@@ -837,4 +883,29 @@
     NetPackCommon.SendFakePack(curPlayer, packData)
     return
 
-        
+def SyncHorseSkinTimeInfo(curPlayer, skinID=None):
+    skinList = []
+    if skinID > 0:
+        timeInfo = ChPyNetSendPack.tagMCHorseSkinTimeInfo()
+        timeInfo.ID = skinID
+        timeInfo.InvalidTime = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_HorserSkinEndTime % skinID)
+        skinList.append(timeInfo)
+    else:
+        ipyDataMgr = IpyGameDataPY.IPY_Data()
+        for index in xrange(ipyDataMgr.GetHorseSkinPlusCount()):
+            skinPlusIpyData = ipyDataMgr.GetHorseSkinPlusByIndex(index)
+            skinID = skinPlusIpyData.GetID()
+            if not skinPlusIpyData.GetSkinValidTime():
+                continue
+            timeInfo = ChPyNetSendPack.tagMCHorseSkinTimeInfo()
+            timeInfo.ID = skinID
+            timeInfo.InvalidTime = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_HorserSkinEndTime % skinID)
+            skinList.append(timeInfo)
+            
+    packData = ChPyNetSendPack.tagMCHorseSkinTimeInfoList()
+    packData.Clear()
+    packData.TimeInfoList = skinList
+    packData.TimeCnt = len(packData.TimeInfoList)
+    NetPackCommon.SendFakePack(curPlayer, packData)
+    return
+

--
Gitblit v1.8.0