new public static QuestGather getRandomQuest(Player player) { int playerValue = ModGeneric.getPlayerValue(player); List <QuestGenItem> list = new List <QuestGenItem>(); foreach (KeyValuePair <string, Item> pair in Config.itemDefs.byName) { Item item = pair.Value; if (item.name == "Unloaded Item") { continue; } if (item.value < 1) { continue; } if (item.maxStack <= 1) { continue; } if (item.damage > 0) { continue; } if (item.createTile != -1) { continue; } if (item.createWall != -1) { continue; } if (item.name.EndsWith(" Coin")) { continue; } int tAmount = getBestAmount(playerValue, item); if (tAmount > 0) { list.Add(new QuestGenItem(item, tAmount)); } } if (list.Count != 0) { int average = 0; for (int i = 0; i < list.Count; i++) { average += (int)list[i].item.value * list[i].amount; } average = (int)(1d * average / list.Count); List <QuestGenItem> list2 = new List <QuestGenItem>(); for (int i = 0; i < list.Count; i++) { if (list2.Count == 0) { list2.Add(list[i]); } else { int val1 = (int)Math.Abs(list[i].item.value * list[i].amount - average), val2 = (int)Math.Abs(list2[0].item.value * list2[0].amount - average); if (val1 == val2) { list2.Add(list[i]); } else if (val1 < val2) { list2.Clear(); list2.Add(list[i]); } } } QuestGenItem qgitem = list2[list2.Count == 1 ? 0 : Main.rand.Next(list2.Count)]; while (true) { Reward r = Reward.getRandomReward(getQuestValue(qgitem)); if (r.itemName != qgitem.item.name) { return(new QuestGather(qgitem.amount, r, qgitem.item)); } } } return(null); }
public static QuestMonster getRandomQuest(Player player, bool boss) { int playerValue = ModGeneric.getPlayerValue(player); List <QuestGenNPC> list = new List <QuestGenNPC>(); foreach (KeyValuePair <string, NPC> pair in Config.npcDefs.byName) { NPC npc = pair.Value; if (npc.townNPC || npc.friendly || npc.dontTakeDamage) { continue; } if (getNPCValue(npc) < 1) { continue; } if (boss != isBoss(npc)) { continue; } int tAmount = getBestAmount(playerValue, npc); if (tAmount > 0) { list.Add(new QuestGenNPC(npc, tAmount)); } } if (list.Count != 0) { int average = 0; for (int i = 0; i < list.Count; i++) { average += (int)list[i].npc.value * list[i].amount; } average = (int)(1d * average / list.Count); List <QuestGenNPC> list2 = new List <QuestGenNPC>(); for (int i = 0; i < list.Count; i++) { if (list2.Count == 0) { list2.Add(list[i]); } else { int val1 = (int)Math.Abs(list[i].npc.value * list[i].amount - average), val2 = (int)Math.Abs(list2[0].npc.value * list2[0].amount - average); if (val1 == val2) { list2.Add(list[i]); } else if (val1 < val2) { list2.Clear(); list2.Add(list[i]); } } } QuestGenNPC qgnpc = list2[list2.Count == 1 ? 0 : Main.rand.Next(list2.Count)]; return(new QuestMonster(qgnpc.amount, Reward.getRandomReward(getQuestValue(qgnpc)), qgnpc.npc)); } return(null); }