121 【武将】武将系统-服务端(计算战力支持属性系数参数,技能战力参数支持;)
| | |
| | | char Parameter; //属性名、参数名
|
| | | };
|
| | |
|
| | | //战力系数
|
| | | struct FightPowerRatio
|
| | | {
|
| | | DWORD _RealmLV; //境界等级
|
| | | float AtkRatio; //攻击系数
|
| | | float MaxHPRatio;
|
| | | float DefRatio;
|
| | | float StunRateRatio;
|
| | | float SuperHitRateRatio;
|
| | | float ComboRateRatio;
|
| | | float MissRateRatio;
|
| | | float ParryRateRatio;
|
| | | float SuckHPPerRatio;
|
| | | float StunRateDefRatio;
|
| | | float SuperHitRateDefRatio;
|
| | | float ComboRateDefRatio;
|
| | | float MissRateDefRatio;
|
| | | float ParryRateDefRatio;
|
| | | float SuckHPPerDefRatio;
|
| | | float FinalDamPerRatio;
|
| | | float FinalDamPerDefRatio;
|
| | | float PhyDamPerRatio;
|
| | | float PhyDamPerDefRatio;
|
| | | float MagDamPerRatio;
|
| | | float MagDamPerDefRatio;
|
| | | float NormalSkillPerRatio;
|
| | | float NormalSkillPerDefRatio;
|
| | | float AngerSkillPerRatio;
|
| | | float AngerSkillPerDefRatio;
|
| | | float SuperDamPerRatio;
|
| | | float SuperDamPerDefRatio;
|
| | | float CurePerRatio;
|
| | | float CurePerDefRatio;
|
| | | float ShieldPerRatio;
|
| | | float ShieldPerDefRatio;
|
| | | float DOTPerRatio;
|
| | | float DOTPerDefRatio;
|
| | | float WeiFinalDamPerRatio;
|
| | | float WeiFinalDamPerDefRatio;
|
| | | float ShuFinalDamPerRatio;
|
| | | float ShuFinalDamPerDefRatio;
|
| | | float WuFinalDamPerRatio;
|
| | | float WuFinalDamPerDefRatio;
|
| | | float QunFinalDamPerRatio;
|
| | | float QunFinalDamPerDefRatio;
|
| | | };
|
| | |
|
| | | //主线章节表
|
| | | struct MainChapter
|
| | | {
|
| | |
| | |
|
| | | def GetSkillID(self): return self._ipyData.GetSkillID()
|
| | | def GetSkillTypeID(self): return self._ipyData.GetSkillTypeID()
|
| | | def GetSkillLV(self): return self._ipyData.GetSkillLV()
|
| | | def GetSkillMaxLV(self): return self._ipyData.GetSkillMaxLV()
|
| | | def GetSkillName(self): return self._ipyData.GetSkillName()
|
| | | def GetFuncType(self): return self._ipyData.GetFuncType()
|
| | |
| | |
|
| | | def GetSkillID(self): return self._skillData.GetSkillID()
|
| | | def GetSkillTypeID(self): return self._skillData.GetSkillTypeID()
|
| | | def GetSkillLV(self): return self._skillData.GetSkillLV()
|
| | | def GetSkillMaxLV(self): return self._skillData.GetSkillMaxLV()
|
| | | def GetSkillName(self): return self._skillData.GetSkillName()
|
| | | def GetFuncType(self): return self._skillData.GetFuncType()
|
| | |
| | | AttrID_ShieldPerDef, # 弱化护盾 54
|
| | | AttrID_DOTPer, # 持续增伤 55 (中毒、燃烧、流血)
|
| | | AttrID_DOTPerDef, # 持续减伤 56
|
| | | ) = range(1, 1 + 56)
|
| | | AttrID_WeiFinalDamPer, # 对魏增伤 57
|
| | | AttrID_WeiFinalDamPerDef, # 对魏减伤 58
|
| | | AttrID_ShuFinalDamPer, # 对蜀增伤 59
|
| | | AttrID_ShuFinalDamPerDef, # 对蜀减伤 60
|
| | | AttrID_WuFinalDamPer, # 对吴增伤 61
|
| | | AttrID_WuFinalDamPerDef, # 对吴减伤 62
|
| | | AttrID_QunFinalDamPer, # 对群增伤 63
|
| | | AttrID_QunFinalDamPerDef, # 对群减伤 64
|
| | | ) = range(1, 1 + 64)
|
| | |
|
| | | # 需要计算的武将战斗属性ID列表
|
| | | CalcBattleAttrIDList = [AttrID_Atk, AttrID_Def, AttrID_MaxHP, AttrID_StunRate, AttrID_StunRateDef,
|
| | |
| | | AttrID_NormalSkillPer, AttrID_NormalSkillPerDef, AttrID_AngerSkillPer, AttrID_AngerSkillPerDef,
|
| | | AttrID_SuperDamPer, AttrID_SuperDamPerDef, AttrID_CurePer, AttrID_CurePerDef,
|
| | | AttrID_ShieldPer, AttrID_ShieldPerDef, AttrID_DOTPer, AttrID_DOTPerDef,
|
| | | AttrID_WeiFinalDamPer, AttrID_WeiFinalDamPerDef, AttrID_ShuFinalDamPer, AttrID_ShuFinalDamPerDef,
|
| | | AttrID_WuFinalDamPer, AttrID_WuFinalDamPerDef, AttrID_QunFinalDamPer, AttrID_QunFinalDamPerDef,
|
| | | ]
|
| | |
|
| | | # 基础三维属性ID列表
|
| | |
| | | ("char", "Parameter", 0),
|
| | | ),
|
| | |
|
| | | "FightPowerRatio":(
|
| | | ("DWORD", "RealmLV", 1),
|
| | | ("float", "AtkRatio", 0),
|
| | | ("float", "MaxHPRatio", 0),
|
| | | ("float", "DefRatio", 0),
|
| | | ("float", "StunRateRatio", 0),
|
| | | ("float", "SuperHitRateRatio", 0),
|
| | | ("float", "ComboRateRatio", 0),
|
| | | ("float", "MissRateRatio", 0),
|
| | | ("float", "ParryRateRatio", 0),
|
| | | ("float", "SuckHPPerRatio", 0),
|
| | | ("float", "StunRateDefRatio", 0),
|
| | | ("float", "SuperHitRateDefRatio", 0),
|
| | | ("float", "ComboRateDefRatio", 0),
|
| | | ("float", "MissRateDefRatio", 0),
|
| | | ("float", "ParryRateDefRatio", 0),
|
| | | ("float", "SuckHPPerDefRatio", 0),
|
| | | ("float", "FinalDamPerRatio", 0),
|
| | | ("float", "FinalDamPerDefRatio", 0),
|
| | | ("float", "PhyDamPerRatio", 0),
|
| | | ("float", "PhyDamPerDefRatio", 0),
|
| | | ("float", "MagDamPerRatio", 0),
|
| | | ("float", "MagDamPerDefRatio", 0),
|
| | | ("float", "NormalSkillPerRatio", 0),
|
| | | ("float", "NormalSkillPerDefRatio", 0),
|
| | | ("float", "AngerSkillPerRatio", 0),
|
| | | ("float", "AngerSkillPerDefRatio", 0),
|
| | | ("float", "SuperDamPerRatio", 0),
|
| | | ("float", "SuperDamPerDefRatio", 0),
|
| | | ("float", "CurePerRatio", 0),
|
| | | ("float", "CurePerDefRatio", 0),
|
| | | ("float", "ShieldPerRatio", 0),
|
| | | ("float", "ShieldPerDefRatio", 0),
|
| | | ("float", "DOTPerRatio", 0),
|
| | | ("float", "DOTPerDefRatio", 0),
|
| | | ("float", "WeiFinalDamPerRatio", 0),
|
| | | ("float", "WeiFinalDamPerDefRatio", 0),
|
| | | ("float", "ShuFinalDamPerRatio", 0),
|
| | | ("float", "ShuFinalDamPerDefRatio", 0),
|
| | | ("float", "WuFinalDamPerRatio", 0),
|
| | | ("float", "WuFinalDamPerDefRatio", 0),
|
| | | ("float", "QunFinalDamPerRatio", 0),
|
| | | ("float", "QunFinalDamPerDefRatio", 0),
|
| | | ),
|
| | |
|
| | | "MainChapter":(
|
| | | ("BYTE", "ChapterID", 1),
|
| | | ("list", "DailyBootyUpperList", 0),
|
| | |
| | | |
| | | def GetAttrID(self): return self.attrTuple[0] # 属性ID DWORD
|
| | | def GetParameter(self): return self.attrTuple[1] # 属性名、参数名 char |
| | | |
| | | # 战力系数 |
| | | class IPY_FightPowerRatio(): |
| | | |
| | | def __init__(self): |
| | | self.attrTuple = None |
| | | return |
| | | |
| | | def GetRealmLV(self): return self.attrTuple[0] # 境界等级 DWORD
|
| | | def GetAtkRatio(self): return self.attrTuple[1] # 攻击系数 float
|
| | | def GetMaxHPRatio(self): return self.attrTuple[2] # float
|
| | | def GetDefRatio(self): return self.attrTuple[3] # float
|
| | | def GetStunRateRatio(self): return self.attrTuple[4] # float
|
| | | def GetSuperHitRateRatio(self): return self.attrTuple[5] # float
|
| | | def GetComboRateRatio(self): return self.attrTuple[6] # float
|
| | | def GetMissRateRatio(self): return self.attrTuple[7] # float
|
| | | def GetParryRateRatio(self): return self.attrTuple[8] # float
|
| | | def GetSuckHPPerRatio(self): return self.attrTuple[9] # float
|
| | | def GetStunRateDefRatio(self): return self.attrTuple[10] # float
|
| | | def GetSuperHitRateDefRatio(self): return self.attrTuple[11] # float
|
| | | def GetComboRateDefRatio(self): return self.attrTuple[12] # float
|
| | | def GetMissRateDefRatio(self): return self.attrTuple[13] # float
|
| | | def GetParryRateDefRatio(self): return self.attrTuple[14] # float
|
| | | def GetSuckHPPerDefRatio(self): return self.attrTuple[15] # float
|
| | | def GetFinalDamPerRatio(self): return self.attrTuple[16] # float
|
| | | def GetFinalDamPerDefRatio(self): return self.attrTuple[17] # float
|
| | | def GetPhyDamPerRatio(self): return self.attrTuple[18] # float
|
| | | def GetPhyDamPerDefRatio(self): return self.attrTuple[19] # float
|
| | | def GetMagDamPerRatio(self): return self.attrTuple[20] # float
|
| | | def GetMagDamPerDefRatio(self): return self.attrTuple[21] # float
|
| | | def GetNormalSkillPerRatio(self): return self.attrTuple[22] # float
|
| | | def GetNormalSkillPerDefRatio(self): return self.attrTuple[23] # float
|
| | | def GetAngerSkillPerRatio(self): return self.attrTuple[24] # float
|
| | | def GetAngerSkillPerDefRatio(self): return self.attrTuple[25] # float
|
| | | def GetSuperDamPerRatio(self): return self.attrTuple[26] # float
|
| | | def GetSuperDamPerDefRatio(self): return self.attrTuple[27] # float
|
| | | def GetCurePerRatio(self): return self.attrTuple[28] # float
|
| | | def GetCurePerDefRatio(self): return self.attrTuple[29] # float
|
| | | def GetShieldPerRatio(self): return self.attrTuple[30] # float
|
| | | def GetShieldPerDefRatio(self): return self.attrTuple[31] # float
|
| | | def GetDOTPerRatio(self): return self.attrTuple[32] # float
|
| | | def GetDOTPerDefRatio(self): return self.attrTuple[33] # float
|
| | | def GetWeiFinalDamPerRatio(self): return self.attrTuple[34] # float
|
| | | def GetWeiFinalDamPerDefRatio(self): return self.attrTuple[35] # float
|
| | | def GetShuFinalDamPerRatio(self): return self.attrTuple[36] # float
|
| | | def GetShuFinalDamPerDefRatio(self): return self.attrTuple[37] # float
|
| | | def GetWuFinalDamPerRatio(self): return self.attrTuple[38] # float
|
| | | def GetWuFinalDamPerDefRatio(self): return self.attrTuple[39] # float
|
| | | def GetQunFinalDamPerRatio(self): return self.attrTuple[40] # float
|
| | | def GetQunFinalDamPerDefRatio(self): return self.attrTuple[41] # float |
| | | |
| | | # 主线章节表 |
| | | class IPY_MainChapter(): |
| | |
| | | self.__LoadFileData("HeroQualityAwake", onlyCheck)
|
| | | self.__LoadFileData("HeroQualityLV", onlyCheck)
|
| | | self.__LoadFileData("PlayerAttr", onlyCheck)
|
| | | self.__LoadFileData("FightPowerRatio", onlyCheck)
|
| | | self.__LoadFileData("MainChapter", onlyCheck)
|
| | | self.__LoadFileData("MainLevel", onlyCheck)
|
| | | self.__LoadFileData("NPCLineup", onlyCheck)
|
| | |
| | | self.CheckLoadData("PlayerAttr") |
| | | return self.ipyPlayerAttrCache[index]
|
| | | |
| | | def GetFightPowerRatioCount(self): |
| | | self.CheckLoadData("FightPowerRatio") |
| | | return self.ipyFightPowerRatioLen
|
| | | def GetFightPowerRatioByIndex(self, index): |
| | | self.CheckLoadData("FightPowerRatio") |
| | | return self.ipyFightPowerRatioCache[index]
|
| | | |
| | | def GetMainChapterCount(self): |
| | | self.CheckLoadData("MainChapter") |
| | | return self.ipyMainChapterLen
|
| | |
| | | baseAttrFormula = IpyGameDataPY.GetFuncCfg("HeroAttrFormula", 1)
|
| | | otherAttrFormula = IpyGameDataPY.GetFuncCfg("HeroAttrFormula", 2)
|
| | | fightPowerFormula = IpyGameDataPY.GetFuncCfg("HeroAttrFormula", 3)
|
| | | skillFPFormula = IpyGameDataPY.GetFuncCfg("HeroAttrFormula", 4)
|
| | |
|
| | | lvAttrDict = olPlayer.GetCalcAttr(ChConfig.Def_CalcAttr_LV)
|
| | | equipAttrDict = olPlayer.GetCalcAttr(ChConfig.Def_CalcAttr_MainEquip)
|
| | |
| | | GameWorld.DebugLog(" 主公等级属性=%s" % lvAttrDict, playerID)
|
| | | GameWorld.DebugLog(" 主公装备属性=%s" % equipAttrDict, playerID)
|
| | | GameWorld.DebugLog(" 主公图鉴属性=%s" % bookAttrDict, playerID)
|
| | | |
| | | PlayerLV = curPlayer.GetLV()
|
| | | OfficialLV = curPlayer.GetOfficialRank()
|
| | | GameWorld.DebugLog(" PlayerLV=%s,OfficialLV=%s" % (PlayerLV, OfficialLV), playerID)
|
| | | |
| | | fpRatioIpyData = IpyGameDataPY.GetIpyGameData("FightPowerRatio", OfficialLV)
|
| | |
|
| | | lineupFightPower = 0 # 阵容总战力
|
| | | InitAddPer, LVAddPer, BreakLVAddPer, StarAddPer = InitAddPer / 10000.0, LVAddPer / 10000.0, BreakLVAddPer / 10000.0, StarAddPer / 10000.0
|
| | |
| | |
|
| | | attrIpyData = IpyGameDataPY.GetIpyGameData("PlayerAttr", attrID)
|
| | | attrName = attrIpyData.GetParameter() if attrIpyData else "%s" % attrID
|
| | | attrRatioName = "%sRatio" % attrName
|
| | | ratioValue = 0
|
| | | if attrValue and hasattr(fpRatioIpyData, "Get%s" % attrRatioName):
|
| | | ratioValue = getattr(fpRatioIpyData, "Get%s" % attrRatioName)()
|
| | | fightPowerParamDict[attrName] = attrValue
|
| | | fightPowerParamDict[attrRatioName] = ratioValue
|
| | | if attrValue:
|
| | | lineupHero.heroBatAttrDict[attrID] = attrValue
|
| | | logAttrDict["%s-%s" % (attrID, attrName)] = attrValue
|
| | | |
| | | |
| | | # 计算战力
|
| | | fightPower = FormulaControl.Eval("fightPowerFormula", fightPowerFormula, fightPowerParamDict)
|
| | |
|
| | | GameWorld.DebugLog(" fightPower=%s,heroSkillIDList=%s" % (fightPower, lineupHero.heroSkillIDList), playerID)
|
| | | GameWorld.DebugLog(" heroID=%s,fightPower=%s,heroSkillIDList=%s" % (heroID, fightPower, lineupHero.heroSkillIDList), playerID)
|
| | | skillTypeIDDict = {}
|
| | | for skillID in lineupHero.heroSkillIDList:
|
| | | skillData = IpyGameDataPY.GetIpyGameData("Skill", skillID)
|
| | |
| | | for skillData in skillTypeIDDict.values():
|
| | | skillID = skillData.GetSkillID()
|
| | | lineupHero.heroSkillIDList.append(skillID)
|
| | | skillFightPower += skillData.GetFightPower()
|
| | | paramDict = {"SkillPower":skillData.GetFightPower(), "PlayerLV":PlayerLV, "OfficialLV":OfficialLV}
|
| | | sFightPower = FormulaControl.Eval("skillFPFormula", skillFPFormula, paramDict)
|
| | | skillFightPower += sFightPower
|
| | | GameWorld.DebugLog(" skillFightPower=%s,heroSkillIDList=%s" % (skillFightPower, lineupHero.heroSkillIDList), playerID)
|
| | |
|
| | | # 最终战力
|