From d42896d1fe05ba65cf3bf537075c3d00467dfbb8 Mon Sep 17 00:00:00 2001
From: hch <305670599@qq.com>
Date: 星期四, 11 七月 2019 11:38:48 +0800
Subject: [PATCH] 860312  混服或合服情况下需要指定修改的平台和服务器,Serverid不填写代表不改变只替换spid

---
 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GameWorldLogic/FBProcess/FBCommon.py |   90 +++++++++++++++++++++------------------------
 1 files changed, 42 insertions(+), 48 deletions(-)

diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GameWorldLogic/FBProcess/FBCommon.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GameWorldLogic/FBProcess/FBCommon.py
index 0afee8e..62e70f9 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GameWorldLogic/FBProcess/FBCommon.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GameWorldLogic/FBProcess/FBCommon.py
@@ -90,6 +90,7 @@
 Over_grade = 'grade' #评级(5-S,4-A,3-B,2-C,1-D)
 Over_itemInfo = 'itemInfo' #物品列表 [{"ItemID":101, "ItemCount":10, "IsBind":1, "IsSuite":1, "UserData":"自定义属性字符串"}]
 Over_succItemInfo = 'succItemInfo' #物品列表
+Over_firstPassItem = 'firstPassItem' #物品列表
 Over_score = 'score' #已获得积分
 Over_extrScore = 'extrScore' #已获得额外积分
 Over_enterLV = 'enterLV' #进入时等级
@@ -446,18 +447,18 @@
 #  @return
 def SetFBPropertyMark(propertyMark, setPlayer=None):
     GameWorld.GetGameFB().SetGameFBDict(ChConfig.Map_FBDict_PropertyMark, propertyMark + 1) # 存储时+1才能判断是否存储过
-    if setPlayer != None:
-        PlayerControl.SetFBFuncLineID(setPlayer, propertyMark)
-        GameWorld.DebugLog("SetFBPropertyMark 设置玩家副本功能线路ID: %s" % propertyMark, setPlayer.GetPlayerID())
-        return
-    
-    playerManager = GameWorld.GetMapCopyPlayerManager()
-    for index in xrange(playerManager.GetPlayerCount()):
-        curPlayer = playerManager.GetPlayerByIndex(index)
-        if not curPlayer.GetPlayerID():
-            continue
-        PlayerControl.SetFBFuncLineID(curPlayer, propertyMark)
-        GameWorld.DebugLog("SetFBPropertyMark 广播玩家副本功能线路ID: %s" % propertyMark, curPlayer.GetPlayerID())
+#    if setPlayer != None:
+#        PlayerControl.SetFBFuncLineID(setPlayer, propertyMark)
+#        GameWorld.DebugLog("SetFBPropertyMark 设置玩家副本功能线路ID: %s" % propertyMark, setPlayer.GetPlayerID())
+#        return
+#    
+#    playerManager = GameWorld.GetMapCopyPlayerManager()
+#    for index in xrange(playerManager.GetPlayerCount()):
+#        curPlayer = playerManager.GetPlayerByIndex(index)
+#        if not curPlayer.GetPlayerID():
+#            continue
+#        PlayerControl.SetFBFuncLineID(curPlayer, propertyMark)
+#        GameWorld.DebugLog("SetFBPropertyMark 广播玩家副本功能线路ID: %s" % propertyMark, curPlayer.GetPlayerID())
     return
 
 ## 是否已经扣除入场券/进入次数等
@@ -473,36 +474,13 @@
     GameWorld.GetGameFB().SetPlayerGameFBDict(curPlayer.GetID(), ChConfig.FBPlayerDict_IsDelTicket, delSign)
     return
 
-def SetCustomSceneStart(curPlayer, mapID, lineID):
-    ''' 设置前端自定义场景副本开始时间
-            某些自定义场景进入可能需要处理某些逻辑,比如扣门票、设置某些状态、完成成就等,这些逻辑在单次进入只能触发一次
-            需要记录一个开始状态,只在设置成功的时候进行处理这些逻辑,防止断线重连或重登重新进入自定义场景时,重复执行逻辑
-            该状态设置了一个有效期,暂时设定为15分钟,未完成场景有效期内重复进入不会重复触发
-            做超时是为了防止玩家没有正常结束场景导致未来的某个时间再次进入场景时无法正常触发进入需要额外处理的逻辑
-            需根据副本结束时机配置函数 SetCustomSceneOver 设置结束状态
-    @return: 设置成功返回True
-    '''
-    if GetCustomSceneState(curPlayer, mapID, lineID) == ChConfig.CustomSceneState_Fight:
-        return
-    PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_Player_Dict_CustomSceneStartTime % (mapID, lineID), int(time.time()))
-    return True
-
-def GetCustomSceneState(curPlayer, mapID, lineID):
-    '''获取前端自定义场景状态
-    @return: 0-无,1-进行中,2-已结束
-    '''
-    startTime = curPlayer.NomalDictGetProperty(ChConfig.Def_Player_Dict_CustomSceneStartTime % (mapID, lineID))
-    if not startTime:
-        return ChConfig.CustomSceneState_None
-    if startTime == ChConfig.CustomSceneState_Over:
-        return ChConfig.CustomSceneState_Over
-    # 保留15分钟
-    curTime = int(time.time())
-    return ChConfig.CustomSceneState_Fight if curTime - startTime < 15 * 60 else ChConfig.CustomSceneState_None
-
-def SetCustomSceneOver(curPlayer, mapID, lineID):
-    ## 设置前端自定义场景副本结束
-    PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_Player_Dict_CustomSceneStartTime % (mapID, lineID), ChConfig.CustomSceneState_Over)
+## 自定义场景阶段
+def GetCustomMapStep(curPlayer, mapID, lineID):
+    return curPlayer.NomalDictGetProperty(ChConfig.Def_Player_Dict_CustomMapStep % (mapID, lineID))
+def SetCustomMapStep(curPlayer, mapID, lineID, step):
+    PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_Player_Dict_CustomMapStep % (mapID, lineID), step)
+    if step == ChConfig.CustomMapStep_Over:
+        PlayerControl.SetCustomMap(curPlayer, 0, 0)
     return
 
 def GetCurSingleFBPlayer():
