protected void SetSuccessByDeath(CombatData combatData, FightData fightData, HashSet <AgentItem> playerAgents, bool all, List <int> idsToUse)
        {
            int  success = 0;
            long maxTime = long.MinValue;

            foreach (int id in idsToUse)
            {
                NPC target = Targets.FirstOrDefault(x => x.ID == id);
                if (target == null)
                {
                    return;
                }
                DeadEvent killed = combatData.GetDeadEvents(target.AgentItem).LastOrDefault();
                if (killed != null)
                {
                    long time = killed.Time;
                    success++;
                    AbstractHealthDamageEvent lastDamageTaken = combatData.GetDamageTakenData(target.AgentItem).LastOrDefault(x => (x.HealthDamage > 0) && playerAgents.Contains(x.From.GetFinalMaster()));
                    if (lastDamageTaken != null)
                    {
                        time = Math.Min(lastDamageTaken.Time, time);
                    }
                    maxTime = Math.Max(time, maxTime);
                }
            }
            if ((all && success == idsToUse.Count) || (!all && success > 0))
            {
                fightData.SetSuccess(true, maxTime);
            }
        }
示例#2
0
    private async void OnDead(DeadEvent deadEvent)
    {
        AnimationComponent.PlayFade(AnimationComponent.DeadAnimation);
        await TimeHelper.WaitAsync(2000);

        GameObject.Destroy(gameObject);
    }
示例#3
0
 internal override void CheckSuccess(CombatData combatData, AgentData agentData, FightData fightData, IReadOnlyCollection <AgentItem> playerAgents)
 {
     base.CheckSuccess(combatData, agentData, fightData, playerAgents);
     if (!fightData.Success)
     {
         IReadOnlyList <AgentItem> prisoners = agentData.GetNPCsByID((int)ArcDPSEnums.TrashID.Prisoner2);
         var prisonerDeaths = new List <DeadEvent>();
         foreach (AgentItem prisoner in prisoners)
         {
             prisonerDeaths.AddRange(combatData.GetDeadEvents(prisoner));
         }
         if (prisonerDeaths.Count == 0)
         {
             AbstractSingleActor narella = Targets.FirstOrDefault(x => x.ID == (int)ArcDPSEnums.TargetID.Narella);
             if (narella == null)
             {
                 throw new MissingKeyActorsException("Narella not found");
             }
             DeadEvent deadEvent = combatData.GetDeadEvents(narella.AgentItem).LastOrDefault();
             if (deadEvent != null)
             {
                 fightData.SetSuccess(true, deadEvent.Time);
                 return;
             }
             SetSuccessByCombatExit(new HashSet <int>(GetSuccessCheckIds()), combatData, fightData, playerAgents);
         }
     }
 }
        internal override void CheckSuccess(CombatData combatData, AgentData agentData, FightData fightData, IReadOnlyCollection <AgentItem> playerAgents)
        {
            AbstractSingleActor mainTarget = Targets.FirstOrDefault(x => x.ID == GenericTriggerID);

            if (mainTarget == null)
            {
                throw new MissingKeyActorsException("Golem not found");
            }
            long      fightEndLogTime = fightData.FightEnd;
            bool      success         = false;
            DeadEvent deadEvt         = combatData.GetDeadEvents(mainTarget.AgentItem).LastOrDefault();

            if (deadEvt != null)
            {
                fightEndLogTime = deadEvt.Time;
                success         = true;
            }
            else
            {
                IReadOnlyList <HealthUpdateEvent> hpUpdates = combatData.GetHealthUpdateEvents(mainTarget.AgentItem);
                if (hpUpdates.Count > 0)
                {
                    AbstractHealthDamageEvent lastDamageTaken = combatData.GetDamageTakenData(mainTarget.AgentItem).LastOrDefault(x => x.HealthDamage > 0);
                    success = hpUpdates.Last().HPPercent < 2.00;
                    if (success && lastDamageTaken != null)
                    {
                        fightEndLogTime = lastDamageTaken.Time;
                    }
                }
            }
            fightData.SetSuccess(success, fightEndLogTime);
        }
