10019 【砍树】回合战斗(增加抗连击、反击、抗反击、吸血、抗吸血属性,玩家及NPC属性接口通用;连击、反击属性效果支持;)
| | |
| | | DWORD _NPCID; //NPCID
|
| | | BYTE FightPowerLackAtkLimit; //战力不足限制攻击
|
| | | DWORD SuppressFightPower; //推荐/压制战力
|
| | | DWORD AtkSpeed; //攻击速度
|
| | | DWORD SuperHitRateReduce; //抗暴击概率
|
| | | DWORD FaintRate; //击晕概率
|
| | | DWORD FaintDefRate; //抗击晕概率
|
| | | DWORD ComboRate; //连击概率
|
| | | DWORD ComboDefRate; //抗连击概率
|
| | | DWORD AtkBackRate; //反击概率
|
| | | DWORD AtkBackDefRate; //抗反击概率
|
| | | DWORD SuckHPPer; //吸血比率
|
| | | DWORD SuckHPDefPer; //抗吸血比率
|
| | | };
|
| | |
|
| | | //成长型境界怪物表
|
| | |
| | | DWORD _DataMapID; //数据地图ID
|
| | | WORD _LineID; //功能线路ID
|
| | | DWORD NPCID; //NPCID
|
| | | DWORD SummerNPCID; //召唤兽ID
|
| | | list AwardItemList; //过关奖励列表,[[物品ID,个数,是否拍品], ...]
|
| | | };
|
| | |
|
| | | //副本助战表
|
| | |
| | | Def_Effect_FamilyWarAtkPer = 164 # 仙盟联赛攻击加成
|
| | | Def_Effect_FamilySitExpPer = 165 # 仙盟打坐经验加成
|
| | |
|
| | | Def_Effect_ComboDefRate = 210 # 抗连击概率
|
| | | Def_Effect_AtkBackRate = 211 # 反击概率
|
| | | Def_Effect_AtkBackDefRate = 212 # 抗反击概率
|
| | | Def_Effect_SuckHPPer = 213 # 吸血比率
|
| | | Def_Effect_SuckHPDefPer = 214 # 抗吸血比率
|
| | |
|
| | | #增加%d物理伤害值,其中a值为伤害值
|
| | | Def_Effect_AddAtk = 1005
|
| | | #增加%d魔法伤害值,其中a值为伤害值
|
| | |
| | | CDBPlayerRefresh_JiYuan, # 机缘币 245
|
| | | CDBPlayerRefresh_BTGMYuE, # BTGM余额 246
|
| | | CDBPlayerRefresh_SuccessScore, # 成就积分 247
|
| | | ) = range(146, 248)
|
| | | CDBPlayerRefresh_ComboDefRate, # 抗连击概率 248
|
| | | CDBPlayerRefresh_AtkBackRate, # 反击概率 249
|
| | | CDBPlayerRefresh_AtkBackDefRate, # 抗反击概率 250
|
| | | CDBPlayerRefresh_SuckHPPer, # 吸血比率 251
|
| | | CDBPlayerRefresh_SuckHPDefPer, # 抗吸血比率 252
|
| | | ) = range(146, 253)
|
| | |
|
| | | TYPE_Price_Gold_Paper_Money = 5 # 金钱类型,(先用礼券,再用金子)
|
| | | TYPE_Price_Family_Contribution = 6 # 战盟贡献度(活跃度转换得来)
|
| | |
| | | return True, atkObj.GetSuperHit(), PlayerControl.GetSuperHitReduce(defObj)
|
| | |
|
| | | aSuperHitRate = atkObj.GetSuperHitRate()
|
| | | dSuperHitRateReduce = PlayerControl.GetSuperHitRateReduce(defObj)
|
| | | dSuperHitRateReduce = GameObj.GetSuperHitRateReduce(defObj)
|
| | | superHitRate = eval(ReadChConfig.GetChConfig("CalcSuperHitRate"))
|
| | | superHitRate += PassiveBuffEffMng.GetValueByPassiveBuffTriggerType(atkObj, defObj, curSkill,
|
| | | ChConfig.TriggerType_Buff_AddSuperHitRate)
|
| | |
| | | # @return None
|
| | | # @remarks 函数详细说明.
|
| | | def __Sync_AttackResult(attacker, defender, curSkill):
|
| | | battleType = AttackCommon.GetBattleType(attacker, curSkill)
|
| | | turnBattleType = attacker.GetDictByKey(ChConfig.Def_Obj_Dict_TurnBattleType)
|
| | | battleType = turnBattleType * 10 + battleType # 通知的battle修改: 回合攻击战斗类型*10+原战斗类型
|
| | | #普通攻击
|
| | | if not curSkill:
|
| | | #GameWorld.Log("玩家普通攻击成功")
|
| | |
| | | else:
|
| | | curHurt = g_skillHurtList.GetHurtAt(0)
|
| | | attacker.BaseAttack(curHurt.GetObjID(), curHurt.GetObjType(),
|
| | | AttackCommon.GetBattleType(attacker, curSkill),
|
| | | battleType,
|
| | | curHurt.GetAttackType(), curHurt.GetHurtHP(), curHurt.GetHurtHPEx(), curHurt.GetCurHP(), curHurt.GetCurHPEx())
|
| | |
|
| | | #//返回值无意义
|
| | |
| | | changeSkillID = PassiveBuffEffMng.GetPassiveSkillValueByTriggerTypeEx(attacker, None, curSkill, ChConfig.TriggerType_ChangeSkillEff)
|
| | | if changeSkillID:
|
| | | skillID = changeSkillID
|
| | | battleType = AttackCommon.GetBattleType(attacker, curSkill)
|
| | | #无目标类技能
|
| | | if not defender:
|
| | | #玩家处理
|
| | |
| | | if attacker.GetGameObjType() != IPY_GameWorld.gotPlayer:
|
| | | return
|
| | |
|
| | | faintRate = PlayerControl.GetFaintRate(attacker)
|
| | | faintRate = GameObj.GetFaintRate(attacker)
|
| | | if not faintRate:
|
| | | #GameWorld.DebugLog("没有击晕概率!", attacker.GetID())
|
| | | return
|
| | |
| | | if GameObj.GetHP(defender) <= 0:
|
| | | return
|
| | |
|
| | | tagFaintRate = PlayerControl.GetFaintDefRate(defender) if defender.GetGameObjType() == IPY_GameWorld.gotPlayer else 0
|
| | | tagFaintRate = GameObj.GetFaintDefRate(defender) if defender.GetGameObjType() == IPY_GameWorld.gotPlayer else 0
|
| | |
|
| | | # 添加最高60%击晕效果
|
| | | maxRate = IpyGameDataPY.GetFuncCfg("PassiveSkillFaint", 1)
|
| | |
| | | curPet = curPlayer.GetPetMgr().GetFightPet() |
| | | tagPet = None |
| | | |
| | | GameWorld.DebugLog("执行回合制战斗: mapID=%s,funcLineID=%s,tagPlayerID=%s,tagObjID=%s" |
| | | GameWorld.DebugLog("===== 执行回合制战斗: mapID=%s,funcLineID=%s,tagPlayerID=%s,tagObjID=%s" |
| | | % (mapID, funcLineID, tagPlayerID, tagObj.GetID()), playerID) |
| | | GameWorld.DebugLog("curPlayer.GetSightLevel=%s,tagObj.GetSightLevel=%s" |
| | | % (curPlayer.GetSightLevel(), tagObj.GetSightLevel()), playerID) |
| | |
| | | for gameObj in objList: |
| | | TurnFightObjStartInit(gameObj) |
| | | |
| | | curSpeed = 0 |
| | | tagSpeed = 0 |
| | | orderList = [1, 2] if curSpeed >= tagSpeed else [2, 1] |
| | | GameWorld.DebugLog("playerHP=%s,tagHP=%s,curSpeed=%s,tagSpeed=%s" |
| | | % (GameObj.GetHP(curPlayer), GameObj.GetHP(tagObj), curSpeed, tagSpeed), playerID) |
| | | curAtkSpeed = GameObj.GetAtkSpeed(curPlayer) |
| | | tagAtkSpeed = GameObj.GetAtkSpeed(tagObj) |
| | | orderList = [1, 2] if curAtkSpeed >= tagAtkSpeed else [2, 1] |
| | | GameWorld.DebugLog("playerHP=%s,tagHP=%s,curAtkSpeed=%s,tagAtkSpeed=%s" |
| | | % (GameObj.GetHP(curPlayer), GameObj.GetHP(tagObj), curAtkSpeed, tagAtkSpeed), playerID) |
| | | |
| | | isWin = None |
| | | for turnNum in range(1, turnMax + 1): |
| | | GameWorld.DebugLog("回合制战斗轮次: %s" % turnNum, playerID) |
| | | GameWorld.DebugLog("----- 回合制战斗轮次: %s -----" % turnNum, playerID) |
| | | SyncTurnFightState(curPlayer, mapID, funcLineID, tagPlayerID, FightState_Fighting, turnNum, turnMax) |
| | | |
| | | # 回合开始: 做一些每回合重置逻辑或者某些根据回合触发的效果等 |
| | | for objList in factionObjDict.values(): |
| | | for gameObj in objList: |
| | | TurnFightObjTurnStart(gameObj, turnNum) |
| | | |
| | | # 回合战斗: 轮流依次攻击 |
| | | for index in range(factionObjMax): |
| | | for faction in orderList: |
| | | objList = factionObjDict[faction] |
| | |
| | | gameObj = objList[index] |
| | | if not gameObj: |
| | | continue |
| | | gameObj.SetDict(ChConfig.Def_Obj_Dict_TurnFightNum, turnNum) |
| | | |
| | | tagGameObj = tagObj if faction == 1 else curPlayer |
| | | objType = gameObj.GetGameObjType() |
| | | objID = gameObj.GetID() |
| | |
| | | |
| | | GameWorld.DebugLog(" 行动: turnNum=%s,index=%s,faction=%s,objType=%s,objID=%s,tagObjType=%s,tagObjID=%s" |
| | | % (turnNum, index, faction, objType, objID, tagObjType, tagObjID), playerID) |
| | | if objType == IPY_GameWorld.gotPlayer: |
| | | PlayerAttack(gameObj, tagGameObj, tick) |
| | | else: |
| | | NPCAttack(gameObj, tagGameObj, tick) |
| | | |
| | | DoAttack(gameObj, tagGameObj, tick) |
| | | |
| | | if tagGameObj and GameObj.GetHP(tagGameObj) > 0: |
| | | GameWorld.DebugLog(" playerHP=%s,tagHP=%s" % (GameObj.GetHP(curPlayer), GameObj.GetHP(tagObj)), playerID) |
| | | continue |
| | | |
| | | isWin = faction == 1 |
| | | GameWorld.DebugLog(" tagObjType=%s,tagObjID=%s,被击杀,结束战斗: isWin=%s" % (tagObjType, tagObjID, isWin), playerID) |
| | | GameWorld.DebugLog(" tagObjType=%s,tagObjID=%s,被击杀,结束战斗: isWin=%s" % (tagObjType, tagObjID, isWin)) |
| | | break |
| | | |
| | | if isWin != None: |
| | |
| | | for gameObj in objList: |
| | | TurnFightObjOverReset(gameObj) |
| | | |
| | | GameWorld.DebugLog("回合制战斗结束: mapID=%s,funcLineID=%s,tagPlayerID=%s,isWin=%s,overState=%s" |
| | | GameWorld.DebugLog("===== 回合制战斗结束: mapID=%s,funcLineID=%s,tagPlayerID=%s,isWin=%s,overState=%s" |
| | | % (mapID, funcLineID, tagPlayerID, isWin, overState), playerID) |
| | | return |
| | | |
| | |
| | | pass |
| | | return |
| | | |
| | | def TurnFightObjTurnStart(gameObj, turnNum): |
| | | ## 回合制战斗实例 - 每回合开始时处理 |
| | | if not gameObj: |
| | | return |
| | | |
| | | gameObj.SetDict(ChConfig.Def_Obj_Dict_TurnFightNum, turnNum) |
| | | # 重置连击、反击数 |
| | | gameObj.SetDict(ChConfig.Def_Obj_Dict_TurnComboNum, 0) |
| | | gameObj.SetDict(ChConfig.Def_Obj_Dict_TurnAtkBackNum, 0) |
| | | |
| | | objType = gameObj.GetGameObjType() |
| | | if objType == IPY_GameWorld.gotPlayer: |
| | | pass |
| | | |
| | | elif objType == IPY_GameWorld.gotNPC: |
| | | pass |
| | | |
| | | return |
| | | |
| | | def TurnFightObjOverReset(gameObj): |
| | | ## 回合制战斗实例结束重置 |
| | | if not gameObj: |
| | | return |
| | | gameObj.SetDict(ChConfig.Def_Obj_Dict_TurnFightNum, 0) |
| | | gameObj.SetDict(ChConfig.Def_Obj_Dict_TurnBattleType, 0) |
| | | |
| | | objType = gameObj.GetGameObjType() |
| | | if objType == IPY_GameWorld.gotPlayer: |
| | |
| | | |
| | | return |
| | | |
| | | def DoAttack(curObj, tagObj, tick): |
| | | curID = curObj.GetID() |
| | | tagID = tagObj.GetID() |
| | | if curObj.GetGameObjType() == IPY_GameWorld.gotPlayer: |
| | | atkRet = PlayerAttack(curObj, tagObj, tick) |
| | | else: |
| | | atkRet = NPCAttack(curObj, tagObj, tick) |
| | | |
| | | turnBattleType = curObj.GetDictByKey(ChConfig.Def_Obj_Dict_TurnBattleType) |
| | | curObj.SetDict(ChConfig.Def_Obj_Dict_TurnBattleType, 0) # 无论攻击成功与否都重置战斗类型 |
| | | |
| | | if not atkRet: |
| | | return |
| | | |
| | | if turnBattleType == ChConfig.TurnBattleType_Combo: |
| | | comboNum = curObj.GetDictByKey(ChConfig.Def_Obj_Dict_TurnComboNum) + 1 |
| | | curObj.SetDict(ChConfig.Def_Obj_Dict_TurnComboNum, comboNum) |
| | | GameWorld.DebugLog(" 连击: comboID=%s,comboNum=%s" % (curID, comboNum)) |
| | | elif turnBattleType == ChConfig.TurnBattleType_AtkBack: |
| | | atkBackNum = curObj.GetDictByKey(ChConfig.Def_Obj_Dict_TurnAtkBackNum) + 1 |
| | | curObj.SetDict(ChConfig.Def_Obj_Dict_TurnAtkBackNum, atkBackNum) |
| | | GameWorld.DebugLog(" 反击: atkBackID=%s,atkBackNum=%s" % (curID, atkBackNum)) |
| | | |
| | | GameWorld.DebugLog(" curID-HP=(%s-%s),tagID-HP=(%s-%s)" % (curID, GameObj.GetHP(curObj), tagID, GameObj.GetHP(tagObj))) |
| | | |
| | | # 反击,反击可打断连击,所以优先判断 |
| | | if CanAtkBack(curObj, tagObj): |
| | | DoAttack(tagObj, curObj, tick) |
| | | return |
| | | |
| | | # 连击 |
| | | if CanCombo(curObj, tagObj): |
| | | DoAttack(curObj, tagObj, tick) |
| | | |
| | | return |
| | | |
| | | def CanAtkBack(atkObj, defObj): |
| | | ## 可否反击 |
| | | |
| | | defAtkBackRate = GameObj.GetAtkBackRate(defObj) # 防方反击率 |
| | | atkBackNum = defObj.GetDictByKey(ChConfig.Def_Obj_Dict_TurnAtkBackNum) # 已反击次数 |
| | | if atkBackNum > 10: |
| | | # 内置最高反击数防范 |
| | | return False |
| | | if atkBackNum > 0: |
| | | validPerList = IpyGameDataPY.GetFuncEvalCfg("TurnFight", 4) |
| | | vaildPer = validPerList[atkBackNum - 1] if len(validPerList) >= atkBackNum else 0 |
| | | defAtkBackRate = int(defAtkBackRate * vaildPer / 100.0) |
| | | |
| | | atkAtkBackDefRate = GameObj.GetAtkBackDefRate(atkObj) # 攻方抵抗反击率 |
| | | atkBackRate = max(0, defAtkBackRate - atkAtkBackDefRate) |
| | | if atkBackRate <= 0 or not GameWorld.CanHappen(atkBackRate): |
| | | GameWorld.DebugLog(" 无法反击: defID=%s,atkBackNum=%s,atkBackRate=%s=(defAtkBackRate=%s - atkAtkBackDefRate=%s)" |
| | | % (defObj.GetID(), atkBackNum, atkBackRate, defAtkBackRate, atkAtkBackDefRate)) |
| | | return False |
| | | GameWorld.DebugLog(" 可以反击: defID=%s,atkBackNum=%s,atkBackRate=%s=(defAtkBackRate=%s - atkAtkBackDefRate=%s)" |
| | | % (defObj.GetID(), atkBackNum, atkBackRate, defAtkBackRate, atkAtkBackDefRate)) |
| | | defObj.SetDict(ChConfig.Def_Obj_Dict_TurnBattleType, ChConfig.TurnBattleType_AtkBack) |
| | | return True |
| | | |
| | | def CanCombo(atkObj, defObj): |
| | | ## 可否连击 |
| | | |
| | | atkComboRate = GameObj.GetComboRate(atkObj) # 攻方连击率 |
| | | comboNum = atkObj.GetDictByKey(ChConfig.Def_Obj_Dict_TurnComboNum) # 已连击次数 |
| | | if comboNum > 10: |
| | | # 内置最高连击数防范 |
| | | return False |
| | | if comboNum > 0: |
| | | validPerList = IpyGameDataPY.GetFuncEvalCfg("TurnFight", 3) |
| | | vaildPer = validPerList[comboNum - 1] if len(validPerList) >= comboNum else 0 |
| | | atkComboRate = int(atkComboRate * vaildPer / 100.0) |
| | | |
| | | defComboReduce = GameObj.GetComboDefRate(defObj) # 防方抵抗连击率 |
| | | comboRate = max(0, atkComboRate - defComboReduce) |
| | | if comboRate <= 0 or not GameWorld.CanHappen(comboRate): |
| | | GameWorld.DebugLog(" 无法连击: atkID=%s,comboNum=%s,comboRate=%s=(atkComboRate=%s - defComboReduce=%s)" |
| | | % (atkObj.GetID(), comboNum, comboRate, atkComboRate, defComboReduce)) |
| | | return False |
| | | GameWorld.DebugLog(" 可以连击: atkID=%s,comboNum=%s,comboRate=%s=(atkComboRate=%s - defComboReduce=%s)" |
| | | % (atkObj.GetID(), comboNum, comboRate, atkComboRate, defComboReduce)) |
| | | atkObj.SetDict(ChConfig.Def_Obj_Dict_TurnBattleType, ChConfig.TurnBattleType_Combo) |
| | | return True |
| | | |
| | | def NPCAttack(curObj, tagObj, tick): |
| | | ## NPC攻击 |
| | | if not curObj: |
| | | return |
| | | tagDist = 0 |
| | | atkRet = AICommon.DoAutoUseSkill(curObj, tagObj, tagDist, tick) |
| | | #---优先释放技能--- |
| | | if not AICommon.DoAutoUseSkill(curObj, tagObj, tagDist, tick): |
| | | if not atkRet: |
| | | #普通攻击 |
| | | isOK = BaseAttack.Attack(curObj, tagObj, None, tick) |
| | | GameWorld.DebugLog(" NPC普通攻击: curID=%s,tagID=%s,isOK=%s" % (curObj.GetID(), tagObj.GetID(), isOK)) |
| | | return |
| | | atkRet = BaseAttack.Attack(curObj, tagObj, None, tick) |
| | | if atkRet: |
| | | GameWorld.DebugLog(" NPC普通攻击: curID=%s,tagID=%s,atkRet=%s" % (curObj.GetID(), tagObj.GetID(), atkRet)) |
| | | else: |
| | | GameWorld.DebugLog(" NPC攻击失败: curID=%s,tagID=%s,atkRet=%s" % (curObj.GetID(), tagObj.GetID(), atkRet)) |
| | | else: |
| | | GameWorld.DebugLog(" NPC技能攻击: curID=%s,tagID=%s,atkRet=%s" % (curObj.GetID(), tagObj.GetID(), atkRet)) |
| | | return atkRet |
| | | |
| | | def PlayerAttack(curPlayer, tagObj, tick): |
| | | ## 玩家攻击, 参考技能使用 #def UseSkillEx(index, clientData, tick): |
| | |
| | | #PlayerControl.SetIsNeedProcess(curPlayer, True) |
| | | #PlayerControl.ChangePlayerAction(curPlayer, IPY_GameWorld.paAttack) |
| | | |
| | | useSkillResult = False |
| | | skillMgr = curPlayer.GetSkillManager() |
| | | for skillID in skillList: |
| | | curSkill = skillMgr.FindSkillBySkillID(skillID) |
| | |
| | | if not PlayerState.__DoClientUseSkillEx(curPlayer, useSkillData, tick): |
| | | GameWorld.DebugLog(" 技能攻击失败%s" % skillID, playerID) |
| | | continue |
| | | useSkillResult = True |
| | | GameWorld.DebugLog(" 技能攻击成功%s" % skillID, playerID) |
| | | |
| | | break |
| | | |
| | | curPlayer.ClearUseSkillRec() |
| | | return |
| | | return useSkillResult |
| | | |
| | | def SyncTurnFightState(curPlayer, mapID, funcLineID, tagPlayerID, state, turnNum=0, turnMax=0): |
| | | clientPack = ChPyNetSendPack.tagMCTurnFightState() |
| | |
| | | Def_BuffValue_Count = 3 # buff记录的value个数
|
| | |
|
| | | #游戏对象属性--------------------------------------------
|
| | | Def_Calc_AllAttrType_MAX = 166
|
| | | Def_Calc_AllAttrType_MAX = 171
|
| | | #基本属性BUFF计算,顺序与 ObjProperty_AttrByIndex 对应,同时也为buff效果ID同步通知策划
|
| | | TYPE_Calc_AttrList = (
|
| | | TYPE_Calc_Metal, # 金 1
|
| | |
| | | TYPE_Calc_FamilyWarHPPer, # 仙盟联赛生命加成
|
| | | TYPE_Calc_FamilyWarAtkPer, # 仙盟联赛攻击加成
|
| | | TYPE_Calc_FamilySitExpPer, # 仙盟打坐经验加成 165
|
| | | TYPE_Calc_ComboDefRate, # 抗连击概率
|
| | | TYPE_Calc_AtkBackRate, # 反击概率
|
| | | TYPE_Calc_AtkBackDefRate, # 抗反击概率
|
| | | TYPE_Calc_SuckHPPer, # 吸血比率
|
| | | TYPE_Calc_SuckHPDefPer, # 抗吸血比率 170
|
| | | ) = range(1, Def_Calc_AllAttrType_MAX)
|
| | |
|
| | | ## 支持大数值属性,超过20E
|
| | |
| | | Def_ShopType_LongSale, #远程贩售
|
| | | ) = range(1, 2+1)
|
| | |
|
| | | # 回合攻击战斗类型
|
| | | (
|
| | | TurnBattleType_Normal, # 普通
|
| | | TurnBattleType_Combo, # 连击
|
| | | TurnBattleType_AtkBack, # 反击
|
| | | ) = range(3)
|
| | |
|
| | | #---Obj字典-------
|
| | | Def_Obj_Dict_TurnFightNum = 'TurnFightNum' # 回合制战斗当前轮次
|
| | | Def_Obj_Dict_TurnComboNum = 'TurnComboNum' # 本回合已累计连击次数
|
| | | Def_Obj_Dict_TurnAtkBackNum = 'TurnAtkBackNum' # 本回合已累计反击次数
|
| | | Def_Obj_Dict_TurnBattleType = 'TurnBattleType' # 本次攻击战斗类型:TurnBattleType_xxx
|
| | |
|
| | | #---NPC字典-------
|
| | | #每道龙卷风最终坐标
|
| | |
| | | AttrName_PetAtk = "PetAtk" # 灵宠攻击
|
| | | AttrName_PetSkillAtkRate = "PetSkillAtkRate" # 灵宠技能
|
| | | AttrName_PetDamPer = "PetDamPer" # 灵宠伤害增加
|
| | | AttrName_ComboDefRate = "ComboDefRate" # 抗连击概率
|
| | | AttrName_AtkBackRate = "AtkBackRate" # 反击概率
|
| | | AttrName_AtkBackDefRate = "AtkBackDefRate" # 抗反击概率
|
| | | AttrName_SuckHPPer = "SuckHPPer" # 吸血比率
|
| | | AttrName_SuckHPDefPer = "SuckHPDefPer" # 抗吸血比率
|
| | |
|
| | | #物品效果(ID或指定类型)对应的属性计算信息 {效果(ID/指定类型):[[属性索引, ...], 是否基础属性,(非)线性]}
|
| | | #对应 Def_Calc_AllAttrType_MAX
|
| | |
| | | ShareDefine.Def_Effect_FamilyWarHPPer:[[TYPE_Calc_FamilyWarHPPer], False, TYPE_Linear],
|
| | | ShareDefine.Def_Effect_FamilyWarAtkPer:[[TYPE_Calc_FamilyWarAtkPer], False, TYPE_Linear],
|
| | | ShareDefine.Def_Effect_FamilySitExpPer:[[TYPE_Calc_FamilySitExpPer], False, TYPE_Linear],
|
| | | ShareDefine.Def_Effect_ComboDefRate:[[TYPE_Calc_ComboDefRate], False, TYPE_Linear],
|
| | | AttrName_ComboDefRate:[[TYPE_Calc_ComboDefRate], False, TYPE_Linear],
|
| | | ShareDefine.Def_Effect_AtkBackRate:[[TYPE_Calc_AtkBackRate], False, TYPE_Linear],
|
| | | AttrName_AtkBackRate:[[TYPE_Calc_AtkBackRate], False, TYPE_Linear],
|
| | | ShareDefine.Def_Effect_AtkBackDefRate:[[TYPE_Calc_AtkBackDefRate], False, TYPE_Linear],
|
| | | AttrName_AtkBackDefRate:[[TYPE_Calc_AtkBackDefRate], False, TYPE_Linear],
|
| | | ShareDefine.Def_Effect_SuckHPPer:[[TYPE_Calc_SuckHPPer], False, TYPE_Linear],
|
| | | AttrName_SuckHPPer:[[TYPE_Calc_SuckHPPer], False, TYPE_Linear],
|
| | | ShareDefine.Def_Effect_SuckHPDefPer:[[TYPE_Calc_SuckHPDefPer], False, TYPE_Linear],
|
| | | AttrName_SuckHPDefPer:[[TYPE_Calc_SuckHPDefPer], False, TYPE_Linear],
|
| | |
|
| | | #战斗非线性
|
| | | ShareDefine.Def_Effect_SuperHitPer:[[TYPE_Calc_SuperHit], False, TYPE_NoLinear],
|
| | |
| | | gameObj.SetDict(ChConfig.Def_PlayerKey_BloodShiledHurt, value % ShareDefine.Def_PerPointValue)
|
| | | gameObj.SetDict(ChConfig.Def_PlayerKey_BloodShiledHurtEx, value / ShareDefine.Def_PerPointValue)
|
| | | return
|
| | |
|
| | | def GetAtkSpeed(gameObj):
|
| | | if gameObj.GetGameObjType() == IPY_GameWorld.gotPlayer:
|
| | | return gameObj.GetBattleValEx1()
|
| | | return gameObj.GetDictByKey(ChConfig.AttrName_AtkSpeed)
|
| | | def SetAtkSpeed(gameObj, value):
|
| | | ## 攻击速度
|
| | | if gameObj.GetGameObjType() == IPY_GameWorld.gotPlayer:
|
| | | gameObj.SetBattleValEx1(value, True)
|
| | | else:
|
| | | gameObj.SetDict(ChConfig.AttrName_AtkSpeed, value)
|
| | | return
|
| | |
|
| | | #---暴击概率---- 都是用 gameObj.GetSuperHitRate() gameObj.SetSuperHitRate()
|
| | | def GetSuperHitRateReduce(gameObj): return gameObj.GetDictByKey(ChConfig.Def_PlayerKey_SuperHitRateReduce)
|
| | | def SetSuperHitRateReduce(gameObj, value): |
| | | ## 抗暴击概率
|
| | | gameObj.SetDict(ChConfig.Def_PlayerKey_SuperHitRateReduce, value)
|
| | | if gameObj.GetGameObjType() == IPY_GameWorld.gotPlayer:
|
| | | PlayerControl.SendPropertyRefresh(gameObj, ShareDefine.CDBPlayerRefresh_SuperHitRateReduce, value)
|
| | | return
|
| | |
|
| | | def GetFaintRate(gameObj): return gameObj.GetDictByKey(ChConfig.Def_PlayerKey_AttrFaintRate)
|
| | | def SetFaintRate(gameObj, value):
|
| | | ## 击晕概率
|
| | | gameObj.SetDict(ChConfig.Def_PlayerKey_AttrFaintRate, value)
|
| | | if gameObj.GetGameObjType() == IPY_GameWorld.gotPlayer:
|
| | | PlayerControl.SendPropertyRefresh(gameObj, ShareDefine.CDBPlayerRefresh_FaintRate, value)
|
| | | return
|
| | | def GetFaintDefRate(gameObj): return gameObj.GetDictByKey(ChConfig.Def_PlayerKey_AttrFaintDefRate)
|
| | | def SetFaintDefRate(gameObj, value):
|
| | | ## 抗击晕概率
|
| | | gameObj.SetDict(ChConfig.Def_PlayerKey_AttrFaintDefRate, value)
|
| | | if gameObj.GetGameObjType() == IPY_GameWorld.gotPlayer:
|
| | | PlayerControl.SendPropertyRefresh(gameObj, ShareDefine.CDBPlayerRefresh_FaintDefRate, value)
|
| | | return
|
| | |
|
| | | def GetComboRate(gameObj): return gameObj.GetDictByKey(ChConfig.Def_PlayerKey_AttrComboRate)
|
| | | def SetComboRate(gameObj, value):
|
| | | ## 连击概率
|
| | | gameObj.SetDict(ChConfig.Def_PlayerKey_AttrComboRate, value)
|
| | | if gameObj.GetGameObjType() == IPY_GameWorld.gotPlayer:
|
| | | PlayerControl.SendPropertyRefresh(gameObj, ShareDefine.CDBPlayerRefresh_ComboRate, value)
|
| | | return
|
| | | def GetComboDefRate(gameObj): return gameObj.GetDictByKey(ChConfig.AttrName_ComboDefRate)
|
| | | def SetComboDefRate(gameObj, value):
|
| | | ## 抗连击概率
|
| | | gameObj.SetDict(ChConfig.AttrName_ComboDefRate, value)
|
| | | if gameObj.GetGameObjType() == IPY_GameWorld.gotPlayer:
|
| | | PlayerControl.SendPropertyRefresh(gameObj, ShareDefine.CDBPlayerRefresh_ComboDefRate, value)
|
| | | return
|
| | | def GetComboDamPer(gameObj): return gameObj.GetDictByKey(ChConfig.Def_PlayerKey_AttrComboDamPer)
|
| | | def SetComboDamPer(gameObj, value):
|
| | | ## 连击伤害
|
| | | gameObj.SetDict(ChConfig.Def_PlayerKey_AttrComboDamPer, value)
|
| | | if gameObj.GetGameObjType() == IPY_GameWorld.gotPlayer:
|
| | | PlayerControl.SendPropertyRefresh(gameObj, ShareDefine.CDBPlayerRefresh_ComboDamPer, value)
|
| | | return
|
| | |
|
| | | def GetAtkBackRate(gameObj): return gameObj.GetDictByKey(ChConfig.AttrName_AtkBackRate)
|
| | | def SetAtkBackRate(gameObj, value):
|
| | | ## 反击概率
|
| | | gameObj.SetDict(ChConfig.AttrName_AtkBackRate, value)
|
| | | if gameObj.GetGameObjType() == IPY_GameWorld.gotPlayer:
|
| | | PlayerControl.SendPropertyRefresh(gameObj, ShareDefine.CDBPlayerRefresh_AtkBackRate, value)
|
| | | return
|
| | | def GetAtkBackDefRate(gameObj): return gameObj.GetDictByKey(ChConfig.AttrName_AtkBackDefRate)
|
| | | def SetAtkBackDefRate(gameObj, value):
|
| | | ## 抗反击概率
|
| | | gameObj.SetDict(ChConfig.AttrName_AtkBackDefRate, value)
|
| | | if gameObj.GetGameObjType() == IPY_GameWorld.gotPlayer:
|
| | | PlayerControl.SendPropertyRefresh(gameObj, ShareDefine.CDBPlayerRefresh_AtkBackDefRate, value)
|
| | | return
|
| | |
|
| | | def GetSuckHPPer(gameObj): return gameObj.GetDictByKey(ChConfig.AttrName_SuckHPPer)
|
| | | def SetSuckHPPer(gameObj, value):
|
| | | ## 吸血比率
|
| | | gameObj.SetDict(ChConfig.AttrName_SuckHPPer, value)
|
| | | if gameObj.GetGameObjType() == IPY_GameWorld.gotPlayer:
|
| | | PlayerControl.SendPropertyRefresh(gameObj, ShareDefine.CDBPlayerRefresh_SuckHPPer, value)
|
| | | return
|
| | | def GetSuckHPDefPer(gameObj): return gameObj.GetDictByKey(ChConfig.AttrName_SuckHPDefPer)
|
| | | def SetSuckHPDefPer(gameObj, value):
|
| | | ## 抗吸血比率
|
| | | gameObj.SetDict(ChConfig.AttrName_SuckHPDefPer, value)
|
| | | if gameObj.GetGameObjType() == IPY_GameWorld.gotPlayer:
|
| | | PlayerControl.SendPropertyRefresh(gameObj, ShareDefine.CDBPlayerRefresh_SuckHPDefPer, value)
|
| | | return
|
| | |
|
| | | |
| | |
| | | ("DWORD", "NPCID", 1),
|
| | | ("BYTE", "FightPowerLackAtkLimit", 0),
|
| | | ("DWORD", "SuppressFightPower", 0),
|
| | | ("DWORD", "AtkSpeed", 0),
|
| | | ("DWORD", "SuperHitRateReduce", 0),
|
| | | ("DWORD", "FaintRate", 0),
|
| | | ("DWORD", "FaintDefRate", 0),
|
| | | ("DWORD", "ComboRate", 0),
|
| | | ("DWORD", "ComboDefRate", 0),
|
| | | ("DWORD", "AtkBackRate", 0),
|
| | | ("DWORD", "AtkBackDefRate", 0),
|
| | | ("DWORD", "SuckHPPer", 0),
|
| | | ("DWORD", "SuckHPDefPer", 0),
|
| | | ),
|
| | |
|
| | | "NPCRealmStrengthen":(
|
| | |
| | | ("DWORD", "DataMapID", 1),
|
| | | ("WORD", "LineID", 1),
|
| | | ("DWORD", "NPCID", 0),
|
| | | ("DWORD", "SummerNPCID", 0),
|
| | | ("list", "AwardItemList", 0),
|
| | | ),
|
| | |
|
| | | "FBHelpBattle":(
|
| | |
| | | def __init__(self): |
| | | self.NPCID = 0
|
| | | self.FightPowerLackAtkLimit = 0
|
| | | self.SuppressFightPower = 0 |
| | | self.SuppressFightPower = 0
|
| | | self.AtkSpeed = 0
|
| | | self.SuperHitRateReduce = 0
|
| | | self.FaintRate = 0
|
| | | self.FaintDefRate = 0
|
| | | self.ComboRate = 0
|
| | | self.ComboDefRate = 0
|
| | | self.AtkBackRate = 0
|
| | | self.AtkBackDefRate = 0
|
| | | self.SuckHPPer = 0
|
| | | self.SuckHPDefPer = 0 |
| | | return |
| | | |
| | | def GetNPCID(self): return self.NPCID # NPCID
|
| | | def GetFightPowerLackAtkLimit(self): return self.FightPowerLackAtkLimit # 战力不足限制攻击
|
| | | def GetSuppressFightPower(self): return self.SuppressFightPower # 推荐/压制战力 |
| | | def GetSuppressFightPower(self): return self.SuppressFightPower # 推荐/压制战力
|
| | | def GetAtkSpeed(self): return self.AtkSpeed # 攻击速度
|
| | | def GetSuperHitRateReduce(self): return self.SuperHitRateReduce # 抗暴击概率
|
| | | def GetFaintRate(self): return self.FaintRate # 击晕概率
|
| | | def GetFaintDefRate(self): return self.FaintDefRate # 抗击晕概率
|
| | | def GetComboRate(self): return self.ComboRate # 连击概率
|
| | | def GetComboDefRate(self): return self.ComboDefRate # 抗连击概率
|
| | | def GetAtkBackRate(self): return self.AtkBackRate # 反击概率
|
| | | def GetAtkBackDefRate(self): return self.AtkBackDefRate # 抗反击概率
|
| | | def GetSuckHPPer(self): return self.SuckHPPer # 吸血比率
|
| | | def GetSuckHPDefPer(self): return self.SuckHPDefPer # 抗吸血比率 |
| | | |
| | | # 成长型境界怪物表 |
| | | class IPY_NPCRealmStrengthen(): |
| | |
| | | def __init__(self): |
| | | self.DataMapID = 0
|
| | | self.LineID = 0
|
| | | self.NPCID = 0 |
| | | self.NPCID = 0
|
| | | self.SummerNPCID = 0
|
| | | self.AwardItemList = [] |
| | | return |
| | | |
| | | def GetDataMapID(self): return self.DataMapID # 数据地图ID
|
| | | def GetLineID(self): return self.LineID # 功能线路ID
|
| | | def GetNPCID(self): return self.NPCID # NPCID |
| | | def GetNPCID(self): return self.NPCID # NPCID
|
| | | def GetSummerNPCID(self): return self.SummerNPCID # 召唤兽ID
|
| | | def GetAwardItemList(self): return self.AwardItemList # 过关奖励列表,[[物品ID,个数,是否拍品], ...] |
| | | |
| | | # 副本助战表 |
| | | class IPY_FBHelpBattle(): |
| | |
| | | #初始化状态
|
| | | curNPC.SetSpeed(curNPC.GetOrgSpeed())
|
| | | curNPC.SetAtkInterval(curNPC.GetBaseAtkInterval())
|
| | |
|
| | | |
| | | #扩展属性
|
| | | npcDataEx = GetNPCDataEx(curNPC.GetNPCID())
|
| | | if npcDataEx:
|
| | | GameObj.SetAtkSpeed(curNPC, npcDataEx.GetAtkSpeed())
|
| | | GameObj.SetSuperHitRateReduce(curNPC, npcDataEx.GetSuperHitRateReduce())
|
| | | GameObj.SetFaintRate(curNPC, npcDataEx.GetFaintRate())
|
| | | GameObj.SetFaintDefRate(curNPC, npcDataEx.GetFaintDefRate())
|
| | | GameObj.SetComboRate(curNPC, npcDataEx.GetComboRate())
|
| | | GameObj.SetComboDefRate(curNPC, npcDataEx.GetComboDefRate())
|
| | | GameObj.SetAtkBackRate(curNPC, npcDataEx.GetAtkBackRate())
|
| | | GameObj.SetAtkBackDefRate(curNPC, npcDataEx.GetAtkBackDefRate())
|
| | | GameObj.SetSuckHPPer(curNPC, npcDataEx.GetSuckHPPer())
|
| | | GameObj.SetSuckHPDefPer(curNPC, npcDataEx.GetSuckHPDefPer())
|
| | | |
| | | # #先清空异常
|
| | | # if curNPC.GetAbnormalState() != IPY_GameWorld.sctInvalid:
|
| | | # curNPC.SetAbnormalState(IPY_GameWorld.sctInvalid)
|
| | |
| | | GameObj.SetMaxHP(curNPC, PropDict["MaxHP"])
|
| | | curNPC.SetHit(PropDict["Hit"])
|
| | | curNPC.SetMiss(PropDict["Miss"])
|
| | | GameObj.SetAtkSpeed(curNPC, PropDict.get("AtkSpeed", 0))
|
| | |
|
| | | # curPlayerPropDict["SkillAtkRate"] = curPlayer.GetSkillAtkRate() # 技能攻击比例加成
|
| | | # curPlayerPropDict["SkillAtkRateReduce"] = PlayerControl.GetSkillAtkRateReduce(curPlayer) # 技能攻击比例减少
|
| | | # curPlayerPropDict["LuckyHitRate"] = curPlayer.GetLuckyHitRate() # 会心一击几率
|
| | | # curPlayerPropDict["LuckyHitVal"] = curPlayer.GetLuckyHitVal() # 会心一击伤害固定值
|
| | | # curPlayerPropDict["LuckyHitRateReduce"] = PlayerControl.GetLuckyHitRateReduce(curPlayer) # 会心一击概率抗性
|
| | | # curPlayerPropDict["LuckyHitReduce"] = PlayerControl.GetLuckyHitReduce(curPlayer) # 会心一击伤害减免固定值
|
| | | # curPlayerPropDict["SuperHitRate"] = curPlayer.GetSuperHitRate() # 暴击概率
|
| | | # curPlayerPropDict["SuperHit"] = curPlayer.GetSuperHit() # 暴击伤害固定值
|
| | | # curPlayerPropDict["SuperHitRateReduce"] = PlayerControl.GetSuperHitRateReduce(curPlayer) # 暴击概率抗性
|
| | | # curPlayerPropDict["SuperHitReduce"] = PlayerControl.GetSuperHitReduce(curPlayer) # 暴击伤害抗性固定值
|
| | | # curPlayerPropDict["IceAtk"] = curPlayer.GetIceAtk() # 真实伤害 固定值
|
| | | # curPlayerPropDict["IceDef"] = curPlayer.GetIceDef() # 真实伤害防御 固定值
|
| | | # curPlayerPropDict["IgnoreDefRate"] = curPlayer.GetIgnoreDefRate() # 无视防御几率
|
| | | # curPlayerPropDict["IgnoreDefRateReduce"] = PlayerControl.GetIgnoreDefRateReduce(curPlayer) # 无视防御概率抗性
|
| | | # curPlayerPropDict["IgnoreDefReducePer"] = PlayerControl.GetIgnoreDefReducePer(curPlayer) # 无视防御伤害减免
|
| | | # curPlayerPropDict["DamagePVE"] = PlayerControl.GetDamagePVE(curPlayer) # 伤害输出计算固定值PVE
|
| | | # curPlayerPropDict["DamagePerPVP"] = PlayerControl.GetDamagePerPVP(curPlayer) # 伤害输出计算百分比PVP
|
| | | # curPlayerPropDict["DamagePerPVPReduce"] = PlayerControl.GetDamagePerPVPReduce(curPlayer) # 伤害输出计算百分比PVP减少
|
| | | # curPlayerPropDict["DamagePVP"] = PlayerControl.GetDamagePVP(curPlayer) # PVP固定伤害
|
| | | # curPlayerPropDict["DamagePVPReduce"] = PlayerControl.GetDamagePVPReduce(curPlayer) # PVP固定减伤
|
| | | # curPlayerPropDict["FinalHurt"] = PlayerControl.GetFinalHurt(curPlayer) # 最终固定伤害增加
|
| | | # curPlayerPropDict["FinalHurtReduce"] = PlayerControl.GetFinalHurtReduce(curPlayer) # 最终固定伤害减少
|
| | | # curPlayerPropDict["FinalHurtPer"] = PlayerControl.GetFinalHurtPer(curPlayer) # 最终伤害百分比
|
| | | # curPlayerPropDict["FinalHurtReducePer"] = PlayerControl.GetFinalHurtReducePer(curPlayer) # 最终伤害减少百分比
|
| | | # curPlayerPropDict["OnlyFinalHurt"] = PlayerControl.GetOnlyFinalHurt(curPlayer) # 额外输出伤害
|
| | | # curPlayerPropDict["DamChanceDef"] = PlayerControl.GetDamChanceDef(curPlayer) # 20%的概率抵御伤害比率
|
| | | # curPlayerPropDict["NPCHurtAddPer"] = PlayerControl.GetNPCHurtAddPer(curPlayer) # 对怪物伤害加成
|
| | | # curPlayerPropDict["AtkBackHPPer"] = PlayerControl.GetAtkBackHPPer(curPlayer) # 攻击回复血量固定值
|
| | | # curPlayerPropDict["PVPAtkBackHP"] = PlayerControl.GetPVPAtkBackHP(curPlayer) # PVP攻击回血
|
| | | # curPlayerPropDict["FaintRate"] = PlayerControl.GetFaintRate(curPlayer) # 触发击晕
|
| | | # curPlayerPropDict["FaintDefRate"] = PlayerControl.GetFaintDefRate(curPlayer) # 击晕抵抗
|
| | | curNPC.SetSuperHitRate(PropDict["SuperHitRate"])
|
| | | GameObj.SetSuperHitRateReduce(curNPC, PropDict["SuperHitRateReduce"])
|
| | | GameObj.SetFaintRate(curNPC, PropDict["FaintRate"])
|
| | | GameObj.SetFaintDefRate(curNPC, PropDict["FaintDefRate"])
|
| | | GameObj.SetComboRate(curNPC, PropDict.get("ComboRate", 0)) # 后面加的属性做兼容
|
| | | GameObj.SetComboDefRate(curNPC, PropDict.get("ComboDefRate", 0))
|
| | | GameObj.SetAtkBackRate(curNPC, PropDict.get("AtkBackRate", 0))
|
| | | GameObj.SetAtkBackDefRate(curNPC, PropDict.get("AtkBackDefRate", 0))
|
| | | GameObj.SetSuckHPPer(curNPC, PropDict.get("SuckHPPer", 0))
|
| | | GameObj.SetSuckHPDefPer(curNPC, PropDict.get("SuckHPDefPer", 0))
|
| | | |
| | | GameWorld.DebugLog("SetPVPNPCPlayerAttr: objID=%s,NPCID=%s,pvpPlayerID=%s,maxHP=%s" |
| | | % (curNPC.GetID(), curNPC.GetNPCID(), pvpPlayerID, GameObj.GetMaxHP(curNPC)))
|
| | | return
|
| | |
|
| | | def SetHelpBattleRobotRebornAttr(self, fightPower):
|
| | |
| | | def __SetAtkInterval(self):
|
| | | curPlayer = self.__Player
|
| | |
|
| | | atkSpeed = GetAtkSpeed(curPlayer)
|
| | | atkSpeed = GameObj.GetAtkSpeed(curPlayer)
|
| | |
|
| | | formula = IpyGameDataPY.GetFuncCfg("AtkInterval")
|
| | | atkInterval = 0 if not formula else eval(FormulaControl.GetCompileFormula("AtkInterval", formula))
|
| | |
| | | def SetSpeedValue(curPlayer, value):
|
| | | curPlayer.SetDict(ChConfig.Def_PlayerKey_SpeedValue, value)
|
| | | SendPropertyRefresh(curPlayer, ShareDefine.CDBPlayerRefresh_SpeedValue, value, True) # 移动速度值暂定广播周围玩家
|
| | |
|
| | | ##获取玩家攻击速度,用于计算攻击间隔
|
| | | # @param curPlayer 玩家实例
|
| | | # @return 玩家攻击速度
|
| | | def GetAtkSpeed(curPlayer):
|
| | | return curPlayer.GetBattleValEx1()
|
| | |
|
| | | ##设置玩家攻击速度,用于计算攻击间隔
|
| | | # @param curPlayer 玩家实例
|
| | | # @return None
|
| | | def SetAtkSpeed(curPlayer, value):
|
| | | curPlayer.SetBattleValEx1(value, True)
|
| | |
|
| | | #---攻击回复血量比率----
|
| | | ## 获取玩家攻击回复血量比率
|
| | |
| | | ## 抗卓越一击概率
|
| | | def GetGreatHitRateReduce(curPlayer): return curPlayer.GetDictByKey(ChConfig.Def_PlayerKey_GreatHitRateReduce)
|
| | | def SetGreatHitRateReduce(curPlayer, value): curPlayer.SetDict(ChConfig.Def_PlayerKey_GreatHitRateReduce, value)
|
| | | ## 抗暴击概率
|
| | | def GetSuperHitRateReduce(curPlayer): return curPlayer.GetDictByKey(ChConfig.Def_PlayerKey_SuperHitRateReduce)
|
| | | def SetSuperHitRateReduce(curPlayer, value): |
| | | curPlayer.SetDict(ChConfig.Def_PlayerKey_SuperHitRateReduce, value)
|
| | | SendPropertyRefresh(curPlayer, ShareDefine.CDBPlayerRefresh_SuperHitRateReduce, value)
|
| | | ## 抗无视防御概率
|
| | | def GetIgnoreDefRateReduce(curPlayer): return curPlayer.GetDictByKey(ChConfig.Def_PlayerKey_IgnoreDefRateReduce)
|
| | | def SetIgnoreDefRateReduce(curPlayer, value):
|
| | |
| | | def SetReduceBackHPPer(curPlayer, value):
|
| | | curPlayer.SetDict(ChConfig.Def_PlayerKey_ReduceBackHPPer, value)
|
| | |
|
| | | #---触发击晕----
|
| | | def GetFaintRate(curPlayer): return curPlayer.GetDictByKey(ChConfig.Def_PlayerKey_AttrFaintRate)
|
| | | def SetFaintRate(curPlayer, value):
|
| | | curPlayer.SetDict(ChConfig.Def_PlayerKey_AttrFaintRate, value)
|
| | | SendPropertyRefresh(curPlayer, ShareDefine.CDBPlayerRefresh_FaintRate, value)
|
| | | #---击晕抵抗----
|
| | | def GetFaintDefRate(curPlayer): return curPlayer.GetDictByKey(ChConfig.Def_PlayerKey_AttrFaintDefRate)
|
| | | def SetFaintDefRate(curPlayer, value):
|
| | | curPlayer.SetDict(ChConfig.Def_PlayerKey_AttrFaintDefRate, value)
|
| | | SendPropertyRefresh(curPlayer, ShareDefine.CDBPlayerRefresh_FaintDefRate, value)
|
| | | |
| | | #---触发定身----
|
| | | def GetAtkerFreezed(curPlayer): return curPlayer.GetDictByKey(ChConfig.Def_PlayerKey_AttrAtkerFreezed)
|
| | | def SetAtkerFreezed(curPlayer, value): curPlayer.SetDict(ChConfig.Def_PlayerKey_AttrAtkerFreezed, value)
|
| | |
| | | def GetAddAngry(curPlayer): return curPlayer.GetDictByKey(ChConfig.Def_PlayerKey_AttrAddAngry)
|
| | | def SetAddAngry(curPlayer, value): curPlayer.SetDict(ChConfig.Def_PlayerKey_AttrAddAngry, value)
|
| | |
|
| | | #---连击几率----
|
| | | def GetComboRate(curPlayer): return curPlayer.GetDictByKey(ChConfig.Def_PlayerKey_AttrComboRate)
|
| | | def SetComboRate(curPlayer, value):
|
| | | curPlayer.SetDict(ChConfig.Def_PlayerKey_AttrComboRate, value)
|
| | | SendPropertyRefresh(curPlayer, ShareDefine.CDBPlayerRefresh_ComboRate, value)
|
| | | #---连击伤害----
|
| | | def GetComboDamPer(curPlayer): return curPlayer.GetDictByKey(ChConfig.Def_PlayerKey_AttrComboDamPer)
|
| | | def SetComboDamPer(curPlayer, value):
|
| | | curPlayer.SetDict(ChConfig.Def_PlayerKey_AttrComboDamPer, value)
|
| | | SendPropertyRefresh(curPlayer, ShareDefine.CDBPlayerRefresh_ComboDamPer, value)
|
| | | |
| | | #---技能攻击比例减少----
|
| | | def GetSkillAtkRateReduce(curPlayer): return curPlayer.GetDictByKey(ChConfig.Def_PlayerKey_SkillAtkRateReduce)
|
| | | def SetSkillAtkRateReduce(curPlayer, value):
|
| | |
| | | petMinAtk = PlayerControl.GetPetMinAtk(curPlayer) #灵宠最小攻击
|
| | | petMaxAtk = PlayerControl.GetPetMaxAtk(curPlayer) #灵宠最大攻击
|
| | | petDamPer = GameObj.GetPetDamPer(curPlayer) #灵宠增加伤害
|
| | | atkSpeed = PlayerControl.GetAtkSpeed(curPlayer) # 攻击速度
|
| | | atkSpeed = GameObj.GetAtkSpeed(curPlayer) # 攻击速度
|
| | | aIgnoreDefRate = curPlayer.GetIgnoreDefRate() # 无视防御比率
|
| | | aLuckyHit = curPlayer.GetLuckyHitVal() # 会心一击固定值
|
| | | aLuckyHitRate = curPlayer.GetLuckyHitRate() # 会心一击概率
|
| | |
| | | curPlayerPropDict["MaxHP"] = GameObj.GetMaxHP(curPlayer)
|
| | | curPlayerPropDict["Hit"] = curPlayer.GetHit()
|
| | | curPlayerPropDict["Miss"] = curPlayer.GetMiss()
|
| | | curPlayerPropDict["AtkSpeed"] = GameObj.GetAtkSpeed(curPlayer)
|
| | | curPlayerPropDict["SkillAtkRate"] = curPlayer.GetSkillAtkRate() # 技能攻击比例加成
|
| | | curPlayerPropDict["SkillAtkRateReduce"] = PlayerControl.GetSkillAtkRateReduce(curPlayer) # 技能攻击比例减少
|
| | | curPlayerPropDict["LuckyHitRate"] = curPlayer.GetLuckyHitRate() # 会心一击几率
|
| | |
| | | curPlayerPropDict["LuckyHitReduce"] = PlayerControl.GetLuckyHitReduce(curPlayer) # 会心一击伤害减免固定值
|
| | | curPlayerPropDict["SuperHitRate"] = curPlayer.GetSuperHitRate() # 暴击概率
|
| | | curPlayerPropDict["SuperHit"] = curPlayer.GetSuperHit() # 暴击伤害固定值
|
| | | curPlayerPropDict["SuperHitRateReduce"] = PlayerControl.GetSuperHitRateReduce(curPlayer) # 暴击概率抗性
|
| | | curPlayerPropDict["SuperHitRateReduce"] = GameObj.GetSuperHitRateReduce(curPlayer) # 暴击概率抗性
|
| | | curPlayerPropDict["SuperHitReduce"] = PlayerControl.GetSuperHitReduce(curPlayer) # 暴击伤害抗性固定值
|
| | | curPlayerPropDict["IceAtk"] = curPlayer.GetIceAtk() # 真实伤害 固定值
|
| | | curPlayerPropDict["IceDef"] = curPlayer.GetIceDef() # 真实伤害防御 固定值
|
| | |
| | | curPlayerPropDict["NPCHurtAddPer"] = PlayerControl.GetNPCHurtAddPer(curPlayer) # 对怪物伤害加成
|
| | | curPlayerPropDict["AtkBackHPPer"] = PlayerControl.GetAtkBackHPPer(curPlayer) # 攻击回复血量固定值
|
| | | curPlayerPropDict["PVPAtkBackHP"] = PlayerControl.GetPVPAtkBackHP(curPlayer) # PVP攻击回血
|
| | | curPlayerPropDict["FaintRate"] = PlayerControl.GetFaintRate(curPlayer) # 触发击晕
|
| | | curPlayerPropDict["FaintDefRate"] = PlayerControl.GetFaintDefRate(curPlayer) # 击晕抵抗
|
| | | curPlayerPropDict["FaintRate"] = GameObj.GetFaintRate(curPlayer) # 触发击晕
|
| | | curPlayerPropDict["FaintDefRate"] = GameObj.GetFaintDefRate(curPlayer) # 击晕抵抗
|
| | | curPlayerPropDict["ComboRate"] = GameObj.GetComboRate(curPlayer) # 连击
|
| | | curPlayerPropDict["ComboDefRate"] = GameObj.GetComboDefRate(curPlayer) # 抗连击
|
| | | curPlayerPropDict["AtkBackRate"] = GameObj.GetAtkBackRate(curPlayer) # 反击
|
| | | curPlayerPropDict["AtkBackDefRate"] = GameObj.GetAtkBackDefRate(curPlayer) # 抗反击
|
| | | curPlayerPropDict["SuckHPPer"] = GameObj.GetSuckHPPer(curPlayer) # 吸血比率
|
| | | curPlayerPropDict["SuckHPDefPer"] = GameObj.GetSuckHPDefPer(curPlayer) # 抗吸血比率
|
| | |
|
| | | #推送提醒
|
| | | curPlayerPropDict[ChConfig.Def_PDict_GeTuiSet] = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_GeTuiSet)
|
| | |
| | | petClassLVList.append({"id":petNPCID, 'lv':classLV})
|
| | |
|
| | | petInfo["PetLV"] = petClassLVList
|
| | | petInfo["AtkSpeed"] = PlayerControl.GetAtkSpeed(curPlayer)
|
| | | petInfo["AtkSpeed"] = GameObj.GetAtkSpeed(curPlayer)
|
| | | return petInfo
|
| | |
|
| | | ## 坐骑信息
|
| | |
| | | Def_Effect_FamilyWarAtkPer = 164 # 仙盟联赛攻击加成
|
| | | Def_Effect_FamilySitExpPer = 165 # 仙盟打坐经验加成
|
| | |
|
| | | Def_Effect_ComboDefRate = 210 # 抗连击概率
|
| | | Def_Effect_AtkBackRate = 211 # 反击概率
|
| | | Def_Effect_AtkBackDefRate = 212 # 抗反击概率
|
| | | Def_Effect_SuckHPPer = 213 # 吸血比率
|
| | | Def_Effect_SuckHPDefPer = 214 # 抗吸血比率
|
| | |
|
| | | #增加%d物理伤害值,其中a值为伤害值
|
| | | Def_Effect_AddAtk = 1005
|
| | | #增加%d魔法伤害值,其中a值为伤害值
|
| | |
| | | CDBPlayerRefresh_JiYuan, # 机缘币 245
|
| | | CDBPlayerRefresh_BTGMYuE, # BTGM余额 246
|
| | | CDBPlayerRefresh_SuccessScore, # 成就积分 247
|
| | | ) = range(146, 248)
|
| | | CDBPlayerRefresh_ComboDefRate, # 抗连击概率 248
|
| | | CDBPlayerRefresh_AtkBackRate, # 反击概率 249
|
| | | CDBPlayerRefresh_AtkBackDefRate, # 抗反击概率 250
|
| | | CDBPlayerRefresh_SuckHPPer, # 吸血比率 251
|
| | | CDBPlayerRefresh_SuckHPDefPer, # 抗吸血比率 252
|
| | | ) = range(146, 253)
|
| | |
|
| | | TYPE_Price_Gold_Paper_Money = 5 # 金钱类型,(先用礼券,再用金子)
|
| | | TYPE_Price_Family_Contribution = 6 # 战盟贡献度(活跃度转换得来)
|
| | |
| | | #[lambda curObj:curObj.GetMAtkMin(), lambda curObj, value:curObj.SetMAtkMin(value), IPY_PlayerDefine.CDBPlayerRefresh_MAtkMin, 0, 0], # 最小魔攻
|
| | | #[lambda curObj:curObj.GetMAtkMax(), lambda curObj, value:curObj.SetMAtkMax(value), IPY_PlayerDefine.CDBPlayerRefresh_MAtkMax, 0, 0], # 最大魔攻
|
| | | [lambda curObj:PlayerControl.GetSpeedNotBuff(curObj), lambda curObj, value:PlayerControl.SetSpeedNotBuff(curObj, value), 0, 0, 0], # 移动速度
|
| | | [lambda curObj:PlayerControl.GetAtkSpeed(curObj), lambda curObj, value:PlayerControl.SetAtkSpeed(curObj, value), IPY_PlayerDefine.CDBPlayerRefresh_BattleValEx1, 1, 1], # 攻击速度
|
| | | [lambda curObj:GameObj.GetAtkSpeed(curObj), lambda curObj, value:GameObj.SetAtkSpeed(curObj, value), IPY_PlayerDefine.CDBPlayerRefresh_BattleValEx1, 1, 1], # 攻击速度
|
| | |
|
| | | [lambda curObj:curObj.GetSuperHitRate(), lambda curObj, value:curObj.SetSuperHitRate(value), IPY_PlayerDefine.CDBPlayerRefresh_SuperHitRate, 1, 0], # 暴击概率
|
| | | [lambda curObj:curObj.GetSuperHit(), lambda curObj, value:curObj.SetSuperHit(value), IPY_PlayerDefine.CDBPlayerRefresh_SuperHit, 1, 0], # 暴击伤害固定值
|
| | | [lambda curObj:PlayerControl.GetSuperHitRateReduce(curObj), lambda curObj, value:PlayerControl.SetSuperHitRateReduce(curObj, value), ShareDefine.CDBPlayerRefresh_SuperHitRateReduce, 1, 0],# 暴击概率抗性
|
| | | [lambda curObj:GameObj.GetSuperHitRateReduce(curObj), lambda curObj, value:GameObj.SetSuperHitRateReduce(curObj, value), ShareDefine.CDBPlayerRefresh_SuperHitRateReduce, 1, 0],# 暴击概率抗性
|
| | | [lambda curObj:PlayerControl.GetSuperHitReduce(curObj), lambda curObj, value:PlayerControl.SetSuperHitReduce(curObj, value), ShareDefine.CDBPlayerRefresh_SuperHitReduce, 1, 0], # 暴击伤害抗性固定值
|
| | |
|
| | | [lambda curObj:curObj.GetGreatHitRate(), lambda curObj, value:curObj.SetGreatHitRate(value), 0, 0, 0], # 卓越一击几率
|
| | |
| | | [lambda curObj:curObj.GetDamageBackRate(), lambda curObj, value:curObj.SetDamageBackRate(value), IPY_PlayerDefine.CDBPlayerRefresh_DamageBackRate, 1, 0], # 反伤百分比
|
| | | [lambda curObj:PlayerControl.GetDamChanceDef(curObj), lambda curObj, value:PlayerControl.SetDamChanceDef(curObj, value), ShareDefine.CDBPlayerRefresh_DamChanceDef, 1, 0], # 20%的概率抵御伤害比率
|
| | | [lambda curObj:PlayerControl.GetShieldMPCostRate(curObj), lambda curObj, value:PlayerControl.SetShieldMPCostRate(curObj, value), 0, 0, 0], # 魔法盾伤害吸收蓝耗比率
|
| | | [lambda curObj:PlayerControl.GetFaintRate(curObj), lambda curObj, value:PlayerControl.SetFaintRate(curObj, value), ShareDefine.CDBPlayerRefresh_FaintRate, 1, 0], # 触发击晕
|
| | | [lambda curObj:PlayerControl.GetFaintDefRate(curObj), lambda curObj, value:PlayerControl.SetFaintDefRate(curObj, value), ShareDefine.CDBPlayerRefresh_FaintDefRate, 1, 0], # 击晕抵抗
|
| | | [lambda curObj:GameObj.GetFaintRate(curObj), lambda curObj, value:GameObj.SetFaintRate(curObj, value), ShareDefine.CDBPlayerRefresh_FaintRate, 1, 0], # 触发击晕
|
| | | [lambda curObj:GameObj.GetFaintDefRate(curObj), lambda curObj, value:GameObj.SetFaintDefRate(curObj, value), ShareDefine.CDBPlayerRefresh_FaintDefRate, 1, 0], # 击晕抵抗
|
| | | [lambda curObj:PlayerControl.GetAtkerFreezed(curObj), lambda curObj, value:PlayerControl.SetAtkerFreezed(curObj, value), 0, 0, 0], # 触发定身
|
| | | [lambda curObj:PlayerControl.GetAddAngry(curObj), lambda curObj, value:PlayerControl.SetAddAngry(curObj, value), 0, 0, 0], # 攻击增加额外仇恨
|
| | | [lambda curObj:PlayerControl.GetComboRate(curObj), lambda curObj, value:PlayerControl.SetComboRate(curObj, value), ShareDefine.CDBPlayerRefresh_ComboRate, 0, 0], # 连击几率
|
| | | [lambda curObj:PlayerControl.GetComboDamPer(curObj), lambda curObj, value:PlayerControl.SetComboDamPer(curObj, value), ShareDefine.CDBPlayerRefresh_ComboDamPer, 0, 0], # 连击伤害
|
| | | [lambda curObj:GameObj.GetComboRate(curObj), lambda curObj, value:GameObj.SetComboRate(curObj, value), ShareDefine.CDBPlayerRefresh_ComboRate, 0, 0], # 连击几率
|
| | | [lambda curObj:GameObj.GetComboDamPer(curObj), lambda curObj, value:GameObj.SetComboDamPer(curObj, value), ShareDefine.CDBPlayerRefresh_ComboDamPer, 0, 0], # 连击伤害
|
| | |
|
| | | [lambda curObj:curObj.GetHPRestorePer(), lambda curObj, value:curObj.SetHPRestorePer(value), IPY_PlayerDefine.CDBPlayerRefresh_HPRestorePer, 1, 0], # 自动回复生命
|
| | | [lambda curObj:curObj.GetKillBackHP(), lambda curObj, value:curObj.SetKillBackHP(value), 0, 0, 0], # 击杀回血
|
| | |
| | | [lambda curObj:PlayerControl.GetFamilyWarHPPer(curObj), lambda curObj, value:PlayerControl.SetFamilyWarHPPer(curObj, value), 0, 0, 0], # 仙盟联赛生命加成
|
| | | [lambda curObj:PlayerControl.GetFamilyWarAtkPer(curObj), lambda curObj, value:PlayerControl.SetFamilyWarAtkPer(curObj, value), 0, 0, 0], # 仙盟联赛攻击加成
|
| | | [lambda curObj:PlayerControl.GetFamilySitExpPer(curObj), lambda curObj, value:PlayerControl.SetFamilySitExpPer(curObj, value), 0, 0, 0], # 仙盟打坐经验加成
|
| | | [lambda curObj:GameObj.GetComboDefRate(curObj), lambda curObj, value:GameObj.SetComboDefRate(curObj, value), ShareDefine.CDBPlayerRefresh_ComboDefRate, 1, 0], # 抗连击概率
|
| | | [lambda curObj:GameObj.GetAtkBackRate(curObj), lambda curObj, value:GameObj.SetAtkBackRate(curObj, value), ShareDefine.CDBPlayerRefresh_AtkBackRate, 1, 0], # 反击概率
|
| | | [lambda curObj:GameObj.GetAtkBackDefRate(curObj), lambda curObj, value:GameObj.SetAtkBackDefRate(curObj, value), ShareDefine.CDBPlayerRefresh_AtkBackDefRate, 1, 0], # 抗反击概率
|
| | | [lambda curObj:GameObj.GetSuckHPPer(curObj), lambda curObj, value:GameObj.SetSuckHPPer(curObj, value), ShareDefine.CDBPlayerRefresh_SuckHPPer, 1, 0], # 吸血比率
|
| | | [lambda curObj:GameObj.GetSuckHPDefPer(curObj), lambda curObj, value:GameObj.SetSuckHPDefPer(curObj, value), ShareDefine.CDBPlayerRefresh_SuckHPDefPer, 1, 0], # 抗吸血比率
|
| | | ]
|
| | |
|
| | | ## 通过索引获得属性值
|
| | |
| | | #
|
| | | #---------------------------------------------------------------------
|
| | |
|
| | | import PlayerControl
|
| | | import GameObj
|
| | | import AttackCommon
|
| | |
|
| | | def CheckCanHappen(attacker, defender, effect, curSkill):
|
| | |
| | |
|
| | |
|
| | | def GetValue(attacker, defender, effect):
|
| | | return max(PlayerControl.GetAtkSpeed(attacker) - 10000, 0)/100*effect.GetEffectValue(0)
|
| | | return max(GameObj.GetAtkSpeed(attacker) - 10000, 0)/100*effect.GetEffectValue(0)
|
| | |
|