6430 【后端】【2.0】属性级战力算法优化
6426 【后端】【2.0】装备战力划分
| | |
| | | Def_Effect_JXWeaponAttrPer = 119 # 诛仙剑4属性加成百分比
|
| | |
|
| | | Def_Effect_Luck = 120 # 气运
|
| | | Def_Effect_LuckPer = 133 # 气运百分率
|
| | |
|
| | | #增加%d物理伤害值,其中a值为伤害值
|
| | | Def_Effect_AddAtk = 1005
|
| | |
| | | )=range(5)
|
| | |
|
| | | # 战斗力模块类型
|
| | | Def_MFPType_Max = 44
|
| | | Def_MFPType_Max = 26
|
| | | ModuleFightPowerTypeList = (
|
| | | Def_MFPType_Role, # 角色 0
|
| | | Def_MFPType_Equip, # 装备(基本装备位) 1 - 废弃
|
| | | Def_MFPType_Equip, # 装备(装备本身) 1
|
| | | Def_MFPType_Plus, # 强化 2
|
| | | Def_MFPType_Stone, # 宝石 3
|
| | | Def_MFPType_LingGen, # 灵根 4
|
| | |
| | | Def_MFPType_GodWeapon, # 神兵 10
|
| | | Def_MFPType_Dienstgrad, #称号 11
|
| | | Def_MFPType_Rune, # 符印 12
|
| | | Def_MFPType_13, #
|
| | | Def_MFPType_Star, # 升星 13
|
| | | Def_MFPType_MagicWeapon1, # 人族法宝 14
|
| | | Def_MFPType_StoveYao, # 炼丹炉丹药 15
|
| | | Def_MFPType_MagicWeapon2, # 魔族法宝 16
|
| | |
| | | Def_MFPType_GatherSoul, # 聚魂 22
|
| | | Def_MFPType_MagicWeapon4, # 王者法宝 23
|
| | | Def_MFPType_Coat, # ʱװ 24
|
| | | Def_MFPType_ZhuXian, # 诛仙 25 - 废弃
|
| | | Def_MFPType_Equip1, # 境界装备1阶 26
|
| | | Def_MFPType_Equip2, # 境界装备2阶 27
|
| | | Def_MFPType_Equip3, # 境界装备3阶 28
|
| | | Def_MFPType_Equip4, # 境界装备4阶 29
|
| | | Def_MFPType_Equip5, # 境界装备5阶 30
|
| | | Def_MFPType_Equip6, # 境界装备6阶 31
|
| | | Def_MFPType_Equip7, # 境界装备7阶 32
|
| | | Def_MFPType_Equip8, # 境界装备8阶 33
|
| | | Def_MFPType_Equip9, # 境界装备9阶 34
|
| | | Def_MFPType_Equip10, # 境界装备10阶 35
|
| | | Def_MFPType_Equip11, # 境界装备11阶 36
|
| | | Def_MFPType_Equip12, # 境界装备12阶 37
|
| | | Def_MFPType_Equip13, # 境界装备13阶 38
|
| | | Def_MFPType_Equip14, # 境界装备14阶 39
|
| | | Def_MFPType_Equip15, # 境界装备15阶 40
|
| | | Def_MFPType_Other, # 其他
|
| | |
|
| | | #以下暂时没用到,改时再处理
|
| | | Def_MFPType_Passive, #被动技能
|
| | | Def_MFPType_ClothesCoat, #衣服时装
|
| | | ) = range(Def_MFPType_Max)
|
| | |
|
| | | #事件汇报用户行为-----------------------------------------------------------
|
| | |
| | | #刷属性功能分类索引
|
| | | CalcAttrFuncList = (
|
| | | Def_CalcAttrFunc_RoleBase, # 角色基础 0
|
| | | Def_CalcAttrFunc_1,
|
| | | Def_CalcAttrFunc_2,
|
| | | Def_CalcAttrFunc_LingGenQuailty, # 灵根品质附加属性 3
|
| | | Def_CalcAttrFunc_LingGen, # 灵根 4
|
| | | Def_CalcAttrFunc_LingGen, # 灵根 1
|
| | | Def_CalcAttrFunc_LingGenQuailty, # 灵根品质附加属性 2
|
| | | Def_CalcAttrFunc_Equip, # 装备 3
|
| | | Def_CalcAttrFunc_Star, # 升星 4
|
| | | Def_CalcAttrFunc_Plus, # 装备位强化 5
|
| | | Def_CalcAttrFunc_6,
|
| | | Def_CalcAttrFunc_Stone, # 装备宝石 7
|
| | | Def_CalcAttrFunc_8,
|
| | | Def_CalcAttrFunc_Wing, # 翅膀 9
|
| | | Def_CalcAttrFunc_Wash, # 洗练 10
|
| | | Def_CalcAttrFunc_Pet, # 灵宠 11
|
| | | Def_CalcAttrFunc_Horse, # 坐骑 12
|
| | | Def_CalcAttrFunc_Prestige, # 境界 13
|
| | | Def_CalcAttrFunc_GodWeapon, # 神兵 14
|
| | | Def_CalcAttrFunc_Dienstgrad, # 称号 15
|
| | | Def_CalcAttrFunc_Rune, # 符印 16
|
| | | Def_CalcAttrFunc_17,
|
| | | Def_CalcAttrFunc_MagicWeapon1, # 人族法宝属性 18
|
| | | Def_CalcAttrFunc_EquipOutOfPrint, # 绝版属性随等级变化 19
|
| | | Def_CalcAttrFunc_20,
|
| | | Def_CalcAttrFunc_Success, # 成就属性 21
|
| | | Def_CalcAttrFunc_VIP, # VIP属性 22
|
| | | Def_CalcAttrFunc_Stove, # 炼丹炉 23
|
| | | Def_CalcAttrFunc_FamilyTech, # 仙盟心法 24
|
| | | Def_CalcAttrFunc_MagicWeapon2, # 魔族法宝属性 25
|
| | | Def_CalcAttrFunc_EquipDecompose, # 装备分解属性 26
|
| | | Def_CalcAttrFunc_MagicWeapon3, # 仙族法宝属性 27
|
| | | Def_CalcAttrFunc_PetSoul, # 宠物魂石 28
|
| | | Def_CalcAttrFunc_HorseSoul, # 坐骑魂石 29
|
| | | Def_CalcAttrFunc_HorseSkill, # 坐骑技能属性 30
|
| | | Def_CalcAttrFunc_PetSkill, # 宠物技能属性 31
|
| | | Def_CalcAttrFunc_StoveYao, # 炼丹炉丹药 32
|
| | | Def_CalcAttrFunc_PetSign, # 宠物签到 33
|
| | | Def_CalcAttrFunc_34,
|
| | | Def_CalcAttrFunc_Dogz, # 神兽35
|
| | | Def_CalcAttrFunc_DogzBattleSkill, # 助战神兽技能36
|
| | | Def_CalcAttrFunc_DogzEquip, # 神兽装备37
|
| | | Def_CalcAttrFunc_DogzEquipPlus, # 神兽装备强化38
|
| | | Def_CalcAttrFunc_GatherSoul, # 聚魂39
|
| | | Def_CalcAttrFunc_MagicWeapon4, # 王者法宝40
|
| | | Def_CalcAttrFunc_Coat, # ʱװ41
|
| | | Def_CalcAttrFunc_ZXEquip, # 诛仙装备42
|
| | | Def_CalcAttrFunc_ZXEquipSuit, # 诛仙装备套装43 - 废弃
|
| | | Def_CalcAttrFunc_ZXEquipStone, # 诛仙宝石属性44 - 废弃
|
| | | Def_CalcAttrFunc_45,
|
| | | Def_CalcAttrFunc_Equip1, # 境界装备1阶 46
|
| | | Def_CalcAttrFunc_Equip2, # 境界装备2阶 47
|
| | | Def_CalcAttrFunc_Equip3, # 境界装备3阶 48
|
| | | Def_CalcAttrFunc_Equip4, # 境界装备4阶 49
|
| | | Def_CalcAttrFunc_Equip5, # 境界装备5阶 50
|
| | | Def_CalcAttrFunc_Equip6, # 境界装备6阶 51
|
| | | Def_CalcAttrFunc_Equip7, # 境界装备7阶 52
|
| | | Def_CalcAttrFunc_Equip8, # 境界装备8阶 53
|
| | | Def_CalcAttrFunc_Equip9, # 境界装备9阶 54
|
| | | Def_CalcAttrFunc_Equip10, # 境界装备10阶 55
|
| | | Def_CalcAttrFunc_Equip11, # 境界装备11阶 56
|
| | | Def_CalcAttrFunc_Equip12, # 境界装备12阶 57
|
| | | Def_CalcAttrFunc_Equip13, # 境界装备13阶 58
|
| | | Def_CalcAttrFunc_Equip14, # 境界装备14阶 59
|
| | | Def_CalcAttrFunc_Equip15, # 境界装备15阶 60
|
| | | ) = range(61)
|
| | | Def_CalcAttrFunc_Stone, # 装备宝石 6
|
| | | Def_CalcAttrFunc_Wash, # 洗练 7
|
| | | Def_CalcAttrFunc_Wing, # 翅膀 8
|
| | | Def_CalcAttrFunc_Pet, # 灵宠 9
|
| | | Def_CalcAttrFunc_Horse, # 坐骑 10
|
| | | Def_CalcAttrFunc_Prestige, # 境界 11
|
| | | Def_CalcAttrFunc_GodWeapon, # 神兵 12
|
| | | Def_CalcAttrFunc_Dienstgrad, # 称号 13
|
| | | Def_CalcAttrFunc_Rune, # 符印 14
|
| | | Def_CalcAttrFunc_EquipOutOfPrint, # 绝版属性随等级变化 15
|
| | | Def_CalcAttrFunc_Success, # 成就属性 16
|
| | | Def_CalcAttrFunc_VIP, # VIP属性 17
|
| | | Def_CalcAttrFunc_Stove, # 炼丹炉 18
|
| | | Def_CalcAttrFunc_FamilyTech, # 仙盟心法 19
|
| | | Def_CalcAttrFunc_EquipDecompose, # 装备分解属性 20
|
| | | Def_CalcAttrFunc_PetSoul, # 宠物魂石 21
|
| | | Def_CalcAttrFunc_HorseSoul, # 坐骑魂石 22
|
| | | Def_CalcAttrFunc_HorseSkill, # 坐骑技能属性 23
|
| | | Def_CalcAttrFunc_PetSkill, # 宠物技能属性 24
|
| | | Def_CalcAttrFunc_StoveYao, # 炼丹炉丹药 25
|
| | | Def_CalcAttrFunc_PetSign, # 宠物签到 26
|
| | | Def_CalcAttrFunc_Dogz, # 神兽 27
|
| | | Def_CalcAttrFunc_DogzBattleSkill, # 助战神兽技能 28
|
| | | Def_CalcAttrFunc_DogzEquip, # 神兽装备 29
|
| | | Def_CalcAttrFunc_DogzEquipPlus, # 神兽装备强化 30
|
| | | Def_CalcAttrFunc_GatherSoul, # 聚魂 31
|
| | | Def_CalcAttrFunc_MagicWeapon1, # 人族法宝属性 32
|
| | | Def_CalcAttrFunc_MagicWeapon2, # 魔族法宝属性 33
|
| | | Def_CalcAttrFunc_MagicWeapon3, # 仙族法宝属性 34
|
| | | Def_CalcAttrFunc_MagicWeapon4, # 王者法宝 35
|
| | | Def_CalcAttrFunc_Coat, # ʱװ 36
|
| | | ) = range(37)
|
| | |
|
| | | # 在此列表中的功能属性,不享受百分比加成,--属性参与战力计算
|
| | | CalcAttrExFuncList = [Def_CalcAttrFunc_MagicWeapon1, Def_CalcAttrFunc_MagicWeapon2, Def_CalcAttrFunc_MagicWeapon3, Def_CalcAttrFunc_MagicWeapon4,
|
| | | Def_CalcAttrFunc_Stove, Def_CalcAttrFunc_VIP, Def_CalcAttrFunc_PetSoul, Def_CalcAttrFunc_HorseSoul,
|
| | | Def_CalcAttrFunc_StoveYao, Def_CalcAttrFunc_PetSign
|
| | | ]
|
| | |
|
| | | # 在此列表中的功能属性,不享受百分比加成,--属性不参与战力计算,战力由技能配置决定
|
| | | CalcAttrExFuncListNoFightPower = [Def_CalcAttrFunc_HorseSkill, Def_CalcAttrFunc_PetSkill, Def_CalcAttrFunc_DogzBattleSkill]
|
| | |
|
| | | # 技能功能点列表 - 默认不算战力,不享受百分比加成,技能功能点暂时配置,之后优化技能属性逻辑后可去掉
|
| | | CalcAttrFuncSkillList = [Def_CalcAttrFunc_HorseSkill, Def_CalcAttrFunc_PetSkill, Def_CalcAttrFunc_DogzBattleSkill]
|
| | | # 不计算战力的功能点列表 - 由其他方式计算的战力的功能点,如装备用评分计算
|
| | | CalcAttrFuncNoFightPowerList = [Def_CalcAttrFunc_Equip, Def_CalcAttrFunc_DogzEquip]
|
| | |
|
| | | #战斗力分组类型对应功能点属性分类索引列表,并不是一一对应的,有些战斗力类型可由多个功能点组成
|
| | | #***注意***: 以下功能点需包含上面定义的所有功能点,不然会导致有些属性无法加上
|
| | | MFPTypeAttrFuncIndexDict = {ShareDefine.Def_MFPType_Role:[Def_CalcAttrFunc_RoleBase],
|
| | | # 因为装备评分和实际战力一直出现不匹配的情况,所以装备战力修改为直接由装备评分做为参数计算战力,所以装备评分计算的所有属性不列入战力计算,祥见评分计算函数 ItemCommom.CalcEquipGS
|
| | | # ShareDefine.Def_MFPType_Equip:[Def_CalcAttrFunc_EquipOutOfPrint],
|
| | | ShareDefine.Def_MFPType_Equip:[Def_CalcAttrFunc_Equip, Def_CalcAttrFunc_EquipOutOfPrint],
|
| | | ShareDefine.Def_MFPType_LingGen:[Def_CalcAttrFunc_LingGenQuailty, Def_CalcAttrFunc_LingGen],
|
| | | ShareDefine.Def_MFPType_Star:[Def_CalcAttrFunc_Star],
|
| | | ShareDefine.Def_MFPType_Plus:[Def_CalcAttrFunc_Plus],
|
| | | ShareDefine.Def_MFPType_Stone:[Def_CalcAttrFunc_Stone],
|
| | | ShareDefine.Def_MFPType_Wing:[Def_CalcAttrFunc_Wing],
|
| | | ShareDefine.Def_MFPType_Wash:[Def_CalcAttrFunc_Wash],
|
| | | ShareDefine.Def_MFPType_Pet:[Def_CalcAttrFunc_Pet, Def_CalcAttrFunc_PetSign],
|
| | | ShareDefine.Def_MFPType_Pet:[Def_CalcAttrFunc_Pet, Def_CalcAttrFunc_PetSign, Def_CalcAttrFunc_PetSkill],
|
| | | ShareDefine.Def_MFPType_PetSoul:[Def_CalcAttrFunc_PetSoul],
|
| | | ShareDefine.Def_MFPType_Horse:[Def_CalcAttrFunc_Horse],
|
| | | ShareDefine.Def_MFPType_Horse:[Def_CalcAttrFunc_Horse, Def_CalcAttrFunc_HorseSkill],
|
| | | ShareDefine.Def_MFPType_HorseSoul:[Def_CalcAttrFunc_HorseSoul],
|
| | | ShareDefine.Def_MFPType_Prestige:[Def_CalcAttrFunc_Prestige],
|
| | | ShareDefine.Def_MFPType_GodWeapon:[Def_CalcAttrFunc_GodWeapon],
|
| | |
| | | ShareDefine.Def_MFPType_StoveYao:[Def_CalcAttrFunc_StoveYao],
|
| | | ShareDefine.Def_MFPType_GatherSoul:[Def_CalcAttrFunc_GatherSoul],
|
| | | ShareDefine.Def_MFPType_Coat:[Def_CalcAttrFunc_Coat],
|
| | | # 诛仙装备战力、神兽战力同装备模块战力一致,受评分影响,装备评分相关的战力另外算
|
| | | ShareDefine.Def_MFPType_Dogz:[Def_CalcAttrFunc_Dogz, Def_CalcAttrFunc_DogzEquipPlus],
|
| | | #ShareDefine.Def_MFPType_ZhuXian:[Def_CalcAttrFunc_ZXEquipSuit, Def_CalcAttrFunc_ZXEquipStone],
|
| | | ShareDefine.Def_MFPType_Equip1:[Def_CalcAttrFunc_Equip1],
|
| | | ShareDefine.Def_MFPType_Equip2:[Def_CalcAttrFunc_Equip2],
|
| | | ShareDefine.Def_MFPType_Equip3:[Def_CalcAttrFunc_Equip3],
|
| | | ShareDefine.Def_MFPType_Equip4:[Def_CalcAttrFunc_Equip4],
|
| | | ShareDefine.Def_MFPType_Equip5:[Def_CalcAttrFunc_Equip5],
|
| | | ShareDefine.Def_MFPType_Equip6:[Def_CalcAttrFunc_Equip6],
|
| | | ShareDefine.Def_MFPType_Equip7:[Def_CalcAttrFunc_Equip7],
|
| | | ShareDefine.Def_MFPType_Equip8:[Def_CalcAttrFunc_Equip8],
|
| | | ShareDefine.Def_MFPType_Equip9:[Def_CalcAttrFunc_Equip9],
|
| | | ShareDefine.Def_MFPType_Equip10:[Def_CalcAttrFunc_Equip10],
|
| | | ShareDefine.Def_MFPType_Equip11:[Def_CalcAttrFunc_Equip11],
|
| | | ShareDefine.Def_MFPType_Equip12:[Def_CalcAttrFunc_Equip12],
|
| | | ShareDefine.Def_MFPType_Equip13:[Def_CalcAttrFunc_Equip13],
|
| | | ShareDefine.Def_MFPType_Equip14:[Def_CalcAttrFunc_Equip14],
|
| | | ShareDefine.Def_MFPType_Equip15:[Def_CalcAttrFunc_Equip15],
|
| | | ShareDefine.Def_MFPType_Dogz:[Def_CalcAttrFunc_Dogz, Def_CalcAttrFunc_DogzEquip, Def_CalcAttrFunc_DogzEquipPlus, Def_CalcAttrFunc_DogzBattleSkill],
|
| | | ShareDefine.Def_MFPType_Other:[Def_CalcAttrFunc_Success, Def_CalcAttrFunc_FamilyTech, Def_CalcAttrFunc_EquipDecompose],
|
| | | }
|
| | |
|
| | |
| | | # @return None
|
| | | # @remarks 函数详细说明.
|
| | | def OnExec(curPlayer, msgList):
|
| | | |
| | | mfpTypeName = {ShareDefine.Def_MFPType_Role:"角色",
|
| | | ShareDefine.Def_MFPType_LingGen:"灵根",
|
| | | ShareDefine.Def_MFPType_Equip:"装备",
|
| | | ShareDefine.Def_MFPType_Star:"升星",
|
| | | ShareDefine.Def_MFPType_Plus:"强化",
|
| | | ShareDefine.Def_MFPType_Stone:"宝石",
|
| | | ShareDefine.Def_MFPType_Wing:"翅膀",
|
| | | ShareDefine.Def_MFPType_Wash:"洗练",
|
| | | ShareDefine.Def_MFPType_Wing:"翅膀",
|
| | | ShareDefine.Def_MFPType_Pet:"灵宠",
|
| | | ShareDefine.Def_MFPType_Horse:"坐骑",
|
| | | ShareDefine.Def_MFPType_Prestige:"境界",
|
| | |
| | | ShareDefine.Def_MFPType_Dienstgrad:"称号",
|
| | | ShareDefine.Def_MFPType_Rune:"符印",
|
| | | ShareDefine.Def_MFPType_GatherSoul:"聚魂",
|
| | | ShareDefine.Def_MFPType_MagicWeapon1:"人族",
|
| | | ShareDefine.Def_MFPType_StoveYao:"丹药",
|
| | | ShareDefine.Def_MFPType_MagicWeapon1:"人族",
|
| | | ShareDefine.Def_MFPType_MagicWeapon2:"魔族",
|
| | | ShareDefine.Def_MFPType_MagicWeapon3:"仙族",
|
| | | ShareDefine.Def_MFPType_MagicWeapon4:"王者法宝",
|
| | | ShareDefine.Def_MFPType_MagicWeapon4:"王者",
|
| | | ShareDefine.Def_MFPType_PetSoul:"宠魂",
|
| | | ShareDefine.Def_MFPType_HorseSoul:"骑魂",
|
| | | ShareDefine.Def_MFPType_Dogz:"神兽",
|
| | |
| | |
|
| | | funcIndexName = {
|
| | | ChConfig.Def_CalcAttrFunc_RoleBase:"角色基础",
|
| | | ChConfig.Def_CalcAttrFunc_LingGen:"灵根",
|
| | | ChConfig.Def_CalcAttrFunc_LingGenQuailty:"灵根品质",
|
| | | ChConfig.Def_CalcAttrFunc_Equip:"装备",
|
| | | ChConfig.Def_CalcAttrFunc_Star:"升星",
|
| | | ChConfig.Def_CalcAttrFunc_Plus:"强化",
|
| | | ChConfig.Def_CalcAttrFunc_Stone:"宝石",
|
| | | ChConfig.Def_CalcAttrFunc_Wash:"洗练",
|
| | |
| | | ChConfig.Def_CalcAttrFunc_GodWeapon:"神兵",
|
| | | ChConfig.Def_CalcAttrFunc_Dienstgrad:"称号",
|
| | | ChConfig.Def_CalcAttrFunc_Rune:"符印",
|
| | | ChConfig.Def_CalcAttrFunc_EquipOutOfPrint:"绝版属性",
|
| | | ChConfig.Def_CalcAttrFunc_GatherSoul:"聚魂",
|
| | | ChConfig.Def_CalcAttrFunc_MagicWeapon1:"人族法宝属性",
|
| | | ChConfig.Def_CalcAttrFunc_MagicWeapon2:"魔族法宝属性", |
| | | ChConfig.Def_CalcAttrFunc_MagicWeapon3:"仙族法宝属性", |
| | | ChConfig.Def_CalcAttrFunc_MagicWeapon4:"王者法宝属性", |
| | | ChConfig.Def_CalcAttrFunc_EquipOutOfPrint:"绝版属性随等级变化",
|
| | | ChConfig.Def_CalcAttrFunc_Success:"成就",
|
| | | ChConfig.Def_CalcAttrFunc_VIP:"VIP",
|
| | | ChConfig.Def_CalcAttrFunc_Stove:"炼丹炉",
|
| | |
| | | ChConfig.Def_CalcAttrFunc_PetSign:"宠物签到",
|
| | | ChConfig.Def_CalcAttrFunc_Dogz:"神兽",
|
| | | ChConfig.Def_CalcAttrFunc_Coat:"ʱװ",
|
| | | ChConfig.Def_CalcAttrFunc_MagicWeapon1:"人族法宝属性",
|
| | | ChConfig.Def_CalcAttrFunc_MagicWeapon2:"魔族法宝属性", |
| | | ChConfig.Def_CalcAttrFunc_MagicWeapon3:"仙族法宝属性", |
| | | ChConfig.Def_CalcAttrFunc_MagicWeapon4:"王者法宝属性", |
| | | }
|
| | |
|
| | | GameWorld.DebugAnswer(curPlayer, "PrintFightPower 模块类型(可选)")
|
| | |
| | | GameWorld.DebugAnswer(curPlayer, "--- %s战力(%s): %s" % (mfpTypeName[mfpType], mfpType, fightPower))
|
| | | for funcIndex in ChConfig.MFPTypeAttrFuncIndexDict[mfpType]:
|
| | | funcName = funcIndexName.get(funcIndex, "属性(%s)" % funcIndex)
|
| | | attrInfo = PlayerControl.GetCalcAttrListValue(curPlayer, funcIndex)
|
| | | attrInfo, insidePerAttrDict = PlayerControl.GetCalcAttrListValue(curPlayer, funcIndex)
|
| | | GameWorld.DebugAnswer(curPlayer, "%s:%s" % (funcName, attrInfo))
|
| | | if insidePerAttrDict:
|
| | | GameWorld.DebugAnswer(curPlayer, "%s内部加成:%s" % (funcName, insidePerAttrDict))
|
| | | return
|
| | |
|
| | | GameWorld.DebugAnswer(curPlayer, "===== 总战力: %s" % curPlayer.GetFightPower())
|
| | |
| | |
|
| | | def __CalcEquips_Effect(curPlayer, classLV):
|
| | | ''' 境界装备系统属性
|
| | | 1. 装备模块(装备本身属性+装备位升星属性+装备位套装属性),每个境界阶独立,每个境界战力独立模块计算
|
| | | 装备基础属性 = 装备物品表配置属性 + 星级基础属性加成
|
| | | 1. 装备模块,每个境界阶独立,每个境界战力独立模块计算
|
| | | 1.1 装备本身属性: 不能有影响其他境界装备的属性
|
| | | 基础属性: 物品表中的配置
|
| | | 传奇属性:
|
| | | 绝版属性:
|
| | | |
| | | 1.2 装备位升星属性:不能有影响其他境界装备的属性
|
| | | |
| | | 2.装备位星级模块 |
| | | 2.1 装备位升星属性:不能有影响其他境界装备的属性
|
| | | 升星基础属性,属性属于装备基础
|
| | | 升星等级属性,会影响本阶装备基础
|
| | | 星级套装属性,详见套装属性
|
| | |
|
| | | 1.3 装备位套装属性:不能有影响其他境界装备的属性
|
| | | 2.2 装备位套装属性:不能有影响其他境界装备的属性
|
| | | 由装备位是否套装及星级数决定套装属性
|
| | |
|
| | | 2.装备位强化模块:战力为所有境界装备位强化属性总和战力
|
| | | 3.装备位强化模块:战力为所有境界装备位强化属性总和战力
|
| | | 强化等级属性
|
| | | 进化等级属性,影响本部位本境界装备基础
|
| | |
|
| | | 3.装备位宝石属性:战力为所有境界装备位宝石属性总和战力
|
| | | 4.装备位宝石属性:战力为所有境界装备位宝石属性总和战力
|
| | | 宝石等级属性
|
| | | 宝石觉醒属性,会影响本阶装备基础
|
| | |
|
| | | 4.装备位洗练属性:战力为所有境界装备位洗练属性总和战力
|
| | | 5.装备位洗练属性:战力为所有境界装备位洗练属性总和战力
|
| | | 洗练等级属性
|
| | | 洗练套装属性,会影响本阶装备基础
|
| | | '''
|
| | |
|
| | | equipMFPTypeList = range(ShareDefine.Def_MFPType_Equip1, ShareDefine.Def_MFPType_Equip15 + 1)
|
| | | if classLV < 1 or classLV > len(equipMFPTypeList):
|
| | | if classLV < 1:
|
| | | GameWorld.ErrLog("刷境界装备属性阶错误!当前不支持该阶模块: classLV=%s" % classLV)
|
| | | return
|
| | | Def_MFPType_EquipClassLV = equipMFPTypeList[classLV - 1]
|
| | | if Def_MFPType_EquipClassLV not in ChConfig.MFPTypeAttrFuncIndexDict:
|
| | | GameWorld.ErrLog("刷境界装备属性阶错误!当前不支持该阶属性: classLV=%s" % classLV)
|
| | | return
|
| | | Def_CalcAttrFunc_EquipClassLV = ChConfig.MFPTypeAttrFuncIndexDict[Def_MFPType_EquipClassLV][0]
|
| | | #GameWorld.DebugLog("----- 刷境界装备战力: classLV=%s" % (classLV))
|
| | |
|
| | | allEquipBaseAttrDict = {} # 所有装备基础属性 {attrID:value, ...}
|
| | |
| | | equipBaseAttrDict = {} # 装备基础属性 {装备位:{attrID:value, ...}, ...}
|
| | |
|
| | | allAttrListEquip = [{} for _ in range(4)] # 装备属性
|
| | | equip_addEquipBaseAttrPerList = [{}, {}, {}] # 装备功能点对装备基础的加成信息
|
| | | equip_addEquipBaseAttrPerList = [{}, {}, {}] # 装备功能点对装备基础的加成信息 [所有部位, 基础部位, 指定部位]
|
| | | allAttrListStar = [{} for _ in range(4)] # 升星属性
|
| | | star_addEquipBaseAttrPerList = [{}, {}, {}] # 升星功能点对装备基础的加成信息 [所有部位, 基础部位, 指定部位]
|
| | | allAttrListPlus = [{} for _ in range(4)] # 强化属性
|
| | | plus_addEquipBaseAttrPerList = [{}, {}, {}] # 强化功能点对装备基础的加成信息
|
| | | plus_addEquipBaseAttrPerList = [{}, {}, {}] # 强化功能点对装备基础的加成信息 [所有部位, 基础部位, 指定部位]
|
| | | allAttrListStone = [{} for _ in range(4)] # 宝石属性
|
| | | #stone_addEquipBaseAttrPerList = [{}, {}, {}] # 宝石功能点对装备基础的加成信息
|
| | | #stone_addEquipBaseAttrPerList = [{}, {}, {}] # 宝石功能点对装备基础的加成信息 [所有部位, 基础部位, 指定部位]
|
| | | allAttrListWash = [{} for _ in range(4)] # 洗练属性
|
| | | #wash_addEquipBaseAttrPerList = [{}, {}, {}] # 洗练功能点对装备基础的加成信息
|
| | | #wash_addEquipBaseAttrPerList = [{}, {}, {}] # 洗练功能点对装备基础的加成信息 [所有部位, 基础部位, 指定部位]
|
| | | #allAttrListOutOfPrintEquip = [{} for _ in range(4)] # 绝版装备属性 需在等级变化独立计算
|
| | |
|
| | | packType = IPY_GameWorld.rptEquip
|
| | |
| | | ipyData = IpyGameDataPY.GetIpyGameData('EquipStarUp', classLV, equipPlace, equipPartStar)
|
| | | starBaseAttrDict = {} if not ipyData else ipyData.GetBaseAttrInfo() # 星级基础
|
| | | for starBaseAttrID, starBaseAttrValue in starBaseAttrDict.items():
|
| | | PlayerControl.CalcAttrDict_Type(starBaseAttrID, starBaseAttrValue, allAttrListEquip)
|
| | | PlayerControl.CalcAttrDict_Type(starBaseAttrID, starBaseAttrValue, allAttrListStar)
|
| | | baseAttrDict[starBaseAttrID] = baseAttrDict.get(starBaseAttrID, 0) + starBaseAttrValue
|
| | | allEquipBaseAttrDict[starBaseAttrID] = allEquipBaseAttrDict.get(starBaseAttrID, 0) + starBaseAttrValue
|
| | | if isBaseEquip:
|
| | |
| | |
|
| | | starAttrDict = {} if not ipyData else ipyData.GetStarAttrInfo() # 星级附加
|
| | | for starAttrID, starAttrValue in starAttrDict.items():
|
| | | PlayerControl.CalcAttrDict_Type(starAttrID, starAttrValue, allAttrListEquip)
|
| | | PlayerControl.CalcAttrDict_Type(starAttrID, starAttrValue, allAttrListStar)
|
| | | #GameWorld.DebugLog(" 星级附加属性: ID=%s +%s" % (starAttrID, starAttrValue))
|
| | | __CalcFuncAddEquipAttrPer(equipPlace, starAttrID, starAttrValue, equip_addEquipBaseAttrPerList)
|
| | | __CalcFuncAddEquipAttrPer(equipPlace, starAttrID, starAttrValue, star_addEquipBaseAttrPerList)
|
| | |
|
| | | equipBaseAttrDict[equipPlace] = baseAttrDict
|
| | |
|
| | |
| | | Operate_EquipWash.CalcAttr_EquipWash(curPlayer, equipIndex, equipPlace, allAttrListWash)
|
| | |
|
| | | # GameWorld.DebugLog(" 装备循环属性: %s" % (allAttrListEquip))
|
| | | # GameWorld.DebugLog(" 升星循环属性: %s" % (allAttrListStar))
|
| | | # GameWorld.DebugLog(" 强化循环属性: %s" % (allAttrListPlus))
|
| | | # GameWorld.DebugLog(" 宝石循环属性: %s" % (allAttrListStone))
|
| | | # GameWorld.DebugLog(" 洗练循环属性: %s" % (allAttrListWash))
|
| | | # GameWorld.DebugLog(" -----" )
|
| | | # 2. 计算遍历后的附加属性
|
| | | #套装属性
|
| | | CalcEquipSuiteAttr(curPlayer, suitCntDict, allAttrListEquip)
|
| | | #套装属性,暂归为星级套装属性
|
| | | CalcEquipSuiteAttr(curPlayer, suitCntDict, allAttrListStar)
|
| | |
|
| | | #GameWorld.DebugLog(" 装备属性套装: %s" % (allAttrListEquip))
|
| | | # GameWorld.DebugLog(" 升星属性套装: %s" % (allAttrListEquip))
|
| | |
|
| | | # 3. 计算对装备基础的附加加成
|
| | | # GameWorld.DebugLog(" -----" )
|
| | | # GameWorld.DebugLog(" 所有装备基础属性: %s" % (allEquipBaseAttrDict))
|
| | | # GameWorld.DebugLog(" 基础装备基础属性: %s" % (baseEquipBaseAttrDict))
|
| | | # GameWorld.DebugLog(" 单件装备基础属性: %s" % (equipBaseAttrDict))
|
| | | # GameWorld.DebugLog(" -----" )
|
| | | #计算功能点对装备基础的加成
|
| | | __CalcFuncAddEquipAttrValue(allEquipBaseAttrDict, baseEquipBaseAttrDict, equipBaseAttrDict, equip_addEquipBaseAttrPerList, allAttrListEquip, "Equip")
|
| | | __CalcFuncAddEquipAttrValue(allEquipBaseAttrDict, baseEquipBaseAttrDict, equipBaseAttrDict, plus_addEquipBaseAttrPerList, allAttrListPlus, "Plus")
|
| | | #__CalcFuncAddEquipAttrValue(allEquipBaseAttrDict, baseEquipBaseAttrDict, equipBaseAttrDict, stone_addEquipBaseAttrPerList, allAttrListStone, "Stone")
|
| | | #__CalcFuncAddEquipAttrValue(allEquipBaseAttrDict, baseEquipBaseAttrDict, equipBaseAttrDict, wash_addEquipBaseAttrPerList, allAttrListWash, "Wash")
|
| | | |
| | | #GameWorld.DebugLog(" 本阶装备属性: %s" % (allAttrListEquip))
|
| | | insideAttrDictEquip, insideAttrDictStar, insideAttrDictPlus, insideAttrDictStone, insideAttrDictWash = {}, {}, {}, {}, {}
|
| | | __CalcFuncAddEquipAttrValue(allEquipBaseAttrDict, baseEquipBaseAttrDict, equipBaseAttrDict, equip_addEquipBaseAttrPerList, insideAttrDictEquip, "Equip")
|
| | | __CalcFuncAddEquipAttrValue(allEquipBaseAttrDict, baseEquipBaseAttrDict, equipBaseAttrDict, star_addEquipBaseAttrPerList, insideAttrDictStar, "Star")
|
| | | __CalcFuncAddEquipAttrValue(allEquipBaseAttrDict, baseEquipBaseAttrDict, equipBaseAttrDict, plus_addEquipBaseAttrPerList, insideAttrDictPlus, "Plus")
|
| | | #__CalcFuncAddEquipAttrValue(allEquipBaseAttrDict, baseEquipBaseAttrDict, equipBaseAttrDict, stone_addEquipBaseAttrPerList, insideAttrDictStone, "Stone")
|
| | | #__CalcFuncAddEquipAttrValue(allEquipBaseAttrDict, baseEquipBaseAttrDict, equipBaseAttrDict, wash_addEquipBaseAttrPerList, insideAttrDictWash, "Wash")
|
| | |
|
| | | #保存计算值
|
| | | PlayerControl.SetCalcAttrListValue(curPlayer, Def_CalcAttrFunc_EquipClassLV, allAttrListEquip)
|
| | | #PlayerControl.SetCalcAttrListValue(curPlayer, ChConfig.Def_CalcAttrFunc_EquipOutOfPrint, allAttrListOutOfPrintEquip)
|
| | | #计算装备基础属性附加战力 (目前组成: 评分战力 + ...)
|
| | | equipFightPowerEx = eval(IpyGameDataPY.GetFuncCompileCfg("FightpowerFormula", 2))
|
| | | #GameWorld.DebugLog(" 装备评分战力: equipScoreTotal=%s,equipFightPowerEx=%s" % (equipScoreTotal, equipFightPowerEx))
|
| | | curPlayer.SetDict(ChConfig.Def_PlayerKey_MFPEx % Def_MFPType_EquipClassLV, equipFightPowerEx)
|
| | |
|
| | | # 4. 累加所有阶装备位属性
|
| | | playerID = curPlayer.GetPlayerID()
|
| | | if playerID not in PyGameData.g_playerEquipPartAttrDict:
|
| | | PyGameData.g_playerEquipPartAttrDict[playerID] = {}
|
| | | equipPartAttrDict = PyGameData.g_playerEquipPartAttrDict[playerID]
|
| | | equipPartAttrDict[classLV] = [allAttrListPlus, allAttrListStone, allAttrListWash]
|
| | | |
| | | allPartAttrListPlus = [{} for _ in range(4)]
|
| | | allPartAttrListStone = [{} for _ in range(4)]
|
| | | allPartAttrListWash = [{} for _ in range(4)]
|
| | | equipPartAttrDict[classLV] = [equipFightPowerEx, allAttrListEquip, insideAttrDictEquip, allAttrListStar, insideAttrDictStar,
|
| | | allAttrListPlus, insideAttrDictPlus, allAttrListStone, insideAttrDictStone, allAttrListWash, insideAttrDictWash]
|
| | |
|
| | | # GameWorld.DebugLog(" ----- 累加所有阶装备位养成属性")
|
| | | # GameWorld.DebugLog(" 本阶强化属性: %s" % (allAttrListPlus))
|
| | | # GameWorld.DebugLog(" 本阶宝石属性: %s" % (allAttrListStone))
|
| | | # GameWorld.DebugLog(" 本阶洗练属性: %s" % (allAttrListWash))
|
| | | # GameWorld.DebugLog(" 本阶装备战力: equipScoreTotal=%s,equipFightPowerEx=%s" % (equipScoreTotal, equipFightPowerEx))
|
| | | # GameWorld.DebugLog(" 本阶装备属性: %s, 内部加成=%s" % (allAttrListEquip, insideAttrDictEquip))
|
| | | # GameWorld.DebugLog(" 本阶升星属性: %s, 内部加成=%s" % (allAttrListStar, insideAttrDictStar))
|
| | | # GameWorld.DebugLog(" 本阶强化属性: %s, 内部加成=%s" % (allAttrListPlus, insideAttrDictPlus))
|
| | | # GameWorld.DebugLog(" 本阶宝石属性: %s, 内部加成=%s" % (allAttrListStone, insideAttrDictStone))
|
| | | # GameWorld.DebugLog(" 本阶洗练属性: %s, 内部加成=%s" % (allAttrListWash, insideAttrDictWash))
|
| | |
|
| | | allClassEquipFightPowerEx = 0
|
| | | allClassAttrListEquip, allClassInsideAttrDictEquip = [{} for _ in range(4)], {}
|
| | | allClassAttrListStar, allClassInsideAttrDictStar = [{} for _ in range(4)], {}
|
| | | allClassAttrListPlus, allClassInsideAttrDictPlus = [{} for _ in range(4)], {}
|
| | | allClassAttrListStone, allClassInsideAttrDictStone = [{} for _ in range(4)], {}
|
| | | allClassAttrListWash, allClassInsideAttrDictWash = [{} for _ in range(4)], {}
|
| | | for classLV, attrList in equipPartAttrDict.items():
|
| | | allAttrListPlus, allAttrListStone, allAttrListWash = attrList
|
| | | equipFightPowerEx, allAttrListEquip, insideAttrDictEquip, allAttrListStar, insideAttrDictStar, \
|
| | | allAttrListPlus, insideAttrDictPlus, allAttrListStone, insideAttrDictStone, allAttrListWash, insideAttrDictWash = attrList
|
| | | #GameWorld.DebugLog(" classLV=%s, %s" % (classLV, attrList))
|
| | | allClassEquipFightPowerEx += equipFightPowerEx
|
| | | for i in xrange(4):
|
| | | PlayerControl.AddAttrDictValue(allPartAttrListPlus[i], allAttrListPlus[i])
|
| | | PlayerControl.AddAttrDictValue(allPartAttrListStone[i], allAttrListStone[i])
|
| | | PlayerControl.AddAttrDictValue(allPartAttrListWash[i], allAttrListWash[i])
|
| | | |
| | | # GameWorld.DebugLog(" 所有阶强化属性: %s" % (allPartAttrListPlus))
|
| | | # GameWorld.DebugLog(" 所有阶宝石属性: %s" % (allPartAttrListStone))
|
| | | # GameWorld.DebugLog(" 所有阶洗练属性: %s" % (allPartAttrListWash))
|
| | | PlayerControl.SetCalcAttrListValue(curPlayer, ChConfig.Def_CalcAttrFunc_Plus, allPartAttrListPlus)
|
| | | PlayerControl.SetCalcAttrListValue(curPlayer, ChConfig.Def_CalcAttrFunc_Stone, allPartAttrListStone)
|
| | | PlayerControl.SetCalcAttrListValue(curPlayer, ChConfig.Def_CalcAttrFunc_Wash, allPartAttrListWash)
|
| | | PlayerControl.AddAttrDictValue(allClassAttrListEquip[i], allAttrListEquip[i])
|
| | | PlayerControl.AddAttrDictValue(allClassAttrListStar[i], allAttrListStar[i])
|
| | | PlayerControl.AddAttrDictValue(allClassAttrListPlus[i], allAttrListPlus[i])
|
| | | PlayerControl.AddAttrDictValue(allClassAttrListStone[i], allAttrListStone[i])
|
| | | PlayerControl.AddAttrDictValue(allClassAttrListWash[i], allAttrListWash[i])
|
| | | PlayerControl.AddAttrDictValue(allClassInsideAttrDictEquip, insideAttrDictEquip)
|
| | | PlayerControl.AddAttrDictValue(allClassInsideAttrDictStar, insideAttrDictStar)
|
| | | PlayerControl.AddAttrDictValue(allClassInsideAttrDictPlus, insideAttrDictPlus)
|
| | | PlayerControl.AddAttrDictValue(allClassInsideAttrDictStone, insideAttrDictStone)
|
| | | PlayerControl.AddAttrDictValue(allClassInsideAttrDictWash, insideAttrDictWash)
|
| | | |
| | | # GameWorld.DebugLog(" 所有阶装备战力: %s" % (allClassEquipFightPowerEx))
|
| | | # GameWorld.DebugLog(" 所有阶装备属性: %s, 内部加成=%s" % (allClassAttrListEquip, allClassInsideAttrDictEquip))
|
| | | # GameWorld.DebugLog(" 所有阶升星属性: %s, 内部加成=%s" % (allClassAttrListStar, allClassInsideAttrDictStar))
|
| | | # GameWorld.DebugLog(" 所有阶强化属性: %s, 内部加成=%s" % (allClassAttrListPlus, allClassInsideAttrDictPlus))
|
| | | # GameWorld.DebugLog(" 所有阶宝石属性: %s, 内部加成=%s" % (allClassAttrListStone, allClassInsideAttrDictStone))
|
| | | # GameWorld.DebugLog(" 所有阶洗练属性: %s, 内部加成=%s" % (allClassAttrListWash, allClassInsideAttrDictWash))
|
| | | curPlayer.SetDict(ChConfig.Def_PlayerKey_MFPEx % ShareDefine.Def_MFPType_Equip, allClassEquipFightPowerEx)
|
| | | PlayerControl.SetCalcAttrListValue(curPlayer, ChConfig.Def_CalcAttrFunc_Equip, allClassAttrListEquip, allClassInsideAttrDictEquip)
|
| | | PlayerControl.SetCalcAttrListValue(curPlayer, ChConfig.Def_CalcAttrFunc_Star, allClassAttrListStar, allClassInsideAttrDictStar)
|
| | | PlayerControl.SetCalcAttrListValue(curPlayer, ChConfig.Def_CalcAttrFunc_Plus, allClassAttrListPlus, allClassInsideAttrDictPlus)
|
| | | PlayerControl.SetCalcAttrListValue(curPlayer, ChConfig.Def_CalcAttrFunc_Stone, allClassAttrListStone, allClassInsideAttrDictStone)
|
| | | PlayerControl.SetCalcAttrListValue(curPlayer, ChConfig.Def_CalcAttrFunc_Wash, allClassAttrListWash, allClassInsideAttrDictWash)
|
| | | return
|
| | |
|
| | | def __CalcFuncAddEquipAttrPer(equipPlace, attrID, attrValue, addPerInfoList):
|
| | |
| | |
|
| | | return
|
| | |
|
| | | def __CalcFuncAddEquipAttrValue(allEquipBaseAttrDict, baseEquipBaseAttrDict, equipBaseAttrDict, addEquipBaseAttrPerList, allAttrList, sign=""):
|
| | | def __CalcFuncAddEquipAttrValue(allEquipBaseAttrDict, baseEquipBaseAttrDict, equipBaseAttrDict, addEquipBaseAttrPerList, allAttrDict, sign=""):
|
| | | ## 计算其他功能属性对装备基础属性加成的属性具体值
|
| | | allPlaceAddPerDict, basePlaceAddPerDict, assignPlaceAddPerDict = addEquipBaseAttrPerList
|
| | | #GameWorld.DebugLog(" 计算功能点对装备基础属性加成: %s" % sign)
|
| | |
| | | continue
|
| | | baseValue = allEquipBaseAttrDict[attrID]
|
| | | addValue = int(baseValue * addPer / 10000.0)
|
| | | PlayerControl.CalcAttrDict_Type(attrID, addValue, allAttrList)
|
| | | PlayerControl.CalcAttrDict_TypeEx(attrID, addValue, allAttrDict)
|
| | | #GameWorld.DebugLog(" 加成: ID=%s +%s %s" % (attrID, addValue, addPer))
|
| | |
|
| | | #GameWorld.DebugLog(" 基础装备属性: %s, 加成%s" % (baseEquipBaseAttrDict, basePlaceAddPerDict))
|
| | |
| | | continue
|
| | | baseValue = baseEquipBaseAttrDict[attrID]
|
| | | addValue = int(baseValue * addPer / 10000.0)
|
| | | PlayerControl.CalcAttrDict_Type(attrID, addValue, allAttrList)
|
| | | PlayerControl.CalcAttrDict_TypeEx(attrID, addValue, allAttrDict)
|
| | | #GameWorld.DebugLog(" 加成: ID=%s +%s %s" % (attrID, addValue, addPer))
|
| | |
|
| | | #GameWorld.DebugLog(" 指定装备属性: %s, 加成%s" % (equipBaseAttrDict, assignPlaceAddPerDict))
|
| | |
| | | continue
|
| | | baseValue = baseAttrDict[attrID]
|
| | | addValue = int(baseValue * addPer / 10000.0)
|
| | | PlayerControl.CalcAttrDict_Type(attrID, addValue, allAttrList)
|
| | | PlayerControl.CalcAttrDict_TypeEx(attrID, addValue, allAttrDict)
|
| | | #GameWorld.DebugLog(" 加成: ID=%s +%s %s" % (attrID, addValue, addPer))
|
| | | return
|
| | |
|
| | |
| | |
|
| | |
|
| | | def RefreshZhuXianAttr(curPlayer):
|
| | | CalcZhuXianAttr(curPlayer)
|
| | | PlayerControl.PlayerControl(curPlayer).RefreshPlayerAttrState() |
| | | #CalcZhuXianAttr(curPlayer)
|
| | | #PlayerControl.PlayerControl(curPlayer).RefreshPlayerAttrState() |
| | | return
|
| | |
|
| | |
|
| | |
| | | PlayerControl.CalcAttrDict_Type(effID, effValue, allAttrListZXStone)
|
| | |
|
| | | # 保存计算值
|
| | | PlayerControl.SetCalcAttrListValue(curPlayer, ChConfig.Def_CalcAttrFunc_ZXEquip, allAttrList)
|
| | | PlayerControl.SetCalcAttrListValue(curPlayer, ChConfig.Def_CalcAttrFunc_ZXEquipSuit, allAttrListZXSuit)
|
| | | PlayerControl.SetCalcAttrListValue(curPlayer, ChConfig.Def_CalcAttrFunc_ZXEquipStone, allAttrListZXStone)
|
| | | #PlayerControl.SetCalcAttrListValue(curPlayer, ChConfig.Def_CalcAttrFunc_ZXEquip, allAttrList)
|
| | | #PlayerControl.SetCalcAttrListValue(curPlayer, ChConfig.Def_CalcAttrFunc_ZXEquipSuit, allAttrListZXSuit)
|
| | | #PlayerControl.SetCalcAttrListValue(curPlayer, ChConfig.Def_CalcAttrFunc_ZXEquipStone, allAttrListZXStone)
|
| | |
|
| | | #计算装备基础属性附加战力 (目前组成: 评分战力 + ...)
|
| | | equipFightPowerEx = eval(IpyGameDataPY.GetFuncCompileCfg("FightpowerFormula", 2))
|
| | | GameWorld.DebugLog("诛仙装备评分战力: equipScoreTotal=%s,equipFightPowerEx=%s" % (equipScoreTotal, equipFightPowerEx))
|
| | | curPlayer.SetDict(ChConfig.Def_PlayerKey_MFPEx % ShareDefine.Def_MFPType_ZhuXian, equipFightPowerEx)
|
| | | #curPlayer.SetDict(ChConfig.Def_PlayerKey_MFPEx % ShareDefine.Def_MFPType_ZhuXian, equipFightPowerEx)
|
| | | return
|
| | |
|
| | |
|
| | |
| | |
|
| | | def RefreshPlayerAttrStateEx(self):
|
| | | ''' 本项目刷属性规则
|
| | | 功能属性层级一(线性层级、非线性层级)
|
| | | 功能属性层级二(线性层级、非线性层级)
|
| | | ...
|
| | | 固定属性层级
|
| | | buff层级
|
| | | |
| | | 1. 初始化
|
| | | 属性:
|
| | | 1.固定属性:如攻击+100
|
| | | 2.百分比属性: 如攻击+5%,百分比加成基值仅为固定属性,百分比加成属性值不被除buff百分比外的任何百分比属性二次加成
|
| | |
|
| | | 功能属性层级一、
|
| | | 2.基础属性计算
|
| | | 3.战斗属性计算
|
| | | 线性层级属性: 基础层级属性 + 功能层级属性
|
| | | 基础层级属性:角色基础属性(等级提升 + 属性点提升) + 装备物品表基础属性 + 部位强化基础属性
|
| | | 功能层级属性:神兵 + 坐骑 + 全身部位强化星级累加 + 珍品 + 时装 + 套装 + 宝石 + 战盟科技 + 符文 + 守护 等
|
| | | 层级:
|
| | | 1.属性层级:所有功能同一层级
|
| | | 2.buff层级:百分比可对功能百分比加成的属性进行二次加成
|
| | | |
| | | 功能模块:定义一个功能,比如灵根模块,一个模块可能包含多个功能点
|
| | | 功能点:某个模块下的各个属性功能点,如灵根模块可能包含 灵根基础、灵根品质 两个功能点属性
|
| | | |
| | | 百分比加成值:百分比加成属性值不被除buff百分比外的任何百分比属性2次加成
|
| | | 1.功能内部属性百分比加成:功能百分比属性对自己功能固定值加成
|
| | | 2.功能交叉属性百分比加成:功能百分比属性对其他功能固定值加成
|
| | | 3.功能固定属性百分比加成:功能百分比属性对所有功能固定值加成
|
| | | 4.buff层级百分比:对所有属性进行二次加成
|
| | | |
| | | 技能属性:固定值不享受固定百分比加成
|
| | |
|
| | | 注意:该层中还包含针对基础属性或功能属性的数值百分比提升,此提升值也是累加到线性层级属性
|
| | | 如: 【基础攻击百分比】即对 基础属性 中攻击属性百分比提升
|
| | | 【神兵生命属性百分比】即对 神兵功能属性 中生命属性百分比提升
|
| | | 类似此类属性并不是真正意义上的非线性属性,仅是对某个功能或功能组的对应属性进行百分比提升,最终的提升值还是算如线性属性层
|
| | | |
| | | 非线性层级属性: 即整体层级百分比增加属性
|
| | | 直接以当前属性为基值进行属性百分比提升
|
| | | 功能属性层级二、
|
| | | ...
|
| | | |
| | | 4.固定属性:
|
| | | 附加的固定值属性,该属性在非线性计算之后,直接累加,不算入非线性属性的基值
|
| | | buff层级:
|
| | | 1.不算战力
|
| | | 2.先算百分比加成再加固定值
|
| | |
|
| | | 5.计算以上所有属性的战斗力
|
| | | |
| | | 6.buff层级:
|
| | | 固定值buff, 直接累加数值
|
| | | 百分比buff: 真正的最最最外层,直接按百分比提升对应的属性值
|
| | | 注:该层提升的属性不算战斗力
|
| | | 属性算法:
|
| | | 模块固定属性 = 功能点A固定值 + 功能点B固定值 + ...
|
| | | 固定总属性 = 模块A固定值 + 模块B固定值 + ...
|
| | | 无buff总属性 = 固定总属性 + 内部百分比加成值 + 交叉百分比加成 + 固定总属性百分比加成 + 技能百分比对固定属性加成 + 技能固定值
|
| | | 含buff总属性 = 无buff总属性 * buff百分比加成 + buff固定值
|
| | | '''
|
| | | curPlayer = self.__Player
|
| | |
|
| | |
| | | notAttrList = [{} for _ in range(4)]
|
| | |
|
| | | # 1.初始化人物各项状态及属性
|
| | | self.InitPlayerState() |
| | | self.InitPlayerState()
|
| | | #self.PrintAttr(curPlayer, "初始化")
|
| | |
|
| | | # 功能属性层级一...
|
| | |
| | | # 2.1 获取所有功能计算点计算的属性值, 统计基础属性累加
|
| | | baseAttrDict = {}
|
| | | baseAttrNolineDict = {}
|
| | | funcAttrInfoList = []
|
| | | funcAttrLen = len(ChConfig.CalcAttrFuncList)
|
| | | funcAttrInfoList = [[{} for _ in range(4)]] * funcAttrLen
|
| | | funcInsidePerAttrList = [{}] * funcAttrLen # 功能内部百分比附加属性
|
| | | for funcIndex in ChConfig.CalcAttrFuncList:
|
| | | if funcIndex in ChConfig.CalcAttrExFuncListNoFightPower:
|
| | | # 此类功能不算战斗力
|
| | | funcAttrInfoList.append([{} for _ in range(4)]) # 只为防止后面访问列表元素时不越界, 功能点分类可无视编号顺序
|
| | | continue
|
| | | |
| | | # 基础属性等功能汇总完后统一刷新,因为各功能可能会加属性点数
|
| | | if funcIndex in [ChConfig.Def_CalcAttrFunc_RoleBase, ChConfig.Def_CalcAttrFunc_LingGenQuailty]:
|
| | | funcAttrInfoList.append([{} for _ in range(4)])
|
| | | continue
|
| | | attrInfo = GetCalcAttrListValue(curPlayer, funcIndex)
|
| | | if attrInfo != notAttrList:
|
| | | GameWorld.DebugLog("功能点属性: %s, %s" % (funcIndex, attrInfo))
|
| | | funcAttrInfoList.append(attrInfo)
|
| | | attrInfo, insidePerAttrDict = GetCalcAttrListValue(curPlayer, funcIndex)
|
| | | if attrInfo == notAttrList and not insidePerAttrDict:
|
| | | continue
|
| | | GameWorld.DebugLog("功能点属性: %s, %s, 内层百分比附加: %s" % (funcIndex, attrInfo, insidePerAttrDict))
|
| | | funcAttrInfoList[funcIndex] = attrInfo
|
| | | funcInsidePerAttrList[funcIndex] = insidePerAttrDict
|
| | | # 不同功能点间的数值累加,需使用支持衰减递增的计算方式
|
| | | AddAttrDictValue(baseAttrDict, attrInfo[ChConfig.CalcAttr_Base])
|
| | | AddAttrDictValue(baseAttrNolineDict, attrInfo[ChConfig.CalcAttr_BaseNoline])
|
| | |
| | |
|
| | | # 功能有加基础属性值,这里再重新刷新一下基础属性, 基础属性会影响战斗属性, 每次都刷新角色基础属性
|
| | | self.CalcRoleBaseAttr(curPlayer)
|
| | | roleBaseAttrInfo = GetCalcAttrListValue(curPlayer, ChConfig.Def_CalcAttrFunc_RoleBase)
|
| | | lingGenQualityAttrList = GetCalcAttrListValue(curPlayer, ChConfig.Def_CalcAttrFunc_LingGenQuailty)
|
| | | roleBaseAttrInfo, roleInsidePerAttrDict = GetCalcAttrListValue(curPlayer, ChConfig.Def_CalcAttrFunc_RoleBase)
|
| | | lingGenQualityAttrList, lingGenQualityInsidePerAttrDict = GetCalcAttrListValue(curPlayer, ChConfig.Def_CalcAttrFunc_LingGenQuailty)
|
| | | funcAttrInfoList[ChConfig.Def_CalcAttrFunc_RoleBase] = roleBaseAttrInfo
|
| | | funcInsidePerAttrList[ChConfig.Def_CalcAttrFunc_RoleBase] = roleInsidePerAttrDict
|
| | | funcAttrInfoList[ChConfig.Def_CalcAttrFunc_LingGenQuailty] = lingGenQualityAttrList
|
| | | GameWorld.DebugLog("功能点属性: %s, %s" % (ChConfig.Def_CalcAttrFunc_RoleBase, roleBaseAttrInfo))
|
| | | GameWorld.DebugLog("功能点属性: %s, %s" % (ChConfig.Def_CalcAttrFunc_LingGenQuailty, lingGenQualityAttrList))
|
| | | funcInsidePerAttrList[ChConfig.Def_CalcAttrFunc_LingGenQuailty] = lingGenQualityInsidePerAttrDict
|
| | | GameWorld.DebugLog("功能点属性: %s, %s, 内层百分比附加: %s" % (ChConfig.Def_CalcAttrFunc_RoleBase, roleBaseAttrInfo, roleInsidePerAttrDict))
|
| | | GameWorld.DebugLog("功能点属性: %s, %s, 内层百分比附加: %s" % (ChConfig.Def_CalcAttrFunc_LingGenQuailty, lingGenQualityAttrList, lingGenQualityInsidePerAttrDict))
|
| | |
|
| | | #self.PrintAttr(curPlayer, "基础后")
|
| | |
|
| | |
| | | ChConfig.TYPE_Calc_WingHPPer:funcAttrInfoList[ChConfig.Def_CalcAttrFunc_Wing],
|
| | | }
|
| | | # 3.2 统计各功能之间非线性属性交叉影响累加
|
| | | funcAddAttrPerInfoDict = {} # 百分比交叉影响所提升的属性值 {功能属性编号:{提升的属性类型:数值, ...}, ...}
|
| | | funcCrossAttrPerInfoDict = {} # 百分比交叉影响所提升的属性值 {功能属性编号:{提升的属性类型:数值, ...}, ...}
|
| | | for i, funcAttrList in enumerate(funcAttrInfoList):
|
| | | battleNoLineAttrDict = funcAttrList[ChConfig.CalcAttr_BattleNoline] # 暂写死只取战斗非线性的
|
| | | if not battleNoLineAttrDict:
|
| | |
| | | if addAttrDict:
|
| | | # 增加的数值统计到百分比属性所属功能点
|
| | | # 如符文有个武器攻击百分比增加属性,增加的数值属于符文功能,不属于武器功能点的,只是基值使用了武器攻击
|
| | | funcAddAttrPerInfoDict[i] = addAttrDict # 先都统计完后再累加到对应功能属性里,不然可能会导致功能基值变更
|
| | | funcCrossAttrPerInfoDict[i] = addAttrDict # 先都统计完后再累加到对应功能属性里,不然可能会导致功能基值变更
|
| | |
|
| | | GameWorld.DebugLog("交叉影响属性: %s" % funcAddAttrPerInfoDict)
|
| | | # 交叉提升的属性值累加到对应功能上
|
| | | for i, addAttrDict in funcAddAttrPerInfoDict.items():
|
| | | # 这里累加的是到相同的功能点,直接累加,不做衰减处理
|
| | | GameWorld.AddDictValue(funcAttrInfoList[i][ChConfig.CalcAttr_Battle], addAttrDict)
|
| | | GameWorld.DebugLog("交叉影响属性: %s" % funcCrossAttrPerInfoDict)
|
| | | |
| | | # 3.3 统计所有功能固定属性影响累加
|
| | | allFixAttrDict = {} # 固定属性层级总属性基值
|
| | | for funcIndex, funcAttrList in enumerate(funcAttrInfoList):
|
| | | # 技能模块不算计入功能固定属性、不计战力
|
| | | if funcIndex in ChConfig.CalcAttrFuncSkillList:
|
| | | continue
|
| | | AddAttrDictValue(allFixAttrDict, funcAttrList[ChConfig.CalcAttr_Battle])
|
| | |
|
| | | # 3.3 累加以上已统计的所有属性(视为整体层级,即非线性属性所需要的基值)
|
| | | allFuncAttrIndexList = []
|
| | | allFuncAttrInfoList, attrInfoExList = [], [] # 整理功能层级属性信息列表, 额外附加固定值属性信息列表
|
| | | for funcIndex, attrInfo in enumerate(funcAttrInfoList):
|
| | | if funcIndex not in ChConfig.CalcAttrExFuncList:
|
| | | allFuncAttrIndexList.append(funcIndex)
|
| | | allFuncAttrInfoList.append(attrInfo)
|
| | | else:
|
| | | attrInfoExList.append(attrInfo)
|
| | | allAttrList = AddAttrListValue(allFuncAttrInfoList) # 不同功能点间的数值累加,需使用支持衰减递增的计算方式
|
| | | GameWorld.DebugLog("整体层级功能点: %s" % allFuncAttrIndexList)
|
| | | GameWorld.DebugLog("整体层级线性属性: %s" % allAttrList)
|
| | | |
| | | # 第二层级属性
|
| | | allAttrExList = AddAttrListValue(attrInfoExList)
|
| | | GameWorld.DebugLog("附加层级功能点: %s" % ChConfig.CalcAttrExFuncList)
|
| | | GameWorld.DebugLog("附加层级线性属性: %s" % allAttrExList)
|
| | | |
| | | # 初始化各功能点战斗力计算模块
|
| | | mfpObjAttrDict = {}
|
| | | for mfpType, attrFuncIndexList in ChConfig.MFPTypeAttrFuncIndexDict.items():
|
| | | if len(attrFuncIndexList) == 1:
|
| | | mfpAttrList = funcAttrInfoList[attrFuncIndexList[0]]
|
| | | else:
|
| | | mfpAttrList = AddAttrListValue([funcAttrInfoList[i] for i in attrFuncIndexList])
|
| | | fixAttrPerAddExDict = {} # 固定总属性百分比影响所提升的属性值 {功能属性编号:{提升的属性类型:数值, ...}, ...}
|
| | | for funcIndex, funcAttrList in enumerate(funcAttrInfoList):
|
| | | fixAddPerDict = funcAttrList[ChConfig.CalcAttr_BattleNoline]
|
| | | if not fixAddPerDict:
|
| | | continue
|
| | | addValueExDict = {}
|
| | | for fixAttrType, addPer in fixAddPerDict.items():
|
| | | if fixAttrType not in allFixAttrDict:
|
| | | continue
|
| | | curFixValue = allFixAttrDict[fixAttrType]
|
| | | addValueEx = int(curFixValue * addPer / 10000.0)
|
| | | addValueExDict[fixAttrType] = addValueEx
|
| | | fixAttrPerAddExDict[funcIndex] = addValueExDict
|
| | |
|
| | | #GameWorld.DebugLog("模块线性属性: mfpType=%s,%s" % (mfpType, mfpAttrList))
|
| | | mfpObj = self.GetModuleFightPowerObj(mfpType)
|
| | | mfpObj.SetCalcMFPBattleAttr(mfpAttrList)
|
| | | mfpObjAttrDict[mfpObj] = mfpAttrList[ChConfig.CalcAttr_BattleNoline]
|
| | | |
| | | # 不加战力,但是有算属性的功能属性,如一些被动技能(战力在技能表里配置)
|
| | | skillNoFightPowerAttrList = [{} for _ in range(4)]
|
| | | SkillShell.CalcPassiveAttr_Effect(curPlayer, skillNoFightPowerAttrList) # 属性类技能与buff同层
|
| | | for funcIndex in ChConfig.CalcAttrExFuncListNoFightPower:
|
| | | skillNoFightPowerAttrList = AddAttrListValue([skillNoFightPowerAttrList, GetCalcAttrListValue(curPlayer, funcIndex)]) |
| | | GameWorld.DebugLog("无战力被动属性: %s" % skillNoFightPowerAttrList)
|
| | | GameWorld.DebugLog("固定属性总和: %s" % allFixAttrDict)
|
| | | GameWorld.DebugLog("固定百分比附加属性: %s" % fixAttrPerAddExDict)
|
| | |
|
| | | # 总属性 = 整体功能层级固定值*(1+功能层级百分比+特殊固定层级百分比+永久技能层级百分比)+特殊固定层级固定值+永久技能层级固定值
|
| | | allNoLineAttrDict = {}
|
| | | AddAttrDictValue(allNoLineAttrDict, allAttrList[ChConfig.CalcAttr_BattleNoline])
|
| | | AddAttrDictValue(allNoLineAttrDict, allAttrExList[ChConfig.CalcAttr_BattleNoline])
|
| | | AddAttrDictValue(allNoLineAttrDict, skillNoFightPowerAttrList[ChConfig.CalcAttr_BattleNoline])
|
| | | GameWorld.DebugLog("最终非线性属性: %s" % allNoLineAttrDict)
|
| | | |
| | | # 整体层级属性增加到玩家身上
|
| | | CalcLineEffect.ChangePlayerAttrInLineEffectList(curPlayer, allAttrList[ChConfig.CalcAttr_Battle])
|
| | | #self.PrintAttr(curPlayer, "整体线")
|
| | | CalcNoLineEffect.ChangePlayerAttrInNoLineEffectList(curPlayer, allNoLineAttrDict, mfpObjAttrDict)
|
| | | #self.PrintAttr(curPlayer, "整非线")
|
| | | |
| | | |
| | | # 4.计算战力, 需在计算buff层之前计算
|
| | | # 4. 计算属性及战力, 需在计算buff层之前计算
|
| | | curLV = curPlayer.GetLV()
|
| | | fpParam = IpyGameDataPY.GetIpyGameData("FightPowerParam", curLV)
|
| | | mfpDict = {} # 模块战斗力
|
| | | for mfpObj in mfpObjAttrDict.keys():
|
| | | mfp = 0 if not fpParam else mfpObj.GetModuleFightPower(fpParam)
|
| | | mfp += curPlayer.GetDictByKey(ChConfig.Def_PlayerKey_MFPSkill % mfpObj.mfpType)
|
| | | mfp += curPlayer.GetDictByKey(ChConfig.Def_PlayerKey_MFPEx % mfpObj.mfpType)
|
| | | mfpDict[mfpObj.mfpType] = mfp
|
| | | for mfpType, attrFuncIndexList in ChConfig.MFPTypeAttrFuncIndexDict.items():
|
| | | mfpAttrList = [{} for _ in range(4)]
|
| | | mfpAttrExDict = {}
|
| | | for funcIndex in attrFuncIndexList:
|
| | | funcAttrList = funcAttrInfoList[funcIndex]
|
| | | funcInsidePerAttrDict = funcInsidePerAttrList[funcIndex] # 功能点内部百分比加成属性
|
| | | funcCrossPerAttrDict = funcCrossAttrPerInfoDict.get(funcIndex, {}) # 功能点交叉百分比加成属性
|
| | | fixPerAttrDict = fixAttrPerAddExDict.get(funcIndex, {}) # 功能总固定属性百分比加成属性
|
| | | |
| | | CalcLineEffect.ChangePlayerAttrInLineEffectList(curPlayer, funcAttrList[ChConfig.CalcAttr_Battle])
|
| | | CalcLineEffect.ChangePlayerAttrInLineEffectList(curPlayer, funcInsidePerAttrDict)
|
| | | CalcLineEffect.ChangePlayerAttrInLineEffectList(curPlayer, funcCrossPerAttrDict)
|
| | | CalcLineEffect.ChangePlayerAttrInLineEffectList(curPlayer, fixPerAttrDict)
|
| | | # 不算战力的
|
| | | if funcIndex in ChConfig.CalcAttrFuncNoFightPowerList or funcIndex in ChConfig.CalcAttrFuncSkillList:
|
| | | continue
|
| | | mfpAttrList = AddAttrListValue([mfpAttrList, funcAttrList])
|
| | | AddAttrDictValue(mfpAttrExDict, funcInsidePerAttrDict)
|
| | | AddAttrDictValue(mfpAttrExDict, funcCrossPerAttrDict)
|
| | | AddAttrDictValue(mfpAttrExDict, fixPerAttrDict)
|
| | | |
| | | mfpObj = self.GetModuleFightPowerObj(mfpType)
|
| | | mfpObj.SetCalcMFPBattleAttr(mfpAttrList)
|
| | | for attrIndex, value in mfpAttrExDict.items():
|
| | | mfpObj.AddCalcMFPAttr(attrIndex, value)
|
| | | |
| | | mfpValue = 0 if not fpParam else mfpObj.GetModuleFightPower(fpParam)
|
| | | mfpSkill = curPlayer.GetDictByKey(ChConfig.Def_PlayerKey_MFPSkill % mfpObj.mfpType)
|
| | | mfpEx = curPlayer.GetDictByKey(ChConfig.Def_PlayerKey_MFPEx % mfpObj.mfpType)
|
| | | mfpTotal = mfpValue + mfpSkill + mfpEx
|
| | | mfpDict[mfpObj.mfpType] = mfpTotal
|
| | |
|
| | | # 最后在附加上特殊附加层级线性属性、永久技能层级固定值
|
| | | CalcLineEffect.ChangePlayerAttrInLineEffectList(curPlayer, allAttrExList[ChConfig.CalcAttr_Battle])
|
| | | CalcLineEffect.ChangePlayerAttrInLineEffectList(curPlayer, skillNoFightPowerAttrList[ChConfig.CalcAttr_Battle])
|
| | | #self.PrintAttr(curPlayer, "固定层级")
|
| | | #GameWorld.DebugLog("整体层级线性属性: %s" % allAttrList)
|
| | | |
| | | # 5.被动技能附加属性,不算战力
|
| | | passiveSkillAttrList = [{} for _ in range(4)]
|
| | | SkillShell.CalcPassiveAttr_Effect(curPlayer, passiveSkillAttrList) # 属性类技能与buff同层
|
| | | for funcIndex in ChConfig.CalcAttrFuncSkillList:
|
| | | passiveSkillAttrList = AddAttrListValue([passiveSkillAttrList, funcAttrInfoList[funcIndex]]) |
| | | GameWorld.DebugLog("无战力被动属性: %s" % passiveSkillAttrList)
|
| | | |
| | | skillFixAttrExDict = {}
|
| | | skillFixAddPerDict = passiveSkillAttrList[ChConfig.CalcAttr_BattleNoline]
|
| | | for fixAttrType, addPer in skillFixAddPerDict.items():
|
| | | if fixAttrType not in allFixAttrDict:
|
| | | continue
|
| | | curFixValue = allFixAttrDict[fixAttrType]
|
| | | addValueEx = int(curFixValue * addPer / 10000.0)
|
| | | skillFixAttrExDict[fixAttrType] = addValueEx
|
| | | CalcLineEffect.ChangePlayerAttrInLineEffectList(curPlayer, passiveSkillAttrList[ChConfig.CalcAttr_Battle])
|
| | | CalcLineEffect.ChangePlayerAttrInLineEffectList(curPlayer, skillFixAttrExDict)
|
| | |
|
| | | #护盾值刷新
|
| | | self.__RefreshMaxProDef(beforeMaxProDef)
|
| | |
| | | GameWorld.AddDictValue(attrDict, {i:value})
|
| | | return
|
| | |
|
| | | def CalcAttrDict_TypeEx(attrType, value, allAttrDict):
|
| | | ## 统计玩家属性,累加
|
| | | if value == 0:
|
| | | return
|
| | | |
| | | #[属性索引, 是否基础属性,(非)线性]
|
| | | attrInfo = ChConfig.ItemEffect_AttrDict.get(attrType, [])
|
| | | if attrInfo == []:
|
| | | return
|
| | | for i in attrInfo[0]:
|
| | | GameWorld.AddDictValue(allAttrDict, {i:value})
|
| | | return
|
| | |
|
| | | #===============================================================================
|
| | | # CalcAttr_Base,
|
| | | # CalcAttr_BaseNoline,
|
| | |
| | | #-------------------------------------------------------------------------------
|
| | |
|
| | | ## 设置保存功能事先计算好的属性值
|
| | | def SetCalcAttrListValue(curPlayer, funcIndex, allAttrList):
|
| | | def SetCalcAttrListValue(curPlayer, funcIndex, allAttrList, insidePerAttrDict={}):
|
| | | # 设置值之前先清空重置
|
| | | ClearCalcAttrListValue(curPlayer, funcIndex)
|
| | |
|
| | |
| | | if playerID not in PyGameData.g_playerFuncAttrDict:
|
| | | PyGameData.g_playerFuncAttrDict[playerID] = {}
|
| | | funcAttrDict = PyGameData.g_playerFuncAttrDict[playerID]
|
| | | funcAttrDict[funcIndex] = allAttrList
|
| | | #GameWorld.DebugLog("保存功能点属性: funcIndex=%s, %s" % (funcIndex, allAttrList))
|
| | | funcAttrDict[funcIndex] = [allAttrList, insidePerAttrDict]
|
| | | #GameWorld.DebugLog("保存功能点属性: funcIndex=%s, %s, %s" % (funcIndex, allAttrList, insidePerAttrDict))
|
| | | return
|
| | |
|
| | | def GetCalcAttrListValue(curPlayer, funcIndex):
|
| | | ## 获取功能点预先计算的所加属性值
|
| | | attrList = [{} for _ in range(4)]
|
| | | insidePerAttrDict = {}
|
| | | if isinstance(funcIndex, int):
|
| | | funcIndexList = [funcIndex]
|
| | | elif isinstance(funcIndex, list):
|
| | | funcIndexList = funcIndex
|
| | | else:
|
| | | return attrList
|
| | | return attrList, insidePerAttrDict
|
| | |
|
| | | playerID = curPlayer.GetPlayerID()
|
| | | if playerID not in PyGameData.g_playerFuncAttrDict:
|
| | | return attrList
|
| | | return attrList, insidePerAttrDict
|
| | | funcAttrDict = PyGameData.g_playerFuncAttrDict[playerID]
|
| | | for funcIndex in funcIndexList:
|
| | | if funcIndex not in funcAttrDict:
|
| | | continue
|
| | | funcAttrList = funcAttrDict[funcIndex]
|
| | | funcAttrList, funcInsidePerAttrDict = funcAttrDict[funcIndex]
|
| | | for i, attrDict in enumerate(attrList):
|
| | | curAttrDict = funcAttrList[i]
|
| | | AddAttrDictValue(attrDict, curAttrDict)
|
| | | return attrList
|
| | | AddAttrDictValue(insidePerAttrDict, funcInsidePerAttrDict)
|
| | | return attrList, insidePerAttrDict
|
| | |
|
| | | ## 重置缓存
|
| | | def ClearCalcAttrListValue(curPlayer, funcIndex):
|
| | |
| | | )=range(5)
|
| | |
|
| | | # 战斗力模块类型
|
| | | Def_MFPType_Max = 44
|
| | | Def_MFPType_Max = 26
|
| | | ModuleFightPowerTypeList = (
|
| | | Def_MFPType_Role, # 角色 0
|
| | | Def_MFPType_Equip, # 装备(基本装备位) 1 - 废弃
|
| | | Def_MFPType_Equip, # 装备(装备本身) 1
|
| | | Def_MFPType_Plus, # 强化 2
|
| | | Def_MFPType_Stone, # 宝石 3
|
| | | Def_MFPType_LingGen, # 灵根 4
|
| | |
| | | Def_MFPType_GodWeapon, # 神兵 10
|
| | | Def_MFPType_Dienstgrad, #称号 11
|
| | | Def_MFPType_Rune, # 符印 12
|
| | | Def_MFPType_13, #
|
| | | Def_MFPType_Star, # 升星 13
|
| | | Def_MFPType_MagicWeapon1, # 人族法宝 14
|
| | | Def_MFPType_StoveYao, # 炼丹炉丹药 15
|
| | | Def_MFPType_MagicWeapon2, # 魔族法宝 16
|
| | |
| | | Def_MFPType_GatherSoul, # 聚魂 22
|
| | | Def_MFPType_MagicWeapon4, # 王者法宝 23
|
| | | Def_MFPType_Coat, # ʱװ 24
|
| | | Def_MFPType_ZhuXian, # 诛仙 25 - 废弃
|
| | | Def_MFPType_Equip1, # 境界装备1阶 26
|
| | | Def_MFPType_Equip2, # 境界装备2阶 27
|
| | | Def_MFPType_Equip3, # 境界装备3阶 28
|
| | | Def_MFPType_Equip4, # 境界装备4阶 29
|
| | | Def_MFPType_Equip5, # 境界装备5阶 30
|
| | | Def_MFPType_Equip6, # 境界装备6阶 31
|
| | | Def_MFPType_Equip7, # 境界装备7阶 32
|
| | | Def_MFPType_Equip8, # 境界装备8阶 33
|
| | | Def_MFPType_Equip9, # 境界装备9阶 34
|
| | | Def_MFPType_Equip10, # 境界装备10阶 35
|
| | | Def_MFPType_Equip11, # 境界装备11阶 36
|
| | | Def_MFPType_Equip12, # 境界装备12阶 37
|
| | | Def_MFPType_Equip13, # 境界装备13阶 38
|
| | | Def_MFPType_Equip14, # 境界装备14阶 39
|
| | | Def_MFPType_Equip15, # 境界装备15阶 40
|
| | | Def_MFPType_Other, # 其他
|
| | |
|
| | | #以下暂时没用到,改时再处理
|
| | | Def_MFPType_Passive, #被动技能
|
| | | Def_MFPType_ClothesCoat, #衣服时装
|
| | | ) = range(Def_MFPType_Max)
|
| | |
|
| | | #事件汇报用户行为-----------------------------------------------------------
|
| | |
| | | # @param curPlayer 当前玩家
|
| | | # @param effectDict 效果列表
|
| | | # @return None
|
| | | def ChangePlayerAttrInNoLineEffectList(curPlayer, effectDict, mfpObjAttrDict=None, isBuffAttr=False):
|
| | | def ChangePlayerAttrInNoLineEffectList(curPlayer, effectDict, isBuffAttr=False):
|
| | | for key, value in effectDict.items():
|
| | | if value == 0:
|
| | | continue
|
| | |
| | | ## # 衰减算法
|
| | | ## EffGetSet.SetValueByEffIndex(curPlayer, key, tmpValue)
|
| | | # else:
|
| | | if mfpObjAttrDict:
|
| | | for mfpObj, attrDict in mfpObjAttrDict.items():
|
| | | #if not attrDict.has_key(key): # 如果该模块没有增加该属性,则跳过
|
| | | if key not in attrDict: # 如果该模块没有增加该属性,则跳过
|
| | | continue
|
| | | curMValue = attrDict[key]
|
| | | curMAddValue = curValue * curMValue / ChConfig.Def_MaxRateValue # 相对增加值
|
| | | mfpObj.AddCalcMFPAttr(key, curMAddValue) # 给对应模块累加上非线性增加的战斗属性值
|
| | | |
| | | EffGetSet.SetValueByEffIndex(curPlayer, key, curValue * (ChConfig.Def_MaxRateValue + value) / ChConfig.Def_MaxRateValue)
|
| | |
|
| | | return
|
| | |
| | |
|
| | |
|
| | | def OnCalcBuffEx(defender, curEffect, calcDict, curBuff):
|
| | | if defender.GetGameObjType() != IPY_GameWorld.gotPlayer:
|
| | | return
|
| | | suitsLV = ChEquip.GetEquipSuitsLVByType(defender, ChConfig.EquipSuitType_Normal, ChConfig.EquipGroupType_Armor)
|
| | | if not suitsLV:
|
| | | return
|
| | | attrList = PlayerControl.GetCalcAttrListValue(defender, curEffect.GetEffectValue(2))
|
| | | attrType = curEffect.GetEffectValue(1)
|
| | | attrTypeList = [attrType]
|
| | | # 攻击力有最大最小 特殊处理
|
| | | if attrType in [ChConfig.TYPE_Calc_AttrATKMin, ChConfig.TYPE_Calc_AttrATKMax]:
|
| | | attrTypeList = [ChConfig.TYPE_Calc_AttrATKMin, ChConfig.TYPE_Calc_AttrATKMax]
|
| | | for tmpType in attrTypeList:
|
| | | value = int(attrList[2].get(tmpType, 0)*curEffect.GetEffectValue(0)*suitsLV*1.0/ChConfig.Def_MaxRateValue)
|
| | | calcDict[tmpType] = calcDict.get(tmpType, 0) + value
|
| | | |
| | | # 境界装备改版,暂取消
|
| | | return
|
| | | # if defender.GetGameObjType() != IPY_GameWorld.gotPlayer:
|
| | | # return
|
| | | # suitsLV = ChEquip.GetEquipSuitsLVByType(defender, ChConfig.EquipSuitType_Normal, ChConfig.EquipGroupType_Armor)
|
| | | # if not suitsLV:
|
| | | # return
|
| | | # attrList = PlayerControl.GetCalcAttrListValue(defender, curEffect.GetEffectValue(2))
|
| | | # attrType = curEffect.GetEffectValue(1)
|
| | | # attrTypeList = [attrType]
|
| | | # # 攻击力有最大最小 特殊处理
|
| | | # if attrType in [ChConfig.TYPE_Calc_AttrATKMin, ChConfig.TYPE_Calc_AttrATKMax]:
|
| | | # attrTypeList = [ChConfig.TYPE_Calc_AttrATKMin, ChConfig.TYPE_Calc_AttrATKMax]
|
| | | # for tmpType in attrTypeList:
|
| | | # value = int(attrList[2].get(tmpType, 0)*curEffect.GetEffectValue(0)*suitsLV*1.0/ChConfig.Def_MaxRateValue)
|
| | | # calcDict[tmpType] = calcDict.get(tmpType, 0) + value
|
| | | # |
| | | # return
|
| | |
|
| | |
|
| | | ## 返回buff类型,线性与否
|
| | |
| | |
|
| | |
|
| | | def OnCalcBuffEx(defender, curEffect, calcDict, curBuff):
|
| | | if defender.GetGameObjType() != IPY_GameWorld.gotPlayer:
|
| | | return
|
| | | suitsLV = ChEquip.GetEquipSuitsLVByType(defender, ChConfig.EquipSuitType_Plus, ChConfig.EquipGroupType_Armor)
|
| | | if not suitsLV:
|
| | | return
|
| | | attrList = PlayerControl.GetCalcAttrListValue(defender, curEffect.GetEffectValue(2))
|
| | | attrType = curEffect.GetEffectValue(1)
|
| | | attrTypeList = [attrType]
|
| | | # 攻击力有最大最小 特殊处理
|
| | | if attrType in [ChConfig.TYPE_Calc_AttrATKMin, ChConfig.TYPE_Calc_AttrATKMax]:
|
| | | attrTypeList = [ChConfig.TYPE_Calc_AttrATKMin, ChConfig.TYPE_Calc_AttrATKMax]
|
| | | for tmpType in attrTypeList:
|
| | | value = int(attrList[2].get(tmpType, 0)*curEffect.GetEffectValue(0)*suitsLV*1.0/ChConfig.Def_MaxRateValue)
|
| | | calcDict[tmpType] = calcDict.get(tmpType, 0) + value
|
| | | |
| | | # 境界装备改版,暂取消
|
| | | return
|
| | | # if defender.GetGameObjType() != IPY_GameWorld.gotPlayer:
|
| | | # return
|
| | | # suitsLV = ChEquip.GetEquipSuitsLVByType(defender, ChConfig.EquipSuitType_Plus, ChConfig.EquipGroupType_Armor)
|
| | | # if not suitsLV:
|
| | | # return
|
| | | # attrList = PlayerControl.GetCalcAttrListValue(defender, curEffect.GetEffectValue(2))
|
| | | # attrType = curEffect.GetEffectValue(1)
|
| | | # attrTypeList = [attrType]
|
| | | # # 攻击力有最大最小 特殊处理
|
| | | # if attrType in [ChConfig.TYPE_Calc_AttrATKMin, ChConfig.TYPE_Calc_AttrATKMax]:
|
| | | # attrTypeList = [ChConfig.TYPE_Calc_AttrATKMin, ChConfig.TYPE_Calc_AttrATKMax]
|
| | | # for tmpType in attrTypeList:
|
| | | # value = int(attrList[2].get(tmpType, 0)*curEffect.GetEffectValue(0)*suitsLV*1.0/ChConfig.Def_MaxRateValue)
|
| | | # calcDict[tmpType] = calcDict.get(tmpType, 0) + value
|
| | | # |
| | | # return
|
| | |
|
| | |
|
| | | ## 返回buff类型,线性与否
|
| | |
| | | if defender.GetGameObjType() != IPY_GameWorld.gotPlayer:
|
| | | return
|
| | |
|
| | | attrList = PlayerControl.GetCalcAttrListValue(defender, ChConfig.Def_CalcAttrFunc_GodWeapon)
|
| | | attrList = PlayerControl.GetCalcAttrListValue(defender, ChConfig.Def_CalcAttrFunc_GodWeapon)[0]
|
| | |
|
| | | value = attrList[2].get(curEffect.GetEffectValue(0), 0)*curEffect.GetEffectValue(1)/ChConfig.Def_MaxRateValue
|
| | |
|
| | |
| | | # @return None
|
| | | def OnCalcBuffEx(defender, curEffect, calcDict, curBuff):
|
| | | attrType = curEffect.GetEffectValue(1)
|
| | | attrList = PlayerControl.GetCalcAttrListValue(defender, [ChConfig.Def_CalcAttrFunc_Dogz, ChConfig.Def_CalcAttrFunc_DogzEquip, ChConfig.Def_CalcAttrFunc_DogzEquipPlus])
|
| | | attrList = PlayerControl.GetCalcAttrListValue(defender, [ChConfig.Def_CalcAttrFunc_Dogz, ChConfig.Def_CalcAttrFunc_DogzEquip, ChConfig.Def_CalcAttrFunc_DogzEquipPlus])[0]
|
| | | value = int(attrList[2].get(attrType, 0)*curEffect.GetEffectValue(0)*1.0/ChConfig.Def_MaxRateValue)
|
| | |
|
| | | calcDict[attrType] = calcDict.get(attrType, 0) + value
|
| | |
| | |
|
| | |
|
| | | def CalcBuffValue(attacker, defender, curSkill, changeBuffValueDict):
|
| | | attrList = PlayerControl.GetCalcAttrListValue(attacker, ChConfig.Def_CalcAttrFunc_GodWeapon)
|
| | | attrList = PlayerControl.GetCalcAttrListValue(attacker, ChConfig.Def_CalcAttrFunc_GodWeapon)[0]
|
| | |
|
| | | hp = attrList[2].get(ChConfig.TYPE_Calc_AttrMaxHP, 0)
|
| | |
|
| | |
| | |
|
| | |
|
| | | def GetValue(attacker, defender, passiveEffect):
|
| | | attrList = PlayerControl.GetCalcAttrListValue(attacker, ChConfig.Def_CalcAttrFunc_Horse)
|
| | | attrList = PlayerControl.GetCalcAttrListValue(attacker, ChConfig.Def_CalcAttrFunc_Horse)[0]
|
| | | return int(attrList[2].get(ChConfig.TYPE_Calc_AttrATKMax, 0)*passiveEffect.GetEffectValue(0)*1.0/ChConfig.Def_MaxRateValue)
|