Exemplo n.º 1
0
 // Token: 0x06005A50 RID: 23120 RVA: 0x001F7154 File Offset: 0x001F5554
 public void LogEvent(VRC_EventHandler eventHandler, VRC_EventHandler.VrcEvent vrcEvent, long combinedNetworkId, VRC_EventHandler.VrcBroadcastType broadcast, int instagatorId, float fastForward)
 {
     if (instagatorId <= 0)
     {
         instagatorId = VRC.Network.LocalInstigatorID;
     }
     if (vrcEvent.EventType == VRC_EventHandler.VrcEventType.SpawnObject || broadcast == VRC_EventHandler.VrcBroadcastType.Local)
     {
         this.Dispatcher.Execute(vrcEvent, broadcast, instagatorId, fastForward);
         return;
     }
     VRC_EventLog.EventLogEntry eventLogEntry = new VRC_EventLog.EventLogEntry
     {
         Time = PhotonNetwork.time,
         InstagatorPhotonId = instagatorId,
         CombinedNetworkId  = combinedNetworkId,
         FastForward        = fastForward,
         Event             = vrcEvent,
         OriginalBroadcast = broadcast
     }.DeepClone();
     if (vrcEvent.ParameterObject != null)
     {
         eventLogEntry.ObjectPath            = VRC.Network.GetGameObjectPath(vrcEvent.ParameterObject);
         eventLogEntry.Event.ParameterObject = vrcEvent.ParameterObject;
     }
     this.FixBooleanValues(eventLogEntry.Event, this.Dispatcher.GetEventHandler(combinedNetworkId));
     VRC_EventLog.AssignObjectParameter(eventLogEntry, this.Dispatcher);
     Debug.Log("Replicating " + eventLogEntry.ToString());
     this.Replicator.ProcessEvent(eventLogEntry, PhotonNetwork.player);
 }
Exemplo n.º 2
0
    // Token: 0x06005AB4 RID: 23220 RVA: 0x001F9958 File Offset: 0x001F7D58
    protected override void OnNetworkReady()
    {
        base.OnNetworkReady();
        if (!VRC_EventHandler.HasEventTrigger(base.gameObject))
        {
            VRC_Trigger orAddComponent = base.gameObject.GetOrAddComponent <VRC_Trigger>();
            List <VRC_Trigger.TriggerEvent> triggers     = orAddComponent.Triggers;
            VRC_Trigger.TriggerEvent        triggerEvent = new VRC_Trigger.TriggerEvent();
            triggerEvent.BroadcastType = VRC_EventHandler.VrcBroadcastType.Local;
            triggerEvent.TriggerType   = VRC_Trigger.TriggerType.OnInteract;
            triggerEvent.Events        = (from evt in this.baseStation.ProvideEvents()
                                          where evt.Name == "UseStation"
                                          select evt).ToList <VRC_EventHandler.VrcEvent>();
            triggers.Add(triggerEvent);
        }
        else
        {
            VRC_Trigger component = base.GetComponent <VRC_Trigger>();
            if (component != null)
            {
                foreach (VRC_Trigger.TriggerEvent triggerEvent2 in from t in component.Triggers
                         where t.Events.Any((VRC_EventHandler.VrcEvent e) => e.ParameterString == "UseStation" || e.ParameterString == "ExitStation")
                         select t)
                {
                    triggerEvent2.BroadcastType = VRC_EventHandler.VrcBroadcastType.Local;
                }
            }
            VRC_UseEvents component2 = base.GetComponent <VRC_UseEvents>();
            if (component2 != null)
            {
                component2.BroadcastType = VRC_EventHandler.VrcBroadcastType.Local;
                component2.EventName     = "UseStation";
            }
        }
        Collider component3 = base.gameObject.GetComponent <Collider>();

        if (component3 == null)
        {
            BoxCollider boxCollider = base.gameObject.AddComponent <BoxCollider>();
            boxCollider.isTrigger = true;
        }
        VRC_EventHandler component4 = base.GetComponent <VRC_EventHandler>();

        if (component4 != null)
        {
            VRC_Station component5 = base.GetComponent <VRC_Station>();
            using (IEnumerator <VRC_EventHandler.VrcEvent> enumerator2 = component5.ProvideEvents().GetEnumerator())
            {
                while (enumerator2.MoveNext())
                {
                    VRC_EventHandler.VrcEvent evt = enumerator2.Current;
                    VRC_StationInternal       t   = this;
                    if (!component4.Events.Any((VRC_EventHandler.VrcEvent item) => item.Name == evt.Name && item.ParameterObjects != null && item.ParameterObjects.Contains(t.gameObject)))
                    {
                        component4.Events.Add(evt);
                    }
                }
            }
        }
    }
Exemplo n.º 3
0
    // Token: 0x060058D9 RID: 22745 RVA: 0x001EC620 File Offset: 0x001EAA20
    private void Start()
    {
        VRC_EventHandler componentInParent = base.GetComponentInParent <VRC_EventHandler>();

        if (componentInParent != null)
        {
            for (int i = 0; i < componentInParent.Events.Count; i++)
            {
                if (componentInParent.Events[i].Name == "Use" && componentInParent.Events[i].ParameterObject == null)
                {
                    componentInParent.Events[i].ParameterObject = base.gameObject;
                }
            }
        }
        this.calibrator = base.GetComponentInParent <VRC_AvatarCalibrator>();
        this.switcher   = base.GetComponent <VRCAvatarManager>();
        VRCAvatarManager vrcavatarManager = this.switcher;

        vrcavatarManager.OnAvatarCreated = (VRCAvatarManager.AvatarCreationCallback)Delegate.Combine(vrcavatarManager.OnAvatarCreated, new VRCAvatarManager.AvatarCreationCallback(this.AvatarCreated));
        this.vrikCalib = base.GetComponent <VRCVrIkCalibrator>();
        if (!string.IsNullOrEmpty(this.calibrator.blueprintId))
        {
            ApiAvatar.Fetch(this.calibrator.blueprintId, delegate(ApiAvatar bp)
            {
                this.avatar = bp;
                this.switcher.SwitchAvatar(this.avatar, this.calibrator.scale, null);
                Tools.SetLayerRecursively(base.gameObject, base.transform.parent.gameObject.layer, -1);
            }, delegate(string message)
            {
                this.switcher.SwitchToErrorAvatar(1f);
            });
        }
    }
