Esempio n. 1
0
        // Token: 0x06004D93 RID: 19859 RVA: 0x001A06F0 File Offset: 0x0019EAF0
        private void SetupTriggers()
        {
            VRC_Trigger vrc_Trigger = base.GetComponent <VRC_Trigger>();

            if (vrc_Trigger == null)
            {
                vrc_Trigger = base.gameObject.AddComponent <VRC_Trigger>();
            }
            VRC_Trigger.TriggerEvent triggerEvent = new VRC_Trigger.TriggerEvent();
            triggerEvent.TriggerType   = VRC_Trigger.TriggerType.OnPickup;
            triggerEvent.BroadcastType = VRC_EventHandler.VrcBroadcastType.AlwaysUnbuffered;
            VRC_EventHandler.VrcEvent vrcEvent = new VRC_EventHandler.VrcEvent();
            vrcEvent.EventType           = VRC_EventHandler.VrcEventType.SendRPC;
            vrcEvent.ParameterObjects    = new GameObject[1];
            vrcEvent.ParameterObjects[0] = base.gameObject;
            vrcEvent.ParameterString     = "OnPickedUp";
            vrcEvent.ParameterInt        = 0;
            vrcEvent.ParameterBytes      = VRC_Serialization.ParameterEncoder(new object[0]);
            triggerEvent.Events.Add(vrcEvent);
            vrc_Trigger.Triggers.Add(triggerEvent);
            VRC_Trigger.TriggerEvent triggerEvent2 = new VRC_Trigger.TriggerEvent();
            triggerEvent2.TriggerType   = VRC_Trigger.TriggerType.OnDrop;
            triggerEvent2.BroadcastType = VRC_EventHandler.VrcBroadcastType.AlwaysUnbuffered;
            VRC_EventHandler.VrcEvent vrcEvent2 = new VRC_EventHandler.VrcEvent();
            vrcEvent2.EventType           = VRC_EventHandler.VrcEventType.SendRPC;
            vrcEvent2.ParameterObjects    = new GameObject[1];
            vrcEvent2.ParameterObjects[0] = base.gameObject;
            vrcEvent2.ParameterString     = "OnDropped";
            vrcEvent2.ParameterInt        = 0;
            vrcEvent2.ParameterBytes      = VRC_Serialization.ParameterEncoder(new object[0]);
            triggerEvent2.Events.Add(vrcEvent2);
            vrc_Trigger.Triggers.Add(triggerEvent2);
        }
Esempio n. 2
0
    // Token: 0x06005A00 RID: 23040 RVA: 0x001F4A64 File Offset: 0x001F2E64
    public static bool Deserialize(VRC_DataStorage.VrcDataElement ds, out object obj)
    {
        obj = null;
        switch (ds.type)
        {
        case VRC_DataStorage.VrcDataType.None:
            obj = null;
            return(true);

        case VRC_DataStorage.VrcDataType.Bool:
            obj = ds.valueBool;
            return(true);

        case VRC_DataStorage.VrcDataType.Int:
            obj = ds.valueInt;
            return(true);

        case VRC_DataStorage.VrcDataType.Float:
            obj = ds.valueFloat;
            return(true);

        case VRC_DataStorage.VrcDataType.String:
            obj = ds.valueString;
            return(true);

        case VRC_DataStorage.VrcDataType.SerializeBytes:
            obj = ds.valueSerializedBytes;
            return(true);

        case VRC_DataStorage.VrcDataType.SerializeObject:
            if (ds.serializeComponent == null)
            {
                return(false);
            }
            ds.serializeComponent.SetBytes(ds.valueSerializedBytes);
            return(true);

        case VRC_DataStorage.VrcDataType.Other:
        {
            object[] array = VRC_Serialization.ParameterDecoder(ds.valueSerializedBytes, false);
            obj = ((array != null && array.Length != 0) ? array[0] : null);
            return(true);
        }

        default:
            Debug.LogError("Unable to handle " + ds.type.ToString());
            return(false);
        }
    }
