From f8dab27621ee5061a48b3a0142c6860b360cf0c9 Mon Sep 17 00:00:00 2001
From: hxp <ale99527@vip.qq.com>
Date: 星期三, 16 十月 2019 17:17:27 +0800
Subject: [PATCH] 8262 【主干】【后端】仙盟宴会及传功优化(增加宴会结束倒计时显示)

---
 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerActivity.py                          |   38 ++++++++++++++++++++++++++++++++++++++
 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/IpyGameDataPY.py                                  |    6 ++++++
 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GameWorldLogic/FBProcess/GameLogic_FamilyParty.py |   13 +++++++++----
 PySysDB/PySysDBPY.h                                                                                                   |    2 ++
 4 files changed, 55 insertions(+), 4 deletions(-)

diff --git a/PySysDB/PySysDBPY.h b/PySysDB/PySysDBPY.h
index d4e9873..f0b62a9 100644
--- a/PySysDB/PySysDBPY.h
+++ b/PySysDB/PySysDBPY.h
@@ -641,6 +641,8 @@
 struct tagDailyAction
 {
 	DWORD		_DailyID;	//活动ID
+	dict		OpenTimeDict;	//开启时间
+	DWORD		Duration;	//持续时间, 0为不限制
 	DWORD		DayTimes;	//每日次数, 0为不限制
 	DWORD		DayBuyTimes;	//每日可购买次数
 	DWORD		BuyNeedMoney;	//购买次数需要仙玉
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GameWorldLogic/FBProcess/GameLogic_FamilyParty.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GameWorldLogic/FBProcess/GameLogic_FamilyParty.py
index d602892..27b0dbf 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GameWorldLogic/FBProcess/GameLogic_FamilyParty.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GameWorldLogic/FBProcess/GameLogic_FamilyParty.py
@@ -131,7 +131,8 @@
     gameWorld = GameWorld.GetGameWorld()
     partyActionState = gameWorld.GetGameWorldDictByKey(ShareDefine.Def_Notify_WorldKey_DailyActionState % ShareDefine.DailyActionID_FamilyParty)
     if partyActionState:
-        __DoEnterJoinFamilyParty(curPlayer)
+        remainSeconds = PlayerActivity.GetDailyActionRemainSeconds(ShareDefine.DailyActionID_FamilyParty)
+        __DoEnterJoinFamilyParty(curPlayer, remainSeconds)
         
     lineID = GameWorld.GetGameWorld().GetLineID()
     if lineID not in g_familyMapPlayerIDDict:
@@ -148,13 +149,16 @@
         
     return
 
-def __DoEnterJoinFamilyParty(curPlayer):
+def __DoEnterJoinFamilyParty(curPlayer, remainSeconds):
     ## 玩家正式开始参与仙盟宴会,因为多个仙盟活动可能共用该地图,玩家可能活动开始时已经在该地图
+    GameWorld.DebugLog("玩家参加仙盟宴会!remainSeconds=%s" % remainSeconds, curPlayer.GetPlayerID())
+    if remainSeconds:
+        curPlayer.Sync_TimeTick(IPY_GameWorld.tttTowerTake, 0, remainSeconds * 1000, True)
+        
     if curPlayer.NomalDictGetProperty(ChConfig.Def_Player_Dict_FamilyPartyJoinSign):
         return
     PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_Player_Dict_FamilyPartyJoinSign, 1)
     
-    GameWorld.DebugLog("玩家参加仙盟宴会!", curPlayer.GetPlayerID())
     #FBCommon.AddEnterFBCount(curPlayer, ChConfig.Def_FBMapID_FamilyParty)
     PlayerActivity.AddDailyActionFinishCnt(curPlayer, ShareDefine.DailyActionID_FamilyParty)
     PlayerFamily.AddFamilyActivity(curPlayer, ShareDefine.FamilyActive_Party)
@@ -234,12 +238,13 @@
     
     GameWorld.DebugLog('仙盟宴会活动状态变更 state=%s' % state)
     if state == 1:
