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/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerFace.py |  192 ++++++++++++++++++++----------------------------
 1 files changed, 80 insertions(+), 112 deletions(-)

diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerFace.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerFace.py
index 3ed5639..7814b4e 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerFace.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerFace.py
@@ -44,13 +44,12 @@
         if ipyData.GetUnlockDefault():
             # 默认激活的不处理
             continue
-        lightTime = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_FaceLightTime % faceID)
-        expireTimes = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_FaceExpireTimes % faceID) # 有效时长,秒
-        if not lightTime or not expireTimes:
-            # 未激活或永久的不处理
+        if not GameWorld.GetDictValueByBit(curPlayer, ChConfig.Def_PDict_FaceState, faceID):
+            # 未激活的不处理
             continue
-        endTime = lightTime + expireTimes
-        if endTime > curTime:
+        endTime = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_FaceEndTime % faceID)
+        if not endTime or endTime > curTime:
+            # 永久或未过期
             continue
         if DelFace(curPlayer, faceID, False, "FaceTimeout"):
             delFaceList.append(faceID)
@@ -65,13 +64,12 @@
         if ipyData.GetUnlockDefault():
             # 默认激活的不处理
             continue
-        lightTime = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_FacePicLightTime % facePicID)
-        expireTimes = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_FacePicExpireTimes % facePicID) # 有效时长,秒
-        if not lightTime or not expireTimes:
-            # 未激活或永久的不处理
+        if not GameWorld.GetDictValueByBit(curPlayer, ChConfig.Def_PDict_FacePicState, facePicID):
+            # 未激活的不处理
             continue
-        endTime = lightTime + expireTimes
-        if endTime > curTime:
+        endTime = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_FacePicEndTime % facePicID)
+        if not endTime or endTime > curTime:
+            # 永久或未过期
             continue
         if DelFacePic(curPlayer, facePicID, False, "FacePicTimeout"):
             delFacePicList.append(facePicID)
@@ -93,37 +91,33 @@
     ipyExpireSeconds = ipyData.GetExpireMinutes() * 60
     
     curTime = int(time.time())
-    lightTime = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_FaceLightTime % faceID)
-    expireTimes = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_FaceExpireTimes % faceID) # 有效时长,秒
-    GameWorld.Log("添加头像: faceID=%s,setExpireTimes=%s,lightTime=%s,expireTimes=%s,ipyExpireSeconds=%s,curTime=%s" 
-                  % (faceID, setExpireTimes, lightTime, expireTimes, ipyExpireSeconds, curTime), playerID)
-    updLightTime = lightTime
-    updExpireTimes = expireTimes
+    state = GameWorld.GetDictValueByBit(curPlayer, ChConfig.Def_PDict_FaceState, faceID)
+    endTime = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_FaceEndTime % faceID)
+    GameWorld.Log("添加头像: faceID=%s,setExpireTimes=%s,state=%s,endTime=%s,ipyExpireSeconds=%s,curTime=%s" 
+                  % (faceID, setExpireTimes, state, endTime, ipyExpireSeconds, curTime), playerID)
+    updEndTime = endTime
     
     # 指定时长的,如GM指定
-    if setExpireTimes >= 0:
-        updLightTime = curTime
-        updExpireTimes = setExpireTimes
-        GameWorld.Log("    指定头像时长: faceID=%s,updLightTime=%s,updExpireTimes=%s" % (faceID, updLightTime, updExpireTimes), playerID)
+    if setExpireTimes > 0:
+        updEndTime = curTime + setExpireTimes
+        GameWorld.Log("    指定头像时长: faceID=%s,updEndTime=%s" % (faceID, updEndTime), playerID)
         
     # 永久
