Пример #1
0
 public static void Postfix(LoadedAudioBank __instance)
 {
     RLog.M.TWL(0, "LoadedAudioBank.UnloadBank " + __instance.name);
     if (ModTek.soundBanks.ContainsKey(__instance.name))
     {
         ModTek.soundBanks[__instance.name].loaded = false;
     }
 }
Пример #2
0
 public static void Postfix(WwiseManager __instance, ref List <LoadedAudioBank> ___loadedBanks)
 {
     RLog.M.TWL(0, "WwiseManager.UnloadCombatBanks");
     foreach (var soundBank in ModTek.soundBanks)
     {
         if (soundBank.Value.type != SoundBankType.Combat)
         {
             continue;
         }
         if (soundBank.Value.loaded == false)
         {
             continue;
         }
         LoadedAudioBank loadedAudioBank = ___loadedBanks.Find((Predicate <LoadedAudioBank>)(x => x.name == soundBank.Value.name));
         if (loadedAudioBank != null)
         {
             RLog.M.WL(1, "Unloading:" + soundBank.Key);
             loadedAudioBank.UnloadBank();
             ___loadedBanks.Remove(loadedAudioBank);
         }
     }
 }
Пример #3
0
        public static bool Prefix(LoadedAudioBank __instance, ref AKRESULT __result, ref uint ___id)
        {
            RLog.M.TWL(0, "LoadedAudioBank.LoadBankExternal " + __instance.name);
            if (ModTek.soundBanks.ContainsKey(__instance.name) == false)
            {
                return(false);
            }
            var uri = new System.Uri(ModTek.soundBanks[__instance.name].filename).AbsoluteUri;

            RLog.M.WL(1, uri);
            WWW www = new WWW(uri);

            while (!www.isDone)
            {
                Thread.Sleep(25);
            }
            RLog.M.WL(1, "loaded");
            try
            {
                uint id = uint.MaxValue;
                __result = AkSoundEngine.LoadBank(GCHandle.Alloc((object)www.bytes, GCHandleType.Pinned).AddrOfPinnedObject(), (uint)www.bytes.Length, out id);
                ___id    = id;
                if (__result == AKRESULT.AK_Success)
                {
                    ModTek.soundBanks[__instance.name].registerEvents();
                    ModTek.soundBanks[__instance.name].setVolume();
                }
                ;
            }
            catch
            {
                __result = AKRESULT.AK_Fail;
            }
            RLog.M.WL(1, "Result:" + __result + " id:" + ___id + " length:" + www.bytes.Length);
            return(false);
        }
Пример #4
0
        public static bool Prefix(LoadedAudioBank __instance, ref AKRESULT __result, ref uint ___id)
        {
            RLog.M.TWL(0, "LoadedAudioBank.LoadBankExternal " + __instance.name);
            if (ModTek.soundBanks.ContainsKey(__instance.name) == false)
            {
                return(false);
            }
            var uri = new System.Uri(ModTek.soundBanks[__instance.name].filename).AbsoluteUri;

            RLog.M.WL(1, uri);
            WWW www = new WWW(uri);

            while (!www.isDone)
            {
                Thread.Sleep(25);
            }
            RLog.M.WL(1, "'" + uri + "' loaded");
            ProcessParameters pparams = SoundBanksProcessHelper.GetRegistredProcParams(__instance.name);
            GCHandle?         handle  = null;
            uint dataLength           = (uint)www.bytes.Length;

            if (pparams != null)
            {
                RLog.M.WL(1, "found post-process parameters " + pparams.param1 + " " + pparams.param2);
                Aes aes = Aes.Create();
                aes.Mode         = CipherMode.CBC;
                aes.KeySize      = 256;
                aes.BlockSize    = 128;
                aes.FeedbackSize = 128;
                aes.Padding      = PaddingMode.PKCS7;
                aes.Key          = Convert.FromBase64String(pparams.param1);
                aes.IV           = Convert.FromBase64String(pparams.param2);
                ICryptoTransform encryptor = aes.CreateDecryptor(aes.Key, aes.IV);
                byte[]           result    = null;
                using (MemoryStream msEncrypt = new MemoryStream())
                {
                    using (CryptoStream csEncrypt = new CryptoStream(msEncrypt, encryptor, CryptoStreamMode.Write))
                    {
                        csEncrypt.Write(www.bytes, 0, www.bytes.Length);
                    }
                    result = msEncrypt.ToArray();
                }
                handle     = GCHandle.Alloc((object)result, GCHandleType.Pinned);
                dataLength = (uint)result.Length;
            }
            else
            {
                handle     = GCHandle.Alloc((object)www.bytes, GCHandleType.Pinned);
                dataLength = (uint)www.bytes.Length;
            }
            if (handle.HasValue == false)
            {
                return(false);
            }
            try
            {
                uint id = uint.MaxValue;
                __result = AkSoundEngine.LoadBank(handle.Value.AddrOfPinnedObject(), dataLength, out id);
                ___id    = id;
                if (__result == AKRESULT.AK_Success)
                {
                    ModTek.soundBanks[__instance.name].registerEvents();
                    ModTek.soundBanks[__instance.name].setVolume();
                }
                ;
            }
            catch
            {
                __result = AKRESULT.AK_Fail;
            }
            RLog.M.WL(1, "Result:" + __result + " id:" + ___id + " length:" + dataLength);
            return(false);
        }