Esempio n. 3
0
 // Token: 0x060059FF RID: 23039 RVA: 0x001F4950 File Offset: 0x001F2D50
 public static bool Serialize(VRC_DataStorage.VrcDataElement ds, object objectToStore)
 {
     ds.added    = (ds.type == VRC_DataStorage.VrcDataType.None);
     ds.modified = true;
     if (objectToStore is bool)
     {
         ds.valueBool = (bool)objectToStore;
         ds.type      = VRC_DataStorage.VrcDataType.Bool;
         return(true);
     }
     if (objectToStore is int)
     {
         ds.valueInt = (int)objectToStore;
         ds.type     = VRC_DataStorage.VrcDataType.Int;
         return(true);
     }
     if (objectToStore is float)
     {
         ds.valueFloat = (float)objectToStore;
         ds.type       = VRC_DataStorage.VrcDataType.Float;
         return(true);
     }
     if (objectToStore is string)
     {
         ds.valueString = (string)objectToStore;
         ds.type        = VRC_DataStorage.VrcDataType.String;
         return(true);
     }
     if (objectToStore is byte[])
     {
         ds.valueSerializedBytes = (byte[])objectToStore;
         ds.type = VRC_DataStorage.VrcDataType.SerializeBytes;
         return(true);
     }
     if (objectToStore is VRC_SerializableBehaviour)
     {
         ds.serializeComponent   = (VRC_SerializableBehaviour)objectToStore;
         ds.valueSerializedBytes = ((VRC_SerializableBehaviour)objectToStore).GetBytes();
         ds.type = VRC_DataStorage.VrcDataType.SerializeObject;
         return(true);
     }
     ds.valueSerializedBytes = VRC_Serialization.ParameterEncoder(new object[]
     {
         objectToStore
     });
     ds.type = VRC_DataStorage.VrcDataType.Other;
     return(true);
 }
Esempio n. 4
0
 // Token: 0x060059F4 RID: 23028 RVA: 0x001F3E1C File Offset: 0x001F221C
 public void CheckConsistency()
 {
     if (this.dataStorage.data.Length == 0 || this.timeOfNextConsistencyCheck - Time.time > 0f)
     {
         return;
     }
     this.timeOfNextConsistencyCheck = Time.time + UnityEngine.Random.Range(1f, 2f);
     if (this.dataHash != null && this.dataHash.Length != this.dataStorage.data.Length)
     {
         this.dataHash = null;
     }
     if (this.dataHash == null)
     {
         this.dataHash = new SHA1[this.dataStorage.data.Length];
     }
     for (int i = 0; i < this.dataHash.Length; i++)
     {
         if (this.dataStorage.data[i].modified)
         {
             this.dataHash[i] = null;
         }
         SHA1 sha = SHA1.Create();
         sha.ComputeHash(VRC_Serialization.ParameterEncoder(new object[]
         {
             this.dataStorage.data[i]
         }));
         bool flag = this.dataHash[i] == null || sha.HashSize != this.dataHash[i].HashSize || sha.Hash.Length != this.dataHash[i].Hash.Length;
         if (!flag)
         {
             for (int j = 0; j < sha.Hash.Length; j++)
             {
                 flag = (sha.Hash[j] != this.dataHash[i].Hash[j]);
                 if (flag)
                 {
                     break;
                 }
             }
         }
         if (flag)
         {
             this.dataStorage.data[i].modified = flag;
             this.dataHash[i] = sha;
             base.photonView.lastOnSerializeDataSent = null;
         }
     }
 }
