public override int RefixHpDamage(CharacterInfo obj, int impactId, int hpDamage, int senderId, ref bool isCritical, int impactOwnerId)
        {
            ImpactInfo impactInfo = obj.GetSkillStateInfo().GetImpactInfoById(impactId);

            if (null != impactInfo)
            {
                SuperArmorShieldInfo info = impactInfo.LogicDatas.GetData <SuperArmorShieldInfo>();
                if (null != info)
                {
                    info.DamageRemain -= hpDamage;
                    if (info.DamageRemain > 0)
                    {
                        if (null != EventUpdateSuperArmorShield)
                        {
                            EventUpdateSuperArmorShield(obj, impactId);
                        }
                        if (!obj.UltraArmor)
                        {
                            obj.UltraArmor = true;
                        }
                    }
                    else
                    {
                        if (null != EventStopSuperArmorShield)
                        {
                            EventStopSuperArmorShield(obj, impactId);
                        }
                        impactInfo.m_IsActivated = false;
                        obj.UltraArmor           = false;
                    }
                }
            }
            return(hpDamage);
        }
 public override void StartImpact(CharacterInfo obj, int impactId)
 {
     if (null != obj)
     {
         ImpactInfo impactInfo = obj.GetSkillStateInfo().GetImpactInfoById(impactId);
         if (null != impactInfo)
         {
             obj.UltraArmor = true;
             if (impactInfo.ConfigData.ParamNum > 1)
             {
                 SuperArmorShieldInfo info = impactInfo.LogicDatas.GetData <SuperArmorShieldInfo>();
                 if (null == info)
                 {
                     info = new SuperArmorShieldInfo();
                     impactInfo.LogicDatas.AddData <SuperArmorShieldInfo>(info);
                 }
                 info.DamageRemain = (int)(float.Parse(impactInfo.ConfigData.ExtraParams[0]) * obj.GetActualProperty().HpMax);
                 info.DamageMax    = info.DamageRemain;
                 info.EffectPath   = impactInfo.ConfigData.ExtraParams[1];
                 if (null != EventStartSuperArmorShield)
                 {
                     EventStartSuperArmorShield(obj, impactId);
                 }
             }
         }
     }
 }
Example #3
0
        public override void Tick(CharacterInfo character, int impactId)
        {
            ImpactInfo impactInfo = character.GetSkillStateInfo().GetImpactInfoById(impactId);

            if (null != impactInfo)
            {
                if (impactInfo.m_IsActivated)
                {
                    float damageDelayTime = float.Parse(impactInfo.ConfigData.ExtraParams[0]);
                    if (damageDelayTime > 0.01f && TimeUtility.GetServerMilliseconds() > impactInfo.m_StartTime + damageDelayTime * 1000 && !impactInfo.m_HasEffectApplyed)
                    {
                        int curdamage = 0;
                        int damage    = int.Parse(impactInfo.ConfigData.ExtraParams[1]);
                        if (!character.IsHaveStateFlag(CharacterState_Type.CST_Invincible))
                        {
                            ApplyDamage(character, impactId, out curdamage);
                        }
                        impactInfo.m_HasEffectApplyed = true;
                        ApplyRage(character, impactInfo, curdamage);
                    }

                    if (TimeUtility.GetServerMilliseconds() > impactInfo.m_StartTime + impactInfo.m_ImpactDuration)
                    {
                        impactInfo.m_IsActivated = false;
                    }
                }
            }
        }
 // Update is called once per frame
 void Update()
 {
     if (IsActive)
     {
         if (Time.time > m_LastTriggerTime + m_DamageDelay && !m_HasDamageSend)
         {
             m_HasDamageSend = true;
             if (m_DamageAngle <= 0.1 || m_DamageRange <= 0.1)
             {
                 return;
             }
             foreach (GameObject obj in GetObjInSector(this.transform.position, m_DamageRange, m_DamageAngle))
             {
                 if (obj.tag == "Player")
                 {
                     ImpactInfo impact = m_ImpactInfo.Clone() as ImpactInfo;
                     impact.Attacker   = gameObject;
                     impact.m_Velocity = this.transform.forward * impact.m_Velocity.z;
                     ImpactSystem.Instance.SendImpact(gameObject, obj, impact as ImpactInfo);
                 }
             }
         }
         if (Time.time > m_LastTriggerTime + m_AnimationPlayer.AnimationLenth(m_NormalAttackAnim.name))
         {
             StopSkill();
         }
     }
 }