Exemplo n.º 4
0
 void Start()
 {
     FindCustomEvents();
     CustomEventNames = new List <string>();
     CompiledEvents   = new List <VRC_CT_CustomEvent>();
     Handler          = gameObject.GetComponent <VRC_EventHandler>();
     Compile();
 }
Exemplo n.º 5
0
 private static bool TriggerEvent(VRC_EventHandler __0, VRC_EventHandler.VrcEvent __1, VRC_EventHandler.VrcBroadcastType __2, int __3, float __4)
 {
     if (!string.IsNullOrEmpty(__1.ParameterString) && __1.ParameterString.Equals("SetAvatarUse") && (__2 != VRC_EventHandler.VrcBroadcastType.Local))
     {
         return(false);
     }
     return(true);
 }
Exemplo n.º 6
0
        void Start()
        {
            Handler = gameObject.GetComponent <VRC_EventHandler>();

            if (EventTypesToUpdate.Count > 0)
            {
                ChurroHandler = gameObject.GetComponent <VRC_CT_EventHandler>();
            }
        }
Exemplo n.º 7
0
 void Start()
 {
     handler = gameObject.GetComponent <VRC_EventHandler>();
     if (delay == 0)
     {
         shouldUpdate = false;
         handler.TriggerEvent(EventToLoad, VRC_EventHandler.VrcBroadcastType.Always);
     }
 }
Exemplo n.º 8
0
        public override void TriggerEvent()
        {
            if (EventContents.ParameterBool)
            {
                handler = EventContents.ParameterObject.GetComponent <VRC_EventHandler>();
            }

            handler.TriggerEvent(EventContents.ParameterString, EventContents.ParameterFloat == 0 ? VRC_EventHandler.VrcBroadcastType.Always
                : EventContents.ParameterFloat > 1 ? VRC_EventHandler.VrcBroadcastType.Master : VRC_EventHandler.VrcBroadcastType.Local);
        }
Exemplo n.º 9
0
        public override void SetEvent(VRC_EventHandler.VrcEvent EventContents)
        {
            EventContents.ParameterBool = VRC_EventHandler.BooleanOp(EventContents.ParameterBoolOp, true);
            base.SetEvent(EventContents);

            if (!EventContents.ParameterBool)
            {
                handler = EventContents.ParameterObject.GetComponent <VRC_EventHandler>();
            }
        }
Exemplo n.º 10
0
    // Token: 0x06005A95 RID: 23189 RVA: 0x001F8FF0 File Offset: 0x001F73F0
    private void TriggerEvent(string name, VRC_EventHandler.VrcBroadcastType bc)
    {
        VRC_EventHandler componentInParent = base.GetComponentInParent <VRC_EventHandler>();

        foreach (VRC_EventHandler.VrcEvent e2 in from e in componentInParent.Events
                 where e.Name == name
                 select e)
        {
            componentInParent.TriggerEvent(e2, bc, null, 0f);
        }
    }
Exemplo n.º 11
0
 void Start()
 {
     Handler         = gameObject.GetComponent <VRC_EventHandler>();
     Storage         = gameObject.GetComponent <VRC_DataStorage>();
     Values          = new List <VRC_CT_ScoreboardValue>(gameObject.GetComponents <VRC_CT_ScoreboardValue>());
     ScoreboardTexts = new List <VRC_CT_Scoreboard>();
     foreach (GameObject g in Scoreboards)
     {
         ScoreboardTexts.AddRange(g.GetComponents <VRC_CT_Scoreboard>());
     }
 }
Exemplo n.º 12
0
        public override void SetEventHandlerGameObject(UnityEngine.GameObject obj)
        {
            if (handler == null || !UseScoreboardHandler)
            {
                handler = obj.GetComponent <VRC_EventHandler>();
            }

            if (scoreboard == null)
            {
                scoreboard = obj.GetComponent <VRC_CT_ScoreboardManager>();
            }

            didLoad = handler != null && scoreboard != null && didLoad;
        }
Exemplo n.º 13
0
    // Token: 0x0600550B RID: 21771 RVA: 0x001D51D0 File Offset: 0x001D35D0
    public void UseExit()
    {
        VRC_EventHandler vrc_EventHandler = base.GetComponent <VRC_EventHandler>();

        if (vrc_EventHandler == null)
        {
            vrc_EventHandler = base.GetComponentInParent <VRC_EventHandler>();
        }
        foreach (VRC_EventHandler.VrcEvent e2 in from e in vrc_EventHandler.Events
                 where e.Name == "Exit" || e.Name == "ExitStation"
                 select e)
        {
            vrc_EventHandler.TriggerEvent(e2, VRC_EventHandler.VrcBroadcastType.Local, this.localUser, 0f);
        }
        UnityEngine.Object.Destroy(this);
    }
Exemplo n.º 14
0
        private static void OnLoad(int index, string name)
        {
            moderators = 0;

            if (index != -1)
            {
                return;
            }
            handler = null;

            if (token != null)
            {
                MelonCoroutines.Stop(token);
            }

            token = MelonCoroutines.Start(WaitForLevelToLoad());
        }
