public override void OnActorDeath(ref GameDeadEventParam prm)
 {
     this.CachedSource   = prm.src;
     this.CachedAttacker = prm.orignalAtker;
     if (!this.bIsTimeout && !this.bCachedResult && this.CheckTimeout())
     {
         this.bIsTimeout         = true;
         this.KillCntWhenTimeout = base.killCnt;
         this.TriggerChangedEvent();
     }
     base.OnActorDeath(ref prm);
 }
예제 #2
0
 private void onActorDead(ref GameDeadEventParam prm)
 {
     if (prm.logicAtker != this.sourceActor || prm.bImmediateRevive)
     {
         return;
     }
     if (base.CheckTargetSubType(prm.src, this.localParams[0], this.localParams[1]))
     {
         this.bTrigger = true;
         this.rootEvent.SetTriggerActor(prm.src);
     }
 }
        private void onActorDead(ref GameDeadEventParam prm)
        {
            PoolObjHandle <ActorRoot> src = prm.src;
            int num = this.FindActor(src);

            if (num != -1)
            {
                this.SetHudText(string.Empty, src);
                Singleton <CTimerManager> .GetInstance().RemoveTimer(this.m_actorTimerMap.get_Item(num).Id);

                this.m_actorTimerMap.RemoveAt(num);
            }
        }
예제 #4
0
        private void onActorDead(ref GameDeadEventParam prm)
        {
            PoolObjHandle <ActorRoot> src = prm.src;
            int index = this.FindActor(src);

            if (index != -1)
            {
                this.SetHudText(string.Empty, src);
                ActorRootInfo info = this.m_actorTimerMap[index];
                Singleton <CTimerManager> .GetInstance().RemoveTimer(info.Id);

                this.m_actorTimerMap.RemoveAt(index);
            }
        }
