From 8978dd1c93b322806bac51090d40e65cee33d90d Mon Sep 17 00:00:00 2001
From: hxp <ale99527@vip.qq.com>
Date: 星期三, 09 一月 2019 15:26:09 +0800
Subject: [PATCH] 5722 【后端】【1.5】跨服BOSS开发(支持刷跨服boss)

---
 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerSuccess.py |  200 +++++++++++++++++++++++++++++++++++++++++++------
 1 files changed, 174 insertions(+), 26 deletions(-)

diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerSuccess.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerSuccess.py
index 5f9aa08..bfbbed8 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerSuccess.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerSuccess.py
@@ -29,6 +29,7 @@
 import ItemControler
 import PlayerMagicWeapon
 import PlayerFamilyRedPacket
+import PlayerGatherSoul
 import IpyGameDataPY
 import EventShell
 import PyGameData
@@ -37,6 +38,14 @@
 import datetime
 import time
 import math
+import ChEquip
+import PlayerRune
+import Operate_EquipStone
+import Operate_EquipWash
+import Operate_EquipSuitCompose
+import PlayerDogz
+import QuestCommon
+import DataRecordPack
 
 
 ## 获取成就字典信息值
@@ -216,7 +225,7 @@
   
     
     # 检查老玩家
-    #__CheckOldPlayerSuccess(curPlayer)
+    __CheckOldPlayerSuccess(curPlayer)
     
     # 检查达成与否(有些可能改过上限,然后玩家可以完成,上线统一做一次检查)
     for succType in ShareDefine.SuccessTypeList:
@@ -230,36 +239,175 @@
 #  @param None
 #  @return
 def __CheckOldPlayerSuccess(curPlayer):
