  		public static bool dedServFPS = false;
  		public static int dedServCount1 = 0;
  		public static int dedServCount2 = 0;
+@@ -205,7 +_,7 @@
+ 		public static int dedServCount1 = 0;
+ 		public static int dedServCount2 = 0;
+ 		public static bool superFast = false;
+-		public static int MaxShopIDs = 22;
++		public static int MaxShopIDs = 22 + 1;
+ 		public static bool[] hairLoaded = new bool[134];
+ 		public static bool[] wingsLoaded = new bool[38];
+ 		public static bool[] goreLoaded = new bool[1087];
 @@ -469,7 +_,7 @@
  		private static bool flameRingLoaded;
  		private Texture2D flameRingTexture;

 			while (!Netplay.disconnect)
 			{
-				double totalMilliseconds = stopwatch.Elapsed.TotalMilliseconds;
-				if (totalMilliseconds + num9 >= num8)
-				{
-					num10++;
-					num9 += totalMilliseconds - num8;
-					stopwatch.Reset();
-					stopwatch.Start();
+				{

 			if (Main.netMode == 1)
 			{
@@ -13820,6 +_,7 @@
 			string[] array = new string[num3];
 			bool[] array2 = new bool[num3];
 			bool[] array3 = new bool[num3];
+			string[] tooltipNames = new string[num3];
 			for (int i = 0; i < num3; i++)
 			{
 				array2[i] = false;
@@ -13840,16 +_,21 @@
 						")"
 					});
 			}
+			tooltipNames[0] = "ItemName";
 			if (Main.toolTip.favorited)
 			{
 				array[num4++] = Lang.tip[56];
+				tooltipNames[num4 - 1] = "Favorite";
 				array[num4++] = Lang.tip[57];
+				tooltipNames[num4 - 1] = "FavoriteDesc";
 			}
 			if (Main.toolTip.social)
 			{
 				array[num4] = Lang.tip[0];
+				tooltipNames[num4] = "Social";
 				num4++;
 				array[num4] = Lang.tip[1];
+				tooltipNames[num4] = "SocialDesc";
 				num4++;
 			}
 			else
@@ -13858,9 +_,13 @@
 				{
 					float num5 = 5E-06f;
 					int damage = Main.toolTip.damage;
+					Player player = Main.player[Main.myPlayer];
 					if (Main.toolTip.melee)
 					{
-						array[num4] = string.Concat((int)(Main.player[Main.myPlayer].meleeDamage * (float)damage + num5));
+						int damage2 = (int)(player.meleeDamage * (float)damage + num5);
+						ItemLoader.GetWeaponDamage(Main.toolTip, player, ref damage2);
+						PlayerHooks.GetWeaponDamage(player, Main.toolTip, ref damage2);
+						array[num4] = string.Concat(damage2);
 						string[] array5;
 						IntPtr intPtr;
 						(array5 = array)[(int)(intPtr = (IntPtr)num4)] = array5[(int)intPtr] + Lang.tip[2];
@@ -13884,62 +_,82 @@
 						{
 							num8 *= Main.player[Main.myPlayer].rocketDamage;
 						}
-						array[num4] = string.Concat((int)(num6 + num5));
+						int damage2 = (int)(num6 + num5);
+						ItemLoader.GetWeaponDamage(Main.toolTip, player, ref damage2);
+						PlayerHooks.GetWeaponDamage(player, Main.toolTip, ref damage2);
+						array[num4] = string.Concat(damage2);
 						string[] array6;
 						IntPtr intPtr2;
 						(array6 = array)[(int)(intPtr2 = (IntPtr)num4)] = array6[(int)intPtr2] + Lang.tip[3];
 					}
 					else if (Main.toolTip.magic)
 					{
-						array[num4] = string.Concat((int)(Main.player[Main.myPlayer].magicDamage * (float)damage + num5));
+						int damage2 = (int)(player.magicDamage * (float)damage + num5);
+						ItemLoader.GetWeaponDamage(Main.toolTip, player, ref damage2);
+						PlayerHooks.GetWeaponDamage(player, Main.toolTip, ref damage2);
+						array[num4] = string.Concat(damage2);
 						string[] array7;
 						IntPtr intPtr3;
 						(array7 = array)[(int)(intPtr3 = (IntPtr)num4)] = array7[(int)intPtr3] + Lang.tip[4];
 					}
 					else if (Main.toolTip.thrown)
 					{
-						array[num4] = string.Concat((int)(Main.player[Main.myPlayer].thrownDamage * (float)damage + num5));
+						int damage2 = (int)(player.thrownDamage * (float)damage + num5);
+						ItemLoader.GetWeaponDamage(Main.toolTip, player, ref damage2);
+						PlayerHooks.GetWeaponDamage(player, Main.toolTip, ref damage2);
+						array[num4] = string.Concat(damage2);
 						string[] array8;
 						IntPtr intPtr4;
 						(array8 = array)[(int)(intPtr4 = (IntPtr)num4)] = array8[(int)intPtr4] + Lang.tip[58];
 					}
 					else if (Main.toolTip.summon)
 					{
-						array[num4] = string.Concat((int)(Main.player[Main.myPlayer].minionDamage * (float)damage + num5));
+						int damage2 = (int)(player.minionDamage * (float)damage + num5);
+						ItemLoader.GetWeaponDamage(Main.toolTip, player, ref damage2);
+						PlayerHooks.GetWeaponDamage(player, Main.toolTip, ref damage2);
+						array[num4] = string.Concat(damage2);
 						string[] array4;
 						IntPtr intPtr;
 						(array4 = array)[(int)(intPtr = (IntPtr)num4)] = array4[(int)intPtr] + Lang.tip[53];
 					}
 					else
 					{
-						array[num4] = string.Concat(damage);
+						int damage2 = damage;
+						ItemLoader.GetWeaponDamage(Main.toolTip, player, ref damage2);
+						PlayerHooks.GetWeaponDamage(player, Main.toolTip, ref damage2);
+						array[num4] = string.Concat(damage2);
 						string[] array4;
 						IntPtr intPtr;
 						(array4 = array)[(int)(intPtr = (IntPtr)num4)] = array4[(int)intPtr] + Lang.tip[55];
 					}
+					tooltipNames[num4] = "Damage";
 					num4++;
 					if (Main.toolTip.melee)
 					{
 						int num7 = Main.player[Main.myPlayer].meleeCrit - Main.player[Main.myPlayer].inventory[Main.player[Main.myPlayer].selectedItem].crit + Main.toolTip.crit;
 						array[num4] = num7 + Lang.tip[5];
+						tooltipNames[num4] = "CritChance";
 						num4++;
 					}
 					else if (Main.toolTip.ranged)
 					{
 						int num8 = Main.player[Main.myPlayer].rangedCrit - Main.player[Main.myPlayer].inventory[Main.player[Main.myPlayer].selectedItem].crit + Main.toolTip.crit;
 						array[num4] = num8 + Lang.tip[5];
+						tooltipNames[num4] = "CritChance";
 						num4++;
 					}
 					else if (Main.toolTip.magic)
 					{
 						int num9 = Main.player[Main.myPlayer].magicCrit - Main.player[Main.myPlayer].inventory[Main.player[Main.myPlayer].selectedItem].crit + Main.toolTip.crit;
 						array[num4] = num9 + Lang.tip[5];
+						tooltipNames[num4] = "CritChance";
 						num4++;
 					}
 					else if (Main.toolTip.thrown)
 					{
 						int num10 = Main.player[Main.myPlayer].thrownCrit - Main.player[Main.myPlayer].inventory[Main.player[Main.myPlayer].selectedItem].crit + Main.toolTip.crit;
 						array[num4] = num10 + Lang.tip[5];
+						tooltipNames[num4] = "CritChance";
 						num4++;
 					}
 					if (Main.toolTip.useStyle > 0 && !Main.toolTip.summon)
@@ -13976,6 +_,7 @@
 						{
 							array[num4] = Lang.tip[13];
 						}
+						tooltipNames[num4] = "Speed";
 						num4++;
 					}
 					float num11 = Main.toolTip.knockBack;
@@ -13991,6 +_,8 @@
 					{
 						num11 += num11 * (1f - Main.player[Main.myPlayer].stealth);
 					}
+					ItemLoader.GetWeaponKnockback(Main.toolTip, player, ref num11);
+					PlayerHooks.GetWeaponKnockback(player, Main.toolTip, ref num11);
 					if (num11 == 0f)
 					{
 						array[num4] = Lang.tip[14];
@@ -14027,58 +_,70 @@
 					{
 						array[num4] = Lang.tip[22];
 					}
+					tooltipNames[num4] = "Knockback";
 					num4++;
 				}
 				if (Main.toolTip.fishingPole > 0)
 				{
 					array[num4] = Language.GetTextValue("GameUI.PrecentFishingPower", Main.toolTip.fishingPole);
+					tooltipNames[num4] = "FishingPower";
 					num4++;
 					array[num4] = Language.GetTextValue("GameUI.BaitRequired");
+					tooltipNames[num4] = "NeedsBait";
 					num4++;
 				}
 				if (Main.toolTip.bait > 0)
 				{
 					array[num4] = Language.GetTextValue("GameUI.BaitPower", Main.toolTip.bait);
+					tooltipNames[num4] = "BaitPower";
 					num4++;
 				}
 				if (Main.toolTip.headSlot > 0 || Main.toolTip.bodySlot > 0 || Main.toolTip.legSlot > 0 || Main.toolTip.accessory || Main.projHook[Main.toolTip.shoot] || Main.toolTip.mountType != -1 || (Main.toolTip.buffType > 0 && (Main.lightPet[Main.toolTip.buffType] || Main.vanityPet[Main.toolTip.buffType])))
 				{
 					array[num4] = Lang.tip[23];
+					tooltipNames[num4] = "Equipable";
 					num4++;
 				}
 				if (Main.toolTip.tileWand > 0)
 				{
 					array[num4] = Lang.tip[52] + Lang.itemName(Main.toolTip.tileWand, false);
+					tooltipNames[num4] = "WandConsumes";
 					num4++;
 				}
 				if (Main.toolTip.questItem)
 				{
 					array[num4] = Lang.inter[65];
+					tooltipNames[num4] = "Quest";
 					num4++;
 				}
 				if (Main.toolTip.vanity)
 				{
 					array[num4] = Lang.tip[24];
+					tooltipNames[num4] = "Vanity";
 					num4++;
 				}
 				if (Main.toolTip.defense > 0)
 				{
 					array[num4] = Main.toolTip.defense + Lang.tip[25];
+					tooltipNames[num4] = "Defense";
 					num4++;
 				}
 				if (Main.toolTip.pick > 0)
 				{
 					array[num4] = Main.toolTip.pick + Lang.tip[26];
+					tooltipNames[num4] = "PickPower";
 					num4++;
 				}
 				if (Main.toolTip.axe > 0)
 				{
 					array[num4] = Main.toolTip.axe * 5 + Lang.tip[27];
+					tooltipNames[num4] = "AxePower";
 					num4++;
 				}
 				if (Main.toolTip.hammer > 0)
 				{
 					array[num4] = Main.toolTip.hammer + Lang.tip[28];
+					tooltipNames[num4] = "HammerPower";
 					num4++;
 				}
 				if (Main.toolTip.tileBoost != 0)
@@ -14092,6 +_,7 @@
 					{
 						array[num4] = tileBoost + Lang.tip[54];
 					}
+					tooltipNames[num4] = "TileBoost";
 					num4++;
 				}
 				if (Main.toolTip.healLife > 0)
@@ -14104,6 +_,7 @@
 							" ",
 							Lang.tip[30]
 						});
