From 623442b524137821ea6abb1b429660a9a107b364 Mon Sep 17 00:00:00 2001
From: hch <305670599@qq.com>
Date: 星期四, 31 一月 2019 19:27:01 +0800
Subject: [PATCH] 6118 【后端】【1.5.200】新增技能效果-- 宠物技能-宠物主人受到暴击伤害时触发技能 - 效果填写错误

---
 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerSuccess.py |  149 +++++++++++++++++++++++++++++++++++--------------
 1 files changed, 105 insertions(+), 44 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 c6ed964..ed6e2f4 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
@@ -42,8 +43,10 @@
 import Operate_EquipStone
 import Operate_EquipWash
 import Operate_EquipSuitCompose
+import PlayerFeastRedPacket
 import PlayerDogz
 import QuestCommon
+import DataRecordPack
 
 
 ## 获取成就字典信息值
@@ -237,52 +240,53 @@
 #  @param None
 #  @return
 def __CheckOldPlayerSuccess(curPlayer):
-    ''' 成就版本更新老玩家检查
-        正式上线后,成就的修改或者增加,一般是增加新成就,则需要对老玩家成就版本进行校正,检查成就完成情况
-        成就版本号递增
+    ''' 成就版本更新老玩家检查  每次启动服务后 玩家第一次上线检查成就完成情况
     '''
-    Versions = 2 #版本号,往上增加
-    
+    #Versions = 2 #版本号,往上增加
+    initGameWorldTime = GameWorld.GetGameWorld().GetGameWorldDictByKey(ShareDefine.Def_Notify_WorldKey_InitGameWorldTime)
     # 上线需要检查老玩家成就完成情况类型{成就类型:维护版本号, ...}
-    NeedCheckSuccTypeDict = {
-                            ShareDefine.SuccType_GetMagicWeapon:2,
-                            ShareDefine.SuccType_PassRuneTower:2,
-                            ShareDefine.SuccType_GodWeapon:2,
-                            ShareDefine.SuccType_HorseAllLV:2,
-                            ShareDefine.SuccType_EquipPlusLV:2,
-                            ShareDefine.SuccType_EquipColorItem:2,
-                            ShareDefine.SuccType_EquipArmor:2,
-                            ShareDefine.SuccType_EquipWeapon:2,
-                            ShareDefine.SuccType_InlayRune:2,
-                            ShareDefine.SuccType_RuneLvUp:2,
-                            ShareDefine.SuccType_RealmlvUp:2,
-                            ShareDefine.SuccType_PetClassLV:2,
-                            ShareDefine.SuccType_InlayStone1:2,
-                            ShareDefine.SuccType_InlayStone2:2,
-                            ShareDefine.SuccType_XJMJGetExp:2,
-                            ShareDefine.SuccType_EquipWashLV1:2,
-                            ShareDefine.SuccType_EquipWashLV2:2,
-                            ShareDefine.SuccType_EquipWashLV3:2,
-                            ShareDefine.SuccType_EquipWing:2,
-                            ShareDefine.SuccType_MWSkillUp:2,
-                            ShareDefine.SuccType_EquipSuit:2,
-                            ShareDefine.SuccType_FamilyTechLV:2,
-                            ShareDefine.SuccType_AlchemyLV:2,
-                            ShareDefine.SuccType_VIPLV:2,
-                            ShareDefine.SuccType_StoneTotalLV:2,
-                            ShareDefine.SuccType_XBXZ:2,
-                            ShareDefine.SuccType_DogzBattle:2,
-                            ShareDefine.SuccType_DogzEquipPlus:2,
-                            ShareDefine.SuccType_MainTaskNode:2,
-                             }
+    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))
     ipyDataMgr = IpyGameDataPY.IPY_Data()
-    for succType, version in NeedCheckSuccTypeDict.items():
-        
-        if curCheckVersion >= version:
-            continue
+    for succType in NeedCheckSuccTypeList:
         if succType == ShareDefine.SuccType_GetMagicWeapon:
             
             for i in xrange(ipyDataMgr.GetTreasureCount()):
@@ -298,6 +302,7 @@
             passlv = curPlayer.NomalDictGetProperty(ChConfig.Def_Player_Dict_TrialTower_PassLV)
             DoAddSuccessProgress(curPlayer, ShareDefine.SuccType_PassRuneTower, 1, [passlv])
         elif succType == ShareDefine.SuccType_GodWeapon:
+            ResetSuccessByType(curPlayer, succType)
             maxType = ipyDataMgr.GetGodWeaponByIndex(ipyDataMgr.GetGodWeaponCount()-1).GetType()
             for i in xrange(1, maxType + 1):
                 weaponLV = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_GodWeaponLV % i)
@@ -324,7 +329,10 @@
             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:
+            ResetSuccessByType(curPlayer, succType)
             UptateSuccessProgress(curPlayer, succType, curPlayer.GetOfficialRank())
         elif succType == ShareDefine.SuccType_PetClassLV:
             ResetSuccessByType(curPlayer, succType)
@@ -346,6 +354,7 @@
         elif succType in [ShareDefine.SuccType_EquipWashLV1,ShareDefine.SuccType_EquipWashLV2,ShareDefine.SuccType_EquipWashLV3]:
             Operate_EquipWash.EquipWashSuccess(curPlayer)
         elif succType == ShareDefine.SuccType_MWSkillUp:
+            ResetSuccessByType(curPlayer, succType)
             skillManager = curPlayer.GetSkillManager()
             for i in range(0, skillManager.GetSkillCount()):
                 curSkill = skillManager.GetSkillByIndex(i)
@@ -356,12 +365,14 @@
         elif succType == ShareDefine.SuccType_EquipSuit:
             Operate_EquipSuitCompose.DoSuiteSuccess(curPlayer)
         elif succType == ShareDefine.SuccType_FamilyTechLV:
+            ResetSuccessByType(curPlayer, succType)
             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:
+            ResetSuccessByType(curPlayer, succType)
             alchemyLV = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_AlchemyLV)
             UptateSuccessProgress(curPlayer, succType, alchemyLV)
         elif succType == ShareDefine.SuccType_VIPLV:
@@ -388,9 +399,21 @@
                 missionID = succData.condition[0]
                 if QuestCommon.GetHadFinishMainMission(curPlayer, missionID):
                     DoAddSuccessProgress(curPlayer, succType, 1, [missionID])
-            
-    SetPDictValue(curPlayer, ChConfig.Def_PDict_Success_CheckVersion, Versions)
-    GameWorld.DebugLog("更新老玩家上线检查成就updCheckVersions=%s" % (Versions))
+        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
@@ -413,6 +436,29 @@
             SetSuccHasGot(curPlayer, succID, False)
             resetList.append(succID)
             GameWorld.DebugLog("    OnWeek 重置成就类型: succID=%s" % (succID))
+    if resetList:
+        Sync_SuccTypeIndexAwardRecord(curPlayer, resetList, True)
+        Sync_SuccessInfo(curPlayer, resetList, True)
+    return
+
+def DoResetSuccessIDList(curPlayer, resetSuccIDList):
+    ## 重置成就相关数据
+    if not resetSuccIDList:
+        return
+    resetList = []
+    for succID in resetSuccIDList:
+        succData = GetSuccDataMng().GetSuccessData(succID)
+        if not succData:
+            continue
+        succType = succData.succType
+        condition = succData.condition
+        #if not GetSuccFinishValue(curPlayer, succType, condition):
+        #    continue
+        SetSuccFinishValue(curPlayer, succType, condition, 0)
+        SetSuccFinish(curPlayer, succID, False)
+        SetSuccHasGot(curPlayer, succID, False)
+        resetList.append(succID)
+        GameWorld.DebugLog("    重置成就类型: succType=%s,succID=%s" % (succType, succID))
     if resetList:
         Sync_SuccTypeIndexAwardRecord(curPlayer, resetList, True)
         Sync_SuccessInfo(curPlayer, resetList, True)
@@ -537,6 +583,9 @@
 def UptateSuccessProgress(curPlayer, successType, newCnt, condition=[]):
     if successType not in ShareDefine.SuccessTypeList:
         return
+    if successType in ShareDefine.FeastRedPackSuccessTypeList:
+        if not PlayerFeastRedPacket.GetFeastRedPacketState():
+            return
     succInfoList = GetSuccDataMng().GetSuccDataByType(successType)
     if not succInfoList:
         return
@@ -558,6 +607,11 @@
     succID = succDataObj.succID
     cond = succDataObj.condition
     
+    if successType in ShareDefine.FeastRedPackSuccessTypeList:
+        todayFeastSuccIDList = PlayerFeastRedPacket.GetTodayFeastSuccIDList()
+        if not todayFeastSuccIDList or succID not in todayFeastSuccIDList:
+            #GameWorld.DebugLog("    非今日节日红包成就,不增加进度! succID=%s,todayFeastSuccIDList=%s" % (succID, todayFeastSuccIDList))
+            return
     isUnDownCheck = successType in ShareDefine.UnDownCheckSuccessTypeList
     isContain = successType in ShareDefine.ContainSuccessTypeList
     # 已完成的不再检查
@@ -628,7 +682,14 @@
 def DoAddSuccessProgress(curPlayer, successType, addCnt, condition=[], delayCalc=True):
     #GameWorld.DebugLog("DoAddSuccessProgress type=%s,addCnt=%s,condition=%s" 
     #                   % (successType, addCnt, condition), curPlayer.GetPlayerID())
-
+    if GameWorld.IsCrossServer():
+        return
+    
+    if successType in ShareDefine.FeastRedPackSuccessTypeList:
+        if not PlayerFeastRedPacket.GetFeastRedPacketState():
+            #GameWorld.DebugLog("非节日红包活动时间,不增加成就!successType=%s" % successType)
+            return
+        
     playerID = curPlayer.GetID()
     if delayCalc and successType not in ShareDefine.NeedResetSuccessTypeList:
         if playerID not in PyGameData.g_delaySuccessDict:

--
Gitblit v1.8.0