/// <summary> /// Completely recalculates GameScript.GEARSTAT from your equipped gear. /// </summary> public static void RecalculateGearStats(Item[] inventory) { GameScript.GEARSTAT = new int[6]; for (int i = 36; i < 45; i++) { int[] gearStats = GadgetCoreAPI.GetGearStats(inventory[i]).GetStatArray(); for (int s = 0; s < 6; s++) { if (gearStats[s] > 0) { GameScript.GEARSTAT[s] += gearStats[s]; } } GadgetCoreAPI.equippedGearStats[i - 36] = gearStats; } }
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); }
/// <summary> /// Displays the item-hover window on the cursor. For some reason, the base game has six different methods that all pretty much just do this. /// </summary> public static void HoverItem(Item item) { InstanceTracker.GameScript.hoverDroid.SetActive(false); int id = item.id; InstanceTracker.GameScript.txtHoverStat[0].text = string.Empty; InstanceTracker.GameScript.txtHoverStat[1].text = InstanceTracker.GameScript.txtHoverStat[0].text; InstanceTracker.GameScript.txtHoverStatInfo.text = string.Empty; if (Camera.main.ScreenToWorldPoint(Input.mousePosition).y < MenuScript.player.transform.position.y - 4.5f) { InstanceTracker.GameScript.hoverItem.transform.localPosition = new Vector3(5f, 0f, -4.55f); } else { InstanceTracker.GameScript.hoverItem.transform.localPosition = new Vector3(5f, -4f, -4.55f); } if (id != 0) { InstanceTracker.GameScript.itemName.text = GadgetCoreAPI.GetItemName(id); ItemType type = ItemRegistry.GetTypeByID(id); if ((type & ItemType.EQUIPABLE) == ItemType.EQUIPABLE) { if ((type & ItemType.LEVELING) == ItemType.LEVELING) { InstanceTracker.GameScript.itemexpbar.SetActive(true); float[] itemLevel = InstanceTracker.GameScript.GetItemLevel2(item.exp); int num = (int)itemLevel[0]; InstanceTracker.GameScript.itemexpbar.transform.localScale = new Vector3(itemLevel[1], 0.015f, 1f); if (num < 10) { InstanceTracker.GameScript.itemLevel.text = "Lv." + num; } else { InstanceTracker.GameScript.itemLevel.text = "MAX"; } } else { InstanceTracker.GameScript.itemexpbar.SetActive(false); } if ((type & ItemType.MODABLE) == ItemType.MODABLE) { if (item.tier == 0) { InstanceTracker.GameScript.itemName.color = Color.white; } else if (item.tier == 1) { InstanceTracker.GameScript.itemName.color = Color.cyan; } else if (item.tier == 2) { InstanceTracker.GameScript.itemName.color = Color.magenta; } else if (item.tier == 3) { InstanceTracker.GameScript.itemName.color = Color.yellow; } InstanceTracker.GameScript.hoverItem.GetComponent <Renderer>().material = InstanceTracker.GameScript.hoverItemMat2; InstanceTracker.GameScript.itemDesc.text = string.Empty; for (int i = 0; i < 3; i++) { if (item.aspectLvl[i] > 0) { InstanceTracker.GameScript.itemAspect[i].text = InstanceTracker.GameScript.GetGearAspect(item.aspect[i] - 200) + " " + item.aspectLvl[i]; } else { InstanceTracker.GameScript.itemAspect[i].text = "(EMPTY)"; } InstanceTracker.GameScript.aspectObj[i].SetActive(true); } int[] gearStats = GadgetCoreAPI.GetGearStats(item).GetStatArray(); for (int i = 0; i < 6; i++) { if (gearStats[i] > 0) { InstanceTracker.GameScript.itemStat[i].text = "+" + gearStats[i]; if (InstanceTracker.GameScript.itemStat[i].text.Length > 4) { InstanceTracker.GameScript.itemStat[i].characterSize = 4f / InstanceTracker.GameScript.itemStat[i].text.Length; } else { InstanceTracker.GameScript.itemStat[i].characterSize = 1; } } else { InstanceTracker.GameScript.itemStat[i].text = string.Empty; InstanceTracker.GameScript.itemStat[i].characterSize = 1; } } InstanceTracker.GameScript.txtStats.SetActive(true); } else { if (GadgetCoreConfig.BetterDroidHover) { if (item.tier == 0) { InstanceTracker.GameScript.itemName.color = Color.white; } else if (item.tier == 1) { InstanceTracker.GameScript.itemName.color = Color.cyan; } else if (item.tier == 2) { InstanceTracker.GameScript.itemName.color = Color.magenta; } else if (item.tier == 3) { InstanceTracker.GameScript.itemName.color = Color.yellow; } InstanceTracker.GameScript.hoverItem.GetComponent <Renderer>().material = InstanceTracker.GameScript.hoverItemMat2; InstanceTracker.GameScript.itemDesc.text = string.Empty; for (int i = 0; i < 3; i++) { InstanceTracker.GameScript.aspectObj[i].SetActive(false); } InstanceTracker.GameScript.itemAspect[0].text = ""; InstanceTracker.GameScript.itemAspect[1].text = "NOT MODABLE"; InstanceTracker.GameScript.itemAspect[2].text = ""; int[] gearStats = GadgetCoreAPI.GetGearStats(item).GetStatArray(); for (int i = 0; i < 6; i++) { if (gearStats[i] > 0) { InstanceTracker.GameScript.itemStat[i].text = "+" + gearStats[i]; if (InstanceTracker.GameScript.itemStat[i].text.Length > 4) { InstanceTracker.GameScript.itemStat[i].characterSize = 4f / InstanceTracker.GameScript.itemStat[i].text.Length; } else { InstanceTracker.GameScript.itemStat[i].characterSize = 1; } } else { InstanceTracker.GameScript.itemStat[i].text = string.Empty; InstanceTracker.GameScript.itemStat[i].characterSize = 1; } } InstanceTracker.GameScript.txtStats.SetActive(true); } else { InstanceTracker.GameScript.itemName.color = Color.white; InstanceTracker.GameScript.hoverItem.GetComponent <Renderer>().material = InstanceTracker.GameScript.hoverItemMat1; InstanceTracker.GameScript.itemAspect[0].text = string.Empty; InstanceTracker.GameScript.itemAspect[1].text = string.Empty; InstanceTracker.GameScript.itemAspect[2].text = string.Empty; InstanceTracker.GameScript.txtStats.SetActive(false); InstanceTracker.GameScript.aspectObj[0].SetActive(false); InstanceTracker.GameScript.aspectObj[1].SetActive(false); InstanceTracker.GameScript.aspectObj[2].SetActive(false); InstanceTracker.GameScript.itemDesc.text = GadgetCoreAPI.GetItemDesc(id); } } } else { InstanceTracker.GameScript.itemexpbar.SetActive(false); InstanceTracker.GameScript.itemName.color = Color.white; InstanceTracker.GameScript.hoverItem.GetComponent <Renderer>().material = InstanceTracker.GameScript.hoverItemMat1; InstanceTracker.GameScript.itemLevel.text = string.Empty; InstanceTracker.GameScript.itemAspect[0].text = string.Empty; InstanceTracker.GameScript.itemAspect[1].text = string.Empty; InstanceTracker.GameScript.itemAspect[2].text = string.Empty; InstanceTracker.GameScript.txtStats.SetActive(false); InstanceTracker.GameScript.aspectObj[0].SetActive(false); InstanceTracker.GameScript.aspectObj[1].SetActive(false); InstanceTracker.GameScript.aspectObj[2].SetActive(false); InstanceTracker.GameScript.itemDesc.text = GadgetCoreAPI.GetItemDesc(id); } InstanceTracker.GameScript.hoverItem.SetActive(true); } else { InstanceTracker.GameScript.hoverItem.SetActive(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.equipedGearStats[slot - 36] = gearStats; RefreshStats.Invoke(__instance, new object[] { }); Network.RemoveRPCs(MenuScript.playerAppearance.GetComponent <NetworkView>().viewID); MenuScript.playerAppearance.GetComponent <NetworkView>().RPC("UA", RPCMode.AllBuffered, new object[] { GameScript.equippedIDs, 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, ref int ___droidCount) { ItemInfo itemInfo = ItemRegistry.Singleton.GetEntry(___holdingItem.id); ItemInfo slotInfo = ItemRegistry.Singleton.GetEntry(___inventory[slot].id); ItemType holdingItemType = itemInfo != null ? (itemInfo.Type & (ItemType.EQUIP_MASK | ItemType.TYPE_MASK)) : ItemRegistry.GetDefaultTypeByID(___holdingItem.id); ItemType slotItemType = slotInfo != null ? (slotInfo.Type & (ItemType.EQUIP_MASK | ItemType.TYPE_MASK)) : ItemRegistry.GetDefaultTypeByID(___inventory[slot].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 { Item item = ___holdingItem; ___holdingItem = ___inventory[slot]; ___inventory[slot] = item; ItemType typeHolder = holdingItemType; holdingItemType = slotItemType; slotItemType = typeHolder; RefreshSlot.Invoke(__instance, new object[] { slot }); RefreshHoldingSlot.Invoke(__instance, new object[] { }); if (slot > 41 && slot < 45 && slotItemType == ItemType.DROID) { if (holdingItemType == ItemType.DROID) { MonoBehaviour.print("swapped droids"); UpdateDroids.Invoke(__instance, new object[] { }); __instance.droid[slot - 42].SendMessage("SetStats", ___inventory[slot].id); } else { ___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(); int[] oldStats = GadgetCoreAPI.equippedGearStats[slot - 36]; for (int s = 0; s < 6; s++) { if (oldStats[s] > 0) { GameScript.GEARSTAT[s] -= oldStats[s]; if (gearStats[s] > 0) { GameScript.GEARSTAT[s] += gearStats[s]; } __instance.txtPlayerStat[s].GetComponent <Animation>().Play(); } else if (gearStats[s] > 0) { GameScript.GEARSTAT[s] += gearStats[s]; __instance.txtPlayerStat[s].GetComponent <Animation>().Play(); } } GadgetCoreAPI.equippedGearStats[slot - 36] = gearStats; RefreshStats.Invoke(__instance, new object[] { }); RefreshMODS.Invoke(__instance, new object[] { }); __instance.UpdateHP(); __instance.UpdateEnergy(); __instance.UpdateMana(); 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 }); if (slotInfo != null) { slotInfo.InvokeOnDequip(slot); } if (itemInfo != null) { itemInfo.InvokeOnEquip(slot); } } else { __instance.GetComponent <AudioSource>().PlayOneShot((AudioClip)Resources.Load("Au/CLICK1"), Menuu.soundLevel / 10f); } } return(false); }