using Newtonsoft.Json.Linq; using System; using System.Collections; using System.Collections.Generic; using UnityEngine; namespace Assets.Scripts { public class Equipment : Item { ItemPlace place; Dictionary attributes; public Equipment(int luck) : base(luck, true) { attributes = new Dictionary(); int numberOfAttributes = 1; if (rarity > ItemRarity.COMMON) { numberOfAttributes = 2; } if (rarity > ItemRarity.RARE) { numberOfAttributes = 3; } if (rarity == ItemRarity.LEGENDARY) { numberOfAttributes = 0; } calculateAttributes(luck, numberOfAttributes); place = (ItemPlace)rand.Next(8); editName(); loadImage(); Debug.Log(itemName); } public Equipment(JToken json) : base(json) { attributes = new Dictionary(); place = (ItemPlace)Enum.Parse(typeof(ItemPlace), json["place"].ToString()); loadAttributes(json); loadImage(); } private void loadAttributes(JToken json) { if (json["MPR"] != null) { attributes.Add("MPR", int.Parse(json["MPR"].ToString())); } if (json["HPR"] != null) { attributes.Add("HPR", int.Parse(json["HPR"].ToString())); } if (json["MP"] != null) { attributes.Add("MP", int.Parse(json["MP"].ToString())); } if (json["HP"] != null) { attributes.Add("HP", int.Parse(json["HP"].ToString())); } if (json["STR"] != null) { attributes.Add("STR", int.Parse(json["STR"].ToString())); } if (json["DEX"] != null) { attributes.Add("DEX", int.Parse(json["DEX"].ToString())); } if (json["INT"] != null) { attributes.Add("INT", int.Parse(json["INT"].ToString())); } if (json["LCK"] != null) { attributes.Add("LCK", int.Parse(json["LCK"].ToString())); } } private void editName() { string replacement = ""; if (place == ItemPlace.LEFTHAND) { switch (GameObject.Find("Player").GetComponent().getClass().classname) { case "Warrior": replacement = "Greatshield"; break; case "Thief": replacement = "Shield"; break; case "Mage": replacement = "Orb"; break; } } else if (place == ItemPlace.RIGHTHAND) { switch (GameObject.Find("Player").GetComponent().getClass().classname) { case "Warrior": replacement = "Sword"; break; case "Thief": replacement = "Dagger"; break; case "Mage": replacement = "Wand"; break; } } if (itemName != null) { if (replacement.Length > 0) { itemName = replacement + " of " + itemName + " attribute (" + rarity.ToString() + ")"; } else { itemName = place.ToString() + " of " + itemName + " attribute \r\n (" + rarity.ToString() + ")"; } } else { if (replacement.Length > 0) { itemName = replacement + " \r\n" + rarity.ToString(); } else { itemName = place.ToString() + " \r\n" + rarity.ToString(); } } itemName = itemName.ToLower(); itemName = char.ToUpper(itemName[0]) + itemName.Substring(1); } private void calculateAttributes(int luck, int numberOfAttributes) { if (numberOfAttributes != 0) { int[] indexes = new int[numberOfAttributes]; int index; for (int i = 0; i < numberOfAttributes; i++) { index = calculateIndex(indexes); switch (index) { case 1: if (i == 0) { itemName = "Luck"; } attributes.Add("LCK", Mathf.RoundToInt((float)(3 - (2 * i) + rand.Next(luck) * 0.1))); break; case 2: if (i == 0) { itemName = "Intelligence"; } attributes.Add("INT", Mathf.RoundToInt((float)(3 - (2 * i) + rand.Next(luck) * 0.1))); break; case 3: if (i == 0) { itemName = "Dexterity"; } attributes.Add("DEX", Mathf.RoundToInt((float)(3 - (2 * i) + rand.Next(luck) * 0.1))); break; case 4: if (i == 0) { itemName = "Strength"; } attributes.Add("STR", Mathf.RoundToInt((float)(3 - (2 * i) + rand.Next(luck) * 0.1))); break; case 5: if (i == 0) { itemName = "Health"; } attributes.Add("HP", Mathf.RoundToInt((float)(10 - (2 * i) + rand.Next(luck) * 0.1))); break; case 6: if (i == 0) { itemName = "mana"; } attributes.Add("MP", Mathf.RoundToInt((float)(10 - (2 * i) + rand.Next(luck) * 0.1))); break; case 7: if (i == 0) { itemName = "health regeneration"; } attributes.Add("HPR", Mathf.RoundToInt((float)(3 - (2 * i) + rand.Next(luck) * 0.1))); break; case 8: if (i == 0) { itemName = "mana regeneration"; } attributes.Add("MPR", Mathf.RoundToInt((float)(3 - (2 * i) + rand.Next(luck) * 0.1))); break; } indexes[i] = index; } } else { int bonus = rand.Next(luck); attributes.Add("MPR", Mathf.RoundToInt((float)(3 + bonus * 0.1))); attributes.Add("HPR", Mathf.RoundToInt((float)(3 + bonus * 0.1))); attributes.Add("MP", Mathf.RoundToInt((float)(3 + bonus * 0.1))); attributes.Add("HP", Mathf.RoundToInt((float)(3 + bonus * 0.1))); attributes.Add("STR", Mathf.RoundToInt((float)(3 + bonus * 0.1))); attributes.Add("DEX", Mathf.RoundToInt((float)(3 + bonus * 0.1))); attributes.Add("INT", Mathf.RoundToInt((float)(3 + bonus * 0.1))); attributes.Add("LCK", Mathf.RoundToInt((float)(3 + bonus * 0.1))); } } private int calculateIndex(int[] indexes) { int counter = 0; int index = 0; while (true) { index = rand.Next(8) + 1; counter = 0; for (int j = 0; j < indexes.Length; j++) { if (indexes[j] == index) { counter++; break; } } if (counter == 0) { break; } } return index; } public ItemPlace getPlace() { return place; } public string getDisplayText() { string displayText = ""; displayText = displayText + itemName + "\r\n"; if (rarity == ItemRarity.LEGENDARY) { displayText = displayText + "All attributes: +" + attributes["STR"]; } else { foreach (string key in attributes.Keys) { displayText = displayText + key + ": +" + attributes[key] + "\r\n"; } } return displayText; } override protected void loadImage() { switch (place) { case ItemPlace.LEFTHAND: image = Resources.Load("Equipment/" + GameObject.Find("Player").GetComponent().getClass().classname + "/Inv_LeftHand"); break; case ItemPlace.RIGHTHAND: image = Resources.Load("Equipment/" + GameObject.Find("Player").GetComponent().getClass().classname + "/Inv_RightHand"); break; case ItemPlace.HELMET: image = Resources.Load("Equipment/Inv_Helmet"); break; case ItemPlace.BOOTS: image = Resources.Load("Equipment/Inv_Boots"); break; case ItemPlace.SHOULDER: image = Resources.Load("Equipment/Inv_Shoulders"); break; case ItemPlace.AMULET: image = Resources.Load("Equipment/Inv_Amulet"); break; case ItemPlace.RING: image = Resources.Load("Equipment/Inv_Ring"); break; case ItemPlace.ARMOR: image = Resources.Load("Equipment/Inv_Chest"); break; } } public Dictionary getAttributes() { return attributes; } override public string saveGame() { string result = ""; int counter = 0; result = result + FileHandler.generateJSON("rarity", "\"" + rarity + "\"") + ",\r\n"; result = result + FileHandler.generateJSON("place", "\"" + place + "\"") + ",\r\n"; result = result + FileHandler.generateJSON("itemName", "\"" + itemName + "\"") + ",\r\n"; foreach (string key in attributes.Keys) { result = result + FileHandler.generateJSON(key, attributes[key]); if (counter < attributes.Count - 1) { result = result + ",\r\n"; } counter++; } return result; } override public string getInformation() { string text = "Stats:\r\n"; if (rarity == ItemRarity.LEGENDARY) { text = "All stats: +" + attributes["STR"]; } else { foreach (string key in attributes.Keys) { text = text + key + ": +" + attributes[key] + "\r\n"; } } return text; } } }