+        remainSeconds = PlayerActivity.GetDailyActionRemainSeconds(ShareDefine.DailyActionID_FamilyParty)
         playerManager = GameWorld.GetPlayerManager()
         for i in xrange(playerManager.GetPlayerCount()):
             curPlayer = playerManager.GetPlayerByIndex(i)
             if not curPlayer or curPlayer.IsEmpty():
                 continue
-            __DoEnterJoinFamilyParty(curPlayer)
+            __DoEnterJoinFamilyParty(curPlayer, remainSeconds)
     else:
         PyGameData.g_familyPartyInfo = []
         
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/IpyGameDataPY.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/IpyGameDataPY.py
index e2eec17..57ec83f 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/IpyGameDataPY.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/IpyGameDataPY.py
@@ -533,6 +533,8 @@
 
                 "DailyAction":(
                         ("DWORD", "DailyID", 1),
+                        ("dict", "OpenTimeDict", 0),
+                        ("DWORD", "Duration", 0),
                         ("DWORD", "DayTimes", 0),
                         ("DWORD", "DayBuyTimes", 0),
                         ("DWORD", "BuyNeedMoney", 0),
@@ -2564,6 +2566,8 @@
     
     def __init__(self):
         self.DailyID = 0
+        self.OpenTimeDict = {}
+        self.Duration = 0
         self.DayTimes = 0
         self.DayBuyTimes = 0
         self.BuyNeedMoney = 0
@@ -2575,6 +2579,8 @@
         return
         
     def GetDailyID(self): return self.DailyID # 活动ID
+    def GetOpenTimeDict(self): return self.OpenTimeDict # 开启时间
+    def GetDuration(self): return self.Duration # 持续时间, 0为不限制
     def GetDayTimes(self): return self.DayTimes # 每日次数, 0为不限制
     def GetDayBuyTimes(self): return self.DayBuyTimes # 每日可购买次数
     def GetBuyNeedMoney(self): return self.BuyNeedMoney # 购买次数需要仙玉
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerActivity.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerActivity.py
index abd8c8b..6c610a3 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerActivity.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerActivity.py
@@ -30,6 +30,7 @@
 import GameFuncComm
 import EventShell
 import PlayerPet
+import datetime
 
 #关联类型
 (
@@ -426,6 +427,43 @@
 
 #########################################日常活动###########################################
 
+def GetDailyActionOpenEndTime(dailyID):
+    ## 获取日常活动开启结束时间点
+    ipyData = IpyGameDataPY.GetIpyGameData('DailyAction', dailyID)
+    if not ipyData:
+        return
+    openTimeDict = ipyData.GetOpenTimeDict()
+    duration = ipyData.GetDuration()
+    if not openTimeDict or not duration:
+        return
+    allOpenTimeList = openTimeDict.values()
+    if not allOpenTimeList:
+        return
+    openTimeList = allOpenTimeList[0] # 这边默认为每日的开启时间段一样,直接取第一日
+    if len(openTimeList) == 1:
+        openHour, openMinute = openTimeList[0]
+    else:
+        #openHour, openMinute = 
+        # 每天多个时间段的再说,暂时没用到
+        return
+    
+    curDateTime = GameWorld.GetCurrentTime()
+    openTimeStr = "%d-%d-%d %02d:%02d:00" % (curDateTime.year, curDateTime.month, curDateTime.day, openHour, openMinute)
+    openDateTime = datetime.datetime.strptime(openTimeStr, ChConfig.TYPE_Time_Format)
+    endDateTime = openDateTime + datetime.timedelta(minutes=duration)
+    return openDateTime, endDateTime
+
+def GetDailyActionRemainSeconds(dailyID):
+    ## 获取日常活动当前剩余秒数
+    openEndTimeInfo = GetDailyActionOpenEndTime(dailyID)
+    if not openEndTimeInfo:
+        return 0
+    openDateTime, endDateTime = openEndTimeInfo
+    curDateTime = GameWorld.GetCurrentTime()
+    if curDateTime < openDateTime or curDateTime >= endDateTime:
+        return 0
+    remainDateTime = endDateTime - curDateTime
+    return remainDateTime.seconds
 
 def AddDailyActionFinishCnt(curPlayer, dailyID, addCnt=1):
     ##增加日常活动完成次数

--
Gitblit v1.8.0