Exemplo n.º 15
0
    // Token: 0x060058E0 RID: 22752 RVA: 0x001EC8BC File Offset: 0x001EACBC
    private void Start()
    {
        VRC_EventHandler componentInParent = base.GetComponentInParent <VRC_EventHandler>();

        if (componentInParent != null)
        {
            for (int i = 0; i < componentInParent.Events.Count; i++)
            {
                if (componentInParent.Events[i].Name == "Use" && componentInParent.Events[i].ParameterObject == null)
                {
                    componentInParent.Events[i].ParameterObject = base.gameObject;
                }
            }
        }
        this.pedestal = base.GetComponentInParent <VRC_AvatarPedestal>();
        this.switcher = base.GetComponent <VRCAvatarManager>();
        VRCAvatarManager vrcavatarManager = this.switcher;

        vrcavatarManager.OnAvatarCreated = (VRCAvatarManager.AvatarCreationCallback)Delegate.Combine(vrcavatarManager.OnAvatarCreated, new VRCAvatarManager.AvatarCreationCallback(this.AvatarCreated));
        this.refreshId();
    }
Exemplo n.º 16
0
        private static System.Collections.IEnumerator WaitForLevelToLoad()
        {
            int sleep = 0;

            // look at me my name is zephoria and i know of a magic instance property
            while ((VRCPlayer.field_Internal_Static_VRCPlayer_0 == null ||
                    (handler = UnityEngine.Object.FindObjectOfType <VRC_EventHandler>()) == null) &&
                   sleep < 60)
            {
                sleep++;
                yield return(new WaitForSeconds(1));
            }

            if (sleep >= 60)
            {
                yield break;
            }
            token = null;

            Logger.Debug($"Found Event listener after {sleep} seconds");

            SendRPC(0xD00);
        }
Exemplo n.º 17
0
    private void InternalUseStation(VRC.Player player)
    {
        bool flag = false;

        if (player == null || (this.Occupant != null && this.Occupant != player) || player == this.Occupant)
        {
            return;
        }
        List <VRC_StationInternal> source = VRC_StationInternal.FindActiveStations(player);

        if (source.FirstOrDefault((VRC_StationInternal s) => s != this) != null)
        {
            if (!this.canUseStationFromStation)
            {
                return;
            }
            if (!VRC_StationInternal.ExitAllStations(player))
            {
                return;
            }
            flag = true;
        }
        else
        {
            VRC_StationInternal.ExitAllStations(player);
        }
        if (this.Occupant != null)
        {
            return;
        }
        VRC_StationInternal.FlagDiscontinuity(player);
        this.Occupant = player;
        if (flag)
        {
            this._occupant = null;
            return;
        }
        if (VRC_EventHandler.HasEventTrigger(base.gameObject))
        {
            this.AddUseExit(player);
        }
        if (this.stationControls != null)
        {
            this.stationControls.controllingPlayer = player.GetComponent <VRC_PlayerApi>();
        }
        Vector3    position = Vector3.zero;
        Quaternion rhs      = Quaternion.identity;

        if (player.isLocal)
        {
            VRCPlayer component = player.GetComponent <VRCPlayer>();
            component.AlignTrackingToPlayer();
            Transform  trackingTransform = VRCTrackingManager.GetTrackingTransform();
            Vector3    position2         = trackingTransform.position;
            Quaternion rotation          = trackingTransform.rotation;
            position = player.transform.InverseTransformPoint(trackingTransform.position);
            rhs      = Quaternion.Inverse(player.transform.rotation) * rotation;
        }
        if (this.isSeated)
        {
            this.ApplySeatedAnimation(player);
        }
        this.SetEnterPlayerTransform(player.gameObject);
        player.currentStation = this;
        if (player.isLocal)
        {
            VRCTrackingManager.SetTrackingWorldOrigin(player.transform.TransformPoint(position), player.transform.rotation * rhs);
            if (this.isSeated)
            {
                VRCTrackingManager.UseAvatarStationViewPoint(true);
            }
            if (this.stationEnterPlayerLocation != null)
            {
                this.stationEnterInitialRotation = this.stationEnterPlayerLocation.rotation;
            }
            else
            {
                this.stationEnterInitialRotation = base.transform.rotation;
            }
            this.trackingOriginDeltaPosition = VRCTrackingManager.GetTrackingWorldOrigin() - player.transform.position;
            this.trackingOriginDeltaRotation = Quaternion.FromToRotation(player.transform.TransformDirection(Vector3.forward), VRCTrackingManager.GetTrackingTransform().TransformDirection(Vector3.forward));
            player.GetComponent <LocomotionInputController>().immobilize = this.isImmobilized;
            player.GetComponent <VRCMotionState>().IsSeated  = this.isSeated;
            player.GetComponent <VRCMotionState>().InVehicle = this.inVehicle;
        }
        if (this.isImmobilized)
        {
            Collider component2 = player.GetComponent <Collider>();
            if (component2 != null)
            {
                component2.enabled = false;
            }
            if (player.isLocal)
            {
                this.AttachInputControllerTo(player, "ImmobileInputController");
            }
        }
        if (this.controlsObject != null)
        {
            VRC.Network.SetOwner(player, this.controlsObject.gameObject, VRC.Network.OwnershipModificationType.Request, false);
        }
        if (TutorialManager.Instance != null && player.isLocal && this.isImmobilized && !this.disableStationExit)
        {
            base.StartCoroutine(this.ShowGetUpInstructions());
        }
        VRC_StationInternal.AddActiveStation(this);
        base.SendMessage("OnStationEntered", SendMessageOptions.DontRequireReceiver);
    }