Example #5
0
        private void OnSendImpact(CharacterInfo sender, int targetId, int impactId, Vector3 srcPos, float srcDir)
        {
            CharacterView senderView = EntityManager.Instance.GetCharacterViewById(sender.GetId());
            CharacterView targetView = EntityManager.Instance.GetCharacterViewById(targetId);

            if (null != senderView && null != targetView)
            {
                CharacterInfo target = WorldSystem.Instance.GetCharacterById(targetId);
                if (null != target)
                {
                    // 施法者能造成硬直且受击方没有霸体
                    ImpactInfo impactInfo = target.GetSkillStateInfo().GetImpactInfoById(impactId);
                    if (null == impactInfo)
                    {
                        return;
                    }
                    int forceLogicId = -1;
                    if (sender.CauseStiff && !target.SuperArmor && !target.UltraArmor)
                    {
                        // 正常造成硬直
                    }
                    else
                    {
                        forceLogicId = 0;
                        impactInfo.m_IsGfxControl = false;
                    }
                    // Npc需要根据体型和类型判定
                    if (target.IsNpc)
                    {
                        NpcInfo npcInfo = target.CastNpcInfo();
                        // 场景破坏物体单独处理
                        if (npcInfo.NpcType == (int)NpcTypeEnum.SceneObject)
                        {
                            forceLogicId = 1;
                            impactInfo.m_IsGfxControl = true;
                        }
                        // 处理体型
                        if (!impactInfo.ConfigData.TargetFigure.Contains(npcInfo.NpcFigure))
                        {
                            forceLogicId = 0;
                            impactInfo.m_IsGfxControl = false;
                        }
                    }
                    // 打断技能
                    if ((null != impactInfo && 0 != impactInfo.ConfigData.ImpactGfxLogicId && forceLogicId < 0) || forceLogicId > 0)
                    {
                        if (null != target.SkillController)
                        {
                            target.SkillController.ForceInterruptCurSkill();
                        }
                        else
                        {
                            LogSystem.Warn("{0} does't have a skillcontroller", target.GetName());
                        }
                    }
                    GfxSystem.QueueGfxAction(GfxModule.Impact.GfxImpactSystem.Instance.SendImpactToCharacter, senderView.Actor, targetView.Actor, impactId, srcPos.X, srcPos.Y, srcPos.Z, srcDir, forceLogicId);
                }
            }
        }
Example #6
0
 private bool IsBreakEndure(ImpactInfo impactInfo)
 {
     if (ImpactType.MicroGHitFly == impactInfo.m_Type)
     {
         return(true);
     }
     return(false);
 }
Example #7
0
        public ActionResult DeleteConfirmed(int id)
        {
            ImpactInfo impactInfo = db.ImpactInfoes.Find(id);

            db.ImpactInfoes.Remove(impactInfo);
            db.SaveChanges();
            return(RedirectToAction("Index"));
        }
