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); }
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); }
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); // } } } }