示例#5
0
        public void Kill(Player murderer, MoveType moveType)
        {
            switch (moveType)
            {
            case MoveType.RidingBicycle:
            {
                DeadEvent? .Invoke(this, new DogDeadEventArgs ( DogDeadCause.Bicycle ));

                break;
            }

            case MoveType.RidingMotorcycle:
            {
                DeadEvent? .Invoke(this, new DogDeadEventArgs ( DogDeadCause.Motorcycle ));

                break;
            }

            case MoveType.DrivingCar:
            {
                DeadEvent? .Invoke(this, new DogDeadEventArgs ( DogDeadCause.Car ));

                break;
            }

            default:
            {
                throw new ArgumentOutOfRangeException(nameof(moveType));
            }
            }

            Kill( );
        }
示例#6
0
 /// <summary>
 /// Override times in a manner that the phase englobes the targets present in the phase (if possible)
 /// </summary>
 /// <param name="log"></param>
 internal void OverrideTimes(ParsedEvtcLog log)
 {
     if (Targets.Count > 0)
     {
         long end   = long.MinValue;
         long start = long.MaxValue;
         foreach (AbstractSingleActor target in Targets)
         {
             long       startTime = target.FirstAware;
             SpawnEvent spawned   = log.CombatData.GetSpawnEvents(target.AgentItem).FirstOrDefault();
             if (spawned != null)
             {
                 startTime = spawned.Time;
             }
             EnterCombatEvent enterCombat = log.CombatData.GetEnterCombatEvents(target.AgentItem).FirstOrDefault();
             if (enterCombat != null)
             {
                 startTime = enterCombat.Time;
             }
             long      deadTime = target.LastAware;
             DeadEvent died     = log.CombatData.GetDeadEvents(target.AgentItem).FirstOrDefault();
             if (died != null)
             {
                 deadTime = died.Time;
             }
             start = Math.Min(start, startTime);
             end   = Math.Max(end, deadTime);
         }
         Start = Math.Max(Math.Max(Start, start), 0);
         End   = Math.Min(Math.Min(End, end), log.FightData.FightEnd);
     }
     DurationInM  = (End - Start) / 60000;
     DurationInMS = (End - Start);
     DurationInS  = (End - Start) / 1000;
 }
示例#7
0
 protected override bool InitCombatReplay(ParsedEvtcLog log)
 {
     if (base.InitCombatReplay(log))
     {
         // Trim
         DespawnEvent despawnCheck = log.CombatData.GetDespawnEvents(AgentItem).LastOrDefault();
         SpawnEvent   spawnCheck   = log.CombatData.GetSpawnEvents(AgentItem).LastOrDefault();
         DeadEvent    deathCheck   = log.CombatData.GetDeadEvents(AgentItem).LastOrDefault();
         AliveEvent   aliveCheck   = log.CombatData.GetAliveEvents(AgentItem).LastOrDefault();
         if (AgentItem.Type != AgentItem.AgentType.EnemyPlayer && deathCheck != null && (aliveCheck == null || aliveCheck.Time < deathCheck.Time))
         {
             CombatReplay.Trim(AgentItem.FirstAware, deathCheck.Time);
         }
         else if (despawnCheck != null && (spawnCheck == null || spawnCheck.Time < despawnCheck.Time))
         {
             CombatReplay.Trim(AgentItem.FirstAware, despawnCheck.Time);
         }
         else
         {
             CombatReplay.Trim(AgentItem.FirstAware, AgentItem.LastAware);
         }
         return(true);
     }
     return(false);
 }
示例#8
0
        internal IReadOnlyList <IReadOnlyList <Segment> > GetLifeSpanSegments(ParsedEvtcLog log)
        {
            var  minionsSegments = new List <List <Segment> >();
            long fightDur        = log.FightData.FightEnd;

            foreach (NPC minion in _minionList)
            {
                var  minionSegments = new List <Segment>();
                long start          = Math.Max(minion.FirstAware, 0);
                // Find end
                long      end  = minion.LastAware;
                DeadEvent dead = log.CombatData.GetDeadEvents(minion.AgentItem).LastOrDefault();
                if (dead != null)
                {
                    end = Math.Min(dead.Time, end);
                }
                DespawnEvent despawn = log.CombatData.GetDespawnEvents(minion.AgentItem).LastOrDefault();
                if (despawn != null)
                {
                    end = Math.Min(despawn.Time, end);
                }
                //
                end = Math.Min(end, fightDur);
                minionSegments.Add(new Segment(0, start, 0));
                minionSegments.Add(new Segment(start, end, 1));
                minionSegments.Add(new Segment(end, fightDur, 0));
                minionsSegments.Add(minionSegments);
            }
            return(minionsSegments);
        }