Exemplo n.º 18
0
    // Token: 0x06005A56 RID: 23126 RVA: 0x001F75F8 File Offset: 0x001F59F8
    private void FixBooleanValues(VRC_EventHandler.VrcEvent evt, VRC_EventHandler handler)
    {
        if (evt == null || handler == null)
        {
            return;
        }
        if (evt.ParameterObject != null)
        {
            VRC_EventHandler.VrcEventType eventType = evt.EventType;
            switch (eventType)
            {
            case VRC_EventHandler.VrcEventType.SetParticlePlaying:
            {
                Transform transform = evt.ParameterObject.transform;
                if (transform != null)
                {
                    ParticleSystem component = transform.GetComponent <ParticleSystem>();
                    if (component != null)
                    {
                        bool flag = VRC_EventHandler.BooleanOp(evt.ParameterBoolOp, component.isPlaying);
                        evt.ParameterBoolOp = ((!flag) ? VRC_EventHandler.VrcBooleanOp.False : VRC_EventHandler.VrcBooleanOp.True);
                    }
                }
                break;
            }

            case VRC_EventHandler.VrcEventType.TeleportPlayer:
            {
                Transform transform2 = evt.ParameterObject.transform;
                if (transform2 != null)
                {
                    bool flag2 = VRC_EventHandler.BooleanOp(evt.ParameterBoolOp, false);
                    evt.ParameterBoolOp = ((!flag2) ? VRC_EventHandler.VrcBooleanOp.False : VRC_EventHandler.VrcBooleanOp.True);
                }
                break;
            }

            default:
                switch (eventType)
                {
                case VRC_EventHandler.VrcEventType.MeshVisibility:
                {
                    Transform transform3 = evt.ParameterObject.transform;
                    if (transform3 != null)
                    {
                        MeshRenderer component2 = transform3.GetComponent <MeshRenderer>();
                        if (component2 != null)
                        {
                            bool flag3 = VRC_EventHandler.BooleanOp(evt.ParameterBoolOp, component2.enabled);
                            evt.ParameterBoolOp = ((!flag3) ? VRC_EventHandler.VrcBooleanOp.False : VRC_EventHandler.VrcBooleanOp.True);
                        }
                    }
                    break;
                }

                case VRC_EventHandler.VrcEventType.AnimationBool:
                {
                    Animator animator = (!(evt.ParameterObject != null)) ? null : evt.ParameterObject.GetComponent <Animator>();
                    if (animator == null && handler != null)
                    {
                        animator = handler.gameObject.GetComponent <Animator>();
                    }
                    if (animator != null)
                    {
                        bool flag4 = VRC_EventHandler.BooleanOp(evt.ParameterBoolOp, animator.GetBool(evt.ParameterString));
                        evt.ParameterBoolOp = ((!flag4) ? VRC_EventHandler.VrcBooleanOp.False : VRC_EventHandler.VrcBooleanOp.True);
                    }
                    break;
                }
                }
                break;

            case VRC_EventHandler.VrcEventType.SetGameObjectActive:
            {
                Transform transform4 = evt.ParameterObject.transform;
                if (transform4 != null)
                {
                    bool flag5 = VRC_EventHandler.BooleanOp(evt.ParameterBoolOp, transform4.gameObject.activeSelf);
                    evt.ParameterBoolOp = ((!flag5) ? VRC_EventHandler.VrcBooleanOp.False : VRC_EventHandler.VrcBooleanOp.True);
                }
                break;
            }
            }
        }
    }
Exemplo n.º 19
0
    public void setupTriggers(List <TScreen> screens)
    {
        foreach (SOption o in options)
        {
            if (!o.optionObj)
            {
                throw new MissingReferenceException("Could not set up triggers; Game Objects for screen " + id + " have not been generated.");
            }

            VRC_EventHandler evh = o.optionObj.GetComponent <VRC_EventHandler>();
            if (!evh)
            {
                o.optionObj.AddComponent <VRC_EventHandler>();
            }

            // Remove any pre-existing triggers
            VRC_Trigger t = o.optionObj.GetComponent <VRC_Trigger>();
            if (t)
            {
                Object.DestroyImmediate(t);
            }

            // Add an event handler and trigger

            VRC_Trigger trigger = o.optionObj.AddComponent <VRC_Trigger> ();
            trigger.interactText = "Select";
            trigger.proximity    = 1;

            VRC_Trigger.TriggerEvent onInteract = new VRC_Trigger.TriggerEvent();
            onInteract.TriggerType   = VRC_Trigger.TriggerType.OnInteract;
            onInteract.BroadcastType = VRC_EventHandler.VrcBroadcastType.AlwaysBufferOne;

            VRC_EventHandler.VrcEvent enableDestination = new VRC_EventHandler.VrcEvent();
            VRC_EventHandler.VrcEvent disableThisScreen = new VRC_EventHandler.VrcEvent();

            enableDestination.EventType = VRC_EventHandler.VrcEventType.SetGameObjectActive;
            disableThisScreen.EventType = VRC_EventHandler.VrcEventType.SetGameObjectActive;

            enableDestination.ParameterBoolOp = VRC_EventHandler.VrcBooleanOp.True;
            disableThisScreen.ParameterBoolOp = VRC_EventHandler.VrcBooleanOp.False;

            enableDestination.ParameterObjects = new GameObject[1];
            disableThisScreen.ParameterObjects = new GameObject[1];

            enableDestination.ParameterObjects.SetValue(screens [o.destination].gameScreen, 0);
            if (o.screen == null)
            {
                throw new MissingReferenceException("option has no screen");
            }
            if (o.screen.gameScreen == null)
            {
                throw new MissingReferenceException("Screen has no game screen");
            }
            if (disableThisScreen.ParameterObjects == null)
            {
                throw new MissingReferenceException("No paraemter objects found");
            }
            disableThisScreen.ParameterObjects.SetValue(o.screen.gameScreen, 0);

            onInteract.Events.Add(enableDestination);
            onInteract.Events.Add(disableThisScreen);

            trigger.Triggers.Add(onInteract);
        }
    }
