|  |  |  | 
|---|
|  |  |  | import datetime | 
|---|
|  |  |  | import time | 
|---|
|  |  |  | import math | 
|---|
|  |  |  | import ChEquip | 
|---|
|  |  |  | import PlayerRune | 
|---|
|  |  |  | import Operate_EquipStone | 
|---|
|  |  |  | import Operate_EquipWash | 
|---|
|  |  |  | import Operate_EquipSuitCompose | 
|---|
|  |  |  | import PlayerDogz | 
|---|
|  |  |  | import QuestCommon | 
|---|
|  |  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  | ## 获取成就字典信息值 | 
|---|
|  |  |  | 
|---|
|  |  |  | 正式上线后,成就的修改或者增加,一般是增加新成就,则需要对老玩家成就版本进行校正,检查成就完成情况 | 
|---|
|  |  |  | 成就版本号递增 | 
|---|
|  |  |  | ''' | 
|---|
|  |  |  | Versions = 1 #版本号,往上增加 | 
|---|
|  |  |  | Versions = 2 #版本号,往上增加 | 
|---|
|  |  |  |  | 
|---|
|  |  |  | # 上线需要检查老玩家成就完成情况类型{成就类型:维护版本号, ...} | 
|---|
|  |  |  | NeedCheckSuccTypeDict = { | 
|---|
|  |  |  | ShareDefine.SuccType_GetMagicWeapon:1, | 
|---|
|  |  |  | ShareDefine.SuccType_PassRuneTower:1, | 
|---|
|  |  |  | 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, | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | curCheckVersion = GetPDictValue(curPlayer, ChConfig.Def_PDict_Success_CheckVersion) | 
|---|
|  |  |  | GameWorld.DebugLog("更新老玩家上线检查成就curCheckVersion=%s" % (curCheckVersion)) | 
|---|
|  |  |  | ipyDataMgr = IpyGameDataPY.IPY_Data() | 
|---|
|  |  |  | for succType, version in NeedCheckSuccTypeDict.items(): | 
|---|
|  |  |  |  | 
|---|
|  |  |  | if curCheckVersion >= version: | 
|---|
|  |  |  | continue | 
|---|
|  |  |  | if succType == ShareDefine.SuccType_GetMagicWeapon: | 
|---|
|  |  |  | ipyDataMgr = IpyGameDataPY.IPY_Data() | 
|---|
|  |  |  |  | 
|---|
|  |  |  | for i in xrange(ipyDataMgr.GetTreasureCount()): | 
|---|
|  |  |  | treasureIpyData = ipyDataMgr.GetTreasureByIndex(i) | 
|---|
|  |  |  | magicWeaponID = treasureIpyData.GetID() | 
|---|
|  |  |  | 
|---|
|  |  |  | 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 == 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]) | 
|---|
|  |  |  |  | 
|---|
|  |  |  | SetPDictValue(curPlayer, ChConfig.Def_PDict_Success_CheckVersion, Versions) | 
|---|
|  |  |  | GameWorld.DebugLog("更新老玩家上线检查成就updCheckVersions=%s" % (Versions)) | 
|---|
|  |  |  | return | 
|---|