using System;
using System.Collections.Generic;
using UnityEngine;

// Token: 0x0200007B RID: 123
public class GatherEmeraldsXP : MonoBehaviour
{
	// Token: 0x06000C16 RID: 3094 RVA: 0x000ED20C File Offset: 0x000EB40C
	private void Start()
	{
		SceneItem[] array = Object.FindObjectsByType<SceneItem>(FindObjectsSortMode.None);
		BreakableActions[] array2 = Object.FindObjectsByType<BreakableActions>(FindObjectsSortMode.None);
		ChestActions[] array3 = Object.FindObjectsByType<ChestActions>(FindObjectsSortMode.None);
		int num = 0;
		int num2 = 0;
		int num3 = 0;
		List<CreatureActions> list = new List<CreatureActions>();
		foreach (SceneItem sceneItem in array)
		{
			int num4 = num;
			if (sceneItem && !sceneItem.forSale)
			{
				string text = sceneItem.item.ToString();
				if (text == "Emerald")
				{
					num += sceneItem.amount;
				}
				else
				{
					Library.Inventory invRowFromName = Links.x.library.GetInvRowFromName(text);
					if (!invRowFromName._NeedFullStack)
					{
						int num5 = sceneItem.amount;
						if (num5 < 1)
						{
							num5 = 1;
						}
						if (!invRowFromName._Stackable)
						{
							num5 = 1;
						}
						num += invRowFromName._SellPrice * num5;
					}
				}
				Debug.Log(text + " ems from item " + (num - num4).ToString());
			}
		}
		foreach (ChestActions chestActions in array3)
		{
			int num6 = num3;
			if (chestActions)
			{
				List<SceneItem.xmlNames> list2 = new List<SceneItem.xmlNames>();
				List<int> list3 = new List<int>();
				if (chestActions.chest.item1 != SceneItem.xmlNames.None)
				{
					list2.Add(chestActions.chest.item1);
					list3.Add(chestActions.chest.itemStack1);
				}
				if (chestActions.chest.item2 != SceneItem.xmlNames.None)
				{
					list2.Add(chestActions.chest.item2);
					list3.Add(chestActions.chest.itemStack2);
				}
				if (chestActions.chest.item3 != SceneItem.xmlNames.None)
				{
					list2.Add(chestActions.chest.item3);
					list3.Add(chestActions.chest.itemStack3);
				}
				if (chestActions.chest.item4 != SceneItem.xmlNames.None)
				{
					list2.Add(chestActions.chest.item4);
					list3.Add(chestActions.chest.itemStack4);
				}
				if (chestActions.chest.item5 != SceneItem.xmlNames.None)
				{
					list2.Add(chestActions.chest.item5);
					list3.Add(chestActions.chest.itemStack5);
				}
				if (chestActions.chest.item6 != SceneItem.xmlNames.None)
				{
					list2.Add(chestActions.chest.item6);
					list3.Add(chestActions.chest.itemStack6);
				}
				if (chestActions.chest.item7 != SceneItem.xmlNames.None)
				{
					list2.Add(chestActions.chest.item7);
					list3.Add(chestActions.chest.itemStack7);
				}
				if (chestActions.chest.item8 != SceneItem.xmlNames.None)
				{
					list2.Add(chestActions.chest.item8);
					list3.Add(chestActions.chest.itemStack8);
				}
				if (chestActions.chest.item9 != SceneItem.xmlNames.None)
				{
					list2.Add(chestActions.chest.item9);
					list3.Add(chestActions.chest.itemStack9);
				}
				if (chestActions.chest.item10 != SceneItem.xmlNames.None)
				{
					list2.Add(chestActions.chest.item10);
					list3.Add(chestActions.chest.itemStack10);
				}
				for (int j = 0; j < list2.Count; j++)
				{
					string text2 = list2[j].ToString();
					Library.Inventory invRowFromName2 = Links.x.library.GetInvRowFromName(text2);
					if (invRowFromName2 != null && !invRowFromName2._NeedFullStack)
					{
						int num7 = list3[j];
						if (num7 < 1)
						{
							num7 = 1;
						}
						if (!invRowFromName2._Stackable)
						{
							num7 = 1;
						}
						num3 += invRowFromName2._SellPrice * num7;
					}
					if (text2 == "Emerald")
					{
						num3 += list3[j];
					}
				}
				ChestActions chestActions2 = chestActions;
				Debug.Log(((chestActions2 != null) ? chestActions2.ToString() : null) + " ems from item " + (num3 - num6).ToString());
			}
		}
		foreach (BreakableActions breakableActions in array2)
		{
			int num8 = num2;
			if (breakableActions.resourceLocation == -1)
			{
				string text3 = "";
				string text4 = "";
				string text5 = "";
				string text6 = "";
				if (breakableActions.breakable.itemA != SceneItem.xmlNames.None)
				{
					text3 = breakableActions.breakable.itemA.ToString();
				}
				if (breakableActions.breakable.itemB != SceneItem.xmlNames.None)
				{
					text4 = breakableActions.breakable.itemB.ToString();
				}
				if (breakableActions.breakable.itemC != SceneItem.xmlNames.None)
				{
					text5 = breakableActions.breakable.itemC.ToString();
				}
				if (breakableActions.breakable.itemD != SceneItem.xmlNames.None)
				{
					text6 = breakableActions.breakable.itemD.ToString();
				}
				if (text3 != "" && text3 != "None")
				{
					Library.Inventory inventory = Links.x.library.GetInvRowFromName(text3);
					if (inventory != null && !inventory._NeedFullStack)
					{
						int num9 = breakableActions.breakable.itemStackA;
						if (num9 < 1)
						{
							num9 = 1;
						}
						if (!inventory._Stackable)
						{
							num9 = 1;
						}
						num2 += inventory._SellPrice * num9;
					}
					if (text3 == "Emerald")
					{
						num2 += breakableActions.breakable.itemStackA;
					}
				}
				if (text4 != "" && text4 != "None")
				{
					Library.Inventory inventory = Links.x.library.GetInvRowFromName(text4);
					if (inventory != null && !inventory._NeedFullStack)
					{
						int num10 = breakableActions.breakable.itemStackB;
						if (num10 < 1)
						{
							num10 = 1;
						}
						if (!inventory._Stackable)
						{
							num10 = 1;
						}
						num2 += inventory._SellPrice * num10;
					}
					if (text4 == "Emerald")
					{
						num2 += breakableActions.breakable.itemStackB;
					}
				}
				if (text5 != "" && text5 != "None")
				{
					Library.Inventory inventory = Links.x.library.GetInvRowFromName(text5);
					if (inventory != null && !inventory._NeedFullStack)
					{
						int num11 = breakableActions.breakable.itemStackC;
						if (num11 < 1)
						{
							num11 = 1;
						}
						if (!inventory._Stackable)
						{
							num11 = 1;
						}
						num2 += inventory._SellPrice * num11;
					}
					if (text5 == "Emerald")
					{
						num2 += breakableActions.breakable.itemStackC;
					}
				}
				if (text6 != "" && text6 != "None")
				{
					Library.Inventory inventory = Links.x.library.GetInvRowFromName(text6);
					if (inventory != null && !inventory._NeedFullStack)
					{
						int num12 = breakableActions.breakable.itemStackD;
						if (num12 < 1)
						{
							num12 = 1;
						}
						if (!inventory._Stackable)
						{
							num12 = 1;
						}
						num2 += inventory._SellPrice * num12;
					}
					if (text6 == "Emerald")
					{
						num2 += breakableActions.breakable.itemStackD;
					}
				}
				if (num2 - num8 > 0)
				{
					BreakableActions breakableActions2 = breakableActions;
					Debug.Log(((breakableActions2 != null) ? breakableActions2.ToString() : null) + " ems from breakie " + (num2 - num8).ToString());
				}
			}
			else if (breakableActions.breakable.component != Breakable.ComponentTypes.Acorn && breakableActions.breakable.component != Breakable.ComponentTypes.Berry && breakableActions.breakable.component != Breakable.ComponentTypes.Frog && breakableActions.breakable.component != Breakable.ComponentTypes.Mushroom && breakableActions.breakable.component != Breakable.ComponentTypes.Rock && breakableActions.breakable.component != Breakable.ComponentTypes.Stick)
			{
				Breakable.ComponentTypes component = breakableActions.breakable.component;
			}
		}
		int num13 = 0;
		int num14 = 0;
		CreatureActions[] array7 = Object.FindObjectsByType<CreatureActions>(FindObjectsSortMode.None);
		foreach (CreatureActions creatureActions in array7)
		{
			int num15 = num13;
			if (creatureActions.creatures.temperament != Creatures.temperamentState.AttacksOnSight)
			{
				List<Character> characters = creatureActions.characters;
				foreach (Character character in characters)
				{
					if (character && character.hostility < 2)
					{
						num13 += character.stats.characterRow._XP;
						int num16 = character.HasItem(2);
						int num17 = 0;
						if (num16 > 0)
						{
							num17 = character.GetInvNum(num16 + 1);
							num14 += num17;
						}
						int num18 = character.SellPriceOfDrops();
						num14 += num18;
						string[] array9 = new string[5];
						int num19 = 0;
						Character character2 = character;
						array9[num19] = ((character2 != null) ? character2.ToString() : null);
						array9[1] = " sell price of drops ";
						array9[2] = num18.ToString();
						array9[3] = " ";
						array9[4] = num17.ToString();
						Debug.Log(string.Concat(array9));
					}
				}
				if (characters.Count == 0)
				{
					list.Add(creatureActions);
				}
			}
			CreatureActions creatureActions2 = creatureActions;
			Debug.Log(((creatureActions2 != null) ? creatureActions2.ToString() : null) + " xp " + (num13 - num15).ToString());
		}
		int num20 = 0;
		int num21 = 0;
		int num22 = 0;
		foreach (CreatureActions creatureActions3 in array7)
		{
			if (creatureActions3.creatures.temperament == Creatures.temperamentState.AttacksOnSight)
			{
				int num23 = num20;
				int num24 = num22;
				List<Character> characters2 = creatureActions3.characters;
				int number = creatureActions3.creatures.number;
				for (int k = 0; k < number; k++)
				{
					string text7 = creatureActions3.creatures.characterName.ToString();
					Library.Characters pcrowFromName = Links.x.library.GetPCRowFromName(text7);
					num20 += pcrowFromName._XP;
				}
				foreach (Character character3 in characters2)
				{
					if (character3)
					{
						int num25 = character3.HasItem(2);
						int num26 = 0;
						if (num25 > 0)
						{
							num26 = character3.GetInvNum(num25 + 1);
							num21 += num26;
						}
						int num27 = character3.SellPriceOfDrops();
						num21 += num27;
						string[] array10 = new string[5];
						int num28 = 0;
						Character character4 = character3;
						array10[num28] = ((character4 != null) ? character4.ToString() : null);
						array10[1] = " sell price of drops ";
						array10[2] = num27.ToString();
						array10[3] = " ";
						array10[4] = num26.ToString();
						Debug.Log(string.Concat(array10));
					}
				}
				if (characters2.Count == 0)
				{
					list.Add(creatureActions3);
				}
				CreatureActions creatureActions4 = creatureActions3;
				Debug.Log(((creatureActions4 != null) ? creatureActions4.ToString() : null) + " xp " + (num20 - num23).ToString());
				if (creatureActions3.creatures.wipeOutBehavior == Creatures.wipeOutState.RespawnTowerWithHostileCreature || creatureActions3.creatures.wipeOutBehavior == Creatures.wipeOutState.RespawnTowerWithPeacefulCreature)
				{
					string text8 = creatureActions3.creatures.afterDeathSpawns.ToString();
					Library.Characters pcrowFromName2 = Links.x.library.GetPCRowFromName(text8);
					num22 += pcrowFromName2._XP * number;
				}
				CreatureActions creatureActions5 = creatureActions3;
				Debug.Log(((creatureActions5 != null) ? creatureActions5.ToString() : null) + " wipeout " + (num22 - num24).ToString());
			}
		}
		Debug.Log("-------------------");
		Debug.Log("XP from NPCs " + num20.ToString());
		Debug.Log("XP from Friendlies " + num13.ToString());
		Debug.Log("XP from respawns (need to multiply x .75, .5 and .25 " + num22.ToString());
		Debug.Log("-------------------");
		Debug.Log("Emeralds from chests " + num3.ToString());
		Debug.Log("Emeralds from breakables " + num2.ToString());
		Debug.Log("Emeralds from items " + num.ToString());
		Debug.Log("Emeralds from Friendlies " + num14.ToString());
		Debug.Log("Emeralds from NPCs " + num21.ToString());
		Debug.Log("-------------------");
		string text9 = "";
		text9 += "Manually add emeralds from : ";
		for (int l = 0; l < list.Count; l++)
		{
			if (l > 0)
			{
				text9 += ", ";
			}
			string text10 = text9;
			CreatureActions creatureActions6 = list[l];
			text9 = text10 + ((creatureActions6 != null) ? creatureActions6.ToString() : null);
		}
		Debug.Log(text9);
	}
}