Exemplo n.º 20
0
    // Token: 0x060052E5 RID: 21221 RVA: 0x001C6B64 File Offset: 0x001C4F64
    public IEnumerator Ready()
    {
        if (!NetworkMetadata.AllMetadata.Contains(this))
        {
            NetworkMetadata.AllMetadata.Add(this);
        }
        if (this.isReady)
        {
            yield break;
        }
        this.isReady    = false;
        this.combinedID = null;
        this.waitingFor = "photon view IDs";
        PhotonView[] views = base.gameObject.GetComponents <PhotonView>();
        while (this != null)
        {
            if (!views.Any((PhotonView v) => v != null && v.viewID <= 0))
            {
                break;
            }
            INetworkID      netID = base.gameObject.GetComponent <INetworkID>();
            VRCPunBehaviour vrc   = base.gameObject.GetComponent <VRCPunBehaviour>();
            foreach (PhotonView photonView in views)
            {
                if (netID != null && netID.NetworkID > 0)
                {
                    photonView.viewID = netID.NetworkID;
                }
                else if (vrc != null && vrc.ReservedID > 0)
                {
                    photonView.viewID = vrc.ReservedID;
                }
            }
            yield return(null);
        }
        if (this == null)
        {
            yield break;
        }
        this.waitingFor = "network to settle";
        while (this != null && (NetworkManager.Instance == null || !VRC.Network.IsNetworkSettled))
        {
            yield return(null);
        }
        if (this == null)
        {
            yield break;
        }
        this.waitingFor = "event handlers";
        VRC_EventHandler evtHandler = base.gameObject.GetComponent <VRC_EventHandler>();

        yield return(VRC.Network.ConfigureEventHandler(evtHandler));

        this.waitingFor = "children to ready";
        bool childrenNotReady = true;

        while (this != null && childrenNotReady)
        {
            childrenNotReady = false;
            for (int idx = 0; idx < base.transform.childCount; idx++)
            {
                Transform t = base.transform.GetChild(idx);
                if (!(t == null))
                {
                    GameObject child = base.transform.GetChild(idx).gameObject;
                    if (child != null && child.activeInHierarchy && !VRC.Network.IsObjectReady(child))
                    {
                        childrenNotReady = true;
                        this.waitingFor  = child.name + " to ready";
                        yield return(null);

                        break;
                    }
                }
            }
        }
        if (this == null)
        {
            yield break;
        }
        this.waitingFor = "blockReady to be lifted by " + string.Join(", ", (from b in this.blockReady
                                                                             select b.GetType().Name).ToArray <string>());
        while (this != null && this.blockReady.Count > 0)
        {
            yield return(null);
        }
        if (this == null)
        {
            yield break;
        }
        this.waitingFor = "local player to ready";
        while (this != null && VRC.Network.LocalPlayer == null)
        {
            yield return(null);
        }
        if (this == null)
        {
            yield break;
        }
        if (!base.gameObject.IsPlayer())
        {
            VRC.Player localPlayer = VRC.Network.LocalPlayer;
            while (this != null && !base.gameObject.IsPlayer() && !localPlayer.gameObject.IsReady())
            {
                yield return(null);
            }
            if (this == null)
            {
                yield break;
            }
        }
        this.waitingFor     = "configuration";
        this.combinedID     = VRC.Network.GetCombinedID(base.gameObject);
        this.isInstantiated = (base.GetComponent <ObjectInstantiatorHandle>() != null);
        this.sendCallbacks  = (base.GetComponent <NetworkManager>() == null);
        if (this.combinedID != null)
        {
            if (NetworkMetadata.ObjectCache.ContainsKey(this.combinedID.Value))
            {
                NetworkMetadata.ObjectCache.Remove(this.combinedID.Value);
            }
            NetworkMetadata.ObjectCache.Add(this.combinedID.Value, base.gameObject);
        }
        this.isReady    = true;
        this.waitingFor = "callbacks to finish";
        if (this.sendCallbacks)
        {
            try
            {
                base.SendMessage("OnNetworkReady", SendMessageOptions.DontRequireReceiver);
            }
            catch (MissingMethodException)
            {
            }
            catch (Exception exception)
            {
                Debug.LogException(exception, base.gameObject);
            }
        }
        this.waitingFor = "nothing";
        yield break;
    }
