| | |
| | | DamagePerPVPReduce = getattr(self, self.__AttrName % ChConfig.TYPE_Calc_DamagePerPVPReduce) * fpParam.GetCftDamagePerPVPReduce() # 伤害输出计算百分比PVP减少
|
| | | ComboRate = getattr(self, self.__AttrName % ChConfig.TYPE_Calc_ComboRate) # 连击几率
|
| | | ComboDamPer = getattr(self, self.__AttrName % ChConfig.TYPE_Calc_ComboDamPer) # 连击伤害
|
| | | MaxProDef = getattr(self, self.__AttrName % ChConfig.TYPE_Calc_MaxProDef) # 最大防护值
|
| | | ProDefAbsorb = getattr(self, self.__AttrName % ChConfig.TYPE_Calc_ProDefAbsorb) # 防护值吸收伤害比率
|
| | | #MaxProDef = getattr(self, self.__AttrName % ChConfig.TYPE_Calc_MaxProDef) # 最大防护值
|
| | | #ProDefAbsorb = getattr(self, self.__AttrName % ChConfig.TYPE_Calc_ProDefAbsorb) # 防护值吸收伤害比率
|
| | | ProDefPer = getattr(self, self.__AttrName % ChConfig.TYPE_Calc_ProDefHPPer) # 防护转化百分比
|
| | |
|
| | | OnlyFinalHurt = getattr(self, self.__AttrName % ChConfig.TYPE_Calc_OnlyFinalHurt) # 额外输出伤害
|
| | | PVPAtkBackHP = getattr(self, self.__AttrName % ChConfig.TYPE_Calc_PVPAtkBackHP) # PVP攻击回血
|
| | |
| | | # 升级需要执行的游戏功能处理
|
| | | GameFuncComm.DoFuncOpenLogic(curPlayer)
|
| | | ChEquip.CalcEquips_OutOfPrint(curPlayer) # 缓存绝版属性
|
| | | if aftLV%10 == 0:
|
| | | # 控制下刷新次数
|
| | | PlayerPet.CalcPetItemAddPlayerAttr(curPlayer) # 宠物有随等级变化的技能
|
| | | |
| | | self.RefreshPlayerAttrState(billboardFunc=PlayerBillboard.UpdatePlayerLVBillboard)
|
| | | #放在功能开启后面
|
| | | PlayerWorldAverageLv.UpdatePlayerWorldAverageLv(curPlayer)
|
| | |
| | | #beforeAtkInterval = curPlayer.GetAtkInterval()
|
| | | beforeMaxHP = curPlayer.GetMaxHP()
|
| | | beforeMoveSpeedValue = GetSpeedValue(curPlayer)
|
| | | beforeMaxProDef = GetMaxProDef(curPlayer)
|
| | | #构建玩家刷新通知客户端字典, 缓存[索引, 数值]
|
| | | playerStateDict = {}
|
| | | for index in xrange(1, ChConfig.Def_Calc_AllAttrType_MAX):
|
| | |
| | | CalcLineEffect.ChangePlayerAttrInLineEffectList(curPlayer, skillNoFightPowerAttrList[ChConfig.CalcAttr_Battle])
|
| | | #self.PrintAttr(curPlayer, "固定层级")
|
| | |
|
| | | #护盾值刷新
|
| | | self.__RefreshMaxProDef(beforeMaxProDef)
|
| | | |
| | | # 【到此所有功能属性都已刷新处理完毕,复制一份 功能属性的刷新结果,用于BUFF属性单独刷新】
|
| | | EffGetSet.CopyPlayerFuncAttr(curPlayer)
|
| | |
|
| | |
| | | GameWorld.DebugLog("End RefreshPlayerAttrStateEx!!!")
|
| | | return True
|
| | |
|
| | | |
| | | # 生命转化为防护值
|
| | | def __RefreshMaxProDef(self, beforeMaxProDef):
|
| | | curPlayer = self.__Player
|
| | | if GetProDefHPPer(curPlayer) == 0:
|
| | | return
|
| | | maxHP = curPlayer.GetMaxHP()
|
| | | proDefPer = GetProDefHPPer(curPlayer)
|
| | | |
| | | #获取策划配置的表格
|
| | | GodWeapon4 = IpyGameDataPY.GetFuncCfg("GodWeapon4", 2)
|
| | | maxProDef = eval(FormulaControl.GetCompileFormula("GodWeapon4", GodWeapon4))
|
| | | |
| | | SetMaxProDef(curPlayer, int(maxProDef))
|
| | | |
| | | afterMaxProDef = GetMaxProDef(curPlayer)
|
| | | addValue = max(0, afterMaxProDef - beforeMaxProDef)
|
| | | curProDef = GetProDef(curPlayer)
|
| | | |
| | | if beforeMaxProDef > 0 and addValue > 0 and curPlayer.GetPlayerAction() != IPY_GameWorld.paDie:
|
| | | # 同步增加 (死亡状态下不刷)
|
| | | SetProDef(curPlayer, min(curProDef + addValue, afterMaxProDef))
|
| | | elif curProDef > afterMaxProDef:
|
| | | # 做一次防范纠正
|
| | | SetProDef(curPlayer, min(curProDef, afterMaxProDef))
|
| | | |
| | | return
|
| | |
|
| | | def __RefreshBuffAttr(self):
|
| | | ## 刷新buff层属性,该层属性只会改变玩家最终属性,不会影响战力等
|
| | |
| | | # SetExAttr1 ~ SetExAttr14(DWORD uiExAttr10, bool bNotifyAll = false, bool bNotifyGameServer = false)
|
| | | # @param bNotifyAll: 是否广播所周围玩家,默认false,只会发给自己
|
| | | # @param bNotifyGameServer: 是否同步GameServer,默认false
|
| | | # SetExAttr15 ~ SetExAttr20(DWORD uiExAttr15) |
| | | # 15~20扩展属性同步封包:0309 选角登录简短信息、0434 周围玩家出现、0102 登录地图玩家信息;
|
| | | # 同步前端及GameServer需要自己写通知,设置函数自身不带通知参数
|
| | | #
|
| | | # 发送0418包
|
| | | # SendPropertyRefresh(int inputType, int inputValue, bool boardCast, bool includeSelf = true)
|
| | |
| | | #
|
| | | # ֪ͨGsmeServer;
|
| | | # SendGameServerRefreshState(int inputType, int inputValue)
|
| | |
|
| | | # SetExAttr15 ~ 18 对应神兵类型等级,场景特效用
|
| | |
|
| | | # 禁言 通知gameServer
|
| | | def SetGMForbidenTalk(curPlayer, value):
|
| | |
| | | if silverPoint != curPlayer.GetExAttr6():
|
| | | curPlayer.SetExAttr6(silverPoint)
|
| | | return
|
| | |
|
| | | ## 玩家今日已获得仙缘币
|
| | | def GetTodayXianyuanCoin(curPlayer): return curPlayer.GetExAttr11()
|
| | | def SetTodayXianyuanCoin(curPlayer, value): return curPlayer.SetExAttr11(value, False, True)
|
| | | def AddTodayXianyuanCoin(curPlayer, addValue): return curPlayer.SetExAttr11(curPlayer.GetExAttr11() + addValue, False, True)
|
| | |
|
| | | ##VIP到期时间, 需要同步GameServer
|
| | | def GetVIPExpireTime(curPlayer): return curPlayer.GetExAttr9()
|
| | |
| | | # @return: 威望值
|
| | | def GetMergeWarRank(curPlayer):
|
| | | return 0
|
| | |
|
| | |
|
| | | ## 设置玩家官爵星级
|
| | | # @param curPlayer: 玩家实例
|
| | | # @param value: 星级
|
| | | # @return: |
| | | def SetOfficeStar(curPlayer, value):
|
| | | curPlayer.SetExAttr11(value)
|
| | | return
|
| | |
|
| | | |
| | | ## 获取玩家玩家官爵星级
|
| | | # @param curPlayer: 玩家实例
|
| | | # @return: 星级
|
| | | def GetOfficeStar(curPlayer):
|
| | | return curPlayer.GetExAttr11()
|
| | |
|
| | |
|
| | | ##获取可免费开启的格子数
|
| | | # @param curPlayer 玩家对象
|
| | |
| | | def GetMaxProDef(curPlayer): return curPlayer.GetDictByKey(ChConfig.Def_PlayerKey_AttrMaxProDef)
|
| | | def SetMaxProDef(curPlayer, value):
|
| | | curPlayer.SetDict(ChConfig.Def_PlayerKey_AttrMaxProDef, value)
|
| | | curPlayer.SendPropertyRefresh(ShareDefine.CDBPlayerRefresh_MaxProDef, value, True) # 周围玩家需要通知
|
| | | curPlayer.SendPropertyRefresh(ShareDefine.CDBPlayerRefresh_MaxProDef, value, False) # 周围玩家需要通知
|
| | | #---生命上限换算为防护值的百分比----
|
| | | def GetProDefHPPer(curPlayer): return curPlayer.GetDictByKey(ChConfig.Def_PlayerKey_AttrProDefHPPer)
|
| | | def SetProDefHPPer(curPlayer, value):
|
| | | curPlayer.SetDict(ChConfig.Def_PlayerKey_AttrProDefHPPer, value)
|
| | | curPlayer.SendPropertyRefresh(ShareDefine.CDBPlayerRefresh_ProDefHPPer, value, False)
|
| | | #curPlayer.SendPropertyRefresh(ShareDefine.CDBPlayerRefresh_ProDefHPPer, value, False)
|
| | | #---防护值吸收伤害比率----
|
| | | def GetProDefAbsorb(curPlayer): return curPlayer.GetDictByKey(ChConfig.Def_PlayerKey_AttrProDefAbsorb)
|
| | | def SetProDefAbsorb(curPlayer, value):
|
| | | curPlayer.SetDict(ChConfig.Def_PlayerKey_AttrProDefAbsorb, value)
|
| | | curPlayer.SendPropertyRefresh(ShareDefine.CDBPlayerRefresh_ProDefAbsorb, value, False)
|
| | | #curPlayer.SendPropertyRefresh(ShareDefine.CDBPlayerRefresh_ProDefAbsorb, value, False)
|
| | |
|
| | | #---宠物攻击提升值----
|
| | | def GetPetMinAtk(curPlayer): return curPlayer.GetDictByKey(ChConfig.Def_PlayerKey_AttrPetMinAtk)
|