| | |
| | | import PlayerGameEvent
|
| | | import EventReport
|
| | | import PlayerTeHui
|
| | | import GameLogic_XMZZ
|
| | | import PlayerGatherSoul
|
| | | import PlayerSuccess
|
| | | import PlayerPet
|
| | | import PlayerGreatMaster
|
| | |
| | | import PlayerCostRebate
|
| | | import PlayerFairyCeremony
|
| | | import FunctionNPCCommon
|
| | | import CrossRealmPlayer
|
| | | import ChNetSendPack
|
| | | import PlayerState
|
| | | import QuestCommon
|
| | |
| | | # notifyCnt 代表广播周围玩家的数量,0为全部广播 -1为指定列表随机, 其他数字为指定指
|
| | | def PyNotifyAll(curPlayer, sendPack, notifySelf=True, notifyCnt=0):
|
| | | if notifyCnt == -1:
|
| | | notifyCnt = random.choice((10, 10, 15, 15, 20, 25, 30, 50))
|
| | | notifyCnt = 8
|
| | | #GameWorld.DebugLog("PyNotifyAll %s"%notifyCnt)
|
| | |
|
| | | curPlayer.NotifyAll(sendPack.GetBuffer(), sendPack.GetLength(), notifySelf, notifyCnt)
|
| | |
| | |
|
| | | FBLogic.DoPlayerChangeMapLogic(curPlayer, tick)
|
| | | #summonList = list()
|
| | | |
| | | #召回宠物
|
| | | PetControl.ReCallFightPet(curPlayer)
|
| | | #1. 删除自己不需要的召唤兽(火焰之灵等)
|
| | | #必须用while, 因为在循环中要删除
|
| | | # 召唤兽切地图不带过去
|
| | |
| | | if not curPlayer.NomalDictGetProperty(ChConfig.Def_Player_Dict_RouteServerInitOK):
|
| | | #RouteServer未初始化不允许切换地图, 缓存处理
|
| | | GameServerRefresh.Set_PlayerRouteServerInitOK_OnLeaveFB(curPlayer, 1)
|
| | | return
|
| | | |
| | | GameWorld.Log("PlayerLeaveFB...", curPlayer.GetPlayerID())
|
| | | if GameWorld.IsCrossServer():
|
| | | CrossRealmPlayer.PlayerExitCrossServer(curPlayer)
|
| | | return
|
| | |
|
| | | #中立地图回到上一次非中立常规地图
|
| | |
| | | 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攻击回血
|
| | |
| | |
|
| | | # 记录玩家升级
|
| | | DataRecordPack.DR_PlayerUpgrade(curPlayer, curPlayer.GetLV(), GetPlayerTotalExp(curPlayer), lvUpNeedExp)
|
| | | DataRecordPack.Cache_FightPowerChangeInfo(curPlayer, ChConfig.PowerDownType_LVUP, {'lv':curLV})
|
| | |
|
| | | self.__DoLVUPAddPoint() # 升级加点
|
| | | #self.__DoLvUpAddSkill() # 升级加技能
|
| | |
| | | # 升级需要执行的游戏功能处理
|
| | | GameFuncComm.DoFuncOpenLogic(curPlayer)
|
| | | ChEquip.CalcEquips_OutOfPrint(curPlayer) # 缓存绝版属性
|
| | | if aftLV%10 == 0:
|
| | | # 控制下刷新次数
|
| | | PlayerPet.CalcPetItemAddPlayerAttr(curPlayer) # 宠物有随等级变化的技能
|
| | | |
| | | self.RefreshPlayerAttrState(billboardFunc=PlayerBillboard.UpdatePlayerLVBillboard)
|
| | | #放在功能开启后面
|
| | | PlayerWorldAverageLv.UpdatePlayerWorldAverageLv(curPlayer)
|
| | |
| | | PlayerFamilyTech.CalcFamilyTechAttr(curPlayer)
|
| | | PlayerEquipDecompose.RefreshEDAttr(curPlayer)
|
| | | PlayerDogz.RefreshDogzAttr(curPlayer)
|
| | | PlayerGatherSoul.RefreshGatherSoulAttr(curPlayer)
|
| | | self.RefreshAllState(isForce=True)
|
| | | GameWorld.DebugLog("End ReCalcAllState!!!")
|
| | | return
|
| | |
| | | #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层属性,该层属性只会改变玩家最终属性,不会影响战力等
|
| | |
| | | mfpInfo.MFPCnt = len(mfpDataList)
|
| | | mfpInfo.MFPList = mfpDataList
|
| | | NetPackCommon.SendFakePack(curPlayer, mfpInfo)
|
| | | |
| | | beforeFightPower = curPlayer.GetFightPower()
|
| | | curPlayer.SetFightPower(totalFightPower, False)
|
| | | if totalFightPower < beforeFightPower:
|
| | | DataRecordPack.DR_FightPowerChangeInfo(curPlayer, beforeFightPower)
|
| | | highestFightPower = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_FightPower_Highest, 0,
|
| | | ChConfig.Def_PDictType_FightPower)
|
| | | if totalFightPower > highestFightPower:
|
| | | NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_FightPower_Highest, totalFightPower,
|
| | | ChConfig.Def_PDictType_FightPower)
|
| | | GameWorld.DebugLog("总战力: %s, 历史最高战力: %s" % (totalFightPower, highestFightPower))
|
| | | GameWorld.DebugLog("总战力: %s, 历史最高战力: %s, beforeFightPower=%s" % (totalFightPower, highestFightPower, beforeFightPower))
|
| | | PlayerBillboard.UpdatePlayerFPTotalBillboard(curPlayer)
|
| | | # 记录开服活动数据
|
| | | OpenServerCampaign.UpdOpenServerCampaignRecordData(curPlayer, ShareDefine.Def_Campaign_Type_FightPower, totalFightPower)
|
| | |
| | | }
|
| | |
|
| | | for i in xrange(1, ChConfig.Def_Calc_AllAttrType_MAX):
|
| | | if i in [ChConfig.TYPE_Calc_AttrHP, ChConfig.TYPE_Calc_AttrMP]:
|
| | | if i in [ChConfig.TYPE_Calc_AttrHP, ChConfig.TYPE_Calc_AttrMP, ChConfig.TYPE_Calc_ProDef]:
|
| | | continue
|
| | | value = 0 if i not in initAttrDict else initAttrDict[i]
|
| | | EffGetSet.SetValueByEffIndex(curPlayer, i, value)
|
| | |
| | | def SetFBFuncLineID(curPlayer, funcLineID): return curPlayer.SetExAttr3(funcLineID, False, False)
|
| | | def GetFBFuncLineID(curPlayer): return curPlayer.GetExAttr3()
|
| | |
|
| | | ## 跨服状态: 0-非跨服状态,1-跨服状态
|
| | | def GetCrossRealmState(curPlayer): return curPlayer.GetExAttr5()
|
| | | def SetCrossRealmState(curPlayer, value): curPlayer.SetExAttr5(value, False, True)
|
| | |
|
| | | ## 铜钱点, 支持铜钱超20亿
|
| | | def GetSilver(curPlayer): return curPlayer.GetExAttr6() * ChConfig.Def_PerPointValue + curPlayer.GetSilver()
|
| | | def SetSilver(curPlayer, totalSilver):
|
| | |
| | |
|
| | | ## 玩家今日已获得仙缘币
|
| | | 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 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)
|
| | |
| | | def GetPetMaxAtk(curPlayer): return curPlayer.GetDictByKey(ChConfig.Def_PlayerKey_AttrPetMaxAtk)
|
| | | def SetPetMaxAtk(curPlayer, value): curPlayer.SetDict(ChConfig.Def_PlayerKey_AttrPetMaxAtk, value)
|
| | |
|
| | | #---宠物伤害百分比提升----
|
| | | def GetPetDamPer(curPlayer): return curPlayer.GetDictByKey(ChConfig.Def_PlayerKey_AttrPetDamPer)
|
| | | def SetPetDamPer(curPlayer, value): |
| | | curPlayer.SetDict(ChConfig.Def_PlayerKey_AttrPetDamPer, value)
|
| | | curPlayer.SendPropertyRefresh(ShareDefine.CDBPlayerRefresh_PetDamPer, value, False)
|
| | | #---宠物伤害百分比提升----移到GameObj下
|
| | | #===============================================================================
|
| | | # def GetPetDamPer(curPlayer): return curPlayer.GetDictByKey(ChConfig.Def_PlayerKey_AttrPetDamPer)
|
| | | # def SetPetDamPer(curPlayer, value): |
| | | # curPlayer.SetDict(ChConfig.Def_PlayerKey_AttrPetDamPer, value)
|
| | | # curPlayer.SendPropertyRefresh(ShareDefine.CDBPlayerRefresh_PetDamPer, value, False)
|
| | | #===============================================================================
|
| | | #---宠物技能伤害百分比提升----
|
| | | def GetPetSkillAtkRate(curPlayer): return curPlayer.GetDictByKey(ChConfig.Def_PlayerKey_PetSkillAtkRate)
|
| | | def SetPetSkillAtkRate(curPlayer, value): curPlayer.SetDict(ChConfig.Def_PlayerKey_PetSkillAtkRate, value)
|