Example #8
0
        public override void OnAddImpact(CharacterInfo obj, int impactId, int addImpactId)
        {
            ImpactInfo impactInfo = obj.GetSkillStateInfo().GetImpactInfoById(impactId);

            if (null != impactInfo)
            {
                if (impactInfo.m_IsActivated)
                {
                    ImpactInfo addImpactInfo = obj.GetSkillStateInfo().GetImpactInfoById(addImpactId);
                    if (null != addImpactInfo)
                    {
                        if (addImpactInfo.m_ImpactSenderId == obj.GetId())
                        {
                            return;
                        }
                        if (impactInfo.ConfigData.ParamNum >= 4)
                        {
                            int           beatSkillId   = int.Parse(impactInfo.ConfigData.ExtraParams[0]);
                            int           blockImpactId = int.Parse(impactInfo.ConfigData.ExtraParams[1]);
                            string        EffectAndBone = impactInfo.ConfigData.ExtraParams[2];
                            float         maxDis        = float.Parse(impactInfo.ConfigData.ExtraParams[3]);
                            CharacterInfo target        = obj.SceneContext.GetCharacterInfoById(addImpactInfo.m_ImpactSenderId);
                            if (null != target)
                            {
                                Vector3 srcPos = obj.GetMovementStateInfo().GetPosition3D();
                                Vector3 tarPos = target.GetMovementStateInfo().GetPosition3D();
                                if (Geometry.DistanceSquare(srcPos, tarPos) < maxDis * maxDis)
                                {
                                    ImpactSystem.Instance.SendImpactToCharacter(obj,
                                                                                blockImpactId,
                                                                                addImpactInfo.m_ImpactSenderId,
                                                                                -1,
                                                                                -1,
                                                                                srcPos,
                                                                                obj.GetMovementStateInfo().GetFaceDir());
                                }
                                ImpactSystem.Instance.StopImpactById(obj, impactId);
                                impactInfo.m_IsActivated = false;
                                //obj.SuperArmor = false;
                                if (null != EventImpactLogicSkill)
                                {
                                    EventImpactLogicSkill(obj, beatSkillId);
                                }
                                if (null != EventImpactLogicEffect)
                                {
                                    string[] EffectBonePair = EffectAndBone.Split('|');
                                    if (EffectBonePair.Length >= 2)
                                    {
                                        EventImpactLogicEffect(obj, EffectBonePair[0], EffectBonePair[1], 2.0f);
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
Example #9
0
 public void OnStiffness(ImpactInfo impactInfo)
 {
     m_ImpactInfo.m_EffectDatas.AddRange(impactInfo.m_EffectDatas);
     if (m_IsActive)
     {
         m_AnimationPlayer.SetAnimationState(m_AnimationDict.FlyHitAnim.name, 1, 1.0f, 1.0f, AnimationBlendMode.Additive);
         m_AnimationPlayer.Play(m_AnimationDict.FlyHitAnim.name);
     }
 }
Example #10
0
    private void OnHitTarget(GameObject obj)
    {
        ImpactInfo impact = m_ImpactInfo.Clone() as ImpactInfo;

        impact.Attacker   = m_Sender;
        impact.m_Velocity = this.transform.forward * impact.m_Velocity.z;
        ImpactSystem.Instance.SendImpact(m_Sender, obj, impact.Clone() as ImpactInfo);
        ResourceSystem.RecycleObject(gameObject);
    }
Example #11
0
 public void StartImpact(ImpactInfo impactInfo)
 {
     if (null == impactInfo)
     {
         Debug.LogWarning("ImpactComa::StartImpact -- impactInfo is null");
     }
     m_AnimationPlayer.CrossFade(m_ComaAnim.name);
     GeneralStartImpact(impactInfo);
 }
Example #12
0
    public virtual void ensureDataConsistency()
    {
        if (impactInfo == null)
          impactInfo = new ImpactInfo();

        animUtils = GetComponent<AnimatorUtils>() ?? gameObject.AddComponent<AnimatorUtils>();
        animUtils.setTextsDelegate(getDescriptionTexts);
        animUtils.DescriptionEditingAllowed = false;
    }
Example #13
0
        private Impact CreateSkillImpact(ImpactInfo info_)
        {
            SkillImpactData data   = Main.Inst.Data.Get <SkillImpactData>(info_.impactObjectId);
            SkillImpact     impact = new SkillImpact(data.targetTypes, data.value, data.skills)
            {
                Strategy = data.strategy,
            };

            return(impact);
        }
Example #14
0
 // Use this for initialization
 void Start()
 {
     impactInfoList = new List <ImpactInfo>(100);
     //
     robotControl = FindObjectOfType <RobotControl>();
     // Iniciamos el de rapid fire
     rapidFireImpactInfo      = new ImpactInfo();
     rapidFireImpactInfo.info = 0 + "";
     //
     mainCamera = Camera.main;
 }
Example #15
0
    public static void ProcessVerticalImpact(GameObject attacker, GameObject sender,
                                             SkillImpactInfos impacts, float verticalHeight = 10.0f, float verticalHeightStart = 0.0f,
                                             float SectorDegree = 360.0f, int hitCount = 1)
    {
        bool isTargeted = false;
        // Find Targets
        Ray ray = new Ray(
            sender.transform.position + new Vector3(0, verticalHeightStart - impacts.ImpactRadius, 0),
            Vector3.up);

        RaycastHit[] targetHitInfos = Physics.SphereCastAll(ray, impacts.ImpactRadius,
                                                            verticalHeight, (int)SceneLayerType.Character);
        Script_Util.DrawPhysicsSphereCastLine(ray, verticalHeight, impacts.ImpactRadius, Color.red, 10.0f);
        int index = 0;

        while (index < targetHitInfos.Length)
        {
            if (targetHitInfos[index].collider == null || targetHitInfos[index].collider.gameObject == null)
            {
                index++;
                continue;
            }

            GameObject target = targetHitInfos[index].collider.gameObject;
            if (target != null)
            {
                Vector3 targetDir = target.transform.position - sender.transform.position;
                targetDir.y = 0;
                Vector3 senderDir = sender.transform.rotation * Vector3.forward;
                if (Mathf.Abs(Vector3.Angle(targetDir, senderDir)) > SectorDegree)
                {
                    index++;
                    continue;
                }

                ImpactInfo curImpact = ExtractBestImpactInfo(target, impacts);
                if (curImpact != null)
                {
                    Vector3 faceDir = target.transform.position - sender.transform.position;
                    faceDir.y = 0;
                    ImpactInfo m_ImpactInfo = curImpact.Clone() as ImpactInfo;
                    m_ImpactInfo.m_Velocity = Quaternion.LookRotation(faceDir)
                                              * m_ImpactInfo.m_Velocity;
                    m_ImpactInfo.Attacker = sender;
                    ImpactSystem.Instance.SendImpact(attacker, target, m_ImpactInfo, hitCount);
                    TriggerImpl.RecordTarget(attacker, target);
                    isTargeted = true;
                }
            }
            index++;
        }
        ProcessImpactLock(attacker, impacts, isTargeted);
    }
Example #16
0
 public Impact Create(ImpactInfo info_)
 {
     if (_factoryFuncs.ContainsKey(info_.impactType))
     {
         return(_factoryFuncs[info_.impactType].Invoke(info_));
     }
     else
     {
         Debug.LogError(this.GetType().Name + ": Can't create impact of type:" + info_.impactType);
         return(null);
     }
 }
Example #17
0
 public void StartImpact(ImpactInfo impactInfo)
 {
     if (null == impactInfo)
     {
         Debug.LogWarning("ImpactThunderStroke::StartImpact -- impactInfo is null");
     }
     GeneralStartImpact(impactInfo);
     m_AnimationPlayer.SetAnimationState(m_StrokeAnim.name, 10, 1.0f, 1.0f, AnimationBlendMode.Additive);
     m_AnimationPlayer.Play(m_StrokeAnim.name);
     m_LastStrokeTime = Time.time;
     m_ImpactInfo.m_ThunderStrokeConfig.m_StrokeCount--;
 }
Example #18
0
 public ActionResult Assign([Bind(Include = "Impactid, TicketId,FaultId,TroubleshooterId,TicketRaisedDate,TicketClosingDate")] ImpactInfo impactInfo)
 {
     if (ModelState.IsValid)
     {
         Troubleshooter troubleshooter = db.Troubleshooters.Find(impactInfo.TroubleshooterId);
         impactInfo.TeamId = troubleshooter.TroubleshooterTeam;
         db.ImpactInfoes.Add(impactInfo);
         db.SaveChanges();
         return(RedirectToAction("Index", "ImpactInfoes"));
     }
     return(View(impactInfo));
 }
Example #19
0
    //
    public void SendImpactInfo(Vector3 point, int damageReceived, string extraInfo = "")
    {
        // TODO: Sacar los del player para manejar los de fuego rápido por separado

        // Cribamos valores bajos de momento
        //if (damageReceived < 1) return;
        //
        Vector3 screenPosition = mainCamera.WorldToScreenPoint(point);

        if (screenPosition.z < 0)
        {
            return;
        }

        //
        //if (!CheckIfPlayerInRapidFire())
        //{

        //
        ImpactInfo newImpactInfo = new ImpactInfo();

        newImpactInfo.damageValue = damageReceived;
        //newImpactInfo.info = force + " N";

        newImpactInfo.info           = damageReceived + "";
        newImpactInfo.extraInfo      = extraInfo;
        newImpactInfo.position       = point;
        newImpactInfo.screenPosition = screenPosition;
        newImpactInfo.textColor      = new Color(UnityEngine.Random.Range(0, 1.0f),
                                                 UnityEngine.Random.Range(0, 1.0f),
                                                 UnityEngine.Random.Range(0, 1.0f));

        // TODO: Esto parece sobrar
        // Asegurarse de que es necesario
        if (newImpactInfo != null)
        {
            impactInfoList.Add(newImpactInfo);
        }

        //}
        //else
        //{
        //    rapidFireImpactInfo.damageValue += damageReceived;
        //    rapidFireImpactInfo.info = Int32.Parse(rapidFireImpactInfo.info) + damageReceived + "";
        //    rapidFireImpactInfo.extraInfo = extraInfo;
        //    rapidFireImpactInfo.position = point;
        //    rapidFireImpactInfo.screenPosition = screenPosition;
        //    //
        //    //rapidFireActive = true;
        //    rapidFireImpactInfo.timeAlive = 0;
        //}
    }
Example #20
0
    private void SendGrabImpact(GameObject obj, ImpactInfo impactInfo)
    {
        ImpactGrab grabLogic = obj.GetComponent <ImpactGrab>();

        if (null != grabLogic)
        {
            if (!grabLogic.IsAcitve)
            {
                StopImpactExcept(obj, ImpactType.Grab);
                grabLogic.StartImpact(impactInfo);
            }
        }
    }
Example #21
0
    private void SendHitFlyImpact(GameObject obj, ImpactInfo impactInfo)
    {
        ImpactMicroGHitFly mircoGHitFly = obj.GetComponent <ImpactMicroGHitFly>();
        ImpactHitFly       hitFlyLogic  = obj.GetComponent <ImpactHitFly>();

        if (null != mircoGHitFly && mircoGHitFly.IsAcitve)
        {
            if (ImpactType.HitFly != mircoGHitFly.GetImpactType())
            {
                mircoGHitFly.StopImpact();
                if (null != hitFlyLogic)
                {
                    hitFlyLogic.StartImpact(impactInfo);
                    return;
                }
            }
            else
            {
                mircoGHitFly.OnHitInFly();
            }
            return;
        }
        ImpactGrab grabLogic = obj.GetComponent <ImpactGrab>();

        if (null != grabLogic && grabLogic.IsAcitve)
        {
            return;
        }
        ImpactKnockDown knockDownLogic = obj.GetComponent <ImpactKnockDown>();

        if (null != knockDownLogic && knockDownLogic.IsAcitve)
        {
            knockDownLogic.StopImpact();
        }
        ImpactStiffness stiffnessLogic = obj.GetComponent <ImpactStiffness>();

        if (null != stiffnessLogic && stiffnessLogic.IsAcitve)
        {
            stiffnessLogic.StopImpact();
        }
        if (null != hitFlyLogic)
        {
            /*if (hitFlyLogic.IsAcitve) {
             * hitFlyLogic.OnHitInFly();
             * return;
             * }*/
            hitFlyLogic.StopImpact();
            hitFlyLogic.StartImpact(impactInfo);
        }
    }
Example #22
0
 public ActionResult Edit([Bind(Include = "Impactid,TicketId,TeamId,FaultId,TroubleshooterId,TicketRaisedDate,TicketClosingDate")] ImpactInfo impactInfo)
 {
     if (ModelState.IsValid)
     {
         db.Entry(impactInfo).State = EntityState.Modified;
         db.SaveChanges();
         return(RedirectToAction("Index"));
     }
     ViewBag.FaultId          = new SelectList(db.Faults, "FaultId", "FaultSeverity", impactInfo.FaultId);
     ViewBag.TeamId           = new SelectList(db.Teams, "TeamId", "TeamName", impactInfo.TeamId);
     ViewBag.TicketId         = new SelectList(db.TicketStatus, "TicketStausId", "TicketStatus", impactInfo.TicketId);
     ViewBag.TroubleshooterId = new SelectList(db.Troubleshooters, "TroubleshooterId", "TroubleshooterName", impactInfo.TroubleshooterId);
     return(View(impactInfo));
 }
Example #23
0
        // GET: ImpactInfoes/Details/5
        public ActionResult Details(int?id)
        {
            if (id == null)
            {
                return(new HttpStatusCodeResult(HttpStatusCode.BadRequest));
            }
            ImpactInfo impactInfo = db.ImpactInfoes.Find(id);

            if (impactInfo == null)
            {
                return(HttpNotFound());
            }
            return(View(impactInfo));
        }
Example #24
0
        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);
            }
            CharacterInfo sender = obj.SceneContext.GetCharacterInfoById(senderId);

            if (sender == null)
            {
                return(hpDamage);
            }
            CombatStatisticInfo combat_info = sender.GetCombatStatisticInfo();

            if (combat_info == null)
            {
                return(hpDamage);
            }
            if (sender.TalentManager == null)
            {
                return(hpDamage);
            }
            KillAddDamage kill_attr = sender.TalentManager.GetTalentAttribute(AttributeId.kKillAddDamage) as KillAddDamage;

            if (kill_attr == null || !kill_attr.IsActive)
            {
                return(hpDamage);
            }
            //LogSystem.Error("-----KillAddDamange: trigger hit {0} add damage hit {1}", kill_attr.KillHitCountId, combat_info.LastHitCountId);
            if (kill_attr.IsDamageHit(combat_info.LastHitCountId))
            {
                hpDamage += kill_attr.DamageAdd;
                //LogSystem.Error("-----KillAddDamange: add damage {0}!", kill_attr.DamageAdd);
            }
            else if (!kill_attr.IsTriggerHit(combat_info.LastHitCountId))
            {
                //LogSystem.Error("-----KillAddDamange: stopped! 1");
                kill_attr.Refresh();
                ImpactInfo impactInfo = obj.GetSkillStateInfo().GetImpactInfoById(impactId);
                if (impactInfo != null)
                {
                    impactInfo.m_IsActivated = false;
                }
            }
            return(hpDamage);
        }
        public override void Tick(CharacterInfo obj, int impactId)
        {
            ImpactInfo impactInfo = obj.GetSkillStateInfo().GetImpactInfoById(impactId);

            if (null != impactInfo)
            {
                if (impactInfo.m_IsActivated)
                {
                    if (obj.Hp <= 0)
                    {
                        obj.SetHp(Operate_Type.OT_Absolute, 1);
                    }
                }
            }
        }
Example #26
0
        public ImpactInfoWrapper(ImpactInfo impactInfo)
        {
            impactInfo.Validate("impactInfo");

            this.ImpactAction = impactInfo.ImpactAction;

            this.ImpactedResources = impactInfo.ImpactedResources != null
                ? impactInfo.ImpactedResources.Deserialize()
                : new AffectedResourceImpact();

            if (this.ImpactedResources.ListOfImpactTypes == null)
            {
                this.ImpactedResources.ListOfImpactTypes = new List <ImpactTypeEnum>();
            }
        }
Example #27
0
        public override void Tick(CharacterInfo character, int impactId)
        {
            ImpactInfo impactInfo = character.GetSkillStateInfo().GetImpactInfoById(impactId);

            if (null != impactInfo)
            {
                if (impactInfo.m_IsActivated)
                {
                    if (TimeUtility.GetServerMilliseconds() > impactInfo.m_StartTime + impactInfo.m_ImpactDuration)
                    {
                        impactInfo.m_IsActivated = false;
                    }
                }
            }
        }
Example #28
0
    private void SendThunderStrokeImpact(GameObject obj, ImpactInfo impactInfo)
    {
        ImpactGrab grabLogic = obj.GetComponent <ImpactGrab>();

        if (null != grabLogic && grabLogic.IsAcitve)
        {
            return;
        }
        ImpactThunderStroke thunderStrokeLogic = obj.GetComponent <ImpactThunderStroke>();

        if (null != thunderStrokeLogic)
        {
            thunderStrokeLogic.StartImpact(impactInfo);
        }
    }
Example #29
0
 private void TryUpdateValue(StoryInstance instance)
 {
     int unitId = m_UnitId.Value;
     int impactId = m_ImpactId.Value;
     m_HaveValue = true;
     EntityInfo entity = PluginFramework.Instance.GetEntityByUnitId(unitId);
     if (null != entity) {
         ImpactInfo impactInfo = entity.GetSkillStateInfo().FindImpactInfoById(impactId);
         if (null != impactInfo) {
             m_Value = impactInfo.Seq;
         } else {
             m_Value = 0;
         }
     }
 }
Example #30
0
 public override int RefixHpDamage(CharacterInfo obj, int impactId, int hpDamage, int senderId, ref bool isCritical, int impactOwnerId)
 {
     if (null != obj)
     {
         ImpactInfo impactInfo = obj.GetSkillStateInfo().GetImpactInfoById(impactId);
         if (null != impactInfo)
         {
             if (impactInfo.ConfigData.ExtraParams.Count > 0)
             {
                 float damageRate = float.Parse(impactInfo.ConfigData.ExtraParams[0]);
                 hpDamage = (int)(hpDamage * damageRate);
             }
         }
     }
     return(hpDamage);
 }
Example #31
0
    public static void ProcessImpactByBoxCollider(GameObject attacker, GameObject sender,
                                                  SkillImpactInfos impacts, Vector3 center, Vector3 size, int hitCount = 1)
    {
        bool isTargeted = false;

        // Find Targets
        Bounds bounds = new Bounds(center, size);

        Collider[] hitColliders = Physics.OverlapSphere(sender.transform.position,
                                                        impacts.ImpactRadius, (int)SceneLayerType.Character);
        int index = 0;

        while (index < hitColliders.Length)
        {
            if (hitColliders[index] == null || hitColliders[index].gameObject == null)
            {
                index++;
                continue;
            }

            GameObject target = hitColliders[index].gameObject;
            if (target != null)
            {
                if (bounds != null && !IsPointInBounds(sender, target, bounds))
                {
                    index++;
                    continue;
                }

                ImpactInfo curImpact = ExtractBestImpactInfo(target, impacts);
                if (curImpact != null)
                {
                    Vector3 faceDir = target.transform.position - sender.transform.position;
                    faceDir.y = 0;
                    ImpactInfo m_ImpactInfo = curImpact.Clone() as ImpactInfo;
                    m_ImpactInfo.m_Velocity = Quaternion.LookRotation(faceDir)
                                              * m_ImpactInfo.m_Velocity;
                    m_ImpactInfo.Attacker = sender;
                    ImpactSystem.Instance.SendImpact(attacker, target, m_ImpactInfo, hitCount);
                    TriggerImpl.RecordTarget(attacker, target);
                    isTargeted = true;
                }
            }
            index++;
        }
        ProcessImpactLock(attacker, impacts, isTargeted);
    }
    internal static void Execute(object msg, NetConnection conn)
    {
        Msg_RC_AddImpact message = msg as Msg_RC_AddImpact;
        if (null == message) return;
        int skillId = message.skill_id;
        int impactId = message.impact_id;
        EntityInfo target = ClientModule.Instance.SceneContext.GetEntityById(message.target_id);
        if (null == target) {
            LogSystem.Info("Receive Msg_RC_AddImpact, message.target_id={0} is not available", message.target_id);
            return;
        } else {
            LogSystem.Info("Receive Msg_RC_AddImpact, TargetId={0}, ImpactId={1}, SenderId={2}, SkillId={3}",
              message.target_id, impactId, message.sender_id, skillId);
        }
        Vector3 senderPos = Vector3.Zero;
        EntityInfo sender = ClientModule.Instance.GetEntityById(message.sender_id);
        senderPos = sender.GetMovementStateInfo().GetPosition3D();

        ImpactInfo impactInfo = new ImpactInfo(impactId);
        impactInfo.StartTime = TimeUtility.GetLocalMilliseconds();
        impactInfo.SkillId = skillId;
        impactInfo.DurationTime = message.duration;
        impactInfo.SenderPosition = senderPos;
        impactInfo.ImpactSenderId = message.sender_id;
        if (null != impactInfo.ConfigData) {
            target.GetSkillStateInfo().AddImpact(impactInfo);
            int seq = impactInfo.Seq;
            if (GfxSkillSystem.Instance.StartSkill(target.GetId(), impactInfo.ConfigData, seq)) {
            }
        }
    }