From 209a1fb4415b46739be6bef5432cf6caddb91931 Mon Sep 17 00:00:00 2001
From: hxp <ale99527@vip.qq.com>
Date: 星期五, 13 九月 2024 18:23:33 +0800
Subject: [PATCH] 10261 【越南】【砍树】【英文】仙盟徽章、头像、头像框(存储激活状态及到期时间方式修改;)

---
 ServerPython/CoreServerGroup/GameServer/Script/Player/PlayerFamilyEmblem.py |   93 ++++++++++++++++------------------------------
 1 files changed, 33 insertions(+), 60 deletions(-)

diff --git a/ServerPython/CoreServerGroup/GameServer/Script/Player/PlayerFamilyEmblem.py b/ServerPython/CoreServerGroup/GameServer/Script/Player/PlayerFamilyEmblem.py
index 50df712..87b8a0a 100644
--- a/ServerPython/CoreServerGroup/GameServer/Script/Player/PlayerFamilyEmblem.py
+++ b/ServerPython/CoreServerGroup/GameServer/Script/Player/PlayerFamilyEmblem.py
@@ -26,8 +26,8 @@
 
 def GetActionEmblemID(emblemActionObj): return emblemActionObj.GetValue1()
 def SetActionEmblemID(emblemActionObj, emblemID): return emblemActionObj.SetValue1(emblemID)
-def GetActionEmblemExpireTimes(emblemActionObj): return emblemActionObj.GetValue2()
-def SetActionEmblemExpireTimes(emblemActionObj, endTime): return emblemActionObj.SetValue2(endTime)
+def GetActionEmblemEndTime(emblemActionObj): return emblemActionObj.GetValue2()
+def SetActionEmblemEndTime(emblemActionObj, endTime): return emblemActionObj.SetValue2(endTime)
 
 def GetDefaultFamilyEmblemIDList():
     ## 获取默认的仙盟徽章ID列表,即所有解锁等级为1的徽章ID
@@ -57,8 +57,8 @@
         for index in range(familyAction.Count())[::-1]: # 可能触发删除,倒序遍历
             emblemActionObj = familyAction.At(index)
             emblemID = GetActionEmblemID(emblemActionObj)
-            isExpired, endTime = IsEmblemExpired(emblemActionObj, curTime)
-            if not isExpired:
+            endTime = GetActionEmblemEndTime(emblemActionObj)
+            if not endTime or endTime > curTime:
                 #GameWorld.Log("检查仙盟徽章未过期! familyID=%s,emblemID=%s,endTime=%s" % (familyID, emblemID, endTime))
                 continue
             familyAction.DelAction(index)
@@ -71,40 +71,6 @@
                 PlayerFamily.SetFamilyEmblemID(family, updEmblemID)
                 family.Broadcast_FamilyChange()
     return
-
-def IsEmblemExpired(emblemActionObj, curTime):
-    ## 勋章是否过期
-    # @return: 是否过期, endTime
-        
-    endTime = -1
-    if not emblemActionObj:
-        return True, endTime
-    
-    createTime = emblemActionObj.GetTime()
-    expireTimes = GetEmblemExpireTimes(emblemActionObj)
-    if expireTimes == 0:
-        # 永久的
-        return False, 0
-    
-    if expireTimes > 0:
-        endTime = createTime + expireTimes
-        if endTime >= curTime:
-            # 未过期
-            return False, endTime
-        
-    return True, endTime
-
-def GetEmblemExpireTimes(emblemActionObj):
-    ## 获取勋章有效时长,秒
-    # @return: 0-永久;-1-无效;>0-有效秒数
-    expireTimes = GetActionEmblemExpireTimes(emblemActionObj) # 有效时长,秒
-    if not expireTimes:
-        emblemID = GetActionEmblemID(emblemActionObj)
-        ipyData = IpyGameDataPY.GetIpyGameData("FamilyEmblem", emblemID)
-        if not ipyData:
-            return -1
-        expireTimes = ipyData.GetExpireMinutes() * 60
-    return expireTimes
 
 def GetFamilyEmblemActionData(familyID, emblemID):
     ## 获取仙盟时效徽章Action数据