+					tooltipNames[num4] = "HealLife";
 					num4++;
 				}
 				if (Main.toolTip.healMana > 0)
@@ -14116,6 +_,7 @@
 							" ",
 							Lang.tip[31]
 						});
+					tooltipNames[num4] = "HealMana";
 					num4++;
 				}
 				if (Main.toolTip.mana > 0 && (Main.toolTip.type != 127 || !Main.player[Main.myPlayer].spaceGun))
@@ -14128,6 +_,7 @@
 							" ",
 							Lang.tip[31]
 						});
+					tooltipNames[num4] = "UseMana";
 					num4++;
 				}
 				if (Main.toolTip.createWall > 0 || Main.toolTip.createTile > -1)
@@ -14135,22 +_,26 @@
 					if (Main.toolTip.type != 213 && Main.toolTip.tileWand < 1)
 					{
 						array[num4] = Lang.tip[33];
+						tooltipNames[num4] = "Placeable";
 						num4++;
 					}
 				}
 				else if (Main.toolTip.ammo > 0 && !Main.toolTip.notAmmo)
 				{
 					array[num4] = Lang.tip[34];
+					tooltipNames[num4] = "Ammo";
 					num4++;
 				}
 				else if (Main.toolTip.consumable)
 				{
 					array[num4] = Lang.tip[35];
+					tooltipNames[num4] = "Consumable";
 					num4++;
 				}
 				if (Main.toolTip.material)
 				{
 					array[num4] = Lang.tip[36];
+					tooltipNames[num4] = "Material";
 					num4++;
 				}
 				if (Main.toolTip.toolTip != null)