-    elif ipyExpireSeconds == 0:
-        updLightTime = curTime
-        updExpireTimes = 0
-        GameWorld.Log("    添加永久头像: faceID=%s,updLightTime=%s,updExpireTimes=%s" % (faceID, updLightTime, updExpireTimes), playerID)
+    elif ipyExpireSeconds == 0 or setExpireTimes == 0:
+        updEndTime = 0
+        GameWorld.Log("    添加永久头像: faceID=%s,updEndTime=%s" % (faceID, updEndTime), playerID)
         
     else:
         # 未过期
-        if lightTime and expireTimes and (lightTime + expireTimes) > curTime:
-            updExpireTimes = expireTimes + ipyExpireSeconds
-            GameWorld.Log("    累加头像时长: faceID=%s,updLightTime=%s,updExpireTimes=%s" % (faceID, updLightTime, updExpireTimes), playerID)
+        if endTime > curTime:
+            updEndTime = endTime + ipyExpireSeconds
+            GameWorld.Log("    累加头像时长: faceID=%s,updEndTime=%s" % (faceID, updEndTime), playerID)
         else:
-            updLightTime = curTime
-            updExpireTimes = ipyExpireSeconds
-            GameWorld.Log("    重新激活头像: faceID=%s,updLightTime=%s,updExpireTimes=%s" % (faceID, updLightTime, updExpireTimes), playerID)
+            updEndTime = curTime + ipyExpireSeconds
+            GameWorld.Log("    重新激活头像: faceID=%s,updEndTime=%s" % (faceID, updEndTime), playerID)
             
-    PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_FaceLightTime % faceID, updLightTime)
-    PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_FaceExpireTimes % faceID, updExpireTimes)
+    GameWorld.SetDictValueByBit(curPlayer, ChConfig.Def_PDict_FaceState, faceID, 1)
+    PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_FaceEndTime % faceID, updEndTime)
     RefreshFaceAttr(curPlayer)
     SyncFaceInfo(curPlayer, [faceID])
     return True
@@ -136,8 +130,8 @@
     if ipyData.GetUnlockDefault():
         return
     GameWorld.Log("删除头像: faceID=%s,notifyMail=%s" % (faceID, notifyMail), playerID)
-    PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_FaceLightTime % faceID, 0)
-    PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_FaceExpireTimes % faceID, 0)
+    GameWorld.SetDictValueByBit(curPlayer, ChConfig.Def_PDict_FaceState, faceID, 0)
+    PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_FaceEndTime % faceID, 0)
     # 星级不重置,重新激活后再次生效
     
     if curPlayer.GetFace() == faceID:
@@ -189,37 +183,33 @@
     ipyExpireSeconds = ipyData.GetExpireMinutes() * 60
     
     curTime = int(time.time())
-    lightTime = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_FacePicLightTime % facePicID)
-    expireTimes = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_FacePicExpireTimes % facePicID) # 有效时长,秒
-    GameWorld.Log("添加头像框: facePicID=%s,setExpireTimes=%s,lightTime=%s,expireTimes=%s,ipyExpireSeconds=%s,curTime=%s" 
-                  % (facePicID, setExpireTimes, lightTime, expireTimes, ipyExpireSeconds, curTime), playerID)
-    updLightTime = lightTime
-    updExpireTimes = expireTimes
+    state = GameWorld.GetDictValueByBit(curPlayer, ChConfig.Def_PDict_FacePicState, facePicID)
+    endTime = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_FacePicEndTime % facePicID)
+    GameWorld.Log("添加头像框: facePicID=%s,setExpireTimes=%s,state=%s,endTime=%s,ipyExpireSeconds=%s,curTime=%s" 
+                  % (facePicID, setExpireTimes, state, endTime, ipyExpireSeconds, curTime), playerID)
+    updEndTime = endTime
     
     # 指定时长的,如GM指定
-    if setExpireTimes >= 0:
-        updLightTime = curTime
-        updExpireTimes = setExpireTimes
-        GameWorld.Log("    指定头像框时长: facePicID=%s,updLightTime=%s,updExpireTimes=%s" % (facePicID, updLightTime, updExpireTimes), playerID)
+    if setExpireTimes > 0:
+        updEndTime = curTime + setExpireTimes
+        GameWorld.Log("    指定头像框时长: facePicID=%s,updEndTime=%s" % (facePicID, updEndTime), playerID)
         
     # 永久
