7339 子 【开发】【2.0】称号,灵宠,技能附带效果 / 【后端】【2.0】新增效果
| | |
| | | import PyGameData
|
| | | import GameFuncComm
|
| | | import EventShell
|
| | | import PlayerPet
|
| | |
|
| | | #关联类型
|
| | | (
|
| | |
| | | DoAddActivity(curPlayer, addValue, True)
|
| | | return
|
| | |
|
| | | def DoAddActivity(curPlayer, addValue, isMultiple=False):
|
| | | def DoAddActivityByLV(curPlayer, befLV, aftLV):
|
| | | ##升级增加活跃点
|
| | | perLVAddPoint = IpyGameDataPY.GetFuncCfg('ImmortalDomainActivePoint', 3)
|
| | | skillTypeID, perAddLV, addPoint, maxPoint = IpyGameDataPY.GetFuncEvalCfg('ImmortalDomainActivePoint', 4)
|
| | | learnSkillList, passiveSkillList = PlayerPet.GetPetLearnSkill(curPlayer)
|
| | | addValue = (aftLV-befLV)*perLVAddPoint
|
| | | if skillTypeID in passiveSkillList:
|
| | | for lv in xrange(befLV+1, aftLV+1):
|
| | | addValue += min((lv-1)/perAddLV * addPoint, maxPoint)
|
| | | DoAddActivity(curPlayer, addValue, False, True)
|
| | | return
|
| | |
|
| | | def AddActivityByLVOnLearnSkill(curPlayer, skillID):
|
| | | ## 获得技能时,处理增加升级获得活跃点效果
|
| | | skillTypeID, perAddLV, addPoint, maxPoint = IpyGameDataPY.GetFuncEvalCfg('ImmortalDomainActivePoint', 4)
|
| | | if skillID != skillTypeID:
|
| | | return
|
| | | curLV = curPlayer.GetLV()
|
| | | addValue = 0
|
| | | for lv in xrange(2, curLV+1):
|
| | | addValue += min((lv-1)/perAddLV * addPoint, maxPoint)
|
| | | DoAddActivity(curPlayer, addValue, False, True)
|
| | | return
|
| | |
|
| | | def DoAddActivity(curPlayer, addValue, isMultiple=False, isLVUp=False):
|
| | | if not addValue:
|
| | | return
|
| | | multiple = 1
|
| | |
| | | addValue = addValue + addExtraPoint
|
| | | curTotalPoint = __GetPDictValue(curPlayer, ChConfig.Def_PDict_Activity_TotalPoint)
|
| | | __SetPDictValue(curPlayer, ChConfig.Def_PDict_Activity_TotalPoint, curTotalPoint + addValue)
|
| | | AddCanCostActivityPoint(curPlayer, addValue)
|
| | | AddCanCostActivityPoint(curPlayer, addValue, isLVUp)
|
| | | historyPoint = __GetPDictValue(curPlayer, ChConfig.Def_PDict_ActivityHistoryPoint)
|
| | | __SetPDictValue(curPlayer, ChConfig.Def_PDict_ActivityHistoryPoint,
|
| | | min(ChConfig.Def_UpperLimit_DWord, historyPoint + addValue))
|
| | |
| | | return multiple, extraPointLimit
|
| | | return actRealmPointIpyData.GetMultiple(), actRealmPointIpyData.GetPointLimit()
|
| | |
|
| | | def AddCanCostActivityPoint(curPlayer, addValue):
|
| | | def AddCanCostActivityPoint(curPlayer, addValue, isLVUp):
|
| | | # 增加可消耗的活跃点
|
| | | curPoint = __GetPDictValue(curPlayer, ChConfig.Def_PDict_ActivityCanCostTotalPoint)
|
| | | __SetPDictValue(curPlayer, ChConfig.Def_PDict_ActivityCanCostTotalPoint, min(IpyGameDataPY.GetFuncCfg('ImmortalDomainActivePoint'), curPoint + addValue))
|
| | | if isLVUp:
|
| | | updPoint = min(ChConfig.Def_UpperLimit_DWord, curPoint + addValue)
|
| | | else:
|
| | | updPoint = min(IpyGameDataPY.GetFuncCfg('ImmortalDomainActivePoint'), curPoint + addValue)
|
| | | __SetPDictValue(curPlayer, ChConfig.Def_PDict_ActivityCanCostTotalPoint, updPoint)
|
| | | return
|
| | |
|
| | | def CostActivityPoint(curPlayer, costPoint, isOnlyCheck=False):
|
| | |
| | | if addPoint == None:
|
| | | raise Exception('玩家获得升级属性点异常, curLV = %s PlayerID = %s' % (curLV, curPlayerID))
|
| | | return
|
| | | |
| | | return int(addPoint) + GetFabaoAddPoint(curPlayer)
|
| | | multiple = GetLVAddPointMultiple(curPlayer)
|
| | | return int(addPoint+ GetFabaoAddPoint(curPlayer)) * multiple
|
| | |
|
| | | def GetAllPointByLV(curPlayer):
|
| | | ##获取当前等级可得到属性点数
|
| | |
| | | curLV = curPlayer.GetLV()
|
| | | if curLV < openLV:
|
| | | return 0
|
| | | # 初始点+升级点+境界点
|
| | | # 初始点+(升级点+法宝效果)*称号效果倍数+境界点
|
| | | setFreePoint = IpyGameDataPY.GetFuncCfg("LVUPAddPoint", 2)
|
| | | fabaoAddPoint = GetFabaoAddPoint(curPlayer)
|
| | | multiple = GetLVAddPointMultiple(curPlayer)
|
| | | addPointDict = IpyGameDataPY.GetFuncEvalCfg("LVUPAddPoint", 1, {})
|
| | | for rangLVs, point in addPointDict.items():
|
| | | if curLV < rangLVs[0]:
|
| | | continue
|
| | | setFreePoint += (point + fabaoAddPoint) * (min(curLV, rangLVs[1]) - rangLVs[0] + 1)
|
| | | setFreePoint += (point + fabaoAddPoint) * multiple * (min(curLV, rangLVs[1]) - rangLVs[0] + 1)
|
| | |
|
| | | #境界提升点数
|
| | | setFreePoint += curPlayer.GetOfficialRank() * IpyGameDataPY.GetFuncCfg("LVUPAddPoint", 3)
|
| | | return setFreePoint
|
| | |
|
| | | def GetLVAddPointMultiple(curPlayer):
|
| | | # 获取等级加点的倍数
|
| | | multiple = 1
|
| | | titleID = IpyGameDataPY.GetFuncCfg("TitleAddPoint")
|
| | | if titleID and curPlayer.GetDienstgradManager().GetDienstgrad(titleID):
|
| | | multiple = IpyGameDataPY.GetFuncCfg("TitleAddPoint", 2) or 1
|
| | | return multiple
|
| | |
|
| | | def GetFabaoAddPoint(curPlayer):
|
| | | #法宝额外增加玩家每级获得的灵根点
|
| | | mwID = IpyGameDataPY.GetFuncCfg('FabaoAddPoint', 1)
|
| | |
| | | import PassiveBuffEffMng
|
| | | import DataRecordPack
|
| | | import CrossPlayerData
|
| | | import GameFuncComm
|
| | | import ShareDefine
|
| | |
|
| | | import time
|
| | | #-------------------------------------------------------------
|
| | |
| | | __GiveSkill(curPlayer, skillID)
|
| | |
|
| | | CrossPlayerData.OnDienstgradChange(curPlayer, dienstgradID, 1)
|
| | | |
| | | if dienstgradID == IpyGameDataPY.GetFuncCfg("TitleAddPoint"):
|
| | | __DoTitleAddPoint(curPlayer)
|
| | | #重新刷新角色属性
|
| | | if isRefreshAttr:
|
| | | CalcAllDienstgradAttr(curPlayer)
|
| | |
| | | return True
|
| | |
|
| | |
|
| | | # 获得称号加点
|
| | | def __DoTitleAddPoint(curPlayer):
|
| | | if not GameFuncComm.GetFuncCanUse(curPlayer, ShareDefine.GameFuncID_AddPoint):
|
| | | # 未开启前不可加点,因为DoAddPointOpen会一次性补齐,避免意外情况多加了点数
|
| | | return
|
| | | addPointDict = IpyGameDataPY.GetFuncEvalCfg("LVUPAddPoint", 1, {})
|
| | | fabaoAddPoint = PlayerControl.GetFabaoAddPoint(curPlayer)
|
| | | multiple = PlayerControl.GetLVAddPointMultiple(curPlayer)
|
| | | curLV = curPlayer.GetLV()
|
| | | addFreePoint = 0
|
| | | for rangLVs, point in addPointDict.items():
|
| | | if curLV < rangLVs[0]:
|
| | | continue
|
| | | addFreePoint += (fabaoAddPoint + point) * (multiple-1) * (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 __GiveSkill(curPlayer, skillResID):
|
| | |
|
| | |
| | | sysMark = IpyGameDataPY.GetFuncEvalCfg('UnblockTreasure', 2, {}).get(mwID, 'UnblockTreasure')
|
| | | PlayerControl.WorldNotify(0, sysMark, [curPlayer.GetName(), mwID])
|
| | | if mwID == IpyGameDataPY.GetFuncCfg('FabaoAddPoint', 1):
|
| | | addPointDict = IpyGameDataPY.GetFuncEvalCfg("LVUPAddPoint", 1, {})
|
| | | fabaoAddPoint = IpyGameDataPY.GetFuncCfg('FabaoAddPoint', 2)
|
| | | 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))
|
| | | __DoFabaoAddPoint(curPlayer)
|
| | | |
| | |
|
| | | EventShell.EventRespons_MagicWeaponLV(curPlayer, mwID, mwLV)
|
| | | #通知客户端等级
|
| | |
| | | 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)
|
| | | multiple = PlayerControl.GetLVAddPointMultiple(curPlayer)
|
| | | curLV = curPlayer.GetLV()
|
| | | addFreePoint = 0
|
| | | for rangLVs, point in addPointDict.items():
|
| | | if curLV < rangLVs[0]:
|
| | | continue
|
| | | addFreePoint += fabaoAddPoint * multiple * (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)
|
| | |
|
| | |
|
| | |
| | | import CalcNoLineEffect
|
| | | import CrossPlayerData
|
| | | import CalcLineEffect
|
| | | import PlayerActivity
|
| | |
|
| | | import random
|
| | | import math
|
| | |
| | | #广播
|
| | | sysMark = sysMarkList[i] if i < len(sysMarkList) else 'PetUpLv'
|
| | | PlayerControl.WorldNotify(0, sysMark, [playerName, petNPCID, limitPetClassLV, skillid])
|
| | |
|
| | | #增加升级活跃点效果
|
| | | PlayerActivity.AddActivityByLVOnLearnSkill(curPlayer, skillid)
|
| | | |
| | | if not learnSkillList and updClassLV + 1 == maxClassLV:
|
| | | PlayerControl.WorldNotify(0, 'PetUpLvMax', [playerName, petNPCID])
|
| | | # 如果是当前出战的宠物, 则该宠物学习技能
|