@@ -1597,24 +1575,39 @@
     maxCnt = GetEnterFBMaxCnt(curPlayer, mapID)
     maxCanAdd = max(0, maxDayTimes - (maxCnt-enterCnt))
     #GameWorld.DebugLog('封魔坛最大可恢复次数 %s'%maxCanAdd)
-    if not maxCanAdd:
-        return
+
     curTime = int(time.time())
-    recoverInterval = IpyGameDataPY.GetFuncCfg('FBCntRegainInterval')
     lastRegainTime = curPlayer.NomalDictGetProperty(ChConfig.Def_Player_Dict_FbCntRegainStartTime % mapID)
+    if not lastRegainTime:
+        PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_Player_Dict_FbCntRegainStartTime % mapID, curTime)
+        return
+    recoverInterval = IpyGameDataPY.GetFuncCfg('FBCntRegainInterval')
     needTime = curPlayer.NomalDictGetProperty(ChConfig.Def_Player_Dict_FbCntRegainTotalTime % mapID)
     if not needTime:
         needTime = recoverInterval
     passTime = curTime - lastRegainTime
     if passTime < needTime:
         return
-    recoverCnt = min(maxCanAdd, 1 + (passTime-needTime) / recoverInterval) # 恢复次数
+    recoverCnt = 1 + (passTime-needTime) / recoverInterval # 恢复次数
+    if recoverCnt > maxCanAdd:
+        #记录超出的次数,用于资源找回
+        beyondTimes = curPlayer.NomalDictGetProperty(ChConfig.Def_Player_Dict_FbCntRegainOverTime % mapID)
+        updBeyondTimes = recoverCnt - maxCanAdd + beyondTimes
+        PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_Player_Dict_FbCntRegainOverTime % mapID, updBeyondTimes)
+        if not maxCanAdd:
+            PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_Player_Dict_FbCntRegainStartTime % mapID, curTime)
+        GameWorld.DebugLog('    封魔坛恢复次数 记录超出的次数addOverCnt=%s, updBeyondTimes=%s'%(recoverCnt-maxCanAdd, updBeyondTimes))
+    
+    if not maxCanAdd:
+        return
+    recoverCnt = min(maxCanAdd, recoverCnt)
+    
     enterCntKey = ChConfig.Def_Player_Dict_EnterFbCntDay % mapID
     newEnterCnt = max(0, enterCnt-recoverCnt)
     PlayerControl.NomalDictSetProperty(curPlayer, enterCntKey, newEnterCnt)
     PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_Player_Dict_FbCntRegainTotalTime % mapID, 0)
     if recoverCnt == maxCanAdd:
-        PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_Player_Dict_FbCntRegainStartTime % mapID, 0)
+        PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_Player_Dict_FbCntRegainStartTime % mapID, curTime)
     else:
         startTime = curTime- (passTime-needTime)%recoverInterval
         PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_Player_Dict_FbCntRegainStartTime % mapID, startTime)
@@ -1752,6 +1745,7 @@
         if mapID in [ChConfig.Def_FBMapID_SealDemon]:
             newEnterCnt = max(0, dayTimes - (maxCnt - enterCnt))
             PlayerControl.NomalDictSetProperty(curPlayer, enterCntKey, newEnterCnt)
+            PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_Player_Dict_FbCntRegainOverTime % mapID, 0)
             GameWorld.DebugLog("        特殊副本已进入次数更新: newEnterCnt=%s" % newEnterCnt)
         elif mapID == ChConfig.Def_FBMapID_ZhuXianBoss:
             if GameFuncComm.GetFuncCanUse(curPlayer, ShareDefine.GameFuncID_ZhuXianBoss):
@@ -2059,7 +2053,7 @@
 def AddFbEncourageBuff(curPlayer, key, tick, ownerID=0):
     curPlayerID = curPlayer.GetID()
     GameWorld.Log("AddFbEncourageBuff() curPlayerID=%s" % curPlayerID)
-  
+    ownerID = ownerID or curPlayer.GetID()
     gameFB = GameWorld.GetGameFB()
     encourageLV = gameFB.GetPlayerGameFBDictByKey(ownerID, key)
     if not encourageLV:

--
Gitblit v1.8.0