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());
                    }
                }
            }
        }
Ejemplo n.º 2
0
        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);
            }
        }
Ejemplo n.º 3
0
        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);
        }