示例#9
0
    protected override void UpdateAfterReceiveAttack()
    {
        if (m_cStatus.m_nHp <= 0)
        {
            m_cStatus.m_nHp = 0;
            isDead          = true;
            DeadEvent.Invoke();
            if (BattleSceneManager.getInstance().CharacterCount == 3)
            {
                BattleSceneManager.getInstance().mainCharacter = BattleSceneManager.getInstance().Character[BattleSceneManager.getInstance().CharacterSecondIndex];
                BattleSceneManager.getInstance().camara3.GetComponent <OrbitCameraC>().target = BattleSceneManager.getInstance().Character[BattleSceneManager.getInstance().CharacterSecondIndex].transform;
            }
            if (BattleSceneManager.getInstance().CharacterCount == 3)
            {
                BattleSceneManager.getInstance().mainCharacter = BattleSceneManager.getInstance().Character[BattleSceneManager.getInstance().CharacterThirdIndex];
                BattleSceneManager.getInstance().camara3.GetComponent <OrbitCameraC>().target = BattleSceneManager.getInstance().Character[BattleSceneManager.getInstance().CharacterThirdIndex].transform;
            }
            if (BattleSceneManager.getInstance().CharacterCount == 1)
            {
                Debug.Log("종료");
            }
            BattleSceneManager.getInstance().CharacterCount--;

            Destroy(this.gameObject);
        }
        UIManager.instance.UpdatePlayerUI(this);
    }
示例#10
0
 public void AddDamage(float damage)
 {
     HP -= damage;
     ChangedEvent?.Invoke(this);
     if (HP < 0)
     {
         DeadEvent?.Invoke(this);
     }
 }
示例#11
0
 void Start()
 {
     _anim             = GetComponent <Animator>();
     deadEvent         = new DeadEvent();
     deadEvent.onDead += new DeadEvent.deadHandler(onDead);
     speedEvent        = new SpeedEvent();
     booLV             = bigBooLv = 0;
     alive             = true;
 }
示例#12
0
    private void OnDeviceDead(DeadEvent deadEvent)
    {
        if (!m_SpacecraftDeadProperty.IsDead())
        {
            return;
        }

        ///SendEvent(ComponentEventName.ShowDeviceDeadFX, null);
        SendEvent(ComponentEventName.PlayDeviceDeadAnimation, null);
    }
示例#13
0
        public async Task <BaseResponse> MqClientSendDead()
        {
            DeadEvent nomalEvent = new DeadEvent {
                Content = " hello "
            };

            _rabbitMqClient.SendMessageDead(nomalEvent, DateTime.Now.AddSeconds(15));

            return(BaseResponse.Ok());
        }
示例#14
0
    /// <summary> 体力を設定します。 </summary>
    /// <param name="health"> 設定する体力 </param>
    public void SetHealth(int health)
    {
        this.health = health;

        // HPがなくなったら
        if (health <= 0)
        {
            // 死亡した時のイベントを通知する
            DeadEvent.Invoke();
        }
    }
示例#15
0
 internal void OnPlayerDead(DeadEvent ev)
 {
     if (ev.Killer.IsSpy())
     {
         if (plugin.ChangeBody)
         {
             ev.Killer.ChangeBody(ev.Target.Role, false, ev.Target.Position, ev.Target.Rotation, ev.HitInfo.GetDamageType());
         }
     }
     else if (ev.Target.IsSpy())
     {
         KillSpy(ev.Target);
     }
 }
