static void Prefix(ObjectMovementController __instance) { byte[] payload = new byte[] { }; payload.AddToArray((byte)OpCode.ObjectDeleted); var spawnable = __instance.HighlightedObject.GetSpawnableFromSpawned(); var objectSaveData = new GameObjectSaveData { Id = spawnable.Prefab.name, bundleName = spawnable.BundleName, position = new SerializableVector3(__instance.SelectedObject.transform.position), rotation = new SerializableQuaternion(__instance.SelectedObject.transform.rotation), localScale = new SerializableVector3(__instance.SelectedObject.transform.localScale) }; foreach (var settings in spawnable.Settings) { var settingsSaveData = settings.ConvertToSaveSettings(); if (settingsSaveData != null) { objectSaveData.settings.Add(settingsSaveData); } } payload.AddRangeToArray(objectSaveData.SerializeToBytes()); Main.pluginInfo.SendMessage(Main.pluginInfo, payload, true); }
/// <summary> /// Convert an array of objects into a <see cref="Guid"/>, but only those that will fit into 16 bytes. /// </summary> /// <param name="value">An array of objects to be converted/encoded into a <see cref="Guid"/></param> /// <returns>A Guid containing the input</returns> public static Guid ToGuid(params object[] value) { byte[] arrGuid = new byte[16]; int pos = 0; foreach (object v in value) { if (v == null) { continue; } if (v is Guid) { arrGuid.AddToArray(BitConverter.GetBytes(((Guid)v).GetHashCode()), ref pos); } else if (v is byte) { arrGuid.AddToArray(new byte[] { (byte)v }, ref pos); } else if (v is char) { arrGuid.AddToArray(BitConverter.GetBytes((char)v), ref pos); } else if (v is short) { arrGuid.AddToArray(BitConverter.GetBytes((short)v), ref pos); } else if (v is double) { arrGuid.AddToArray(BitConverter.GetBytes((double)v), ref pos); } else if (v is float) { arrGuid.AddToArray(BitConverter.GetBytes((float)v), ref pos); } else if (v is int) { arrGuid.AddToArray(BitConverter.GetBytes((int)v), ref pos); } else if (v is long) { arrGuid.AddToArray(BitConverter.GetBytes((long)v), ref pos); } else if (v is short) { arrGuid.AddToArray(BitConverter.GetBytes((short)v), ref pos); } else if (v is uint) { arrGuid.AddToArray(BitConverter.GetBytes((uint)v), ref pos); } else if (v is ulong) { arrGuid.AddToArray(BitConverter.GetBytes((ulong)v), ref pos); } else if (v is ushort) { arrGuid.AddToArray(BitConverter.GetBytes((ushort)v), ref pos); } else if (v is object) { arrGuid.AddToArray(BitConverter.GetBytes(v.GetHashCode()), ref pos); } } return(new Guid(arrGuid)); }