From f089bf39d557fc228f7bd3b2eb8c85c7b402e7dc Mon Sep 17 00:00:00 2001
From: hch <305670599@qq.com>
Date: 星期五, 02 十一月 2018 18:40:13 +0800
Subject: [PATCH] 4575 脱机挂测试
---
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerMagicWeapon.py | 114 ++++++++++++++++++++++++++++++++++++++++++++------------
1 files changed, 89 insertions(+), 25 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 08ecc90..5a1464a 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()
@@ -409,12 +439,21 @@
curPlayer.Sync_MakeItemAnswer(ShareDefine.Def_mitMagicWeaponSkillUp, 1)
- SetMWPrivilegeData(curPlayer, ChConfig.MWPrivilege_MWSkillUp, 1, True)
+ SetMWPrivilegeData(curPlayer, ChConfig.MWPrivilege_MWSkillUp, GetSPSkillTotalLV(curPlayer))
PlayerSuccess.DoAddSuccessProgress(curPlayer, ShareDefine.SuccType_MWSkillUp, 1, [skillTypeID])
EventShell.EventRespons_MWSkillUp(curPlayer)
return
-
+def GetSPSkillTotalLV(curPlayer):
+ #潜力技能总等级
+ totalLV = 0
+ skillManager = curPlayer.GetSkillManager()
+ for i in xrange(skillManager.GetSkillCount()):
+ curSkill = skillManager.GetSkillByIndex(i)
+ if curSkill.GetFuncType() != ChConfig.Def_SkillFuncType_FbSPSkill:
+ continue
+ totalLV += curSkill.GetSkillLV()
+ return totalLV
def NotifyMagicWeapon(curPlayer, isLogin=False):
#通知法宝信息
@@ -447,7 +486,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 +504,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 +512,7 @@
if upIpyData:
attrDict = upIpyData.GetAddAttr()
GameWorld.AddDictValue(allAttrDict, attrDict)
+
if magicWeaponID == signDayMWID:
#签到属性
totalSignNum = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_TotalSignNum) # 总签到天数
@@ -481,7 +521,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 +532,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
@@ -750,7 +808,7 @@
succCnt = ipyDataMgr.GetXBXZCount()
if not succCnt:
return
- maxSuccid = ipyDataMgr.GetSuccessByIndex(succCnt-1).GetID()
+ maxSuccid = ipyDataMgr.GetXBXZByIndex(succCnt-1).GetID()
recordIndexList = range(maxSuccid / 31+1)
succFARPack = ChPyNetSendPack.tagMCXBXZAwardRecordList()
@@ -1004,17 +1062,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