@@ -130,12 +96,7 @@
     if unlockFamilyLV:
         GameWorld.Log("仙盟解锁的徽章不需要添加! familyID=%s,emblemID=%s" % (familyID, emblemID))
         return
-    if setExpireTimes >= 0:
-        expireTimes = setExpireTimes
-    else:        
-        expireTimes = ipyData.GetExpireMinutes() * 60
-    GameWorld.Log("添加仙盟徽章! familyID=%s,emblemID=%s,setExpireTimes=%s,expireTimes=%s" 
-                  % (familyID, emblemID, setExpireTimes, expireTimes))
+    ipyExpireSeconds = ipyData.GetExpireMinutes() * 60
     
     curTime = int(time.time())
     emblemActionObj = GetFamilyEmblemActionData(familyID, emblemID)
@@ -146,22 +107,31 @@
         emblemActionObj.SetTime(curTime)
         emblemActionObj.SetFamilyId(familyID)
         emblemActionObj.SetActionType(actionType)
+            
+    if not emblemActionObj:
+        return
+    endTime = GetActionEmblemEndTime(emblemActionObj)
+    updEndTime = endTime
+    
+    # 指定时长的,如GM指定
+    if setExpireTimes > 0:
+        updEndTime = curTime + setExpireTimes
+        
+    # 永久
+    elif ipyExpireSeconds == 0 or setExpireTimes == 0:
+        updEndTime = 0
+        
     else:
-        isExpired, endTime = IsEmblemExpired(emblemActionObj, curTime)
-        if setExpireTimes >= 0:
-            emblemActionObj.SetTime(curTime)
-            GameWorld.Log("直接设置勋章剩余时长,重新设置获得时间! familyID=%s,emblemID=%s" % (familyID, emblemID))
-        elif isExpired:
-            emblemActionObj.SetTime(curTime)
-            GameWorld.Log("获得勋章时已过期,重新设置获得时间! familyID=%s,emblemID=%s,endTime=%s" % (familyID, emblemID, endTime))
+        # 未过期
+        if endTime > curTime:
+            updEndTime = endTime + ipyExpireSeconds
         else:
-            # 未过期,非永久的直接累加时长
-            if expireTimes > 0:
-                expireTimes += GetActionEmblemExpireTimes(emblemActionObj)
-                GameWorld.Log("获得勋章时未过期,累加有效时长! familyID=%s,emblemID=%s,expireTimes=%s" % (familyID, emblemID, expireTimes))
-                
+            updEndTime = curTime + ipyExpireSeconds
+            
+    GameWorld.Log("添加仙盟徽章! familyID=%s,emblemID=%s,setExpireTimes=%s,endTime=%s,updEndTime=%s" 
+                  % (familyID, emblemID, setExpireTimes, endTime, updEndTime))
     SetActionEmblemID(emblemActionObj, emblemID)
-    SetActionEmblemExpireTimes(emblemActionObj, expireTimes)
+    SetActionEmblemEndTime(emblemActionObj, updEndTime)
     
     # 通知
     PlayerFamilyAction.SendFamilyAction(emblemActionObj)
@@ -198,9 +168,12 @@
             return
     else:
         emblemActionObj = GetFamilyEmblemActionData(familyID, emblemID)
-        isExpired, endTime = IsEmblemExpired(emblemActionObj, int(time.time()))
-        if isExpired:
-            GameWorld.DebugLog("该徽章不存在或已过期! emblemID=%s,endTime=%s" % (emblemID, endTime), playerID)
+        if not emblemActionObj:
+            GameWorld.DebugLog("该徽章未激活! emblemID=%s" % (emblemID), playerID)
+            return
+        endTime = GetActionEmblemEndTime(emblemActionObj)
+        if endTime and endTime <= int(time.time()):
+            GameWorld.Log("该徽章已过期! familyID=%s,emblemID=%s,endTime=%s" % (familyID, emblemID, endTime))
             return
         
     GameWorld.DebugLog("更换仙盟徽章! familyID=%s,emblemID=%s" % (familyID, emblemID), playerID)

--
Gitblit v1.8.0