public override void OnGUI(Rect position, SerializedProperty prop, GUIContent label) { SerializedProperty hiddenValue = prop.FindPropertyRelative("hiddenValue"); SerializedProperty cryptoKey = prop.FindPropertyRelative("currentCryptoKey"); SerializedProperty fakeValue = prop.FindPropertyRelative("fakeValue"); SerializedProperty inited = prop.FindPropertyRelative("inited"); int currentCryptoKey = cryptoKey.intValue; var union = new IntBytesUnion(); float val = 0; if (!inited.boolValue) { if (currentCryptoKey == 0) { currentCryptoKey = cryptoKey.intValue = 230887; } hiddenValue.arraySize = 4; inited.boolValue = true; union.i = ObscuredFloat.Encrypt(0, currentCryptoKey); hiddenValue.GetArrayElementAtIndex(0).intValue = union.b1; hiddenValue.GetArrayElementAtIndex(1).intValue = union.b2; hiddenValue.GetArrayElementAtIndex(2).intValue = union.b3; hiddenValue.GetArrayElementAtIndex(3).intValue = union.b4; } else { int arraySize = hiddenValue.arraySize; byte[] hiddenValueArray = new byte[arraySize]; for (int i = 0; i < arraySize; i++) { hiddenValueArray[i] = (byte)hiddenValue.GetArrayElementAtIndex(i).intValue; } union.b1 = hiddenValueArray[0]; union.b2 = hiddenValueArray[1]; union.b3 = hiddenValueArray[2]; union.b4 = hiddenValueArray[3]; val = ObscuredFloat.Decrypt(union.i, currentCryptoKey); } EditorGUI.BeginChangeCheck(); val = EditorGUI.FloatField(position, label, val); if (EditorGUI.EndChangeCheck()) { union.i = ObscuredFloat.Encrypt(val, currentCryptoKey); hiddenValue.GetArrayElementAtIndex(0).intValue = union.b1; hiddenValue.GetArrayElementAtIndex(1).intValue = union.b2; hiddenValue.GetArrayElementAtIndex(2).intValue = union.b3; hiddenValue.GetArrayElementAtIndex(3).intValue = union.b4; } fakeValue.floatValue = val; }
public override void OnGUI(Rect position, SerializedProperty prop, GUIContent label) { var hiddenValue = prop.FindPropertyRelative("hiddenValue"); SetBoldIfValueOverridePrefab(prop, hiddenValue); var cryptoKey = prop.FindPropertyRelative("currentCryptoKey"); var inited = prop.FindPropertyRelative("inited"); var fakeValue = prop.FindPropertyRelative("fakeValue"); var fakeValueActive = prop.FindPropertyRelative("fakeValueActive"); var currentCryptoKey = cryptoKey.intValue; var union = new IntBytesUnion(); float val = 0; if (!inited.boolValue) { if (currentCryptoKey == 0) { currentCryptoKey = cryptoKey.intValue = ObscuredFloat.cryptoKeyEditor; } inited.boolValue = true; union.i = ObscuredFloat.Encrypt(0, currentCryptoKey); hiddenValue.intValue = union.i; } else { union.i = hiddenValue.intValue; val = ObscuredFloat.Decrypt(union.i, currentCryptoKey); } EditorGUI.BeginChangeCheck(); val = EditorGUI.FloatField(position, label, val); if (EditorGUI.EndChangeCheck()) { union.i = ObscuredFloat.Encrypt(val, currentCryptoKey); hiddenValue.intValue = union.i; fakeValue.floatValue = val; fakeValueActive.boolValue = true; } ResetBoldFont(); }
private static bool MigrateObject(SerializedObject so, string label) { var modified = false; var sp = so.GetIterator(); if (sp == null) { return(false); } while (sp.NextVisible(true)) { if (sp.propertyType != SerializedPropertyType.Generic) { continue; } var type = sp.type; switch (type) { case "ObscuredDouble": { var hiddenValue = sp.FindPropertyRelative("hiddenValue"); if (hiddenValue == null) { continue; } var hiddenValueOldProperty = sp.FindPropertyRelative("hiddenValueOldByte8"); var hiddenValueOld = default(ACTkByte8); var oldValueExists = false; if (hiddenValueOldProperty != null) { if (hiddenValueOldProperty.FindPropertyRelative("b1") != null) { hiddenValueOld.b1 = (byte)hiddenValueOldProperty.FindPropertyRelative("b1").intValue; hiddenValueOld.b2 = (byte)hiddenValueOldProperty.FindPropertyRelative("b2").intValue; hiddenValueOld.b3 = (byte)hiddenValueOldProperty.FindPropertyRelative("b3").intValue; hiddenValueOld.b4 = (byte)hiddenValueOldProperty.FindPropertyRelative("b4").intValue; hiddenValueOld.b5 = (byte)hiddenValueOldProperty.FindPropertyRelative("b5").intValue; hiddenValueOld.b6 = (byte)hiddenValueOldProperty.FindPropertyRelative("b6").intValue; hiddenValueOld.b7 = (byte)hiddenValueOldProperty.FindPropertyRelative("b7").intValue; hiddenValueOld.b8 = (byte)hiddenValueOldProperty.FindPropertyRelative("b8").intValue; if (hiddenValueOld.b1 != 0 || hiddenValueOld.b2 != 0 || hiddenValueOld.b3 != 0 || hiddenValueOld.b4 != 0 || hiddenValueOld.b5 != 0 || hiddenValueOld.b6 != 0 || hiddenValueOld.b7 != 0 || hiddenValueOld.b8 != 0) { oldValueExists = true; } } } if (oldValueExists) { var union = new LongBytesUnion { b8 = hiddenValueOld }; union.b8.Shuffle(); hiddenValue.longValue = union.l; hiddenValueOldProperty.FindPropertyRelative("b1").intValue = 0; hiddenValueOldProperty.FindPropertyRelative("b2").intValue = 0; hiddenValueOldProperty.FindPropertyRelative("b3").intValue = 0; hiddenValueOldProperty.FindPropertyRelative("b4").intValue = 0; hiddenValueOldProperty.FindPropertyRelative("b5").intValue = 0; hiddenValueOldProperty.FindPropertyRelative("b6").intValue = 0; hiddenValueOldProperty.FindPropertyRelative("b7").intValue = 0; hiddenValueOldProperty.FindPropertyRelative("b8").intValue = 0; Debug.Log(ActEditorGlobalStuff.LogPrefix + "Migrated property " + sp.displayName + ":" + type + " at the object " + label); modified = true; } break; } case "ObscuredFloat": { var hiddenValue = sp.FindPropertyRelative("hiddenValue"); if (hiddenValue == null) { continue; } var hiddenValueOldProperty = sp.FindPropertyRelative("hiddenValueOldByte4"); var hiddenValueOld = default(ACTkByte4); var oldValueExists = false; if (hiddenValueOldProperty != null) { if (hiddenValueOldProperty.FindPropertyRelative("b1") != null) { hiddenValueOld.b1 = (byte)hiddenValueOldProperty.FindPropertyRelative("b1").intValue; hiddenValueOld.b2 = (byte)hiddenValueOldProperty.FindPropertyRelative("b2").intValue; hiddenValueOld.b3 = (byte)hiddenValueOldProperty.FindPropertyRelative("b3").intValue; hiddenValueOld.b4 = (byte)hiddenValueOldProperty.FindPropertyRelative("b4").intValue; if (hiddenValueOld.b1 != 0 || hiddenValueOld.b2 != 0 || hiddenValueOld.b3 != 0 || hiddenValueOld.b4 != 0) { oldValueExists = true; } } } if (oldValueExists) { var union = new IntBytesUnion { b4 = hiddenValueOld }; union.b4.Shuffle(); hiddenValue.longValue = union.i; hiddenValueOldProperty.FindPropertyRelative("b1").intValue = 0; hiddenValueOldProperty.FindPropertyRelative("b2").intValue = 0; hiddenValueOldProperty.FindPropertyRelative("b3").intValue = 0; hiddenValueOldProperty.FindPropertyRelative("b4").intValue = 0; Debug.Log(ActEditorGlobalStuff.LogPrefix + "Migrated property " + sp.displayName + ":" + type + " at the object " + label); modified = true; } /*var hiddenValue = sp.FindPropertyRelative("hiddenValue"); * if (hiddenValue == null) continue; * * var hiddenValue1 = hiddenValue.FindPropertyRelative("b1"); * var hiddenValue2 = hiddenValue.FindPropertyRelative("b2"); * var hiddenValue3 = hiddenValue.FindPropertyRelative("b3"); * var hiddenValue4 = hiddenValue.FindPropertyRelative("b4"); * * var hiddenValueOld = sp.FindPropertyRelative("hiddenValueOld"); * * if (hiddenValueOld != null && hiddenValueOld.isArray && hiddenValueOld.arraySize == 4) * { * hiddenValue1.intValue = hiddenValueOld.GetArrayElementAtIndex(0).intValue; * hiddenValue2.intValue = hiddenValueOld.GetArrayElementAtIndex(1).intValue; * hiddenValue3.intValue = hiddenValueOld.GetArrayElementAtIndex(2).intValue; * hiddenValue4.intValue = hiddenValueOld.GetArrayElementAtIndex(3).intValue; * * hiddenValueOld.arraySize = 0; * * Debug.Log(ActEditorGlobalStuff.LogPrefix + "Migrated property " + sp.displayName + ":" + type + * " at the object " + label); * modified = true; * }*/ break; } /* * case "ObscuredBool": * { * var hiddenValue = sp.FindPropertyRelative("hiddenValue"); * var cryptoKey = sp.FindPropertyRelative("currentCryptoKey"); * var fakeValue = sp.FindPropertyRelative("fakeValue"); * var fakeValueChanged = sp.FindPropertyRelative("fakeValueChanged"); * var fakeValueActive = sp.FindPropertyRelative("fakeValueActive"); * var inited = sp.FindPropertyRelative("inited"); * * if (inited != null && inited.boolValue) * { * var currentCryptoKey = cryptoKey.intValue; * var real = ObscuredBool.Decrypt(hiddenValue.intValue, (byte)currentCryptoKey); * var fake = fakeValue.boolValue; * * if (real != fake) * { * Debug.Log(ActEditorGlobalStuff.LogPrefix + "Fixed property " + sp.displayName + ":" + type + * " at the object " + label); * fakeValue.boolValue = real; * if (fakeValueChanged != null) fakeValueChanged.boolValue = true; * if (fakeValueActive != null) fakeValueActive.boolValue = true; * modified = true; * } * } * * break; * } * case "ObscuredInt": * { * var hiddenValue = sp.FindPropertyRelative("hiddenValue"); * var cryptoKey = sp.FindPropertyRelative("currentCryptoKey"); * var fakeValue = sp.FindPropertyRelative("fakeValue"); * var fakeValueActive = sp.FindPropertyRelative("fakeValueActive"); * var inited = sp.FindPropertyRelative("inited"); * * if (inited != null && inited.boolValue) * { * var currentCryptoKey = cryptoKey.intValue; * var real = ObscuredInt.Decrypt(hiddenValue.intValue, currentCryptoKey); * var fake = fakeValue.intValue; * * if (real != fake) * { * Debug.Log(ActEditorGlobalStuff.LogPrefix + "Fixed property " + sp.displayName + ":" + type + * " at the object " + label); * fakeValue.intValue = real; * fakeValueActive.boolValue = true; * modified = true; * } * } * * break; * } * case "ObscuredLong": * { * var hiddenValue = sp.FindPropertyRelative("hiddenValue"); * var cryptoKey = sp.FindPropertyRelative("currentCryptoKey"); * var fakeValue = sp.FindPropertyRelative("fakeValue"); * var fakeValueActive = sp.FindPropertyRelative("fakeValueActive"); * var inited = sp.FindPropertyRelative("inited"); * * if (inited != null && inited.boolValue) * { * var currentCryptoKey = cryptoKey.longValue; * var real = ObscuredLong.Decrypt(hiddenValue.longValue, currentCryptoKey); * var fake = fakeValue.longValue; * * if (real != fake) * { * Debug.Log(ActEditorGlobalStuff.LogPrefix + "Fixed property " + sp.displayName + ":" + type + * " at the object " + label); * fakeValue.longValue = real; * fakeValueActive.boolValue = true; * modified = true; * } * } * * break; * } * case "ObscuredShort": * { * var hiddenValue = sp.FindPropertyRelative("hiddenValue"); * var cryptoKey = sp.FindPropertyRelative("currentCryptoKey"); * var fakeValue = sp.FindPropertyRelative("fakeValue"); * var fakeValueActive = sp.FindPropertyRelative("fakeValueActive"); * var inited = sp.FindPropertyRelative("inited"); * * if (inited != null && inited.boolValue) * { * var currentCryptoKey = (short)cryptoKey.intValue; * var real = ObscuredShort.EncryptDecrypt((short)hiddenValue.intValue, currentCryptoKey); * var fake = (short)fakeValue.intValue; * * if (real != fake) * { * Debug.Log(ActEditorGlobalStuff.LogPrefix + "Fixed property " + sp.displayName + ":" + type + * " at the object " + label); * fakeValue.intValue = real; * fakeValueActive.boolValue = true; * modified = true; * } * } * * break; * } * case "ObscuredString": * { * var hiddenValue = sp.FindPropertyRelative("hiddenValue"); * var cryptoKey = sp.FindPropertyRelative("currentCryptoKey"); * var fakeValue = sp.FindPropertyRelative("fakeValue"); * var fakeValueActive = sp.FindPropertyRelative("fakeValueActive"); * var inited = sp.FindPropertyRelative("inited"); * * if (inited != null && inited.boolValue) * { * var currentCryptoKey = cryptoKey.stringValue; * var bytes = new byte[hiddenValue.arraySize]; * for (var j = 0; j < hiddenValue.arraySize; j++) * { * bytes[j] = (byte)hiddenValue.GetArrayElementAtIndex(j).intValue; * } * * var real = ObscuredString.EncryptDecrypt(GetString(bytes), currentCryptoKey); * var fake = fakeValue.stringValue; * * if (real != fake) * { * Debug.Log(ActEditorGlobalStuff.LogPrefix + "Fixed property " + sp.displayName + ":" + type + * " at the object " + label); * fakeValue.stringValue = real; * fakeValueActive.boolValue = true; * modified = true; * } * } * * break; * } * case "ObscuredUInt": * { * var hiddenValue = sp.FindPropertyRelative("hiddenValue"); * var cryptoKey = sp.FindPropertyRelative("currentCryptoKey"); * var fakeValue = sp.FindPropertyRelative("fakeValue"); * var fakeValueActive = sp.FindPropertyRelative("fakeValueActive"); * var inited = sp.FindPropertyRelative("inited"); * * if (inited != null && inited.boolValue) * { * var currentCryptoKey = (uint)cryptoKey.intValue; * var real = ObscuredUInt.Decrypt((uint)hiddenValue.intValue, currentCryptoKey); * var fake = (uint)fakeValue.intValue; * * if (real != fake) * { * Debug.Log(ActEditorGlobalStuff.LogPrefix + "Fixed property " + sp.displayName + ":" + type + * " at the object " + label); * fakeValue.intValue = (int)real; * fakeValueActive.boolValue = true; * modified = true; * } * } * * break; * } * case "ObscuredULong": * { * var hiddenValue = sp.FindPropertyRelative("hiddenValue"); * var cryptoKey = sp.FindPropertyRelative("currentCryptoKey"); * var fakeValue = sp.FindPropertyRelative("fakeValue"); * var fakeValueActive = sp.FindPropertyRelative("fakeValueActive"); * var inited = sp.FindPropertyRelative("inited"); * * if (inited != null && inited.boolValue) * { * var currentCryptoKey = (ulong)cryptoKey.longValue; * var real = ObscuredULong.Decrypt((ulong)hiddenValue.longValue, currentCryptoKey); * var fake = (ulong)fakeValue.longValue; * * if (real != fake) * { * Debug.Log(ActEditorGlobalStuff.LogPrefix + "Fixed property " + sp.displayName + ":" + type + * " at the object " + label); * fakeValue.longValue = (long)real; * fakeValueActive.boolValue = true; * modified = true; * } * } * * break; * } * case "ObscuredVector2": * { * var hiddenValue = sp.FindPropertyRelative("hiddenValue"); * if (hiddenValue == null) continue; * * var hiddenValueX = hiddenValue.FindPropertyRelative("x"); * var hiddenValueY = hiddenValue.FindPropertyRelative("y"); * * var cryptoKey = sp.FindPropertyRelative("currentCryptoKey"); * var fakeValue = sp.FindPropertyRelative("fakeValue"); * var fakeValueActive = sp.FindPropertyRelative("fakeValueActive"); * var inited = sp.FindPropertyRelative("inited"); * * if (inited != null && inited.boolValue) * { * var ev = new ObscuredVector2.RawEncryptedVector2(); * ev.x = hiddenValueX.intValue; * ev.y = hiddenValueY.intValue; * * var currentCryptoKey = cryptoKey.intValue; * var real = ObscuredVector2.Decrypt(ev, currentCryptoKey); * var fake = fakeValue.vector2Value; * * if (real != fake) * { * Debug.Log(ActEditorGlobalStuff.LogPrefix + "Fixed property " + sp.displayName + ":" + type + * " at the object " + label); * fakeValue.vector2Value = real; * fakeValueActive.boolValue = true; * modified = true; * } * } * * break; * } * * case "ObscuredVector3": * { * var hiddenValue = sp.FindPropertyRelative("hiddenValue"); * if (hiddenValue == null) continue; * * var hiddenValueX = hiddenValue.FindPropertyRelative("x"); * var hiddenValueY = hiddenValue.FindPropertyRelative("y"); * var hiddenValueZ = hiddenValue.FindPropertyRelative("z"); * * var cryptoKey = sp.FindPropertyRelative("currentCryptoKey"); * var fakeValue = sp.FindPropertyRelative("fakeValue"); * var fakeValueActive = sp.FindPropertyRelative("fakeValueActive"); * var inited = sp.FindPropertyRelative("inited"); * * if (inited != null && inited.boolValue) * { * var ev = new ObscuredVector3.RawEncryptedVector3(); * ev.x = hiddenValueX.intValue; * ev.y = hiddenValueY.intValue; * ev.z = hiddenValueZ.intValue; * * var currentCryptoKey = cryptoKey.intValue; * var real = ObscuredVector3.Decrypt(ev, currentCryptoKey); * var fake = fakeValue.vector3Value; * * if (real != fake) * { * Debug.Log(ActEditorGlobalStuff.LogPrefix + "Fixed property " + sp.displayName + ":" + type + * " at the object " + label); * fakeValue.vector3Value = real; * fakeValueActive.boolValue = true; * modified = true; * } * } * * break; * }*/ } } return(modified); }
public override void OnGUI(Rect position, SerializedProperty prop, GUIContent label) { SerializedProperty hiddenValue = prop.FindPropertyRelative("hiddenValue"); SerializedProperty hiddenValue1 = hiddenValue.FindPropertyRelative("b1"); SerializedProperty hiddenValue2 = hiddenValue.FindPropertyRelative("b2"); SerializedProperty hiddenValue3 = hiddenValue.FindPropertyRelative("b3"); SerializedProperty hiddenValue4 = hiddenValue.FindPropertyRelative("b4"); SerializedProperty hiddenValueOld = prop.FindPropertyRelative("hiddenValueOld"); SerializedProperty hiddenValueOld1 = null; SerializedProperty hiddenValueOld2 = null; SerializedProperty hiddenValueOld3 = null; SerializedProperty hiddenValueOld4 = null; if (hiddenValueOld != null && hiddenValueOld.isArray && hiddenValueOld.arraySize == 4) { hiddenValueOld1 = hiddenValueOld.GetArrayElementAtIndex(0); hiddenValueOld2 = hiddenValueOld.GetArrayElementAtIndex(1); hiddenValueOld3 = hiddenValueOld.GetArrayElementAtIndex(2); hiddenValueOld4 = hiddenValueOld.GetArrayElementAtIndex(3); } SetBoldIfValueOverridePrefab(prop, hiddenValue); SerializedProperty cryptoKey = prop.FindPropertyRelative("currentCryptoKey"); SerializedProperty fakeValue = prop.FindPropertyRelative("fakeValue"); SerializedProperty inited = prop.FindPropertyRelative("inited"); int currentCryptoKey = cryptoKey.intValue; IntBytesUnion union = new IntBytesUnion(); float val = 0; if (!inited.boolValue) { if (currentCryptoKey == 0) { currentCryptoKey = cryptoKey.intValue = ObscuredFloat.cryptoKeyEditor; } inited.boolValue = true; union.i = ObscuredFloat.Encrypt(0, currentCryptoKey); hiddenValue1.intValue = union.b4.b1; hiddenValue2.intValue = union.b4.b2; hiddenValue3.intValue = union.b4.b3; hiddenValue4.intValue = union.b4.b4; } else { if (hiddenValueOld != null && hiddenValueOld.isArray && hiddenValueOld.arraySize == 4) { union.b4.b1 = (byte)hiddenValueOld1.intValue; union.b4.b2 = (byte)hiddenValueOld2.intValue; union.b4.b3 = (byte)hiddenValueOld3.intValue; union.b4.b4 = (byte)hiddenValueOld4.intValue; } else { union.b4.b1 = (byte)hiddenValue1.intValue; union.b4.b2 = (byte)hiddenValue2.intValue; union.b4.b3 = (byte)hiddenValue3.intValue; union.b4.b4 = (byte)hiddenValue4.intValue; } /*Debug.Log("Int: " + union.i);*/ val = ObscuredFloat.Decrypt(union.i, currentCryptoKey); } EditorGUI.BeginChangeCheck(); val = EditorGUI.FloatField(position, label, val); if (EditorGUI.EndChangeCheck()) { union.i = ObscuredFloat.Encrypt(val, currentCryptoKey); hiddenValue1.intValue = union.b4.b1; hiddenValue2.intValue = union.b4.b2; hiddenValue3.intValue = union.b4.b3; hiddenValue4.intValue = union.b4.b4; if (hiddenValueOld != null && hiddenValueOld.isArray && hiddenValueOld.arraySize == 4) { hiddenValueOld.arraySize = 0; } } fakeValue.floatValue = val; ResetBoldFont(); }
public static void MigrateObscuredTypesOnPrefabs() { if (!EditorUtility.DisplayDialog("ACTk Obscured types migration", "Are you sure you wish to scan all prefabs in your project and automatically migrate values to the new format?", "Yes", "No")) { Debug.Log(ActEditorGlobalStuff.LOG_PREFIX + "Obscured types migration was cancelled by user."); return; } AssetDatabase.SaveAssets(); string[] assets = AssetDatabase.FindAssets("t:ScriptableObject t:Prefab"); //string[] prefabs = AssetDatabase.FindAssets("TestPrefab"); int touchedCount = 0; int count = assets.Length; for (int i = 0; i < count; i++) { if (EditorUtility.DisplayCancelableProgressBar("Looking through objects", "Object " + (i + 1) + " from " + count, i / (float)count)) { Debug.Log(ActEditorGlobalStuff.LOG_PREFIX + "Obscured types migration was cancelled by user."); break; } string guid = assets[i]; string path = AssetDatabase.GUIDToAssetPath(guid); Object[] objects = AssetDatabase.LoadAllAssetsAtPath(path); foreach (Object unityObject in objects) { if (unityObject == null) { continue; } if (unityObject.name == "Deprecated EditorExtensionImpl") { continue; } bool modified = false; var so = new SerializedObject(unityObject); SerializedProperty sp = so.GetIterator(); if (sp == null) { continue; } while (sp.NextVisible(true)) { if (sp.propertyType != SerializedPropertyType.Generic) { continue; } string type = sp.type; switch (type) { case "ObscuredBool": { SerializedProperty hiddenValue = sp.FindPropertyRelative("hiddenValue"); SerializedProperty cryptoKey = sp.FindPropertyRelative("currentCryptoKey"); SerializedProperty fakeValue = sp.FindPropertyRelative("fakeValue"); SerializedProperty fakeValueChanged = sp.FindPropertyRelative("fakeValueChanged"); SerializedProperty fakeValueActive = sp.FindPropertyRelative("fakeValueActive"); SerializedProperty inited = sp.FindPropertyRelative("inited"); if (inited != null && inited.boolValue) { int currentCryptoKey = cryptoKey.intValue; bool real = ObscuredBool.Decrypt(hiddenValue.intValue, (byte)currentCryptoKey); bool fake = fakeValue.boolValue; if (real != fake) { Debug.Log(ActEditorGlobalStuff.LOG_PREFIX + "Fixed property " + sp.displayName + ":" + type + " at the object " + unityObject.name + "\n" + path); fakeValue.boolValue = real; if (fakeValueChanged != null) { fakeValueChanged.boolValue = true; } if (fakeValueActive != null) { fakeValueActive.boolValue = true; } modified = true; } } } break; case "ObscuredDouble": { SerializedProperty hiddenValue = sp.FindPropertyRelative("hiddenValue"); if (hiddenValue == null) { continue; } SerializedProperty hiddenValue1 = hiddenValue.FindPropertyRelative("b1"); SerializedProperty hiddenValue2 = hiddenValue.FindPropertyRelative("b2"); SerializedProperty hiddenValue3 = hiddenValue.FindPropertyRelative("b3"); SerializedProperty hiddenValue4 = hiddenValue.FindPropertyRelative("b4"); SerializedProperty hiddenValue5 = hiddenValue.FindPropertyRelative("b5"); SerializedProperty hiddenValue6 = hiddenValue.FindPropertyRelative("b6"); SerializedProperty hiddenValue7 = hiddenValue.FindPropertyRelative("b7"); SerializedProperty hiddenValue8 = hiddenValue.FindPropertyRelative("b8"); SerializedProperty hiddenValueOld = sp.FindPropertyRelative("hiddenValueOld"); if (hiddenValueOld != null && hiddenValueOld.isArray && hiddenValueOld.arraySize == 8) { hiddenValue1.intValue = hiddenValueOld.GetArrayElementAtIndex(0).intValue; hiddenValue2.intValue = hiddenValueOld.GetArrayElementAtIndex(1).intValue; hiddenValue3.intValue = hiddenValueOld.GetArrayElementAtIndex(2).intValue; hiddenValue4.intValue = hiddenValueOld.GetArrayElementAtIndex(3).intValue; hiddenValue5.intValue = hiddenValueOld.GetArrayElementAtIndex(4).intValue; hiddenValue6.intValue = hiddenValueOld.GetArrayElementAtIndex(5).intValue; hiddenValue7.intValue = hiddenValueOld.GetArrayElementAtIndex(6).intValue; hiddenValue8.intValue = hiddenValueOld.GetArrayElementAtIndex(7).intValue; hiddenValueOld.arraySize = 0; Debug.Log(ActEditorGlobalStuff.LOG_PREFIX + "Migrated property " + sp.displayName + ":" + type + " at the object " + unityObject.name + "\n" + path); modified = true; } #if UNITY_5_0_PLUS SerializedProperty cryptoKey = sp.FindPropertyRelative("currentCryptoKey"); SerializedProperty fakeValue = sp.FindPropertyRelative("fakeValue"); SerializedProperty fakeValueActive = sp.FindPropertyRelative("fakeValueActive"); SerializedProperty inited = sp.FindPropertyRelative("inited"); if (inited != null && inited.boolValue) { var union = new LongBytesUnion(); union.b8.b1 = (byte)hiddenValue1.intValue; union.b8.b2 = (byte)hiddenValue2.intValue; union.b8.b3 = (byte)hiddenValue3.intValue; union.b8.b4 = (byte)hiddenValue4.intValue; union.b8.b5 = (byte)hiddenValue5.intValue; union.b8.b6 = (byte)hiddenValue6.intValue; union.b8.b7 = (byte)hiddenValue7.intValue; union.b8.b8 = (byte)hiddenValue8.intValue; long currentCryptoKey = cryptoKey.longValue; double real = ObscuredDouble.Decrypt(union.l, currentCryptoKey); double fake = fakeValue.doubleValue; if (Math.Abs(real - fake) > 0.0000001d) { Debug.Log(ActEditorGlobalStuff.LOG_PREFIX + "Fixed property " + sp.displayName + ":" + type + " at the object " + unityObject.name + "\n" + path); fakeValue.doubleValue = real; fakeValueActive.boolValue = true; modified = true; } } #endif } break; case "ObscuredFloat": { SerializedProperty hiddenValue = sp.FindPropertyRelative("hiddenValue"); if (hiddenValue == null) { continue; } SerializedProperty hiddenValue1 = hiddenValue.FindPropertyRelative("b1"); SerializedProperty hiddenValue2 = hiddenValue.FindPropertyRelative("b2"); SerializedProperty hiddenValue3 = hiddenValue.FindPropertyRelative("b3"); SerializedProperty hiddenValue4 = hiddenValue.FindPropertyRelative("b4"); SerializedProperty hiddenValueOld = sp.FindPropertyRelative("hiddenValueOld"); if (hiddenValueOld != null && hiddenValueOld.isArray && hiddenValueOld.arraySize == 4) { hiddenValue1.intValue = hiddenValueOld.GetArrayElementAtIndex(0).intValue; hiddenValue2.intValue = hiddenValueOld.GetArrayElementAtIndex(1).intValue; hiddenValue3.intValue = hiddenValueOld.GetArrayElementAtIndex(2).intValue; hiddenValue4.intValue = hiddenValueOld.GetArrayElementAtIndex(3).intValue; hiddenValueOld.arraySize = 0; Debug.Log(ActEditorGlobalStuff.LOG_PREFIX + "Migrated property " + sp.displayName + ":" + type + " at the object " + unityObject.name + "\n" + path); modified = true; } SerializedProperty cryptoKey = sp.FindPropertyRelative("currentCryptoKey"); SerializedProperty fakeValue = sp.FindPropertyRelative("fakeValue"); SerializedProperty fakeValueActive = sp.FindPropertyRelative("fakeValueActive"); SerializedProperty inited = sp.FindPropertyRelative("inited"); if (inited != null && inited.boolValue) { var union = new IntBytesUnion(); union.b4.b1 = (byte)hiddenValue1.intValue; union.b4.b2 = (byte)hiddenValue2.intValue; union.b4.b3 = (byte)hiddenValue3.intValue; union.b4.b4 = (byte)hiddenValue4.intValue; int currentCryptoKey = cryptoKey.intValue; float real = ObscuredFloat.Decrypt(union.i, currentCryptoKey); float fake = fakeValue.floatValue; if (Math.Abs(real - fake) > 0.0000001f) { Debug.Log(ActEditorGlobalStuff.LOG_PREFIX + "Fixed property " + sp.displayName + ":" + type + " at the object " + unityObject.name + "\n" + path); fakeValue.floatValue = real; fakeValueActive.boolValue = true; modified = true; } } } break; case "ObscuredInt": { SerializedProperty hiddenValue = sp.FindPropertyRelative("hiddenValue"); SerializedProperty cryptoKey = sp.FindPropertyRelative("currentCryptoKey"); SerializedProperty fakeValue = sp.FindPropertyRelative("fakeValue"); SerializedProperty fakeValueActive = sp.FindPropertyRelative("fakeValueActive"); SerializedProperty inited = sp.FindPropertyRelative("inited"); if (inited != null && inited.boolValue) { int currentCryptoKey = cryptoKey.intValue; int real = ObscuredInt.Decrypt(hiddenValue.intValue, currentCryptoKey); int fake = fakeValue.intValue; if (real != fake) { Debug.Log(ActEditorGlobalStuff.LOG_PREFIX + "Fixed property " + sp.displayName + ":" + type + " at the object " + unityObject.name + "\n" + path); fakeValue.intValue = real; fakeValueActive.boolValue = true; modified = true; } } } break; #if UNITY_5_0_PLUS case "ObscuredLong": { SerializedProperty hiddenValue = sp.FindPropertyRelative("hiddenValue"); SerializedProperty cryptoKey = sp.FindPropertyRelative("currentCryptoKey"); SerializedProperty fakeValue = sp.FindPropertyRelative("fakeValue"); SerializedProperty fakeValueActive = sp.FindPropertyRelative("fakeValueActive"); SerializedProperty inited = sp.FindPropertyRelative("inited"); if (inited != null && inited.boolValue) { long currentCryptoKey = cryptoKey.longValue; long real = ObscuredLong.Decrypt(hiddenValue.longValue, currentCryptoKey); long fake = fakeValue.longValue; if (real != fake) { Debug.Log(ActEditorGlobalStuff.LOG_PREFIX + "Fixed property " + sp.displayName + ":" + type + " at the object " + unityObject.name + "\n" + path); fakeValue.longValue = real; fakeValueActive.boolValue = true; modified = true; } } } break; case "ObscuredShort": { SerializedProperty hiddenValue = sp.FindPropertyRelative("hiddenValue"); SerializedProperty cryptoKey = sp.FindPropertyRelative("currentCryptoKey"); SerializedProperty fakeValue = sp.FindPropertyRelative("fakeValue"); SerializedProperty fakeValueActive = sp.FindPropertyRelative("fakeValueActive"); SerializedProperty inited = sp.FindPropertyRelative("inited"); if (inited != null && inited.boolValue) { short currentCryptoKey = (short)cryptoKey.intValue; short real = ObscuredShort.EncryptDecrypt((short)hiddenValue.intValue, currentCryptoKey); short fake = (short)fakeValue.intValue; if (real != fake) { Debug.Log(ActEditorGlobalStuff.LOG_PREFIX + "Fixed property " + sp.displayName + ":" + type + " at the object " + unityObject.name + "\n" + path); fakeValue.intValue = real; fakeValueActive.boolValue = true; modified = true; } } } break; #endif case "ObscuredString": { SerializedProperty hiddenValue = sp.FindPropertyRelative("hiddenValue"); SerializedProperty cryptoKey = sp.FindPropertyRelative("currentCryptoKey"); SerializedProperty fakeValue = sp.FindPropertyRelative("fakeValue"); SerializedProperty fakeValueActive = sp.FindPropertyRelative("fakeValueActive"); SerializedProperty inited = sp.FindPropertyRelative("inited"); if (inited != null && inited.boolValue) { string currentCryptoKey = cryptoKey.stringValue; byte[] bytes = new byte[hiddenValue.arraySize]; for (int j = 0; j < hiddenValue.arraySize; j++) { bytes[j] = (byte)hiddenValue.GetArrayElementAtIndex(j).intValue; } string real = ObscuredString.EncryptDecrypt(GetString(bytes), currentCryptoKey); string fake = fakeValue.stringValue; if (real != fake) { Debug.Log(ActEditorGlobalStuff.LOG_PREFIX + "Fixed property " + sp.displayName + ":" + type + " at the object " + unityObject.name + "\n" + path); fakeValue.stringValue = real; fakeValueActive.boolValue = true; modified = true; } } } break; #if UNITY_5_0_PLUS case "ObscuredUInt": { SerializedProperty hiddenValue = sp.FindPropertyRelative("hiddenValue"); SerializedProperty cryptoKey = sp.FindPropertyRelative("currentCryptoKey"); SerializedProperty fakeValue = sp.FindPropertyRelative("fakeValue"); SerializedProperty fakeValueActive = sp.FindPropertyRelative("fakeValueActive"); SerializedProperty inited = sp.FindPropertyRelative("inited"); if (inited != null && inited.boolValue) { uint currentCryptoKey = (uint)cryptoKey.intValue; uint real = ObscuredUInt.Decrypt((uint)hiddenValue.intValue, currentCryptoKey); uint fake = (uint)fakeValue.intValue; if (real != fake) { Debug.Log(ActEditorGlobalStuff.LOG_PREFIX + "Fixed property " + sp.displayName + ":" + type + " at the object " + unityObject.name + "\n" + path); fakeValue.intValue = (int)real; fakeValueActive.boolValue = true; modified = true; } } } break; case "ObscuredULong": { SerializedProperty hiddenValue = sp.FindPropertyRelative("hiddenValue"); SerializedProperty cryptoKey = sp.FindPropertyRelative("currentCryptoKey"); SerializedProperty fakeValue = sp.FindPropertyRelative("fakeValue"); SerializedProperty fakeValueActive = sp.FindPropertyRelative("fakeValueActive"); SerializedProperty inited = sp.FindPropertyRelative("inited"); if (inited != null && inited.boolValue) { ulong currentCryptoKey = (ulong)cryptoKey.longValue; ulong real = ObscuredULong.Decrypt((ulong)hiddenValue.longValue, currentCryptoKey); ulong fake = (ulong)fakeValue.longValue; if (real != fake) { Debug.Log(ActEditorGlobalStuff.LOG_PREFIX + "Fixed property " + sp.displayName + ":" + type + " at the object " + unityObject.name + "\n" + path); fakeValue.longValue = (long)real; fakeValueActive.boolValue = true; modified = true; } } } break; #endif case "ObscuredVector2": { SerializedProperty hiddenValue = sp.FindPropertyRelative("hiddenValue"); if (hiddenValue == null) { continue; } SerializedProperty hiddenValueX = hiddenValue.FindPropertyRelative("x"); SerializedProperty hiddenValueY = hiddenValue.FindPropertyRelative("y"); SerializedProperty cryptoKey = sp.FindPropertyRelative("currentCryptoKey"); SerializedProperty fakeValue = sp.FindPropertyRelative("fakeValue"); SerializedProperty fakeValueActive = sp.FindPropertyRelative("fakeValueActive"); SerializedProperty inited = sp.FindPropertyRelative("inited"); if (inited != null && inited.boolValue) { ObscuredVector2.RawEncryptedVector2 ev = new ObscuredVector2.RawEncryptedVector2(); ev.x = hiddenValueX.intValue; ev.y = hiddenValueY.intValue; int currentCryptoKey = cryptoKey.intValue; Vector2 real = ObscuredVector2.Decrypt(ev, currentCryptoKey); Vector2 fake = fakeValue.vector2Value; if (real != fake) { Debug.Log(ActEditorGlobalStuff.LOG_PREFIX + "Fixed property " + sp.displayName + ":" + type + " at the object " + unityObject.name + "\n" + path); fakeValue.vector2Value = real; fakeValueActive.boolValue = true; modified = true; } } } break; case "ObscuredVector3": { SerializedProperty hiddenValue = sp.FindPropertyRelative("hiddenValue"); if (hiddenValue == null) { continue; } SerializedProperty hiddenValueX = hiddenValue.FindPropertyRelative("x"); SerializedProperty hiddenValueY = hiddenValue.FindPropertyRelative("y"); SerializedProperty hiddenValueZ = hiddenValue.FindPropertyRelative("z"); SerializedProperty cryptoKey = sp.FindPropertyRelative("currentCryptoKey"); SerializedProperty fakeValue = sp.FindPropertyRelative("fakeValue"); SerializedProperty fakeValueActive = sp.FindPropertyRelative("fakeValueActive"); SerializedProperty inited = sp.FindPropertyRelative("inited"); if (inited != null && inited.boolValue) { var ev = new ObscuredVector3.RawEncryptedVector3(); ev.x = hiddenValueX.intValue; ev.y = hiddenValueY.intValue; ev.z = hiddenValueZ.intValue; int currentCryptoKey = cryptoKey.intValue; Vector3 real = ObscuredVector3.Decrypt(ev, currentCryptoKey); Vector3 fake = fakeValue.vector3Value; if (real != fake) { Debug.Log(ActEditorGlobalStuff.LOG_PREFIX + "Fixed property " + sp.displayName + ":" + type + " at the object " + unityObject.name + "\n" + path); fakeValue.vector3Value = real; fakeValueActive.boolValue = true; modified = true; } } } break; } } if (modified) { touchedCount++; so.ApplyModifiedProperties(); EditorUtility.SetDirty(unityObject); } } } AssetDatabase.SaveAssets(); EditorUtility.ClearProgressBar(); if (touchedCount > 0) { Debug.Log(ActEditorGlobalStuff.LOG_PREFIX + "Migrated obscured types on " + touchedCount + " objects."); } else { Debug.Log(ActEditorGlobalStuff.LOG_PREFIX + "No objects were found for obscured types migration."); } }
public override void OnGUI(Rect position, SerializedProperty prop, GUIContent label) { var hiddenValue = prop.FindPropertyRelative("hiddenValue"); var hiddenValueOldProperty = prop.FindPropertyRelative("hiddenValueOldByte4"); var hiddenValueOld = default(ACTkByte4); var oldValueExists = false; if (hiddenValueOldProperty != null) { if (hiddenValueOldProperty.FindPropertyRelative("b1") != null) { hiddenValueOld.b1 = (byte)hiddenValueOldProperty.FindPropertyRelative("b1").intValue; hiddenValueOld.b2 = (byte)hiddenValueOldProperty.FindPropertyRelative("b2").intValue; hiddenValueOld.b3 = (byte)hiddenValueOldProperty.FindPropertyRelative("b3").intValue; hiddenValueOld.b4 = (byte)hiddenValueOldProperty.FindPropertyRelative("b4").intValue; if (hiddenValueOld.b1 != 0 || hiddenValueOld.b2 != 0 || hiddenValueOld.b3 != 0 || hiddenValueOld.b4 != 0) { oldValueExists = true; } } } SetBoldIfValueOverridePrefab(prop, hiddenValue); var cryptoKey = prop.FindPropertyRelative("currentCryptoKey"); var inited = prop.FindPropertyRelative("inited"); var fakeValue = prop.FindPropertyRelative("fakeValue"); var fakeValueActive = prop.FindPropertyRelative("fakeValueActive"); var currentCryptoKey = cryptoKey.intValue; var union = new IntBytesUnion(); float val = 0; if (!inited.boolValue) { if (currentCryptoKey == 0) { currentCryptoKey = cryptoKey.intValue = ObscuredFloat.cryptoKeyEditor; } inited.boolValue = true; union.i = ObscuredFloat.Encrypt(0, currentCryptoKey); hiddenValue.intValue = union.i; } else { if (oldValueExists) { union.b4 = hiddenValueOld; union.b4.Shuffle(); } else { union.i = hiddenValue.intValue; } val = ObscuredFloat.Decrypt(union.i, currentCryptoKey); } EditorGUI.BeginChangeCheck(); val = EditorGUI.FloatField(position, label, val); if (EditorGUI.EndChangeCheck()) { union.i = ObscuredFloat.Encrypt(val, currentCryptoKey); hiddenValue.intValue = union.i; if (oldValueExists) { hiddenValueOldProperty.FindPropertyRelative("b1").intValue = 0; hiddenValueOldProperty.FindPropertyRelative("b2").intValue = 0; hiddenValueOldProperty.FindPropertyRelative("b3").intValue = 0; hiddenValueOldProperty.FindPropertyRelative("b4").intValue = 0; } fakeValue.floatValue = val; fakeValueActive.boolValue = true; } ResetBoldFont(); }
public override void OnGUI(Rect position, SerializedProperty prop, GUIContent label) { SerializedProperty hiddenValue = prop.FindPropertyRelative("hiddenValue"); SetBoldIfValueOverridePrefab(prop, hiddenValue); SerializedProperty cryptoKey = prop.FindPropertyRelative("currentCryptoKey"); SerializedProperty fakeValue = prop.FindPropertyRelative("fakeValue"); SerializedProperty inited = prop.FindPropertyRelative("inited"); int currentCryptoKey = cryptoKey.intValue; IntBytesUnion union = new IntBytesUnion(); float val = 0; if (!inited.boolValue) { if (currentCryptoKey == 0) { currentCryptoKey = cryptoKey.intValue = ObscuredFloat.cryptoKeyEditor; } hiddenValue.arraySize = 4; inited.boolValue = true; union.i = ObscuredFloat.Encrypt(0, currentCryptoKey); hiddenValue.GetArrayElementAtIndex(0).intValue = union.b1; hiddenValue.GetArrayElementAtIndex(1).intValue = union.b2; hiddenValue.GetArrayElementAtIndex(2).intValue = union.b3; hiddenValue.GetArrayElementAtIndex(3).intValue = union.b4; } else { int arraySize = hiddenValue.arraySize; byte[] hiddenValueArray = new byte[arraySize]; for (int i = 0; i < arraySize; i++) { hiddenValueArray[i] = (byte)hiddenValue.GetArrayElementAtIndex(i).intValue; } union.b1 = hiddenValueArray[0]; union.b2 = hiddenValueArray[1]; union.b3 = hiddenValueArray[2]; union.b4 = hiddenValueArray[3]; val = ObscuredFloat.Decrypt(union.i, currentCryptoKey); } EditorGUI.BeginChangeCheck(); val = EditorGUI.FloatField(position, label, val); if (EditorGUI.EndChangeCheck()) { union.i = ObscuredFloat.Encrypt(val, currentCryptoKey); hiddenValue.GetArrayElementAtIndex(0).intValue = union.b1; hiddenValue.GetArrayElementAtIndex(1).intValue = union.b2; hiddenValue.GetArrayElementAtIndex(2).intValue = union.b3; hiddenValue.GetArrayElementAtIndex(3).intValue = union.b4; } fakeValue.floatValue = val; ResetBoldFont(); }