示例#16
0
    protected override void Die()
    {
        base.Die();

        DeadEvent?.Invoke();

        // Activate the arms again
        foreach (Transform arm in arms)
        {
            arm.gameObject.SetActive(true);
        }

        GetHead().enabled     = false;
        GetMovement().enabled = false;
    }
        internal List <PhaseData> GetBreakbarPhases(ParsedEvtcLog log, bool requirePhases)
        {
            if (!requirePhases)
            {
                return(new List <PhaseData>());
            }
            var breakbarPhases = new List <PhaseData>();

            foreach (NPC target in Targets)
            {
                int i = 0;
                IReadOnlyList <BreakbarStateEvent>   breakbarStateEvents   = log.CombatData.GetBreakbarStateEvents(target.AgentItem);
                IReadOnlyList <BreakbarPercentEvent> breakbarPercentEvents = log.CombatData.GetBreakbarPercentEvents(target.AgentItem);
                var breakbarActiveEvents    = breakbarStateEvents.Where(x => x.State == ArcDPSEnums.BreakbarState.Active).ToList();
                var breakbarNotActiveEvents = breakbarStateEvents.Where(x => x.State != ArcDPSEnums.BreakbarState.Active).ToList();
                foreach (BreakbarStateEvent active in breakbarActiveEvents)
                {
                    long start = Math.Max(active.Time - 2000, 0);
                    BreakbarStateEvent notActive = breakbarNotActiveEvents.FirstOrDefault(x => x.Time >= active.Time);
                    long end;
                    if (notActive == null)
                    {
                        DeadEvent deadEvent = log.CombatData.GetDeadEvents(target.AgentItem).LastOrDefault();
                        if (deadEvent == null)
                        {
                            end = Math.Min(target.LastAware, log.FightData.FightEnd);
                        }
                        else
                        {
                            end = Math.Min(deadEvent.Time, log.FightData.FightEnd);
                        }
                    }
                    else
                    {
                        end = Math.Min(notActive.Time, log.FightData.FightEnd);
                    }
                    var phase = new PhaseData(start, end, target.Character + " Breakbar " + ++i)
                    {
                        BreakbarPhase = true,
                        CanBeSubPhase = false
                    };
                    phase.AddTarget(target);
                    breakbarPhases.Add(phase);
                }
            }
            return(breakbarPhases);
        }
示例#18
0
 public void Dead()
 {
     anim.applyRootMotion = true;
     State = PlayerState.dead;
     characterStatus.isBehindCover = false;
     anim.SetBool("Stels", characterStatus.isBehindCover);
     characterStels.CapsulToStelsState(characterStatus.isBehindCover);
     anim.SetBool("Dead", true);
     anim.SetTrigger("DeadTrigger");
     Invoke("NoSuit", 3f);
     Invoke("ReturnActive", 3f);
     if (DeadEvent != null)
     {
         DeadEvent.Invoke();
     }
     DeadEvent = null;
 }
示例#19
0
        public void TakeDamage(float damage)
        {
            if (_personAnimator.IsDead == false && _personAnimator.IsJumping == false)
            {
                HealthParameter.Value -= damage;
                HitEvent.Invoke(damage);
                if (HealthParameter.Value <= 0)
                {
                    _personAnimator.DeadAnimation();
                    Destroy(GetComponent <Collider2D>());
                    if (DeadEvent != null)
                    {
                        DeadEvent.Invoke(this, new EventArgs());
                    }

                    Destroy(gameObject, 5f);
                }
            }
        }
        public static void SetPhasePerTarget(NPC target, List <PhaseData> phases, ParsedLog log)
        {
            long             fightDuration = log.FightData.FightEnd;
            EnterCombatEvent phaseStart    = log.CombatData.GetEnterCombatEvents(target.AgentItem).LastOrDefault();

            if (phaseStart != null)
            {
                long      start    = phaseStart.Time;
                DeadEvent phaseEnd = log.CombatData.GetDeadEvents(target.AgentItem).LastOrDefault();
                long      end      = fightDuration;
                if (phaseEnd != null)
                {
                    end = phaseEnd.Time;
                }
                var phase = new PhaseData(start, Math.Min(end, log.FightData.FightEnd));
                phase.Targets.Add(target);
                phases.Add(phase);
            }
        }
示例#21
0
        protected void TrimCombatReplay(ParsedLog log)
        {
            DespawnEvent despawnCheck = log.CombatData.GetDespawnEvents(AgentItem).LastOrDefault();
            SpawnEvent   spawnCheck   = log.CombatData.GetSpawnEvents(AgentItem).LastOrDefault();
            DeadEvent    deathCheck   = log.CombatData.GetDeadEvents(AgentItem).LastOrDefault();

            if (deathCheck != null)
            {
                CombatReplay.Trim(log.FightData.ToFightSpace(AgentItem.FirstAwareLogTime), deathCheck.Time);
            }
            else if (despawnCheck != null && (spawnCheck == null || spawnCheck.Time < despawnCheck.Time))
            {
                CombatReplay.Trim(log.FightData.ToFightSpace(AgentItem.FirstAwareLogTime), despawnCheck.Time);
            }
            else
            {
                CombatReplay.Trim(log.FightData.ToFightSpace(AgentItem.FirstAwareLogTime), log.FightData.ToFightSpace(AgentItem.LastAwareLogTime));
            }
        }