@@ -14163,16 +_,19 @@
 						{
 							array[num4] = this.TooltipMousetextProcessor(Main.toolTip.toolTip);
 						}
+						tooltipNames[num4] = "Tooltip";
 						num4++;
 					}
 					if (Main.toolTip.toolTip2 != null)
 					{
 						array[num4] = this.TooltipMousetextProcessor(Main.toolTip.toolTip2);
+						tooltipNames[num4] = "Tooltip2";
 						num4++;
 					}
 					if (Main.toolTip.buffType == 26 && Main.expertMode)
 					{
 						array[num4] = Lang.misc[40];
+						tooltipNames[num4] = "WellFedExpert";
 						num4++;
 					}
 					if (Main.toolTip.buffTime > 0)
@@ -14187,12 +_,14 @@
 							text = Math.Round((double)Main.toolTip.buffTime / 60.0) + Lang.tip[38];
 						}
 						array[num4] = text;
+						tooltipNames[num4] = "BuffTime";
 						num4++;
 					}
 					if (Main.toolTip.type == 3262 || Main.toolTip.type == 3282 || Main.toolTip.type == 3283 || Main.toolTip.type == 3284 || Main.toolTip.type == 3285 || Main.toolTip.type == 3286 || Main.toolTip.type == 3316 || Main.toolTip.type == 3315 || Main.toolTip.type == 3317 || Main.toolTip.type == 3291 || Main.toolTip.type == 3389)
 					{
 						array[num4] = " ";
 						num = num4;
+						tooltipNames[num4] = "OneDropLogo";
 						num4++;
 					}
 					if (Main.toolTip.prefix > 0)
