10019 【砍树】回合战斗(增加强化暴伤、弱化暴伤属性;增加1308通用持续性回血buff逻辑,支持单次回血超20E;)
| | |
| | | Def_Effect_CureDefPer = 216 # 弱化治疗
|
| | | Def_Effect_PetStrengthenPer = 217 # 强化灵兽
|
| | | Def_Effect_PetWeakenPer = 218 # 弱化灵兽
|
| | | Def_Effect_SuperHitHurtPer = 219 # 强化暴伤
|
| | | Def_Effect_SuperHitHurtDefPer = 220 # 弱化暴伤
|
| | |
|
| | | #增加%d物理伤害值,其中a值为伤害值
|
| | | Def_Effect_AddAtk = 1005
|
| | |
| | | CDBPlayerRefresh_Xiantao, # 仙桃 254
|
| | | CDBPlayerRefresh_CurePer, # 强化治疗 255
|
| | | CDBPlayerRefresh_CureDefPer, # 弱化治疗 256
|
| | | CDBPlayerRefresh_PetStrengthenPer, # 弱化灵兽 257
|
| | | CDBPlayerRefresh_PetStrengthenPer, # 强化灵兽 257
|
| | | CDBPlayerRefresh_PetWeakenPer, # 弱化灵兽 258
|
| | | ) = range(146, 259)
|
| | | CDBPlayerRefresh_SuperHitHurtPer, # 强化暴伤 259
|
| | | CDBPlayerRefresh_SuperHitHurtDefPer, # 弱化暴伤 260
|
| | | ) = range(146, 261)
|
| | |
|
| | | TYPE_Price_Gold_Paper_Money = 5 # 金钱类型,(先用礼券,再用金子)
|
| | | TYPE_Price_Family_Contribution = 6 # 战盟贡献度(活跃度转换得来)
|
| | |
| | |
|
| | | # 重击和暴击互斥,并且使用同一个参数
|
| | | isSuperHit, aSuperHit, dSuperHitReduce = hurtTypeResultDict[ChConfig.Def_HurtType_ThumpHit]
|
| | | aSuperHitHurtPer = GameObj.GetSuperHitHurtPer(atkObj)
|
| | | dSuperHitHurtDefPer = GameObj.GetSuperHitHurtPer(defObj)
|
| | | if not isSuperHit:
|
| | | isSuperHit, aSuperHit, dSuperHitReduce = hurtTypeResultDict[ChConfig.Def_HurtType_SuperHit]
|
| | |
|
| | |
| | | GameObj.GetAtkBackRate(gameObj), GameObj.GetAtkBackDefRate(gameObj), |
| | | GameObj.GetSuckHPPer(gameObj), GameObj.GetSuckHPDefPer(gameObj), |
| | | )) |
| | | GameWorld.DebugLog(" XP=%s/%s,强疗=%s,弱疗=%s,强灵=%s,弱灵=%s" |
| | | GameWorld.DebugLog(" XP=%s/%s,强疗=%s,弱疗=%s,强灵=%s,弱灵=%s,强暴=%s,弱暴=%s" |
| | | % (GameObj.GetXP(gameObj), GameObj.GetMaxXP(gameObj), GameObj.GetCurePer(gameObj), GameObj.GetCureDefPer(gameObj), |
| | | GameObj.GetPetStrengthenPer(gameObj), GameObj.GetPetWeakenPer(gameObj))) |
| | | GameObj.GetPetStrengthenPer(gameObj), GameObj.GetPetWeakenPer(gameObj), |
| | | GameObj.GetSuperHitHurtPer(gameObj), GameObj.GetSuperHitHurtDefPer(gameObj), |
| | | )) |
| | | return |
| | | |
| | | def TurnFightObjPerTurnStart(gameObj, tagObj, turnNum, tick): |
| | |
| | | Def_BuffValue_Count = 3 # buff记录的value个数
|
| | |
|
| | | #游戏对象属性--------------------------------------------
|
| | | Def_Calc_AllAttrType_MAX = 174
|
| | | Def_Calc_AllAttrType_MAX = 176
|
| | | #基本属性BUFF计算,顺序与 ObjProperty_AttrByIndex 对应,同时也为buff效果ID同步通知策划
|
| | | TYPE_Calc_AttrList = (
|
| | | TYPE_Calc_Metal, # 金 1
|
| | |
| | | TYPE_Calc_CureDefPer, # 弱化对方治疗效果
|
| | | TYPE_Calc_PetStrengthenPer, # 强化灵兽
|
| | | TYPE_Calc_PetWeakenPer, # 弱化灵兽
|
| | | TYPE_Calc_SuperHitHurtPer, # 强化暴伤
|
| | | TYPE_Calc_SuperHitHurtDefPer, # 弱化暴伤 175
|
| | | ) = range(1, Def_Calc_AllAttrType_MAX)
|
| | |
|
| | | ## 支持大数值属性,超过20E
|
| | |
| | | AttrName_CureDefPer = "CureDefPer" # 弱化治疗
|
| | | AttrName_PetStrengthenPer = "PetStrengthenPer" # 强化灵兽
|
| | | AttrName_PetWeakenPer = "PetWeakenPer" # 弱化灵兽
|
| | | AttrName_SuperHitHurtPer = "SuperHitHurtPer" # 强化暴伤
|
| | | AttrName_SuperHitHurtDefPer = "SuperHitHurtDefPer" # 弱化暴伤
|
| | |
|
| | | #物品效果(ID或指定类型)对应的属性计算信息 {效果(ID/指定类型):[[属性索引, ...], 是否基础属性,(非)线性]}
|
| | | #对应 Def_Calc_AllAttrType_MAX
|
| | |
| | | ShareDefine.Def_Effect_CureDefPer:[[TYPE_Calc_CureDefPer], False, TYPE_Linear],
|
| | | ShareDefine.Def_Effect_PetStrengthenPer:[[TYPE_Calc_PetStrengthenPer], False, TYPE_Linear],
|
| | | ShareDefine.Def_Effect_PetWeakenPer:[[TYPE_Calc_PetWeakenPer], False, TYPE_Linear],
|
| | | ShareDefine.Def_Effect_SuperHitHurtPer:[[TYPE_Calc_SuperHitHurtPer], False, TYPE_Linear],
|
| | | ShareDefine.Def_Effect_SuperHitHurtDefPer:[[TYPE_Calc_SuperHitHurtDefPer], False, TYPE_Linear],
|
| | |
|
| | | #战斗非线性
|
| | | ShareDefine.Def_Effect_SuperHitPer:[[TYPE_Calc_SuperHit], False, TYPE_NoLinear],
|
| | |
| | | SetPetStrengthenPer(gameObj, 0)
|
| | | SetPetWeakenPer(gameObj, 0)
|
| | | SetDamageBackRate(gameObj, 0)
|
| | | SetSuperHitHurtPer(gameObj, 0)
|
| | | SetSuperHitHurtDefPer(gameObj, 0)
|
| | | return
|
| | |
|
| | | def GetPetDamPer(gameObj): return gameObj.GetDictByKey(ChConfig.Def_PlayerKey_AttrPetDamPer)
|
| | |
| | | PlayerControl.SendPropertyRefresh(gameObj, ShareDefine.CDBPlayerRefresh_PetWeakenPer, value)
|
| | | return
|
| | |
|
| | | def GetSuperHitHurtPer(gameObj): return gameObj.GetDictByKey(ChConfig.AttrName_SuperHitHurtPer)
|
| | | def SetSuperHitHurtPer(gameObj, value):
|
| | | ## 强化暴伤
|
| | | gameObj.SetDict(ChConfig.AttrName_SuperHitHurtPer, value)
|
| | | if gameObj.GetGameObjType() == IPY_GameWorld.gotPlayer:
|
| | | PlayerControl.SendPropertyRefresh(gameObj, ShareDefine.CDBPlayerRefresh_SuperHitHurtPer, value)
|
| | | return
|
| | | def GetSuperHitHurtDefPer(gameObj): return gameObj.GetDictByKey(ChConfig.AttrName_SuperHitHurtDefPer)
|
| | | def SetSuperHitHurtDefPer(gameObj, value):
|
| | | ## 弱化暴伤
|
| | | gameObj.SetDict(ChConfig.AttrName_SuperHitHurtDefPer, value)
|
| | | if gameObj.GetGameObjType() == IPY_GameWorld.gotPlayer:
|
| | | PlayerControl.SendPropertyRefresh(gameObj, ShareDefine.CDBPlayerRefresh_SuperHitHurtDefPer, value)
|
| | | return
|
| | |
|
| | | def GetDamageBackRate(gameObj):
|
| | | if gameObj.GetGameObjType() == IPY_GameWorld.gotPlayer:
|
| | | return gameObj.GetDamageBackRate()
|
| | |
| | | GameObj.SetCureDefPer(curNPC, PropDict.get("CureDefPer", 0))
|
| | | GameObj.SetPetStrengthenPer(curNPC, PropDict.get("PetStrengthenPer", 0))
|
| | | GameObj.SetPetWeakenPer(curNPC, PropDict.get("PetWeakenPer", 0))
|
| | | GameObj.SetSuperHitHurtPer(curNPC, PropDict.get("SuperHitHurtPer", 0))
|
| | | GameObj.SetSuperHitHurtDefPer(curNPC, PropDict.get("SuperHitHurtDefPer", 0))
|
| | | GameObj.SetFinalHurtPer(curNPC, PropDict.get("FinalHurtPer", 0))
|
| | | GameObj.SetFinalHurtReducePer(curNPC, PropDict.get("FinalHurtReducePer", 0))
|
| | |
|
| | |
| | | curPlayerPropDict["CureDefPer"] = GameObj.GetCureDefPer(curPlayer) # 弱化治疗
|
| | | curPlayerPropDict["PetStrengthenPer"] = GameObj.GetPetStrengthenPer(curPlayer) # 强化灵兽
|
| | | curPlayerPropDict["PetWeakenPer"] = GameObj.GetPetWeakenPer(curPlayer) # 弱化灵兽
|
| | | curPlayerPropDict["SuperHitHurtPer"] = GameObj.GetSuperHitHurtPer(curPlayer) # 强化暴伤
|
| | | curPlayerPropDict["SuperHitHurtDefPer"] = GameObj.GetSuperHitHurtDefPer(curPlayer) # 弱化暴伤
|
| | |
|
| | | #-----------
|
| | | #扩展属性缓存
|
| | |
| | | Def_Effect_CureDefPer = 216 # 弱化治疗
|
| | | Def_Effect_PetStrengthenPer = 217 # 强化灵兽
|
| | | Def_Effect_PetWeakenPer = 218 # 弱化灵兽
|
| | | Def_Effect_SuperHitHurtPer = 219 # 强化暴伤
|
| | | Def_Effect_SuperHitHurtDefPer = 220 # 弱化暴伤
|
| | |
|
| | | #增加%d物理伤害值,其中a值为伤害值
|
| | | Def_Effect_AddAtk = 1005
|
| | |
| | | CDBPlayerRefresh_Xiantao, # 仙桃 254
|
| | | CDBPlayerRefresh_CurePer, # 强化治疗 255
|
| | | CDBPlayerRefresh_CureDefPer, # 弱化治疗 256
|
| | | CDBPlayerRefresh_PetStrengthenPer, # 弱化灵兽 257
|
| | | CDBPlayerRefresh_PetStrengthenPer, # 强化灵兽 257
|
| | | CDBPlayerRefresh_PetWeakenPer, # 弱化灵兽 258
|
| | | ) = range(146, 259)
|
| | | CDBPlayerRefresh_SuperHitHurtPer, # 强化暴伤 259
|
| | | CDBPlayerRefresh_SuperHitHurtDefPer, # 弱化暴伤 260
|
| | | ) = range(146, 261)
|
| | |
|
| | | TYPE_Price_Gold_Paper_Money = 5 # 金钱类型,(先用礼券,再用金子)
|
| | | TYPE_Price_Family_Contribution = 6 # 战盟贡献度(活跃度转换得来)
|
| | |
| | | [lambda curObj:GameObj.GetCureDefPer(curObj), lambda curObj, value:GameObj.SetCureDefPer(curObj, value), ShareDefine.CDBPlayerRefresh_CureDefPer, 1, 0], # 弱化对方治疗
|
| | | [lambda curObj:GameObj.GetPetStrengthenPer(curObj), lambda curObj, value:GameObj.SetPetStrengthenPer(curObj, value), ShareDefine.CDBPlayerRefresh_PetStrengthenPer, 1, 0], # 强化灵兽
|
| | | [lambda curObj:GameObj.GetPetWeakenPer(curObj), lambda curObj, value:GameObj.SetPetWeakenPer(curObj, value), ShareDefine.CDBPlayerRefresh_PetWeakenPer, 1, 0], # 弱化灵兽
|
| | | [lambda curObj:GameObj.GetSuperHitHurtPer(curObj), lambda curObj, value:GameObj.SetSuperHitHurtPer(curObj, value), ShareDefine.CDBPlayerRefresh_SuperHitHurtPer, 1, 0], # 强化暴伤
|
| | | [lambda curObj:GameObj.GetSuperHitHurtDefPer(curObj), lambda curObj, value:GameObj.SetSuperHitHurtDefPer(curObj, value), ShareDefine.CDBPlayerRefresh_SuperHitHurtDefPer, 1, 0], # 弱化暴伤
|
| | | ]
|
| | |
|
| | | ## 通过索引获得属性值
|
New file |
| | |
| | | #!/usr/bin/python |
| | | # -*- coding: GBK -*- |
| | | #------------------------------------------------------------------------------- |
| | | # |
| | | ##@package Skill.GameBuffs.BuffProcess_1308 |
| | | # |
| | | # @todo:持继回血触发的buff逻辑实现 |
| | | # @author hxp |
| | | # @date 2024-03-28 |
| | | # @version 1.0 |
| | | # |
| | | # 详细描述: 持继回血触发的buff逻辑实现 |
| | | # 效果1: A值-百分比;B值-附加值;C值-恢复类型(同释放方式8的恢复类型) |
| | | # 效果2: 一般搭配效果ID 9999 处理间隔使用 |
| | | # |
| | | #------------------------------------------------------------------------------- |
| | | #"""Version = 2024-03-28 18:30""" |
| | | #------------------------------------------------------------------------------- |
| | | |
| | | import ChConfig |
| | | import GameWorld |
| | | import SkillCommon |
| | | import SkillShell |
| | | import GameObj |
| | | |
| | | def ProcessBuff(defender, curBuff, curEffect, processBuffTick, tick): |
| | | if curBuff.GetValue2() == 0: |
| | | return |
| | | curBuff.SetValue2(max(curBuff.GetValue2() - 1, 0)) |
| | | |
| | | curBuffSkillID = curBuff.GetSkill().GetSkillTypeID() |
| | | singleAddHP = curBuff.GetValue() + curBuff.GetValue1() * ChConfig.Def_PerPointValue |
| | | |
| | | SkillCommon.SkillAddHP(defender, curBuffSkillID, singleAddHP) |
| | | return |
| | | |
| | | # 消失前如有未执行次数则补上 |
| | | # @param defender 承受者 |
| | | def OnBuffDisappear(defender, curSkill, curBuff, curEffect, tick): |
| | | count = curBuff.GetValue2() |
| | | #无剩余 |
| | | if count <= 0: |
| | | return |
| | | |
| | | #已经死亡不触发 |
| | | if GameObj.GetHP(defender) <= 0: |
| | | return |
| | | |
| | | singleAddHP = curBuff.GetValue() + curBuff.GetValue1() * ChConfig.Def_PerPointValue |
| | | SkillCommon.SkillAddHP(defender, curSkill.GetSkillTypeID(), singleAddHP * count) |
| | | return |
| | | |
| | | def CalcBuffValue(attacker, defender, curSkill, changeBuffValueDict): |
| | | curEffect = curSkill.GetEffect(0) |
| | | cureType = curEffect.GetEffectValue(2) |
| | | cureHP = SkillCommon.GetCureHP(attacker, defender, curSkill, cureType, largeNum=True) # 支持超20E |
| | | |
| | | buffTime = curSkill.GetLastTime() |
| | | buffTick = SkillShell.GetProcessBuffTick(curSkill, defender) |
| | | count = int(buffTime / buffTick) |
| | | |
| | | GameWorld.DebugLog("BuffProcess_1308.CalcBuffValue: cureHP=%s,count=%s,atkID=%s,defID=%s" % (cureHP, count, attacker.GetID(), defender.GetID())) |
| | | return [cureHP % ChConfig.Def_PerPointValue, cureHP / ChConfig.Def_PerPointValue, count] |
| | | |