From b26e86ed1f7d15a3a6a7ebff2e1b8201b9e8ebf5 Mon Sep 17 00:00:00 2001
From: hxp <ale99527@vip.qq.com>
Date: 星期四, 01 八月 2019 14:06:57 +0800
Subject: [PATCH] 8180 【后端】【主干】优化组队打BOSS(优化掉落表现,组队打掉多份的时候只能看到归属自己的物品)

---
 ServerPython/CoreServerGroup/GameServer/Script/GameWorldLogic/GameWorldActionControl.py |   36 +++++++++++++++++++++++-------------
 1 files changed, 23 insertions(+), 13 deletions(-)

diff --git a/ServerPython/CoreServerGroup/GameServer/Script/GameWorldLogic/GameWorldActionControl.py b/ServerPython/CoreServerGroup/GameServer/Script/GameWorldLogic/GameWorldActionControl.py
index 70206b0..1cff4a0 100644
--- a/ServerPython/CoreServerGroup/GameServer/Script/GameWorldLogic/GameWorldActionControl.py
+++ b/ServerPython/CoreServerGroup/GameServer/Script/GameWorldLogic/GameWorldActionControl.py
@@ -35,6 +35,8 @@
 import PlayerNewFairyCeremony
 import PlayerUniversalGameRec
 import GameWorldAverageLv
+import PlayerFamilyBoss
+import PlayerHorsePetBoss
 import GameWorldProcess
 import ChPyNetSendPack
 import NetPackCommon
@@ -42,7 +44,6 @@
 
 from types import IntType
 import time
-import cPickle
 #---------------------------------------------------------------------
 
 #年月日时间格式
@@ -270,9 +271,9 @@
                     isEnd = (curDateTime == endDayDate)
                     
             # 每天按时段开启的,支持多时段
-            else:
-                if startDayDate <= curDateTime <= endDayDate:
-                    isEnd = (curDateTime == endDayDate)
+            elif startDayDate <= curDateTime <= endDayDate:
+                isEnd = (curDateTime == endDayDate)
+                if not isEnd:
                     for hmIndex, startHMStr in enumerate(startHMStrList):
                         endHMStr = endHMStrList[hmIndex]
                         # 每天开的, 实际开关时间只取今天的日期; 这里有个问题,全服广播的时间不是今天的, 暂不做支持,之后真有这种需求再说
@@ -1094,11 +1095,12 @@
         #    GameWorld.DebugLog("        副本可否进入已经是该值: dataMapID=%s,updCanEnter=%s,canEnterKey=%s" % (dataMapID, updCanEnter, canEnterKey))            
             
         fbFuncStateKey = ShareDefine.Def_Notify_WorldKey_FBFuncState % dataMapID
-        if gameWorld.GetDictByKey(fbFuncStateKey) != updStateValue:
+        beforeState = gameWorld.GetDictByKey(fbFuncStateKey)
+        if beforeState != updStateValue:
             GameWorld.SendMapServerMsgEx(fbFuncStateKey, updStateValue) #通知Mapserver,设置字典
             gameWorld.SetDict(fbFuncStateKey, updStateValue) #更新字典值
             GameWorld.Log("副本状态变更: dataMapID=%s,updStateValue=%s,fbFuncStateKey=%s" % (dataMapID, updStateValue, fbFuncStateKey))
-            __DoLogic_GameServer_ActionState(fbFuncStateKey, updStateValue)
+            __DoLogic_GameServer_ActionState(fbFuncStateKey, updStateValue, beforeState)
         #else:
         #    GameWorld.DebugLog("        副本状态已经是该值: dataMapID=%s,updStateValue=%s,fbFuncStateKey=%s" % (dataMapID, updStateValue, fbFuncStateKey))
             
@@ -1121,20 +1123,20 @@
         recMapID = universalRecData.GetValue1()
         if recMapID == mapID:
             findRecData = universalRecData
-        fbOpenRecord[recMapID] = cPickle.loads(universalRecData.GetStrValue1())
+        fbOpenRecord[recMapID] = eval(universalRecData.GetStrValue1())
         
     if not findRecData:
         findRecData = recTypeListData.AddRec()
         findRecData.SetValue1(mapID)
-        findRecData.SetStrValue1(cPickle.dumps([curDayStr], 2))
+        findRecData.SetStrValue1(str([curDayStr]))
         fbOpenRecord[mapID] = [curDayStr]
     else:
-        recordList = cPickle.loads(findRecData.GetStrValue1())
+        recordList = eval(findRecData.GetStrValue1())
         if curDayStr not in recordList:
             recordList.append(curDayStr)
             if len(recordList) > 3: #只存最近3次
                 del recordList[0]
-            findRecData.SetStrValue1(cPickle.dumps(recordList, 2))
+            findRecData.SetStrValue1(str(recordList))
             fbOpenRecord[mapID] = recordList
         else:
             return
@@ -1150,7 +1152,7 @@
     for index in range(recTypeListData.Count()):
         universalRecData = recTypeListData.At(index)
         recMapID = universalRecData.GetValue1()
-        recordList = cPickle.loads(universalRecData.GetStrValue1())
+        recordList = eval(universalRecData.GetStrValue1())
         fbOpenRecord[recMapID] = recordList
     return fbOpenRecord
 
@@ -1244,12 +1246,13 @@
 ##处理GameServer活动状态
 # @param dictName 字典名
 # @param isOpen 是否开启
+# @param beforeState 状态变更前的值,部分判断处理
 # @return 返回值无意义
 # @remarks 
-def __DoLogic_GameServer_ActionState(dictName, isOpen):
+def __DoLogic_GameServer_ActionState(dictName, isOpen, beforeState=0):
     #仙盟宴会 
     if dictName == ShareDefine.Def_Notify_WorldKey_FBFuncState % ChConfig.Def_FBMapID_FamilyParty:
-        PlayerFamilyParty.FamilyPartyStateChange(isOpen)
+        PlayerFamilyParty.FamilyPartyStateChange(isOpen, beforeState)
     #仙盟联赛
     elif dictName == ShareDefine.Def_Notify_WorldKey_FBFuncState % ChConfig.Def_FBMapID_FamilyWar:
         GameWorldFamilyWar.OnFamilyWarStateChange(isOpen)
@@ -1265,6 +1268,13 @@
     #跨服PK
     elif dictName == ShareDefine.Def_Notify_WorldKey_DailyActionState % ShareDefine.DailyActionID_CrossReamPK:
         CrossRealmPK.OnCrossRealmPKDailyActionStateChange(isOpen)
+    #仙盟BOSS
+    elif dictName in [ShareDefine.Def_Notify_WorldKey_DailyActionState % ShareDefine.DailyActionID_FamilyBoss1]:
+        PlayerFamilyBoss.OnAllFamilyBossStateChange(isOpen)
+    #骑宠BOSS
+    elif dictName in [ShareDefine.Def_Notify_WorldKey_DailyActionState % ShareDefine.DailyActionID_HorsePetBoss]:
+        PlayerHorsePetBoss.OnHorsePetBossStateChange(isOpen)
+    
     return
 
 #-------------------------------------------------------------------------------

--
Gitblit v1.8.0