public float GetProgress(IPandaQuest quest, Colony colony) { if (GoalCount == 0) { return(1); } var jobs = ColonyTool.GetJobCounts(colony); if (jobs.TryGetValue(NpcTypeKey, out var counts)) { if (counts.TakenCount == 0) { return(0); } if (counts.TakenCount == GoalCount) { return(1); } else { return(counts.TakenCount / GoalCount); } } else { return(0); } }
public static ColonyModel MapColony(Colony c) { return(new ColonyModel() { ColonyId = c.ColonyID, Name = c.Name, LaborerCount = c.LaborerCount, AutoRecruit = c.JobFinder.AutoRecruit, AvailableMeals = c.Stockpile.TotalMeals, BedCount = c.BedTracker.BedCount, OpenJobCount = ColonyTool.GetJobCounts(c).Select(kvp => kvp.Value.AvailableCount).Sum(), StockpileCount = c.Stockpile.ItemCount, BannerCount = c.Banners.Length, ColonistCount = c.FollowerCount, Owners = c.Owners.Select(o => o.Name).ToList(), ColonyState = ColonyState.GetColonyState(c), MonsterCount = MonsterTracker.GetAllMonstersByID().Where(m => m.Value.OriginalGoal.ColonyID == c.ColonyID).Count() }); }
public static void PressButton(ButtonPressCallbackData data) { if (data.ButtonIdentifier.Contains(GameLoader.NAMESPACE + ".PlayerDetails")) { BuildPlayerDetailsMenu(data); return; } else if (data.ButtonIdentifier.Contains(".AddPlayerEquiptmentButton")) { NetworkMenu menu = new NetworkMenu(); menu.LocalStorage.SetAs("header", _localizationHelper.LocalizeOrDefault("PlayerEquiptment", data.Player)); menu.Width = 1000; menu.Height = 600; if (data.ButtonIdentifier.Contains("MagicItem.")) { var id = data.ButtonIdentifier.Replace("AddPlayerEquiptmentButton", ""); foreach (var kvp in data.Player.ActiveColony.Stockpile.Items) { if (kvp.Value > 0 && ItemTypes.TryGetType(kvp.Key, out var itemType) && MagicItemsCache.PlayerMagicItems.TryGetValue(itemType.Name, out var magicItem) && !Armor.ArmorFactory.ArmorLookup.ContainsKey(kvp.Key) && !Weapons.WeaponFactory.WeaponLookup.ContainsKey(kvp.Key)) { List <ValueTuple <IItem, int> > items = new List <ValueTuple <IItem, int> >(); items.Add(ValueTuple.Create <IItem, int>(new ItemIcon(kvp.Key), 250)); items.Add(ValueTuple.Create <IItem, int>(new Label(new LabelData(magicItem.name, UnityEngine.Color.black, UnityEngine.TextAnchor.MiddleLeft, 18, LabelData.ELocalizationType.Type)), 250)); items.Add(ValueTuple.Create <IItem, int>(new Label(new LabelData(_localizationHelper.LocalizeOrDefault("Stockpile", data.Player) + ": " + kvp.Value.ToString(), UnityEngine.Color.black)), 250)); items.Add(ValueTuple.Create <IItem, int>(new ButtonCallback(id + kvp.Key + ".AddPlayerSelectedEquiptmentButton", new LabelData(_localizationHelper.GetLocalizationKey("Select"), UnityEngine.Color.black, UnityEngine.TextAnchor.MiddleCenter)), 250)); menu.Items.Add(new HorizontalRow(items)); } } } else { foreach (var kvp in data.Player.ActiveColony.Stockpile.Items) { if (kvp.Value > 0 && Armor.ArmorFactory.ArmorLookup.TryGetValue(kvp.Key, out var armItem) && data.ButtonIdentifier.Contains(armItem.Slot + ".")) { List <ValueTuple <IItem, int> > items = new List <ValueTuple <IItem, int> >(); items.Add(ValueTuple.Create <IItem, int>(new ItemIcon(kvp.Key), 250)); items.Add(ValueTuple.Create <IItem, int>(new Label(new LabelData(armItem.name, UnityEngine.Color.black, UnityEngine.TextAnchor.MiddleLeft, 18, LabelData.ELocalizationType.Type)), 250)); items.Add(ValueTuple.Create <IItem, int>(new Label(new LabelData(_localizationHelper.LocalizeOrDefault("Stockpile", data.Player) + ": " + kvp.Value.ToString(), UnityEngine.Color.black)), 250)); items.Add(ValueTuple.Create <IItem, int>(new ButtonCallback(kvp.Key + ".AddPlayerSelectedEquiptmentButton", new LabelData(_localizationHelper.GetLocalizationKey("Select"), UnityEngine.Color.black, UnityEngine.TextAnchor.MiddleCenter)), 250)); menu.Items.Add(new HorizontalRow(items)); } } } NetworkMenuManager.SendServerPopup(data.Player, menu); } else if (data.ButtonIdentifier.Contains(".AddPlayerSelectedEquiptmentButton")) { if (data.ButtonIdentifier.Contains("MagicItem.")) { var startPos = data.ButtonIdentifier.Replace("MagicItem.", ""); if (int.TryParse(startPos.Substring(0, startPos.IndexOf('.')), out var slot)) { var itemId = startPos.Substring(startPos.IndexOf('.') + 1, startPos.LastIndexOf(".") - 2); if (ushort.TryParse(itemId, out var id)) { var item = ItemId.GetItemId(id); if (MagicItemsCache.PlayerMagicItems.TryGetValue(item.Name, out var magicItem) && data.Player.ActiveColony.Stockpile.TryRemove(id)) { var ps = PlayerState.GetPlayerState(data.Player); ps.MagicItems[slot] = magicItem; ps.RecaclculateMagicItems(); } } } BuildPlayerDetailsMenu(data); return; } else { foreach (var kvp in data.Player.ActiveColony.Stockpile.Items) { if (Armor.ArmorFactory.ArmorLookup.TryGetValue(kvp.Key, out var armItem) && data.ButtonIdentifier.Contains(kvp.Key + ".") && data.Player.ActiveColony.Stockpile.TryRemove(kvp.Key)) { var ps = PlayerState.GetPlayerState(data.Player); if (ps.Armor[armItem.Slot].Id != default(ushort)) { data.Player.ActiveColony.Stockpile.Add(ps.Armor[armItem.Slot].Id); } ps.Armor[armItem.Slot].Id = kvp.Key; ps.Armor[armItem.Slot].Durability = armItem.Durability; ps.RecaclculateMagicItems(); BuildPlayerDetailsMenu(data); return; } } } } else if (data.ButtonIdentifier.Contains(".RemovePlayerEquiptmentButton")) { var ps = PlayerState.GetPlayerState(data.Player); if (data.ButtonIdentifier.Contains("MagicItem.")) { if (int.TryParse(data.ButtonIdentifier.Replace("MagicItem.", "").Replace(".RemovePlayerEquiptmentButton", ""), out var id)) { data.Player.ActiveColony.Stockpile.Add(ItemId.GetItemId(ps.MagicItems[id].name)); ps.MagicItems[id] = null; } } else { foreach (var armor in ps.Armor) { if (data.ButtonIdentifier.Contains(armor.Key + ".")) { if (armor.Value.Id != default(ushort)) { data.Player.ActiveColony.Stockpile.Add(armor.Value.Id); } armor.Value.Id = default(ushort); armor.Value.Durability = default(int); break; } } } ps.RecaclculateMagicItems(); BuildPlayerDetailsMenu(data); } else if (data.ButtonIdentifier.Contains(".JobDetailsButton")) { Dictionary <string, JobCounts> jobCounts = ColonyTool.GetJobCounts(data.Player.ActiveColony); foreach (var jobKvp in jobCounts) { if (data.ButtonIdentifier.Contains(jobKvp.Key)) { NetworkMenu menu = new NetworkMenu(); menu.LocalStorage.SetAs("header", _localizationHelper.LocalizeOrDefault(jobKvp.Key.Replace(" ", ""), data.Player) + " " + _localizationHelper.LocalizeOrDefault("JobDetails", data.Player)); menu.Width = 1000; menu.Height = 600; var firstGuy = jobKvp.Value.TakenJobs.FirstOrDefault(); var firstInv = Entities.SettlerInventory.GetSettlerInventory(firstGuy.NPC); List <ValueTuple <IItem, int> > headerItems = new List <ValueTuple <IItem, int> >(); headerItems.Add(ValueTuple.Create <IItem, int>(new Label(new LabelData(_localizationHelper.GetLocalizationKey("Name"), UnityEngine.Color.black)), 100)); headerItems.Add(ValueTuple.Create <IItem, int>(new Label(new LabelData(_localizationHelper.GetLocalizationKey("Weapon"), UnityEngine.Color.black)), 100)); foreach (var a in firstInv.Armor) { headerItems.Add(ValueTuple.Create <IItem, int>(new Label(new LabelData(_localizationHelper.GetLocalizationKey(a.Key.ToString()), UnityEngine.Color.black)), 100)); } menu.Items.Add(new HorizontalRow(headerItems)); foreach (var job in jobKvp.Value.TakenJobs) { var inv = Entities.SettlerInventory.GetSettlerInventory(job.NPC); List <ValueTuple <IItem, int> > items = new List <ValueTuple <IItem, int> >(); items.Add(ValueTuple.Create <IItem, int>(new Label(new LabelData(inv.SettlerName, UnityEngine.Color.black)), 100)); items.Add(ValueTuple.Create <IItem, int>(new ItemIcon(inv.Weapon.Id), 100)); foreach (var armor in inv.Armor) { items.Add(ValueTuple.Create <IItem, int>(new ItemIcon(armor.Value.Id), 100)); } items.Add(ValueTuple.Create <IItem, int>(new ButtonCallback(jobKvp.Key + "." + job.NPC.ID + ".EquiptmentButton", new LabelData(_localizationHelper.GetLocalizationKey("Details"), UnityEngine.Color.black, UnityEngine.TextAnchor.MiddleCenter)), 100)); menu.Items.Add(new HorizontalRow(items)); } menu.Items.Add(new Line()); menu.Items.Add(new ButtonCallback(GameLoader.NAMESPACE + ".ColonyToolMainMenu", new LabelData(_localizationHelper.GetLocalizationKey("Back"), UnityEngine.Color.black, UnityEngine.TextAnchor.MiddleCenter))); NetworkMenuManager.SendServerPopup(data.Player, menu); return; } } } else if (data.ButtonIdentifier.Contains(".EquiptmentButton")) { Dictionary <string, JobCounts> jobCounts = ColonyTool.GetJobCounts(data.Player.ActiveColony); foreach (var jobKvp in jobCounts) { if (data.ButtonIdentifier.Contains(jobKvp.Key)) { foreach (var job in jobKvp.Value.TakenJobs) { if (data.ButtonIdentifier.Contains("." + job.NPC.ID.ToString() + ".EquiptmentButton")) { BuildSettlerDetailMenu(data, jobKvp, job); return; } } } } } else if (data.ButtonIdentifier.Contains(".AddEquiptmentButton")) { Dictionary <string, JobCounts> jobCounts = ColonyTool.GetJobCounts(data.Player.ActiveColony); foreach (var jobKvp in jobCounts) { if (data.ButtonIdentifier.Contains(jobKvp.Key)) { foreach (var job in jobKvp.Value.TakenJobs) { if (data.ButtonIdentifier.Contains("." + job.NPC.ID.ToString() + ".")) { var inv = Entities.SettlerInventory.GetSettlerInventory(job.NPC); NetworkMenu menu = new NetworkMenu(); menu.LocalStorage.SetAs("header", inv.SettlerName + " " + _localizationHelper.LocalizeOrDefault("Equiptment", data.Player)); menu.Width = 1000; menu.Height = 600; var newButtonID = data.ButtonIdentifier.Replace(".AddEquiptmentButton", ""); if (data.ButtonIdentifier.Contains(".wep.")) { foreach (var kvp in data.Player.ActiveColony.Stockpile.Items) { if (kvp.Value > 0 && Weapons.WeaponFactory.WeaponLookup.TryGetValue(kvp.Key, out var wepItem)) { List <ValueTuple <IItem, int> > items = new List <ValueTuple <IItem, int> >(); items.Add(ValueTuple.Create <IItem, int>(new ItemIcon(kvp.Key), 250)); items.Add(ValueTuple.Create <IItem, int>(new Label(new LabelData(wepItem.name, UnityEngine.Color.black, UnityEngine.TextAnchor.MiddleLeft, 18, LabelData.ELocalizationType.Type)), 250)); items.Add(ValueTuple.Create <IItem, int>(new Label(new LabelData(_localizationHelper.LocalizeOrDefault("Stockpile", data.Player) + ": " + kvp.Value.ToString(), UnityEngine.Color.black)), 250)); items.Add(ValueTuple.Create <IItem, int>(new ButtonCallback(newButtonID + "." + kvp.Key + ".AddSelectedEquiptmentButton", new LabelData(_localizationHelper.GetLocalizationKey("Select"), UnityEngine.Color.black, UnityEngine.TextAnchor.MiddleCenter)), 250)); menu.Items.Add(new HorizontalRow(items)); } } } else if (data.ButtonIdentifier.Contains(".arm.")) { foreach (var kvp in data.Player.ActiveColony.Stockpile.Items) { if (kvp.Value > 0 && Armor.ArmorFactory.ArmorLookup.TryGetValue(kvp.Key, out var armItem) && data.ButtonIdentifier.Contains("." + armItem.Slot + ".")) { List <ValueTuple <IItem, int> > items = new List <ValueTuple <IItem, int> >(); items.Add(ValueTuple.Create <IItem, int>(new ItemIcon(kvp.Key), 250)); items.Add(ValueTuple.Create <IItem, int>(new Label(new LabelData(armItem.name, UnityEngine.Color.black, UnityEngine.TextAnchor.MiddleLeft, 18, LabelData.ELocalizationType.Type)), 250)); items.Add(ValueTuple.Create <IItem, int>(new Label(new LabelData(_localizationHelper.LocalizeOrDefault("Stockpile", data.Player) + ": " + kvp.Value.ToString(), UnityEngine.Color.black)), 250)); items.Add(ValueTuple.Create <IItem, int>(new ButtonCallback(newButtonID + "." + kvp.Key + ".AddSelectedEquiptmentButton", new LabelData(_localizationHelper.GetLocalizationKey("Select"), UnityEngine.Color.black, UnityEngine.TextAnchor.MiddleCenter)), 250)); menu.Items.Add(new HorizontalRow(items)); } } } NetworkMenuManager.SendServerPopup(data.Player, menu); return; } } } } } else if (data.ButtonIdentifier.Contains(".AddSelectedEquiptmentButton")) { Dictionary <string, JobCounts> jobCounts = ColonyTool.GetJobCounts(data.Player.ActiveColony); foreach (var jobKvp in jobCounts) { if (data.ButtonIdentifier.Contains(jobKvp.Key)) { foreach (var job in jobKvp.Value.TakenJobs) { if (data.ButtonIdentifier.Contains("." + job.NPC.ID.ToString() + ".")) { if (data.ButtonIdentifier.Contains(".wep.")) { foreach (var kvp in data.Player.ActiveColony.Stockpile.Items) { if (Weapons.WeaponFactory.WeaponLookup.TryGetValue(kvp.Key, out var wepItem) && data.ButtonIdentifier.Contains("." + kvp.Key + ".") && job.NPC.Colony.Stockpile.TryRemove(kvp.Key)) { var inv = Entities.SettlerInventory.GetSettlerInventory(job.NPC); if (inv.Weapon.Id != default(ushort)) { job.NPC.Colony.Stockpile.Add(inv.Weapon.Id); } inv.Weapon.Id = kvp.Key; inv.Weapon.Durability = wepItem.WepDurability; BuildSettlerDetailMenu(data, jobKvp, job); return; } } } else if (data.ButtonIdentifier.Contains(".arm.")) { foreach (var kvp in data.Player.ActiveColony.Stockpile.Items) { if (Armor.ArmorFactory.ArmorLookup.TryGetValue(kvp.Key, out var armItem) && data.ButtonIdentifier.Contains("." + kvp.Key + ".") && job.NPC.Colony.Stockpile.TryRemove(kvp.Key)) { var inv = Entities.SettlerInventory.GetSettlerInventory(job.NPC); if (inv.Armor[armItem.Slot].Id != default(ushort)) { job.NPC.Colony.Stockpile.Add(inv.Armor[armItem.Slot].Id); } inv.Armor[armItem.Slot].Id = kvp.Key; inv.Armor[armItem.Slot].Durability = armItem.Durability; BuildSettlerDetailMenu(data, jobKvp, job); return; } } } } } } } } else if (data.ButtonIdentifier.Contains(".RemoveEquiptmentButton")) { Dictionary <string, JobCounts> jobCounts = ColonyTool.GetJobCounts(data.Player.ActiveColony); foreach (var jobKvp in jobCounts) { if (data.ButtonIdentifier.Contains(jobKvp.Key)) { foreach (var job in jobKvp.Value.TakenJobs) { if (data.ButtonIdentifier.Contains("." + job.NPC.ID.ToString() + ".EquiptmentButton")) { var inv = Entities.SettlerInventory.GetSettlerInventory(job.NPC); if (data.ButtonIdentifier.Contains(".wep.")) { if (inv.Weapon.Id != default(ushort)) { job.NPC.Colony.Stockpile.Add(inv.Weapon.Id); } inv.Weapon.Id = default(ushort); inv.Weapon.Durability = default(int); } else if (data.ButtonIdentifier.Contains(".arm.")) { foreach (var armor in inv.Armor) { if (data.ButtonIdentifier.Contains("." + armor.Key + ".")) { if (armor.Value.Id != default(ushort)) { job.NPC.Colony.Stockpile.Add(armor.Value.Id); } armor.Value.Id = default(ushort); armor.Value.Durability = default(int); break; } } } BuildSettlerDetailMenu(data, jobKvp, job); return; } } } } } else if (data.ButtonIdentifier.Contains(".ColonyToolMainMenu")) { Dictionary <string, JobCounts> jobCounts = ColonyTool.GetJobCounts(data.Player.ActiveColony); NetworkMenuManager.SendServerPopup(data.Player, ColonyTool.BuildMenu(data.Player, jobCounts, false, string.Empty, 0)); } }