Exemplo n.º 21
0
        public override void SetEvent(VRC_EventHandler.VrcEvent EventContents)
        {
            base.SetEvent(EventContents);
            string[] stringSplit = EventContents.ParameterString.Split(new char[] { ' ' }, StringSplitOptions.RemoveEmptyEntries);

            VRC_CT_EventHandler.print("StringSplit.Length = " + stringSplit.Length);

            if (EventContents.ParameterObject != null)
            {
                scoreboard = EventContents.ParameterObject.GetComponent <VRC_CT_ScoreboardManager>();
                handler    = EventContents.ParameterObject.GetComponent <VRC_EventHandler>();
            }

            if (stringSplit.Length < 5 || (stringSplit.Length == 4 && !(stringSplit[3].Equals(":") || stringSplit[3].Equals("?"))))
            {
                return;
            }

            Value1 = stringSplit[0];
            try
            {
                intValue1 = int.Parse(Value1);
                Value1    = "";
            }
            catch (Exception e) { }
            if (Value1 != "" && Value1.StartsWith("\"") && Value1.EndsWith("\""))
            {
                Value1 = Value1.Substring(1, Value1.Length - 2);
            }

            Value2 = stringSplit[2];
            try
            {
                intValue2 = int.Parse(Value2);
                Value2    = "";
            }
            catch (Exception e) { }
            if (Value2 != "" && Value2.StartsWith("\"") && Value2.EndsWith("\""))
            {
                Value2 = Value2.Substring(1, Value2.Length - 2);
            }

            if (Value1 == Value2)
            {
                return;
            }

            VRC_CT_EventHandler.print("Values have been found: " + (Value1 == "" ? intValue1.ToString() : Value1) + " and " + (Value2 == "" ? intValue2.ToString() : Value2));

            try
            {
                compareBehavior = int.Parse(stringSplit[1]);
                if (compareBehavior < 0)
                {
                    compareBehavior = 0;
                }
                else if (compareBehavior > 7)
                {
                    compareBehavior = 7;
                }
            }
            catch (Exception e)
            {
                if (stringSplit[1].Contains("<"))
                {
                    compareBehavior |= LESS_THAN;
                }
                if (stringSplit[1].Contains(">"))
                {
                    compareBehavior |= GREATER_THAN;
                }
                if (stringSplit[1].Contains("="))
                {
                    compareBehavior |= EQUALS;
                }
                if (stringSplit[1].Contains("!"))
                {
                    int newBehavior = 0;

                    if ((compareBehavior & LESS_THAN) == 0)
                    {
                        newBehavior |= LESS_THAN;
                    }

                    if ((compareBehavior & GREATER_THAN) == 0)
                    {
                        newBehavior |= GREATER_THAN;
                    }

                    if ((compareBehavior & EQUALS) == 0)
                    {
                        newBehavior |= EQUALS;
                    }
                    compareBehavior = newBehavior;
                }
            }

            // Operator Compiled: 0 - Always False, 1 - Less Than, 2 - Greater Than, 3 - Not,
            // 4 - Equals, 5 - Less Than or Equal To, 6 - Greater Than or Equal To, 7 - Always True

            if (stringSplit[3].Equals("?"))
            {
                // '?' and True Case
                compareTrueEvent = stringSplit[4];

                if (stringSplit.Length > 5)
                {
                    if (stringSplit[5].Equals(":") && stringSplit.Length > 6)
                    {
                        // ':' and False Case
                        compareFalseEvent = stringSplit[6];
                    }
                    else
                    {
                        // False Case
                        compareFalseEvent = stringSplit[5];
                    }
                }
            }
            else if (stringSplit[3].Equals(":"))
            {
                // ':' and False Case
                compareFalseEvent = stringSplit[4];
            }
            else
            {
                // True Case
                compareTrueEvent = stringSplit[3];

                if (stringSplit.Length > 4)
                {
                    if (stringSplit[4].Equals(":") && stringSplit.Length > 5)
                    {
                        // ':' False Case
                        compareFalseEvent = stringSplit[5];
                    }
                    else
                    {
                        // False Case
                        compareFalseEvent = stringSplit[4];
                    }
                }
            }

            didLoad = true;
        }
Exemplo n.º 22
0
        public bool SetValue(float newValue, VRC_EventHandler handler)
        {
            if (IsHardLimit && HasReachedLimit)
            {
                return(OnLimitReachedShouldEndGame);
            }

            CurrentValue = newValue;

            if (CurrentValue < 0 && !CanGoBelowZero)
            {
                CurrentValue = 0;
            }

            if (!CanExceedLimit)
            {
                if (((int)Type) % 2 == 0)
                {
                    if (CurrentValue >= Limit)
                    {
                        CurrentValue = Limit;
                    }
                }
                else
                {
                    if (CurrentValue <= Limit)
                    {
                        CurrentValue = Limit;
                    }
                }
            }

            if (HasReachedLimit)
            {
                if ((int)Type % 2 == 0)
                {
                    HasReachedLimit = CurrentValue >= Limit;
                }
                else
                {
                    HasReachedLimit = CurrentValue <= Limit;
                }

                if (!HasReachedLimit)
                {
                    handler.TriggerEvent(OnSoftLimitLostEvent, VRC_EventHandler.VrcBroadcastType.Always);
                }
            }
            else
            {
                if ((int)Type % 2 == 0)
                {
                    HasReachedLimit = CurrentValue >= Limit;
                }
                else
                {
                    HasReachedLimit = CurrentValue <= Limit;
                }

                if (HasReachedLimit)
                {
                    handler.TriggerEvent(OnLimitReachedEvent, VRC_EventHandler.VrcBroadcastType.Always);
                }
            }

            return(HasReachedLimit && OnLimitReachedShouldEndGame);
        }
Exemplo n.º 23
0
        public bool ChangeValue(float deltaValue, VRC_EventHandler handler)
        {
            if (!IsLimited)
            {
                CurrentValue += deltaValue;

                if (CurrentValue < 0 && !CanGoBelowZero)
                {
                    CurrentValue = 0;
                }

                return(false);
            }

            if (!IsHardLimit || !HasReachedLimit)
            {
                CurrentValue += deltaValue;
                if (CurrentValue < 0 && !CanGoBelowZero)
                {
                    CurrentValue = 0;
                }

                if (!CanExceedLimit)
                {
                    if (((int)Type) % 2 == 0)
                    {
                        if (CurrentValue >= Limit)
                        {
                            CurrentValue = Limit;
                        }
                    }
                    else
                    {
                        if (CurrentValue <= Limit)
                        {
                            CurrentValue = Limit;
                        }
                    }
                }

                if (deltaValue > 0)
                {
                    if (CurrentValue - deltaValue < Limit && CurrentValue >= Limit)
                    {
                        if ((((int)Type) % 2) == 0)
                        {
                            HasReachedLimit = true;
                            handler.TriggerEvent(OnLimitReachedEvent, VRC_EventHandler.VrcBroadcastType.Always);
                        }
                        else
                        {
                            HasReachedLimit = false;
                            handler.TriggerEvent(OnSoftLimitLostEvent, VRC_EventHandler.VrcBroadcastType.Always);
                            return(true);
                        }
                    }
                }
                else
                {
                    if (CurrentValue - deltaValue > Limit && CurrentValue <= Limit)
                    {
                        if ((((int)Type) % 2) == 0)
                        {
                            HasReachedLimit = false;
                            handler.TriggerEvent(OnSoftLimitLostEvent, VRC_EventHandler.VrcBroadcastType.Always);
                        }
                        else
                        {
                            HasReachedLimit = true;
                            handler.TriggerEvent(OnLimitReachedEvent, VRC_EventHandler.VrcBroadcastType.Always);
                        }
                    }
                }
            }

            return(HasReachedLimit && OnLimitReachedShouldEndGame);
        }