-    ''' 成就版本更新老玩家检查
-        正式上线后,成就的修改或者增加,一般是增加新成就,则需要对老玩家成就版本进行校正,检查成就完成情况
-        成就版本号递增
+    ''' 成就版本更新老玩家检查  每次启动服务后 玩家第一次上线检查成就完成情况
     '''
-    Versions = 2 #版本号,往上增加
-    
+    #Versions = 2 #版本号,往上增加
+    initGameWorldTime = GameWorld.GetGameWorld().GetGameWorldDictByKey(ShareDefine.Def_Notify_WorldKey_InitGameWorldTime)
     # 上线需要检查老玩家成就完成情况类型{成就类型:维护版本号, ...}
-    NeedCheckSuccTypeDict = {
-                             }
+    NeedCheckSuccTypeList = [
+                            ShareDefine.SuccType_GetMagicWeapon,
+                            ShareDefine.SuccType_PassRuneTower,
+                            ShareDefine.SuccType_GodWeapon,
+                            ShareDefine.SuccType_HorseAllLV,
+                            #ShareDefine.SuccType_EquipPlusLV,
+                            ShareDefine.SuccType_EquipColorItem,
+                            ShareDefine.SuccType_EquipArmor,
+                            ShareDefine.SuccType_EquipWeapon,
+                            ShareDefine.SuccType_InlayRune,
+                            ShareDefine.SuccType_RuneLvUp,
+                            ShareDefine.SuccType_RealmlvUp,
+                            ShareDefine.SuccType_PetClassLV,
+                            ShareDefine.SuccType_InlayStone1,
+                            ShareDefine.SuccType_InlayStone2,
+                            ShareDefine.SuccType_XJMJGetExp,
+                            ShareDefine.SuccType_EquipWashLV1,
+                            ShareDefine.SuccType_EquipWashLV2,
+                            ShareDefine.SuccType_EquipWashLV3,
+                            ShareDefine.SuccType_EquipWing,
+                            ShareDefine.SuccType_MWSkillUp,
+                            ShareDefine.SuccType_EquipSuit,
+                            ShareDefine.SuccType_FamilyTechLV,
+                            ShareDefine.SuccType_AlchemyLV,
+                            ShareDefine.SuccType_VIPLV,
+                            ShareDefine.SuccType_StoneTotalLV,
+                            ShareDefine.SuccType_XBXZ,
+                            ShareDefine.SuccType_DogzBattle,
+                            ShareDefine.SuccType_DogzEquipPlus,
+                            ShareDefine.SuccType_MainTaskNode,
+                            ShareDefine.SuccType_InlayGatherSoul,
+                            ShareDefine.SuccType_GatherSoulLvUp,
+                            ShareDefine.SuccType_UseStoveBylv,
+                             ]
     
     curCheckVersion = GetPDictValue(curPlayer, ChConfig.Def_PDict_Success_CheckVersion)
+    if curCheckVersion == initGameWorldTime:
+        GameWorld.DebugLog('    本次开启服务器处理过成就检查,不再处理 ', curPlayer.GetID())
+        return
     GameWorld.DebugLog("更新老玩家上线检查成就curCheckVersion=%s" % (curCheckVersion))
-    for succType, version in NeedCheckSuccTypeDict.items():
-        
-        if curCheckVersion >= version:
-            continue
-        
-#        condition = 0
-#        if succType == ShareDefine.SuccType_MainTaskNode: #主线任务结点
-#            succInfoDict = GetSuccDataMng().GetSuccDataByType(ShareDefine.SuccType_MainTaskNode)
-#            condition = QuestCommon.GetCurMainTaskState(curPlayer, succInfoDict)
-#            addCnt = 1 if condition >= 0 else 0
-#            
-#        else:
-#            continue
-#        
-#        DoAddSuccessProgress(curPlayer, succType, addCnt, condition)
-        
-    SetPDictValue(curPlayer, ChConfig.Def_PDict_Success_CheckVersion, Versions)
-    GameWorld.DebugLog("更新老玩家上线检查成就updCheckVersions=%s" % (Versions))
+    ipyDataMgr = IpyGameDataPY.IPY_Data()
+    for succType in NeedCheckSuccTypeList:
+        if succType == ShareDefine.SuccType_GetMagicWeapon:
+            
+            for i in xrange(ipyDataMgr.GetTreasureCount()):
+                treasureIpyData = ipyDataMgr.GetTreasureByIndex(i)
+                magicWeaponID = treasureIpyData.GetID()
+                isActive = PlayerMagicWeapon.GetIsActiveMagicWeapon(curPlayer, magicWeaponID)
+                if not isActive:
+                    continue
+                curMWLV = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_MagicWeaponLV % magicWeaponID)
+                for lv in xrange(curMWLV+1):
+                    DoAddSuccessProgress(curPlayer, succType, 1, [magicWeaponID, lv])
+        elif succType == ShareDefine.SuccType_PassRuneTower:
+            passlv = curPlayer.NomalDictGetProperty(ChConfig.Def_Player_Dict_TrialTower_PassLV)
+            DoAddSuccessProgress(curPlayer, ShareDefine.SuccType_PassRuneTower, 1, [passlv])
+        elif succType == ShareDefine.SuccType_GodWeapon:
+            maxType = ipyDataMgr.GetGodWeaponByIndex(ipyDataMgr.GetGodWeaponCount()-1).GetType()
+            for i in xrange(1, maxType + 1):
+                weaponLV = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_GodWeaponLV % i)
+                UptateSuccessProgress(curPlayer, succType, weaponLV, [i])
+        elif succType == ShareDefine.SuccType_HorseAllLV:
+            ResetSuccessByType(curPlayer, succType)
+            for i in xrange(ipyDataMgr.GetHorseCount()):
+                ipyData = ipyDataMgr.GetHorseByIndex(i)
+                index = ipyData.GetHorseID()
+                lv = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_Horser_LV % index, 0, ChConfig.Def_PDictType_Horse)
+                if not lv:
+                    continue
+                for rlv in xrange(1, lv+1):
+                    DoAddSuccessProgress(curPlayer, succType, 1, [index, rlv])
+        elif succType == ShareDefine.SuccType_EquipPlusLV:
+            ResetSuccessByType(curPlayer, succType)
+            for pType, indexList in ChConfig.Pack_EquipPart_CanPlusStar.items():
+                for i in indexList:
+                    equipPartStarLV = ChEquip.GetEquipPartStarLV(curPlayer, pType, i)
+                    for pluslv in xrange(1, equipPartStarLV+1):
+                        DoAddSuccessProgress(curPlayer, succType, 1, [pluslv])
+                    
+        elif succType in [ShareDefine.SuccType_EquipColorItem, ShareDefine.SuccType_EquipArmor, ShareDefine.SuccType_EquipWeapon, ShareDefine.SuccType_EquipWing]:
+            DoEquipSuccessLogic(curPlayer)
+        elif succType in [ShareDefine.SuccType_InlayRune, ShareDefine.SuccType_RuneLvUp]:
+            PlayerRune.DoRuneSuccessLogic(curPlayer)
+        elif succType in [ShareDefine.SuccType_InlayGatherSoul, ShareDefine.SuccType_GatherSoulLvUp]:
+            PlayerGatherSoul.DoGatherSoulSuccessLogic(curPlayer)
+        elif succType == ShareDefine.SuccType_RealmlvUp:
+            UptateSuccessProgress(curPlayer, succType, curPlayer.GetOfficialRank())
+        elif succType == ShareDefine.SuccType_PetClassLV:
+            ResetSuccessByType(curPlayer, succType)
+            petDataPack = curPlayer.GetItemManager().GetPack(ShareDefine.rptPet)
+            for petDataIndex in range(petDataPack.GetCount()):
+                petItem = petDataPack.GetAt(petDataIndex)
+                if petItem.IsEmpty():
+                    continue
+                petNPCID = petItem.GetUserAttr(ShareDefine.Def_IudetPet_NPCID)
+                classLV = petItem.GetUserAttr(ShareDefine.Def_IudetPet_ClassLV)
+                for lv in xrange(classLV+1):
+                    DoAddSuccessProgress(curPlayer, succType, 1, [petNPCID, lv+1])
+                    
+        elif succType in [ShareDefine.SuccType_InlayStone1, ShareDefine.SuccType_InlayStone2, ShareDefine.SuccType_StoneTotalLV]:
+            Operate_EquipStone.DoStoneSuccess(curPlayer)
+        elif succType == ShareDefine.SuccType_XJMJGetExp:
+            expPointRecord = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_BZZD_TotalFightExpPoint)
+            DoAddSuccessProgress(curPlayer, succType, 1, [expPointRecord])
+        elif succType in [ShareDefine.SuccType_EquipWashLV1,ShareDefine.SuccType_EquipWashLV2,ShareDefine.SuccType_EquipWashLV3]:
+            Operate_EquipWash.EquipWashSuccess(curPlayer)
+        elif succType == ShareDefine.SuccType_MWSkillUp:
+            skillManager = curPlayer.GetSkillManager()
+            for i in range(0, skillManager.GetSkillCount()):
+                curSkill = skillManager.GetSkillByIndex(i)
+                if curSkill.GetFuncType() in [ChConfig.Def_SkillFuncType_FbSkill,ChConfig.Def_SkillFuncType_FbSPSkill]:
+                    curSkillLV = curSkill.GetSkillLV()
+                    UptateSuccessProgress(curPlayer, succType, curSkillLV, [curSkill.GetSkillTypeID()])
+            
+        elif succType == ShareDefine.SuccType_EquipSuit:
+            Operate_EquipSuitCompose.DoSuiteSuccess(curPlayer)
+        elif succType == ShareDefine.SuccType_FamilyTechLV:
+            techNeedLVDict = IpyGameDataPY.GetFuncEvalCfg('FamilyTechNeedLV', 1, {})
+            techIDList = techNeedLVDict.keys()
+            for techID in techIDList:
+                techLV = curPlayer.NomalDictGetProperty(ChConfig.Def_Player_Dict_FamilyTechLV % techID)
+                UptateSuccessProgress(curPlayer, succType, techLV, [techID])
+        elif succType == ShareDefine.SuccType_AlchemyLV:
+            alchemyLV = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_AlchemyLV)
+            UptateSuccessProgress(curPlayer, succType, alchemyLV)
+        elif succType == ShareDefine.SuccType_VIPLV:
+            DoAddSuccessProgress(curPlayer, succType, 1, [curPlayer.GetVIPLv()])
+        elif succType == ShareDefine.SuccType_XBXZ:
+            ResetSuccessByType(curPlayer, succType)
+            for i in xrange(ipyDataMgr.GetXBXZCount()):
+                ipyData = ipyDataMgr.GetXBXZByIndex(i)
+                if GameWorld.GetDictValueByBit(curPlayer, ChConfig.Def_PDict_XBXZAwardRecord, ipyData.GetID()):
+                    DoAddSuccessProgress(curPlayer, succType, 1, [ipyData.GetMWID()])
+
+        elif succType == ShareDefine.SuccType_DogzBattle:
+            for i in xrange(ipyDataMgr.GetDogzCount()):
+                ipyData = ipyDataMgr.GetDogzByIndex(i)
+                if GameWorld.GetDictValueByBit(curPlayer, ChConfig.Def_PDict_DogzFightState, i):
+                    DoAddSuccessProgress(curPlayer, succType, 1, [ipyData.GetDogzID()])
+                    
+        elif succType == ShareDefine.SuccType_DogzEquipPlus:
+            ResetSuccessByType(curPlayer, succType)
+            DoAddSuccessProgress(curPlayer, succType, PlayerDogz.GetFightDogzTotalPlusLv(curPlayer))
+        elif succType == ShareDefine.SuccType_MainTaskNode: #只能处理主线任务
+            succInfoList = GetSuccDataMng().GetSuccDataByType(succType)
+            for succData in succInfoList:
+                missionID = succData.condition[0]
+                if QuestCommon.GetHadFinishMainMission(curPlayer, missionID):
+                    DoAddSuccessProgress(curPlayer, succType, 1, [missionID])
+        elif succType == ShareDefine.SuccType_UseStoveBylv:
+            ResetSuccessByType(curPlayer, succType)
+            for i in xrange(ipyDataMgr.GetAttrFruitCount()):
+                ipyData = ipyDataMgr.GetAttrFruitByIndex(i)
+                fruitItemID = ipyData.GetID()
+                hasUseCnt = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_AttrFruitEatCnt % fruitItemID)
+                if ipyData.GetFuncID() == ShareDefine.Def_AttrFruitFunc_Stove:
+                    itemData = GameWorld.GetGameData().GetItemByTypeID(fruitItemID)
+                    if not itemData:
+                        continue
+                    DoAddSuccessProgress(curPlayer, succType, hasUseCnt, [itemData.GetLV()])
+                    
+    DataRecordPack.DR_CheckOldPlayerSuccess(curPlayer)
+    SetPDictValue(curPlayer, ChConfig.Def_PDict_Success_CheckVersion, initGameWorldTime)
+    GameWorld.DebugLog("更新老玩家上线检查成就updCheckVersions=%s" % (initGameWorldTime), curPlayer.GetID())
     return
 
 ## 成就OnWeek

--
Gitblit v1.8.0