using System; using System.Collections; using System.Collections.Generic; using System.Diagnostics; using System.IO; using System.Reflection; using System.Runtime.CompilerServices; using System.Runtime.Versioning; using System.Security; using System.Security.Permissions; using System.Text; using BepInEx; using BepInEx.Configuration; using BepInEx.Logging; using HarmonyLib; using Microsoft.CodeAnalysis; using Photon.Pun; using UnityEngine; using UnityEngine.Audio; using UnityEngine.Networking; using UnityEngine.Rendering; [assembly: CompilationRelaxations(8)] [assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)] [assembly: Debuggable(DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints)] [assembly: TargetFramework(".NETStandard,Version=v2.1", FrameworkDisplayName = ".NET Standard 2.1")] [assembly: AssemblyCompany("clomonzer")] [assembly: AssemblyConfiguration("Release")] [assembly: AssemblyFileVersion("4.0.0.0")] [assembly: AssemblyInformationalVersion("4.0.0")] [assembly: AssemblyProduct("ChichaDoublePisse")] [assembly: AssemblyTitle("ChichaDoublePisse")] [assembly: SecurityPermission(SecurityAction.RequestMinimum, SkipVerification = true)] [assembly: AssemblyVersion("4.0.0.0")] [module: UnverifiableCode] [module: RefSafetyRules(11)] namespace Microsoft.CodeAnalysis { [CompilerGenerated] [Embedded] internal sealed class EmbeddedAttribute : Attribute { } } namespace System.Runtime.CompilerServices { [CompilerGenerated] [Embedded] [AttributeUsage(AttributeTargets.Module, AllowMultiple = false, Inherited = false)] internal sealed class RefSafetyRulesAttribute : Attribute { public readonly int Version; public RefSafetyRulesAttribute(int P_0) { Version = P_0; } } } namespace ChichaDoublePisse { public class DebugDumper : MonoBehaviour { private void Update() { //IL_0089: Unknown result type (might be due to invalid IL or missing references) //IL_00aa: Unknown result type (might be due to invalid IL or missing references) //IL_00d0: Unknown result type (might be due to invalid IL or missing references) //IL_00d5: Unknown result type (might be due to invalid IL or missing references) //IL_00ea: Unknown result type (might be due to invalid IL or missing references) //IL_010a: Unknown result type (might be due to invalid IL or missing references) //IL_0116: Unknown result type (might be due to invalid IL or missing references) //IL_0133: Unknown result type (might be due to invalid IL or missing references) //IL_0155: Unknown result type (might be due to invalid IL or missing references) //IL_0165: Unknown result type (might be due to invalid IL or missing references) //IL_0218: Unknown result type (might be due to invalid IL or missing references) //IL_0228: Unknown result type (might be due to invalid IL or missing references) if (!Input.GetKeyDown((KeyCode)290)) { return; } PlayerAvatar val = null; PlayerAvatar[] array = Object.FindObjectsOfType(); foreach (PlayerAvatar val2 in array) { if ((Object)(object)val2.photonView != (Object)null && val2.photonView.IsMine) { val = val2; break; } } if ((Object)(object)val == (Object)null) { Plugin.Logger.LogWarning((object)"[DUMP] Aucun PlayerAvatar local trouve."); return; } StringBuilder stringBuilder = new StringBuilder(); stringBuilder.AppendLine("========== DUMP JOUEUR =========="); stringBuilder.AppendLine($"Avatar pos monde : {((Component)val).transform.position}"); stringBuilder.AppendLine($"Avatar scale : {((Component)val).transform.lossyScale}"); Renderer[] componentsInChildren = ((Component)val).GetComponentsInChildren(); if (componentsInChildren.Length != 0) { Bounds bounds = componentsInChildren[0].bounds; Renderer[] array2 = componentsInChildren; foreach (Renderer val3 in array2) { ((Bounds)(ref bounds)).Encapsulate(val3.bounds); } stringBuilder.AppendLine($"Bounds monde : centre={((Bounds)(ref bounds)).center} taille={((Bounds)(ref bounds)).size}"); stringBuilder.AppendLine($">>> HAUTEUR PERSO : {((Bounds)(ref bounds)).size.y:F3} (unites monde)"); stringBuilder.AppendLine($">>> OFFSET TETE : {((Bounds)(ref bounds)).max.y - ((Component)val).transform.position.y:F3} au-dessus de l'origine"); } Animator componentInChildren = ((Component)val).GetComponentInChildren(); if ((Object)(object)componentInChildren != (Object)null) { stringBuilder.AppendLine($"Animator trouve. isHuman={componentInChildren.isHuman}"); if (componentInChildren.isHuman) { Transform boneTransform = componentInChildren.GetBoneTransform((HumanBodyBones)10); stringBuilder.AppendLine("Os Head (humanoid) : " + (((Object)(object)boneTransform != (Object)null) ? ((Object)boneTransform).name : "NULL")); } } else { stringBuilder.AppendLine("Aucun Animator trouve."); } stringBuilder.AppendLine("--- Transforms (nom | pos locale | hauteur relative) ---"); Transform[] componentsInChildren2 = ((Component)val).GetComponentsInChildren(true); foreach (Transform val4 in componentsInChildren2) { float num = val4.position.y - ((Component)val).transform.position.y; if (num > 0.3f) { stringBuilder.AppendLine($" {((Object)val4).name} | rel_Y={num:F3}"); } } Plugin.Logger.LogInfo((object)stringBuilder.ToString()); } } public class GoofySystem : MonoBehaviourPun { private const float DefaultHeight = 1.8f; private const float MinPlausibleHeight = 0.4f; private const float MaxPlausibleHeight = 12f; private PlayerAvatar _avatar; private PlayerAvatarVisuals _visuals; private Transform _head; private bool _ready; private bool _soundsReady; private float _playerHeight = 1.8f; private float _headOffsetY = 1.53f; private bool _chichaActive; private bool _pisseActive; private bool _petActive; private float _noiseRadius = 30f; private float _noiseMul = 1f; private float _lastNoise; private bool _inhaling; private float _inhaleTime; private bool _pisseBusy; private bool _petBusy; private Sound _sGlouglou; private Sound _sExpiration; private Sound _sBraguette; private Sound _sPisse; private Sound _sZip; private Sound _sPet; private GameObject _chichaModel; private ParticleSystem _smoke; private ParticleSystem _stream; private ParticleSystem _fart; private PhotonView PV { get { if (!((Object)(object)_avatar != (Object)null)) { return ((MonoBehaviourPun)this).photonView; } return _avatar.photonView; } } private bool Busy { get { if (!_inhaling && !_pisseBusy) { return _petBusy; } return true; } } public void Init(PlayerAvatar avatar) { _avatar = avatar; ((MonoBehaviour)this).StartCoroutine(SetupRoutine()); ((MonoBehaviour)this).StartCoroutine(SoundRoutine()); } private IEnumerator SetupRoutine() { yield return (object)new WaitForSeconds(0.75f); if (!((Object)(object)_avatar == (Object)null)) { _visuals = _avatar.playerAvatarVisuals; if ((Object)(object)_visuals == (Object)null && (Object)(object)((Component)_avatar).transform.parent != (Object)null) { _visuals = ((Component)((Component)_avatar).transform.parent).GetComponentInChildren(); } MeasurePlayer(); _head = FindHead(); BuildVisuals(); Plugin.Logger.LogInfo((object)($"[CDP] Setup : hauteur={_playerHeight:F2} offsetTete={_headOffsetY:F2} " + "tete=" + (((Object)(object)_head != (Object)null) ? ((Object)_head).name : "fallback"))); _ready = true; } } private IEnumerator SoundRoutine() { float t = 0f; while (((Object)(object)SoundLoader.Instance == (Object)null || !SoundLoader.Instance.Ready) && t < 20f) { t += Time.deltaTime; yield return null; } while (!_ready && t < 25f) { t += Time.deltaTime; yield return null; } if (!((Object)(object)_avatar == (Object)null)) { Transform parent = (((Object)(object)_head != (Object)null) ? _head : ((Component)_avatar).transform); _sGlouglou = SoundLoader.BuildSound("glouglou", parent); _sExpiration = SoundLoader.BuildSound("expiration", parent); _sBraguette = SoundLoader.BuildSound("braguette", ((Component)_avatar).transform); _sPisse = SoundLoader.BuildSound("pisse", ((Component)_avatar).transform); _sZip = SoundLoader.BuildSound("zip_remonte", ((Component)_avatar).transform); _sPet = SoundLoader.BuildSound("pet", ((Component)_avatar).transform); _soundsReady = true; Plugin.Logger.LogInfo((object)("[CDP] Sons prets (pet=" + ((_sPet != null) ? "ok" : "absent") + ").")); } } private void BuildVisuals() { //IL_006d: Unknown result type (might be due to invalid IL or missing references) //IL_0057: Unknown result type (might be due to invalid IL or missing references) //IL_007d: Unknown result type (might be due to invalid IL or missing references) //IL_0082: Unknown result type (might be due to invalid IL or missing references) //IL_008f: Unknown result type (might be due to invalid IL or missing references) //IL_00a5: Unknown result type (might be due to invalid IL or missing references) Transform parent = (((Object)(object)_head != (Object)null) ? _head : ((Component)_avatar).transform); _smoke = ProceduralAssets.BuildSmoke(parent); ((Component)_smoke).transform.localPosition = (((Object)(object)_head != (Object)null) ? new Vector3(0f, 0f, 0.22f) : new Vector3(0f, _headOffsetY, 0.22f)); MainModule main = _smoke.main; ((MainModule)(ref main)).startSize = new MinMaxCurve(0.12f, 0.3f); ((MainModule)(ref main)).startSpeed = new MinMaxCurve(0.7f, 1.8f); _stream = ProceduralAssets.BuildStream(((Component)_avatar).transform); ApplyStreamTransform(); ApplyStreamCollision(); _fart = ProceduralAssets.BuildFart(((Component)_avatar).transform); ApplyFartTransform(); _chichaModel = ProceduralAssets.BuildChicha(((Component)_avatar).transform); ApplyChichaTransform(); _chichaModel.SetActive(false); } private void ApplyChichaTransform() { //IL_003c: Unknown result type (might be due to invalid IL or missing references) //IL_0048: Unknown result type (might be due to invalid IL or missing references) //IL_00a2: Unknown result type (might be due to invalid IL or missing references) //IL_00cb: Unknown result type (might be due to invalid IL or missing references) if (!((Object)(object)_chichaModel == (Object)null)) { float num = _playerHeight * 0.45f * Mathf.Max(0.05f, Plugin.ChichaScale.Value); _chichaModel.transform.localScale = Vector3.one * (num / 0.4f); _chichaModel.transform.localPosition = new Vector3(_playerHeight * Plugin.ChichaOffsetX.Value * 0.55f, _playerHeight * Plugin.ChichaOffsetY.Value * 0.55f, _playerHeight * Plugin.ChichaOffsetZ.Value * 0.55f); _chichaModel.transform.localRotation = Quaternion.Euler(0f, Plugin.ChichaRotationY.Value, 0f); } } private void ApplyStreamTransform() { //IL_0033: Unknown result type (might be due to invalid IL or missing references) //IL_005c: Unknown result type (might be due to invalid IL or missing references) if (!((Object)(object)_stream == (Object)null)) { ((Component)_stream).transform.localPosition = new Vector3(0f, Plugin.PisseOffsetY.Value, Plugin.PisseOffsetZ.Value); ((Component)_stream).transform.localRotation = Quaternion.Euler(Plugin.PisseAngle.Value, 0f, 0f); } } private void ApplyFartTransform() { //IL_0034: Unknown result type (might be due to invalid IL or missing references) //IL_0058: Unknown result type (might be due to invalid IL or missing references) if (!((Object)(object)_fart == (Object)null)) { ((Component)_fart).transform.localPosition = new Vector3(0f, Plugin.PetOffsetY.Value, 0f - Plugin.PetOffsetZ.Value); ((Component)_fart).transform.localRotation = Quaternion.Euler(-8f, 180f, 0f); } } private void ApplyStreamCollision() { if (!((Object)(object)_stream == (Object)null)) { ApplyCollisionMask(_stream); } } private void ApplyCollisionMask(ParticleSystem ps) { //IL_0001: Unknown result type (might be due to invalid IL or missing references) //IL_0006: Unknown result type (might be due to invalid IL or missing references) //IL_0016: Unknown result type (might be due to invalid IL or missing references) //IL_009f: Unknown result type (might be due to invalid IL or missing references) CollisionModule collision = ps.collision; if (!Plugin.PisseIgnorerJoueur.Value) { ((CollisionModule)(ref collision)).collidesWith = LayerMask.op_Implicit(-1); return; } int num = 0; Transform val = (((Object)(object)((Component)_avatar).transform.parent != (Object)null) ? ((Component)_avatar).transform.parent : ((Component)_avatar).transform); Collider[] componentsInChildren = ((Component)val).GetComponentsInChildren(true); foreach (Collider val2 in componentsInChildren) { if (!((Object)(object)val2 == (Object)null)) { num |= 1 << ((Component)val2).gameObject.layer; } } if (num != 0) { ((CollisionModule)(ref collision)).collidesWith = LayerMask.op_Implicit(~num); } } private void MeasurePlayer() { //IL_0030: Unknown result type (might be due to invalid IL or missing references) //IL_0098: Unknown result type (might be due to invalid IL or missing references) //IL_007a: Unknown result type (might be due to invalid IL or missing references) //IL_006c: Unknown result type (might be due to invalid IL or missing references) //IL_0071: Unknown result type (might be due to invalid IL or missing references) //IL_00f3: Unknown result type (might be due to invalid IL or missing references) //IL_0108: Unknown result type (might be due to invalid IL or missing references) Component val = (Component)(((Object)(object)_visuals != (Object)null) ? ((object)_visuals) : ((object)_avatar)); Renderer[] componentsInChildren = val.GetComponentsInChildren(); if (componentsInChildren == null || componentsInChildren.Length == 0) { return; } bool flag = false; Bounds val2 = default(Bounds); Renderer[] array = componentsInChildren; foreach (Renderer val3 in array) { if (!((Object)(object)val3 == (Object)null) && !((Object)((Component)val3).gameObject).name.StartsWith("CDP_")) { if (!flag) { val2 = val3.bounds; flag = true; } else { ((Bounds)(ref val2)).Encapsulate(val3.bounds); } } } if (!flag) { return; } float y = ((Bounds)(ref val2)).size.y; if (y < 0.4f || y > 12f) { Plugin.Logger.LogWarning((object)$"[CDP] Hauteur mesuree aberrante ({y:F3}) — defaut utilise."); _playerHeight = 1.8f; _headOffsetY = 1.53f; return; } _playerHeight = y; _headOffsetY = ((Bounds)(ref val2)).max.y - ((Component)_avatar).transform.position.y; if (_headOffsetY < y * 0.3f) { _headOffsetY = y * 0.85f; } } private Transform FindHead() { Component val = (Component)(((Object)(object)_visuals != (Object)null) ? ((object)_visuals) : ((object)_avatar)); if ((Object)(object)val == (Object)null) { return null; } Animator componentInChildren = val.GetComponentInChildren(); if ((Object)(object)componentInChildren != (Object)null && componentInChildren.isHuman) { Transform boneTransform = componentInChildren.GetBoneTransform((HumanBodyBones)10); if ((Object)(object)boneTransform != (Object)null) { return boneTransform; } } Transform[] componentsInChildren = val.GetComponentsInChildren(true); foreach (Transform val2 in componentsInChildren) { string text = ((Object)val2).name.ToLowerInvariant(); if (text.Contains("head") || text.Contains("tete") || text.Contains("neck") || text.Contains("face")) { return val2; } } return null; } private void Update() { //IL_00f2: Unknown result type (might be due to invalid IL or missing references) if (!_ready) { return; } if (_soundsReady) { if (_sGlouglou != null) { _sGlouglou.PlayLoop(_chichaActive, 0.4f, 0.4f, 1f, 1f); } if (_sPisse != null) { _sPisse.PlayLoop(_pisseActive, 0.2f, 0.3f, 1f, 1f); } } if ((_chichaActive || _pisseActive || _petActive) && (Object)(object)_avatar != (Object)null) { float num = Mathf.Max(0.1f, Plugin.NoiseInterval.Value); if (Time.time - _lastNoise >= num) { _lastNoise = Time.time; string label = (_petActive ? "pet" : (_pisseActive ? "pisse" : "chicha")); NoiseMaker.Emit(((Component)_avatar).transform.position, _noiseRadius * _noiseMul, label); } } if (!((Object)(object)PV == (Object)null) && PV.IsMine && !((Object)(object)_avatar == (Object)null) && !_avatar.deadSet && (!((Object)(object)ChatManager.instance != (Object)null) || !ChatManager.instance.chatActive)) { HandleChichaInput(); HandlePisseInput(); HandlePetInput(); } } private void HandleChichaInput() { //IL_0016: Unknown result type (might be due to invalid IL or missing references) //IL_009d: Unknown result type (might be due to invalid IL or missing references) if (_pisseBusy || _petBusy) { return; } if (Input.GetKeyDown(Plugin.ChichaKey.Value) && !_inhaling) { _inhaling = true; _inhaleTime = 0f; ApplyChichaTransform(); PV.RPC("RPC_ChichaStart", (RpcTarget)0, new object[2] { Plugin.NoiseRadius.Value, Plugin.VolGlouglou.Value }); } else if (_inhaling) { _inhaleTime += Time.deltaTime; if (Input.GetKeyUp(Plugin.ChichaKey.Value)) { _inhaling = false; float num = Mathf.Clamp01(_inhaleTime / 2.5f); PV.RPC("RPC_ChichaExhale", (RpcTarget)0, new object[2] { num, Plugin.VolExpiration.Value }); } } } [PunRPC] private void RPC_ChichaStart(float noiseRadius, float volGlouglou) { _noiseRadius = noiseRadius; _noiseMul = 1f; _chichaActive = true; _lastNoise = 0f; SoundLoader.SetVolume(_sGlouglou, volGlouglou); if ((Object)(object)_chichaModel != (Object)null) { _chichaModel.SetActive(true); } } [PunRPC] private void RPC_ChichaExhale(float intensity, float volExpiration) { //IL_0088: Unknown result type (might be due to invalid IL or missing references) //IL_008d: Unknown result type (might be due to invalid IL or missing references) //IL_00aa: Unknown result type (might be due to invalid IL or missing references) //IL_00d0: Unknown result type (might be due to invalid IL or missing references) //IL_0054: Unknown result type (might be due to invalid IL or missing references) //IL_0108: Unknown result type (might be due to invalid IL or missing references) _chichaActive = false; if ((Object)(object)_chichaModel != (Object)null) { _chichaModel.SetActive(false); } SoundLoader.SetVolume(_sExpiration, volExpiration); if (_sExpiration != null && (Object)(object)_avatar != (Object)null) { _sExpiration.Play(((Component)_avatar).transform.position, 1f, 1f, 1f, 1f); } if (!((Object)(object)_smoke == (Object)null)) { MainModule main = _smoke.main; ((MainModule)(ref main)).startLifetime = new MinMaxCurve(1.2f + intensity * 1.5f, 2.4f + intensity * 2f); ((MainModule)(ref main)).startSize = new MinMaxCurve(0.1f + intensity * 0.1f, 0.24f + intensity * 0.18f); Transform val = (((Object)(object)_head != (Object)null) ? _head : ((Component)_avatar).transform); ((Component)_smoke).transform.rotation = val.rotation; _smoke.Play(); } } private void HandlePisseInput() { //IL_000e: Unknown result type (might be due to invalid IL or missing references) if (!Busy && Input.GetKeyDown(Plugin.PisseKey.Value)) { _pisseBusy = true; PV.RPC("RPC_PisseStart", (RpcTarget)0, new object[4] { Plugin.NoiseRadius.Value, Plugin.VolBraguette.Value, Plugin.VolPisse.Value, Plugin.VolZip.Value }); } } [PunRPC] private void RPC_PisseStart(float noiseRadius, float volBraguette, float volPisse, float volZip) { _noiseRadius = noiseRadius; _noiseMul = 1f; SoundLoader.SetVolume(_sBraguette, volBraguette); SoundLoader.SetVolume(_sPisse, volPisse); SoundLoader.SetVolume(_sZip, volZip); ((MonoBehaviour)this).StartCoroutine(PisseRoutine()); } private IEnumerator PisseRoutine() { if (_sBraguette != null && (Object)(object)_avatar != (Object)null) { _sBraguette.Play(((Component)_avatar).transform.position, 1f, 1f, 1f, 1f); } yield return (object)new WaitForSeconds(0.6f); if ((Object)(object)_stream != (Object)null && (Object)(object)_avatar != (Object)null) { ApplyStreamTransform(); ApplyStreamCollision(); Transform val = (((Object)(object)_head != (Object)null) ? _head : ((Component)_avatar).transform); Vector3 forward = val.forward; ((Component)_stream).transform.rotation = Quaternion.LookRotation(new Vector3(forward.x, Mathf.Clamp(forward.y, -0.9f, 0.15f), forward.z)); _stream.Play(); Plugin.Logger.LogInfo((object)($"[CDP] Jet emis depuis {((Component)_stream).transform.position} " + $"(joueur {((Component)_avatar).transform.position}, " + $"ecart {Vector3.Distance(((Component)_stream).transform.position, ((Component)_avatar).transform.position):F2})")); } _pisseActive = true; _lastNoise = 0f; yield return (object)new WaitForSeconds(8f); _pisseActive = false; if ((Object)(object)_stream != (Object)null) { _stream.Stop(true, (ParticleSystemStopBehavior)1); } if (_sZip != null && (Object)(object)_avatar != (Object)null) { _sZip.Play(((Component)_avatar).transform.position, 1f, 1f, 1f, 1f); } yield return (object)new WaitForSeconds(0.5f); if ((Object)(object)PV != (Object)null && PV.IsMine) { _pisseBusy = false; } } private void HandlePetInput() { //IL_000e: Unknown result type (might be due to invalid IL or missing references) if (!Busy && Input.GetKeyDown(Plugin.PetKey.Value)) { _petBusy = true; PV.RPC("RPC_PetStart", (RpcTarget)0, new object[3] { Plugin.NoiseRadius.Value, Plugin.VolPet.Value, Plugin.PetNoiseMultiplier.Value }); } } [PunRPC] private void RPC_PetStart(float noiseRadius, float volPet, float noiseMul) { _noiseRadius = noiseRadius; _noiseMul = Mathf.Max(0.1f, noiseMul); SoundLoader.SetVolume(_sPet, volPet); ((MonoBehaviour)this).StartCoroutine(PetRoutine()); } private IEnumerator PetRoutine() { if (_sPet != null && (Object)(object)_avatar != (Object)null) { _sPet.Play(((Component)_avatar).transform.position, 1f, 1f, 1f, 1f); } if ((Object)(object)_fart != (Object)null && (Object)(object)_avatar != (Object)null) { ApplyFartTransform(); ApplyCollisionMask(_fart); Vector3 val = -((Component)_avatar).transform.forward; Transform transform = ((Component)_fart).transform; Vector3 val2 = new Vector3(val.x, -0.15f, val.z); transform.rotation = Quaternion.LookRotation(((Vector3)(ref val2)).normalized); _fart.Play(); } _petActive = true; _lastNoise = 0f; yield return (object)new WaitForSeconds(Mathf.Max(0.3f, Plugin.PetDuration.Value)); _petActive = false; if ((Object)(object)_fart != (Object)null) { _fart.Stop(true, (ParticleSystemStopBehavior)1); } yield return (object)new WaitForSeconds(0.4f); if ((Object)(object)PV != (Object)null && PV.IsMine) { _petBusy = false; } } private void OnDestroy() { _chichaActive = false; _pisseActive = false; _petActive = false; if ((Object)(object)_chichaModel != (Object)null) { Object.Destroy((Object)(object)_chichaModel); } if ((Object)(object)_smoke != (Object)null) { Object.Destroy((Object)(object)((Component)_smoke).gameObject); } if ((Object)(object)_stream != (Object)null) { Object.Destroy((Object)(object)((Component)_stream).gameObject); } if ((Object)(object)_fart != (Object)null) { Object.Destroy((Object)(object)((Component)_fart).gameObject); } } } public static class NoiseMaker { private static float _lastLog; public static void Emit(Vector3 position, float radius, string label) { //IL_0020: Unknown result type (might be due to invalid IL or missing references) if (Plugin.NoiseEnabled.Value && !((Object)(object)EnemyDirector.instance == (Object)null)) { EnemyDirector.instance.SetInvestigate(position, radius, false); if (Time.time - _lastLog > 1f) { _lastLog = Time.time; Plugin.Logger.LogInfo((object)$"[CDP] Bruit '{label}' rayon={radius:F0}"); } } } } [HarmonyPatch(typeof(PlayerAvatar))] internal class PlayerAvatarPatch { [HarmonyPostfix] [HarmonyPatch("Start")] private static void Start_Postfix(PlayerAvatar __instance) { //IL_008c: Unknown result type (might be due to invalid IL or missing references) //IL_00a5: Unknown result type (might be due to invalid IL or missing references) if (!GameManager.Multiplayer()) { Plugin.Logger.LogInfo((object)"Partie solo : Chicha Double Pisse desactive."); return; } if ((Object)(object)GameManager.instance != (Object)null && GameManager.instance.connectRandom) { Plugin.Logger.LogWarning((object)"ATTENTION : lobby public detecte. Les joueurs sans le mod vont recevoir des RPC inconnus et spammer des erreurs. Utilise ce mod en lobby prive avec des potes qui l'ont installe."); } GoofySystem goofySystem = ((Component)__instance).GetComponent(); if ((Object)(object)goofySystem == (Object)null) { goofySystem = ((Component)__instance).gameObject.AddComponent(); } goofySystem.Init(__instance); if ((Object)(object)__instance.photonView != (Object)null && __instance.photonView.IsMine) { Plugin.Logger.LogInfo((object)($"Chicha Double Pisse actif — [{Plugin.ChichaKey.Value}] chicha, " + $"[{Plugin.PisseKey.Value}] pisse.")); } } } [BepInPlugin("clomonzer.chichadoublepisse", "Chicha Double Pisse", "4.0.0")] public class Plugin : BaseUnityPlugin { public const string PluginGuid = "clomonzer.chichadoublepisse"; public const string PluginName = "Chicha Double Pisse"; public const string PluginVersion = "4.0.0"; public const string PluginAuthor = "clomonzer"; public const float PisseDuration = 8f; internal Harmony Harmony; public static ConfigEntry ChichaKey; public static ConfigEntry PisseKey; public static ConfigEntry PetKey; public static ConfigEntry Volume; public static ConfigEntry VolGlouglou; public static ConfigEntry VolExpiration; public static ConfigEntry VolBraguette; public static ConfigEntry VolPisse; public static ConfigEntry VolZip; public static ConfigEntry VolPet; public static ConfigEntry NoiseEnabled; public static ConfigEntry NoiseRadius; public static ConfigEntry NoiseInterval; public static ConfigEntry ChichaScale; public static ConfigEntry ChichaOffsetX; public static ConfigEntry ChichaOffsetY; public static ConfigEntry ChichaOffsetZ; public static ConfigEntry ChichaRotationY; public static ConfigEntry PisseOffsetY; public static ConfigEntry PisseOffsetZ; public static ConfigEntry PisseAngle; public static ConfigEntry PisseIgnorerJoueur; public static ConfigEntry PetOffsetY; public static ConfigEntry PetOffsetZ; public static ConfigEntry PetDuration; public static ConfigEntry PetNoiseMultiplier; internal static Plugin Instance { get; private set; } internal static ManualLogSource Logger => Instance._log; private ManualLogSource _log => ((BaseUnityPlugin)this).Logger; public static string SoundsFolder { get; private set; } private void Awake() { //IL_043b: Unknown result type (might be due to invalid IL or missing references) //IL_0445: Expected O, but got Unknown //IL_0464: Unknown result type (might be due to invalid IL or missing references) //IL_0473: Unknown result type (might be due to invalid IL or missing references) Instance = this; ((Component)this).gameObject.transform.parent = null; ((Object)((Component)this).gameObject).hideFlags = (HideFlags)61; string directoryName = Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location); string text = Path.Combine(directoryName, "sounds"); SoundsFolder = ((Directory.Exists(text) && Directory.GetFiles(text).Length != 0) ? text : directoryName); ChichaKey = ((BaseUnityPlugin)this).Config.Bind("Touches", "Chicha", (KeyCode)98, "Maintenir pour tirer sur la chicha. Relacher pour recracher."); PisseKey = ((BaseUnityPlugin)this).Config.Bind("Touches", "Pisse", (KeyCode)110, "Appuyer pour pisser (duree fixe de 8s)."); PetKey = ((BaseUnityPlugin)this).Config.Bind("Touches", "Pet", (KeyCode)103, "Appuyer pour peter."); Volume = ((BaseUnityPlugin)this).Config.Bind("Audio", "VolumeGeneral", 0.8f, "Volume global. Reglage PERSONNEL : n'affecte que ce que TU entends."); VolGlouglou = ((BaseUnityPlugin)this).Config.Bind("Volumes", "Glouglou", 2.5f, "Volume du glouglou de la chicha. Monte par defaut car ce son est souvent enregistre tres bas. Transmis aux autres joueurs : ton reglage vaut pour tout le monde."); VolExpiration = ((BaseUnityPlugin)this).Config.Bind("Volumes", "Expiration", 1f, "Volume du souffle quand tu recraches. Transmis aux autres joueurs."); VolBraguette = ((BaseUnityPlugin)this).Config.Bind("Volumes", "Braguette", 1f, "Volume de la braguette qui descend. Transmis aux autres joueurs."); VolPisse = ((BaseUnityPlugin)this).Config.Bind("Volumes", "Pisse", 1f, "Volume du jet. Transmis aux autres joueurs."); VolZip = ((BaseUnityPlugin)this).Config.Bind("Volumes", "BraguetteRemontee", 1f, "Volume de la braguette qui remonte. Transmis aux autres joueurs."); VolPet = ((BaseUnityPlugin)this).Config.Bind("Volumes", "Pet", 1f, "Volume du pet. Transmis aux autres joueurs."); NoiseEnabled = ((BaseUnityPlugin)this).Config.Bind("Bruit", "AlerterLesMonstres", true, "false = mod purement cosmetique."); NoiseRadius = ((BaseUnityPlugin)this).Config.Bind("Bruit", "Rayon", 30f, "Rayon d'alerte. Reperes : 10 = ver, 15 = vache, 30 = de qui roule. La valeur de CELUI QUI DECLENCHE fait foi."); NoiseInterval = ((BaseUnityPlugin)this).Config.Bind("Bruit", "Intervalle", 0.7f, "Secondes entre deux alertes pendant un bruit continu. Trop bas, le Chasseur reset sa visee en boucle et tire a cote. Monte cette valeur s'il rate ses tirs."); ChichaScale = ((BaseUnityPlugin)this).Config.Bind("Chicha", "Echelle", 1f, "Taille de la chicha. Monte si elle est trop petite."); ChichaOffsetX = ((BaseUnityPlugin)this).Config.Bind("Chicha", "DecalageX", 0.5f, "Decalage lateral (+ = a droite du joueur)."); ChichaOffsetY = ((BaseUnityPlugin)this).Config.Bind("Chicha", "DecalageY", 0f, "Decalage vertical (+ = vers le haut)."); ChichaOffsetZ = ((BaseUnityPlugin)this).Config.Bind("Chicha", "DecalageZ", 0.4f, "Decalage avant/arriere (+ = devant le joueur)."); ChichaRotationY = ((BaseUnityPlugin)this).Config.Bind("Chicha", "RotationY", 180f, "Rotation autour de l'axe vertical, en degres."); PisseOffsetY = ((BaseUnityPlugin)this).Config.Bind("Pisse", "HauteurDepart", 0.55f, "Hauteur du point de depart, en UNITES ABSOLUES (pas en fraction de la taille du joueur : la mesure n'etait pas fiable et projetait le jet a plusieurs metres devant)."); PisseOffsetZ = ((BaseUnityPlugin)this).Config.Bind("Pisse", "DistanceDevant", 0.4f, "Distance devant le joueur, en UNITES ABSOLUES. Si le jet apparait loin de toi (dans un mur, sur une porte), BAISSE. S'il stagne sur place, monte legerement."); PisseAngle = ((BaseUnityPlugin)this).Config.Bind("Pisse", "AngleDescente", 18f, "Inclinaison vers le bas, en degres. 0 = horizontal."); PisseIgnorerJoueur = ((BaseUnityPlugin)this).Config.Bind("Pisse", "IgnorerCollisionJoueur", true, "Empeche les particules de rebondir sur les joueurs. Si le jet traverse les MURS, passe a false."); PetOffsetY = ((BaseUnityPlugin)this).Config.Bind("Pet", "HauteurDepart", 0.5f, "Hauteur du point de depart, en unites absolues."); PetOffsetZ = ((BaseUnityPlugin)this).Config.Bind("Pet", "DistanceDerriere", 0.35f, "Distance DERRIERE le joueur, en unites absolues."); PetDuration = ((BaseUnityPlugin)this).Config.Bind("Pet", "Duree", 1.6f, "Duree de la projection, en secondes."); PetNoiseMultiplier = ((BaseUnityPlugin)this).Config.Bind("Pet", "MultiplicateurBruit", 1.3f, "Le pet est plus bruyant que la chicha. 1.0 = identique."); if (!Directory.Exists(SoundsFolder)) { Directory.CreateDirectory(SoundsFolder); } Logger.LogInfo((object)("Dossier sons : " + SoundsFolder)); ((Component)this).gameObject.AddComponent(); Harmony = new Harmony("clomonzer.chichadoublepisse"); Harmony.PatchAll(); Logger.LogInfo((object)("Chicha Double Pisse v4.0.0 par clomonzer — " + $"[{ChichaKey.Value}] chicha, [{PisseKey.Value}] pisse.")); } } public static class ProceduralAssets { private static Material _unlit; private static Material GetMat(Color c) { //IL_0044: Unknown result type (might be due to invalid IL or missing references) //IL_004a: Expected O, but got Unknown //IL_004b: Unknown result type (might be due to invalid IL or missing references) //IL_0035: Unknown result type (might be due to invalid IL or missing references) //IL_003f: Expected O, but got Unknown if ((Object)(object)_unlit == (Object)null) { Shader val = Shader.Find("Sprites/Default") ?? Shader.Find("Unlit/Color") ?? Shader.Find("Standard"); _unlit = new Material(val); } Material val2 = new Material(_unlit); val2.color = c; return val2; } private static GameObject Primitive(PrimitiveType type, Transform parent, Vector3 localPos, Vector3 localScale, Color color) { //IL_0000: Unknown result type (might be due to invalid IL or missing references) //IL_0030: Unknown result type (might be due to invalid IL or missing references) //IL_003c: Unknown result type (might be due to invalid IL or missing references) //IL_0053: Unknown result type (might be due to invalid IL or missing references) GameObject val = GameObject.CreatePrimitive(type); Collider component = val.GetComponent(); if ((Object)(object)component != (Object)null) { Object.Destroy((Object)(object)component); } val.transform.SetParent(parent, false); val.transform.localPosition = localPos; val.transform.localScale = localScale; Renderer component2 = val.GetComponent(); if ((Object)(object)component2 != (Object)null) { component2.material = GetMat(color); component2.shadowCastingMode = (ShadowCastingMode)0; component2.receiveShadows = false; } return val; } public static GameObject BuildChicha(Transform parent) { //IL_0005: Unknown result type (might be due to invalid IL or missing references) //IL_000b: Expected O, but got Unknown //IL_009a: Unknown result type (might be due to invalid IL or missing references) //IL_00ae: Unknown result type (might be due to invalid IL or missing references) //IL_00b3: Unknown result type (might be due to invalid IL or missing references) //IL_00d0: Unknown result type (might be due to invalid IL or missing references) //IL_00e4: Unknown result type (might be due to invalid IL or missing references) //IL_00e9: Unknown result type (might be due to invalid IL or missing references) //IL_0106: Unknown result type (might be due to invalid IL or missing references) //IL_011a: Unknown result type (might be due to invalid IL or missing references) //IL_011f: Unknown result type (might be due to invalid IL or missing references) //IL_013c: Unknown result type (might be due to invalid IL or missing references) //IL_0150: Unknown result type (might be due to invalid IL or missing references) //IL_0155: Unknown result type (might be due to invalid IL or missing references) //IL_0172: Unknown result type (might be due to invalid IL or missing references) //IL_0186: Unknown result type (might be due to invalid IL or missing references) //IL_018b: Unknown result type (might be due to invalid IL or missing references) //IL_0198: Unknown result type (might be due to invalid IL or missing references) //IL_019f: Expected O, but got Unknown //IL_01ee: Unknown result type (might be due to invalid IL or missing references) //IL_0202: Unknown result type (might be due to invalid IL or missing references) //IL_0207: Unknown result type (might be due to invalid IL or missing references) //IL_022e: Unknown result type (might be due to invalid IL or missing references) //IL_025d: Unknown result type (might be due to invalid IL or missing references) //IL_0271: Unknown result type (might be due to invalid IL or missing references) //IL_0276: Unknown result type (might be due to invalid IL or missing references) //IL_0290: Unknown result type (might be due to invalid IL or missing references) //IL_02a0: Unknown result type (might be due to invalid IL or missing references) //IL_02aa: Unknown result type (might be due to invalid IL or missing references) GameObject val = new GameObject("ChichaModel"); val.transform.SetParent(parent, false); Color color = default(Color); ((Color)(ref color))..ctor(0.25f, 0.55f, 0.75f, 1f); Color color2 = default(Color); ((Color)(ref color2))..ctor(0.72f, 0.7f, 0.66f, 1f); Color color3 = default(Color); ((Color)(ref color3))..ctor(0.15f, 0.15f, 0.18f, 1f); Color color4 = default(Color); ((Color)(ref color4))..ctor(0.85f, 0.3f, 0.1f, 1f); Primitive((PrimitiveType)0, val.transform, new Vector3(0f, 0.06f, 0f), new Vector3(0.13f, 0.13f, 0.13f), color); Primitive((PrimitiveType)2, val.transform, new Vector3(0f, 0.2f, 0f), new Vector3(0.022f, 0.11f, 0.022f), color2); Primitive((PrimitiveType)2, val.transform, new Vector3(0f, 0.17f, 0f), new Vector3(0.075f, 0.006f, 0.075f), color2); Primitive((PrimitiveType)2, val.transform, new Vector3(0f, 0.315f, 0f), new Vector3(0.045f, 0.028f, 0.045f), color2); Primitive((PrimitiveType)3, val.transform, new Vector3(0f, 0.35f, 0f), new Vector3(0.04f, 0.012f, 0.04f), color4); GameObject val2 = new GameObject("Hose"); val2.transform.SetParent(val.transform, false); for (int i = 0; i < 5; i++) { float num = (float)i / 4f; GameObject val3 = Primitive((PrimitiveType)2, val2.transform, new Vector3(0.05f + num * 0.1f, 0.2f + num * 0.05f, 0f), new Vector3(0.012f, 0.035f, 0.012f), color3); val3.transform.localRotation = Quaternion.Euler(0f, 0f, 55f - num * 25f); } Primitive((PrimitiveType)2, val2.transform, new Vector3(0.17f, 0.27f, 0f), new Vector3(0.016f, 0.03f, 0.016f), color2).transform.localRotation = Quaternion.Euler(0f, 0f, 25f); val.transform.localScale = Vector3.one * 1.4f; return val; } public static ParticleSystem BuildSmoke(Transform parent) { //IL_0005: Unknown result type (might be due to invalid IL or missing references) //IL_000b: Expected O, but got Unknown //IL_0028: Unknown result type (might be due to invalid IL or missing references) //IL_002d: Unknown result type (might be due to invalid IL or missing references) //IL_004e: Unknown result type (might be due to invalid IL or missing references) //IL_0064: Unknown result type (might be due to invalid IL or missing references) //IL_007a: Unknown result type (might be due to invalid IL or missing references) //IL_009a: Unknown result type (might be due to invalid IL or missing references) //IL_00b3: Unknown result type (might be due to invalid IL or missing references) //IL_00b8: Unknown result type (might be due to invalid IL or missing references) //IL_00c9: Unknown result type (might be due to invalid IL or missing references) //IL_00f0: Unknown result type (might be due to invalid IL or missing references) //IL_00f5: Unknown result type (might be due to invalid IL or missing references) //IL_00fd: Unknown result type (might be due to invalid IL or missing references) //IL_0118: Unknown result type (might be due to invalid IL or missing references) //IL_011d: Unknown result type (might be due to invalid IL or missing references) //IL_012b: Unknown result type (might be due to invalid IL or missing references) //IL_0130: Unknown result type (might be due to invalid IL or missing references) //IL_013e: Unknown result type (might be due to invalid IL or missing references) //IL_0143: Unknown result type (might be due to invalid IL or missing references) //IL_014e: Unknown result type (might be due to invalid IL or missing references) //IL_0153: Unknown result type (might be due to invalid IL or missing references) //IL_0176: Unknown result type (might be due to invalid IL or missing references) //IL_017b: Unknown result type (might be due to invalid IL or missing references) //IL_0197: Unknown result type (might be due to invalid IL or missing references) //IL_019c: Unknown result type (might be due to invalid IL or missing references) //IL_01ad: Unknown result type (might be due to invalid IL or missing references) //IL_01b2: Unknown result type (might be due to invalid IL or missing references) //IL_01b7: Unknown result type (might be due to invalid IL or missing references) //IL_01be: Expected O, but got Unknown //IL_01c7: Unknown result type (might be due to invalid IL or missing references) //IL_01d2: Unknown result type (might be due to invalid IL or missing references) //IL_01d7: Unknown result type (might be due to invalid IL or missing references) //IL_01e1: Unknown result type (might be due to invalid IL or missing references) //IL_01e8: Expected O, but got Unknown //IL_01f2: Unknown result type (might be due to invalid IL or missing references) //IL_01fc: Unknown result type (might be due to invalid IL or missing references) //IL_0201: Unknown result type (might be due to invalid IL or missing references) //IL_0208: Unknown result type (might be due to invalid IL or missing references) //IL_0212: Unknown result type (might be due to invalid IL or missing references) //IL_0217: Unknown result type (might be due to invalid IL or missing references) //IL_022e: Unknown result type (might be due to invalid IL or missing references) //IL_0233: Unknown result type (might be due to invalid IL or missing references) //IL_0244: Unknown result type (might be due to invalid IL or missing references) //IL_0249: Unknown result type (might be due to invalid IL or missing references) //IL_025a: Unknown result type (might be due to invalid IL or missing references) //IL_025f: Unknown result type (might be due to invalid IL or missing references) //IL_026d: Unknown result type (might be due to invalid IL or missing references) //IL_0295: Unknown result type (might be due to invalid IL or missing references) GameObject val = new GameObject("CDP_Smoke"); val.transform.SetParent(parent, false); ParticleSystem val2 = val.AddComponent(); val2.Stop(true, (ParticleSystemStopBehavior)0); MainModule main = val2.main; ((MainModule)(ref main)).duration = 2f; ((MainModule)(ref main)).loop = false; ((MainModule)(ref main)).startLifetime = new MinMaxCurve(1.6f, 3.2f); ((MainModule)(ref main)).startSpeed = new MinMaxCurve(0.7f, 1.8f); ((MainModule)(ref main)).startSize = new MinMaxCurve(0.12f, 0.3f); ((MainModule)(ref main)).startColor = new MinMaxGradient(new Color(0.92f, 0.92f, 0.95f, 0.55f), new Color(0.8f, 0.82f, 0.88f, 0.35f)); ((MainModule)(ref main)).gravityModifier = MinMaxCurve.op_Implicit(-0.06f); ((MainModule)(ref main)).simulationSpace = (ParticleSystemSimulationSpace)1; ((MainModule)(ref main)).playOnAwake = false; ((MainModule)(ref main)).maxParticles = 220; EmissionModule emission = val2.emission; ((EmissionModule)(ref emission)).rateOverTime = MinMaxCurve.op_Implicit(0f); ((EmissionModule)(ref emission)).SetBursts((Burst[])(object)new Burst[3] { new Burst(0f, (short)26), new Burst(0.15f, (short)18), new Burst(0.35f, (short)10) }); ShapeModule shape = val2.shape; ((ShapeModule)(ref shape)).shapeType = (ParticleSystemShapeType)4; ((ShapeModule)(ref shape)).angle = 14f; ((ShapeModule)(ref shape)).radius = 0.045f; SizeOverLifetimeModule sizeOverLifetime = val2.sizeOverLifetime; ((SizeOverLifetimeModule)(ref sizeOverLifetime)).enabled = true; AnimationCurve val3 = new AnimationCurve((Keyframe[])(object)new Keyframe[2] { new Keyframe(0f, 0.35f), new Keyframe(1f, 1f) }); ((SizeOverLifetimeModule)(ref sizeOverLifetime)).size = new MinMaxCurve(1f, val3); ColorOverLifetimeModule colorOverLifetime = val2.colorOverLifetime; ((ColorOverLifetimeModule)(ref colorOverLifetime)).enabled = true; Gradient val4 = new Gradient(); val4.SetKeys((GradientColorKey[])(object)new GradientColorKey[2] { new GradientColorKey(Color.white, 0f), new GradientColorKey(Color.white, 1f) }, (GradientAlphaKey[])(object)new GradientAlphaKey[3] { new GradientAlphaKey(0.6f, 0f), new GradientAlphaKey(0.45f, 0.3f), new GradientAlphaKey(0f, 1f) }); ((ColorOverLifetimeModule)(ref colorOverLifetime)).color = new MinMaxGradient(val4); ParticleSystemRenderer component = val.GetComponent(); ((Renderer)component).material = GetMat(new Color(1f, 1f, 1f, 0.5f)); component.renderMode = (ParticleSystemRenderMode)0; return val2; } public static ParticleSystem BuildFart(Transform parent) { //IL_0005: Unknown result type (might be due to invalid IL or missing references) //IL_000b: Expected O, but got Unknown //IL_0028: Unknown result type (might be due to invalid IL or missing references) //IL_002d: Unknown result type (might be due to invalid IL or missing references) //IL_004e: Unknown result type (might be due to invalid IL or missing references) //IL_0064: Unknown result type (might be due to invalid IL or missing references) //IL_007a: Unknown result type (might be due to invalid IL or missing references) //IL_009a: Unknown result type (might be due to invalid IL or missing references) //IL_00b3: Unknown result type (might be due to invalid IL or missing references) //IL_00b8: Unknown result type (might be due to invalid IL or missing references) //IL_00c9: Unknown result type (might be due to invalid IL or missing references) //IL_00f0: Unknown result type (might be due to invalid IL or missing references) //IL_00f5: Unknown result type (might be due to invalid IL or missing references) //IL_00fd: Unknown result type (might be due to invalid IL or missing references) //IL_0118: Unknown result type (might be due to invalid IL or missing references) //IL_011d: Unknown result type (might be due to invalid IL or missing references) //IL_012b: Unknown result type (might be due to invalid IL or missing references) //IL_0130: Unknown result type (might be due to invalid IL or missing references) //IL_013e: Unknown result type (might be due to invalid IL or missing references) //IL_0143: Unknown result type (might be due to invalid IL or missing references) //IL_014e: Unknown result type (might be due to invalid IL or missing references) //IL_0153: Unknown result type (might be due to invalid IL or missing references) //IL_0176: Unknown result type (might be due to invalid IL or missing references) //IL_017b: Unknown result type (might be due to invalid IL or missing references) //IL_019e: Unknown result type (might be due to invalid IL or missing references) //IL_01a3: Unknown result type (might be due to invalid IL or missing references) //IL_01b4: Unknown result type (might be due to invalid IL or missing references) //IL_01b9: Unknown result type (might be due to invalid IL or missing references) //IL_01ca: Unknown result type (might be due to invalid IL or missing references) //IL_01cf: Unknown result type (might be due to invalid IL or missing references) //IL_01d4: Unknown result type (might be due to invalid IL or missing references) //IL_01de: Expected O, but got Unknown //IL_01d9: Unknown result type (might be due to invalid IL or missing references) //IL_01e4: Unknown result type (might be due to invalid IL or missing references) //IL_01e9: Unknown result type (might be due to invalid IL or missing references) //IL_01f3: Unknown result type (might be due to invalid IL or missing references) //IL_01fa: Expected O, but got Unknown //IL_0213: Unknown result type (might be due to invalid IL or missing references) //IL_021d: Unknown result type (might be due to invalid IL or missing references) //IL_0222: Unknown result type (might be due to invalid IL or missing references) //IL_0238: Unknown result type (might be due to invalid IL or missing references) //IL_0242: Unknown result type (might be due to invalid IL or missing references) //IL_0247: Unknown result type (might be due to invalid IL or missing references) //IL_025e: Unknown result type (might be due to invalid IL or missing references) //IL_0263: Unknown result type (might be due to invalid IL or missing references) //IL_0274: Unknown result type (might be due to invalid IL or missing references) //IL_0279: Unknown result type (might be due to invalid IL or missing references) //IL_028a: Unknown result type (might be due to invalid IL or missing references) //IL_028f: Unknown result type (might be due to invalid IL or missing references) //IL_029d: Unknown result type (might be due to invalid IL or missing references) //IL_02a8: Unknown result type (might be due to invalid IL or missing references) //IL_02ad: Unknown result type (might be due to invalid IL or missing references) //IL_02be: Unknown result type (might be due to invalid IL or missing references) //IL_02d5: Unknown result type (might be due to invalid IL or missing references) //IL_02da: Unknown result type (might be due to invalid IL or missing references) //IL_02fb: Unknown result type (might be due to invalid IL or missing references) //IL_030c: Unknown result type (might be due to invalid IL or missing references) //IL_031d: Unknown result type (might be due to invalid IL or missing references) //IL_0345: Unknown result type (might be due to invalid IL or missing references) GameObject val = new GameObject("CDP_Fart"); val.transform.SetParent(parent, false); ParticleSystem val2 = val.AddComponent(); val2.Stop(true, (ParticleSystemStopBehavior)0); MainModule main = val2.main; ((MainModule)(ref main)).duration = 2f; ((MainModule)(ref main)).loop = false; ((MainModule)(ref main)).startLifetime = new MinMaxCurve(1f, 2.2f); ((MainModule)(ref main)).startSpeed = new MinMaxCurve(2.5f, 6f); ((MainModule)(ref main)).startSize = new MinMaxCurve(0.06f, 0.2f); ((MainModule)(ref main)).startColor = new MinMaxGradient(new Color(0.42f, 0.26f, 0.1f, 0.9f), new Color(0.28f, 0.16f, 0.06f, 0.8f)); ((MainModule)(ref main)).gravityModifier = MinMaxCurve.op_Implicit(0.55f); ((MainModule)(ref main)).simulationSpace = (ParticleSystemSimulationSpace)1; ((MainModule)(ref main)).playOnAwake = false; ((MainModule)(ref main)).maxParticles = 500; EmissionModule emission = val2.emission; ((EmissionModule)(ref emission)).rateOverTime = MinMaxCurve.op_Implicit(45f); ((EmissionModule)(ref emission)).SetBursts((Burst[])(object)new Burst[3] { new Burst(0f, (short)45), new Burst(0.08f, (short)25), new Burst(0.2f, (short)15) }); ShapeModule shape = val2.shape; ((ShapeModule)(ref shape)).shapeType = (ParticleSystemShapeType)4; ((ShapeModule)(ref shape)).angle = 28f; ((ShapeModule)(ref shape)).radius = 0.06f; SizeOverLifetimeModule sizeOverLifetime = val2.sizeOverLifetime; ((SizeOverLifetimeModule)(ref sizeOverLifetime)).enabled = true; ((SizeOverLifetimeModule)(ref sizeOverLifetime)).size = new MinMaxCurve(1f, new AnimationCurve((Keyframe[])(object)new Keyframe[3] { new Keyframe(0f, 0.5f), new Keyframe(0.4f, 1f), new Keyframe(1f, 0.75f) })); ColorOverLifetimeModule colorOverLifetime = val2.colorOverLifetime; ((ColorOverLifetimeModule)(ref colorOverLifetime)).enabled = true; Gradient val3 = new Gradient(); val3.SetKeys((GradientColorKey[])(object)new GradientColorKey[2] { new GradientColorKey(new Color(0.48f, 0.3f, 0.12f), 0f), new GradientColorKey(new Color(0.24f, 0.14f, 0.05f), 1f) }, (GradientAlphaKey[])(object)new GradientAlphaKey[3] { new GradientAlphaKey(0.95f, 0f), new GradientAlphaKey(0.7f, 0.5f), new GradientAlphaKey(0f, 1f) }); ((ColorOverLifetimeModule)(ref colorOverLifetime)).color = new MinMaxGradient(val3); NoiseModule noise = val2.noise; ((NoiseModule)(ref noise)).enabled = true; ((NoiseModule)(ref noise)).strength = MinMaxCurve.op_Implicit(0.6f); ((NoiseModule)(ref noise)).frequency = 1.2f; CollisionModule collision = val2.collision; ((CollisionModule)(ref collision)).enabled = true; ((CollisionModule)(ref collision)).type = (ParticleSystemCollisionType)1; ((CollisionModule)(ref collision)).mode = (ParticleSystemCollisionMode)0; ((CollisionModule)(ref collision)).dampen = MinMaxCurve.op_Implicit(0.4f); ((CollisionModule)(ref collision)).bounce = MinMaxCurve.op_Implicit(0.1f); ((CollisionModule)(ref collision)).lifetimeLoss = MinMaxCurve.op_Implicit(0.4f); ParticleSystemRenderer component = val.GetComponent(); ((Renderer)component).material = GetMat(new Color(0.4f, 0.24f, 0.1f, 0.9f)); component.renderMode = (ParticleSystemRenderMode)0; return val2; } public static ParticleSystem BuildStream(Transform parent) { //IL_0005: Unknown result type (might be due to invalid IL or missing references) //IL_000b: Expected O, but got Unknown //IL_0028: Unknown result type (might be due to invalid IL or missing references) //IL_002d: Unknown result type (might be due to invalid IL or missing references) //IL_004e: Unknown result type (might be due to invalid IL or missing references) //IL_0064: Unknown result type (might be due to invalid IL or missing references) //IL_007a: Unknown result type (might be due to invalid IL or missing references) //IL_009a: Unknown result type (might be due to invalid IL or missing references) //IL_00b3: Unknown result type (might be due to invalid IL or missing references) //IL_00b8: Unknown result type (might be due to invalid IL or missing references) //IL_00c9: Unknown result type (might be due to invalid IL or missing references) //IL_00f0: Unknown result type (might be due to invalid IL or missing references) //IL_00f5: Unknown result type (might be due to invalid IL or missing references) //IL_00fd: Unknown result type (might be due to invalid IL or missing references) //IL_0108: Unknown result type (might be due to invalid IL or missing references) //IL_010d: Unknown result type (might be due to invalid IL or missing references) //IL_0130: Unknown result type (might be due to invalid IL or missing references) //IL_0135: Unknown result type (might be due to invalid IL or missing references) //IL_0156: Unknown result type (might be due to invalid IL or missing references) //IL_0167: Unknown result type (might be due to invalid IL or missing references) //IL_0178: Unknown result type (might be due to invalid IL or missing references) //IL_01a0: Unknown result type (might be due to invalid IL or missing references) GameObject val = new GameObject("CDP_Stream"); val.transform.SetParent(parent, false); ParticleSystem val2 = val.AddComponent(); val2.Stop(true, (ParticleSystemStopBehavior)0); MainModule main = val2.main; ((MainModule)(ref main)).duration = 10f; ((MainModule)(ref main)).loop = true; ((MainModule)(ref main)).startLifetime = new MinMaxCurve(0.8f, 1.3f); ((MainModule)(ref main)).startSpeed = new MinMaxCurve(3.2f, 4.4f); ((MainModule)(ref main)).startSize = new MinMaxCurve(0.03f, 0.055f); ((MainModule)(ref main)).startColor = new MinMaxGradient(new Color(0.98f, 0.92f, 0.35f, 0.85f), new Color(0.92f, 0.82f, 0.22f, 0.75f)); ((MainModule)(ref main)).gravityModifier = MinMaxCurve.op_Implicit(1.5f); ((MainModule)(ref main)).simulationSpace = (ParticleSystemSimulationSpace)1; ((MainModule)(ref main)).playOnAwake = false; ((MainModule)(ref main)).maxParticles = 400; EmissionModule emission = val2.emission; ((EmissionModule)(ref emission)).rateOverTime = MinMaxCurve.op_Implicit(110f); ShapeModule shape = val2.shape; ((ShapeModule)(ref shape)).shapeType = (ParticleSystemShapeType)4; ((ShapeModule)(ref shape)).angle = 3.5f; ((ShapeModule)(ref shape)).radius = 0.012f; CollisionModule collision = val2.collision; ((CollisionModule)(ref collision)).enabled = true; ((CollisionModule)(ref collision)).type = (ParticleSystemCollisionType)1; ((CollisionModule)(ref collision)).mode = (ParticleSystemCollisionMode)0; ((CollisionModule)(ref collision)).dampen = MinMaxCurve.op_Implicit(0.25f); ((CollisionModule)(ref collision)).bounce = MinMaxCurve.op_Implicit(0.05f); ((CollisionModule)(ref collision)).lifetimeLoss = MinMaxCurve.op_Implicit(0.75f); ParticleSystemRenderer component = val.GetComponent(); ((Renderer)component).material = GetMat(new Color(0.97f, 0.9f, 0.3f, 0.85f)); component.renderMode = (ParticleSystemRenderMode)1; component.velocityScale = 0.06f; component.lengthScale = 2.2f; return val2; } } public class SoundLoader : MonoBehaviour { private readonly Dictionary _clips = new Dictionary(); public const string GlouGlou = "glouglou"; public const string Expiration = "expiration"; public const string Braguette = "braguette"; public const string Pisse = "pisse"; public const string Zip = "zip_remonte"; public const string Pet = "pet"; private static readonly string[] Expected = new string[6] { "glouglou", "expiration", "braguette", "pisse", "zip_remonte", "pet" }; private static readonly string[] Extensions = new string[3] { ".ogg", ".wav", ".mp3" }; private static bool _templateCaptured; private static AudioMixerGroup _mixerGroup; private static AudioRolloffMode _rolloff = (AudioRolloffMode)0; private static AnimationCurve _customCurve; private static float _minDistance = 1f; private static float _maxDistance = 15f; public static SoundLoader Instance { get; private set; } public bool Ready { get; private set; } private void Awake() { Instance = this; ((MonoBehaviour)this).StartCoroutine(LoadAll()); } private IEnumerator LoadAll() { string[] expected = Expected; foreach (string text in expected) { string text2 = null; string[] extensions = Extensions; foreach (string text3 in extensions) { string text4 = Path.Combine(Plugin.SoundsFolder, text + text3); if (File.Exists(text4)) { text2 = text4; break; } } if (text2 == null) { Plugin.Logger.LogWarning((object)("Son manquant : " + text + " — effet silencieux.")); } else { yield return LoadOne(text, text2); } } Ready = true; Plugin.Logger.LogInfo((object)$"Sons charges : {_clips.Count}/{Expected.Length}"); } private IEnumerator LoadOne(string key, string path) { AudioType val = (AudioType)14; string text = Path.GetExtension(path).ToLowerInvariant(); if (text == ".wav") { val = (AudioType)20; } else if (text == ".mp3") { val = (AudioType)13; } string text2 = "file://" + path.Replace("\\", "/").Replace(" ", "%20"); UnityWebRequest req = UnityWebRequestMultimedia.GetAudioClip(text2, val); try { yield return req.SendWebRequest(); if ((int)req.result != 1) { Plugin.Logger.LogError((object)("Echec chargement '" + key + "' : " + req.error)); yield break; } AudioClip content = DownloadHandlerAudioClip.GetContent(req); if ((Object)(object)content == (Object)null) { yield break; } ((Object)content).name = key; _clips[key] = content; } finally { ((IDisposable)req)?.Dispose(); } } public AudioClip Get(string key) { if (!_clips.TryGetValue(key, out var value)) { return null; } return value; } private static void CaptureTemplate() { //IL_00c6: Unknown result type (might be due to invalid IL or missing references) //IL_00cb: Unknown result type (might be due to invalid IL or missing references) //IL_00e6: Unknown result type (might be due to invalid IL or missing references) //IL_00ec: Invalid comparison between Unknown and I4 //IL_0115: Unknown result type (might be due to invalid IL or missing references) if (_templateCaptured) { return; } AudioSource val = null; float num = -1f; AudioSource[] array = Object.FindObjectsOfType(); foreach (AudioSource val2 in array) { if (!((Object)(object)val2 == (Object)null) && !((Object)((Component)val2).gameObject).name.StartsWith("CDP_") && !(val2.spatialBlend < 0.5f)) { float num2 = val2.spatialBlend; if ((Object)(object)val2.outputAudioMixerGroup != (Object)null) { num2 += 2f; } if (val2.maxDistance > 0.1f) { num2 += 1f; } if (num2 > num) { num = num2; val = val2; } } } if ((Object)(object)val == (Object)null) { Plugin.Logger.LogWarning((object)"[CDP] Aucune AudioSource vanilla 3D trouvee."); return; } _mixerGroup = val.outputAudioMixerGroup; _rolloff = val.rolloffMode; _minDistance = val.minDistance; _maxDistance = val.maxDistance; if ((int)_rolloff == 2) { _customCurve = val.GetCustomCurve((AudioSourceCurveType)0); } _templateCaptured = true; Plugin.Logger.LogInfo((object)($"[CDP] Modele audio : '{((Object)((Component)val).gameObject).name}' rolloff={_rolloff} " + $"min={_minDistance:F1} max={_maxDistance:F1} " + "mixer=" + (((Object)(object)_mixerGroup != (Object)null) ? ((Object)_mixerGroup).name : "aucun"))); } private static AudioSource BuildSource(string name, Transform parent) { //IL_0010: Unknown result type (might be due to invalid IL or missing references) //IL_0016: Expected O, but got Unknown //IL_0029: Unknown result type (might be due to invalid IL or missing references) //IL_0058: Unknown result type (might be due to invalid IL or missing references) //IL_0088: Unknown result type (might be due to invalid IL or missing references) //IL_008e: Invalid comparison between Unknown and I4 CaptureTemplate(); GameObject val = new GameObject("CDP_" + name); val.transform.SetParent(parent, false); val.transform.localPosition = Vector3.zero; AudioSource val2 = val.AddComponent(); val2.playOnAwake = false; val2.spatialBlend = 1f; val2.outputAudioMixerGroup = _mixerGroup; val2.rolloffMode = _rolloff; val2.minDistance = _minDistance; val2.maxDistance = Mathf.Max(_maxDistance, _minDistance + 0.1f); if ((int)_rolloff == 2 && _customCurve != null) { val2.SetCustomCurve((AudioSourceCurveType)0, _customCurve); } return val2; } public static void SetVolume(Sound s, float emitterVolume) { if (s != null) { s.Volume = Mathf.Clamp(emitterVolume * Mathf.Clamp01(Plugin.Volume.Value), 0f, 4f); } } public static Sound BuildSound(string key, Transform parent, float volume = 1f) { //IL_002e: Unknown result type (might be due to invalid IL or missing references) //IL_0034: Expected O, but got Unknown if ((Object)(object)Instance == (Object)null) { return null; } AudioClip val = Instance.Get(key); if ((Object)(object)val == (Object)null) { return null; } AudioSource source = BuildSource(key, parent); Sound val2 = new Sound(); val2.Source = source; val2.Sounds = (AudioClip[])(object)new AudioClip[1] { val }; val2.Volume = Mathf.Clamp(volume * Mathf.Clamp01(Plugin.Volume.Value), 0f, 4f); val2.VolumeRandom = 0f; val2.Pitch = 1f; val2.PitchRandom = 0f; val2.SpatialBlend = 1f; val2.ReverbMix = 1f; val2.Doppler = 0f; return val2; } } }