예제 #5
0
        private void onActorDead(ref GameDeadEventParam prm)
        {
            int battleOrder = prm.src.handle.ObjLinker.BattleOrder;

            if ((battleOrder != 0) && this._orderDepends.ContainsKey(battleOrder))
            {
                List <PoolObjHandle <ActorRoot> > list = this._orderDepends[battleOrder];
                for (int i = 0; i < list.Count; i++)
                {
                    PoolObjHandle <ActorRoot> handle = list[i];
                    if (handle != 0)
                    {
                        int[][] numArray = new int[][] { handle.handle.ObjLinker.BattleOrderDepend };
                        if (numArray == null)
                        {
                            handle.handle.AttackOrderReady = true;
                        }
                        else
                        {
                            for (int j = 0; j < numArray.Length; j++)
                            {
                                int[] numArray2 = numArray[j];
                                if (numArray2 != null)
                                {
                                    bool flag = false;
                                    for (int k = 0; k < numArray2.Length; k++)
                                    {
                                        int key = numArray2[k];
                                        if ((key != 0) && this._orderOwner.ContainsKey(key))
                                        {
                                            PoolObjHandle <ActorRoot> handle2 = this._orderOwner[key];
                                            if (handle2.handle.ActorControl.IsDeadState)
                                            {
                                                flag = true;
                                                break;
                                            }
                                        }
                                    }
                                    if (flag || (numArray2.Length == 0))
                                    {
                                        handle.handle.AttackOrderReady = true;
                                        break;
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
예제 #6
0
        public virtual void OnActorDeath(ref GameDeadEventParam prm)
        {
            int num = this.Conditions.get_Count() - 1;

            while (num >= 0 && num < this.Conditions.get_Count())
            {
                IStarCondition starCondition = this.Conditions.get_Item(num);
                if (starCondition != null)
                {
                    starCondition.OnActorDeath(ref prm);
                }
                num--;
            }
        }
예제 #7
0
        private void onActorDead(ref GameDeadEventParam prm)
        {
            int length = this.TriggerMatches.Length;
            GameDeadEventParam param = prm;

            for (int i = 0; i < length; i++)
            {
                CTriggerMatch match = this.TriggerMatches[i];
                if ((match != null) && this.FilterMatch(EGlobalGameEvent.ActorDead, match, prm.src, prm.orignalAtker, param, i))
                {
                    this.DoTriggering(match, prm.src, prm.orignalAtker, param);
                }
            }
        }
예제 #8
0
        private void onActorDead(ref GameDeadEventParam prm)
        {
            SFilterMatchParam sFilterMatchParam = default(SFilterMatchParam);
            int num = this.TriggerMatches.Length;

            for (int i = 0; i < num; i++)
            {
                CTriggerMatch cTriggerMatch = this.TriggerMatches[i];
                if (cTriggerMatch != null && this.FilterMatch(EGlobalGameEvent.ActorDead, cTriggerMatch, prm.src, prm.orignalAtker, ref sFilterMatchParam, i))
                {
                    this.DoTriggering(cTriggerMatch, prm.src, prm.orignalAtker);
                }
            }
        }
예제 #9
0
 public override void OnActorDeath(ref GameDeadEventParam prm)
 {
     if ((((prm.src != 0) && (prm.src.handle.TheActorMeta.ActorType == this.targetType)) && ((this.targetID == 0) || (this.targetID == prm.src.handle.TheActorMeta.ConfigId))) && this.ShouldCare(prm.src.handle))
     {
         this.DealthCount++;
         bool flag = SmartCompare.Compare <int>(this.DealthCount, this.targetCount, this.operation);
         if (this.bCheckResults != flag)
         {
             this.bCheckResults  = flag;
             this.CachedSource   = prm.src;
             this.CachedAttacker = prm.orignalAtker;
             this.TriggerChangedEvent();
         }
     }
 }
예제 #10
0
 private void OnActorDeath(ref GameDeadEventParam prm)
 {
     for (int i = this.StarEvaluations.Count - 1; (i >= 0) && (i < this.StarEvaluations.Count); i--)
     {
         IStarEvaluation evaluation = this.StarEvaluations[i];
         if (evaluation != null)
         {
             evaluation.OnActorDeath(ref prm);
         }
     }
     if (this.FailureEvaluation != null)
     {
         this.FailureEvaluation.OnActorDeath(ref prm);
     }
 }
        private void OnActorDead(ref GameDeadEventParam prm)
        {
            PoolObjHandle <ActorRoot> src = prm.src;
            PoolObjHandle <ActorRoot> ptr = prm.orignalAtker;

            if (!src || !ptr || prm.bImmediateRevive || prm.bSuicide)
            {
                return;
            }
            if (this.bSoulGrow)
            {
                if (src.handle.TheActorMeta.ActorType == ActorTypeDef.Actor_Type_EYE)
                {
                    EyeWrapper eyeWrapper = src.handle.ActorControl as EyeWrapper;
                    if (eyeWrapper == null || eyeWrapper.bLifeTimeOver)
                    {
                        return;
                    }
                }
                if (src.handle.TheActorMeta.ActorType == ActorTypeDef.Actor_Type_Hero)
                {
                    if (ptr.handle.TheActorMeta.ActorType == ActorTypeDef.Actor_Type_Call)
                    {
                        CallActorWrapper callActorWrapper = ptr.handle.ActorControl as CallActorWrapper;
                        if (callActorWrapper != null)
                        {
                            ptr = callActorWrapper.GetHostActor();
                        }
                    }
                    else if (ptr.handle.TheActorMeta.ActorType != ActorTypeDef.Actor_Type_Hero && src.handle.ActorControl.IsKilledByHero())
                    {
                        ptr = src.handle.ActorControl.LastHeroAtker;
                    }
                }
                if (ptr)
                {
                    this.OnActorDeadIncomeSoul(ref src, ref ptr);
                    if (ptr.handle.TheActorMeta.ActorType == ActorTypeDef.Actor_Type_Hero || src.handle.TheActorMeta.ActorType != ActorTypeDef.Actor_Type_Hero)
                    {
                        this.OnActorDeadIncomeGoldCoinInBattle(ref src, ref ptr);
                    }
                }
            }
            if (!this.bPvpMode)
            {
                this.OnMonsterDeadGold(ref prm);
            }
        }
예제 #12
0
        private void OnActorDead(ref GameDeadEventParam prm)
        {
            if (this.targetObj && prm.src.get_handle().ObjID == this.targetObj.get_handle().ObjID&& this.indicatePrefab != null)
            {
                this.HidePrefab(this.indicatePrefab);
                MonoSingleton <SceneMgr> .GetInstance().AddToRoot(this.indicatePrefab, SceneObjType.ActionRes);
            }
            if (prm.src.get_handle().TheActorMeta.ActorType == ActorTypeDef.Actor_Type_Hero)
            {
                GameObject pooledGameObjLOD = MonoSingleton <SceneMgr> .GetInstance().GetPooledGameObjLOD("Prefab_Skill_Effects/tongyong_effects/Siwang_tongyong/siwang_tongyong_01", true, SceneObjType.ActionRes, prm.src.get_handle().myTransform.position);

                if (pooledGameObjLOD != null)
                {
                    Singleton <CGameObjectPool> .GetInstance().RecycleGameObjectDelay(pooledGameObjLOD, 5000, null);
                }
            }
        }
예제 #13
0
        private void OnActorDeath(ref GameDeadEventParam prm)
        {
            int num = this.StarEvaluations.get_Count() - 1;

            while (num >= 0 && num < this.StarEvaluations.get_Count())
            {
                IStarEvaluation starEvaluation = this.StarEvaluations.get_Item(num);
                if (starEvaluation != null)
                {
                    starEvaluation.OnActorDeath(ref prm);
                }
                num--;
            }
            if (this.FailureEvaluation != null)
            {
                this.FailureEvaluation.OnActorDeath(ref prm);
            }
        }
 public void OnActorDead(ref GameDeadEventParam prm)
 {
     if (prm.src == this.m_actorHero)
     {
         if (prm.orignalAtker && prm.orignalAtker.handle.TheActorMeta.ActorType == ActorTypeDef.Actor_Type_Hero)
         {
             this.m_actorKiller = prm.orignalAtker;
         }
         else if (prm.src.handle.ActorControl.IsKilledByHero())
         {
             this.m_actorKiller = prm.src.handle.ActorControl.LastHeroAtker;
         }
         else
         {
             this.m_actorKiller = prm.atker;
         }
         this.m_ulHeroDeadTime = Singleton <FrameSynchr> .instance.LogicFrameTick;
     }
 }
예제 #15
0
        public void OnActorDead(ref GameDeadEventParam prm)
        {
            if (prm.bImmediateRevive)
            {
                return;
            }
            DictionaryView <uint, PlayerKDA> .Enumerator enumerator = this.m_PlayerKDA.GetEnumerator();
            while (enumerator.MoveNext())
            {
                KeyValuePair <uint, PlayerKDA> current     = enumerator.get_Current();
                ListView <HeroKDA> .Enumerator enumerator2 = current.get_Value().GetEnumerator();
                while (enumerator2.MoveNext())
                {
                    enumerator2.get_Current().OnActorDead(ref prm);
                }
                KeyValuePair <uint, PlayerKDA> current2 = enumerator.get_Current();
                if (current2.get_Value().IsHost)
                {
                    KeyValuePair <uint, PlayerKDA> current3 = enumerator.get_Current();
                    if (current3.get_Value().m_hostHeroDamage != null)
                    {
                        KeyValuePair <uint, PlayerKDA>         current4    = enumerator.get_Current();
                        ListView <CHostHeroDamage> .Enumerator enumerator3 = current4.get_Value().m_hostHeroDamage.GetEnumerator();
                        while (enumerator3.MoveNext())
                        {
                            if (enumerator3.get_Current() != null)
                            {
                                enumerator3.get_Current().OnActorDead(ref prm);
                            }
                        }
                    }
                }
            }
            if (prm.src && prm.src.get_handle().TheActorMeta.ActorType == ActorTypeDef.Actor_Type_Hero)
            {
                Singleton <EventRouter> .get_instance().BroadCastEvent(EventID.BATTLE_KDA_CHANGED);

                Singleton <EventRouter> .get_instance().BroadCastEvent(EventID.BATTLE_KDA_CHANGED_BY_ACTOR_DEAD);
            }
        }
예제 #16
0
 private void OnActorDeath(ref GameDeadEventParam prm)
 {
     if (((prm.src != 0) && (prm.orignalAtker != 0)) && !prm.bImmediateRevive)
     {
         bool flag = false;
         switch (prm.src.handle.ActorControl.GetActorSubSoliderType())
         {
         case 8:
         case 9:
             flag = true;
             break;
         }
         if (((prm.src.handle.TheActorMeta.ActorType != ActorTypeDef.Actor_Type_Monster) || (prm.src.handle.TheActorMeta.ConfigId == Singleton <BattleLogic> .instance.DragonId)) || flag)
         {
             KillDetailInfo info = this.OnActorDeathd(ref prm);
             if (info != null)
             {
                 Singleton <EventRouter> .instance.BroadCastEvent <KillDetailInfo>(EventID.AchievementRecorderEvent, info);
             }
         }
     }
 }
예제 #17
0
        public void OnActorDead(ref GameDeadEventParam prm)
        {
            if (!prm.bImmediateRevive)
            {
                DictionaryView <uint, PlayerKDA> .Enumerator enumerator = this.m_PlayerKDA.GetEnumerator();
                while (enumerator.MoveNext())
                {
                    KeyValuePair <uint, PlayerKDA> current     = enumerator.Current;
                    ListView <HeroKDA> .Enumerator enumerator2 = current.Value.GetEnumerator();
                    while (enumerator2.MoveNext())
                    {
                        enumerator2.Current.OnActorDead(ref prm);
                    }
                }
                if ((prm.src != 0) && (prm.src.handle.TheActorMeta.ActorType == ActorTypeDef.Actor_Type_Hero))
                {
                    Singleton <EventRouter> .instance.BroadCastEvent(EventID.BATTLE_KDA_CHANGED);

                    Singleton <EventRouter> .instance.BroadCastEvent(EventID.BATTLE_KDA_CHANGED_BY_ACTOR_DEAD);
                }
            }
        }
        private void OnMonsterDeadGold(ref GameDeadEventParam prm)
        {
            MonsterWrapper            monsterWrapper = prm.src.handle.AsMonster();
            PoolObjHandle <ActorRoot> orignalAtker   = prm.orignalAtker;

            if (monsterWrapper == null || monsterWrapper.cfgInfo == null)
            {
                return;
            }
            RES_MONSTER_TYPE bMonsterType = (RES_MONSTER_TYPE)monsterWrapper.cfgInfo.bMonsterType;

            if (bMonsterType != RES_MONSTER_TYPE.RES_MONSTER_TYPE_JUNGLE)
            {
                return;
            }
            if (!orignalAtker || orignalAtker.handle.EffectControl == null)
            {
                return;
            }
            orignalAtker.handle.EffectControl.PlayDyingGoldEffect(prm.src);
            Singleton <CSoundManager> .instance.PlayBattleSound("Glod_Get", prm.src, prm.src.handle.gameObject);
        }
예제 #19
0
        public override void OnActorDeath(ref GameDeadEventParam prm)
        {
            if (!this.bHasComplete && prm.src && prm.src.get_handle().TheActorMeta.ActorCamp != this.CachedSelfCamp)
            {
                List <Player> .Enumerator enumerator = Singleton <GamePlayerCenter> .get_instance().GetAllPlayers().GetEnumerator();

                bool flag = true;
                while (enumerator.MoveNext())
                {
                    Player current = enumerator.get_Current();
                    if (current.PlayerCamp != this.CachedSelfCamp && !current.IsAllHeroesDead())
                    {
                        flag = false;
                        break;
                    }
                }
                if (flag && !this.bHasComplete)
                {
                    this.bHasComplete = true;
                    this.TriggerChangedEvent();
                }
            }
        }
예제 #20
0
        private void OnActorDead(ref GameDeadEventParam prm)
        {
            PoolObjHandle <ActorRoot> src           = prm.src;
            PoolObjHandle <ActorRoot> poolObjHandle = prm.orignalAtker;

            if (!src || !poolObjHandle || prm.bImmediateRevive)
            {
                return;
            }
            if (this.bSoulGrow)
            {
                if (src.get_handle().TheActorMeta.ActorType == ActorTypeDef.Actor_Type_EYE)
                {
                    EyeWrapper eyeWrapper = src.get_handle().ActorControl as EyeWrapper;
                    if (eyeWrapper == null || eyeWrapper.bLifeTimeOver)
                    {
                        return;
                    }
                }
                if (src.get_handle().TheActorMeta.ActorType == ActorTypeDef.Actor_Type_Hero && poolObjHandle.get_handle().TheActorMeta.ActorType != ActorTypeDef.Actor_Type_Hero && src.get_handle().ActorControl.IsKilledByHero())
                {
                    poolObjHandle = src.get_handle().ActorControl.LastHeroAtker;
                }
                if (poolObjHandle)
                {
                    this.OnActorDeadIncomeSoul(ref src, ref poolObjHandle);
                    if (poolObjHandle.get_handle().TheActorMeta.ActorType == ActorTypeDef.Actor_Type_Hero || src.get_handle().TheActorMeta.ActorType != ActorTypeDef.Actor_Type_Hero)
                    {
                        this.OnActorDeadIncomeGoldCoinInBattle(ref src, ref poolObjHandle);
                    }
                }
            }
            if (!this.bPvpMode)
            {
                this.OnMonsterDeadGold(ref prm);
            }
        }
예제 #21
0
        private void OnActorDeath(ref GameDeadEventParam prm)
        {
            if (!prm.src || !prm.orignalAtker || prm.bImmediateRevive || prm.bSuicide)
            {
                return;
            }
            bool flag = false;
            byte actorSubSoliderType = prm.src.handle.ActorControl.GetActorSubSoliderType();

            if (actorSubSoliderType == 8 || actorSubSoliderType == 9)
            {
                flag = true;
            }
            if (prm.src.handle.TheActorMeta.ActorType == ActorTypeDef.Actor_Type_Monster && prm.src.handle.TheActorMeta.ConfigId != Singleton <BattleLogic> .instance.DragonId && !flag)
            {
                return;
            }
            KillDetailInfo killDetailInfo = this.OnActorDeathd(ref prm);

            if (killDetailInfo != null)
            {
                Singleton <EventRouter> .instance.BroadCastEvent <KillDetailInfo>(EventID.AchievementRecorderEvent, killDetailInfo);
            }
        }
예제 #22
0
        public void onActorDead(ref GameDeadEventParam prm)
        {
            if ((prm.bImmediateRevive && (base.actorPtr != 0)) && (base.actorPtr == prm.src))
            {
                GameObject go = MonoSingleton <SceneMgr> .GetInstance().GetPooledGameObjLOD("Prefab_Skill_Effects/tongyong_effects/Huanling_Effect/fuhuodun_buff_01", true, SceneObjType.ActionRes, this.actorPtr.handle.gameObject.transform.position);

                if (go != null)
                {
                    string layerName = "Particles";
                    if (this.actorPtr.handle.gameObject.layer == LayerMask.NameToLayer("Hide"))
                    {
                        layerName = "Hide";
                    }
                    go.SetLayer(layerName, false);
                    go.transform.SetParent(this.actorPtr.handle.gameObject.transform);
                    ParticleSystem component = go.GetComponent <ParticleSystem>();
                    if (component != null)
                    {
                        component.Play(true);
                    }
                    Singleton <CGameObjectPool> .GetInstance().RecycleGameObjectDelay(go, 0x1388, null);
                }
            }
        }
예제 #23
0
 public virtual void OnActorDeath(ref GameDeadEventParam prm)
 {
 }
예제 #24
0
 public void onActorDead(ref GameDeadEventParam prm)
 {
 }
예제 #25
0
        private KillDetailInfo OnActorDeathd(ref GameDeadEventParam param)
        {
            KillDetailInfo            killDetailInfo     = null;
            KillDetailInfoType        killDetailInfoType = KillDetailInfoType.Info_Type_None;
            KillDetailInfoType        heroMultiKillType  = KillDetailInfoType.Info_Type_None;
            KillDetailInfoType        heroContiKillType  = KillDetailInfoType.Info_Type_None;
            PoolObjHandle <ActorRoot> poolObjHandle      = default(PoolObjHandle <ActorRoot>);
            PoolObjHandle <ActorRoot> poolObjHandle2     = default(PoolObjHandle <ActorRoot>);
            List <uint>           list = new List <uint>();
            DefaultGameEventParam defaultGameEventParam = new DefaultGameEventParam(param.src, param.atker, ref param.orignalAtker, ref param.logicAtker);
            HeroWrapper           heroWrapper           = null;
            HeroWrapper           heroWrapper2          = null;
            bool   flag       = false;
            bool   flag2      = false;
            bool   flag3      = false;
            Player hostPlayer = Singleton <GamePlayerCenter> .instance.GetHostPlayer();

            DebugHelper.Assert(hostPlayer != null, "Fatal error in OnActorDeadthd, HostPlayer is null!");
            if (hostPlayer != null)
            {
                DebugHelper.Assert(hostPlayer.Captain, "Fatal error in OnActorDeadthd, Captain is null!");
            }
            bool bSelfCamp = hostPlayer.PlayerCamp == defaultGameEventParam.orignalAtker.handle.TheActorMeta.ActorCamp;
            uint objID     = hostPlayer.Captain.handle.ObjID;
            bool bPlayerSelf_KillOrKilled = objID == defaultGameEventParam.src.handle.ObjID || objID == defaultGameEventParam.orignalAtker.handle.ObjID;
            bool flag4 = defaultGameEventParam.src.handle.TheActorMeta.ActorType == ActorTypeDef.Actor_Type_Hero;
            bool flag5 = defaultGameEventParam.src.handle.TheActorMeta.ActorType == ActorTypeDef.Actor_Type_Organ;
            byte actorSubSoliderType = defaultGameEventParam.src.handle.ActorControl.GetActorSubSoliderType();
            bool flag6 = false;
            bool flag7 = false;
            bool flag8 = false;

            if (defaultGameEventParam.src.handle.TheActorMeta.ActorType == ActorTypeDef.Actor_Type_Monster && actorSubSoliderType == 8)
            {
                flag6 = true;
            }
            else if (defaultGameEventParam.src.handle.TheActorMeta.ActorType == ActorTypeDef.Actor_Type_Monster && actorSubSoliderType == 9)
            {
                flag7 = true;
            }
            else if (defaultGameEventParam.src.handle.TheActorMeta.ActorType == ActorTypeDef.Actor_Type_Monster && actorSubSoliderType == 7)
            {
                flag8 = true;
            }
            PoolObjHandle <ActorRoot> src            = defaultGameEventParam.src;
            PoolObjHandle <ActorRoot> poolObjHandle3 = defaultGameEventParam.orignalAtker;

            if (flag4)
            {
                heroWrapper  = (defaultGameEventParam.src.handle.ActorControl as HeroWrapper);
                heroWrapper2 = (defaultGameEventParam.orignalAtker.handle.ActorControl as HeroWrapper);
                if (defaultGameEventParam.orignalAtker.handle.TheActorMeta.ActorType == ActorTypeDef.Actor_Type_Hero)
                {
                    if (defaultGameEventParam.orignalAtker.handle.ObjID == objID)
                    {
                        bPlayerSelf_KillOrKilled = true;
                    }
                    flag      = true;
                    bSelfCamp = (hostPlayer.PlayerCamp == defaultGameEventParam.orignalAtker.handle.TheActorMeta.ActorCamp);
                }
                else if (heroWrapper.IsKilledByHero())
                {
                    flag           = true;
                    poolObjHandle3 = heroWrapper.LastHeroAtker;
                    heroWrapper2   = (heroWrapper.LastHeroAtker.handle.ActorControl as HeroWrapper);
                    if (poolObjHandle3.handle.ObjID == objID)
                    {
                        bPlayerSelf_KillOrKilled = true;
                    }
                    bSelfCamp = (hostPlayer.PlayerCamp == poolObjHandle3.handle.TheActorMeta.ActorCamp);
                }
                else if (defaultGameEventParam.orignalAtker.handle.TheActorMeta.ActorType == ActorTypeDef.Actor_Type_Organ)
                {
                    flag2     = true;
                    flag      = false;
                    bSelfCamp = (hostPlayer.PlayerCamp == defaultGameEventParam.orignalAtker.handle.TheActorMeta.ActorCamp);
                }
                else if (defaultGameEventParam.orignalAtker.handle.TheActorMeta.ActorType == ActorTypeDef.Actor_Type_Monster)
                {
                    flag3     = true;
                    flag      = false;
                    bSelfCamp = (hostPlayer.PlayerCamp == defaultGameEventParam.orignalAtker.handle.TheActorMeta.ActorCamp);
                }
                if (flag4 && flag)
                {
                    heroWrapper2.ContiDeadNum = 0;
                    heroWrapper2.ContiKillNum++;
                    if (heroWrapper2.IsInMultiKill())
                    {
                        heroWrapper2.MultiKillNum++;
                    }
                    else
                    {
                        heroWrapper2.MultiKillNum = 1;
                    }
                    heroWrapper2.UpdateLastKillTime();
                }
            }
            if (flag4 && flag)
            {
                if (src && src.handle.ActorControl != null)
                {
                    List <KeyValuePair <uint, ulong> > .Enumerator enumerator = src.handle.ActorControl.hurtSelfActorList.GetEnumerator();
                    while (enumerator.MoveNext())
                    {
                        KeyValuePair <uint, ulong> current = enumerator.get_Current();
                        if (current.get_Key() != poolObjHandle3.handle.ObjID)
                        {
                            List <uint> list2 = list;
                            KeyValuePair <uint, ulong> current2 = enumerator.get_Current();
                            list2.Add(current2.get_Key());
                        }
                    }
                }
                if (poolObjHandle3 && poolObjHandle3.handle.ActorControl != null)
                {
                    List <KeyValuePair <uint, ulong> > .Enumerator enumerator2 = poolObjHandle3.handle.ActorControl.helpSelfActorList.GetEnumerator();
                    while (enumerator2.MoveNext())
                    {
                        KeyValuePair <uint, ulong> current3 = enumerator2.get_Current();
                        if (current3.get_Key() != poolObjHandle3.handle.ObjID)
                        {
                            List <uint> list3 = list;
                            KeyValuePair <uint, ulong> current4 = enumerator2.get_Current();
                            list3.Add(current4.get_Key());
                        }
                    }
                }
                for (int i = 0; i < list.get_Count() - 1; i++)
                {
                    for (int j = i + 1; j < list.get_Count(); j++)
                    {
                        if (list.get_Item(i) == list.get_Item(j))
                        {
                            list.RemoveAt(j);
                            j--;
                        }
                    }
                }
                bool flag9 = false;
                if (heroWrapper2.MultiKillNum == 2)
                {
                    flag9             = true;
                    heroMultiKillType = KillDetailInfoType.Info_Type_DoubleKill;
                    Singleton <GameEventSys> .GetInstance().SendEvent <DefaultGameEventParam>(GameEventDef.Event_DoubleKill, ref defaultGameEventParam);
                }
                else if (heroWrapper2.MultiKillNum == 3)
                {
                    flag9             = true;
                    heroMultiKillType = KillDetailInfoType.Info_Type_TripleKill;
                    Singleton <GameEventSys> .GetInstance().SendEvent <DefaultGameEventParam>(GameEventDef.Event_TripleKill, ref defaultGameEventParam);
                }
                else if (heroWrapper2.MultiKillNum == 4)
                {
                    flag9             = true;
                    heroMultiKillType = KillDetailInfoType.Info_Type_QuataryKill;
                    Singleton <GameEventSys> .GetInstance().SendEvent <DefaultGameEventParam>(GameEventDef.Event_QuataryKill, ref defaultGameEventParam);
                }
                else if (heroWrapper2.MultiKillNum >= 5)
                {
                    flag9             = true;
                    heroMultiKillType = KillDetailInfoType.Info_Type_PentaKill;
                    Singleton <GameEventSys> .GetInstance().SendEvent <DefaultGameEventParam>(GameEventDef.Event_PentaKill, ref defaultGameEventParam);
                }
                if (flag9 && killDetailInfo == null)
                {
                    killDetailInfo = this._create(poolObjHandle3, src, list, killDetailInfoType, heroMultiKillType, killDetailInfoType, bSelfCamp, false, bPlayerSelf_KillOrKilled, false);
                }
            }
            if (flag4 && flag && heroWrapper.ContiKillNum >= 3)
            {
                if (heroWrapper.ContiKillNum >= 7)
                {
                    Singleton <GameEventSys> .GetInstance().SendEvent <DefaultGameEventParam>(GameEventDef.Event_OdysseyBeStopped, ref defaultGameEventParam);
                }
                if (killDetailInfo == null)
                {
                    killDetailInfo = this._create(poolObjHandle3, src, list, KillDetailInfoType.Info_Type_StopMultiKill, heroMultiKillType, killDetailInfoType, bSelfCamp, false, bPlayerSelf_KillOrKilled, false);
                }
            }
            if (flag4 && flag && !this.bFristBlood)
            {
                this.bFristBlood = true;
                return(this._create(poolObjHandle3, src, list, KillDetailInfoType.Info_Type_First_Kill, heroMultiKillType, killDetailInfoType, bSelfCamp, false, bPlayerSelf_KillOrKilled, false));
            }
            if (flag5 && (defaultGameEventParam.src.handle.TheStaticData.TheOrganOnlyInfo.OrganType == 1 || defaultGameEventParam.src.handle.TheStaticData.TheOrganOnlyInfo.OrganType == 4))
            {
                KillDetailInfo killDetailInfo2 = this._create(poolObjHandle3, src, list, KillDetailInfoType.Info_Type_DestroyTower, killDetailInfoType, killDetailInfoType, bSelfCamp, false, bPlayerSelf_KillOrKilled, false);
                if (defaultGameEventParam.src.handle.TheStaticData.TheOrganOnlyInfo.DeadEnemySoldier > 0)
                {
                    Singleton <EventRouter> .instance.BroadCastEvent <KillDetailInfo>(EventID.AchievementRecorderEvent, killDetailInfo2);

                    return(this._create(poolObjHandle3, src, list, KillDetailInfoType.Info_Type_Soldier_Boosted, killDetailInfoType, killDetailInfoType, bSelfCamp, false, bPlayerSelf_KillOrKilled, false));
                }
                return(killDetailInfo2);
            }
            else
            {
                if (flag4 && flag)
                {
                    bool flag10 = false;
                    if (heroWrapper2.ContiKillNum == 3)
                    {
                        flag10            = true;
                        heroContiKillType = KillDetailInfoType.Info_Type_MonsterKill;
                    }
                    else if (heroWrapper2.ContiKillNum == 4)
                    {
                        flag10            = true;
                        heroContiKillType = KillDetailInfoType.Info_Type_DominateBattle;
                    }
                    else if (heroWrapper2.ContiKillNum == 5)
                    {
                        flag10            = true;
                        heroContiKillType = KillDetailInfoType.Info_Type_Legendary;
                    }
                    else if (heroWrapper2.ContiKillNum == 6)
                    {
                        flag10            = true;
                        heroContiKillType = KillDetailInfoType.Info_Type_TotalAnnihilat;
                    }
                    else if (heroWrapper2.ContiKillNum >= 7)
                    {
                        flag10            = true;
                        heroContiKillType = KillDetailInfoType.Info_Type_Odyssey;
                        Singleton <GameEventSys> .GetInstance().SendEvent <DefaultGameEventParam>(GameEventDef.Event_Odyssey, ref defaultGameEventParam);
                    }
                    if (flag10 && killDetailInfo == null)
                    {
                        killDetailInfo = this._create(poolObjHandle3, src, list, killDetailInfoType, killDetailInfoType, heroContiKillType, bSelfCamp, false, bPlayerSelf_KillOrKilled, false);
                    }
                }
                if (flag4 && this.IsAllDead(ref defaultGameEventParam.src))
                {
                    KillDetailInfo arg = this._create(poolObjHandle3, src, list, killDetailInfoType, killDetailInfoType, killDetailInfoType, bSelfCamp, true, bPlayerSelf_KillOrKilled, false);
                    Singleton <EventRouter> .instance.BroadCastEvent <KillDetailInfo>(EventID.AchievementRecorderEvent, arg);
                }
                if (killDetailInfo != null)
                {
                    return(killDetailInfo);
                }
                if (flag4 && (flag || flag2 || flag3))
                {
                    return(this._create(poolObjHandle3, src, list, KillDetailInfoType.Info_Type_Kill, killDetailInfoType, killDetailInfoType, bSelfCamp, false, bPlayerSelf_KillOrKilled, false));
                }
                if (flag8)
                {
                    return(this._create(poolObjHandle3, src, list, KillDetailInfoType.Info_Type_Kill_3V3_Dragon, killDetailInfoType, killDetailInfoType, bSelfCamp, false, bPlayerSelf_KillOrKilled, param.bSuicide));
                }
                if (flag7)
                {
                    Singleton <EventRouter> .GetInstance().BroadCastEvent <PoolObjHandle <ActorRoot>, int>(EventID.BATTLE_DATAANL_DRAGON_KILLED, poolObjHandle3, 0);

                    return(this._create(poolObjHandle3, src, list, KillDetailInfoType.Info_Type_Kill_5V5_SmallDragon, killDetailInfoType, killDetailInfoType, bSelfCamp, false, bPlayerSelf_KillOrKilled, param.bSuicide));
                }
                if (flag6)
                {
                    Singleton <EventRouter> .GetInstance().BroadCastEvent <PoolObjHandle <ActorRoot>, int>(EventID.BATTLE_DATAANL_DRAGON_KILLED, poolObjHandle3, 1);

                    return(this._create(poolObjHandle3, src, list, KillDetailInfoType.Info_Type_Kill_5V5_BigDragon, killDetailInfoType, killDetailInfoType, bSelfCamp, false, bPlayerSelf_KillOrKilled, param.bSuicide));
                }
                return(null);
            }
        }
예제 #26
0
 public void OnActorDead(ref GameDeadEventParam prm)
 {
     if (prm.src == this.actorHero)
     {
         base.recordDead(prm.src, prm.orignalAtker);
     }
     else if (prm.src.handle.TheActorMeta.ActorType == ActorTypeDef.Actor_Type_Hero)
     {
         HeroWrapper actorControl         = prm.src.handle.ActorControl as HeroWrapper;
         PoolObjHandle <ActorRoot> killer = new PoolObjHandle <ActorRoot>();
         bool flag = false;
         if ((prm.orignalAtker != 0) && (prm.orignalAtker.handle.TheActorMeta.ActorType == ActorTypeDef.Actor_Type_Hero))
         {
             flag   = true;
             killer = prm.orignalAtker;
         }
         else if (actorControl.IsKilledByHero())
         {
             flag   = true;
             killer = actorControl.LastHeroAtker;
         }
         if (flag)
         {
             if (killer == this.actorHero)
             {
                 base.m_numKill++;
             }
             else
             {
                 base.recordAssist(prm.src, prm.orignalAtker, this.actorHero, killer);
             }
         }
     }
     else if ((prm.orignalAtker != 0) && (prm.orignalAtker == this.actorHero))
     {
         if (prm.src.handle.TheActorMeta.ActorType == ActorTypeDef.Actor_Type_Monster)
         {
             if (prm.src.handle.ActorControl.GetActorSubType() == 2)
             {
                 base.m_numKillMonster++;
                 MonsterWrapper wrapper2 = prm.src.handle.AsMonster();
                 if ((wrapper2 != null) && (wrapper2.cfgInfo != null))
                 {
                     if (wrapper2.cfgInfo.bSoldierType == 7)
                     {
                         base.m_numKillDragon++;
                         Singleton <EventRouter> .instance.BroadCastEvent(EventID.BATTLE_DRAGON_KILL_CHANGED);
                     }
                     else if (wrapper2.cfgInfo.bSoldierType == 9)
                     {
                         base.m_numKillDragon++;
                         Singleton <EventRouter> .instance.BroadCastEvent(EventID.BATTLE_DRAGON_KILL_CHANGED);
                     }
                     else if (wrapper2.cfgInfo.bSoldierType == 8)
                     {
                         base.m_numKillBaron++;
                         Singleton <EventRouter> .instance.BroadCastEvent(EventID.BATTLE_DRAGON_KILL_CHANGED);
                     }
                 }
             }
             else if (prm.src.handle.ActorControl.GetActorSubType() == 1)
             {
                 base.m_numKillSoldier++;
             }
             if (prm.src.handle.TheActorMeta.ConfigId != prm.src.handle.TheActorMeta.EnCId)
             {
                 base.m_numKillFakeMonster++;
             }
         }
         else if (prm.src.handle.TheActorMeta.ActorType == ActorTypeDef.Actor_Type_Organ)
         {
             if ((prm.src.handle.TheStaticData.TheOrganOnlyInfo.OrganType == 1) || (prm.src.handle.TheStaticData.TheOrganOnlyInfo.OrganType == 4))
             {
                 base.m_numKillOrgan++;
             }
             else if (prm.src.handle.TheStaticData.TheOrganOnlyInfo.OrganType == 2)
             {
                 base.m_numDestroyBase++;
             }
         }
     }
 }
예제 #27
0
        private void OnDeadRecord(ref GameDeadEventParam prm)
        {
            if (prm.bImmediateRevive)
            {
                return;
            }
            PoolObjHandle <ActorRoot> src        = prm.src;
            PoolObjHandle <ActorRoot> logicAtker = prm.logicAtker;

            if (!src || !logicAtker)
            {
                return;
            }
            if (src.get_handle().TheActorMeta.ActorType == ActorTypeDef.Actor_Type_Hero)
            {
                DeadRecord deadRecord = new DeadRecord(src.get_handle().TheActorMeta.ActorCamp, src.get_handle().TheActorMeta.ActorType, src.get_handle().TheActorMeta.ConfigId, (int)Singleton <FrameSynchr> .get_instance().LogicFrameTick, logicAtker.get_handle().TheActorMeta.ActorCamp, logicAtker.get_handle().TheActorMeta.PlayerId, logicAtker.get_handle().TheActorMeta.ActorType);
                List <PoolObjHandle <ActorRoot> > heroActors = Singleton <GameObjMgr> .get_instance().HeroActors;

                int count = heroActors.get_Count();
                for (int i = 0; i < count; i++)
                {
                    if (heroActors.get_Item(i).get_handle().ObjID == prm.src.get_handle().ObjID&& i < 10)
                    {
                        deadRecord.fightTime = (int)Singleton <FrameSynchr> .get_instance().LogicFrameTick - this.m_arrHeroEnterCombatTime[i];

                        break;
                    }
                }
                this.m_deadRecordList.Add(deadRecord);
                if (this.m_uiFBTime == 0u)
                {
                    this.m_uiFBTime = (uint)Singleton <FrameSynchr> .get_instance().LogicFrameTick;
                }
            }
            else if (src.get_handle().TheActorMeta.ActorType == ActorTypeDef.Actor_Type_Monster)
            {
                DeadRecord deadRecord2 = new DeadRecord(src.get_handle().TheActorMeta.ActorCamp, src.get_handle().TheActorMeta.ActorType, src.get_handle().TheActorMeta.ConfigId, (int)Singleton <FrameSynchr> .get_instance().LogicFrameTick, logicAtker.get_handle().TheActorMeta.ActorCamp, logicAtker.get_handle().TheActorMeta.PlayerId, logicAtker.get_handle().TheActorMeta.ActorType);
                if (src.get_handle().ActorControl != null)
                {
                    deadRecord2.actorSubType        = src.get_handle().ActorControl.GetActorSubType();
                    deadRecord2.actorSubSoliderType = src.get_handle().ActorControl.GetActorSubSoliderType();
                    if (deadRecord2.actorSubType == 2)
                    {
                        if (deadRecord2.actorSubSoliderType == 7)
                        {
                            deadRecord2.fightTime = (int)Singleton <FrameSynchr> .get_instance().LogicFrameTick - this.m_baojunEnterCombatTime;
                        }
                        else if (deadRecord2.actorSubSoliderType == 8)
                        {
                            deadRecord2.fightTime = (int)Singleton <FrameSynchr> .get_instance().LogicFrameTick - this.m_baronEnterCombatTime;
                        }
                        else if (deadRecord2.actorSubSoliderType == 9)
                        {
                            deadRecord2.fightTime = (int)Singleton <FrameSynchr> .get_instance().LogicFrameTick - this.m_bigDragonEnterCombatTime;
                        }
                    }
                }
                this.m_deadRecordList.Add(deadRecord2);
                this.m_deadMonsterNum++;
            }
            else if (src.get_handle().TheActorMeta.ActorType == ActorTypeDef.Actor_Type_Organ && (src.get_handle().TheStaticData.TheOrganOnlyInfo.OrganType == 1 || src.get_handle().TheStaticData.TheOrganOnlyInfo.OrganType == 4 || src.get_handle().TheStaticData.TheOrganOnlyInfo.OrganType == 2))
            {
                DeadRecord deadRecord3 = new DeadRecord(src.get_handle().TheActorMeta.ActorCamp, src.get_handle().TheActorMeta.ActorType, src.get_handle().TheActorMeta.ConfigId, (int)Singleton <FrameSynchr> .get_instance().LogicFrameTick, logicAtker.get_handle().TheActorMeta.ActorCamp, logicAtker.get_handle().TheActorMeta.PlayerId, logicAtker.get_handle().TheActorMeta.ActorType);
                if (src.get_handle().ObjLinker != null)
                {
                    deadRecord3.iOrder       = src.get_handle().ObjLinker.BattleOrder;
                    deadRecord3.actorSubType = (byte)src.get_handle().TheStaticData.TheOrganOnlyInfo.OrganType;
                }
                this.m_deadRecordList.Add(deadRecord3);
            }
        }
        private void onActorDead(ref GameDeadEventParam prm)
        {
            if (prm.bImmediateRevive)
            {
                return;
            }
            this.doDestroyStat(prm.src, prm.orignalAtker);
            if (prm.src.handle.TheActorMeta.ActorType == ActorTypeDef.Actor_Type_Hero)
            {
                HeroWrapper heroWrapper = prm.src.handle.ActorControl as HeroWrapper;
                CampInfo    campInfo    = null;
                PoolObjHandle <ActorRoot> poolObjHandle = new PoolObjHandle <ActorRoot>(null);
                if (prm.orignalAtker && prm.orignalAtker.handle.TheActorMeta.ActorType == ActorTypeDef.Actor_Type_Hero)
                {
                    campInfo      = this.GetCampInfoByCamp(prm.orignalAtker.handle.TheActorMeta.ActorCamp);
                    poolObjHandle = prm.orignalAtker;
                }
                else if (heroWrapper.IsKilledByHero() && heroWrapper.LastHeroAtker)
                {
                    campInfo      = this.GetCampInfoByCamp(heroWrapper.LastHeroAtker.handle.TheActorMeta.ActorCamp);
                    poolObjHandle = heroWrapper.LastHeroAtker;
                }
                if (campInfo != null && poolObjHandle)
                {
                    campInfo.IncCampScore(prm.src, poolObjHandle);
                    uint dwConfValue = GameDataMgr.globalInfoDatabin.GetDataByKey(109u).dwConfValue;
                    campInfo.IncHeadPoints((int)dwConfValue, prm.src, poolObjHandle);
                }
            }
            else if (prm.src.handle.TheActorMeta.ActorType == ActorTypeDef.Actor_Type_Monster)
            {
                MonsterWrapper monsterWrapper = prm.src.handle.ActorControl as MonsterWrapper;
                if (monsterWrapper.IsKilledByHero())
                {
                    CampInfo campInfoByCamp = this.GetCampInfoByCamp(monsterWrapper.LastHeroAtker.handle.TheActorMeta.ActorCamp);
                    DebugHelper.Assert(campInfoByCamp != null);
                    if (campInfoByCamp != null)
                    {
                        campInfoByCamp.IncHeadPoints(monsterWrapper.cfgInfo.iHeadPoints, prm.src, prm.orignalAtker);
                    }
                }
                else if (prm.orignalAtker && prm.orignalAtker.handle.TheActorMeta.ActorType == ActorTypeDef.Actor_Type_Hero)
                {
                    CampInfo campInfoByCamp2 = this.GetCampInfoByCamp(prm.orignalAtker.handle.TheActorMeta.ActorCamp);
                    DebugHelper.Assert(campInfoByCamp2 != null);
                    if (campInfoByCamp2 != null)
                    {
                        campInfoByCamp2.IncHeadPoints(monsterWrapper.cfgInfo.iHeadPoints, prm.src, prm.orignalAtker);
                    }
                }
            }
            DictionaryView <uint, NONHERO_STATISTIC_INFO> dictionaryView;
            NONHERO_STATISTIC_INFO nONHERO_STATISTIC_INFO;

            if (prm.src && prm.src.handle.TheActorMeta.ActorType != ActorTypeDef.Actor_Type_Hero && this.m_NonHeroInfo.TryGetValue((uint)prm.src.handle.TheActorMeta.ActorType, out dictionaryView) && dictionaryView.TryGetValue((uint)prm.src.handle.TheActorMeta.ActorCamp, out nONHERO_STATISTIC_INFO))
            {
                nONHERO_STATISTIC_INFO.uiTotalDeadNum += 1u;
            }
            if (prm.atker && prm.src && prm.src.handle.TheActorMeta.ActorType == ActorTypeDef.Actor_Type_Organ)
            {
                OrganWrapper organWrapper = prm.src.handle.ActorControl as OrganWrapper;
                if (organWrapper != null && organWrapper.cfgInfo.bOrganType == 1)
                {
                    CampInfo campInfoByCamp3 = this.GetCampInfoByCamp(prm.atker.handle.TheActorMeta.ActorCamp);
                    if (campInfoByCamp3 != null)
                    {
                        campInfoByCamp3.destoryTowers++;
                        Singleton <EventRouter> .instance.BroadCastEvent(EventID.BATTLE_TOWER_DESTROY_CHANGED);
                    }
                }
            }
        }
예제 #29
0
 public void OnActorDead(ref GameDeadEventParam prm)
 {
     if (prm.src == this.actorHero)
     {
         base.recordDead(prm.src, prm.orignalAtker);
     }
     else if (prm.src.handle.TheActorMeta.ActorType == ActorTypeDef.Actor_Type_Hero)
     {
         HeroWrapper heroWrapper = prm.src.handle.ActorControl as HeroWrapper;
         PoolObjHandle <ActorRoot> poolObjHandle = default(PoolObjHandle <ActorRoot>);
         bool flag = false;
         if (prm.orignalAtker && prm.orignalAtker.handle.TheActorMeta.ActorType == ActorTypeDef.Actor_Type_Hero)
         {
             flag          = true;
             poolObjHandle = prm.orignalAtker;
         }
         else if (heroWrapper.IsKilledByHero())
         {
             flag          = true;
             poolObjHandle = heroWrapper.LastHeroAtker;
         }
         if (flag)
         {
             if (poolObjHandle == this.actorHero)
             {
                 this.m_numKill++;
                 if (!this.actorHero.handle.ActorAgent.IsAutoAI())
                 {
                     this.m_stJudgeStat.KillNum = this.m_stJudgeStat.KillNum + 1;
                 }
                 if (this.actorHero.handle.ValueComponent.actorHp * 100 / this.actorHero.handle.ValueComponent.actorHpTotal <= 10)
                 {
                     this.m_iKillHeroUnderTenPercent += 1u;
                 }
             }
             else
             {
                 base.recordAssist(prm.src, prm.orignalAtker, this.actorHero, poolObjHandle);
             }
         }
     }
     else if (prm.orignalAtker && prm.orignalAtker == this.actorHero)
     {
         if (prm.src.handle.TheActorMeta.ActorType == ActorTypeDef.Actor_Type_Monster)
         {
             if (prm.src.handle.ActorControl.GetActorSubType() == 2)
             {
                 this.m_numKillMonster++;
                 MonsterWrapper monsterWrapper = prm.src.handle.AsMonster();
                 if (monsterWrapper != null && monsterWrapper.cfgInfo != null)
                 {
                     if (monsterWrapper.cfgInfo.bSoldierType == 7)
                     {
                         this.m_numKillDragon++;
                         Singleton <EventRouter> .instance.BroadCastEvent(EventID.BATTLE_DRAGON_KILL_CHANGED);
                     }
                     else if (monsterWrapper.cfgInfo.bSoldierType == 9)
                     {
                         this.m_numKillDragon++;
                         Singleton <EventRouter> .instance.BroadCastEvent(EventID.BATTLE_DRAGON_KILL_CHANGED);
                     }
                     else if (monsterWrapper.cfgInfo.bSoldierType == 8)
                     {
                         this.m_numKillBaron++;
                         Singleton <EventRouter> .instance.BroadCastEvent(EventID.BATTLE_DRAGON_KILL_CHANGED);
                     }
                     else if (monsterWrapper.cfgInfo.bSoldierType == 10)
                     {
                         this.m_numKillBlueBa++;
                     }
                     else if (monsterWrapper.cfgInfo.bSoldierType == 11)
                     {
                         this.m_numKillRedBa++;
                     }
                 }
             }
             else if (prm.src.handle.ActorControl.GetActorSubType() == 1)
             {
                 this.m_numKillSoldier++;
             }
             if (prm.src.handle.TheActorMeta.ConfigId != prm.src.handle.TheActorMeta.EnCId)
             {
                 this.m_numKillFakeMonster++;
             }
         }
         else if (prm.src.handle.TheActorMeta.ActorType == ActorTypeDef.Actor_Type_Organ)
         {
             if (prm.src.handle.TheStaticData.TheOrganOnlyInfo.OrganType == 1 || prm.src.handle.TheStaticData.TheOrganOnlyInfo.OrganType == 4)
             {
                 this.m_numKillOrgan++;
             }
             else if (prm.src.handle.TheStaticData.TheOrganOnlyInfo.OrganType == 2)
             {
                 this.m_numDestroyBase++;
             }
         }
         else if (prm.src.handle.TheActorMeta.ActorType == ActorTypeDef.Actor_Type_EYE)
         {
             EyeWrapper eyeWrapper = prm.src.handle.ActorControl as EyeWrapper;
             if (eyeWrapper != null && !eyeWrapper.bLifeTimeOver)
             {
                 this.scanEyeCnt += 1u;
             }
         }
     }
 }
예제 #30
0
        private KillDetailInfo OnActorDeathd(ref GameDeadEventParam param)
        {
            KillDetailInfo            info = null;
            KillDetailInfoType        type = KillDetailInfoType.Info_Type_None;
            KillDetailInfoType        heroMultiKillType = KillDetailInfoType.Info_Type_None;
            KillDetailInfoType        heroContiKillType = KillDetailInfoType.Info_Type_None;
            PoolObjHandle <ActorRoot> victim            = new PoolObjHandle <ActorRoot>();
            PoolObjHandle <ActorRoot> killer            = new PoolObjHandle <ActorRoot>();
            DefaultGameEventParam     prm = new DefaultGameEventParam(param.src, param.atker, ref param.orignalAtker);
            HeroWrapper actorControl      = null;
            HeroWrapper wrapper2          = null;
            bool        flag       = false;
            bool        flag2      = false;
            bool        flag3      = false;
            bool        flag4      = false;
            bool        flag5      = false;
            bool        flag6      = false;
            Player      hostPlayer = Singleton <GamePlayerCenter> .instance.GetHostPlayer();

            DebugHelper.Assert(hostPlayer != null, "Fatal error in OnActorDeadthd, HostPlayer is null!");
            if (hostPlayer != null)
            {
                DebugHelper.Assert((bool)hostPlayer.Captain, "Fatal error in OnActorDeadthd, Captain is null!");
            }
            bool bSelfCamp = hostPlayer.PlayerCamp == prm.orignalAtker.handle.TheActorMeta.ActorCamp;
            bool flag8     = false;
            uint objID     = hostPlayer.Captain.handle.ObjID;

            flag8 = (objID == prm.src.handle.ObjID) || (objID == prm.orignalAtker.handle.ObjID);
            flag  = prm.src.handle.TheActorMeta.ActorType == ActorTypeDef.Actor_Type_Hero;
            flag2 = prm.src.handle.TheActorMeta.ActorType == ActorTypeDef.Actor_Type_Organ;
            flag3 = (prm.src.handle.TheActorMeta.ActorType == ActorTypeDef.Actor_Type_Monster) && (prm.src.handle.TheActorMeta.ConfigId == Singleton <BattleLogic> .instance.DragonId);
            byte actorSubSoliderType = prm.src.handle.ActorControl.GetActorSubSoliderType();
            bool flag9  = false;
            bool flag10 = false;

            switch (actorSubSoliderType)
            {
            case 8:
                flag9 = true;
                flag3 = false;
                break;

            case 9:
                flag10 = true;
                flag3  = false;
                break;
            }
            victim = prm.src;
            killer = prm.orignalAtker;
            if (flag)
            {
                actorControl = prm.src.handle.ActorControl as HeroWrapper;
                wrapper2     = prm.orignalAtker.handle.ActorControl as HeroWrapper;
                if (prm.orignalAtker.handle.TheActorMeta.ActorType == ActorTypeDef.Actor_Type_Hero)
                {
                    if (prm.orignalAtker.handle.ObjID == objID)
                    {
                        flag8 = true;
                    }
                    flag4     = true;
                    bSelfCamp = hostPlayer.PlayerCamp == prm.orignalAtker.handle.TheActorMeta.ActorCamp;
                }
                else if (actorControl.IsKilledByHero())
                {
                    flag4    = true;
                    killer   = actorControl.LastHeroAtker;
                    wrapper2 = actorControl.LastHeroAtker.handle.ActorControl as HeroWrapper;
                    if (killer.handle.ObjID == objID)
                    {
                        flag8 = true;
                    }
                    bSelfCamp = hostPlayer.PlayerCamp == killer.handle.TheActorMeta.ActorCamp;
                }
                else if (prm.orignalAtker.handle.TheActorMeta.ActorType == ActorTypeDef.Actor_Type_Organ)
                {
                    flag5     = true;
                    flag4     = false;
                    bSelfCamp = hostPlayer.PlayerCamp == prm.orignalAtker.handle.TheActorMeta.ActorCamp;
                }
                else if (prm.orignalAtker.handle.TheActorMeta.ActorType == ActorTypeDef.Actor_Type_Monster)
                {
                    flag6     = true;
                    flag4     = false;
                    bSelfCamp = hostPlayer.PlayerCamp == prm.orignalAtker.handle.TheActorMeta.ActorCamp;
                }
                if (flag && flag4)
                {
                    wrapper2.ContiDeadNum = 0;
                    wrapper2.ContiKillNum++;
                    if (wrapper2.IsInMultiKill())
                    {
                        wrapper2.MultiKillNum++;
                    }
                    else
                    {
                        wrapper2.MultiKillNum = 1;
                    }
                    wrapper2.UpdateLastKillTime();
                }
            }
            if (flag && flag4)
            {
                bool flag11 = false;
                if (wrapper2.MultiKillNum == 2)
                {
                    flag11            = true;
                    heroMultiKillType = KillDetailInfoType.Info_Type_DoubleKill;
                    Singleton <GameEventSys> .GetInstance().SendEvent <DefaultGameEventParam>(GameEventDef.Event_DoubleKill, ref prm);
                }
                else if (wrapper2.MultiKillNum == 3)
                {
                    flag11            = true;
                    heroMultiKillType = KillDetailInfoType.Info_Type_TripleKill;
                    Singleton <GameEventSys> .GetInstance().SendEvent <DefaultGameEventParam>(GameEventDef.Event_TripleKill, ref prm);
                }
                else if (wrapper2.MultiKillNum == 4)
                {
                    flag11            = true;
                    heroMultiKillType = KillDetailInfoType.Info_Type_QuataryKill;
                    Singleton <GameEventSys> .GetInstance().SendEvent <DefaultGameEventParam>(GameEventDef.Event_QuataryKill, ref prm);
                }
                else if (wrapper2.MultiKillNum >= 5)
                {
                    flag11            = true;
                    heroMultiKillType = KillDetailInfoType.Info_Type_PentaKill;
                    Singleton <GameEventSys> .GetInstance().SendEvent <DefaultGameEventParam>(GameEventDef.Event_PentaKill, ref prm);
                }
                if (flag11 && (info == null))
                {
                    info = this._create(killer, victim, type, heroMultiKillType, type, bSelfCamp, false, flag8);
                }
            }
            if ((flag && flag4) && (actorControl.ContiKillNum >= 3))
            {
                if (actorControl.ContiKillNum >= 7)
                {
                    Singleton <GameEventSys> .GetInstance().SendEvent <DefaultGameEventParam>(GameEventDef.Event_OdysseyBeStopped, ref prm);
                }
                if (info == null)
                {
                    info = this._create(killer, victim, KillDetailInfoType.Info_Type_StopMultiKill, heroMultiKillType, type, bSelfCamp, false, flag8);
                }
            }
            if ((flag && flag4) && !this.bFristBlood)
            {
                this.bFristBlood = true;
                return(this._create(killer, victim, KillDetailInfoType.Info_Type_First_Kill, heroMultiKillType, type, bSelfCamp, false, flag8));
            }
            if (flag2 && ((prm.src.handle.TheStaticData.TheOrganOnlyInfo.OrganType == 1) || (prm.src.handle.TheStaticData.TheOrganOnlyInfo.OrganType == 4)))
            {
                KillDetailInfo info2 = this._create(killer, victim, KillDetailInfoType.Info_Type_DestroyTower, type, type, bSelfCamp, false, flag8);
                if (prm.src.handle.TheStaticData.TheOrganOnlyInfo.DeadEnemySoldier > 0)
                {
                    Singleton <EventRouter> .instance.BroadCastEvent <KillDetailInfo>(EventID.AchievementRecorderEvent, info2);

                    return(this._create(killer, victim, KillDetailInfoType.Info_Type_Soldier_Boosted, type, type, bSelfCamp, false, flag8));
                }
                return(info2);
            }
            if (flag && flag4)
            {
                bool flag12 = false;
                if (wrapper2.ContiKillNum == 3)
                {
                    flag12            = true;
                    heroContiKillType = KillDetailInfoType.Info_Type_MonsterKill;
                }
                else if (wrapper2.ContiKillNum == 4)
                {
                    flag12            = true;
                    heroContiKillType = KillDetailInfoType.Info_Type_DominateBattle;
                }
                else if (wrapper2.ContiKillNum == 5)
                {
                    flag12            = true;
                    heroContiKillType = KillDetailInfoType.Info_Type_Legendary;
                }
                else if (wrapper2.ContiKillNum == 6)
                {
                    flag12            = true;
                    heroContiKillType = KillDetailInfoType.Info_Type_TotalAnnihilat;
                }
                else if (wrapper2.ContiKillNum >= 7)
                {
                    flag12            = true;
                    heroContiKillType = KillDetailInfoType.Info_Type_Odyssey;
                    Singleton <GameEventSys> .GetInstance().SendEvent <DefaultGameEventParam>(GameEventDef.Event_Odyssey, ref prm);
                }
                if (flag12 && (info == null))
                {
                    info = this._create(killer, victim, type, type, heroContiKillType, bSelfCamp, false, flag8);
                }
            }
            if (info != null)
            {
                return(info);
            }
            if (flag && ((flag4 || flag5) || flag6))
            {
                return(this._create(killer, victim, KillDetailInfoType.Info_Type_Kill, type, type, bSelfCamp, false, flag8));
            }
            if (flag && this.IsAllDead(ref prm.src))
            {
                KillDetailInfo info3 = this._create(killer, victim, type, type, type, bSelfCamp, true, flag8);
                Singleton <EventRouter> .instance.BroadCastEvent <KillDetailInfo>(EventID.AchievementRecorderEvent, info3);
            }
            if (flag3)
            {
                return(this._create(killer, victim, KillDetailInfoType.Info_Type_KillDragon, type, type, bSelfCamp, false, flag8));
            }
            if (flag10)
            {
                return(this._create(killer, victim, KillDetailInfoType.Info_Type_KillBIGDRAGON, type, type, bSelfCamp, false, flag8));
            }
            if (flag9)
            {
                return(this._create(killer, victim, KillDetailInfoType.Info_Type_KillBARON, type, type, bSelfCamp, false, flag8));
            }
            return(null);
        }