/// <summary>
    /// 英雄死亡
    /// </summary>
    /// <param name="buf"></param>
    private void OnHeroDeath(KProtoBuf buf)
    {
        S2C_HERO_DEATH respond = buf as S2C_HERO_DEATH;
        //NetworkManager.Instance.GetDropItemController().GetDropItemManager().SetDropItemInfoByDeath(m_GameplayProxy, respond.heroID, respond.drop_list);
        //Debug.Log("OnHeroDeath heroID:" + respond.heroID);

        //ShipItemsProxy shipItemsProxy = GameFacade.Instance.RetrieveProxy(ProxyName.ShipItemsProxy) as ShipItemsProxy;
        //shipItemsProxy.RemoveShipItems(respond.heroID);
        MSAIBossProxy msab = GameFacade.Instance.RetrieveProxy(ProxyName.MSAIBossProxy) as MSAIBossProxy;

        //李贺新的战场AI召唤出来的小怪在某种状态下不播死亡爆炸特效
        if (!msab.IsChangeDeadEff(respond.heroID))
        {
            // TODO.
            List <DropInfo> myDropList = new List <DropInfo>();
            foreach (var item in respond.drop_list)
            {
                var dInfo = new DropInfo();
                dInfo.player_uid = item.player_uid;
                dInfo.chest_tid  = item.chest_tid;
                dInfo.ship_tlv   = item.ship_tlv;
                dInfo.quality    = item.ship_tlv;
                myDropList.Add(dInfo);
            }
            m_EntityManager.SendEventToEntity(respond.heroID, ComponentEventName.Dead, new DeadEvent()
            {
                Uid      = respond.heroID,
                DropList = myDropList
            });
        }
        else
        {
            //m_EntityManager.SendEventToEntity(respond.heroID, ComponentEventName.SpacecraftStop, null);
            //msab.AddMonsterEffect(respond.heroID);
        }

        GameFacade.Instance.SendNotification(NotificationName.EntityDeath, new EntityDeathInfo()
        {
            heroID = respond.heroID, killerID = respond.KillerID
        });
    }
Exemple #2
0
 public virtual void AddDeadMessage(S2C_HERO_DEATH respond)
 {
     msg_case.AddDeadMessage(respond);
 }
 public void AddDeadMessage(S2C_HERO_DEATH respond)
 {
     death_msgs.Add(respond);
 }
Exemple #4
0
        public void OnHeroDeathOp(KProtoBuf buf, bool fristTime)
        {
            S2C_HERO_DEATH respond    = buf as S2C_HERO_DEATH;
            SceneEntity    targetHero = GetSceneObject(respond.heroID) as SceneEntity;
            SceneEntity    killerHero = GetSceneObject(respond.KillerID) as SceneEntity;

            if (null == targetHero)
            {
                return;
            }
            if (targetHero == mainHero)
            {
                ReliveView.GetInstance().ShowView();
            }

            targetHero.property.isDeaded = true;
            uint          lastSkillId  = targetHero.property.lastHitSkillId;
            KSkillDisplay skillDisplay = KConfigFileManager.GetInstance().GetSkillDisplay(lastSkillId, targetHero.property.tabID);

            if (fristTime && null != killerHero)
            {
                KActiveSkill activeSkill = KConfigFileManager.GetInstance().GetActiveSkill(lastSkillId, 1);
                if (null != activeSkill && activeSkill.ClientCache)
                {
                    if (null != killerHero.ActiveAction)
                    {
                        killerHero.ActiveAction.AddDeadMessage(respond);
                        return;
                    }
                }
                else if (null != killerHero && skillDisplay.HitDelayTimeScale > 0.00001f)
                {
                    float distance = Vector3.Distance(killerHero.Position, targetHero.Position);
                    float _time    = distance * skillDisplay.HitDelayTimeScale;
                    DelayCallManager.instance.CallFunction(OnHeroDeathParam, _time, buf, false);
                    return;
                }
            }
            if (null != targetHero)
            {
                if (targetHero.property.activeAction.isFlying)
                {
                    if (skillDisplay.DeadType != KSkillDisplay.DEAD_TYPE.PHYSICS)
                    {
                        targetHero.property.isDeadTemp = true;
                        return;
                    }
                }
                targetHero.DispatchEvent(ControllerCommand.FinishImmediate);
                targetHero.DispatchEvent(ControllerCommand.CLEAR_BUFF);
                targetHero.Action.ToDead(killerHero);
                targetHero.property.isDeadTemp = true;
                if (null != killerHero)
                {
                    if (killerHero.gameObject.GetComponent <AttackSlow>() == null)
                    {
                        if (null == skillDisplay || skillDisplay.DieAttackSlowTime <= 0)
                        {
                            return;
                        }
                        killerHero.DispatchEvent(
                            ControllerCommand.SLOW,
                            killerHero.AnimCmp.GetLastLogicAnimName(),
                            skillDisplay.DieAttackSlowTime,
                            skillDisplay.DieAttackSpeed);
                    }
                }
            }
        }