@@ -14220,6 +_,7 @@
 								array3[num4] = true;
 							}
 							array2[num4] = true;
+							tooltipNames[num4] = "PrefixDamage";
 							num4++;
 						}
 						if (Main.cpItem.useAnimation != Main.toolTip.useAnimation)
@@ -14241,6 +_,7 @@
 								array3[num4] = true;
 							}
 							array2[num4] = true;
+							tooltipNames[num4] = "PrefixSpeed";
 							num4++;
 						}
 						if (Main.cpItem.crit != Main.toolTip.crit)
@@ -14259,6 +_,7 @@
 								array3[num4] = true;
 							}
 							array2[num4] = true;
+							tooltipNames[num4] = "PrefixCritChance";
 							num4++;
 						}
 						if (Main.cpItem.mana != Main.toolTip.mana)
@@ -14279,6 +_,7 @@
 								array3[num4] = true;
 							}
 							array2[num4] = true;
+							tooltipNames[num4] = "PrefixUseMana";
 							num4++;
 						}
 						if (Main.cpItem.scale != Main.toolTip.scale)
@@ -14299,6 +_,7 @@
 								array3[num4] = true;
 							}
 							array2[num4] = true;
+							tooltipNames[num4] = "PrefixSize";
 							num4++;
 						}
 						if (Main.cpItem.shootSpeed != Main.toolTip.shootSpeed)
@@ -14319,6 +_,7 @@
 								array3[num4] = true;
 							}
 							array2[num4] = true;
+							tooltipNames[num4] = "PrefixShootSpeed";
 							num4++;
 						}
 						if (Main.cpItem.knockBack != knockBack)
@@ -14339,135 +_,158 @@
 								array3[num4] = true;
 							}
 							array2[num4] = true;
