From f460b6035d693dd40c361f7c289c5dac2a2a32a1 Mon Sep 17 00:00:00 2001
From: hxp <ale99527@vip.qq.com>
Date: 星期二, 16 十月 2018 16:30:12 +0800
Subject: [PATCH] 4201 【主干】【后端】新增战斗力参数:移动速度百分比
---
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerMagicWeapon.py | 104 +++++++++++++++++++++++++++++++++++++++++-----------
1 files changed, 82 insertions(+), 22 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 d4e1e9b..06ca73b 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerMagicWeapon.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerMagicWeapon.py
@@ -157,6 +157,11 @@
elif activeMWID:
DoActiveMW(curPlayer, activeMWID)
+ #激活魂
+ activeSoulID = upIpyData.GetActiveSoulID()
+ if activeSoulID:
+ __DoActiveMWSoul(curPlayer, activeSoulID, False)
+
CalcMagicWeaponAttr(curPlayer)
PlayerControl.PlayerControl(curPlayer).RefreshPlayerAttrState()
@@ -220,9 +225,10 @@
activeCnt += 1
return activeCnt
-def GetPotentialsNextSkillID(skillID):
- #通过潜力技能ID获取对应的下一个技能ID
+def GetPotentialsSkillInfo(curPlayer):
+ #通过潜力技能ID获取对应的下一个技能ID {skillUseType:{skillid:[skilllv,nextSkillid,addPower,]}}
global g_potentialsSkillDict
+
if not g_potentialsSkillDict:
g_potentialsSkillDict = {}
ipyDataMgr = IpyGameDataPY.IPY_Data()
@@ -230,10 +236,31 @@
ipyData = ipyDataMgr.GetTreasureByIndex(i)
mwID = ipyData.GetID()
skillIDList = ipyData.GetPotentials()
- for i, curSkillID in enumerate(skillIDList):
- nextSkillID = skillIDList[i+1] if i+1 < len(skillIDList) else 0
- g_potentialsSkillDict[curSkillID] = nextSkillID
- return g_potentialsSkillDict.get(skillID, 0)
+ addPowerList = ipyData.GetSkillPower()
+ lastSkillUseType = 0
+ for curSkillID in skillIDList:
+ skillData = GameWorld.GetGameData().FindSkillByType(curSkillID, 1)
+ if skillData == None:
+ GameWorld.DebugLog("GetPotentialsSkillInfo() hasn't find skill(%s)" % curSkillID)
+ continue
+ if lastSkillUseType != skillData.GetUseType():
+ index = 0
+ else:
+ index +=1
+ lastSkillUseType = skillData.GetUseType()
+ addPower = addPowerList[index]
+
+ preSkillID = skillData.GetLearnSkillReq()
+ if not preSkillID:
+ continue
+ skillUseType = skillData.GetUseType()
+ preSkilllv = skillData.GetLearnSkillLV()
+ if skillUseType not in g_potentialsSkillDict:
+ g_potentialsSkillDict[skillUseType] = {}
+ g_potentialsSkillDict[skillUseType][preSkillID] = [preSkilllv, curSkillID, addPower]
+ curskillUseType = pow(2, curPlayer.GetJob())
+
+ return g_potentialsSkillDict.get(curskillUseType, {})
## 给技能
# @param curPlayer
@@ -385,22 +412,25 @@
PlayerControl.WorldNotify(0, 'SkillPotential2', [curPlayer.GetName(), skillTypeID, upSkillLv, newSkillID])
- if SkillCommon.isPassiveAttr(upSkill) or newSkillIsPassive:
+ #通知技能已升级成功
+ hasUnlockSkill = False
+ nextSkillDict = GetPotentialsSkillInfo(curPlayer)
+ if skillTypeID in nextSkillDict:
+ needSkilllv,nextSkillID = nextSkillDict[skillTypeID][:2]
+ if upSkillLv == needSkilllv:
+ PlayerControl.WorldNotify(0, 'SkillPotential1', [curPlayer.GetName(), skillTypeID, upSkillLv, nextSkillID])
+ CalcMagicWeaponAttr(curPlayer)
+ hasUnlockSkill = True
+
+ maxLV = upSkill.GetSkillMaxLV()
+ if upSkillLv == maxLV:
+ PlayerControl.WorldNotify(0, 'SkillPotential3', [curPlayer.GetName(), skillTypeID, maxLV])
+
+ if SkillCommon.isPassiveAttr(upSkill) or newSkillIsPassive or hasUnlockSkill:
curControl.RefreshPlayerAttrState()
curControl.RefreshSkillFightPowerEx(upSkill.GetSkillID(), beforeFightPower)
PassiveBuffEffMng.GetPassiveEffManager().RegistPassiveEff(curPlayer, upSkill.GetSkillID())
-
- #通知技能已升级成功
- nextSkillID = GetPotentialsNextSkillID(skillTypeID)
- if nextSkillID:
- nextSkill = GameWorld.GetGameData().FindSkillByType(nextSkillID, 1)
- if nextSkill and nextSkill.GetLearnSkillReq() == skillTypeID and upSkillLv == nextSkill.GetLearnSkillLV():
- PlayerControl.WorldNotify(0, 'SkillPotential1', [curPlayer.GetName(), skillTypeID, upSkillLv, nextSkillID])
-
- maxLV = upSkill.GetSkillMaxLV()
- if upSkillLv == maxLV:
- PlayerControl.WorldNotify(0, 'SkillPotential3', [curPlayer.GetName(), skillTypeID, maxLV])
#获得技能等级
#curSkillLV = curSkill.GetSkillLV()
@@ -447,7 +477,7 @@
allAttrList1 = [{} for _ in range(4)] #人族法宝
allAttrList2 = [{} for _ in range(4)] #魔族法宝
allAttrList3 = [{} for _ in range(4)] #仙族法宝
-
+
signDayMWID = IpyGameDataPY.GetFuncCfg('MWSignDayAttr', 2)
ipyDataMgr = IpyGameDataPY.IPY_Data()
for i in xrange(ipyDataMgr.GetTreasureCount()):
@@ -465,7 +495,7 @@
# attrDict = refineipyData.GetTreasureAttr()
# GameWorld.AddDictValue(allAttrDict, attrDict)
#=======================================================================
-
+ treasureType = treasureIpyData.GetTreasureType()
#等级属性
curMWLV = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_MagicWeaponLV % magicWeaponID)
for lv in xrange(curMWLV+1):
@@ -473,6 +503,7 @@
if upIpyData:
attrDict = upIpyData.GetAddAttr()
GameWorld.AddDictValue(allAttrDict, attrDict)
+
if magicWeaponID == signDayMWID:
#签到属性
totalSignNum = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_TotalSignNum) # 总签到天数
@@ -481,7 +512,7 @@
addAttr[int(attid)] = attnum * totalSignNum
GameWorld.AddDictValue(allAttrDict, addAttr)
- treasureType = treasureIpyData.GetTreasureType()
+
for effID, value in allAttrDict.items():
if treasureType == 1:
PlayerControl.CalcAttrDict_Type(effID, value, allAttrList1)
@@ -492,9 +523,27 @@
else:
GameWorld.ErrLog("未知法宝属性, magicWeaponID=%s,treasureType=%s,effID=%s,value=%s"
% (magicWeaponID, treasureType, effID, value), curPlayer.GetPlayerID())
+
PlayerControl.SetCalcAttrListValue(curPlayer, ChConfig.Def_CalcAttrFunc_MagicWeapon1, allAttrList1)
PlayerControl.SetCalcAttrListValue(curPlayer, ChConfig.Def_CalcAttrFunc_MagicWeapon2, allAttrList2)
PlayerControl.SetCalcAttrListValue(curPlayer, ChConfig.Def_CalcAttrFunc_MagicWeapon3, allAttrList3)
+ #技能解锁战力
+ nextSkillDict = GetPotentialsSkillInfo(curPlayer)
+ addPowerDict = {}
+ for skillID, info in nextSkillDict.items():
+ needSkilllv, nextSkillID, addPower = info
+ skillManager = curPlayer.GetSkillManager()
+ curSkill = skillManager.FindSkillBySkillTypeID(skillID)
+ if not curSkill:
+ continue
+ curSkillLV = curSkill.GetSkillLV()
+ if curSkillLV < needSkilllv:
+ continue
+ mfpType = ChConfig.Def_SkillFuncType_MFPType.get(curSkill.GetFuncType(), ShareDefine.Def_MFPType_Role)
+ addPowerDict[mfpType] = addPowerDict.get(mfpType, 0) + addPower
+
+ for mfpType, addPower in addPowerDict.items():
+ curPlayer.SetDict(ChConfig.Def_PlayerKey_MFPEx % mfpType, addPower)
return
#// A5 77 玩家精炼法宝 #tagCMMWRefine
@@ -668,6 +717,7 @@
elif curType == 2:
#穿戴三阶橙色1星或四阶紫色1星以上头盔
playerEquip = curPlayer.GetItemManager().GetPack(IPY_GameWorld.rptEquip)
+ SamboSpecialUnlock = IpyGameDataPY.GetFuncEvalCfg('SamboSpecialUnlock')
for equipIndex in xrange(playerEquip.GetCount()):
curEquip = playerEquip.GetAt(equipIndex)
if curEquip.IsEmpty():
@@ -675,7 +725,11 @@
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
@@ -999,17 +1053,23 @@
GameWorld.DebugLog(' 激活法宝之魂 成就未完成 soulID=%s,succID=%s'%(soulID, succID))
return
+ __DoActiveMWSoul(curPlayer, soulID)
+ return
+
+def __DoActiveMWSoul(curPlayer, soulID, isRefreshAttr=True):
GameWorld.SetDictValueByBit(curPlayer, ChConfig.Def_PDict_MWSoulActiveState, soulID, 1, True)
#任务
EventShell.EventRespons_MWSoulActive(curPlayer, soulID)
CalcMagicWeaponSoulAttr(curPlayer)
- PlayerControl.PlayerControl(curPlayer).RefreshPlayerAttrState()
+ if isRefreshAttr:
+ PlayerControl.PlayerControl(curPlayer).RefreshPlayerAttrState()
#通知
Sycn_MWPrivilegeData(curPlayer, soulID)
return
+
def GetIsActiveMWSoul(curPlayer, soulID):
#获取法宝之魂是否已激活
return GameWorld.GetDictValueByBit(curPlayer, ChConfig.Def_PDict_MWSoulActiveState, soulID)
--
Gitblit v1.8.0