示例#22
0
        private void OnUnitDead(object sender, DateTime dateTime)
        {
            BattleBase one = sender as BattleBase;

            if (one != null)
            {
                UnitDeadEvent?.Invoke(this, one);
                lock (_mutex)
                {
                    if (_battleUnits.Contains(one))
                    {
                        _battleUnits.Remove(one);
                        one.DeadEvent -= OnUnitDead;
                    }
                }
                if (!IsAlive())
                {
                    DeadEvent?.Invoke(this, dateTime);
                }
            }
        }
示例#23
0
        protected static void TrimCombatReplay(ParsedEvtcLog log, CombatReplay replay, AgentItem agentItem)
        {
            // Trim
            DespawnEvent despawnCheck = log.CombatData.GetDespawnEvents(agentItem).LastOrDefault();
            SpawnEvent   spawnCheck   = log.CombatData.GetSpawnEvents(agentItem).LastOrDefault();
            DeadEvent    deathCheck   = log.CombatData.GetDeadEvents(agentItem).LastOrDefault();
            AliveEvent   aliveCheck   = log.CombatData.GetAliveEvents(agentItem).LastOrDefault();

            if (deathCheck != null && (aliveCheck == null || aliveCheck.Time < deathCheck.Time))
            {
                replay.Trim(agentItem.FirstAware, deathCheck.Time);
            }
            else if (despawnCheck != null && (spawnCheck == null || spawnCheck.Time < despawnCheck.Time))
            {
                replay.Trim(agentItem.FirstAware, despawnCheck.Time);
            }
            else
            {
                replay.Trim(agentItem.FirstAware, agentItem.LastAware);
            }
        }
示例#24
0
 /// <summary>
 /// Override times in a manner that the phase englobes the targets present in the phase (if possible)
 /// </summary>
 /// <param name="log"></param>
 public void OverrideTimes(ParsedLog log)
 {
     if (Targets.Count > 0)
     {
         Start = Math.Max(Start, log.FightData.ToFightSpace(Targets.Min(x => x.FirstAwareLogTime)));
         long end = long.MinValue;
         foreach (Target target in Targets)
         {
             long deadTime = log.FightData.ToFightSpace(target.LastAwareLogTime);
             DeadEvent died = log.CombatData.GetDeadEvents(target.AgentItem).FirstOrDefault();
             if (died != null)
             {
                 deadTime = died.Time;
             }
             end = Math.Max(end, deadTime);
         }
         End = Math.Min(Math.Min(End, end), log.FightData.FightDuration);
     }
     DurationInM = (End - Start) / 60000;
     DurationInMS = (End - Start);
     DurationInS = (End - Start) / 1000;
 }
示例#25
0
    private void ShowRelivePanel(DeadEvent deadEvent)
    {
        //if (m_SpacecraftDeadProperty.IsMain())
        //{
        //    string killerName = "error_name";
        //    if (deadEvent.KillerNpctemplateID > 0)
        //    {
        //        killerName = TableUtil.GetNpcName(deadEvent.KillerNpctemplateID);
        //    }
        //    else
        //    {
        //        killerName = deadEvent.KillerPlayerName;
        //    }

        //    bool isShowHallRelive = false;
        //    foreach (var item in deadEvent.ReliveOptions)
        //    {
        //        if (item == (short)PlayerReliveType.relive_hall)
        //        {
        //            isShowHallRelive = true;
        //            break;
        //        }
        //    }

        //    GameFacade.Instance.SendNotification(NotificationName.MainHeroDeath, new ShowRelviePanelNotify()
        //    {
        //        IsShowHallRelive = isShowHallRelive,
        //        Countdown = deadEvent.CD,
        //        KillerName = killerName,
        //    });
        //}

        SpacecraftEntity mainPlayer = m_GameplayProxy.GetMainPlayer();

        if (mainPlayer.GetTarget() == m_GameplayProxy.GetEntityById <SpacecraftEntity>(m_SpacecraftDeadProperty.GetUId()))
        {
            mainPlayer.SetTarget(null, null);
        }
    }
