From c9d85bde9ec46becb60b4434ec74fd7e527b885e Mon Sep 17 00:00:00 2001
From: hxp <ale99527@vip.qq.com>
Date: 星期五, 15 十一月 2024 17:17:01 +0800
Subject: [PATCH] 10302 【越南】【英语】【砍树】【tqxbqy】【btgotq】仙缘-服务端

---
 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GameWorld.py |  106 +++++++++++++++++++++++++++++++++++++++++++++++++++++
 1 files changed, 106 insertions(+), 0 deletions(-)

diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GameWorld.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GameWorld.py
index cd3aaa5..3b74f2e 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GameWorld.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GameWorld.py
@@ -725,6 +725,112 @@
     endDateStr = "%d-%d-%d" % (endDateTime.year, endDateTime.month, endDateTime.day)
     return startDateStr, endDateStr
 
+def GetActRelateFuncInfo(curPlayer, actName, actInfo, playerActID):
+    ## 获取活动关联玩家功能开启信息
+    cfgID = actInfo.get(ShareDefine.ActKey_CfgID)
+    if not cfgID:
+        return
+    ipyData = IpyGameDataPY.GetIpyGameDataNotLog(actName, cfgID)
+    if not ipyData:
+        return
+    if not hasattr(ipyData, "GetRelateFuncID"):
+        return
+    relateFuncID = ipyData.GetRelateFuncID()
+    if not relateFuncID:
+        return
+    funcActDays = ipyData.GetFuncActDays()
+    funcLoop = ipyData.GetFuncLoop()
+    
+    playerID = curPlayer.GetPlayerID()
+    isInAct = False # 是否活动中
+    actID = playerActID # 玩家实际的活动ID
+    if not actInfo.get(ShareDefine.ActKey_State, 0):
+        #DebugLog("关联功能非活动中默认不开活动! actName=%s,cfgID=%s" % (actName, cfgID), playerID)
+        return isInAct, actID
+    isOpen = GetDictValueByBit(curPlayer, ChConfig.Def_Player_Dict_GameFuncFirstTouch, relateFuncID, True)
+    if not isOpen:
+        DebugLog("关联功能未开启默认不开活动! actName=%s,cfgID=%s,relateFuncID=%s" % (actName, cfgID, relateFuncID), playerID)
+        return isInAct, actID
+        
+    isDayRest = 0 if not hasattr(ipyData, "GetIsDayReset") else ipyData.GetIsDayReset()
+    actNum = actInfo.get(ShareDefine.ActKey_ActNum)
+    serverTime = GetCurrentTime()
+    newAct = False
+    
+    if isDayRest:
+        newAct = True
+        DebugLog("关联功能活动,每日重置的活动! actName=%s,cfgID=%s,relateFuncID=%s" % (actName, cfgID, relateFuncID), playerID)
+        
+    elif not playerActID:
+        newAct = True
+        DebugLog("关联功能活动,玩家首次开启活动! actName=%s,cfgID=%s,relateFuncID=%s" % (actName, cfgID, relateFuncID), playerID)
+        
+    # 有活动期限的
+    elif funcActDays:
+        startDayDate, endDayDate = GetActRelateFuncDate(ipyData, playerActID)
+        if startDayDate <= serverTime < endDayDate:
+            isInAct = True
+            DebugLog("关联功能活动,正常活动中! actName=%s,cfgID=%s,%s~%s" % (actName, cfgID, startDayDate, endDayDate), playerID)
+        elif serverTime >= endDayDate:
+            if funcLoop:
+                newAct = True
+                DebugLog("关联功能活动,活动结束,重新开始循环新活动! actName=%s,cfgID=%s,%s~%s" % (actName, cfgID, startDayDate, endDayDate), playerID)
+            else:
+                DebugLog("关联功能活动,活动结束,不循环! actName=%s,cfgID=%s,%s~%s" % (actName, cfgID, startDayDate, endDayDate), playerID)                
+        else:
+            DebugLog("关联功能活动,玩家活动ID超过当前时间,可能是调时间引起,重新开始循环新活动! actName=%s,cfgID=%s,%s~%s" % (actName, cfgID, startDayDate, endDayDate), playerID)
+            newAct = True
+            
+    # 永久的,默认活动中
+    else:
+        isInAct = True
+        DebugLog("关联功能活动,永久开放的活动! actName=%s,cfgID=%s,relateFuncID=%s" % (actName, cfgID, relateFuncID), playerID)
+        
+    if newAct:
+        isInAct = True
+        resetType = 0 if not hasattr(ipyData, "GetResetType") else ipyData.GetResetType() # 重置类型,0-0点重置;1-5点重置 
+        startDateStr = "%d-%d-%d" % (serverTime.year, serverTime.month, serverTime.day)
+        if resetType == 1:
+            startDayDate = datetime.datetime.strptime("%s 05:00:00" % (startDateStr), ChConfig.TYPE_Time_Format)      
+        else:
+            startDayDate = datetime.datetime.strptime("%s 00:00:00" % (startDateStr), ChConfig.TYPE_Time_Format)
+        actID = int(time.mktime(startDayDate.timetuple()))
+        
+    DebugLog("关联功能活动! actName=%s,cfgID=%s,actNum=%s,relateFuncID=%s,playerActID=%s,actID=%s,isInAct=%s" 
+             % (actName, cfgID, actNum, relateFuncID, playerActID, actID, isInAct), playerID)
+    return isInAct, actID
+
+def GetActRelateFuncDate(ipyData, startTime, returnYmdStr=False):
+    funcActDays = ipyData.GetFuncActDays()
+    isDayRest = 0 if not hasattr(ipyData, "GetIsDayReset") else ipyData.GetIsDayReset()
+    resetType = 0 if not hasattr(ipyData, "GetResetType") else ipyData.GetResetType() # 重置类型,0-0点重置;1-5点重置
+    if isDayRest:
+        funcActDays = 1
+        
+    startDayDate = ChangeTimeNumToDatetime(startTime, ChConfig.TYPE_Time_Format)
+    if funcActDays:
+        startDayStr = str(startDayDate)[:10]
+        if resetType == 1:
+            endDayDate = datetime.datetime.strptime("%s 04:59:59" % (startDayStr), ChConfig.TYPE_Time_Format) + datetime.timedelta(days=funcActDays)
+        elif resetType == 2:   
+            endDayDate = datetime.datetime.strptime("%s 23:59:59" % (startDayStr), ChConfig.TYPE_Time_Format) + datetime.timedelta(days=(funcActDays-1))
+        else:
+            endDayDate = datetime.datetime.strptime("%s 23:59:59" % (startDayStr), ChConfig.TYPE_Time_Format) + datetime.timedelta(days=(funcActDays-1))
+    else:
+        endDateStr = ipyData.GetEndDate()
+        if resetType == 1:
+            endDayDate = datetime.datetime.strptime("%s 04:59:59" % (endDateStr), ChConfig.TYPE_Time_Format)
+        elif resetType == 2:   
+            endDayDate = datetime.datetime.strptime("%s 23:59:59" % (endDateStr), ChConfig.TYPE_Time_Format)
+        else:
+            endDayDate = datetime.datetime.strptime("%s 23:59:59" % (endDateStr), ChConfig.TYPE_Time_Format)
+            
+    if returnYmdStr:
+        startDateStr = "%d-%d-%d" % (startDayDate.year, startDayDate.month, startDayDate.day)
+        endDateStr = "%d-%d-%d" % (endDayDate.year, endDayDate.month, endDayDate.day)
+        return startDateStr, endDateStr
+    return startDayDate, endDayDate
+
 ##获得服务器系统时间
 # @param 无
 # @return 返回值. 时间Data格式

--
Gitblit v1.8.0