Esempio n. 5
0
        private static void HandleTriggerPhysicsEvent(VRC_EventHandler.VrcEvent triggerEvent, GameObject obj)
        {
            object[] parameters = VRC_Serialization.ParameterDecoder(triggerEvent.ParameterBytes);
            if (parameters.Length == 0)
            {
                parameters = new object[1] {
                    new Vector4()
                };
            }

            Vector4 vec = (Vector4)parameters[0];
            Vector3 vel = vec;

            if (vec.w < .5f)
            {
                vel = obj.transform.TransformVector(vel);
            }
            Rigidbody rigidbody = obj.GetComponent <Rigidbody>();

            if (triggerEvent.EventType == VRC_EventHandler.VrcEventType.SetAngularVelocity)
            {
                rigidbody.angularVelocity = vel;
            }
            else if (triggerEvent.EventType == VRC_EventHandler.VrcEventType.AddAngularVelocity)
            {
                rigidbody.angularVelocity += vel;
            }
            else if (triggerEvent.EventType == VRC_EventHandler.VrcEventType.SetVelocity)
            {
                rigidbody.velocity = vel;
            }
            else if (triggerEvent.EventType == VRC_EventHandler.VrcEventType.AddVelocity)
            {
                rigidbody.velocity += vel;
            }
            else if (triggerEvent.EventType == VRC_EventHandler.VrcEventType.AddForce)
            {
                rigidbody.AddForce(vel);
            }
        }
Esempio n. 6
0
        bool missingTeleportTo(VRC_Trigger trigger)
        {
            var emptyTeleport = false;

            trigger.Triggers
            .ForEach(t => {
                t.Events.ForEach(e =>
                {
                    if (e.EventType == VRC_EventHandler.VrcEventType.SendRPC && e.ParameterString == "TeleportTo")
                    {
                        object[] param = VRC_Serialization.ParameterDecoder(e.ParameterBytes);

                        if (param.Length < 1 || param[0] == null)
                        {
                            emptyTeleport = true;
                        }
                    }
                });
            });

            return(emptyTeleport);
        }
Esempio n. 7
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)
            {
            }
        }
Esempio n. 8
0
 // Token: 0x06005A54 RID: 23124 RVA: 0x001F72A8 File Offset: 0x001F56A8
 private static bool isEventReady(VRC_EventLog.EventLogEntry e, bool logError)
 {
     if (!string.IsNullOrEmpty(e.ObjectPath) && e.Event.ParameterObject == null)
     {
         if (logError)
         {
             Debug.LogError("Could not find target " + e.ObjectPath + " for " + e.ToString());
         }
         return(false);
     }
     if (e.Event.ParameterObject != null && !VRC.Network.IsObjectReady(e.Event.ParameterObject))
     {
         if (logError)
         {
             Debug.LogError(string.Concat(new string[]
             {
                 "Object did not ready in time ",
                 e.ObjectPath,
                 " for ",
                 e.ToString(),
                 " because ",
                 e.Event.ParameterObject.WhyNotReady()
             }));
         }
         return(false);
     }
     if (e.Event.EventType == VRC_EventHandler.VrcEventType.SendRPC)
     {
         object[] array = null;
         try
         {
             array = VRC_Serialization.ParameterDecoder(e.Event.ParameterBytes, true);
         }
         catch (KeyNotFoundException ex)
         {
             if (logError)
             {
                 Debug.LogError(string.Concat(new string[]
                 {
                     "RPC Parameters did not ready in time ",
                     e.ObjectPath,
                     " for ",
                     e.ToString(),
                     " because ",
                     ex.Message
                 }));
             }
             return(false);
         }
         if (array == null || array.Length <= 0)
         {
             return(true);
         }
         if (array.Any((object p) => p == null || (p is GameObject && !(p as GameObject).IsReady())))
         {
             if (logError)
             {
                 string[] value = (from p in array
                                   where p == null || (p is GameObject && !(p as GameObject).IsReady())
                                   select(p != null) ? ((p as GameObject).name + ": " + (p as GameObject).WhyNotReady()) : "parameter is null").ToArray <string>();
                 Debug.LogError(string.Concat(new string[]
                 {
                     "RPC Parameters did not ready in time ",
                     e.ObjectPath,
                     " for ",
                     e.ToString(),
                     " because ",
                     string.Join(", ", value)
                 }));
             }
             return(false);
         }
         return(true);
     }
     return(true);
 }