示例#26
0
        public static void SetPhasePerTarget(NPC target, List <PhaseData> phases, ParsedEvtcLog log)
        {
            long             fightDuration = log.FightData.FightEnd;
            EnterCombatEvent phaseStart    = log.CombatData.GetEnterCombatEvents(target.AgentItem).LastOrDefault();

            if (phaseStart != null)
            {
                long      start    = phaseStart.Time;
                DeadEvent phaseEnd = log.CombatData.GetDeadEvents(target.AgentItem).LastOrDefault();
                long      end      = fightDuration;
                if (phaseEnd != null)
                {
                    end = phaseEnd.Time;
                }
                var phase = new PhaseData(start, Math.Min(end, log.FightData.FightEnd));
                phase.Targets.Add(target);
                switch (target.ID)
                {
                case (int)ArcDPSEnums.TargetID.Narella:
                    phase.Name = "Narella";
                    break;

                case (int)ArcDPSEnums.TargetID.Berg:
                    phase.Name = "Berg";
                    break;

                case (int)ArcDPSEnums.TargetID.Zane:
                    phase.Name = "Zane";
                    break;

                default:
                    throw new InvalidOperationException("Unknown target in Bandit Trio");
                }
                phases.Add(phase);
            }
        }
示例#27
0
 private void Start()
 {
     deadEvent = new DeadEvent();
     curHp     = MaxHP;
 }
        internal override List <PhaseData> GetPhases(ParsedEvtcLog log, bool requirePhases)
        {
            List <PhaseData>    phases  = GetInitialPhase(log);
            AbstractSingleActor fraenir = Targets.FirstOrDefault(x => x.ID == (int)ArcDPSEnums.TargetID.FraenirOfJormag);

            if (fraenir == null)
            {
                throw new MissingKeyActorsException("Fraenir of Jormag not found");
            }
            phases[0].AddTarget(fraenir);
            AbstractSingleActor icebrood = Targets.FirstOrDefault(x => x.ID == (int)ArcDPSEnums.TargetID.IcebroodConstructFraenir);

            if (icebrood != null)
            {
                phases[0].AddTarget(icebrood);
            }
            if (!requirePhases)
            {
                return(phases);
            }
            AbstractBuffEvent invulApplyFraenir = log.CombatData.GetBuffData(762).Where(x => x.To == fraenir.AgentItem && x is BuffApplyEvent).FirstOrDefault();

            if (invulApplyFraenir != null)
            {
                // split happened
                phases.Add(new PhaseData(0, invulApplyFraenir.Time, "Fraenir 1"));
                if (icebrood != null)
                {
                    // icebrood enters combat
                    EnterCombatEvent enterCombatIce = log.CombatData.GetEnterCombatEvents(icebrood.AgentItem).LastOrDefault();
                    if (enterCombatIce != null)
                    {
                        // icebrood phasing
                        AbstractBuffEvent invulApplyIce  = log.CombatData.GetBuffData(757).Where(x => x.To == icebrood.AgentItem && x is BuffApplyEvent).FirstOrDefault();
                        AbstractBuffEvent invulRemoveIce = log.CombatData.GetBuffData(757).Where(x => x.To == icebrood.AgentItem && x is BuffRemoveAllEvent).FirstOrDefault();
                        long icebroodStart = enterCombatIce.Time;
                        long icebroodEnd   = log.FightData.FightEnd;
                        if (invulApplyIce != null && invulRemoveIce != null)
                        {
                            long icebrood2Start = invulRemoveIce.Time;
                            phases.Add(new PhaseData(icebroodStart + 1, invulApplyIce.Time, "Icebrood 1"));
                            AbstractBuffEvent invulRemoveFraenir = log.CombatData.GetBuffData(762).Where(x => x.To == fraenir.AgentItem && x is BuffRemoveAllEvent).FirstOrDefault();
                            if (invulRemoveFraenir != null)
                            {
                                // fraenir came back
                                DeadEvent deadIce = log.CombatData.GetDeadEvents(icebrood.AgentItem).LastOrDefault();
                                if (deadIce != null)
                                {
                                    icebroodEnd = deadIce.Time;
                                }
                                else
                                {
                                    icebroodEnd = invulRemoveFraenir.Time - 1;
                                }
                                phases.Add(new PhaseData(invulRemoveFraenir.Time, log.FightData.FightEnd, "Fraenir 2"));
                            }
                            phases.Add(new PhaseData(icebrood2Start, icebroodEnd, "Icebrood 2"));
                        }
                        phases.Add(new PhaseData(icebroodStart, icebroodEnd, "Icebrood"));
                    }
                }
            }
            phases.Sort((x, y) => x.Start.CompareTo(y.Start));
            for (int i = 1; i < phases.Count; i++)
            {
                PhaseData phase = phases[i];
                if (i == 1 || i == 5)
                {
                    phase.AddTarget(fraenir);
                }
                else
                {
                    phase.AddTarget(icebrood);
                }
            }
            return(phases);
        }
