private void AppendImpact(CharacterInfo sender, CharacterInfo target, ImpactInfo impactInfo) { if (impactInfo.ConfigData.ExtraParams.Count < 2) { return; } int impactId = -1; try { impactId = int.Parse(impactInfo.ConfigData.ExtraParams[1]); } catch (Exception ex) { LogSystem.Error("parse append impact param error:\n" + ex.Message); } if (impactId > 0) { ImpactLogicData impactLogicData = SkillConfigProvider.Instance.ExtractData(SkillConfigType.SCT_IMPACT, impactId) as ImpactLogicData; if (impactLogicData != null) { impactLogicData.IsIgnorePassiveCheck = true; ImpactSystem.Instance.SendImpactToCharacter(sender, impactId, target.GetId(), -1, -1, sender.GetMovementStateInfo().GetPosition3D(), sender.GetMovementStateInfo().GetFaceDir()); if (EventImpactAppendImpact != null) { EventImpactAppendImpact(target, impactId, sender.GetId(), sender.GetMovementStateInfo().GetPosition3D(), sender.GetMovementStateInfo().GetFaceDir()); } } } }
private bool IsImpactHaveDamage(int impactid) { ImpactLogicData impact_config = SkillConfigProvider.Instance.ExtractData(SkillConfigType.SCT_IMPACT, impactid) as ImpactLogicData; if (impact_config == null) { return(false); } if (impact_config.DamageRate > 0) { return(true); } else { return(false); } }
private bool SendImpactImpl(CharacterInfo sender, int impactId, int targetId, int skillId, int duration) { //LogSystem.Debug("character {0} send impact {1} to character {2}", sender.GetId(), impactId, targetId); if (null != sender) { CharacterInfo target = sender.SceneContext.GetCharacterInfoById(targetId); if (null != target) { if (target.IsUser && target.IsDead()) { return(false); } if (target.IsNpc && target.IsDead()) { NpcInfo npc = target.CastNpcInfo(); if ((int)NpcTypeEnum.SceneObject == npc.NpcType) { return(false); } } ImpactLogicData impactLogicData = SkillConfigProvider.Instance.ExtractData(SkillConfigType.SCT_IMPACT, impactId) as ImpactLogicData; if (null != impactLogicData) { IImpactLogic logic = ImpactLogicManager.Instance.GetImpactLogic(impactLogicData.ImpactLogicId); if (null != logic) { ImpactInfo oldImpactInfo = target.GetSkillStateInfo().GetImpactInfoById(impactId); if (null != oldImpactInfo) { logic.OnInterrupted(target, impactId); target.GetSkillStateInfo().RemoveImpact(impactId); } ImpactInfo impactInfo = new ImpactInfo(); impactInfo.m_IsActivated = true; impactInfo.m_SkillId = skillId; impactInfo.m_ImpactId = impactLogicData.ImpactId; impactInfo.m_ImpactType = impactLogicData.ImpactType; impactInfo.m_BuffDataId = impactLogicData.BuffDataId; impactInfo.ConfigData = impactLogicData; impactInfo.m_StartTime = TimeUtility.GetServerMilliseconds(); impactInfo.m_ImpactDuration = impactLogicData.ImpactTime; if (-1 == duration || duration > impactLogicData.ImpactTime) { impactInfo.m_ImpactDuration = impactLogicData.ImpactTime; } else { impactInfo.m_ImpactDuration = duration; } impactInfo.m_HasEffectApplyed = false; if (0 == impactInfo.ConfigData.ImpactGfxLogicId) { impactInfo.m_IsGfxControl = false; } else { impactInfo.m_IsGfxControl = true; } impactInfo.m_ImpactSenderId = sender.GetId(); impactInfo.m_MaxMoveDistance = impactLogicData.CalcMaxMoveDistance(); if (impactLogicData.ImpactGfxLogicId == 0) { impactInfo.m_LeftEnableMoveCount = 0;//禁止位移 } else { impactInfo.m_LeftEnableMoveCount = 1;//允许位移 } //LogSystem.Warn("impact {0} EnableMoveCount {1} MaxMoveDistanceSqr {2}", impactId, impactInfo.m_LeftEnableMoveCount, impactInfo.m_MaxMoveDistanceSqr); target.GetSkillStateInfo().AddImpact(impactInfo); logic.StartImpact(target, impactId); if ((int)ImpactType.INSTANT == impactInfo.m_ImpactType) { impactInfo.m_IsActivated = false; } return(true); } } } } return(false); }