From a572273422ce72347de0697eccc0c57fefb1f85d Mon Sep 17 00:00:00 2001 From: xdh <xiefantasy@qq.com> Date: 星期三, 27 三月 2019 14:25:49 +0800 Subject: [PATCH] 6244 【后端】【2.0】法宝调整 --- ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerMagicWeapon.py | 211 ++++++++++------------------------------------------ 1 files changed, 41 insertions(+), 170 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 b725a41..ae1f2f7 100644 --- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerMagicWeapon.py +++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerMagicWeapon.py @@ -9,7 +9,7 @@ # @date 2017-05-18 # @version 1.0 # -# 详细描述: 法宝系统 +# 详细描述: 法宝系统 目前激活方式:1.任务接口激活 2.通关副本 3.获得某物品 4.仙宝寻主 # #------------------------------------------------------------------------------- #"""Version = 2017-05-18 12:00""" @@ -38,15 +38,10 @@ import random -g_succInfoDict = {} -g_potentialsSkillDict = {} - - ##登录处理 # @param curPlayer 玩家 # @return None def PlayerMagicWeaponLogin(curPlayer): - NotifyMagicWeapon(curPlayer, True) SyncXBXZAwardRecord(curPlayer) Sycn_MagicWeaponLV(curPlayer) return @@ -63,78 +58,61 @@ # mwID = ipyData.GetID() # GameWorld.DebugLog("法宝功能开启 激活第一个法宝 mwID=%s"%mwID) # DoActiveMW(curPlayer, mwID) -# NotifyMagicWeapon(curPlayer) + return True -def GetIsActiveMagicWeapon(curPlayer, mwID, lv=0): - #获取法宝是否激活 - #通过玩家字典值可直接判断是否已经激活,这里可不验证法宝ID是否存在,即使传入不存在的也是返回未激活 - #if not GetWMIpyData(mwID): - # return False - if lv: - curMWLV = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_MagicWeaponLV % mwID) - return curMWLV >= lv - return GameWorld.GetDictValueByBit(curPlayer, ChConfig.Def_PDict_MagicWeaponIsActive, mwID, True) +def GetIsActiveMagicWeapon(curPlayer, mwID, lv=1): + #获取法宝是否达到X级 + curMWLV = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_MagicWeaponLV % mwID) + return curMWLV >= lv -def SetMagicWeaponActiveState(curPlayer, mwID, isActive=True): - #设置法宝激活状态 - GameWorld.SetDictValueByBit(curPlayer, ChConfig.Def_PDict_MagicWeaponIsActive, mwID, isActive, True) - return - -def ActiveMagicWeapon(curPlayer, succID): - ##激活法宝 - mwID = GetMWIDBySuccID(succID) - if mwID == None: - return - - isActive = GetIsActiveMagicWeapon(curPlayer, mwID) - if isActive: - return - succIDList = GetNeedSuccIDByMWID(mwID) - needExp = len(succIDList) - curExp = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_MagicWeaponExp % mwID) - - if curExp >= needExp: - return - - newExp = min(needExp, curExp + 1) - PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_MagicWeaponExp % mwID, newExp) - DataRecordPack.DR_MagicWeaponExp(curPlayer, mwID, succID, newExp, needExp) - ipyData = GetWMIpyData(mwID) - needItemDict = ipyData.GetNeedItem() - #GameWorld.DebugLog(' 激活法宝 mwID=%s,curExp=%s,succIDList=%s' % (mwID, newExp,succIDList)) - if newExp >= needExp and not needItemDict: - #成就条件达成 激活法宝 +def ActiveMagicWeaponByFB(curPlayer, mapID, lineID, passLV=0): + ##通关副本激活法宝(人族、魔族法宝) + ipyData = IpyGameDataPY.GetIpyGameDataByCondition('MagicWeaponFB', {'LineID':lineID, 'Level':passLV}) + if ipyData: + mwID = ipyData.GetMWID() + GameWorld.Log('更新魔族副本关卡 mwID=%s,level=%s' % (mwID, passLV), curPlayer.GetID()) + PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_MWFBPassLevel % mwID, passLV) + Sycn_MagicWeaponLV(curPlayer, mwID) + EventShell.EventRespons_MagicWeaponFBPassLV(curPlayer, mwID, passLV) + ipyDataList = IpyGameDataPY.GetIpyGameDataByCondition('MagicWeaponFB', {'LineID':lineID}, True) + maxLevel = ipyDataList[-1].GetLevel() + if passLV >= maxLevel: + DoActiveMW(curPlayer, mwID) + else: + CalcMagicWeaponAttr(curPlayer) + PlayerControl.PlayerControl(curPlayer).RefreshPlayerAttrState() + else: + ipyData = IpyGameDataPY.GetIpyGameDataByCondition('Treasure', {'FBMapID':mapID, 'FBLineID':lineID}) + if not ipyData: + return + if curPlayer.GetLV() < ipyData.GetNeedLV(): + GameWorld.Log('通关副本激活法宝 ,等级不足!!!mwID=%s, needLV=%s' % (mwID, ipyData.GetNeedLV())) + return + mwID = ipyData.GetID() DoActiveMW(curPlayer, mwID) - return -def DoActiveMW(curPlayer, mwID, mwLV=0): +def DoActiveMW(curPlayer, mwID, mwLV=1): if not GetWMIpyData(mwID): return PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_MagicWeaponLV % mwID, mwLV) - if mwLV == 0: - SetMagicWeaponActiveState(curPlayer, mwID) - #通知 - NotifyMagicWeapon(curPlayer) - + if mwLV == 1: + if mwID in IpyGameDataPY.GetFuncEvalCfg('UnblockTreasure'): PlayerControl.NotifyCode(curPlayer, 'UnblockTreasure', [curPlayer.GetName(), mwID]) else: sysMark = IpyGameDataPY.GetFuncEvalCfg('UnblockTreasure', 2, {}).get(mwID, 'UnblockTreasure') PlayerControl.WorldNotify(0, sysMark, [curPlayer.GetName(), mwID]) - #任务 - EventShell.EventRespons_OnActiveMagicWeapon(curPlayer, mwID) - else: - - #通知客户端等级 - Sycn_MagicWeaponLV(curPlayer, mwID) - EventShell.EventRespons_MagicWeaponLV(curPlayer, mwID, mwLV) + + EventShell.EventRespons_MagicWeaponLV(curPlayer, mwID, mwLV) + #通知客户端等级 + Sycn_MagicWeaponLV(curPlayer, mwID) #成就 PlayerSuccess.DoAddSuccessProgress(curPlayer, ShareDefine.SuccType_GetMagicWeapon, 1, [mwID, mwLV]) @@ -145,25 +123,7 @@ skillIDList = upIpyData.GetUnLockSkill() for skillID in skillIDList: GiveSkill(curPlayer, skillID, GameWorld.GetGameWorld().GetTick()) - #物品奖励 - itemAward = upIpyData.GetItemAward() - if itemAward: - itemID, itemCnt, isBind = itemAward - packSpace = ItemCommon.GetItemPackSpace(curPlayer, IPY_GameWorld.rptItem, 1) - if 1 > packSpace: - PlayerControl.SendMailByKey('TreasureWakeUp', [curPlayer.GetID()], [itemAward]) - else: - ItemControler.GivePlayerItem(curPlayer, itemID, itemCnt, 0, [IPY_GameWorld.rptItem], event=["MWAward", False, {"mwID":mwID}]) - activeMWID = upIpyData.GetActiveMWID() - if activeMWID == mwID: - GameWorld.ErrLog(' TreasureUp.txt 配置异常 不可激活自身法宝 mwID=%s' % mwID) - elif activeMWID: - DoActiveMW(curPlayer, activeMWID) - - #激活魂 -# activeSoulID = upIpyData.GetActiveSoulID() -# if activeSoulID: -# __DoActiveMWSoul(curPlayer, activeSoulID, False) + CalcMagicWeaponAttr(curPlayer) PlayerControl.PlayerControl(curPlayer).RefreshPlayerAttrState() @@ -181,32 +141,6 @@ def GetWMIpyData(mwID):return IpyGameDataPY.GetIpyGameData('Treasure', mwID) - - -def GetNeedSuccIDByMWID(mwID, ipyData=None): - ##获取法宝ID开启需要完成的成就ID - if not ipyData: - ipyData = GetWMIpyData(mwID) - if not ipyData: - return [] - succIDList = list(ipyData.GetSuccID()) - return succIDList - - -def GetMWIDBySuccID(succID): - global g_succInfoDict - - if not g_succInfoDict: - ipyDataMgr = IpyGameDataPY.IPY_Data() - for i in xrange(ipyDataMgr.GetTreasureCount()): - ipyData = ipyDataMgr.GetTreasureByIndex(i) - mwID = ipyData.GetID() - succIDList = GetNeedSuccIDByMWID(mwID, ipyData) - for succid in succIDList: - if succid in g_succInfoDict: - GameWorld.ErrLog(' 存在相同成就激活条件的法宝 %s 和 %s' % (mwID, g_succInfoDict[succid])) - g_succInfoDict[succid] = mwID - return g_succInfoDict.get(succID) def GetMWActiveCntTotal(curPlayer): @@ -270,26 +204,6 @@ PlayerControl.PlayerControl(curPlayer).RefreshSkillFightPowerEx(skillResID, 0) return - -def NotifyMagicWeapon(curPlayer, isLogin=False): - #通知法宝信息 - packData = ChPyNetSendPack.tagMCMagicWeaponData() - packData.Clear() - packData.MagicWeaponID = [] - - ipyDataMgr = IpyGameDataPY.IPY_Data() - for i in xrange(ipyDataMgr.GetTreasureCount()): - ipyData = ipyDataMgr.GetTreasureByIndex(i) - magicWeaponID = ipyData.GetID() - isActive = GetIsActiveMagicWeapon(curPlayer, magicWeaponID) - if not isActive: - continue - packData.MagicWeaponID.append(magicWeaponID) - - packData.Num = len(packData.MagicWeaponID) - if packData.Num or isLogin: - NetPackCommon.SendFakePack(curPlayer, packData) - return ##-------------------------------------------------------------------------------------------------- @@ -386,11 +300,7 @@ if isActive: GameWorld.DebugLog(' 该法宝已开启! mwID=%s' % mwID) return - succIDList = GetNeedSuccIDByMWID(mwID) - curExp = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_MagicWeaponExp % mwID) - if curExp < len(succIDList): - GameWorld.DebugLog(' 该法宝所需成就未完成! mwID=%s, curExp=%s, succIDList=%s' % (mwID, curExp, succIDList)) - return + #消耗物品判断 ipyData = GetWMIpyData(mwID) needItemDict = ipyData.GetNeedItem() @@ -602,16 +512,15 @@ for mwID in needCalList: mwLv = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_MagicWeaponLV % mwID) curUpExp = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_MagicWeaponUpExp % mwID) - state = GetIsClickMagicWeapon(curPlayer, mwID) + FBPassLV = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_MWFBPassLevel % mwID) isWear = GetIsWearMagicWeapon(curPlayer, mwID) - if isAll and not mwLv and not curUpExp and not state and not FBPassLV and not isWear: + if isAll and not mwLv and not curUpExp and not FBPassLV and not isWear: continue pack = ChPyNetSendPack.tagMCMagicWeaponInfo() pack.MWID = mwID pack.LV = mwLv pack.Exp = curUpExp - pack.State = state pack.FBPassLV = FBPassLV pack.IsWear = isWear sendPack.InfoList.append(pack) @@ -620,34 +529,6 @@ NetPackCommon.SendFakePack(curPlayer, sendPack) return - -#// A5 16 法宝状态记录 #tagCMMagicWeaponState -# -#struct tagCMMagicWeaponState -# -#{ -# tagHead Head; -# DWORD MWID; //法宝ID -#}; -def SaveMagicWeaponState(index, clientData, tick): - curPlayer = GameWorld.GetPlayerManager().GetPlayerByIndex(index) - mwID = clientData.MWID - if GetIsClickMagicWeapon(curPlayer, mwID): - return - SetMagicWeaponClickState(curPlayer, mwID) - Sycn_MagicWeaponLV(curPlayer, mwID) - return - - -def GetIsClickMagicWeapon(curPlayer, mwID): - #获取法宝是否点击认主 - return GameWorld.GetDictValueByBit(curPlayer, ChConfig.Def_PDict_MagicWeaponIsClick, mwID, True) - - -def SetMagicWeaponClickState(curPlayer, mwID, state=1): - #设置法宝是否点击认主状态 - GameWorld.SetDictValueByBit(curPlayer, ChConfig.Def_PDict_MagicWeaponIsClick, mwID, state, True) - return #// A5 1D 法宝佩戴 #tagCMWearMagicWeapon @@ -691,13 +572,3 @@ GameWorld.SetDictValueByBit(curPlayer, ChConfig.Def_PDict_MagicWeaponIsWear, mwID, state, True) return - -def UptateMWFBPasslv(curPlayer, mwID, passLV): - GameWorld.Log('更新关卡 mwID=%s,level=%s' % (mwID, passLV), curPlayer.GetID()) - PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_MWFBPassLevel % mwID, passLV) - CalcMagicWeaponAttr(curPlayer) - PlayerControl.PlayerControl(curPlayer).RefreshPlayerAttrState() - Sycn_MagicWeaponLV(curPlayer, mwID) - - EventShell.EventRespons_MagicWeaponFBPassLV(curPlayer, mwID, passLV) - return -- Gitblit v1.8.0