示例#29
0
    //private void OnCollisionEnter(Collision obj)
    //{
    //    OnSpacecraftSlidingEnd();
    //}

    //private void OnCollisionStay(Collision obj)
    //{
    //}

    //private void OnCollisionExit(Collision obj)
    //{
    //}

    //private void OnRelive(IComponentEvent obj)
    //{
    //    m_DeadFxState = DeadState.None;

    //    RealTimerUtil.Instance.Unregister(m_ShowDeadFxTimerId);
    //}

    private void OnDead(IComponentEvent obj)
    {
        DeadEvent deadEvent = obj as DeadEvent;

        if (!m_SpacecraftDeadProperty.IsDead())
        {
            return;
        }

        m_DropInfoList = deadEvent.DropList;

        /// TODO.宝藏特殊处理
        /// 服务器创建后立马死亡
        //if (m_SpacecraftDeadProperty.IsNotHaveAva())
        //{
        //	if (m_DropInfoList != null && m_DropInfoList.Count > 0)
        //	{
        //		DropItemManager.Instance.SetDropItemInfoByDeath(m_SpacecraftDeadProperty.UId(), m_DropInfoList);
        //	}
        //	return;
        //}

        /// npc死亡
        if (m_SpacecraftDeadProperty.GetHeroType() != KHeroType.htPlayer)
        {
            Npc npcVO = m_SpacecraftDeadProperty.GetNPCTemplateVO();
            if (npcVO.SoundDead > 0)
            {
                SendEvent(ComponentEventName.PlaySound, new PlaySound()
                {
                    SoundID = (int)npcVO.SoundDead
                });
            }
            /// 导演死检查音乐盒子
            if (m_SpacecraftDeadProperty.GetHeroType() == KHeroType.htPlotMonster)
            {
                MSAIBossProxy msab = GameFacade.Instance.RetrieveProxy(ProxyName.MSAIBossProxy) as MSAIBossProxy;
                msab.DestroySoundBox(m_SpacecraftDeadProperty.UId());
            }
            /// TODO.干扰器死亡
            else if (m_SpacecraftDeadProperty.GetHeroType() == KHeroType.htDisturbor)
            {
                /// 自己的停掉
                SpacecraftEntity ownerEntity = m_SpacecraftDeadProperty.GetOwner();
                ownerEntity.SendEvent(ComponentEventName.PlaySound, new PlaySound()
                {
                    SoundID   = (int)WwiseMusic.Treasure_Disturbor_Sound5,
                    Transform = ownerEntity.GetSkinTransform()
                });

                TreasureHuntProxy treasure = GameFacade.Instance.RetrieveProxy(ProxyName.TreasureHuntProxy) as TreasureHuntProxy;
                treasure.DisturborSoundEffect(m_SpacecraftDeadProperty.GetOwner().m_EntityFatherOwnerID);
            }
        }

        m_SpacecraftDeadProperty.SetTarget(null, null);

        #region 待服务器在new_hero协议中添加复活状态逻辑后删除
        if (m_SpacecraftDeadProperty.IsMain())
        {
            m_GameplayProxy = GameFacade.Instance.RetrieveProxy(ProxyName.GameplayProxy) as GameplayProxy;

            if (m_SpacecraftDeadProperty.IsMain())
            {
                CfgEternityProxy eternityProxy = GameFacade.Instance.RetrieveProxy(ProxyName.CfgEternityProxy) as CfgEternityProxy;
                m_GameplayProxy.SetDeadMapID(eternityProxy.GetCurrentMapData().GamingmapId);
            }
        }
        #endregion

        ShowRelivePanel(deadEvent);

        SpacecraftPresentation presentation = m_SpacecraftDeadProperty.GetPresentation();
        if (presentation != null)
        {
            if (presentation.SpacecraftDeadType != SpacecraftPresentation.SpacecraftType.Warship)
            {
                OnDeviceDead(deadEvent);
            }
        }
    }
示例#30
0
        public void Kill(Weather weather)
        {
            DeadEvent? .Invoke(this, new DogDeadEventArgs ( DogDeadCause.BadWeather ));

            Kill( );
        }