public override int RefixHpDamage(CharacterInfo obj, int impactId, int hpDamage, int senderId, ref bool isCritical, int impactOwnerId) { if (obj == null) { return(hpDamage); } if (impactOwnerId != senderId) { return(hpDamage); } UserInfo sender = obj.SceneContext.GetCharacterInfoById(senderId) as UserInfo; if (sender == null) { return(hpDamage); } CombatStatisticInfo combat_info = sender.GetCombatStatisticInfo(); if (combat_info == null) { return(hpDamage); } ImpactInfo impactinfo = sender.GetSkillStateInfo().GetImpactInfoById(impactId); if (impactinfo == null || impactinfo.ConfigData.ExtraParams.Count < 1) { return(hpDamage); } int triggerCount = 0; string effect = ""; string mountPoint = ""; try { if (impactinfo.ConfigData.ExtraParams.Count > 4) { triggerCount = int.Parse(impactinfo.ConfigData.ExtraParams[0]); effect = impactinfo.ConfigData.ExtraParams[2]; mountPoint = impactinfo.ConfigData.ExtraParams[3]; if (combat_info.MultiHitCount != 0 && combat_info.MultiHitCount % triggerCount == 0) { AppendDamage(sender, obj, impactinfo, hpDamage); AppendImpact(sender, obj, impactinfo); } if (!String.IsNullOrEmpty(effect) && !String.IsNullOrEmpty(mountPoint)) { EventImpactLogicEffect(obj, effect, mountPoint, 2.0f); } } } catch (Exception ex) { LogSystem.Error("parse append damage param error:\n" + ex.Message + "\n" + ex.StackTrace); } return(hpDamage); }
public override int RefixHpDamage(CharacterInfo obj, int impactId, int hpDamage, int senderId, ref bool isCritical, int impactOwnerId) { if (obj == null) { return(hpDamage); } if (senderId != impactOwnerId) { return(hpDamage); } UserInfo sender = obj.SceneContext.GetCharacterInfoById(senderId) as UserInfo; if (sender == null) { return(hpDamage); } CombatStatisticInfo combat_info = sender.GetCombatStatisticInfo(); if (combat_info == null) { return(hpDamage); } ImpactInfo impactinfo = sender.GetSkillStateInfo().GetImpactInfoById(impactId); if (impactinfo == null || impactinfo.ConfigData.ExtraParams.Count < 1) { return(hpDamage); } int criticalCount = 0; try { criticalCount = int.Parse(impactinfo.ConfigData.ExtraParams[0]); if (combat_info.MultiHitCount != 0 && combat_info.MultiHitCount % criticalCount == 0) { if (!isCritical) { hpDamage = (int)(hpDamage * sender.GetActualProperty().CriticalPow); isCritical = true; } } } catch (Exception ex) { LogSystem.Error("parse HitCriticalTrigger param error:\n" + ex.Message); } return(hpDamage); }
public void OnCharacterDamage(CharacterInfo sender, CharacterInfo obj, int curDamage, bool isCritical, bool isOrdinary) { bool isKiller = false; // 计算出的伤害小于1时, 不处理 if (curDamage < 1) { return; } UserInfo user = obj as UserInfo; if (null != user) { user.GetCombatStatisticInfo().AddTotalDamageToMyself(curDamage); } UserInfo senderUser = sender as UserInfo; if (null != senderUser) { senderUser.GetCombatStatisticInfo().AddTotalDamageFromMyself(curDamage); } sender.MakeDamage += curDamage; curDamage = curDamage * -1; int realDamage = curDamage; if (obj.Hp + curDamage < 0) { realDamage = 0 - obj.Hp; } obj.SetHp(Operate_Type.OT_Relative, realDamage); if (obj.IsDead()) { isKiller = true; } if (isKiller) { UpdateKillTalent(sender); UpdateKillAddDamage(sender); UpdateKillAddCritical(sender); } if (null != EventImpactLogicDamage) { EventImpactLogicDamage(obj, sender.GetId(), curDamage, isKiller, isCritical, isOrdinary); } }
public override int RefixHpDamage(CharacterInfo obj, int impactId, int hpDamage, int senderId, ref bool isCritical, int impactOnwerId) { //LogSystem.Debug("---in hit recover"); if (obj == null) { return(hpDamage); } if (senderId != impactOnwerId) { return(hpDamage); } UserInfo sender = obj.SceneContext.GetCharacterInfoById(senderId) as UserInfo; if (sender == null) { return(hpDamage); } CombatStatisticInfo combat_info = sender.GetCombatStatisticInfo(); if (combat_info == null) { return(hpDamage); } ImpactInfo impactinfo = sender.GetSkillStateInfo().GetImpactInfoById(impactId); if (impactinfo == null || impactinfo.ConfigData.ExtraParams.Count < 1) { return(hpDamage); } int triggerCount = 0; try { triggerCount = int.Parse(impactinfo.ConfigData.ExtraParams[0]); if (combat_info.MultiHitCount != 0 && combat_info.MultiHitCount % triggerCount == 0) { Recover(sender, impactinfo, combat_info.MultiHitCount, combat_info.LastHitTime); } } catch (Exception ex) { LogSystem.Error("parse HitRcover count param error:\n" + ex.Message); } return(hpDamage); }
public void OnGfxHitTarget(int id, int impactId, int targetId, int hitCount, int skillId, int duration, float x, float y, float z, float dir, long hit_count_id) { CharacterInfo sender = WorldSystem.Instance.GetCharacterById(id); CharacterInfo target = WorldSystem.Instance.GetCharacterById(targetId); UserInfo playerSelf = WorldSystem.Instance.GetPlayerSelf(); bool hitCountChanged = false; bool playerHitCountChange = false; long curTime = TimeUtility.GetLocalMilliseconds(); UpdateHitTalent(sender, hit_count_id); // 攻击 if (hitCount > 0) { CombatStatisticInfo senderCombatInfo = sender.GetCombatStatisticInfo(); int last_count = senderCombatInfo.MultiHitCount; if (IsImpactHaveDamage(impactId)) { hitCountChanged = senderCombatInfo.UpdateMultiHitCount(hit_count_id, hitCount, curTime); } if (id == WorldSystem.Instance.PlayerSelfId && null != playerSelf) { if (senderCombatInfo.MultiHitCount >= 1 && last_count != senderCombatInfo.MultiHitCount) { GfxSystem.PublishGfxEvent("ge_hitcount", "ui", senderCombatInfo.MultiHitCount); playerHitCountChange = hitCountChanged; } } CombatStatisticInfo targetCombatInfo = target.GetCombatStatisticInfo(); targetCombatInfo.HitCount += hitCount; if (targetId == WorldSystem.Instance.PlayerSelfId && null != playerSelf) { if (WorldSystem.Instance.IsELiteScene()) { RoleInfo roleInfo = LobbyClient.Instance.CurrentRole; SceneResource curScene = WorldSystem.Instance.GetCurScene(); if (null != roleInfo && null != curScene && roleInfo.GetSceneInfo(WorldSystem.Instance.GetCurSceneId()) == 2) { //当前在挑战3星通关 GfxSystem.PublishGfxEvent("ge_pve_fightinfo", "ui", 0, targetCombatInfo.HitCount, curScene.SceneConfig.m_CompletedHitCount, 0); } playerHitCountChange = true; } } } if (playerHitCountChange && null != playerSelf && (WorldSystem.Instance.IsPvpScene() || WorldSystem.Instance.IsMultiPveScene())) { CombatStatisticInfo combatInfo = playerSelf.GetCombatStatisticInfo(); ArkCrossEngineMessage.Msg_CR_HitCountChanged msg = new ArkCrossEngineMessage.Msg_CR_HitCountChanged(); msg.max_multi_hit_count = combatInfo.MaxMultiHitCount; msg.hit_count = combatInfo.HitCount; Network.NetworkSystem.Instance.SendMessage(msg); } if (null != sender && null != target) { int hit_count = 0; hit_count = sender.GetCombatStatisticInfo().MultiHitCount; OnGfxStartImpact(sender.GetId(), impactId, target.GetId(), skillId, duration, new Vector3(x, y, z), dir, hit_count); } }