From cda5ffad727e202510e3cd11017040f2488d6d34 Mon Sep 17 00:00:00 2001 From: hxp <ale99527@vip.qq.com> Date: 星期四, 09 二月 2023 17:55:13 +0800 Subject: [PATCH] 9762 【BT8】【后端】藏宝阁(9767 【BT8】新增古宝特效效果) --- ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Event/EventSrc/Operate_EquipWash.py | 6 +- ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerGubao.py | 132 ++++++++++++++++++++++++++++++++++++++++++++ ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerRune.py | 10 +++ ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/IpyGameDataPY.py | 6 ++ ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerGatherSoul.py | 10 +++ PySysDB/PySysDBPY.h | 2 6 files changed, 163 insertions(+), 3 deletions(-) diff --git a/PySysDB/PySysDBPY.h b/PySysDB/PySysDBPY.h index 56e744d..93c2387 100644 --- a/PySysDB/PySysDBPY.h +++ b/PySysDB/PySysDBPY.h @@ -465,6 +465,8 @@ DWORD _GubaoEffID; //古宝特殊效果ID BYTE GubaoEffType; //效果类型 DWORD EffCond; //条件 + DWORD EffCond2; //条件2 + DWORD EffCond3; //条件3 BYTE IsPer; //是否百分比提升 list EffFuncAttrIDList; //提升指定功能属性ID列表 DWORD EffAttrID; //直接增加属性类型 diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Event/EventSrc/Operate_EquipWash.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Event/EventSrc/Operate_EquipWash.py index 033278a..ef0aca7 100644 --- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Event/EventSrc/Operate_EquipWash.py +++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Event/EventSrc/Operate_EquipWash.py @@ -461,10 +461,10 @@ washLV = min(washLV, maxWashLV) washType = GetEquipWashType(equipPlace) if washType is None: - return + return 0 washData = GetEquipWashData(washType, washLV) if not washData: - return + return 0 #GameWorld.DebugLog("装备位属性: equipPlace=%s,washLV=%s" % (equipPlace, washLV)) for attrNum in range(1, Def_EquipWashMaxAttrCount + 1): attrID = getattr(washData, "GetAttrType%s" % attrNum)() @@ -475,7 +475,7 @@ if attrValue: PlayerControl.CalcAttrDict_Type(attrID, attrValue, allAttrList) baseAttrDictWash[attrID] = baseAttrDictWash.get(attrID, 0) + attrValue - return + return washLV def EquipWashSuccess(curPlayer, classLV): ipyDataList = IpyGameDataPY.GetIpyGameDataByCondition('EquipPlaceIndexMap', {'ClassLV':classLV}, True) diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/IpyGameDataPY.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/IpyGameDataPY.py index 60009ac..3b84d2a 100644 --- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/IpyGameDataPY.py +++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/IpyGameDataPY.py @@ -381,6 +381,8 @@ ("DWORD", "GubaoEffID", 1), ("BYTE", "GubaoEffType", 0), ("DWORD", "EffCond", 0), + ("DWORD", "EffCond2", 0), + ("DWORD", "EffCond3", 0), ("BYTE", "IsPer", 0), ("list", "EffFuncAttrIDList", 0), ("DWORD", "EffAttrID", 0), @@ -2824,6 +2826,8 @@ self.GubaoEffID = 0 self.GubaoEffType = 0 self.EffCond = 0 + self.EffCond2 = 0 + self.EffCond3 = 0 self.IsPer = 0 self.EffFuncAttrIDList = [] self.EffAttrID = 0 @@ -2833,6 +2837,8 @@ def GetGubaoEffID(self): return self.GubaoEffID # 古宝特殊效果ID def GetGubaoEffType(self): return self.GubaoEffType # 效果类型 def GetEffCond(self): return self.EffCond # 条件 + def GetEffCond2(self): return self.EffCond2 # 条件2 + def GetEffCond3(self): return self.EffCond3 # 条件3 def GetIsPer(self): return self.IsPer # 是否百分比提升 def GetEffFuncAttrIDList(self): return self.EffFuncAttrIDList # 提升指定功能属性ID列表 def GetEffAttrID(self): return self.EffAttrID # 直接增加属性类型 diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerGatherSoul.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerGatherSoul.py index 45152c8..80618b9 100644 --- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerGatherSoul.py +++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerGatherSoul.py @@ -556,6 +556,16 @@ return +def GetGatherSoulTotalLV(curPlayer): + ## 聚魂累计总等级 + totalLV = 0 + GatherSoulUnlockDict = IpyGameDataPY.GetFuncEvalCfg("GatherSoulHole", 1, {}) + for holeNum in xrange(len(GatherSoulUnlockDict)): + GatherSoulData = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_GatherSoulHoleData % holeNum, 0) + if not GatherSoulData: + continue + totalLV += ItemControler.GetGatherSoulItemPlusLV(GatherSoulData) + 1 + return totalLV def Sync_GatherSoulHoleInfo(curPlayer): ##通知聚魂孔信息 diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerGubao.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerGubao.py index 160fea1..aff637e 100644 --- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerGubao.py +++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerGubao.py @@ -16,10 +16,12 @@ #------------------------------------------------------------------------------- import GameWorld +import PlayerRune import ItemCommon import PlayerControl import IpyGameDataPY import ChPyNetSendPack +import PlayerGatherSoul import NetPackCommon import IPY_GameWorld import PlayerHorse @@ -221,6 +223,8 @@ return effType = ipyData.GetGubaoEffType() effCond = ipyData.GetEffCond() + effCond2 = ipyData.GetEffCond2() + effCond3 = ipyData.GetEffCond3() attrID = ipyData.GetEffAttrID() effAttrValue = ipyData.GetEffAttrValue() if effAttrValue <= 0: @@ -332,6 +336,134 @@ if attrID > 0 and addAttrValue > 0: effAttrInfo[attrID] = effAttrInfo.get(attrID, 0) + addAttrValue + #22 天星塔每通关x层+xx属性 x层 + elif effType == 22: + skyTowerFloor = curPlayer.NomalDictGetProperty(ChConfig.Def_Player_Dict_SkyTowerFloor) + addAttrValue = int(skyTowerFloor / effCond * effAttrValue) + #GameWorld.DebugLog(" effID=%s,effType=%s,effCond=%s,skyTowerFloor=%s,attrID=%s,addAttrValue=%s" % (effID, effType, effCond, skyTowerFloor, attrID, addAttrValue)) + if attrID > 0 and addAttrValue > 0: + effAttrInfo[attrID] = effAttrInfo.get(attrID, 0) + addAttrValue + + #23 符印塔每通关x层+xx属性 x层 + elif effType == 23: + trialTowerPassLV = curPlayer.NomalDictGetProperty(ChConfig.Def_Player_Dict_TrialTower_PassLV) + addAttrValue = int(trialTowerPassLV / effCond * effAttrValue) + #GameWorld.DebugLog(" effID=%s,effType=%s,effCond=%s,trialTowerPassLV=%s,attrID=%s,addAttrValue=%s" % (effID, effType, effCond, trialTowerPassLV, attrID, addAttrValue)) + if attrID > 0 and addAttrValue > 0: + effAttrInfo[attrID] = effAttrInfo.get(attrID, 0) + addAttrValue + + #24 符印等级每每x级+xx属性 x级 + elif effType == 24: + runeTotalLV = PlayerRune.GetRuneTotalLV(curPlayer) + addAttrValue = int(runeTotalLV / effCond * effAttrValue) + #GameWorld.DebugLog(" effID=%s,effType=%s,effCond=%s,runeTotalLV=%s,attrID=%s,addAttrValue=%s" % (effID, effType, effCond, runeTotalLV, attrID, addAttrValue)) + if attrID > 0 and addAttrValue > 0: + effAttrInfo[attrID] = effAttrInfo.get(attrID, 0) + addAttrValue + + #25 聚魂等级每每x级+xx属性 x级 + elif effType == 25: + soulTotalLV = PlayerGatherSoul.GetGatherSoulTotalLV(curPlayer) + addAttrValue = int(soulTotalLV / effCond * effAttrValue) + #GameWorld.DebugLog(" effID=%s,effType=%s,effCond=%s,soulTotalLV=%s,attrID=%s,addAttrValue=%s" % (effID, effType, effCond, soulTotalLV, attrID, addAttrValue)) + if attrID > 0 and addAttrValue > 0: + effAttrInfo[attrID] = effAttrInfo.get(attrID, 0) + addAttrValue + + #26 x阶装备强化每x级+xx属性 x阶 x级 + elif effType == 26: + customAttrDictPlus = PlayerControl.GetCalcAttrListValue(curPlayer, ChConfig.Def_CalcAttrFunc_Plus)[2] + classPlusLVDict = customAttrDictPlus.get("classPlusLVDict", {}) + classLV = effCond + #GameWorld.DebugLog(" effID=%s,effType=%s,classLV=%s,classPlusLVDict=%s" % (effID, effType, classLV, classPlusLVDict)) + if classLV not in classPlusLVDict: + return + totalPlusLV = classPlusLVDict[classLV] + addAttrValue = int(totalPlusLV / effCond2 * effAttrValue) + #GameWorld.DebugLog(" effCond=%s,effCond2=%s,totalPlusLV=%s,attrID=%s,addAttrValue=%s" % (effCond, effCond2, totalPlusLV, attrID, addAttrValue)) + if attrID > 0 and addAttrValue > 0: + effAttrInfo[attrID] = effAttrInfo.get(attrID, 0) + addAttrValue + + #27 x阶装备宝石每x级+xx属性 x阶 x级 + elif effType == 27: + customAttrDictStone = PlayerControl.GetCalcAttrListValue(curPlayer, ChConfig.Def_CalcAttrFunc_Stone)[2] + classStoneLVDict = customAttrDictStone.get("classStoneLVDict", {}) + classLV = effCond + #GameWorld.DebugLog(" effID=%s,effType=%s,classLV=%s,classStoneLVDict=%s" % (effID, effType, classLV, classStoneLVDict)) + if classLV not in classStoneLVDict: + return + totalStoneLV = classStoneLVDict[classLV] + addAttrValue = int(totalStoneLV / effCond2 * effAttrValue) + #GameWorld.DebugLog(" effCond=%s,effCond2=%s,totalStoneLV=%s,attrID=%s,addAttrValue=%s" % (effCond, effCond2, totalStoneLV, attrID, addAttrValue)) + if attrID > 0 and addAttrValue > 0: + effAttrInfo[attrID] = effAttrInfo.get(attrID, 0) + addAttrValue + + #28 x阶装备升星每x星+xx属性 x阶 x星 + elif effType == 28: + customAttrDictStar = PlayerControl.GetCalcAttrListValue(curPlayer, ChConfig.Def_CalcAttrFunc_Star)[2] + classStarLVDict = customAttrDictStar.get("classStarLVDict", {}) + classLV = effCond + #GameWorld.DebugLog(" effID=%s,effType=%s,classLV=%s,classStarLVDict=%s" % (effID, effType, classLV, classStarLVDict)) + if classLV not in classStarLVDict: + return + totalStarLV = classStarLVDict[classLV] + addAttrValue = int(totalStarLV / effCond2 * effAttrValue) + #GameWorld.DebugLog(" effCond=%s,effCond2=%s,totalStarLV=%s,attrID=%s,addAttrValue=%s" % (effCond, effCond2, totalStarLV, attrID, addAttrValue)) + if attrID > 0 and addAttrValue > 0: + effAttrInfo[attrID] = effAttrInfo.get(attrID, 0) + addAttrValue + + #29 x阶装备洗练每x级+xx属性 x阶 x级 + elif effType == 29: + customAttrDictWash = PlayerControl.GetCalcAttrListValue(curPlayer, ChConfig.Def_CalcAttrFunc_Wash)[2] + classWashLVDict = customAttrDictWash.get("classWashLVDict", {}) + classLV = effCond + #GameWorld.DebugLog(" effID=%s,effType=%s,classLV=%s,classWashLVDict=%s" % (effID, effType, classLV, classWashLVDict)) + if classLV not in classWashLVDict: + return + totalWashLV = classWashLVDict[classLV] + addAttrValue = int(totalWashLV / effCond2 * effAttrValue) + #GameWorld.DebugLog(" effCond=%s,effCond2=%s,totalWashLV=%s,attrID=%s,addAttrValue=%s" % (effCond, effCond2, totalWashLV, attrID, addAttrValue)) + if attrID > 0 and addAttrValue > 0: + effAttrInfo[attrID] = effAttrInfo.get(attrID, 0) + addAttrValue + + #30 x阶装备附魔每x级+xx属性 x阶 x级 + elif effType == 30: + customAttrDictEnchant = PlayerControl.GetCalcAttrListValue(curPlayer, ChConfig.Def_CalcAttrFunc_Enchant)[2] + classEnchantLVDict = customAttrDictEnchant.get("classEnchantLVDict", {}) + classLV = effCond + #GameWorld.DebugLog(" effID=%s,effType=%s,classLV=%s,classEnchantLVDict=%s" % (effID, effType, classLV, classEnchantLVDict)) + if classLV not in classEnchantLVDict: + return + totalEnchantLV = classEnchantLVDict[classLV] + addAttrValue = int(totalEnchantLV / effCond2 * effAttrValue) + #GameWorld.DebugLog(" effCond=%s,effCond2=%s,totalEnchantLV=%s,attrID=%s,addAttrValue=%s" % (effCond, effCond2, totalEnchantLV, attrID, addAttrValue)) + if attrID > 0 and addAttrValue > 0: + effAttrInfo[attrID] = effAttrInfo.get(attrID, 0) + addAttrValue + + #31 x阶装备x件x品质装备+xx属性 x阶 x件 x品质 + elif effType == 31: + customAttrDictEquip = PlayerControl.GetCalcAttrListValue(curPlayer, ChConfig.Def_CalcAttrFunc_Equip)[2] + classEquipColorDict = customAttrDictEquip.get("classEquipColorDict", {}) + classLV = effCond + #GameWorld.DebugLog(" effID=%s,effType=%s,classLV=%s,classEquipColorDict=%s" % (effID, effType, classLV, classEquipColorDict)) + if classLV not in classEquipColorDict: + return + equipColorDict = classEquipColorDict[classLV] + equipColorCnt = 0 + for itemColor in equipColorDict.values(): + if itemColor >= effCond3: + equipColorCnt += 1 + addAttrValue = int(equipColorCnt / effCond2 * effAttrValue) + #GameWorld.DebugLog(" effCond=%s,effCond2=%s,effCond3=%s,equipColorCnt=%s,attrID=%s,addAttrValue=%s" % (effCond, effCond2, effCond3, equipColorCnt, attrID, addAttrValue)) + if attrID > 0 and addAttrValue > 0: + effAttrInfo[attrID] = effAttrInfo.get(attrID, 0) + addAttrValue + + #32 获得x点灵根点+xx属性 x点 + elif effType == 32: + totalLingGenPoint = PlayerControl.GetTotalLingGenPoint(curPlayer) + addAttrValue = int(totalLingGenPoint / effCond * effAttrValue) + #GameWorld.DebugLog(" effID=%s,effType=%s,effCond=%s,totalLingGenPoint=%s,attrID=%s,addAttrValue=%s" % (effID, effType, effCond, totalLingGenPoint, attrID, addAttrValue)) + if attrID > 0 and addAttrValue > 0: + effAttrInfo[attrID] = effAttrInfo.get(attrID, 0) + addAttrValue + return def __addStarEffFuncAttr(ipyData, effAttrInfo, funcAttrInfo, effAttrValue): diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerRune.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerRune.py index ce3dc08..284eb5e 100644 --- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerRune.py +++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerRune.py @@ -612,6 +612,16 @@ PlayerControl.SetCalcAttrListValue(curPlayer, ChConfig.Def_CalcAttrFunc_Rune, allAttrList) return +def GetRuneTotalLV(curPlayer): + ## 符印累计总等级 + totalLV = 0 + runeHoleCnt = IpyGameDataPY.GetFuncCfg("RuneUnlock", 4) + for holeNum in xrange(1, runeHoleCnt + 1): + runeData = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_Rune_Data % holeNum, 0) + if not runeData: + continue + totalLV += ItemControler.GetRuneItemPlusLV(runeData) + 1 + return totalLV ## 同步客户端 -- Gitblit v1.8.0