From 8a5a4dc89554504aa6f106744498319b8ce4f2b8 Mon Sep 17 00:00:00 2001
From: xdh <xiefantasy@qq.com>
Date: 星期三, 20 三月 2019 10:53:39 +0800
Subject: [PATCH] 6381 【后端】【2.0】任务接口开发
---
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerMagicWeapon.py | 502 +++++++++++++++----------------------------------------
1 files changed, 136 insertions(+), 366 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 9451718..375d629 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerMagicWeapon.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerMagicWeapon.py
@@ -45,7 +45,6 @@
# @return None
def PlayerMagicWeaponLogin(curPlayer):
NotifyMagicWeapon(curPlayer, True)
- Sycn_MagicWeaponRefineLV(curPlayer)
SyncXBXZAwardRecord(curPlayer)
Sycn_MagicWeaponLV(curPlayer)
Sycn_MWPrivilegeData(curPlayer)
@@ -151,8 +150,7 @@
if 1 > packSpace:
PlayerControl.SendMailByKey('TreasureWakeUp', [curPlayer.GetID()], [itemAward])
else:
- ItemControler.GivePlayerItem(curPlayer, itemID, itemCnt, isBind,
- [IPY_GameWorld.rptItem], True, showSysInfo=True, event=["MWAward", False, {"mwID":mwID}])
+ 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)
@@ -227,43 +225,6 @@
activeCnt += 1
return activeCnt
-def GetPotentialsSkillInfo(curPlayer):
- #通过潜力技能ID获取对应的下一个技能ID {skillUseType:{skillid:[skilllv,nextSkillid,addPower,]}}
- global g_potentialsSkillDict
-
- if not g_potentialsSkillDict:
- g_potentialsSkillDict = {}
- ipyDataMgr = IpyGameDataPY.IPY_Data()
- for i in xrange(ipyDataMgr.GetTreasureCount()):
- ipyData = ipyDataMgr.GetTreasureByIndex(i)
- mwID = ipyData.GetID()
- skillIDList = ipyData.GetPotentials()
- 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
# @param skillResID 技能源ID
@@ -301,174 +262,6 @@
return
-
-#// A5 0D 升级法宝技能 #tagCMMagicWeaponSkillUp
-#
-#struct tagCMMagicWeaponSkillUp
-#{
-# tagHead Head;
-# WORD SkillTypeID;
-# BYTE CostIndex;
-#};
-def OnMagicWeaponSkillUp(index, clientData, tick):
- curPlayer = GameWorld.GetPlayerManager().GetPlayerByIndex(index)
- skillTypeID = clientData.SkillTypeID
- costIndex = clientData.CostIndex #0代表未选中 1代表第一个
-
- curSkillType = None
- SPSkillTypeDict = IpyGameDataPY.GetFuncEvalCfg('SPSkillType')
- for skillType, skillIDList in SPSkillTypeDict.items():
- if skillTypeID in skillIDList:
- curSkillType = int(skillType)
- break
- if curSkillType == None:
- #不是法宝技能
- return
-
- #获得玩家技能管理器
- skillManager = curPlayer.GetSkillManager()
- #获得技能
- curSkill = skillManager.FindSkillBySkillTypeID(skillTypeID)
- if curSkill == None:
- curSkillLV = 0
- beforeFightPower = 0
- else:
- curSkillLV = curSkill.GetSkillLV()
- beforeFightPower = curSkill.GetFightPower()
- if curSkillLV == curSkill.GetSkillMaxLV():
- #已经是最高等级
- PlayerControl.NotifyCode(curPlayer, "UseMagicLost16")
- return
-
- upSkillLv = curSkillLV + 1
- curSkillID = skillTypeID if not curSkill else curSkill.GetSkillID()
- upSkill = GameWorld.GetGameData().FindSkillByType(skillTypeID, upSkillLv)
- if not upSkill:
- GameWorld.DebugLog("技能升级配表错误 ID=%s lv=%s"%(skillTypeID, upSkillLv))
- return
-
- if not SkillShell.CheckLearnSkillCondition(curPlayer, upSkill):
- return
-
- #升级技能消耗
- ipyData = IpyGameDataPY.GetIpyGameData('TreasureSkill', curSkillType, upSkillLv)
- if not ipyData:
- return
-
- needSP = ipyData.GetNeedPoint()
- if PlayerControl.GetZhenQi(curPlayer) < needSP:
- GameWorld.DebugLog("法宝sp不足,无法升级技能!needSP=%s,skillTypeID=%s" % (needSP, skillTypeID), curPlayer.GetPlayerID())
- return
-
- initRate = ipyData.GetInitRate() #初始概率
- itemIndexList = []
-
- if initRate != ShareDefine.Def_MaxRateValue and costIndex > 0:
- #满概率不消耗道具
- needItemIDList = ipyData.GetNeedItemID()
- needItemCntList = ipyData.GetNeedItemCnt()
- maxRateList = ipyData.GetMaxRate()
- if costIndex - 1 >= len(needItemIDList):
- GameWorld.Log("法宝技能升级,costIndex=%s 错误" % costIndex)
- return
- needItemID, needItemCnt, initRate = needItemIDList[costIndex - 1], needItemCntList[costIndex - 1], maxRateList[costIndex - 1]
- itemPack = curPlayer.GetItemManager().GetPack(IPY_GameWorld.rptItem)
- isEnough, itemIndexList = ItemCommon.GetItem_FromPack_ByID(needItemID, itemPack, needItemCnt)
- if not isEnough:
- GameWorld.DebugLog("升级法宝技能() up skill(%s) item(%s) no enough" \
- % (upSkill.GetSkillID(), needItemID))
- return
-
-
- #扣物品
- if itemIndexList:
- ItemCommon.ReduceItem(curPlayer, itemPack, itemIndexList, needItemCnt, False, ChConfig.ItemDel_MagicWeapon,
- {"SkillTypeID":skillTypeID, "SkillLV":curSkillLV})
-
- #付钱
- #infoDict = {"SkillID":skillTypeID, "SkillLV":upSkillLv, ChConfig.Def_Cost_Reason_SonKey:upSkill.GetSkillName()}
- if not PlayerControl.PlayerLostZhenQi(curPlayer, needSP):
- return
- playerID = curPlayer.GetPlayerID()
- maxRateValue = ShareDefine.Def_MaxRateValue
- randValue = random.randint(0, maxRateValue-1)
- canHappen = randValue < initRate
- GameWorld.DebugLog("canHappen=%s,randValue=%s,initRate=%s,maxRateValue=%s"
- % (canHappen, randValue, initRate, maxRateValue), playerID)
- # 不是百分百成功的记录合成流向
- if initRate != maxRateValue:
- drDict = {"PlayerID":playerID, "AccID":curPlayer.GetAccID(), "skillTypeID":skillTypeID, "IsSuccess":canHappen,
- "initRate":initRate, "randValue":randValue, "maxRateValue":maxRateValue}
-
- DataRecordPack.SendEventPack("MagicWeaponSkillUp", drDict, curPlayer)
-
- if not canHappen:
- GameWorld.DebugLog("法宝技能升级,curSkillID=%s, maxRate=%s 升级失败" % (curSkillID, initRate))
- curPlayer.Sync_MakeItemAnswer(ShareDefine.Def_mitMagicWeaponSkillUp, 0)
- return
- curControl = PlayerControl.PlayerControl(curPlayer)
- skillManager.LVUPSkillByID(curSkillID)
- #触发学习新技能
- newSkillIsPassive = False
- potentialSkillLearnDict = IpyGameDataPY.GetFuncEvalCfg('PotentialSkillLearn')
- if str(skillTypeID) in potentialSkillLearnDict:
- needSkllLV, newSkillID = potentialSkillLearnDict[str(skillTypeID)]
- if upSkillLv == needSkllLV:
- if not skillManager.FindSkillBySkillTypeID(newSkillID):
- newSkill = GameWorld.GetGameData().FindSkillByType(newSkillID, 1)
- if newSkill:
- skillManager.LVUPSkillByID(newSkillID)
- GameWorld.DebugLog(' 法宝技能升级 skillTypeID=%s, upSkillLv=%s, 触发学习技能%s' % (skillTypeID, upSkillLv, newSkillID))
- curControl.RefreshSkillFightPowerEx(newSkillID, 0)
- PassiveBuffEffMng.GetPassiveEffManager().RegistPassiveEff(curPlayer, newSkillID)
- if SkillCommon.isPassiveAttr(newSkill):
- newSkillIsPassive = True
- PlayerControl.WorldNotify(0, 'SkillPotential2', [curPlayer.GetName(), skillTypeID, upSkillLv, newSkillID])
-
-
- #通知技能已升级成功
- 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())
-
- #获得技能等级
- #curSkillLV = curSkill.GetSkillLV()
- GameWorld.DebugLog(' 法宝技能升级 skillTypeID=%s, upSkillLv=%s' % (skillTypeID, upSkillLv))
- DataRecordPack.DR_LearnORUPSkill(curPlayer, skillTypeID, upSkillLv)
-
- curPlayer.Sync_MakeItemAnswer(ShareDefine.Def_mitMagicWeaponSkillUp, 1)
-
- 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):
#通知法宝信息
packData = ChPyNetSendPack.tagMCMagicWeaponData()
@@ -500,15 +293,20 @@
allAttrList1 = [{} for _ in range(4)] #人族法宝
allAttrList2 = [{} for _ in range(4)] #魔族法宝
allAttrList3 = [{} for _ in range(4)] #仙族法宝
-
+ allAttrList4 = [{} for _ in range(4)] #王者法宝
+ mwTypeMfpTypeDict = {1:ShareDefine.Def_MFPType_MagicWeapon1,
+ 2:ShareDefine.Def_MFPType_MagicWeapon2,
+ 3:ShareDefine.Def_MFPType_MagicWeapon3,
+ 4:ShareDefine.Def_MFPType_MagicWeapon4}
+ addPowerDict = {} #额外战力
signDayMWID = IpyGameDataPY.GetFuncCfg('MWSignDayAttr', 2)
ipyDataMgr = IpyGameDataPY.IPY_Data()
for i in xrange(ipyDataMgr.GetTreasureCount()):
treasureIpyData = ipyDataMgr.GetTreasureByIndex(i)
magicWeaponID = treasureIpyData.GetID()
isActive = GetIsActiveMagicWeapon(curPlayer, magicWeaponID)
- if not isActive:
- continue
+# if not isActive:
+# continue
allAttrDict = {}
#=======================================================================
# #铸炼属性
@@ -519,23 +317,50 @@
# GameWorld.AddDictValue(allAttrDict, attrDict)
#=======================================================================
treasureType = treasureIpyData.GetTreasureType()
- #等级属性
- curMWLV = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_MagicWeaponLV % magicWeaponID)
- for lv in xrange(curMWLV+1):
- upIpyData = IpyGameDataPY.GetIpyGameDataNotLog('TreasureUp', magicWeaponID, lv)
- if upIpyData:
- attrDict = upIpyData.GetAddAttr()
+ if isActive:
+ mfpType = mwTypeMfpTypeDict.get(treasureType, ShareDefine.Def_MFPType_Role)
+ #等级属性
+ curMWLV = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_MagicWeaponLV % magicWeaponID)
+ for lv in xrange(curMWLV+1):
+ upIpyData = IpyGameDataPY.GetIpyGameDataNotLog('TreasureUp', magicWeaponID, lv)
+ if upIpyData:
+ attrDict = upIpyData.GetAddAttr()
+ GameWorld.AddDictValue(allAttrDict, attrDict)
+ addPowerDict[mfpType] = addPowerDict.get(mfpType, 0) + upIpyData.GetPowerEx()
+
+ if magicWeaponID == signDayMWID:
+ #签到属性
+ totalSignNum = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_TotalSignNum) # 总签到天数
+ addAttr = {}
+ for attid, attnum in IpyGameDataPY.GetFuncEvalCfg('MWSignDayAttr', 1, {}).items():
+ addAttr[int(attid)] = attnum * totalSignNum
+ GameWorld.AddDictValue(allAttrDict, addAttr)
+ #王者法宝属性
+ seasonID = IpyGameDataPY.GetFuncEvalCfg('MagicWeaponOfKing', 1, {}).get(magicWeaponID, 0)
+ kingAwardLV = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_CrossPK_SeasonAwardLV % seasonID)
+ kingMWIpyData = IpyGameDataPY.GetIpyGameDataNotLog('MagicWeaponOfKing', magicWeaponID, kingAwardLV)
+ if kingMWIpyData and GetIsWearMagicWeapon(curPlayer, magicWeaponID):
+ attrDict = kingMWIpyData.GetAddAttr()
GameWorld.AddDictValue(allAttrDict, attrDict)
+
+ fbpasslv = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_MWFBPassLevel % magicWeaponID)
+ #老号已激活的魔族法宝没有关卡属性,直接设置满关卡
+ if isActive and not fbpasslv:
+ ipyDataList = IpyGameDataPY.GetIpyGameDataByCondition('MagicWeaponFB', {'MWID':magicWeaponID}, True, False)
+ if ipyDataList:
+ maxLevel = ipyDataList[-1].GetLevel()
+ fbpasslv = maxLevel
+ PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_MWFBPassLevel % magicWeaponID, maxLevel)
+ GameWorld.Log('老号已激活的魔族法宝没有关卡属性,直接设置满关卡 magicWeaponID=%s,maxLevel=%s'%(magicWeaponID, maxLevel), curPlayer.GetID())
+ if fbpasslv: #副本关卡属性
+ fbipyData = IpyGameDataPY.GetIpyGameData('MagicWeaponFB', magicWeaponID, fbpasslv)
+ if fbipyData:
+ attrDict = fbipyData.GetAttrDict()
+ for effID, value in attrDict.items():
+ effID = int(effID)
+ allAttrDict[effID] = allAttrDict.get(effID, 0) + value
- if magicWeaponID == signDayMWID:
- #签到属性
- totalSignNum = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_TotalSignNum) # 总签到天数
- addAttr = {}
- for attid, attnum in IpyGameDataPY.GetFuncEvalCfg('MWSignDayAttr', 1, {}).items():
- addAttr[int(attid)] = attnum * totalSignNum
- GameWorld.AddDictValue(allAttrDict, addAttr)
-
-
+
for effID, value in allAttrDict.items():
if treasureType == 1:
PlayerControl.CalcAttrDict_Type(effID, value, allAttrList1)
@@ -543,6 +368,8 @@
PlayerControl.CalcAttrDict_Type(effID, value, allAttrList2)
elif treasureType == 3:
PlayerControl.CalcAttrDict_Type(effID, value, allAttrList3)
+ elif treasureType == 4:
+ PlayerControl.CalcAttrDict_Type(effID, value, allAttrList4)
else:
GameWorld.ErrLog("未知法宝属性, magicWeaponID=%s,treasureType=%s,effID=%s,value=%s"
% (magicWeaponID, treasureType, effID, value), curPlayer.GetPlayerID())
@@ -550,127 +377,9 @@
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)
+ PlayerControl.SetCalcAttrListValue(curPlayer, ChConfig.Def_CalcAttrFunc_MagicWeapon4, allAttrList4)
return
-#// A5 77 玩家精炼法宝 #tagCMMWRefine
-#
-#struct tagCMMWRefine
-#{
-# tagHead Head;
-# DWORD MWID; // 法宝ID
-# DWORD MaterialID; //材料ID
-#};
-def PlayerMWRefine(index, clientPack, tick):
- mwID = clientPack.MWID # 法宝ID
- materialID = clientPack.MaterialID # 提升概率物品ID
- curPlayer = GameWorld.GetPlayerManager().GetPlayerByIndex(index)
- playerID = curPlayer.GetPlayerID()
- allTreasureItemIDList = IpyGameDataPY.GetFuncEvalCfg("TreasureUpRateItem")
- if mwID not in allTreasureItemIDList:
- GameWorld.DebugLog("该法宝不能铸炼-法宝ID:%s" % mwID, playerID)
- return
-
- isActive = GetIsActiveMagicWeapon(curPlayer, mwID)
- if not isActive:
- GameWorld.DebugLog("法宝未激活,不能铸炼-法宝ID:%s" % mwID, playerID)
- return
-
- nextRefineLv = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_MagicWeaponRefineLV % mwID) + 1
- mwRefineIpyData = GetMWRefineIpyData(mwID, nextRefineLv)
- if not mwRefineIpyData:
- GameWorld.DebugLog("法宝已满级,不能铸炼-法宝ID:%s, nextRefineLv=%s" % (mwID, nextRefineLv), playerID)
- return
-
- # 所需炼丹炉等级
- alchemyLV = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_AlchemyLV)
- if alchemyLV < mwRefineIpyData.GetNeedAlchemyLV():
- GameWorld.DebugLog("炼丹炉等级不足,无法铸炼法宝-法宝ID:%s, nextRefineLv=%s,alchemyLV=%s,NeedAlchemyLV=%s"
- % (mwID, nextRefineLv, alchemyLV, mwRefineIpyData.GetNeedAlchemyLV()), playerID)
- return
-
- # 所需所有法宝等级
- needAllTreasureLV = mwRefineIpyData.GetNeedAllTreasureLV()
- for tID in allTreasureItemIDList:
- if curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_MagicWeaponRefineLV % tID) < needAllTreasureLV:
- GameWorld.DebugLog("所有法宝需达到对应等级后才可继续铸炼! needAllTreasureLV=%s" % needAllTreasureLV, playerID)
- return
-
- needItemDict = mwRefineIpyData.GetMaterial()
-
- fujiaRate = 0
- if materialID:
- treasureUpRateItem = IpyGameDataPY.GetFuncEvalCfg("TreasureUpRateItem", 2)
- if materialID not in treasureUpRateItem:
- GameWorld.ErrLog("该物品ID无法用于提升法宝铸炼概率!itemID=%s" % (materialID), playerID)
- return
- rateItemData = GameWorld.GetGameData().GetItemByTypeID(materialID)
- if not rateItemData:
- return
- fujiaRate = rateItemData.GetEffectByIndex(0).GetEffectValue(0)
- needItemDict[materialID] = 1
-
- itemPack = curPlayer.GetItemManager().GetPack(IPY_GameWorld.rptItem)
- lackItemDict, delInfoDict = ItemCommon.GetCostItemIndexList(needItemDict, itemPack)
- if lackItemDict:
- GameWorld.DebugLog("法宝铸炼材料不足!法宝ID:%s, nextRefineLv=%s,needItemDict=%s,lackItemDict=%s,hasItemDict=%s"
- % (mwID, nextRefineLv, needItemDict, lackItemDict, delInfoDict), playerID)
- return
- ItemCommon.DelCostItem(curPlayer, itemPack, delInfoDict, ChConfig.ItemDel_MagicWeapon)
-
- successRate = mwRefineIpyData.GetSuccessRate() + fujiaRate
- if GameWorld.CanHappen(successRate):
- PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_MagicWeaponRefineLV % mwID, nextRefineLv)
- skillID = mwRefineIpyData.GetOpenSkill()
- if skillID:
- GiveSkill(curPlayer, skillID, tick)
- CalcMagicWeaponAttr(curPlayer)
- PlayerControl.PlayerControl(curPlayer).RefreshPlayerAttrState()
- #通知客户端
- Sycn_MagicWeaponRefineLV(curPlayer, mwID)
- curPlayer.Sync_MakeItemAnswer(ShareDefine.Def_mitMWUpLevel, ChConfig.Def_ComposeState_Sucess)
- GameWorld.DebugLog("法宝铸炼成功! 法宝ID:%s, upRefineLv=%s,successRate=%s" % (mwID, nextRefineLv, successRate), playerID)
- else:
- curPlayer.Sync_MakeItemAnswer(ShareDefine.Def_mitMWUpLevel, ChConfig.Def_ComposeState_Fail)
- GameWorld.DebugLog("法宝铸炼失败! 法宝ID:%s, nextRefineLv=%s,successRate=%s" % (mwID, nextRefineLv, successRate), playerID)
-
- return
-
-def Sycn_MagicWeaponRefineLV(curPlayer, mwID= -1):
- if mwID == -1:
- needCalList = IpyGameDataPY.GetFuncEvalCfg("TreasureUpRateItem")
- else:
- needCalList = [mwID]
- sendPack = ChPyNetSendPack.tagMCMagicWeaponMsg()
- sendPack.MWInfo = []
- for mwID in needCalList:
- mwRefineLv = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_MagicWeaponRefineLV % mwID)
- if not mwRefineLv:
- continue
- pack = ChPyNetSendPack.tagMCMagicWeaponLV()
- pack.MWID = mwID
- pack.MWLV = mwRefineLv
- sendPack.MWInfo.append(pack)
- sendPack.Count = len(sendPack.MWInfo)
- if sendPack.Count:
- NetPackCommon.SendFakePack(curPlayer, sendPack)
- return
#// A5 0E 开启法宝 #tagCMOpenMagicWeapon
#
@@ -758,23 +467,23 @@
break
if cnt:
break
- elif curType == 3:
- #全身装备X星
- cnt = ChEquip.GetTotalEquipStars(curPlayer)
+# 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
+# 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
@@ -797,7 +506,7 @@
# 给物品
if awardItemList:
for itemID, itemCnt in awardItemList:
- ItemControler.GivePlayerItem(curPlayer, itemID, itemCnt, 1, [IPY_GameWorld.rptItem], True)
+ ItemControler.GivePlayerItem(curPlayer, itemID, itemCnt, 0, [IPY_GameWorld.rptItem])
#给钱
for moneyType, value in ipyData.GetMoney():
@@ -886,12 +595,14 @@
def Sycn_MagicWeaponLV(curPlayer, mwID= -1):
#通知法宝等级信息
if mwID == -1:
+ isAll = True
needCalList = []
ipyDataMgr = IpyGameDataPY.IPY_Data()
for i in xrange(ipyDataMgr.GetTreasureCount()):
ipyData = ipyDataMgr.GetTreasureByIndex(i)
needCalList.append(ipyData.GetID())
else:
+ isAll = False
needCalList = [mwID]
sendPack = ChPyNetSendPack.tagMCMagicWeaponLVInfo()
sendPack.InfoList = []
@@ -899,13 +610,17 @@
mwLv = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_MagicWeaponLV % mwID)
curUpExp = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_MagicWeaponUpExp % mwID)
state = GetIsClickMagicWeapon(curPlayer, mwID)
- if not mwLv and not curUpExp and not state:
+ 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:
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)
sendPack.Count = len(sendPack.InfoList)
if sendPack.Count:
@@ -934,7 +649,8 @@
if privilege == ChConfig.MWPrivilege_EquipPlus:
#强化加成
- addAttr = ChEquip.CalcAllEquipAllPlusLVAttr(curPlayer)
+ #境界改版,废弃
+ pass
else:
multiple = 1 #倍数
if singleValue:
@@ -954,6 +670,13 @@
privilegeIpyData = IpyGameDataPY.GetIpyGameDataNotLog('TreasurePrivilege', privilege)
if not privilegeIpyData:
return
+ curGotValue = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_MWSoulGotValue % privilege)
+ singleValue = privilegeIpyData.GetSingleValue()
+ if singleValue and curGotValue % singleValue:
+ fixGotValue = curGotValue/singleValue*singleValue
+ PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_MWSoulGotValue % privilege, fixGotValue)
+ GameWorld.Log('玩家法宝之魂已领的数据不是单次进度的倍数,修复! privilege=%s,curGotValue=%s, fixGotValue=%s'%(privilege, curGotValue, fixGotValue))
+
curValue = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_MWSoulCurValue % privilege)
newData = curValue + data if isAdd else data
maxValue = privilegeIpyData.GetMaxValue()
@@ -1004,8 +727,7 @@
return
PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_MWSoulGotItemState % privilege, 1)
for itemid, cnt, isBind in itemList:
- ItemControler.GivePlayerItem(curPlayer, int(itemid), int(cnt), isBind,
- [IPY_GameWorld.rptItem], True, showSysInfo=True, event=["MWSoulAward", False, {"privilege":privilege}])
+ ItemControler.GivePlayerItem(curPlayer, int(itemid), int(cnt), 0, [IPY_GameWorld.rptItem], event=["MWSoulAward", False, {"privilege":privilege}])
#通知
Sycn_MWPrivilegeData(curPlayer, privilege)
@@ -1060,6 +782,44 @@
GameWorld.SetDictValueByBit(curPlayer, ChConfig.Def_PDict_MagicWeaponIsClick, mwID % 100, state, True, [mwID / 100])
return
+#// A5 1D 法宝佩戴 #tagCMWearMagicWeapon
+#
+#struct tagCMWearMagicWeapon
+#
+#{
+# tagHead Head;
+# DWORD MWID; //法宝ID
+# BYTE State; //0-卸下 1-佩戴
+#};
+def OnWearMagicWeapon(index, clientData, tick):
+ curPlayer = GameWorld.GetPlayerManager().GetPlayerByIndex(index)
+ mwID = clientData.MWID
+ if not GetIsActiveMagicWeapon(curPlayer, mwID):
+ return
+ isWear = clientData.State
+ if isWear:
+ maxCnt = IpyGameDataPY.GetFuncCfg('MagicWeaponOfKing', 2)
+ hasWearCnt = 0
+ for mid in IpyGameDataPY.GetFuncEvalCfg('MagicWeaponOfKing', 1, {}):
+ if hasWearCnt >= maxCnt:
+ return
+ if GetIsWearMagicWeapon(curPlayer, mid):
+ hasWearCnt +=1
+
+ SetMagicWeaponWearState(curPlayer, mwID, isWear)
+ CalcMagicWeaponAttr(curPlayer)
+ PlayerControl.PlayerControl(curPlayer).RefreshPlayerAttrState()
+ Sycn_MagicWeaponLV(curPlayer, mwID)
+ return
+
+def GetIsWearMagicWeapon(curPlayer, mwID):
+ #获取法宝是否佩戴
+ return GameWorld.GetDictValueByBit(curPlayer, ChConfig.Def_PDict_MagicWeaponIsWear, mwID % 100, True, [mwID / 100])
+
+def SetMagicWeaponWearState(curPlayer, mwID, state):
+ #设置法宝是否佩戴
+ GameWorld.SetDictValueByBit(curPlayer, ChConfig.Def_PDict_MagicWeaponIsWear, mwID % 100, state, True, [mwID / 100])
+ return
#// A5 12 激活法宝之魂 #tagCMActiveMWSoul
#
@@ -1122,4 +882,14 @@
for attrID, attrValue in allAttrDict.items():
PlayerControl.CalcAttrDict_Type(attrID, attrValue, allAttrList)
PlayerControl.SetCalcAttrListValue(curPlayer, ChConfig.Def_CalcAttrFunc_MagicWeaponSoul, allAttrList)
+ 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
\ No newline at end of file
--
Gitblit v1.8.0