+							tooltipNames[num4] = "PrefixKnockback";
 							num4++;
 						}
 						if (Main.toolTip.prefix == 62)
 						{
 							array[num4] = "+1" + Lang.tip[25];
 							array2[num4] = true;
+							tooltipNames[num4] = "PrefixAccDefense";
 							num4++;
 						}
 						if (Main.toolTip.prefix == 63)
 						{
 							array[num4] = "+2" + Lang.tip[25];
 							array2[num4] = true;
+							tooltipNames[num4] = "PrefixAccDefense";
 							num4++;
 						}
 						if (Main.toolTip.prefix == 64)
 						{
 							array[num4] = "+3" + Lang.tip[25];
 							array2[num4] = true;
+							tooltipNames[num4] = "PrefixAccDefense";
 							num4++;
 						}
 						if (Main.toolTip.prefix == 65)
 						{
 							array[num4] = "+4" + Lang.tip[25];
 							array2[num4] = true;
+							tooltipNames[num4] = "PrefixAccDefense";
 							num4++;
 						}
 						if (Main.toolTip.prefix == 66)
 						{
 							array[num4] = "+20 " + Lang.tip[31];
 							array2[num4] = true;
+							tooltipNames[num4] = "PrefixAccMaxMana";
 							num4++;
 						}
 						if (Main.toolTip.prefix == 67)
 						{
 							array[num4] = "+2" + Lang.tip[5];
 							array2[num4] = true;
+							tooltipNames[num4] = "PrefixAccCritChance";
 							num4++;
 						}
 						if (Main.toolTip.prefix == 68)
 						{
 							array[num4] = "+4" + Lang.tip[5];
 							array2[num4] = true;
+							tooltipNames[num4] = "PrefixAccCritChance";
 							num4++;
 						}
 						if (Main.toolTip.prefix == 69)
 						{
 							array[num4] = "+1" + Lang.tip[39];
 							array2[num4] = true;
+							tooltipNames[num4] = "PrefixAccDamage";
 							num4++;
 						}
 						if (Main.toolTip.prefix == 70)
 						{
 							array[num4] = "+2" + Lang.tip[39];
 							array2[num4] = true;
+							tooltipNames[num4] = "PrefixAccDamage";
 							num4++;
 						}
 						if (Main.toolTip.prefix == 71)
 						{
 							array[num4] = "+3" + Lang.tip[39];
 							array2[num4] = true;
+							tooltipNames[num4] = "PrefixAccDamage";
 							num4++;
 						}
 						if (Main.toolTip.prefix == 72)
 						{
 							array[num4] = "+4" + Lang.tip[39];
 							array2[num4] = true;
+							tooltipNames[num4] = "PrefixAccDamage";
 							num4++;
 						}
 						if (Main.toolTip.prefix == 73)
 						{
 							array[num4] = "+1" + Lang.tip[46];
 							array2[num4] = true;
+							tooltipNames[num4] = "PrefixAccMoveSpeed";
 							num4++;
 						}
 						if (Main.toolTip.prefix == 74)
 						{
 							array[num4] = "+2" + Lang.tip[46];
 							array2[num4] = true;
+							tooltipNames[num4] = "PrefixAccMoveSpeed";
 							num4++;
 						}
 						if (Main.toolTip.prefix == 75)
 						{
 							array[num4] = "+3" + Lang.tip[46];
 							array2[num4] = true;
+							tooltipNames[num4] = "PrefixAccMoveSpeed";
 							num4++;
 						}
 						if (Main.toolTip.prefix == 76)
 						{
 							array[num4] = "+4" + Lang.tip[46];
 							array2[num4] = true;
+							tooltipNames[num4] = "PrefixAccMoveSpeed";
 							num4++;
 						}
 						if (Main.toolTip.prefix == 77)
 						{
 							array[num4] = "+1" + Lang.tip[47];
 							array2[num4] = true;
+							tooltipNames[num4] = "PrefixAccMeleeSpeed";
 							num4++;
 						}
 						if (Main.toolTip.prefix == 78)
 						{
 							array[num4] = "+2" + Lang.tip[47];
 							array2[num4] = true;
+							tooltipNames[num4] = "PrefixAccMeleeSpeed";
 							num4++;
 						}
 						if (Main.toolTip.prefix == 79)
 						{
 							array[num4] = "+3" + Lang.tip[47];
 							array2[num4] = true;
+							tooltipNames[num4] = "PrefixAccMeleeSpeed";
 							num4++;
 						}
 						if (Main.toolTip.prefix == 80)
 						{
 							array[num4] = "+4" + Lang.tip[47];
 							array2[num4] = true;
+							tooltipNames[num4] = "PrefixAccMeleeSpeed";
 							num4++;
 						}
 					}
 					if (Main.toolTip.wornArmor && Main.player[Main.myPlayer].setBonus != "")
 					{
 						array[num4] = Lang.tip[48] + " " + Main.player[Main.myPlayer].setBonus;
+						tooltipNames[num4] = "SetBonus";
 						num4++;
 					}
 				}
 				if (Main.toolTip.expert)
 				{
 					array[num4] = "Expert";
+					tooltipNames[num4] = "Expert";
 					num4++;
 				}
 				num21 = (float)Main.mouseTextColor / 255f;
+				//patch file: num22
