Exemple #1
0
 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);
 }
Exemple #2
0
 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);
 }
Exemple #3
0
 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);
 }
Exemple #4
0
 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);
 }
Exemple #6
0
 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);
 }
Exemple #9
0
 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);
 }
Exemple #10
0
 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);
 }
Exemple #13
0
 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);
     }
 }
Exemple #14
0
 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);
     }
 }
Exemple #18
0
        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);
            }
        }
Exemple #19
0
        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[] { });
        }
Exemple #21
0
 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);
 }
Exemple #22
0
        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);
        }
Exemple #23
0
        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);
        }
Exemple #25
0
 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);
 }
Exemple #26
0
 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);
        }
Exemple #29
0
        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);
        }
Exemple #30
0
 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();
         }
     }
 }