From a49287c1591671d95952114f04db742c1507de13 Mon Sep 17 00:00:00 2001
From: hxp <ale99527@vip.qq.com>
Date: 星期二, 20 八月 2024 15:01:53 +0800
Subject: [PATCH] 10223 10238 10241 【越南】【砍树】【主干】【港台】仙匣秘境、骑宠养成、古宝养成增加可配置是否关联跨服活动;
---
ServerPython/CoreServerGroup/GameServer/Script/GameWorldLogic/GameWorldActionControl.py | 90 +++++++++++++++++++++++++++++++++++++++++----
1 files changed, 82 insertions(+), 8 deletions(-)
diff --git a/ServerPython/CoreServerGroup/GameServer/Script/GameWorldLogic/GameWorldActionControl.py b/ServerPython/CoreServerGroup/GameServer/Script/GameWorldLogic/GameWorldActionControl.py
index 1aee5ee..6ffbdec 100644
--- a/ServerPython/CoreServerGroup/GameServer/Script/GameWorldLogic/GameWorldActionControl.py
+++ b/ServerPython/CoreServerGroup/GameServer/Script/GameWorldLogic/GameWorldActionControl.py
@@ -33,8 +33,12 @@
import PlayerFamilyRedPacket
import PlayerFairyCeremony
import PlayerNewFairyCeremony
+import PlayerActFamilyCTGAssist
import PlayerActGarbageSorting
import PlayerActBossTrial
+import PlayerActXianXiaMJ
+import PlayerActGubao
+import PlayerActHorsePetTrain
import PlayerUniversalGameRec
import GameWorldAverageLv
import PlayerFamilyBoss
@@ -109,10 +113,11 @@
def SendMapServerOperationActionState():
# 地图启动成功时通知本日运行活动相关状态
+ CrossActionControl.SendMapServerCrossActionState()
+
if GameWorld.IsCrossServer():
# 跨服不处理运营活动
return
- CrossActionControl.SendMapServerCrossActionState()
isReload, OperationActionInfo = __GetOperationActionInfo()
mapServerInfoDict = OperationActionInfo[OperationAction_MapServerInfo]
@@ -374,6 +379,13 @@
GameWorld.Log(" 非法配置,未知活动类型,不处理! cfgID=%s,actNum=%s" % (cfgID, actNum))
continue
+ if hasattr(ipyData, "GetJoinStartTime") and hasattr(ipyData, "GetJoinEndTime"):
+ joinStartTimeStr = ipyData.GetJoinStartTime()
+ joinEndTimeStr = ipyData.GetJoinEndTime()
+ else:
+ joinStartTimeStr = ""
+ joinEndTimeStr = ""
+
if hasattr(ipyData, "GetStartTimeList") and hasattr(ipyData, "GetEndTimeList"):
startHMStrList = ipyData.GetStartTimeList()
endHMStrList = ipyData.GetEndTimeList()
@@ -390,6 +402,7 @@
% (actName, cfgID, startHMStrList, endHMStrList))
continue
+ 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 resetType == 1:
startDayDate = datetime.datetime.strptime("%s 05:00:00" % (startDateStr), ChConfig.TYPE_Time_Format)
@@ -497,6 +510,17 @@
GameWorld.Log(" startList=%s" % (startList))
GameWorld.Log(" end List=%s" % (endList))
+ joinStartTimeList, joinEndTimeList = [], [] # 可指定活动可参与的时间点,不影响活动状态,只影响活动某些功能的参与时机,如上榜类
+ if joinStartTimeStr:
+ if isDayRest:
+ joinStartTimeList.append(datetime.datetime.strptime("%d-%d-%d %s:00" % (curDateTime.year, curDateTime.month, curDateTime.day, joinStartTimeStr), ChConfig.TYPE_Time_Format))
+ joinEndTimeList.append(datetime.datetime.strptime("%d-%d-%d %s:00" % (curDateTime.year, curDateTime.month, curDateTime.day, joinEndTimeStr), ChConfig.TYPE_Time_Format))
+ else:
+ joinStartTimeList.append(datetime.datetime.strptime("%s %s:00" % (startDateStr, joinStartTimeStr), ChConfig.TYPE_Time_Format))
+ joinEndTimeList.append(datetime.datetime.strptime("%s %s:00" % (endDateStr, joinEndTimeStr), ChConfig.TYPE_Time_Format))
+ GameWorld.Log(" joinStartTimeList=%s" % (joinStartTimeList))
+ GameWorld.Log(" joinEndTime List=%s" % (joinEndTimeList))
+
for dtIndex, startDateTime in enumerate(startList):
endDateTime = endList[dtIndex]
# 广播 - 相对实际开始时间
@@ -542,9 +566,9 @@
if actName in ShareDefine.MultiActNumOperationActNameList:
if actName not in operationTodayActionDict:
operationTodayActionDict[actName] = {} # 今日有需要处理的才初始化
- operationTodayActionDict[actName][actNum] = [ipyData, startList, endList, notifyDict]
+ operationTodayActionDict[actName][actNum] = [ipyData, startList, endList, notifyDict, joinStartTimeList, joinEndTimeList]
else:
- operationTodayActionDict[actName] = [ipyData, startList, endList, notifyDict]
+ operationTodayActionDict[actName] = [ipyData, startList, endList, notifyDict, joinStartTimeList, joinEndTimeList]
if isActTime:
activityInfoDict = {ShareDefine.ActKey_CfgID:cfgID, ShareDefine.ActKey_ActNum:actNum}
@@ -558,7 +582,6 @@
dayIndex = (curDateTime - startDayDate).days
actIDDateTime = startDayDate
- isDayRest = 0 if not hasattr(ipyData, "GetIsDayReset") else ipyData.GetIsDayReset()
# 按时段开的默认每天重置
if isDayRest or (startHMStrList and endHMStrList):
actIDDateTime += datetime.timedelta(days=dayIndex)
@@ -722,6 +745,7 @@
for sendMapServerMsgDict in curActMapInfoDictList:
state = 0 # 默认关闭
+ stateJoin = ShareDefine.ActStateJoin_None # 可参与状态,0-参与前;1-可参与;2-参与结束
ipyData = None
actNum = sendMapServerMsgDict.get(ShareDefine.ActKey_ActNum, 0)
@@ -734,12 +758,12 @@
else:
todayActInfoList = operationTodayActionDict[actName]
- if isinstance(todayActInfoList, list) and len(todayActInfoList) == 4:
+ if isinstance(todayActInfoList, list) and len(todayActInfoList) == 6:
#startList = [] # [startDateTime, ...]
#endList = [] # [endDateTime, ...]
#notifyDict = {} # {notifyDateTime:[notifyKey, [参数]], ...}
#ipyData 可能为 None
- ipyData, startList, endList, notifyDict = todayActInfoList
+ ipyData, startList, endList, notifyDict, joinStartTimeList, joinEndTimeList = todayActInfoList
# 状态
for dIndex, startDateTime in enumerate(startList):
@@ -747,6 +771,17 @@
if startDateTime <= curDateTime < endDateTime:
state = dIndex + 1 # 代表第几个时间段
break
+
+ if joinStartTimeList:
+ for jIndex, joinStartDateTime in enumerate(joinStartTimeList):
+ endJoinDateTime = joinEndTimeList[jIndex]
+ if joinStartDateTime <= curDateTime < endJoinDateTime:
+ stateJoin = ShareDefine.ActStateJoin_Start
+ break
+ elif curDateTime >= endJoinDateTime:
+ stateJoin = ShareDefine.ActStateJoin_End
+ else:
+ stateJoin = ShareDefine.ActStateJoin_Start if state else ShareDefine.ActStateJoin_None
# 全服广播提示信息
if curDateTime in notifyDict:
@@ -757,12 +792,19 @@
if actName in ShareDefine.MultiActNumOperationActNameList:
dictName += "_%s" % actNum
preState = gameWorld.GetDictByKey(dictName)
- if not isReload and preState == state:
+
+ dictNameJoin = ChConfig.Def_WorldKey_OperationActionStateJoin % actName
+ if actName in ShareDefine.MultiActNumOperationActNameList:
+ dictNameJoin += "_%s" % actNum
+ preStateJoin = gameWorld.GetDictByKey(dictNameJoin)
+
+ if not isReload and preState == state and preStateJoin == stateJoin:
#已经是这个状态了
continue
- GameWorld.Log("运营活动变更: actName=%s,actNum=%s,preState=%s,state=%s,dictName=%s" % (actName, actNum, preState, state, dictName))
+ GameWorld.Log("运营活动变更: actName=%s,actNum=%s,preState=%s,state=%s,preStateJoin=%s,stateJoin=%s" % (actName, actNum, preState, state, preStateJoin, stateJoin))
#更新字典值
gameWorld.SetDict(dictName, state)
+ gameWorld.SetDict(dictNameJoin, stateJoin)
dbOperationActIDKey = PlayerDBGSEvent.Def_OperationActID % actName
dbOperationActWorldLVKey = PlayerDBGSEvent.Def_OActWorldLV % actName
@@ -781,6 +823,12 @@
if dbActID:
if actName == ShareDefine.OperationActionName_BossTrial:
PlayerActBossTrial.OnActEnd(actNum, ipyData, dayIndex)
+ elif actName == ShareDefine.OperationActionName_XianXiaMJ:
+ PlayerActXianXiaMJ.OnActEnd(actNum, ipyData, dayIndex)
+ elif actName == ShareDefine.OperationActionName_Gubao:
+ PlayerActGubao.OnActEnd(actNum, ipyData, dayIndex)
+ elif actName == ShareDefine.OperationActionName_HorsePetTrain:
+ PlayerActHorsePetTrain.OnActEnd(actNum, ipyData, dayIndex)
if curActID:
if actName in ShareDefine.NeedWorldLVOperationActNameList:
@@ -811,6 +859,14 @@
PlayerActGarbageSorting.OnActStart(actNum)
elif actName == ShareDefine.OperationActionName_BossTrial:
PlayerActBossTrial.OnActStart(actNum)
+ elif actName == ShareDefine.OperationActionName_XianXiaMJ:
+ PlayerActXianXiaMJ.OnActStart(actNum)
+ elif actName == ShareDefine.OperationActionName_Gubao:
+ PlayerActGubao.OnActStart(actNum)
+ elif actName == ShareDefine.OperationActionName_HorsePetTrain:
+ PlayerActHorsePetTrain.OnActStart(actNum)
+ elif actName == ShareDefine.OperationActionName_FamilyCTGAssist:
+ PlayerActFamilyCTGAssist.OnActStart(actNum)
else:
if actName == ShareDefine.OperationActionName_GarbageSorting:
PlayerActGarbageSorting.OnActEnd(actNum)
@@ -818,6 +874,23 @@
else:
GameWorld.Log(" dbActID不变: dbActID=%s,curActID=%s" % (dbActID, curActID))
+ # 仅活动有配置参与时间段的会触发
+ if curActID and dbActID == curActID and preStateJoin != stateJoin:
+ GameWorld.Log(" 参与状态变更: preStateJoin=%s,stateJoin=%s" % (preStateJoin, stateJoin))
+ # 参与开始
+ if stateJoin == ShareDefine.ActStateJoin_Start:
+ pass
+ # 参与结束
+ elif stateJoin == ShareDefine.ActStateJoin_End:
+ if actName == ShareDefine.OperationActionName_BossTrial:
+ PlayerActBossTrial.OnActJoinEnd(actNum, ipyData, dayIndex)
+ elif actName == ShareDefine.OperationActionName_XianXiaMJ:
+ PlayerActXianXiaMJ.OnActJoinEnd(actNum, ipyData, dayIndex)
+ elif actName == ShareDefine.OperationActionName_Gubao:
+ PlayerActGubao.OnActJoinEnd(actNum, ipyData, dayIndex)
+ elif actName == ShareDefine.OperationActionName_HorsePetTrain:
+ PlayerActHorsePetTrain.OnActJoinEnd(actNum, ipyData, dayIndex)
+
if ipyData and actName in ShareDefine.NeedWorldLVOperationActNameList:
actWorldLV = PlayerDBGSEvent.GetDBGSTrig_ByKey(dbOperationActWorldLVKey)
sendMapServerMsgDict[ShareDefine.ActKey_WorldLV] = actWorldLV
@@ -859,6 +932,7 @@
#GameWorld.SendMapServerMsgEx(dictName, state) # 运营活动不单独通知活动状态,需与活动信息整合后一起通知
sendMapServerMsgDict[ShareDefine.ActKey_State] = state
+ sendMapServerMsgDict[ShareDefine.ActKey_StateJoin] = stateJoin
GameWorld.SendMapServerMsgEx(ShareDefine.Def_Notify_WorldKey_OperationActionInfo % actName, sendMapServerMsgDict)
GameWorld.Log(" sendMapServerMsgDict: %s" % (sendMapServerMsgDict))
--
Gitblit v1.8.0