public static bool Prefix(DroidScript __instance, ref int id, Vector3 targ, int dmg) { if (!GadgetNetwork.MatrixReady && GadgetNetwork.GetTimeSinceConnect() < GadgetNetwork.MatrixTimeout) { __instance.StartCoroutine(GadgetUtils.WaitAndInvoke(RPCMethod, GadgetNetwork.MatrixTimeout - GadgetNetwork.GetTimeSinceConnect(), () => GadgetNetwork.MatrixReady, __instance, id, targ, dmg)); return(true); } GadgetNetwork.ConvertIDToLocal(ItemRegistry.Singleton /* ProjectileRegistry */, ref id); return(true); }
public static bool Prefix(ItemScript __instance, ref int id) { if (!GadgetNetwork.MatrixReady && GadgetNetwork.GetTimeSinceConnect() < GadgetNetwork.MatrixTimeout) { __instance.StartCoroutine(GadgetUtils.WaitAndInvoke(RPCMethod, GadgetNetwork.MatrixTimeout - GadgetNetwork.GetTimeSinceConnect(), () => GadgetNetwork.MatrixReady, __instance, id)); return(true); } GadgetNetwork.ConvertIDToLocal(ChipRegistry.Singleton, ref id); return(true); }
public static bool Prefix(GameScript __instance, ref int a, int challenge) { if (!GadgetNetwork.MatrixReady && GadgetNetwork.GetTimeSinceConnect() < GadgetNetwork.MatrixTimeout) { __instance.StartCoroutine(GadgetUtils.WaitAndInvoke(RPCMethod, GadgetNetwork.MatrixTimeout - GadgetNetwork.GetTimeSinceConnect(), () => GadgetNetwork.MatrixReady, __instance, a, challenge)); return(true); } GadgetNetwork.ConvertIDToLocal(PlanetRegistry.Singleton, ref a); return(true); }
public static bool Prefix(PortalAppearance __instance, ref int b, int h, int num) { if (!GadgetNetwork.MatrixReady && GadgetNetwork.GetTimeSinceConnect() < GadgetNetwork.MatrixTimeout) { __instance.StartCoroutine(GadgetUtils.WaitAndInvoke(RPCMethod, GadgetNetwork.MatrixTimeout - GadgetNetwork.GetTimeSinceConnect(), () => GadgetNetwork.MatrixReady, __instance, b, h, num)); return(true); } GadgetNetwork.ConvertIDToLocal(PlanetRegistry.Singleton, ref b); return(true); }
public static bool Prefix(KylockeStand __instance, ref int[] p) { if (!GadgetNetwork.MatrixReady && GadgetNetwork.GetTimeSinceConnect() < GadgetNetwork.MatrixTimeout) { __instance.StartCoroutine(GadgetUtils.WaitAndInvoke(RPCMethod, GadgetNetwork.MatrixTimeout - GadgetNetwork.GetTimeSinceConnect(), () => GadgetNetwork.MatrixReady, __instance, p)); return(false); } GadgetNetwork.ConvertIDToLocal(ItemRegistry.Singleton, ref p[0]); return(true); }
public static bool Prefix(DroidManager __instance, ref int[] d) { if (!GadgetNetwork.MatrixReady && GadgetNetwork.GetTimeSinceConnect() < GadgetNetwork.MatrixTimeout) { __instance.StartCoroutine(GadgetUtils.WaitAndInvoke(RPCMethod, GadgetNetwork.MatrixTimeout - GadgetNetwork.GetTimeSinceConnect(), () => GadgetNetwork.MatrixReady, __instance, d)); return(false); } GadgetNetwork.ConvertIDToLocal(ItemRegistry.GetSingleton(), ref d[0]); GadgetNetwork.ConvertIDToLocal(ItemRegistry.GetSingleton(), ref d[1]); GadgetNetwork.ConvertIDToLocal(ItemRegistry.GetSingleton(), ref d[2]); return(true); }
public static bool Prefix(GameScript __instance, ref int[] st, Vector3 pos) { if (!GadgetNetwork.MatrixReady && GadgetNetwork.GetTimeSinceConnect() < GadgetNetwork.MatrixTimeout) { __instance.StartCoroutine(GadgetUtils.WaitAndInvoke(RPCMethod, GadgetNetwork.MatrixTimeout - GadgetNetwork.GetTimeSinceConnect(), () => GadgetNetwork.MatrixReady, __instance, st, pos)); return(false); } GadgetNetwork.ConvertIDToLocal(ItemRegistry.Singleton, ref st[0]); GadgetNetwork.ConvertIDToLocal(ItemRegistry.Singleton, ref st[5]); GadgetNetwork.ConvertIDToLocal(ItemRegistry.Singleton, ref st[6]); GadgetNetwork.ConvertIDToLocal(ItemRegistry.Singleton, ref st[7]); return(true); }
public static bool Prefix(ChunkWorld __instance, ref int[] gg) { if (!GadgetNetwork.MatrixReady && GadgetNetwork.GetTimeSinceConnect() < GadgetNetwork.MatrixTimeout) { __instance.StartCoroutine(GadgetUtils.WaitAndInvoke(RPCMethod, GadgetNetwork.MatrixTimeout - GadgetNetwork.GetTimeSinceConnect(), () => GadgetNetwork.MatrixReady, __instance, gg)); return(false); } for (int i = 0; i < gg.Length; i++) { GadgetNetwork.ConvertIDToLocal(TileRegistry.Singleton, ref gg[i]); } return(true); }
public static bool Prefix(DroidManager __instance, ref int[] d) { if (!GadgetNetwork.MatrixReady && GadgetNetwork.GetTimeSinceConnect() < GadgetNetwork.MatrixTimeout) { __instance.StartCoroutine(GadgetUtils.WaitAndInvoke(RPCMethod, GadgetNetwork.MatrixTimeout - GadgetNetwork.GetTimeSinceConnect(), () => GadgetNetwork.MatrixReady, __instance, d)); d = new int[] { 1000, 1000, 1000 }; // Fix to bug with host droids in multiplayer return(true); } GadgetNetwork.ConvertIDToLocal(ItemRegistry.Singleton, ref d[0]); GadgetNetwork.ConvertIDToLocal(ItemRegistry.Singleton, ref d[1]); GadgetNetwork.ConvertIDToLocal(ItemRegistry.Singleton, ref d[2]); return(true); }
internal static void OnSceneLoaded(Scene scene, LoadSceneMode mode) { if (scene.buildIndex == 0) { GadgetNetwork.ResetIDMatrix(); LoadMainMenu(); SceneInjector.InjectMainMenu(); } else { LoadIngame(); SceneInjector.InjectIngame(); } }
public static bool Prefix(SpawnerScript __instance, ref int[] s) { if (!GadgetNetwork.MatrixReady && GadgetNetwork.GetTimeSinceConnect() < GadgetNetwork.MatrixTimeout) { __instance.StartCoroutine(GadgetUtils.WaitAndInvoke(RPCMethod, GadgetNetwork.MatrixTimeout - GadgetNetwork.GetTimeSinceConnect(), () => GadgetNetwork.MatrixReady, __instance, s)); return(false); } GadgetNetwork.ConvertIDToLocal(PlanetRegistry.Singleton, ref s[0]); for (int i = 1; i < s.Length; i++) { GadgetNetwork.ConvertIDToLocal(TileRegistry.Singleton, ref s[i]); } return(true); }
public static bool Prefix(PlayerAppearance __instance, ref int[] ei, int a, bool dead) { if (!GadgetNetwork.MatrixReady && GadgetNetwork.GetTimeSinceConnect() < GadgetNetwork.MatrixTimeout) { __instance.StartCoroutine(GadgetUtils.WaitAndInvoke(RPCMethod, GadgetNetwork.MatrixTimeout - GadgetNetwork.GetTimeSinceConnect(), () => GadgetNetwork.MatrixReady, __instance, ei, a, dead)); return(false); } GadgetNetwork.ConvertIDToLocal(ItemRegistry.Singleton, ref ei[0]); GadgetNetwork.ConvertIDToLocal(ItemRegistry.Singleton, ref ei[1]); GadgetNetwork.ConvertIDToLocal(ItemRegistry.Singleton, ref ei[2]); GadgetNetwork.ConvertIDToLocal(ItemRegistry.Singleton, ref ei[3]); GadgetNetwork.ConvertIDToLocal(null /* RaceRegistry */, ref ei[4]); GadgetNetwork.ConvertIDToLocal(null /* UniformRegistry */, ref ei[6]); GadgetNetwork.ConvertIDToLocal(null /* AugmentRegistry */, ref ei[7]); return(true); }
public static bool Prefix(SpawnBlock __instance) { if (!GadgetNetwork.MatrixReady && GadgetNetwork.GetTimeSinceConnect() < GadgetNetwork.MatrixTimeout) { if (InstanceTracker.GameScript.gameObject.GetComponent <RPCHooks>() == null) { InstanceTracker.GameScript.gameObject.AddComponent <RPCHooks>(); } __instance.StartCoroutine(WaitAndTryAgain(__instance)); return(false); } else { return(true); } }
internal static void DisableQueuedGadgets() { Logger.Log("Unloading Gadgets..."); foreach (GadgetInfo gadget in QueuedGadgets) { Logger.Log("Unloading Gadget '" + gadget.Attribute.Name + "'"); gadget.Gadget.UnloadInternal(); LootTables.RemoveModEntries(gadget.Gadget.ModID); GadgetCoreAPI.RemoveModResources(gadget.Gadget.ModID); GadgetCoreAPI.UnregisterGadgetRPCs(gadget.Gadget.ModID); GadgetCoreAPI.UnregisterStatModifiers(gadget.Gadget.ModID); GadgetConsole.UnregisterGadgetCommands(gadget.Gadget.ModID); GadgetNetwork.UnregisterSyncVars(gadget.Gadget.ModID); PlanetRegistry.UnregisterGadget(gadget.Gadget.ModID); DialogChains.UnregisterGadgetChains(gadget.Gadget.ModID); foreach (Registry reg in GameRegistry.ListAllRegistries()) { reg.UnregisterGadget(gadget); } } Logger.Log("Done unloading Gadgets."); Logger.Log("Unpatching Gadgets..."); foreach (GadgetInfo gadget in QueuedGadgets.ToList()) { if (gadget.Gadget.HarmonyInstance == null) { continue; } Logger.Log("Unpatching Gadget '" + gadget.Attribute.Name + "'"); try { gadget.Gadget.HarmonyInstance.UnpatchAll(gadget.Mod.Name + "." + gadget.Attribute.Name + ".gadget"); } catch (Exception e) { Logger.LogError("Exception Unpatching Gadget '" + gadget.Attribute.Name + "':" + Environment.NewLine + e.ToString()); } } Logger.Log("Done unpatching Gadgets."); Logger.Log("Sorting Gadgets..."); Gadgets.SortGadgets(); Logger.Log("Done sorting Gadgets."); QueuedGadgets.Clear(); }
public static bool Prefix(GameScript __instance) { if (InstanceTracker.GameScript.gameObject.GetComponent <RPCHooks>() == null) { InstanceTracker.GameScript.gameObject.AddComponent <RPCHooks>(); } RPCHooks.InitiateGadgetNetwork(); if (GadgetNetwork.connectTime < 0) { GadgetNetwork.connectTime = Time.realtimeSinceStartup; } if (!GadgetNetwork.MatrixReady && GadgetNetwork.GetTimeSinceConnect() < GadgetNetwork.MatrixTimeout) { __instance.StartCoroutine(WaitAndTryAgain(__instance)); return(false); } else { return(true); } }
public static bool Prefix(GameScript __instance) { if (!GadgetNetwork.MatrixReady && GadgetNetwork.GetTimeSinceConnect() < GadgetNetwork.MatrixTimeout) { if (InstanceTracker.GameScript.gameObject.GetComponent <RPCHooks>() == null) { InstanceTracker.GameScript.gameObject.AddComponent <RPCHooks>(); } __instance.StartCoroutine(WaitAndTryAgain(__instance)); return(false); } else { if (GadgetNetwork.GetTimeSinceConnect() > GadgetNetwork.MatrixTimeout && GadgetMods.ListAllModInfos().Any(x => x.Attribute.RequiredOnClients)) { Network.Disconnect(); return(false); } return(true); } }
public static bool Prefix(GameScript __instance) { if (!GadgetNetwork.MatrixReady && GadgetNetwork.GetTimeSinceConnect() < GadgetNetwork.MatrixTimeout) { if (InstanceTracker.GameScript.gameObject.GetComponent <RPCHooks>() == null) { InstanceTracker.GameScript.gameObject.AddComponent <RPCHooks>(); } __instance.StartCoroutine(WaitAndTryAgain(__instance)); return(false); } else { if (GadgetNetwork.GetTimeSinceConnect() > GadgetNetwork.MatrixTimeout && Gadgets.ListAllGadgetInfos().Any(x => x.Attribute.RequiredOnClients)) { GadgetCore.CoreLogger.LogWarning("Disconnecting from server due to timout! You can try raising NetworkTimeout in the config."); Network.Disconnect(); return(false); } return(true); } }
internal void RPCUpdateSyncVar(string name, byte[] valueBytes, bool local, string playerName) { BinaryFormatter formatter = new BinaryFormatter(); MemoryStream stream = new MemoryStream(); stream.Write(valueBytes, 0, valueBytes.Length); stream.Position = 0; object value = formatter.Deserialize(stream); stream.Close(); if (local) { GadgetNetwork.UpdateLocalSyncVarInternal(name, value, playerName); } else if (playerName == GadgetNetwork.ServerPlayerName) { GadgetNetwork.UpdateSyncVarInternal(name, value); } else { GadgetCore.CoreLogger.LogWarning("Received non-local UpdateSyncVar RPC from player other than the server: " + playerName); } }
private static IEnumerator WaitAndTryAgain(SpawnBlock __instance) { yield return(new WaitUntil(() => GadgetNetwork.MatrixReady || GadgetNetwork.GetTimeSinceConnect() > GadgetNetwork.MatrixTimeout)); OnConnectedToServer.Invoke(__instance, new object[] { }); }
private static IEnumerator WaitAndTryAgain(GameScript __instance) { yield return(new WaitUntil(() => GadgetNetwork.MatrixReady || GadgetNetwork.GetTimeSinceConnect() > GadgetNetwork.MatrixTimeout)); OnServerInitialized.Invoke(__instance, new object[] { }); }
public static bool Prefix(GameScript __instance, ref bool ___shiftclicking, Item[] ___inventory, ref Item[] ___storage, int slot, int ___curStoragePage, ref int ___droidCount, ref IEnumerator __result) { if (!___shiftclicking) { itemInSlot = ___inventory[slot]; ItemInfo slotInfo = ItemRegistry.Singleton.GetEntry(itemInSlot.id); ItemType slotItemType = slotInfo != null ? (slotInfo.Type & (ItemType.EQUIP_MASK | ItemType.TYPE_MASK)) : ItemRegistry.GetDefaultTypeByID(itemInSlot.id); int num = 0; int num2 = ___curStoragePage * 30; int num3 = num2 + 30; if ((slotItemType & ItemType.NONSTACKING) == ItemType.STACKING) { bool flag1 = false, flag2 = false; for (int i = num2; i < num3; i++) { if (GadgetCoreAPI.CanItemsStack(___storage[i], itemInSlot) && ___storage[i].q < 9999) { if (___storage[i].q + ___inventory[slot].q <= 9999) { flag1 = true; num = i; } else { if (!flag2) { __instance.GetComponent <AudioSource>().PlayOneShot((AudioClip)Resources.Load("Au/CLICK3"), Menuu.soundLevel / 10f); } ___inventory[slot].q -= 9999 - ___storage[i].q; ___storage[i].q = 9999; flag2 = true; } break; } } if (flag1) { __instance.GetComponent <AudioSource>().PlayOneShot((AudioClip)Resources.Load("Au/CLICK3"), Menuu.soundLevel / 10f); ___storage[num].q += ___inventory[slot].q; ___inventory[slot] = new Item(0, 0, 0, 0, 0, new int[3], new int[3]); } else { for (int i = num2; i < num3; i++) { if (___storage[i].id == 0) { if (!flag2) { __instance.GetComponent <AudioSource>().PlayOneShot((AudioClip)Resources.Load("Au/CLICK3"), Menuu.soundLevel / 10f); } ___storage[i] = ___inventory[slot]; ___inventory[slot] = new Item(0, 0, 0, 0, 0, new int[3], new int[3]); break; } else if (GadgetCoreAPI.CanItemsStack(___storage[i], itemInSlot) && ___storage[i].q < 9999) { if (___storage[i].q + ___inventory[slot].q <= 9999) { if (!flag2) { __instance.GetComponent <AudioSource>().PlayOneShot((AudioClip)Resources.Load("Au/CLICK3"), Menuu.soundLevel / 10f); } ___storage[i].q += ___inventory[slot].q; ___inventory[slot] = new Item(0, 0, 0, 0, 0, new int[3], new int[3]); break; } else { if (!flag2) { __instance.GetComponent <AudioSource>().PlayOneShot((AudioClip)Resources.Load("Au/CLICK3"), Menuu.soundLevel / 10f); } ___inventory[slot].q -= 9999 - ___storage[i].q; ___storage[i].q = 9999; } flag2 = true; } } } __instance.RefreshSlot(slot); __instance.StartCoroutine(__instance.RefreshStoragePage(___curStoragePage)); } else { for (int i = num2; i < num3; i++) { if (___storage[i].id == 0) { if (slot > 35) { if (slot == 36) { GameScript.equippedIDs[0] = 0; } else if (slot == 37) { GameScript.equippedIDs[1] = 0; } else if (slot == 38) { GameScript.equippedIDs[2] = 0; } else if (slot == 39) { GameScript.equippedIDs[3] = 0; } else if (slot == 40) { GameScript.equippedIDs[4] = 0; } else if (slot == 41) { GameScript.equippedIDs[5] = 0; } int[] stats = GadgetCoreAPI.equippedGearStats[slot - 36]; for (int s = 0; s < 6; s++) { if (stats[s] > 0) { GameScript.GEARSTAT[s] -= stats[s]; __instance.txtPlayerStat[s].GetComponent <Animation>().Play(); } } GadgetCoreAPI.equippedGearStats[slot - 36] = new int[] { 0, 0, 0, 0, 0, 0 }; __instance.RefreshStats(); Network.RemoveRPCs(MenuScript.playerAppearance.GetComponent <NetworkView>().viewID); int[] convertedIDs = new int[] { GadgetNetwork.ConvertIDToHost(ItemRegistry.Singleton, GameScript.equippedIDs[0]), GadgetNetwork.ConvertIDToHost(ItemRegistry.Singleton, GameScript.equippedIDs[1]), GadgetNetwork.ConvertIDToHost(ItemRegistry.Singleton, GameScript.equippedIDs[2]), GadgetNetwork.ConvertIDToHost(ItemRegistry.Singleton, GameScript.equippedIDs[3]), GadgetNetwork.ConvertIDToHost(null /* RaceRegistry */, GameScript.equippedIDs[4]), GameScript.equippedIDs[5], GadgetNetwork.ConvertIDToHost(null /* UniformRegistry */, GameScript.equippedIDs[6]), GadgetNetwork.ConvertIDToHost(null /* AugmentRegistry */, GameScript.equippedIDs[7]) }; MenuScript.playerAppearance.GetComponent <NetworkView>().RPC("UA", RPCMode.AllBuffered, new object[] { convertedIDs, 0, GameScript.dead }); __instance.UpdateHP(); __instance.UpdateEnergy(); __instance.UpdateMana(); } __instance.GetComponent <AudioSource>().PlayOneShot((AudioClip)Resources.Load("Au/CLICK3"), Menuu.soundLevel / 10f); ___storage[i] = ___inventory[slot]; ___inventory[slot] = new Item(0, 0, 0, 0, 0, new int[3], new int[3]); __instance.RefreshSlot(slot); __instance.StartCoroutine(__instance.RefreshStoragePage(___curStoragePage)); if (slotItemType == ItemType.DROID && slot > 41) { ___droidCount--; __instance.UpdateDroids(); } if (slotInfo != null) { slotInfo.InvokeOnDequip(slot); } break; } } } ___shiftclicking = false; __result = FakeRoutine(); return(false); } return(true); }
public static bool Prefix(NetworkView __instance, string name, RPCMode mode, ref object[] args) { if (Assembly.GetCallingAssembly().Equals(typeof(GameScript).Assembly)) { switch (name) { case "Set": if (args.Length == 3) { if (args[0] is int) { if (!GadgetNetwork.MatrixReady && GadgetNetwork.GetTimeSinceConnect() < GadgetNetwork.MatrixTimeout) { InstanceTracker.GameScript.StartCoroutine(GadgetUtils.WaitAndInvoke(RPCMethod, GadgetNetwork.MatrixTimeout - GadgetNetwork.GetTimeSinceConnect(), () => GadgetNetwork.MatrixReady, __instance, name, mode, args)); return(false); } GadgetNetwork.ConvertIDToHost(PlanetRegistry.Singleton, ref args[0]); } } else if (args.Length == 1) { if (args[0] is int[] && (args[0] as int[]).Length == 2) { if (!GadgetNetwork.MatrixReady && GadgetNetwork.GetTimeSinceConnect() < GadgetNetwork.MatrixTimeout) { InstanceTracker.GameScript.StartCoroutine(GadgetUtils.WaitAndInvoke(RPCMethod, GadgetNetwork.MatrixTimeout - GadgetNetwork.GetTimeSinceConnect(), () => GadgetNetwork.MatrixReady, __instance, name, mode, args)); return(false); } ItemStandScript itemStandScript = __instance.GetComponent <ItemStandScript>(); if (itemStandScript == null || !itemStandScript.isChipStand) { GadgetNetwork.ConvertIDToHost(ItemRegistry.Singleton, ref (args[0] as int[])[0]); } else { GadgetNetwork.ConvertIDToHost(ChipRegistry.Singleton, ref (args[0] as int[])[0]); } } else if (args[0] is Package2) { if (!GadgetNetwork.MatrixReady && GadgetNetwork.GetTimeSinceConnect() < GadgetNetwork.MatrixTimeout) { InstanceTracker.GameScript.StartCoroutine(GadgetUtils.WaitAndInvoke(RPCMethod, GadgetNetwork.MatrixTimeout - GadgetNetwork.GetTimeSinceConnect(), () => GadgetNetwork.MatrixReady, __instance, name, mode, args)); return(false); } GadgetNetwork.ConvertIDToHost(ItemRegistry.Singleton /* ProjectileRegistry */, ref (args[0] as Package2).id); } } break; case "UA": if (args.Length == 3) { if (args[0] is int[] && (args[0] as int[]).Length == 8) { if (!GadgetNetwork.MatrixReady && GadgetNetwork.GetTimeSinceConnect() < GadgetNetwork.MatrixTimeout) { InstanceTracker.GameScript.StartCoroutine(GadgetUtils.WaitAndInvoke(RPCMethod, GadgetNetwork.MatrixTimeout - GadgetNetwork.GetTimeSinceConnect(), () => GadgetNetwork.MatrixReady, __instance, name, mode, args)); return(false); } GadgetNetwork.ConvertIDToHost(ItemRegistry.Singleton, ref (args[0] as int[])[0]); GadgetNetwork.ConvertIDToHost(ItemRegistry.Singleton, ref (args[0] as int[])[1]); GadgetNetwork.ConvertIDToHost(ItemRegistry.Singleton, ref (args[0] as int[])[2]); GadgetNetwork.ConvertIDToHost(ItemRegistry.Singleton, ref (args[0] as int[])[3]); GadgetNetwork.ConvertIDToHost(null /* RaceRegistry */, ref (args[0] as int[])[4]); GadgetNetwork.ConvertIDToHost(null /* UniformRegistry */, ref (args[0] as int[])[6]); GadgetNetwork.ConvertIDToHost(null /* AugmentRegistry */, ref (args[0] as int[])[7]); } } else if (args.Length == 1) { if (args[0] is int[] && (args[0] as int[]).Length == 3) { if (!GadgetNetwork.MatrixReady && GadgetNetwork.GetTimeSinceConnect() < GadgetNetwork.MatrixTimeout) { InstanceTracker.GameScript.StartCoroutine(GadgetUtils.WaitAndInvoke(RPCMethod, GadgetNetwork.MatrixTimeout - GadgetNetwork.GetTimeSinceConnect(), () => GadgetNetwork.MatrixReady, __instance, name, mode, args)); return(false); } GadgetNetwork.ConvertIDToHost(ItemRegistry.Singleton, ref (args[0] as int[])[0]); GadgetNetwork.ConvertIDToHost(ItemRegistry.Singleton, ref (args[0] as int[])[1]); GadgetNetwork.ConvertIDToHost(ItemRegistry.Singleton, ref (args[0] as int[])[2]); } } break; case "ShootProjectile": if (args.Length == 3) { if (args[0] is int) { if (!GadgetNetwork.MatrixReady && GadgetNetwork.GetTimeSinceConnect() < GadgetNetwork.MatrixTimeout) { InstanceTracker.GameScript.StartCoroutine(GadgetUtils.WaitAndInvoke(RPCMethod, GadgetNetwork.MatrixTimeout - GadgetNetwork.GetTimeSinceConnect(), () => GadgetNetwork.MatrixReady, __instance, name, mode, args)); return(false); } GadgetNetwork.ConvertIDToHost(ItemRegistry.Singleton /* ProjectileRegistry */, ref args[0]); } } break; case "CreateWorld": if (args.Length == 1) { if (args[0] is int[] && (args[0] as int[]).Length > 1) { if (!GadgetNetwork.MatrixReady && GadgetNetwork.GetTimeSinceConnect() < GadgetNetwork.MatrixTimeout) { InstanceTracker.GameScript.StartCoroutine(GadgetUtils.WaitAndInvoke(RPCMethod, GadgetNetwork.MatrixTimeout - GadgetNetwork.GetTimeSinceConnect(), () => GadgetNetwork.MatrixReady, __instance, name, mode, args)); return(false); } GadgetNetwork.ConvertIDToHost(PlanetRegistry.Singleton, ref (args[0] as int[])[0]); for (int i = 1; i < (args[0] as int[]).Length; i++) { GadgetNetwork.ConvertIDToHost(TileRegistry.Singleton, ref (args[0] as int[])[i]); } } } break; case "CreateTown": if (args.Length == 1) { if (args[0] is int[] && (args[0] as int[]).Length == 2) { if (!GadgetNetwork.MatrixReady && GadgetNetwork.GetTimeSinceConnect() < GadgetNetwork.MatrixTimeout) { InstanceTracker.GameScript.StartCoroutine(GadgetUtils.WaitAndInvoke(RPCMethod, GadgetNetwork.MatrixTimeout - GadgetNetwork.GetTimeSinceConnect(), () => GadgetNetwork.MatrixReady, __instance, name, mode, args)); return(false); } GadgetNetwork.ConvertIDToHost(PlanetRegistry.Singleton, ref (args[0] as int[])[0]); } } break; case "SpawnProjectile": if (args.Length == 4) { if (args[1] is int) { if (!GadgetNetwork.MatrixReady && GadgetNetwork.GetTimeSinceConnect() < GadgetNetwork.MatrixTimeout) { InstanceTracker.GameScript.StartCoroutine(GadgetUtils.WaitAndInvoke(RPCMethod, GadgetNetwork.MatrixTimeout - GadgetNetwork.GetTimeSinceConnect(), () => GadgetNetwork.MatrixReady, __instance, name, mode, args)); return(false); } GadgetNetwork.ConvertIDToHost(ItemRegistry.Singleton /* ProjectileRegistry */, ref args[1]); } } break; case "SetNetworked": if (args.Length == 3) { if (args[1] is int) { if (!GadgetNetwork.MatrixReady && GadgetNetwork.GetTimeSinceConnect() < GadgetNetwork.MatrixTimeout) { InstanceTracker.GameScript.StartCoroutine(GadgetUtils.WaitAndInvoke(RPCMethod, GadgetNetwork.MatrixTimeout - GadgetNetwork.GetTimeSinceConnect(), () => GadgetNetwork.MatrixReady, __instance, name, mode, args)); return(false); } GadgetNetwork.ConvertIDToHost(ItemRegistry.Singleton /* ProjectileRegistry */, ref args[1]); } } break; case "SetName": if (args.Length == 1) { if (args[0] is int) { if (!GadgetNetwork.MatrixReady && GadgetNetwork.GetTimeSinceConnect() < GadgetNetwork.MatrixTimeout) { InstanceTracker.GameScript.StartCoroutine(GadgetUtils.WaitAndInvoke(RPCMethod, GadgetNetwork.MatrixTimeout - GadgetNetwork.GetTimeSinceConnect(), () => GadgetNetwork.MatrixReady, __instance, name, mode, args)); return(false); } GadgetNetwork.ConvertIDToHost(PlanetRegistry.Singleton, ref args[0]); } } break; case "Staff": if (args.Length == 3) { if (args[0] is int) { if (!GadgetNetwork.MatrixReady && GadgetNetwork.GetTimeSinceConnect() < GadgetNetwork.MatrixTimeout) { InstanceTracker.GameScript.StartCoroutine(GadgetUtils.WaitAndInvoke(RPCMethod, GadgetNetwork.MatrixTimeout - GadgetNetwork.GetTimeSinceConnect(), () => GadgetNetwork.MatrixReady, __instance, name, mode, args)); return(false); } GadgetNetwork.ConvertIDToHost(ItemRegistry.Singleton /* ProjectileRegistry */, ref args[0]); } } break; case "ShootSpecial": if (args.Length == 3) { if (args[0] is int) { if (!GadgetNetwork.MatrixReady && GadgetNetwork.GetTimeSinceConnect() < GadgetNetwork.MatrixTimeout) { InstanceTracker.GameScript.StartCoroutine(GadgetUtils.WaitAndInvoke(RPCMethod, GadgetNetwork.MatrixTimeout - GadgetNetwork.GetTimeSinceConnect(), () => GadgetNetwork.MatrixReady, __instance, name, mode, args)); return(false); } GadgetNetwork.ConvertIDToHost(ItemRegistry.Singleton /* ProjectileRegistry */, ref args[0]); } } break; case "ShootProjectile2": if (args.Length == 4) { if (args[0] is int) { if (!GadgetNetwork.MatrixReady && GadgetNetwork.GetTimeSinceConnect() < GadgetNetwork.MatrixTimeout) { InstanceTracker.GameScript.StartCoroutine(GadgetUtils.WaitAndInvoke(RPCMethod, GadgetNetwork.MatrixTimeout - GadgetNetwork.GetTimeSinceConnect(), () => GadgetNetwork.MatrixReady, __instance, name, mode, args)); return(false); } GadgetNetwork.ConvertIDToHost(ItemRegistry.Singleton /* ProjectileRegistry */, ref args[0]); } } break; case "NetworkedProjectile": if (args.Length == 4) { if (args[0] is int) { if (!GadgetNetwork.MatrixReady && GadgetNetwork.GetTimeSinceConnect() < GadgetNetwork.MatrixTimeout) { InstanceTracker.GameScript.StartCoroutine(GadgetUtils.WaitAndInvoke(RPCMethod, GadgetNetwork.MatrixTimeout - GadgetNetwork.GetTimeSinceConnect(), () => GadgetNetwork.MatrixReady, __instance, name, mode, args)); return(false); } GadgetNetwork.ConvertIDToHost(ItemRegistry.Singleton /* ProjectileRegistry */, ref args[0]); } } break; case "Init": if (args.Length == 1) { if (args[0] is int[] && (args[0] as int[]).Length >= 11) { if (!GadgetNetwork.MatrixReady && GadgetNetwork.GetTimeSinceConnect() < GadgetNetwork.MatrixTimeout) { InstanceTracker.GameScript.StartCoroutine(GadgetUtils.WaitAndInvoke(RPCMethod, GadgetNetwork.MatrixTimeout - GadgetNetwork.GetTimeSinceConnect(), () => GadgetNetwork.MatrixReady, __instance, name, mode, args)); return(false); } GadgetNetwork.ConvertIDToHost(ItemRegistry.Singleton, ref (args[0] as int[])[0]); GadgetNetwork.ConvertIDToHost(ItemRegistry.Singleton, ref (args[0] as int[])[5]); GadgetNetwork.ConvertIDToHost(ItemRegistry.Singleton, ref (args[0] as int[])[6]); GadgetNetwork.ConvertIDToHost(ItemRegistry.Singleton, ref (args[0] as int[])[7]); } } break; case "Chip": if (args.Length == 1) { if (args[0] is int) { if (!GadgetNetwork.MatrixReady && GadgetNetwork.GetTimeSinceConnect() < GadgetNetwork.MatrixTimeout) { InstanceTracker.GameScript.StartCoroutine(GadgetUtils.WaitAndInvoke(RPCMethod, GadgetNetwork.MatrixTimeout - GadgetNetwork.GetTimeSinceConnect(), () => GadgetNetwork.MatrixReady, __instance, name, mode, args)); return(false); } GadgetNetwork.ConvertIDToHost(ChipRegistry.Singleton, ref args[0]); } } break; case "SpawnItem": if (args.Length == 2) { if (args[0] is int[] && (args[0] as int[]).Length >= 11) { if (!GadgetNetwork.MatrixReady && GadgetNetwork.GetTimeSinceConnect() < GadgetNetwork.MatrixTimeout) { InstanceTracker.GameScript.StartCoroutine(GadgetUtils.WaitAndInvoke(RPCMethod, GadgetNetwork.MatrixTimeout - GadgetNetwork.GetTimeSinceConnect(), () => GadgetNetwork.MatrixReady, __instance, name, mode, args)); return(false); } GadgetNetwork.ConvertIDToHost(ItemRegistry.Singleton, ref (args[0] as int[])[0]); GadgetNetwork.ConvertIDToHost(ItemRegistry.Singleton, ref (args[0] as int[])[5]); GadgetNetwork.ConvertIDToHost(ItemRegistry.Singleton, ref (args[0] as int[])[6]); GadgetNetwork.ConvertIDToHost(ItemRegistry.Singleton, ref (args[0] as int[])[7]); } } break; case "ChangePortal": if (args.Length == 2) { if (args[0] is int) { if (!GadgetNetwork.MatrixReady && GadgetNetwork.GetTimeSinceConnect() < GadgetNetwork.MatrixTimeout) { InstanceTracker.GameScript.StartCoroutine(GadgetUtils.WaitAndInvoke(RPCMethod, GadgetNetwork.MatrixTimeout - GadgetNetwork.GetTimeSinceConnect(), () => GadgetNetwork.MatrixReady, __instance, name, mode, args)); return(false); } GadgetNetwork.ConvertIDToHost(PlanetRegistry.Singleton, ref args[0]); } } break; case "ChangePortal2": if (args.Length == 2) { if (args[0] is int) { if (!GadgetNetwork.MatrixReady && GadgetNetwork.GetTimeSinceConnect() < GadgetNetwork.MatrixTimeout) { InstanceTracker.GameScript.StartCoroutine(GadgetUtils.WaitAndInvoke(RPCMethod, GadgetNetwork.MatrixTimeout - GadgetNetwork.GetTimeSinceConnect(), () => GadgetNetwork.MatrixReady, __instance, name, mode, args)); return(false); } GadgetNetwork.ConvertIDToHost(PlanetRegistry.Singleton, ref args[0]); } } break; case "RefreshWall": if (args.Length == 1) { if (args[0] is int[] arr) { for (int i = 0; i < arr.Length; i++) { if (!GadgetNetwork.MatrixReady && GadgetNetwork.GetTimeSinceConnect() < GadgetNetwork.MatrixTimeout) { InstanceTracker.GameScript.StartCoroutine(GadgetUtils.WaitAndInvoke(RPCMethod, GadgetNetwork.MatrixTimeout - GadgetNetwork.GetTimeSinceConnect(), () => GadgetNetwork.MatrixReady, __instance, name, mode, args)); return(false); } GadgetNetwork.ConvertIDToHost(TileRegistry.Singleton, ref arr[i]); } } } break; case "RefreshShip": if (args.Length == 2) { if (args[0] is int[] arr1 && args[1] is int[] arr2) { for (int i = 0; i < arr1.Length; i++) { if (!GadgetNetwork.MatrixReady && GadgetNetwork.GetTimeSinceConnect() < GadgetNetwork.MatrixTimeout) { InstanceTracker.GameScript.StartCoroutine(GadgetUtils.WaitAndInvoke(RPCMethod, GadgetNetwork.MatrixTimeout - GadgetNetwork.GetTimeSinceConnect(), () => GadgetNetwork.MatrixReady, __instance, name, mode, args)); return(false); } GadgetNetwork.ConvertIDToHost(TileRegistry.Singleton, ref arr1[i]); } for (int i = 0; i < (arr2 as int[]).Length; i++) { if (!GadgetNetwork.MatrixReady && GadgetNetwork.GetTimeSinceConnect() < GadgetNetwork.MatrixTimeout) { InstanceTracker.GameScript.StartCoroutine(GadgetUtils.WaitAndInvoke(RPCMethod, GadgetNetwork.MatrixTimeout - GadgetNetwork.GetTimeSinceConnect(), () => GadgetNetwork.MatrixReady, __instance, name, mode, args)); return(false); } GadgetNetwork.ConvertIDToHost(TileRegistry.Singleton, ref arr2[i]); } } } break; case "SetMaterial": if (args.Length == 1) { if (args[0] is int) { if (!GadgetNetwork.MatrixReady && GadgetNetwork.GetTimeSinceConnect() < GadgetNetwork.MatrixTimeout) { InstanceTracker.GameScript.StartCoroutine(GadgetUtils.WaitAndInvoke(RPCMethod, GadgetNetwork.MatrixTimeout - GadgetNetwork.GetTimeSinceConnect(), () => GadgetNetwork.MatrixReady, __instance, name, mode, args)); return(false); } GadgetNetwork.ConvertIDToHost(PlanetRegistry.Singleton, ref args[0]); } } break; } } return(true); }
private static IEnumerator UseItemFinal(GameScript instance, int slot, ItemInfo item, Item[] inventory, bool usingItem) { int tempID = GameScript.equippedIDs[0]; GameScript.equippedIDs[0] = inventory[slot].id; int[] convertedIDs; if (usingItem) { convertedIDs = new int[] { GadgetNetwork.ConvertIDToHost(ItemRegistry.Singleton, GameScript.equippedIDs[0]), GadgetNetwork.ConvertIDToHost(ItemRegistry.Singleton, GameScript.equippedIDs[1]), GadgetNetwork.ConvertIDToHost(ItemRegistry.Singleton, GameScript.equippedIDs[2]), GadgetNetwork.ConvertIDToHost(ItemRegistry.Singleton, GameScript.equippedIDs[3]), GadgetNetwork.ConvertIDToHost(null /* RaceRegistry */, GameScript.equippedIDs[4]), GameScript.equippedIDs[5], GadgetNetwork.ConvertIDToHost(null /* UniformRegistry */, GameScript.equippedIDs[6]), GadgetNetwork.ConvertIDToHost(null /* AugmentRegistry */, GameScript.equippedIDs[7]) }; MenuScript.playerAppearance.GetComponent <NetworkView>().RPC("UA", RPCMode.AllBuffered, new object[] { convertedIDs, 2, GameScript.dead }); MenuScript.player.SendMessage("Use"); yield return(new WaitForSeconds(0.5f)); instance.StartCoroutine(UsingItem(instance)); instance.inventoryBarObj[slot].GetComponent <Animation>().Play(); item.InvokeOnUseFinal(slot); if ((item.Type & ItemType.CONSUMABLE) == ItemType.CONSUMABLE) { inventory[slot].q--; RefreshSlot.Invoke(instance, new object[] { slot }); } } else if (item.Tile != null) { instance.inventoryBarObj[slot].GetComponent <Animation>().Play(); GameScript.curBlockID = item.Tile.ID; curBlockSlot.SetValue(instance, slot); Renderer component = instance.hoverSprite.GetComponent <Renderer>(); component.material = (Material)Resources.Load("construct/c" + GameScript.curBlockID); component.material.mainTextureScale = new Vector2(1f, 1f); if (item.Tile.Type == TileType.WALL) { instance.hoverSprite.transform.localPosition = new Vector3(0f, 0f, 2f); } else { instance.hoverSprite.transform.localPosition = new Vector3(0f, 0f, 0f); } if (!GameScript.buildMode) { EnterBuildMode.Invoke(instance, new object[] { }); } else { instance.GetComponent <AudioSource>().PlayOneShot((AudioClip)Resources.Load("Au/buildmode")); } } else { convertedIDs = new int[] { GadgetNetwork.ConvertIDToHost(ItemRegistry.Singleton, GameScript.equippedIDs[0]), GadgetNetwork.ConvertIDToHost(ItemRegistry.Singleton, GameScript.equippedIDs[1]), GadgetNetwork.ConvertIDToHost(ItemRegistry.Singleton, GameScript.equippedIDs[2]), GadgetNetwork.ConvertIDToHost(ItemRegistry.Singleton, GameScript.equippedIDs[3]), GadgetNetwork.ConvertIDToHost(null /* RaceRegistry */, GameScript.equippedIDs[4]), GameScript.equippedIDs[5], GadgetNetwork.ConvertIDToHost(null /* UniformRegistry */, GameScript.equippedIDs[6]), GadgetNetwork.ConvertIDToHost(null /* AugmentRegistry */, GameScript.equippedIDs[7]) }; MenuScript.playerAppearance.GetComponent <NetworkView>().RPC("UA", RPCMode.AllBuffered, new object[] { convertedIDs, 2, GameScript.dead }); MenuScript.player.SendMessage("Use"); yield return(new WaitForSeconds(0.5f)); instance.StartCoroutine(UsingItem(instance)); instance.inventoryBarObj[slot].GetComponent <Animation>().Play(); } yield return(new WaitForSeconds(0.1f)); GameScript.equippedIDs[0] = tempID; convertedIDs = new int[] { GadgetNetwork.ConvertIDToHost(ItemRegistry.Singleton, GameScript.equippedIDs[0]), GadgetNetwork.ConvertIDToHost(ItemRegistry.Singleton, GameScript.equippedIDs[1]), GadgetNetwork.ConvertIDToHost(ItemRegistry.Singleton, GameScript.equippedIDs[2]), GadgetNetwork.ConvertIDToHost(ItemRegistry.Singleton, GameScript.equippedIDs[3]), GadgetNetwork.ConvertIDToHost(null /* RaceRegistry */, GameScript.equippedIDs[4]), GameScript.equippedIDs[5], GadgetNetwork.ConvertIDToHost(null /* UniformRegistry */, GameScript.equippedIDs[6]), GadgetNetwork.ConvertIDToHost(null /* AugmentRegistry */, GameScript.equippedIDs[7]) }; MenuScript.playerAppearance.GetComponent <NetworkView>().RPC("UA", RPCMode.AllBuffered, new object[] { convertedIDs, 0, GameScript.dead }); yield break; }
private static IEnumerator WaitAndTryAgain(GameScript __instance, NetworkPlayer pl) { yield return(new WaitUntil(() => GadgetNetwork.MatrixReady || GadgetNetwork.GetTimeSinceConnect() > GadgetNetwork.MatrixTimeout)); VerifyCompatible(pl); }
public static bool Prefix(PlayerScript __instance, ref int id, int dmg, NetworkPlayer pp, Vector3 dir) { if (!GadgetNetwork.MatrixReady && GadgetNetwork.GetTimeSinceConnect() < GadgetNetwork.MatrixTimeout) { __instance.StartCoroutine(GadgetUtils.WaitAndInvoke(RPCMethod, GadgetNetwork.MatrixTimeout - GadgetNetwork.GetTimeSinceConnect(), () => GadgetNetwork.MatrixReady, __instance, id, dmg, pp, dir)); return(false); } GadgetNetwork.ConvertIDToLocal(ItemRegistry.GetSingleton() /* ProjectileRegistry */, ref id); return(true); }
public static bool Prefix(SpawnerScript __instance, ref int[] s) { if (!GadgetNetwork.MatrixReady && GadgetNetwork.GetTimeSinceConnect() < GadgetNetwork.MatrixTimeout) { __instance.StartCoroutine(GadgetUtils.WaitAndInvoke(RPCMethod, GadgetNetwork.MatrixTimeout - GadgetNetwork.GetTimeSinceConnect(), () => GadgetNetwork.MatrixReady, __instance, s)); return(false); } GadgetNetwork.ConvertIDToLocal(null /* WorldRegistry */, ref s[0]); return(true); }
public static bool Prefix(GameScript __instance, ref bool ___planetTeleing, ref int[] ___portalUses) { int curPlanet = (PlanetRegistry.PlanetSelectorPage - 1) * 14 + GameScript.curPlanet; if (!___planetTeleing && curPlanet >= 0 && curPlanet - 14 < (PlanetRegistry.selectorPlanets?.Length ?? 0) && GameScript.curPlanetTrue != curPlanet) { if (PlanetRegistry.PlanetSelectorPage > 1) { if (PlanetRegistry.selectorPlanets[curPlanet - 14] is PlanetInfo planet) { __instance.InvokeMethod("RefreshChallengeButton"); Vector3 vector = Camera.main.ScreenToWorldPoint(Input.mousePosition); Object.Instantiate(Resources.Load("clickBurst"), new Vector3(vector.x, vector.y, 0f), Quaternion.identity); ___planetTeleing = true; if (Network.isServer) { __instance.InvokeMethod("ChangePortal", planet.ID, GameScript.challengeLevel); } else { __instance.GetComponent <NetworkView>().RPC("ChangePortal", RPCMode.Server, new object[] { GadgetNetwork.ConvertIDToHost(PlanetRegistry.Singleton, planet.ID), GameScript.challengeLevel }); } if (planet.PortalUses != -1) { planet.PortalUses--; } GameScript.curPlanetTrue = curPlanet; __instance.Planets(); __instance.StartCoroutine(__instance.InvokeMethod <IEnumerator>("PlanetTel")); } } else { __instance.InvokeMethod("RefreshChallengeButton"); Vector3 vector = Camera.main.ScreenToWorldPoint(Input.mousePosition); Object.Instantiate(Resources.Load("clickBurst"), new Vector3(vector.x, vector.y, 0f), Quaternion.identity); ___planetTeleing = true; if (Network.isServer) { __instance.InvokeMethod("ChangePortal", GameScript.curPlanet, GameScript.challengeLevel); } else { __instance.GetComponent <NetworkView>().RPC("ChangePortal", RPCMode.Server, new object[] { GadgetNetwork.ConvertIDToHost(PlanetRegistry.Singleton, GameScript.curPlanet), GameScript.challengeLevel }); } if (___portalUses[GameScript.curPlanet] != -1) { ___portalUses[GameScript.curPlanet]--; PreviewLabs.PlayerPrefs.SetInt("portalUses" + GameScript.curPlanet, ___portalUses[GameScript.curPlanet]); } GameScript.curPlanetTrue = GameScript.curPlanet; __instance.Planets(); __instance.StartCoroutine(__instance.InvokeMethod <IEnumerator>("PlanetTel")); } } return(false); }
public static bool Prefix(GameScript __instance, int slot, ref Item ___holdingItem, ref Item[] ___inventory, ref int ___droidCount, bool ___emblemAgain) { ItemInfo itemInfo = ItemRegistry.Singleton.GetEntry(___holdingItem.id); ItemType holdingItemType = itemInfo != null ? (itemInfo.Type & (ItemType.EQUIP_MASK | ItemType.TYPE_MASK)) : ItemRegistry.GetDefaultTypeByID(___holdingItem.id); if ((slot == 36 && (holdingItemType & ItemType.EQUIP_MASK) != (ItemType.WEAPON & ItemType.EQUIP_MASK)) || (slot == 37 && ((holdingItemType & ItemType.EQUIP_MASK) != (ItemType.OFFHAND & ItemType.EQUIP_MASK))) || (slot == 38 && ((holdingItemType & ItemType.EQUIP_MASK) != (ItemType.HELMET & ItemType.EQUIP_MASK))) || (slot == 39 && ((holdingItemType & ItemType.EQUIP_MASK) != (ItemType.ARMOR & ItemType.EQUIP_MASK))) || ((slot == 40 || slot == 41) && ((holdingItemType & ItemType.EQUIP_MASK) != (ItemType.RING & ItemType.EQUIP_MASK))) || (slot > 41 && ((holdingItemType & ItemType.EQUIP_MASK) != (ItemType.DROID & ItemType.EQUIP_MASK)))) { __instance.Error(2); } else { if (___emblemAgain) { EmblemForging.Invoke(__instance, new object[] { }); } ___inventory[slot] = ___holdingItem; ___holdingItem = new Item(0, 0, 0, 0, 0, new int[3], new int[3]); ItemType slotItemType = holdingItemType; RefreshSlot.Invoke(__instance, new object[] { slot }); RefreshHoldingSlot.Invoke(__instance, new object[] { }); if (slotItemType == ItemType.DROID && slot > 41 && slot < 45) { ___droidCount++; UpdateDroids.Invoke(__instance, new object[] { }); __instance.droid[slot - 42].SendMessage("SetStats", ___inventory[slot].id); } if (slot > 35) { if (slot > 41) { __instance.GetComponent <AudioSource>().PlayOneShot((AudioClip)Resources.Load("Au/placeD"), Menuu.soundLevel / 10f); } else { __instance.GetComponent <AudioSource>().PlayOneShot((AudioClip)Resources.Load("Au/bling"), Menuu.soundLevel / 10f); } Object.Instantiate(Resources.Load("clickBurst"), new Vector3(__instance.invIcon[slot].transform.position.x, __instance.invIcon[slot].transform.position.y, 0f), Quaternion.identity); if (slot == 36) { GameScript.equippedIDs[0] = ___inventory[slot].id; } else if (slot == 37) { GameScript.equippedIDs[1] = ___inventory[slot].id; } else if (slot == 38) { GameScript.equippedIDs[2] = ___inventory[slot].id; } else if (slot == 39) { GameScript.equippedIDs[3] = ___inventory[slot].id; } int[] gearStats = GadgetCoreAPI.GetGearStats(___inventory[slot]).GetStatArray(); for (int i = 0; i < 6; i++) { if (gearStats[i] > 0) { GameScript.GEARSTAT[i] += gearStats[i]; __instance.txtPlayerStat[i].GetComponent <Animation>().Play(); } } GadgetCoreAPI.equippedGearStats[slot - 36] = gearStats; RefreshStats.Invoke(__instance, new object[] { }); Network.RemoveRPCs(MenuScript.playerAppearance.GetComponent <NetworkView>().viewID); int[] convertedIDs = new int[] { GadgetNetwork.ConvertIDToHost(ItemRegistry.Singleton, GameScript.equippedIDs[0]), GadgetNetwork.ConvertIDToHost(ItemRegistry.Singleton, GameScript.equippedIDs[1]), GadgetNetwork.ConvertIDToHost(ItemRegistry.Singleton, GameScript.equippedIDs[2]), GadgetNetwork.ConvertIDToHost(ItemRegistry.Singleton, GameScript.equippedIDs[3]), GadgetNetwork.ConvertIDToHost(null /* RaceRegistry */, GameScript.equippedIDs[4]), GameScript.equippedIDs[5], GadgetNetwork.ConvertIDToHost(null /* UniformRegistry */, GameScript.equippedIDs[6]), GadgetNetwork.ConvertIDToHost(null /* AugmentRegistry */, GameScript.equippedIDs[7]) }; MenuScript.playerAppearance.GetComponent <NetworkView>().RPC("UA", RPCMode.AllBuffered, new object[] { convertedIDs, 0, GameScript.dead }); RefreshMODS.Invoke(__instance, new object[] { }); __instance.UpdateHP(); __instance.UpdateEnergy(); __instance.UpdateMana(); if (itemInfo != null) { itemInfo.InvokeOnEquip(slot); } } else { __instance.GetComponent <AudioSource>().PlayOneShot((AudioClip)Resources.Load("Au/CLICK1"), Menuu.soundLevel / 10f); } } return(false); }
public static bool Prefix(GameScript __instance, int slot, ref Item ___holdingItem, ref Item[] ___inventory, bool ___emblemAgain) { ItemInfo itemInfo = ItemRegistry.Singleton.GetEntry(___holdingItem.id); ItemType holdingItemType = itemInfo != null ? (itemInfo.Type & (ItemType.EQUIP_MASK | ItemType.TYPE_MASK)) : ItemRegistry.GetDefaultTypeByID(___holdingItem.id); if ((holdingItemType & ItemType.NONSTACKING) == ItemType.NONSTACKING) { SwapItem.Invoke(__instance, new object[] { slot }); return(false); } if ((slot == 36 && (holdingItemType & ItemType.EQUIP_MASK) != ItemType.WEAPON) || (slot == 37 && ((holdingItemType & ItemType.EQUIP_MASK) != ItemType.OFFHAND)) || (slot == 38 && ((holdingItemType & ItemType.EQUIP_MASK) != ItemType.HELMET)) || (slot == 39 && ((holdingItemType & ItemType.EQUIP_MASK) != ItemType.ARMOR)) || ((slot == 40 || slot == 41) && ((holdingItemType & ItemType.EQUIP_MASK) != ItemType.RING)) || (slot > 41 && ((holdingItemType & ItemType.EQUIP_MASK) != ItemType.DROID))) { MonoBehaviour.print("CANNOT PUT THAT THERE!"); } else { MonoBehaviour.print("PLACING ONE ITEM"); if (___emblemAgain) { EmblemForging.Invoke(__instance, new object[] { }); } bool newItem = false; if (___inventory[slot].id == ___holdingItem.id) { ___inventory[slot].q++; } else { newItem = true; ___inventory[slot] = GadgetCoreAPI.CopyItem(___holdingItem); ___inventory[slot].q = 1; } ___holdingItem.q--; MonoBehaviour.print(string.Concat(new object[] { "holding Item ", ___holdingItem.id, " x", ___holdingItem.q })); RefreshSlot.Invoke(__instance, new object[] { slot }); RefreshHoldingSlot.Invoke(__instance, new object[] { }); if (slot > 35) { if (slot > 41) { __instance.GetComponent <AudioSource>().PlayOneShot((AudioClip)Resources.Load("Au/placeD"), Menuu.soundLevel / 10f); } else { __instance.GetComponent <AudioSource>().PlayOneShot((AudioClip)Resources.Load("Au/bling"), Menuu.soundLevel / 10f); } if (newItem) { if (slot == 36) { GameScript.equippedIDs[0] = ___inventory[slot].id; } else if (slot == 37) { GameScript.equippedIDs[1] = ___inventory[slot].id; } else if (slot == 38) { GameScript.equippedIDs[2] = ___inventory[slot].id; } else if (slot == 39) { GameScript.equippedIDs[3] = ___inventory[slot].id; } int[] gearStats = GadgetCoreAPI.GetGearStats(___inventory[slot]).GetStatArray(); for (int i = 0; i < 6; i++) { if (gearStats[i] > 0) { GameScript.GEARSTAT[i] += gearStats[i]; __instance.txtPlayerStat[i].GetComponent <Animation>().Play(); } } GadgetCoreAPI.equippedGearStats[slot - 36] = gearStats; RefreshStats.Invoke(__instance, new object[] { }); Network.RemoveRPCs(MenuScript.playerAppearance.GetComponent <NetworkView>().viewID); int[] convertedIDs = new int[] { GadgetNetwork.ConvertIDToHost(ItemRegistry.Singleton, GameScript.equippedIDs[0]), GadgetNetwork.ConvertIDToHost(ItemRegistry.Singleton, GameScript.equippedIDs[1]), GadgetNetwork.ConvertIDToHost(ItemRegistry.Singleton, GameScript.equippedIDs[2]), GadgetNetwork.ConvertIDToHost(ItemRegistry.Singleton, GameScript.equippedIDs[3]), GadgetNetwork.ConvertIDToHost(null /* RaceRegistry */, GameScript.equippedIDs[4]), GameScript.equippedIDs[5], GadgetNetwork.ConvertIDToHost(null /* UniformRegistry */, GameScript.equippedIDs[6]), GadgetNetwork.ConvertIDToHost(null /* AugmentRegistry */, GameScript.equippedIDs[7]) }; MenuScript.playerAppearance.GetComponent <NetworkView>().RPC("UA", RPCMode.AllBuffered, new object[] { convertedIDs, 0, GameScript.dead }); RefreshMODS.Invoke(__instance, new object[] { }); __instance.UpdateHP(); __instance.UpdateEnergy(); __instance.UpdateMana(); } if (itemInfo != null) { itemInfo.InvokeOnEquip(slot); } } else { __instance.GetComponent <AudioSource>().PlayOneShot((AudioClip)Resources.Load("Au/CLICK2"), Menuu.soundLevel / 10f); } } return(false); }
internal void SendRequiredModList(string modList, NetworkMessageInfo info) { try { bool isCompatible = true; int modCount = 0; string[][] splitModList = string.IsNullOrEmpty(modList) ? new string[0][] : modList.Split(',').Select(x => x.Split(':')).ToArray(); foreach (GadgetInfo mod in Gadgets.ListAllGadgetInfos().Where(x => x.Gadget.Enabled && x.Attribute.RequiredOnClients)) { modCount++; int[] hostVersionNums = mod.Gadget.GetModVersionString().Split('.').Select(x => int.Parse(x)).ToArray(); int[] clientVersionNums = splitModList.SingleOrDefault(x => x[0] == mod.Attribute.Name)?[1].Split('.').Select(x => int.Parse(x)).Take(4).ToArray(); if (clientVersionNums == null) { isCompatible = false; break; } hostVersionNums = hostVersionNums.Concat(Enumerable.Repeat(0, 4 - hostVersionNums.Length)).ToArray(); clientVersionNums = clientVersionNums.Concat(Enumerable.Repeat(0, 4 - clientVersionNums.Length)).ToArray(); if (!((mod.Attribute.GadgetCoreVersionSpecificity == VersionSpecificity.MAJOR && clientVersionNums[0] == hostVersionNums[0] && (clientVersionNums[1] > hostVersionNums[1] || (clientVersionNums[1] == hostVersionNums[1] && (clientVersionNums[2] > hostVersionNums[2] || (clientVersionNums[2] == hostVersionNums[2] && clientVersionNums[3] >= hostVersionNums[3]))))) || (mod.Attribute.GadgetCoreVersionSpecificity == VersionSpecificity.MINOR && clientVersionNums[0] == hostVersionNums[0] && clientVersionNums[1] == hostVersionNums[1] && (clientVersionNums[2] > hostVersionNums[2] || (clientVersionNums[2] == hostVersionNums[2] && clientVersionNums[3] >= hostVersionNums[3]))) || (mod.Attribute.GadgetCoreVersionSpecificity == VersionSpecificity.NONBREAKING && clientVersionNums[0] == hostVersionNums[0] && clientVersionNums[1] == hostVersionNums[1] && clientVersionNums[2] == hostVersionNums[2] && clientVersionNums[3] >= hostVersionNums[3]) || (mod.Attribute.GadgetCoreVersionSpecificity == VersionSpecificity.BUGFIX && clientVersionNums[0] == hostVersionNums[0] && clientVersionNums[1] == hostVersionNums[1] && clientVersionNums[2] == hostVersionNums[2] && clientVersionNums[3] == hostVersionNums[3]))) { isCompatible = false; break; } } if (isCompatible && modCount != splitModList.Length) { isCompatible = false; } if (isCompatible) { if (string.IsNullOrEmpty(info.sender.ipAddress)) { GadgetCore.CoreLogger.Log("Self-connection succesfully established and identified."); ReceiveIDMatrixData(GadgetNetwork.GenerateIDMatrixData()); } else { GadgetCore.CoreLogger.Log("A client connected with compatible mods: " + info.sender.ipAddress); view.RPC("ReceiveIDMatrixData", info.sender, GadgetNetwork.GenerateIDMatrixData()); } } else { GadgetCore.CoreLogger.LogWarning("A client tried to connect with incompatible mods: " + info.sender.ipAddress + Environment.NewLine + modList); if (Network.isServer) { Network.CloseConnection(info.sender, true); } else { Network.Disconnect(); } } } catch (Exception e) { GadgetCore.CoreLogger.LogWarning("The following error occured processing an incoming client's mod list: " + info.sender.ipAddress + Environment.NewLine + modList + Environment.NewLine + e.ToString()); if (Network.isServer) { Network.CloseConnection(info.sender, true); } else { Network.Disconnect(); } } }