-    elif ipyExpireSeconds == 0:
-        updLightTime = curTime
-        updExpireTimes = 0
-        GameWorld.Log("    添加永久头像框: facePicID=%s,updLightTime=%s,updExpireTimes=%s" % (facePicID, updLightTime, updExpireTimes), playerID)
+    elif ipyExpireSeconds == 0 or setExpireTimes == 0:
+        updEndTime = 0
+        GameWorld.Log("    添加永久头像框: facePicID=%s,updEndTime=%s" % (facePicID, updEndTime), playerID)
         
     else:
         # 未过期
-        if lightTime and expireTimes and (lightTime + expireTimes) > curTime:
-            updExpireTimes = expireTimes + ipyExpireSeconds
-            GameWorld.Log("    累加头像框时长: facePicID=%s,updLightTime=%s,updExpireTimes=%s" % (facePicID, updLightTime, updExpireTimes), playerID)
+        if endTime > curTime:
+            updEndTime = endTime + ipyExpireSeconds
+            GameWorld.Log("    累加头像框时长: facePicID=%s,updEndTime=%s" % (facePicID, updEndTime), playerID)
         else:
-            updLightTime = curTime
-            updExpireTimes = ipyExpireSeconds
-            GameWorld.Log("    重新激活头像框: facePicID=%s,updLightTime=%s,updExpireTimes=%s" % (facePicID, updLightTime, updExpireTimes), playerID)
+            updEndTime = curTime + ipyExpireSeconds
+            GameWorld.Log("    重新激活头像框: facePicID=%s,updEndTime=%s" % (facePicID, updEndTime), playerID)
             
-    PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_FacePicLightTime % facePicID, updLightTime)
-    PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_FacePicExpireTimes % facePicID, updExpireTimes)
+    GameWorld.SetDictValueByBit(curPlayer, ChConfig.Def_PDict_FacePicState, facePicID, 1)
+    PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_FacePicEndTime % facePicID, updEndTime)
     RefreshFacePicAttr(curPlayer)
     SyncFacePicInfo(curPlayer, [facePicID])
     return True
@@ -232,8 +222,8 @@
     if ipyData.GetUnlockDefault():
         return
     GameWorld.Log("删除头像框: facePicID=%s,notifyMail=%s" % (facePicID, notifyMail), playerID)
-    PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_FacePicLightTime % facePicID, 0)
-    PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_FacePicExpireTimes % facePicID, 0)
+    GameWorld.SetDictValueByBit(curPlayer, ChConfig.Def_PDict_FacePicState, facePicID, 0)
+    PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_FacePicEndTime % facePicID, 0)
     # 星级不重置,重新激活后再次生效
     
     if curPlayer.GetFacePic() == facePicID:
@@ -249,55 +239,33 @@
         PlayerControl.SendMailByKey(notifyMail, [playerID], [], [facePicID])
     return True
 
-def GetFaceEndTime(curPlayer, faceID, ipyData=None):
-    ## 头像结束时间戳
-    # @return: -1-未激活;0-永久;>0-具体结束时间戳
-    lightTime = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_FaceLightTime % faceID)
-    expireTimes = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_FaceExpireTimes % faceID)
-    if lightTime:
-        if expireTimes:
-            return lightTime + expireTimes
-        return 0
-    if not ipyData:
-        ipyData = IpyGameDataPY.GetIpyGameData("PlayerFace", faceID)
-    if ipyData and ipyData.GetUnlockDefault():
-        return 0
-    return -1
-
 def IsFaceCanUse(curPlayer, faceID, ipyData=None):
     ## 头像是否可用