Exemplo n.º 24
0
        private static void ExecuteEventForObject(VRC_EventHandler.VrcEvent triggerEvent, GameObject obj, VRC_EventHandler.EventInfo eventInfo, VRC_Trigger.TriggerEvent originalTrigger)
        {
            instance_.Log("Executing Trigger Event: " + triggerEvent.GetEventAsString(obj) + "\n_On Trigger: " + originalTrigger?.GetTriggerEventAsString());

            bool isBufferedExecution = eventInfo.broadcast.IsBufferedBroadcastType() && eventInfo.instagator == null;

            if (eventInfo.broadcast.IsOwnerBroadcastType())
            {
                if (!Networking.IsOwner(obj) || isBufferedExecution)
                {
                    instance_.LogWarning("Not executing as user is not the owner");
                    return;
                }
            }

            if (!isBufferedExecution && eventInfo.broadcast.IsMasterBroadcastType())
            {
                if (!Networking.IsMaster || isBufferedExecution)
                {
                    instance_.LogWarning("Not executing as user is not the master");
                    return;
                }
            }

            if (triggerEvent.EventType == VRC_EventHandler.VrcEventType.ActivateCustomTrigger)
            {
                // Only activates first one
                VRC_Trigger trigger = obj.GetComponent <VRC_Trigger>();
                if (obj.activeInHierarchy && trigger.enabled)
                {
                    trigger.ExecuteCustomTrigger(triggerEvent.ParameterString);
                }
            }
            else if (triggerEvent.EventType == VRC_EventHandler.VrcEventType.AnimationBool)
            {
                Animator animator = obj.GetComponent <Animator>();
                bool     value    = animator.GetBool(triggerEvent.ParameterString);
                bool     newValue = VRC_EventHandler.BooleanOp(triggerEvent.ParameterBoolOp, value);
                animator.SetBool(triggerEvent.ParameterString, newValue);
            }
            else if (triggerEvent.EventType == VRC_EventHandler.VrcEventType.AnimationInt)
            {
                Animator animator = obj.GetComponent <Animator>();
                animator.SetInteger(triggerEvent.ParameterString, triggerEvent.ParameterInt);
            }
            else if (triggerEvent.EventType == VRC_EventHandler.VrcEventType.AnimationFloat)
            {
                Animator animator = obj.GetComponent <Animator>();
                animator.SetFloat(triggerEvent.ParameterString, triggerEvent.ParameterFloat);
            }
            else if (triggerEvent.EventType == VRC_EventHandler.VrcEventType.AnimationIntAdd)
            {
                Animator animator = obj.GetComponent <Animator>();
                int      value    = animator.GetInteger(triggerEvent.ParameterString);
                animator.SetInteger(triggerEvent.ParameterString, value + triggerEvent.ParameterInt);
            }
            else if (triggerEvent.EventType == VRC_EventHandler.VrcEventType.AnimationIntDivide)
            {
                Animator animator = obj.GetComponent <Animator>();
                int      value    = animator.GetInteger(triggerEvent.ParameterString);
                animator.SetInteger(triggerEvent.ParameterString, value / triggerEvent.ParameterInt);
            }
            else if (triggerEvent.EventType == VRC_EventHandler.VrcEventType.AnimationIntMultiply)
            {
                Animator animator = obj.GetComponent <Animator>();
                int      value    = animator.GetInteger(triggerEvent.ParameterString);
                animator.SetInteger(triggerEvent.ParameterString, value * triggerEvent.ParameterInt);
            }
            else if (triggerEvent.EventType == VRC_EventHandler.VrcEventType.AnimationIntSubtract)
            {
                Animator animator = obj.GetComponent <Animator>();
                int      value    = animator.GetInteger(triggerEvent.ParameterString);
                animator.SetInteger(triggerEvent.ParameterString, value - triggerEvent.ParameterInt);
            }
            else if (triggerEvent.EventType == VRC_EventHandler.VrcEventType.AnimationTrigger)
            {
                obj.GetComponent <Animator>().SetTrigger(triggerEvent.ParameterString);
            }
            else if (triggerEvent.EventType == VRC_EventHandler.VrcEventType.PlayAnimation)
            {
                obj.GetComponent <Animation>().Play(triggerEvent.ParameterString);
            }
            else if (triggerEvent.EventType == VRC_EventHandler.VrcEventType.AudioTrigger)
            {
                AudioSource[] audioSources = obj.GetComponents <AudioSource>();
                foreach (var source in audioSources)
                {
                    if (source.clip.name == triggerEvent.ParameterString)
                    {
                        source.Play();
                    }
                }
            }
            else if (triggerEvent.EventType == VRC_EventHandler.VrcEventType.DestroyObject)
            {
                Destroy(obj);
            }
            else if (triggerEvent.EventType == VRC_EventHandler.VrcEventType.SendRPC)
            {
                object[] parameters     = VRC_Serialization.ParameterDecoder(triggerEvent.ParameterBytes);
                Type[]   parameterTypes = new Type[parameters.Length];
                for (int paramIndex = 0; paramIndex < parameters.Length; ++paramIndex)
                {
                    parameterTypes[paramIndex] = parameters[paramIndex].GetType();
                }

                foreach (MonoBehaviour mono in obj.GetComponents <MonoBehaviour>())
                {
                    MethodInfo methodInfo = mono.GetType().GetMethod(triggerEvent.ParameterString, BindingFlags.NonPublic | BindingFlags.Public | BindingFlags.Instance, Type.DefaultBinder, parameterTypes, null);

                    if (methodInfo != null)
                    {
                        methodInfo.Invoke(mono, parameters);
                    }
                }
            }
            else if (triggerEvent.EventType == VRC_EventHandler.VrcEventType.SetComponentActive)
            {
                Type type = instance_.GetTypeForComponent(triggerEvent.ParameterString);
                if (type != null)
                {
                    PropertyInfo property = type.GetProperty("enabled");
                    if (property != null)
                    {
                        foreach (Component component in obj.GetComponents(type))
                        {
                            bool value    = (bool)property.GetValue(component, null);
                            bool newValue = VRC_EventHandler.BooleanOp(triggerEvent.ParameterBoolOp, value);
                            property.SetValue(component, newValue, null);
                        }
                    }
                }
            }
            else if (triggerEvent.EventType == VRC_EventHandler.VrcEventType.SetGameObjectActive)
            {
                bool newValue = VRC_EventHandler.BooleanOp(triggerEvent.ParameterBoolOp, obj.activeSelf);
                obj.SetActive(newValue);

                CyanEmuTriggerHelper triggerHelper = obj.GetComponent <CyanEmuTriggerHelper>();
                if (triggerHelper != null && isTriggerGlobalBroadcast_)
                {
                    if (newValue && triggerHelper.HasGlobalOnDisable)
                    {
                        instance_.LogWarning("Posisble OnEnable or OnTimer oversync!");
                    }
                    else if (!newValue && triggerHelper.HasGlobalOnDisable)
                    {
                        instance_.LogWarning("Posisble OnDisable oversync!");
                    }
                }
            }
            else if (triggerEvent.EventType == VRC_EventHandler.VrcEventType.SetLayer)
            {
                obj.layer = triggerEvent.ParameterInt;
            }
            else if (triggerEvent.EventType == VRC_EventHandler.VrcEventType.SetMaterial)
            {
                Material mat = VRC_SceneDescriptor.GetMaterial(triggerEvent.ParameterString);
                obj.GetComponent <Renderer>().material = mat;
            }
            else if (triggerEvent.EventType == VRC_EventHandler.VrcEventType.SetParticlePlaying)
            {
                ParticleSystem system   = obj.GetComponent <ParticleSystem>();
                bool           newValue = VRC_EventHandler.BooleanOp(triggerEvent.ParameterBoolOp, system.isPlaying);
                if (newValue)
                {
                    system.Play();
                }
                else
                {
                    system.Stop();
                }
            }
            else if (triggerEvent.EventType == VRC_EventHandler.VrcEventType.SetUIText)
            {
                obj.GetComponent <UnityEngine.UI.Text>().text = triggerEvent.ParameterString;
            }
            else if (triggerEvent.EventType == VRC_EventHandler.VrcEventType.SpawnObject)
            {
                GameObject prefab = VRC_SceneDescriptor.GetPrefab(triggerEvent.ParameterString);
                CyanEmuMain.SpawnObject(prefab, obj.transform.position, obj.transform.rotation);
            }
            else if (triggerEvent.EventType == VRC_EventHandler.VrcEventType.TeleportPlayer)
            {
                if (isBufferedExecution)
                {
                    instance_.LogWarning("Teleport player actions should not be buffered. Ignoring");
                }
                else
                {
                    if (CyanEmuPlayerController.instance != null)
                    {
                        CyanEmuPlayerController.instance.Teleport(triggerEvent.ParameterObjects[0].transform, triggerEvent.ParameterBoolOp == VRC_EventHandler.VrcBooleanOp.True);
                    }
                    else
                    {
                        instance_.LogWarning("No player container to teleport!");
                    }

                    if (eventInfo.broadcast != VRC_EventHandler.VrcBroadcastType.Local)
                    {
                        instance_.LogWarning("TeleportPlayer action should be set to local!");
                    }
                }
            }
            else if (triggerEvent.EventType == VRC_EventHandler.VrcEventType.AddForce)
            {
                HandleTriggerPhysicsEvent(triggerEvent, obj);
            }
            else if (triggerEvent.EventType == VRC_EventHandler.VrcEventType.AddVelocity)
            {
                HandleTriggerPhysicsEvent(triggerEvent, obj);
            }
            else if (triggerEvent.EventType == VRC_EventHandler.VrcEventType.SetVelocity)
            {
                HandleTriggerPhysicsEvent(triggerEvent, obj);
            }
            else if (triggerEvent.EventType == VRC_EventHandler.VrcEventType.AddAngularVelocity)
            {
                HandleTriggerPhysicsEvent(triggerEvent, obj);
            }
            else if (triggerEvent.EventType == VRC_EventHandler.VrcEventType.SetAngularVelocity)
            {
                HandleTriggerPhysicsEvent(triggerEvent, obj);
            }
            else if (triggerEvent.EventType == VRC_EventHandler.VrcEventType.AddDamage)
            {
                HandleTriggerDamageEvent(triggerEvent, obj);

                if (isBufferedExecution)
                {
                    instance_.LogWarning("AddDamage action should not be buffered!");
                }
                else if (eventInfo.broadcast != VRC_EventHandler.VrcBroadcastType.Local)
                {
                    instance_.LogWarning("AddDamage action should be set to local!");
                }
            }
            else if (triggerEvent.EventType == VRC_EventHandler.VrcEventType.AddHealth)
            {
                HandleTriggerDamageEvent(triggerEvent, obj);

                if (isBufferedExecution)
                {
                    instance_.LogWarning("AddHealth action should not be buffered!");
                }
                else if (eventInfo.broadcast != VRC_EventHandler.VrcBroadcastType.Local)
                {
                    instance_.LogWarning("AddHealth action should be set to local!");
                }
            }
            else if (triggerEvent.EventType == VRC_EventHandler.VrcEventType.SetWebPanelURI)
            {
            }
            else if (triggerEvent.EventType == VRC_EventHandler.VrcEventType.SetWebPanelVolume)
            {
            }
            else if (triggerEvent.EventType == VRC_EventHandler.VrcEventType.MeshVisibility)
            {
            }
        }
Exemplo n.º 25
0
 public static void TriggerWorldObjectEvent(VRC_EventHandler.VrcEvent ev, VRC_EventHandler handler)
 {
     handler.TriggerEvent(ev, VRC_EventHandler.VrcBroadcastType.Always, handler.gameObject);
 }