using System; using System.Collections.Generic; using UnityEngine; using UnityEngine.UI; // Token: 0x020000C2 RID: 194 public class Merchant : MonoBehaviour { // Token: 0x06001243 RID: 4675 RVA: 0x00162C47 File Offset: 0x00160E47 private void Start() { this.gridImg = this.bag.gridImg; this.gridState = this.bag.gridState; this.bag.Setup(); } // Token: 0x06001244 RID: 4676 RVA: 0x00162C78 File Offset: 0x00160E78 public void RemoveItem(Item currItem) { if (this.isBoro()) { Records.x.boroWeight -= (float)((int)currItem.invRow._Weight); this.SetWeightText(); } Vector4 durability = currItem.durability; durability.y = 0f; currItem.durability = durability; this.items.Remove(currItem); this.CheckSlotCosts(); if (this.onlySelling) { this.merchantCharacter.stats.savedMerchantTime = Links.x.gameplay.gameDays; } this.UpdateMerchant(); } // Token: 0x06001245 RID: 4677 RVA: 0x00162D0C File Offset: 0x00160F0C public void AddItem(Item currItem, int amt, int max, bool addToBag) { Links.x.inventory.secondaryDragSave = true; this.items.Add(currItem); Vector4 durability = currItem.durability; durability.y = (float)Links.x.gameplay.gameDays; if (durability.y == 0f) { durability.y = 1f; } currItem.durability = durability; currItem.forSale = true; string name = currItem.invRow._Name; int num = this.history.IndexOf(name); if (currItem.invRow._NeedFullStack) { amt = 1; } if (num > -1) { int num2 = this.historyCounts[num]; if (amt < 1) { amt = 1; } this.historyCounts[num] = num2 + amt; } else { this.history.Add(name); if (amt < 1) { amt = 1; } this.historyCounts.Add(amt); } if (this.isBoro()) { Records.x.boroWeight += currItem.invRow._Weight; this.SetWeightText(); } this.UpdateMerchant(); } // Token: 0x06001246 RID: 4678 RVA: 0x00162E1C File Offset: 0x0016101C public float GetItemHistoryCount(Library.Inventory row, float cost) { int num = this.history.IndexOf(row._Name); float num2 = 1f; if (num > -1) { float num3 = (float)this.historyCounts[num]; if (num3 == 1f) { num2 = 0.95f; } if (num3 == 2f) { num2 = 0.9f; } if (num3 == 3f) { num2 = 0.85f; } if (num3 == 4f) { num2 = 0.8f; } if (num3 == 5f) { num2 = 0.75f; } if (num3 == 6f) { num2 = 0.7f; } if (num3 == 7f) { num2 = 0.65f; } if (num3 == 8f) { num2 = 0.6f; } if (num3 == 9f) { num2 = 0.55f; } if (num3 == 10f) { num2 = 0.5f; } if (num3 == 11f) { num2 = 0.45f; } if (num3 == 12f) { num2 = 0.4f; } if (num3 == 13f) { num2 = 0.35f; } if (num3 == 14f) { num2 = 0.3f; } if (num3 == 15f) { num2 = 0.25f; } if (num3 == 16f) { num2 = 0.2f; } if (num3 == 17f) { num2 = 0.15f; } if (num3 == 18f) { num2 = 0.1f; } if (num3 >= 19f) { num2 = 0.05f; } } if (cost > 0f) { cost *= num2; if (cost < 1f) { cost = 1f; } } return Mathf.Round(cost); } // Token: 0x06001247 RID: 4679 RVA: 0x00162F80 File Offset: 0x00161180 public void CheckSlotCosts() { for (int i = 0; i < this.items.Count; i++) { this.localImg = this.items[i].gridImg; float num = 0f; int buyPrice = this.items[i].invRow._BuyPrice; if (!this.items[i].invRow._NeedFullStack) { num *= (float)this.items[i].stackSize; } if (this.items[i].durability.w < 0f) { num = this.items[i].durability.w * -1f; } if (this.items[i].socketA.x > 0f) { num += this.items[i].socketB.y; } bool flag = num <= (float)Links.x.inventory.emeralds; this.gridImg = this.bag.gridImg; this.gridState = this.bag.gridState; for (int j = 0; j < this.localImg.Count; j++) { if (flag) { this.gridImg[this.localImg[j]].sprite = Links.x.inventory.filledSprite; } else { this.gridImg[this.localImg[j]].sprite = Links.x.inventory.filledUnavailableSprite; } this.gridState[this.localImg[j]] = true; } } } // Token: 0x06001248 RID: 4680 RVA: 0x00163144 File Offset: 0x00161344 public string GetMerchantText(string t) { string text; if (t == "Sell") { text = "My thanks"; } else if (t == "Buy") { int num = Random.Range(0, 8); if (num == 0) { text = "A good specimen"; } else if (num == 1) { text = "Thanks for your business"; } else if (num == 2) { text = "I'll take that off your hands"; } else if (num == 3) { text = "A fine piece"; } else if (num == 4) { text = "My thanks"; } else if (num == 5) { text = "An easy resell"; } else if (num == 6) { text = "I can find a buyer for this"; } else { text = "Why not?"; } } else if (t == "Contraband") { text = "I'll not buy ill-gained wares"; } else if (t == "PropertyLazure") { text = "I cannot buy property of House Lazure"; } else if (t == "MerchantGoods") { text = "Maybe something more unique?"; } else if (t == "Book") { text = "I don't buy these"; } else if (t == "Full Stack") { text = "I'll only buy a full set"; } else { text = "You'll need more emeralds for that"; } return text; } // Token: 0x06001249 RID: 4681 RVA: 0x00163264 File Offset: 0x00161464 public void UpdateMerchant() { if (!this.setup) { if (this.merchantCharacter) { if (!this.onlySelling) { this.merchantCharacter.stats.savedMerchantTime = Links.x.gameplay.gameDays; } this.str.Clear(); int num = this.items.Count; for (int i = 0; i < num; i++) { Item item = this.items[i]; if (item) { if (i != 0) { this.str.Append(","); } this.str.Append(item.invRow._Name); this.str.Append(","); this.str.Append(item.stackSize); this.str.Append(","); this.str.Append(item.socketA.x); this.str.Append(","); this.str.Append(item.socketA.y); this.str.Append(","); this.str.Append(item.socketA.z); this.str.Append(","); this.str.Append(item.socketB.x); this.str.Append(","); this.str.Append(item.socketB.y); this.str.Append(","); this.str.Append(item.socketB.z); this.str.Append(","); this.str.Append(item.durability.x); this.str.Append(","); if (item.durability.y == 0f) { item.durability.y = (float)Links.x.gameplay.gameDays; } this.str.Append(item.durability.y); this.str.Append(","); this.str.Append(item.durability.z); } } this.savedMerchantList = this.str.ToString(); this.merchantCharacter.stats.savedMerchantList = this.savedMerchantList; this.str.Clear(); num = this.history.Count; for (int j = 0; j < num; j++) { if (j > 0) { this.str.Append(","); } this.str.Append(this.history[j]); this.str.Append(","); this.str.Append(this.historyCounts[j]); } this.savedMerchantHistory = this.str.ToString(); this.merchantCharacter.stats.savedMerchantHistory = this.savedMerchantHistory; if (this.isBoro()) { Records.x.boroBag = this.savedMerchantList; return; } } else if (this.isBoat) { this.creature.UpdateItems(); } } } // Token: 0x0600124A RID: 4682 RVA: 0x001635D0 File Offset: 0x001617D0 public void CloseBag() { this.UpdateMerchant(); int num = this.items.Count; for (int i = 0; i < num; i++) { if (this.items[i]) { this.items[i].DestroyItem(false, false); } } if (this.gridImg == null) { this.gridImg = this.bag.gridImg; this.gridState = this.bag.gridState; } num = this.gridImg.Count; for (int j = 0; j < this.gridImg.Count; j++) { this.gridImg[j].sprite = this.bag.emptySprite; this.gridState[j] = false; } this.items.Clear(); this.isBoat = false; } // Token: 0x0600124B RID: 4683 RVA: 0x001636A8 File Offset: 0x001618A8 public bool CanSellContraband() { return this.merchantCharacter && this.merchantCharacter.stats.xmlName == "RozafirUndergroundMerchant"; } // Token: 0x0600124C RID: 4684 RVA: 0x001636D8 File Offset: 0x001618D8 public void Unload() { this.merchantCharacter = Links.x.gaia.boro; this.SetUpItems(); List list = new List(); List list2 = new List(); for (int i = 0; i < this.items.Count; i++) { list2.Add(false); } for (int j = 0; j < this.items.Count; j++) { float num = 0f; int num2 = -1; for (int k = 0; k < this.items.Count; k++) { if (!list2[k]) { float weight = this.items[k].invRow._Weight; if (weight > num) { num = weight; num2 = k; } } } if (num2 > -1) { list2[num2] = true; list.Add(this.items[num2]); } } bool flag = false; int count = list.Count; int num3 = -1; if (Links.x.main.node != null) { num3 = (int)Links.x.main.node.Area; } for (int l = 0; l < count; l++) { if (!flag) { for (int m = 0; m < list.Count; m++) { if (!flag && list[m]) { Item item = list[m]; if (Records.x.editor) { string text = "Removing "; Item item2 = item; Debug.Log(text + ((item2 != null) ? item2.ToString() : null)); } this.RemoveItem(item); Item item3 = Links.x.inventory.groundBag.DropLoot(item.ID, item.stackSize, item.socketA, item.socketB, item.durability, Links.x.main, Links.x.main.tr.position + new Vector3(Random.Range(-1f, 1f), 0f, Random.Range(-1f, 1f)), true, false, num3); if (item3) { Vector3 vector = Links.x.main.tr.position + new Vector3(Random.Range(-2f, 2f), 0f, Random.Range(-2f, 2f)); RaycastHit raycastHit; if (Physics.Linecast(vector + new Vector3(0f, 10f, 0f), vector - new Vector3(0f, 20f, 0f), out raycastHit, 4194305)) { item3.tr.position = raycastHit.point; } else { item3.tr.position = new Vector3(Random.Range(-1f, 1f), 0f, Random.Range(-1f, 1f)); } } item.DestroyItem(false, false); Records.x.boroWeight = 0f; int count2 = this.items.Count; for (int n = 0; n < count2; n++) { Item item4 = this.items[n]; if (item4) { Records.x.boroWeight += item4.invRow._Weight; } } if (Records.x.boroWeight < Records.x.BoroMaxWeight()) { flag = true; } } } } } this.CloseBag(); this.merchantCharacter = null; } // Token: 0x0600124D RID: 4685 RVA: 0x00163A78 File Offset: 0x00161C78 public void SetUpItems() { this.bag.End(); this.setup = true; this.bag.Setup(); int num; if (this.merchantCharacter) { this.savedMerchantList = this.merchantCharacter.stats.savedMerchantList; num = this.merchantCharacter.stats.savedMerchantTime; this.savedMerchantHistory = this.merchantCharacter.stats.savedMerchantHistory; if (!this.merchantCharacter.stats.xmlName.Contains("Peddler") && !this.merchantCharacter.stats.xmlName.Contains("Merchant") && !this.merchantCharacter.isBoro) { this.onlySelling = true; } } else { this.savedMerchantList = this.creature.savedItems; num = 0; this.savedMerchantHistory = ""; } this.itemIDs.Clear(); if (this.isBoro()) { Records.x.boroWeight = 0f; } if (this.onlySelling && this.merchantCharacter.stats.xmlName == "RozafirGardenerChanter" && (this.savedMerchantList == "" || this.savedMerchantList == null || Links.x.gameplay.gameDays > num || num <= 0)) { this.savedMerchantList = "GhostScrollCirclet,1,0,0,0,0,0,0,0,0,0,GhostScrollCirclet,1,0,0,0,0,0,0,0,0,0,GhostScrollCirclet,1,0,0,0,0,0,0,0,0,0,GhostScrollCirclet,1,0,0,0,0,0,0,0,0,0,GhostScrollCirclet,1,0,0,0,0,0,0,0,0,0,GhostScrollCirclet,1,0,0,0,0,0,0,0,0,0,GhostScrollCirclet,1,0,0,0,0,0,0,0,0,0,GhostScrollCirclet,1,0,0,0,0,0,0,0,0,0"; } if (this.savedMerchantList != "" && this.savedMerchantList != null) { char c = ','; int num2 = 0; int num3 = 0; int num4 = 0; int num5 = 0; int num6 = 0; int num7 = 0; int num8 = 0; int num9 = -1; int num10 = 0; int num11 = 0; string[] array = new string[0]; array = this.savedMerchantList.Split(c, StringSplitOptions.None); int num12 = array.Length; int num13 = 0; for (int i = 0; i < num12; i++) { if (num13 == 0) { int num14 = 0; if (array[i] != "" && array[i] != null) { bool flag = true; string text = array[0]; if (text == "0" || text == "1" || text == "2" || text == "3" || text == "4" || text == "5" || text == "6" || text == "7" || text == "8" || text == "9") { flag = false; } else { string text2 = array[i]; Library.Inventory inventory = Links.x.library.GetInvRowFromName(text2); if (inventory != null) { num14 = inventory._ID; } } if (num14 > 2) { Library.Inventory inventory = Links.x.library.GetInvRowByIndex(num14); if (Links.x.gameplay.gameDays > num + 2 && !Links.x.merchant.isBoro() && !this.onlySelling) { flag = inventory._NeverSell; } int num15; int.TryParse(array[i + 9], out num15); if (Links.x.gameplay.gameDays >= num15 + 1 && !Links.x.merchant.isBoro() && num15 >= 1 && !this.onlySelling && !this.isBoat) { flag = false; } if (flag) { int.TryParse(array[i + 1], out num2); int.TryParse(array[i + 2], out num3); int.TryParse(array[i + 3], out num4); int.TryParse(array[i + 4], out num5); int.TryParse(array[i + 5], out num6); int.TryParse(array[i + 6], out num7); int.TryParse(array[i + 7], out num8); int.TryParse(array[i + 8], out num9); int.TryParse(array[i + 9], out num10); int.TryParse(array[i + 10], out num11); this.itemIDs.Add(num14); this.itemIDs.Add(num2); this.itemIDs.Add(num3); this.itemIDs.Add(num4); this.itemIDs.Add(num5); this.itemIDs.Add(num6); this.itemIDs.Add(num7); this.itemIDs.Add(num8); this.itemIDs.Add(num9); this.itemIDs.Add(num10); this.itemIDs.Add(num11); } } } } if (num13 == 10) { num13 = 0; } else { num13++; } } num12 = this.itemIDs.Count; num13 = 0; for (int j = 0; j < num12; j++) { if (num13 == 0) { Item item = Links.x.inventory.SpawnItem(null, false, this.itemIDs[j], this.itemIDs[j + 1], new Vector3((float)this.itemIDs[j + 2], (float)this.itemIDs[j + 3], (float)this.itemIDs[j + 4]), new Vector3((float)this.itemIDs[j + 5], (float)this.itemIDs[j + 6], (float)this.itemIDs[j + 7]), new Vector4((float)this.itemIDs[j + 8], (float)this.itemIDs[j + 9], (float)this.itemIDs[j + 10], 0f), Vector3.zero, this.bag.transform); item.forSale = true; item.backImage.gameObject.transform.SetParent(Links.x.inventory.merchantBag.transform); item.transform.SetAsLastSibling(); int mainBagX = this.bag.mainBagX; int mainBagY = this.bag.mainBagY; if (Links.x.inventory.FindOpenSpace(this.bag.transform.position, item, mainBagX, mainBagY, "Secondary", Links.x.inventory.merchantBag)) { this.items.Add(item); } else { item.DestroyItem(false, false); Debug.Log("no spot found for " + item.ID.ToString()); } if (this.isBoro()) { Records.x.boroWeight += item.invRow._Weight; } item.CheckStackSize(); } if (num13 == 10) { num13 = 0; } else { num13++; } } } if (this.savedMerchantHistory != "" && this.savedMerchantHistory != null && !this.merchantCharacter.isBoro) { this.history.Clear(); this.historyCounts.Clear(); char c2 = ','; string[] array2 = new string[0]; array2 = this.savedMerchantHistory.Split(c2, StringSplitOptions.None); int num16 = array2.Length; int num17 = 0; for (int k = 0; k < num16; k++) { if (num17 == 0) { string text3 = array2[k]; int num18 = 0; if (text3 != "") { int.TryParse(array2[k + 1], out num18); this.historyCounts.Add(num18); this.history.Add(text3); } } if (num17 == 1) { num17 = 0; } else { num17++; } } } else { this.history.Clear(); this.historyCounts.Clear(); this.savedMerchantHistory = ""; } this.setup = false; if (this.isBoro()) { if (!this.boat) { this.SetWeightText(); } else { Links.x.inventory.peddlerHeader.text = "Loot"; } Links.x.inventory.peddlerFabric.enabled = false; Links.x.inventory.peddlerEmeraldBackground.sprite = Links.x.inventory.emeraldsNone; return; } Links.x.inventory.peddlerFabric.enabled = true; Links.x.inventory.peddlerEmeraldBackground.sprite = Links.x.inventory.emeraldsHigh; Links.x.inventory.peddlerHeader.text = "" + this.merchantCharacter.stats.GetName() + "'s Cart"; } // Token: 0x0600124E RID: 4686 RVA: 0x00164308 File Offset: 0x00162508 public void ReturnFromDrag(Item newItem) { int mainBagX = this.bag.mainBagX; int mainBagY = this.bag.mainBagY; bool flag = Links.x.inventory.FindOpenSpace(this.bag.transform.position, newItem, mainBagX, mainBagY, "Secondary", Links.x.inventory.merchantBag); Debug.Log("Found spot " + flag.ToString()); if (!flag) { newItem.DestroyItem(false, false); Debug.Log("no spot found for " + newItem.ID.ToString()); } } // Token: 0x0600124F RID: 4687 RVA: 0x001643A0 File Offset: 0x001625A0 private void SetWeightText() { if (this.isBoro() && !this.boat) { Records.x.boroWeight = 0f; int count = this.items.Count; for (int i = 0; i < count; i++) { Item item = this.items[i]; if (item) { Records.x.boroWeight += item.invRow._Weight; } } float num = Mathf.Round(Records.x.boroWeight); float num2 = Records.x.BoroMaxWeight(); Links.x.inventory.peddlerHeader.text = string.Concat(new string[] { "Pack weight: ", num.ToString(), "/", num2.ToString(), "" }); } } // Token: 0x06001250 RID: 4688 RVA: 0x0016448D File Offset: 0x0016268D public bool isBoro() { return (!this.merchantCharacter && this.boat) || this.merchantCharacter.isBoro; } // Token: 0x04001E1C RID: 7708 public Character merchantCharacter; // Token: 0x04001E1D RID: 7709 public List items = new List(); // Token: 0x04001E1E RID: 7710 public List itemIDs = new List(); // Token: 0x04001E1F RID: 7711 public Bag bag; // Token: 0x04001E20 RID: 7712 public List history = new List(); // Token: 0x04001E21 RID: 7713 public List historyCounts = new List(); // Token: 0x04001E22 RID: 7714 private List localImg; // Token: 0x04001E23 RID: 7715 private List gridImg; // Token: 0x04001E24 RID: 7716 private List gridState; // Token: 0x04001E25 RID: 7717 public string savedMerchantList; // Token: 0x04001E26 RID: 7718 public string savedMerchantHistory; // Token: 0x04001E27 RID: 7719 private StringFast str = new StringFast(64); // Token: 0x04001E28 RID: 7720 private bool setup; // Token: 0x04001E29 RID: 7721 public bool isBoat; // Token: 0x04001E2A RID: 7722 public bool onlySelling; // Token: 0x04001E2B RID: 7723 public Boat boat; // Token: 0x04001E2C RID: 7724 public CreatureActions creature; }