-    # 这里不判断严谨的过期时间,即不对比当前时间,只要endTime>=0即可
-    # 过期逻辑由过期函数定时处理删除即可,可能有1分钟延迟
-    return GetFaceEndTime(curPlayer, faceID, ipyData) >= 0
-
-def GetFacePicEndTime(curPlayer, facePicID, ipyData=None):
-    ## 头像框结束时间戳
-    # @return: -1-未激活;0-永久;>0-具体结束时间戳
-    lightTime = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_FacePicLightTime % facePicID)
-    expireTimes = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_FacePicExpireTimes % facePicID)
-    if lightTime:
-        if expireTimes:
-            return lightTime + expireTimes
-        return 0
+    state = GameWorld.GetDictValueByBit(curPlayer, ChConfig.Def_PDict_FaceState, faceID)
+    if state:
+        return True
+    
     if not ipyData:
-        ipyData = IpyGameDataPY.GetIpyGameData("PlayerFacePic", facePicID)
-    if ipyData and ipyData.GetUnlockDefault():
-        return 0
-    return -1
+        ipyData = IpyGameDataPY.GetIpyGameData("PlayerFace", faceID)
+    if ipyData:
+        if ipyData.GetUnlockDefault():
+            return True
+        
+    return False
 
 def IsFacePicCanUse(curPlayer, facePicID, ipyData=None):
     ## 头像框是否可用
-    # 这里不判断严谨的过期时间,即不对比当前时间,只要endTime>=0即可
-    # 过期逻辑由过期函数定时处理删除即可,可能有1分钟延迟
-    return GetFacePicEndTime(curPlayer, facePicID, ipyData) >= 0
-
-def GetEndTimeStr(endTime):
-    endTimeStr = "未激活"
-    if endTime == 0:
-        endTimeStr = "永久"
-    elif endTime > 0:
-        endTimeStr = GameWorld.ChangeTimeNumToStr(endTime)
-    return endTimeStr
+    state = GameWorld.GetDictValueByBit(curPlayer, ChConfig.Def_PDict_FacePicState, facePicID)
+    if state:
+        return True
+    
+    if not ipyData:
+        ipyData = IpyGameDataPY.GetIpyGameData("PlayerFacePic", facePicID)
+    if ipyData:
+        if ipyData.GetUnlockDefault():
+            return True
+        
+    return False
 
 def RefreshFaceAttr(curPlayer):
     CalcFaceAttr(curPlayer)
@@ -513,16 +481,16 @@
         
     faceList = []
     for faceID in syncIDList:
-        lightTime = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_FaceLightTime % faceID)
-        if not lightTime and faceIDList == None:
+        state = GameWorld.GetDictValueByBit(curPlayer, ChConfig.Def_PDict_FaceState, faceID)
+        if not state and faceIDList == None:
             continue
         face = ChPyNetSendPack.tagMCFace()
         face.FaceID = faceID
-        face.LightTime = lightTime
-        face.ExpireTime = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_FaceExpireTimes % faceID)
+        face.State = state
+        face.EndTime = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_FaceEndTime % faceID)
         face.Star = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_FaceStar % faceID)
         faceList.append(face)
-    
+        
     if not faceList:
         return
     
@@ -544,13 +512,13 @@
         
     facePicList = []
     for facePicID in syncIDList:
-        lightTime = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_FacePicLightTime % facePicID)
-        if not lightTime and facePicIDList == None:
+        state = GameWorld.GetDictValueByBit(curPlayer, ChConfig.Def_PDict_FacePicState, facePicID)
+        if not state and facePicIDList == None:
             continue
         facePic = ChPyNetSendPack.tagMCFacePic()
         facePic.FacePicID = facePicID
-        facePic.LightTime = lightTime
-        facePic.ExpireTime = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_FacePicExpireTimes % facePicID)
+        facePic.State = state
+        facePic.EndTime = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_FacePicEndTime % facePicID)
         facePic.Star = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_FacePicStar % facePicID)
         facePicList.append(facePic)
         

--
Gitblit v1.8.0