From fd929faf55ab49f558ee2f7b5ef9adcba0de82c6 Mon Sep 17 00:00:00 2001 From: xdh <xiefantasy@qq.com> Date: 星期四, 30 八月 2018 19:26:25 +0800 Subject: [PATCH] fix:3101 【后端】仙盟贡献物品效果 --- ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Attack/BaseAttack.py | 54 ++++++++++++++++++++++++++++++++++++++++++++++++++---- 1 files changed, 50 insertions(+), 4 deletions(-) diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Attack/BaseAttack.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Attack/BaseAttack.py index aa5586e..28cfd70 100644 --- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Attack/BaseAttack.py +++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Attack/BaseAttack.py @@ -714,6 +714,52 @@ return True +# 按仙盟成员均摊伤害 +def AttackerSkillAttackAreaByFamily(attacker, defender, srcPosX, srcPosY, curSkill, + skillPercent, skillEnhance, tick, isExSkill = False): + #清空伤血列表 + global g_skillHurtList + g_skillHurtList.Clear() + + #攻击方原有血量,用来通知反弹 + attackerHP = GameObj.GetHP(attacker) + resultList = __GetAreaAtackObj(attacker, curSkill, srcPosX, srcPosY, tick, __CheckCanAttack) + + #有目标类技能,查找指定的攻击目标是否在列表中,不在添加 + resultList = __AddObj_In_resultList(resultList, attacker, defender, curSkill, tick) + + # 计算仙盟成员数量, 按人头均摊伤害 + resultDict = {} + for obj in resultList: + if obj.GetGameObjType() != IPY_GameWorld.gotPlayer: + continue + + familyID = obj.GetFamilyID() + if familyID not in resultDict: + resultDict[familyID] = [] + + resultDict[familyID].append(obj) + + skillEffect = SkillCommon.GetSkillEffectByEffectID(curSkill, ChConfig.Def_Skill_Effect_AvgHurtFMCnt) + minSkillPer = 0.01 # 如果未配置默认最低值 + if skillEffect: + minSkillPer = skillEffect.GetEffectValue(0) + + attackList = [] + for familyID in resultDict: + cnt = len(resultDict[familyID]) if familyID != 0 else 1 # 无仙盟承受100%伤害 + + skillPercent = max(skillPercent/cnt, minSkillPer) + attackList.extend(__DoAreaAttack(attacker, curSkill, skillEnhance/cnt, skillPercent, resultDict[familyID], + [], g_skillHurtList, tick)) + + + __DoAreaAttackResult(attacker, defender, curSkill, attackList, attackerHP, tick, isExSkill) + + return True + + + # 触发技能的类型为 单体攻击,或者单体buff并且非对自己释放的技能,可以对伤害目标一一执行触发技能逻辑 # 否则只触发一次技能 # 群体BUFF的请参考IsPlayerUseSkill 客户端决定对象,一样可以实现同样效果 # 返回真表示可以对每个伤害目标触发,返回假则为单体 @@ -789,7 +835,7 @@ powerList, g_skillHurtList, tick): attackList = [] #被攻击对象列表 - checkComboOK = False + #checkComboOK = False #执行攻击结果 for obj in resultList: @@ -805,10 +851,10 @@ if powerList != []: skillPercent, skillEnhance = powerList.pop(0) - if not checkComboOK: + #if not checkComboOK: #攻击前连击检查 - SkillCommon.UpdateSkillCombo(attacker, curSkill, tick) - checkComboOK = True + # SkillCommon.UpdateSkillCombo(attacker, curSkill, tick) + # checkComboOK = True callFunc(attacker, obj, curSkill, skillEnhance, skillPercent, g_skillHurtList, tick) -- Gitblit v1.8.0