From b8db02d69c95fa1f94e304ab6a7714c54517a9e0 Mon Sep 17 00:00:00 2001 From: hxp <ale99527@vip.qq.com> Date: 星期五, 09 八月 2019 03:39:18 +0800 Subject: [PATCH] 8197 【主干】【后端】莲台合成分解功能 --- ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerMagicWeapon.py | 124 ++++++++++++++++++++++++++-------------- 1 files changed, 80 insertions(+), 44 deletions(-) diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerMagicWeapon.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerMagicWeapon.py index 1345f99..d146863 100644 --- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerMagicWeapon.py +++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerMagicWeapon.py @@ -71,7 +71,7 @@ def ActiveMagicWeaponByFB(curPlayer, mapID, lineID, passLV=0): ##通关副本激活法宝(人族、魔族法宝) - ipyData = IpyGameDataPY.GetIpyGameDataByCondition('MagicWeaponFB', {'LineID':lineID, 'Level':passLV}) + ipyData = IpyGameDataPY.GetIpyGameDataByCondition('MagicWeaponFB', {'LineID':lineID, 'Level':passLV}, isLogNone=False) if ipyData: mwID = ipyData.GetMWID() GameWorld.Log('更新魔族副本关卡 mwID=%s,level=%s' % (mwID, passLV), curPlayer.GetID()) @@ -89,10 +89,11 @@ ipyData = IpyGameDataPY.GetIpyGameDataByCondition('Treasure', {'FBMapID':mapID, 'FBLineID':lineID}) if not ipyData: return + mwID = ipyData.GetID() if curPlayer.GetLV() < ipyData.GetNeedLV(): GameWorld.Log('通关副本激活法宝 ,等级不足!!!mwID=%s, needLV=%s' % (mwID, ipyData.GetNeedLV())) return - mwID = ipyData.GetID() + DoActiveMW(curPlayer, mwID) return @@ -108,7 +109,9 @@ else: sysMark = IpyGameDataPY.GetFuncEvalCfg('UnblockTreasure', 2, {}).get(mwID, 'UnblockTreasure') PlayerControl.WorldNotify(0, sysMark, [curPlayer.GetName(), mwID]) - + if mwID == IpyGameDataPY.GetFuncCfg('FabaoAddPoint', 1): + __DoFabaoAddPoint(curPlayer) + EventShell.EventRespons_MagicWeaponLV(curPlayer, mwID, mwLV) #通知客户端等级 @@ -139,7 +142,27 @@ DataRecordPack.DR_MagicWeaponActive(curPlayer, mwID, mwLV) return True +# 获得法宝加点 +def __DoFabaoAddPoint(curPlayer): + if not GameFuncComm.GetFuncCanUse(curPlayer, ShareDefine.GameFuncID_AddPoint): + # 未开启前不可加点,因为DoAddPointOpen会一次性补齐,避免意外情况多加了点数 + return + addPointDict = IpyGameDataPY.GetFuncEvalCfg("LVUPAddPoint", 1, {}) + fabaoAddPoint = PlayerControl.GetFabaoAddPoint(curPlayer) + curLV = curPlayer.GetLV() + addFreePoint = 0 + for rangLVs, point in addPointDict.items(): + if curLV < rangLVs[0]: + continue + addFreePoint += fabaoAddPoint * (min(curLV, rangLVs[1]) - rangLVs[0] + 1) + freePoint = curPlayer.GetFreePoint() + updFreePoint = freePoint + addFreePoint + curPlayer.SetFreePoint(updFreePoint) + GameWorld.DebugLog("获得法宝增加自由属性点: freePoint=%s,addFreePoint=%s,curLV=%s,updFreePoint=%s" + % (freePoint, addFreePoint, curLV, updFreePoint)) + + return def GetWMIpyData(mwID):return IpyGameDataPY.GetIpyGameData('Treasure', mwID) @@ -318,19 +341,57 @@ #扣消耗 ItemCommon.DelCostItem(curPlayer, itemPack, delInfoDict, ChConfig.ItemDel_MagicWeapon) elif ipyDataList: - ipyDataList = IpyGameDataPY.GetIpyGameDataByCondition('XBXZ', {'MWID':mwID}, True, False) - if not ipyDataList: - return for ipyData in ipyDataList: if not GameWorld.GetDictValueByBit(curPlayer, ChConfig.Def_PDict_XBXZAwardRecord, ipyData.GetID()): return elif mwID == 101: #定海神针特殊 可直接获得 FBCommon.Notify_FB_Over(curPlayer, {FBCommon.Over_dataMapID:ChConfig.Def_FBMapID_MagicWeapon,FBCommon.Over_isPass:1}) + PlayerControl.SetCustomMap(curPlayer, 0, 0) else: return DoActiveMW(curPlayer, mwID) return +def GetXBXZAwardProgress(curPlayer, mwID): + ##获取仙宝寻主当前达到条件的个数(包含已领取的) + ipyDataList = IpyGameDataPY.GetIpyGameDataByCondition('XBXZ', {'MWID': mwID}, True, False) + if not ipyDataList: + return 0 + cnt = 0 + playerEquip = curPlayer.GetItemManager().GetPack(IPY_GameWorld.rptEquip) + for ipyData in ipyDataList: + if GameWorld.GetDictValueByBit(curPlayer, ChConfig.Def_PDict_XBXZAwardRecord, ipyData.GetID()): + cnt += 1 + continue + curType = ipyData.GetType() + conditionList = ipyData.GetCondition() + + if curType == 1: + #穿戴X阶X颜色是否套装X部位装备 + for classlv, color, suite, place in conditionList: + equipIpyData = IpyGameDataPY.GetIpyGameData('EquipPlaceIndexMap',classlv,place) + if not equipIpyData: + continue + gridIndex = equipIpyData.GetGridIndex() + curEquip = playerEquip.GetAt(gridIndex) + if curEquip.IsEmpty(): + continue + curItemColor = curEquip.GetItemColor() + curIsSuite = curEquip.GetSuiteID() + if curItemColor >= color and curIsSuite >= suite: + cnt += 1 + break + else: + continue + return cnt + +# ipyDataList = IpyGameDataPY.GetIpyGameDataByCondition('XBXZ', {'MWID': mwID}, True, False) +# cnt = 0 +# if ipyDataList: +# for ipyData in ipyDataList: +# if GameWorld.GetDictValueByBit(curPlayer, ChConfig.Def_PDict_XBXZAwardRecord, ipyData.GetID()): +# cnt += 1 +# return cnt #------------------------------------------------------------------------------- @@ -347,47 +408,22 @@ conditionList = ipyData.GetCondition() cnt = 0 if curType == 1: - #角色防御到XX - cnt = PlayerControl.GetFuncDef(curPlayer) - - elif curType == 2: - #穿戴三阶橙色1星或四阶紫色1星以上头盔 + #穿戴X阶X颜色是否套装X部位装备 + cnt = 0 playerEquip = curPlayer.GetItemManager().GetPack(IPY_GameWorld.rptEquip) - SamboSpecialUnlock = IpyGameDataPY.GetFuncEvalCfg('SamboSpecialUnlock') - for equipIndex in xrange(playerEquip.GetCount()): - curEquip = playerEquip.GetAt(equipIndex) + for classlv, color, suite, place in conditionList: + equipIpyData = IpyGameDataPY.GetIpyGameData('EquipPlaceIndexMap',classlv,place) + if not equipIpyData: + continue + gridIndex = equipIpyData.GetGridIndex() + curEquip = playerEquip.GetAt(gridIndex) if curEquip.IsEmpty(): continue - curClassLV = ItemCommon.GetItemClassLV(curEquip) - itemColor = curEquip.GetItemColor() - itemQuality = curEquip.GetItemQuality() - itemID = curEquip.GetItemTypeID() - for classlv, color, star, place in conditionList: - if equipIndex is place and itemID in SamboSpecialUnlock: - cnt = 1 - break - if equipIndex is place and curClassLV >= classlv and itemColor >= color and itemQuality >= star: - cnt = 1 - break - if cnt: + curItemColor = curEquip.GetItemColor() + curIsSuite = curEquip.GetSuiteID() + if curItemColor >= color and curIsSuite >= suite: + cnt = 1 break -# elif curType == 3: -# #全身装备X星 -# cnt = ChEquip.GetTotalEquipStars(curPlayer) - -# elif curType == 4: -# #X阶普通、强化套装 -# suiteCntDict = {} -# playerEquip = curPlayer.GetItemManager().GetPack(IPY_GameWorld.rptEquip) -# for equipIndex in xrange(playerEquip.GetCount()): -# curEquip = playerEquip.GetAt(equipIndex) -# if curEquip.IsEmpty(): -# continue -# suiteInfo = ChEquip.GetSuiteInfoByPlace(curPlayer, equipIndex, curEquip) -# for suitelv, suiteType in conditionList: -# if suiteInfo.get(suiteType, 0) >= suitelv: -# suiteCntDict[suiteType] = suiteCntDict.get(suiteType, 0)+1 -# cnt = max(suiteCntDict.values()) if suiteCntDict else 0 else: return @@ -418,9 +454,9 @@ SyncXBXZAwardRecord(curPlayer, [index]) #成就 PlayerSuccess.DoAddSuccessProgress(curPlayer, ShareDefine.SuccType_XBXZ, 1, [ipyData.GetMWID()]) + EventShell.EventRespons_XBXZ(curPlayer, ipyData.GetMWID()) GameWorld.DebugLog(' 仙宝寻主领奖OK, ID=%s, cnt=%s' % (index, cnt)) return - ## 通知仙宝寻主对应奖励领奖记录 # @param None -- Gitblit v1.8.0