예제 #1
0
    public static bool PlaySound(PeEntity npc, int caseId, int secnarioID)
    {
        if (AudioManager.instance == null)
        {
            return(false);
        }

        if (secnarioIDs.Contains(caseId))
        {
            return(false);
        }

        if (npc.NpcCmpt != null && npc.NpcCmpt.voiceType <= 0)
        {
            RandomNpcDb.Item item = RandomNpcDb.Get(npc.ProtoID);
            if (item != null && npc.commonCmpt != null)
            {
                npc.ExtSetVoiceType(item.voiveMatch.GetRandomVoice(npc.commonCmpt.sex));
            }
        }

        if (npc.NpcCmpt != null && npc.NpcCmpt.voiceType <= 0)
        {
            return(false);
        }

        int audioID = NpcVoiceDb.GetVoiceId(secnarioID, npc.NpcCmpt.voiceType);

        if (audioID > 0 && null != npc.peTrans)
        {
            //lz-2016.12.06 声音要跟着模型动,所以用模型的Trans
            AudioController adc = AudioManager.instance.Create(npc.position, audioID, npc.peTrans.realTrans, true, true);
            adc.DestroyEvent += OnDelete;
            contrillers.Add(caseId, adc);
            secnarioIDs.Add(caseId);
            return(true);
        }

        // mAdController.PlayAudio();
        return(false);
    }
예제 #2
0
        private static AttribType GetRandMaxAttr(int npcId, PESkEntity entity, AttribType[] ChangeAbleAttr)
        {
            float      maxP     = 0;
            AttribType FindAttr = ChangeAbleAttr[0];

            RandomNpcDb.Item      rand      = RandomNpcDb.Get(npcId);
            RandomNpcDb.RandomInt randomint = new RandomNpcDb.RandomInt();
            for (int i = 0; i < ChangeAbleAttr.Length; i++)
            {
                if (!rand.TryGetAttrRandom(ChangeAbleAttr[i], out randomint) || randomint.m_Max == 0)
                {
                    continue;
                }

                float currentAttrP = (entity.GetAttribute(ChangeAbleAttr[i], false) - randomint.m_Min) / (randomint.m_Max - randomint.m_Min);
                if (currentAttrP > maxP)
                {
                    FindAttr = ChangeAbleAttr[i];
                    maxP     = currentAttrP;
                }
            }
            return(FindAttr);
        }
예제 #3
0
    void OnEntityDeath(SkEntity entity, SkEntity caster)
    {
        CommonCmpt common = entity.GetComponent <CommonCmpt>();

        if (common != null)
        {
            if (common.entityProto.proto == EEntityProto.Doodad)
            {
                DestroyEntity(entity, 30.0f);
            }

            if (common.entityProto.proto == EEntityProto.Monster)
            {
                MonsterHandbookData.AddMhByKilledMonsterID(common.entityProto.protoId);
                if (common.GetComponent <TowerCmpt>() == null)
                {
                    float    reviveTime = 10;
                    PeEntity mon        = entity.GetComponent <PeEntity>();
                    if (mon != null)
                    {
                        if (StroyManager.Instance != null)
                        {
                            if (StroyManager.Instance.m_RecordKillMons.Count != 0)
                            {
                                foreach (var item in StroyManager.Instance.m_RecordKillMons.Values)
                                {
                                    if (item.type == KillMons.Type.fixedId && SceneEntityCreatorArchiver.Instance.GetEntityByFixedSpId(item.monId) == mon)
                                    {
                                        reviveTime = (item.reviveTime == 0 ? reviveTime : item.reviveTime);
                                        break;
                                    }
                                    else if (item.type == KillMons.Type.protoTypeId && Vector3.Distance(mon.position, item.center) <= item.radius &&
                                             (item.monId == -999 ? true : common.entityProto.protoId == item.monId))
                                    {
                                        reviveTime = (item.reviveTime == 0 ? reviveTime : item.reviveTime);
                                        break;
                                    }
                                }
                            }
                        }
                    }
                    DestroyEntity(entity, reviveTime);
                }
            }

            NpcCmpt npc = entity.GetComponent <NpcCmpt>();
            if (common.entityProto.proto == EEntityProto.Npc)
            {
                if (GameUI.Instance != null)
                {
                    if (GameUI.Instance.mNpcWnd.IsOpen() && GameUI.Instance.mNpcWnd.m_CurSelNpc.commonCmpt == common)
                    {
                        GameUI.Instance.mNpcWnd.Hide();
                    }
                }
                if (npc != null && npc.Type != ENpcType.Follower && npc.ReviveTime > 0)
                {
                    ReviveEntity(entity, 10.0f);
                }
                if (npc.ReviveTime <= 0)
                {
                    PeEntity npcentity = npc.GetComponent <PeEntity>();
                    if (MissionManager.Instance != null && MissionManager.Instance.m_PlayerMission != null)
                    {
                        MissionManager.Instance.m_PlayerMission.SetMissionState(npcentity, NpcMissionState.Max);
                    }

                    NpcMissionData missionData = npcentity.GetUserData() as NpcMissionData;
                    if (missionData != null)
                    {
                        missionData.m_MissionList.Clear();
                    }
                }
            }
            else if (common.entityProto.proto == EEntityProto.RandomNpc)
            {
                if (npc != null && !npc.IsServant)
                {
                    if (npc.ReviveTime > 0)
                    {
                        if (PeGameMgr.IsMultiStory)
                        {
                            if (entity._net is AiAdNpcNetwork)
                            {
                                int tempid            = ((AiAdNpcNetwork)(entity._net)).ExternId;
                                RandomNpcDb.Item item = RandomNpcDb.Get(tempid);
                                if (item != null)
                                {
                                    if (item.reviveTime != -1)
                                    {
                                        ReviveEntity(entity, item.reviveTime);
                                    }
                                }
                            }
                        }
                        else
                        {
                            ReviveEntity(entity, npc.ReviveTime);
                        }
                    }
                }

                //follower revive
//				if (npc != null && npc.IsServant)
//				{
//					ReviveEntity(entity, npc.ReviveTime + npc.FollowerReviceTime);
//				}
            }
        }
    }