lots of work on making quest to assort mapping work automatically

This commit is contained in:
Chomp 2022-01-19 20:22:59 +00:00
parent a5c91995f2
commit d7f32db3f1
11 changed files with 1012 additions and 33 deletions

View File

@ -45,7 +45,7 @@ namespace AssortUpdater
}
}
}
assortToAddTo.SubItems.Add(subAssort);
assortToAddTo?.SubItems.Add(subAssort);
}
return results;
@ -95,24 +95,6 @@ namespace AssortUpdater
return results;
}
public class FlatAssort
{
public FlatAssort()
{
SubItems = new List<Assort.Item>();
BarterDetails = new List<Assort.BarterDetails>();
}
public string AssortId { get; set; }
public string ItemId { get; set; }
public string ItemName { get; set; }
public List<Assort.Item> SubItems { get; set; }
public Assort.Item RawItem { get;set;}
public int Level { get; set; }
public bool IsMoney { get; set; }
public List<Assort.BarterDetails> BarterDetails { get; set; }
}
public static Assort UnFlatten(List<FlatAssort> flatAssorts)
{
var result = new Assort();

View File

@ -1,4 +1,5 @@
using AssortValidator.Common.Helpers;
using AssortValidator.Common.Models;
using static AssortUpdater.AssortFlattener;
namespace AssortUpdater

View File

@ -34,15 +34,15 @@ class Program
//LogItemsMissingInLiveAssorts(trader.Key.ToString(), flattenedExistingAssorts, flattenedLiveAssorts);
//LogItemsMissingInExistingAssorts(trader.Key.ToString(), flattenedExistingAssorts, flattenedLiveAssorts);
var flatAssorts = AssortMerger.CreateMergedFlattenedAssorts(trader.Key.ToString(), flattenedLiveAssorts, flattenedExistingAssorts);
List<FlatAssort>? flatAssorts = AssortMerger.CreateMergedFlattenedAssorts(trader.Key.ToString(), flattenedLiveAssorts, flattenedExistingAssorts);
LoggingHelpers.LogInfo($"trader: {TraderHelper.GetTraderIdByName(trader.Key)}");
AssortMerger.ListDuplicatesInMergedAssorts(flatAssorts);
Assort unflattenedAssorts = AssortFlattener.UnFlatten(flatAssorts);
JsonWriter.WriteJson(unflattenedAssorts, traderId, Directory.GetCurrentDirectory(), "assort");
//JsonWriter.WriteJson(unflattenedAssorts, traderId, Directory.GetCurrentDirectory(), "assort");
var questAssorts = QuestHelper.CreateQuestAssortsList(traderQuestAssortUnlocks);
var questAssorts = QuestHelper.CreateQuestAssortsList(trader.Key, traderQuestAssortUnlocks, flatAssorts);
LogQuestUnlocks(questAssorts, unflattenedAssorts);
JsonWriter.WriteJson(questAssorts, traderId, Directory.GetCurrentDirectory(), "questassort");
}
@ -57,11 +57,11 @@ class Program
var assortData = unflattenedAssorts.items.Find(x => x._id == assortId);
LoggingHelpers.LogToConsole($"Item {assortId} {assortData?.ItemName} is unlocked by quest {QuestNames.GetNameById(questId)}");
LoggingHelpers.LogToConsole($"Assort: {assortId} Item: {assortData?.ItemName} is unlocked by quest {QuestNames.GetNameById(questId)}");
}
}
private static void LogItemsMissingInExistingAssorts(string traderName, List<AssortFlattener.FlatAssort> flattenedExistingAssorts, List<AssortFlattener.FlatAssort> flattenedLiveAssorts)
private static void LogItemsMissingInExistingAssorts(string traderName, List<FlatAssort> flattenedExistingAssorts, List<FlatAssort> flattenedLiveAssorts)
{
foreach (var liveAssort in flattenedLiveAssorts)
{
@ -94,7 +94,7 @@ class Program
}
}
private static void LogItemsMissingInLiveAssorts(string traderName, List<AssortFlattener.FlatAssort> flattenedExistingAssorts, List<AssortFlattener.FlatAssort> flattenedLiveAssorts)
private static void LogItemsMissingInLiveAssorts(string traderName, List<FlatAssort> flattenedExistingAssorts, List<FlatAssort> flattenedLiveAssorts)
{
foreach (var existingAssort in flattenedExistingAssorts)
{

View File

@ -0,0 +1,33 @@
using AssortValidator.Common.Models;
using System.Collections.Generic;
namespace AssortValidator.Common.Helpers
{
public static class CurrencyHelper
{
private static readonly Dictionary<CurrencyEnum, string> questLookup = new()
{
{ CurrencyEnum.Rouble, "5936d90786f7742b1420ba5b" },
{ CurrencyEnum.Euro, "5936da9e86f7742d65037edf" },
{ CurrencyEnum.USD, "59674cd986f7744ab26e32f2" },
};
public static string GetCurrencyByEnum(CurrencyEnum currencyType)
{
return questLookup[currencyType];
}
public static CurrencyEnum GetCurrencyById(string itemId)
{
foreach (var item in questLookup)
{
if (item.Value == itemId)
{
return item.Key;
}
}
return 0;
}
}
}

View File

@ -0,0 +1,65 @@
using AssortValidator.Common.Models;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using static AssortValidator.Common.Models.Assort;
namespace AssortValidator.Common.Helpers
{
public static class QuestAssortMappingHelper
{
private static readonly Dictionary<string, List<QuestAssortMapping>> mappings = new()
{
{
"59689ee586f7740d1570bbd5",
new List<QuestAssortMapping>() { new QuestAssortMapping { QuestType = QuestEnum.SanitaryStandardsP1, ItemTplId = "590c661e86f7741e566b646a", Level = 1, Trader = Trader.Therapist, IsMoneyBarter = false } }
}, // car first aid
{
"5c0bde0986f77479cf22c2f8",
new List<QuestAssortMapping>() { new QuestAssortMapping { QuestType = QuestEnum.AShooterBornInHeaven, ItemTplId = "5c127c4486f7745625356c13", Level = 3, Trader = Trader.Mechanic, IsMoneyBarter = false } }
},
{
"5967725e86f774601a446662",
new List<QuestAssortMapping>() { new QuestAssortMapping { QuestType = QuestEnum.ShakingUpTeller, ItemTplId = "59c0ec5b86f77435b128bfca", Level = 2, Trader = Trader.Skier, IsMoneyBarter = false } }
}, // Hexagon 12K 12ga sound suppressor
{
"5a27b7d686f77460d847e6a6",
new List<QuestAssortMapping>() { new QuestAssortMapping { QuestType = QuestEnum.ScrapMetal, ItemTplId = "5926bb2186f7744b1c6c6e60", Trader = Trader.Peacekeeper, Level = 2, IsMoneyBarter = true, SubItemCount = 7 } }
}, // HK MP5 9x19 submachine gun (Navy 3 Round Burst)
{
"5ae327c886f7745c7b3f2f3f",
new List<QuestAssortMapping>() { new QuestAssortMapping { QuestType = QuestEnum.GunsmithP10, ItemTplId = "5447a9cd4bdc2dbd208b4567", Trader = Trader.Mechanic, Level = 3, IsMoneyBarter = false } }
}, // Colt M4A1 5.56x45 assault rifle (variant SOPMOD I)
{
"5c0bbaa886f7746941031d82",
new List<QuestAssortMapping>()
{ new QuestAssortMapping { QuestType = QuestEnum.Bullshit, ItemTplId = "5c1127d0d174af29be75cf68", Trader = Trader.Skier, Level = 3, IsMoneyBarter = false }, // 12/70 RIP 5 shell ammo box
new QuestAssortMapping { QuestType = QuestEnum.Bullshit, ItemTplId = "606587252535c57a13424cfd", Trader = Trader.Skier, Level = 3, IsMoneyBarter = true }} //mutant mk47
},
};
public static List<QuestAssortMapping> GetQuestAssortMappingDetails(string questId)
{
return mappings[questId];
}
}
public class QuestAssortMapping
{
public QuestEnum QuestType { get; set; }
public string ItemTplId { get; set; }
public Trader Trader { get; set; }
public bool IsMoneyBarter { get; set; }
public int Level { get; set; }
public CurrencyEnum? CurrencyTypeId { get; set; }
public int SubItemCount { get; set; }
}
}

View File

@ -1,6 +1,8 @@
using AssortHelpers.Common.Helpers;
using AssortValidator.Common.Helpers.Models;
using AssortValidator.Common.Models;
using AssortValidator.Models;
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
@ -298,16 +300,17 @@ namespace AssortValidator.Common.Helpers
foreach (var quest in quests)
{
foreach (var assortUnlockReward in quest.rewards.Success.Where(x=>x.type == "AssortmentUnlock"))
foreach (var assortUnlockReward in quest.rewards.Success.Where(x => x.type == "AssortmentUnlock"))
{
results.Add(new QuestAssortUnlock
{
results.Add(new QuestAssortUnlock{
QuestId = quest._id,
QuestName = GetQuestNameById(quest._id),
TraderId = assortUnlockReward.traderId,
TraderType = TraderHelper.GetTraderTypeById(assortUnlockReward.traderId),
AssortId = assortUnlockReward.items[0]._id,
AssortItems = assortUnlockReward.items,
AssortTemplateId = assortUnlockReward.items[0]._tpl,
LoyaltyLevel = assortUnlockReward.loyaltyLevel.GetValueOrDefault(0),
LoyaltyLevel = assortUnlockReward.loyaltyLevel.GetValueOrDefault(1),
QuestState = "success"
});
}
@ -316,17 +319,78 @@ namespace AssortValidator.Common.Helpers
return results;
}
public static QuestAssorts CreateQuestAssortsList(IEnumerable<QuestAssortUnlock> questAssortData)
public static QuestAssorts CreateQuestAssortsList(Trader trader, IEnumerable<QuestAssortUnlock> questAssortData, List<FlatAssort> flatAssorts)
{
var result = new QuestAssorts();
int count = 1;
foreach (var questAssortUnlock in questAssortData)
{
result.success.Add(questAssortUnlock.AssortId, questAssortUnlock.QuestId);
if (questAssortUnlock.QuestId == "5c0bbaa886f7746941031d82")
{
var x = 1;
}
// find assort by item tpl and level
IEnumerable<FlatAssort> associatedAssort = flatAssorts.Where(x => x.ItemId == questAssortUnlock.AssortItems[0]._tpl && x.Level == questAssortUnlock.LoyaltyLevel);
if (associatedAssort is null || !associatedAssort.Any())
{
//throw new System.Exception($"no assort found for quest {questAssortUnlock.QuestName}");
result.success.Add($"MISSING{count}", questAssortUnlock.QuestId);
count++;
continue;
}
// just one item found, woo yeah
if (associatedAssort.Count() == 1)
{
result.success.Add(associatedAssort.Single().AssortId, questAssortUnlock.QuestId);
continue;
}
// multiple found, time to use hand-made data from QuestAssortMappingHelper
if (associatedAssort.Count() > 1)
{
var matchingAssort = GetMatchingAssortUsingManualMapping(trader, associatedAssort, questAssortUnlock);
if (matchingAssort.Count == 1)
{
result.success.Add(associatedAssort.FirstOrDefault().AssortId, questAssortUnlock.QuestId);
continue;
}
if (matchingAssort.Count == 0)
{
result.success.Add($"none found {Guid.NewGuid()}", questAssortUnlock.QuestId);
continue;
}
result.success.Add($"too many {Guid.NewGuid()}", questAssortUnlock.QuestId);
}
}
return result;
}
private static List<FlatAssort> GetMatchingAssortUsingManualMapping(Trader trader, IEnumerable<FlatAssort> possibleAssorts, QuestAssortUnlock questToFindAssortFor)
{
var results = new List<FlatAssort>();
List<QuestAssortMapping> manualAssortMappings = QuestAssortMappingHelper.GetQuestAssortMappingDetails(questToFindAssortFor.QuestId);
var singleMapping = manualAssortMappings.Single(x => x.Trader == trader && x.ItemTplId == questToFindAssortFor.AssortTemplateId && x.Level == questToFindAssortFor.LoyaltyLevel);
results = possibleAssorts.Where(x => x.IsMoney == singleMapping.IsMoneyBarter
&& trader == singleMapping.Trader
&& x.Level == singleMapping.Level
&& x.RawItem._tpl == singleMapping.ItemTplId
).ToList();
if (results.Count > 1)
{
results = results.Where(x => x.SubItems.Count == singleMapping.SubItemCount).ToList();
}
return results;
}
public class QuestAssorts
{
public QuestAssorts()

View File

@ -0,0 +1,545 @@
using AssortValidator.Common.Models;
using System.Collections.Generic;
namespace QuestValidator.Common.Helpers
{
public static class QuestNames
{
private static readonly Dictionary<QuestEnum, string> questLookup = new()
{
{ QuestEnum.Debut, "5936d90786f7742b1420ba5b" },
{ QuestEnum.Checking, "5936da9e86f7742d65037edf"},
{ QuestEnum.ShootoutPicnic, "59674cd986f7744ab26e32f2"},
{ QuestEnum.DeliveryFromThePast, "59674eb386f774539f14813a"},
{ QuestEnum.BadRepEvidence, "5967530a86f77462ba22226b"},
{ QuestEnum.IceCreamCones, "59675d6c86f7740a842fc482"},
{ QuestEnum.PostmanPatP1, "59675ea386f77414b32bded2"},
{ QuestEnum.PostmanPatP2, "596760e186f7741e11214d58"},
{ QuestEnum.ShakingUpTeller, "5967725e86f774601a446662"},
{ QuestEnum.Shortage, "5967733e86f774602332fc84"},
{ QuestEnum.SanitaryStandardsP1, "59689ee586f7740d1570bbd5"},
{ QuestEnum.OperationAquarius, "59689fbd86f7740d137ebfc4"},
{ QuestEnum.OperationAquariusP2, "5968eb3186f7741dde183a4d"},
{ QuestEnum.Painkiller, "5969f90786f77420d2328015"},
{ QuestEnum.Pharmacist, "5969f9e986f7741dde183a50"},
{ QuestEnum.SupplyPlans, "596a0e1686f7741ddf17dbee"},
{ QuestEnum.KindOfSabotage, "596a101f86f7741ddb481582" },
{ QuestEnum.GeneralWares, "596a1e6c86f7741ddc2d3206"},
{ QuestEnum.SanitaryStandardsP2, "596a204686f774576d4c95de"},
{ QuestEnum.CarRepair, "596a218586f77420d232807c"},
{ QuestEnum.Supplier, "596b36c586f77450d6045ad2"},
{ QuestEnum.TheExtortionist, "596b43fb86f77457ca186186"},
{ QuestEnum.Stirrup, "596b455186f77457cb50eccb"},
{ QuestEnum.WhatsOnTheFlashDrive, "5979ed3886f77431307dc512"},
{ QuestEnum.GoldenSwag, "5979eee086f774311955e614"},
{ QuestEnum.PolikhimHobo, "5979f8bb86f7743ec214c7a6"},
{ QuestEnum.ChemicalP1, "5979f9ba86f7740f6c3fe9f2"},
{ QuestEnum.ChemicalP2, "597a0b2986f77426d66c0633"},
{ QuestEnum.ChemicalP3, "597a0e5786f77426d66c0636"},
{ QuestEnum.ChemicalP4, "597a0f5686f774273b74f676"},
{ QuestEnum.OutOfCuriosity, "597a160786f77477531d39d2"},
{ QuestEnum.BigCustomer, "597a171586f77405ba6887d3"},
{ QuestEnum.BPDepot, "59c124d686f774189b3c843f"},
{ QuestEnum.ThePunisherP1, "59c50a9e86f7745fef66f4ff"},
{ QuestEnum.ThePunisherP2, "59c50c8886f7745fed3193bf"},
{ QuestEnum.ThePunisherP3, "59c512ad86f7741f0d09de9b"},
{ QuestEnum.TrustRegain, "59c9392986f7742f6923add2"},
{ QuestEnum.LoyaltyBuyout, "59c93e8e86f7742a406989c4"},
{ QuestEnum.NoOffence, "59ca1a6286f774509a270942"},
{ QuestEnum.ThePunisherP4, "59ca264786f77445a80ed044"},
{ QuestEnum.ThePunisherP5, "59ca29fb86f77445ab465c87"},
{ QuestEnum.ThePunisherP6, "59ca2eb686f77445a80ed049"},
{ QuestEnum.NoQuestNameGiven, "59f9da6786f774714230d751"},
{ QuestEnum.SpaTourP1, "5a03153686f77442d90e2171"},
{ QuestEnum.SpaTourP2, "5a03173786f77451cb427172"},
{ QuestEnum.SpaTourP3, "5a0327ba86f77456b9154236"},
{ QuestEnum.SpaTourP4, "5a03296886f774569778596a"},
{ QuestEnum.SpaTourP5, "5a0449d586f77474e66227b7"},
{ QuestEnum.FishingGear, "5a27b75b86f7742e97191958"},
{ QuestEnum.TigrSafari, "5a27b7a786f774579c3eb376"},
{ QuestEnum.ScrapMetal, "5a27b7d686f77460d847e6a6"},
{ QuestEnum.EagleEye, "5a27b80086f774429a5d7e20"},
{ QuestEnum.HumanitarianSupplies, "5a27b87686f77460de0252a8"},
{ QuestEnum.TheCultP1, "5a27b9de86f77464e5044585"},
{ QuestEnum.TheCultP2, "5a27ba1c86f77461ea5a3c56"},
{ QuestEnum.SpaTourP6, "5a27ba9586f7741b543d8e85"},
{ QuestEnum.SpaTourP7, "5a27bafb86f7741c73584017"},
{ QuestEnum.CargoXP1, "5a27bb1e86f7741f27621b7e"},
{ QuestEnum.CargoXP2, "5a27bb3d86f77411ea361a21"},
{ QuestEnum.CargoXP3, "5a27bb5986f7741dfb660900"},
{ QuestEnum.WetJobP1, "5a27bb8386f7741c770d2d0a"},
{ QuestEnum.WetJobP2, "5a27bbf886f774333a418eeb"},
{ QuestEnum.WetJobP3, "5a27bc1586f7741f6d40fa2f"},
{ QuestEnum.WetJobP4, "5a27bc3686f7741c73584026"},
{ QuestEnum.WetJobP5, "5a27bc6986f7741c7358402b"},
{ QuestEnum.WetJobP6, "5a27bc8586f7741b543d8ea4"},
{ QuestEnum.FriendFromTheWestP1, "5a27c99a86f7747d2c6bdd8e"},
{ QuestEnum.FriendFromTheWestP2, "5a27d2af86f7744e1115b323"},
{ QuestEnum.HippocraticVow, "5a5642ce86f77445c63c3419"},
{ QuestEnum.HealthCarePrivacyP1, "5a68661a86f774500f48afb0"},
{ QuestEnum.HealthCarePrivacyP2, "5a68663e86f774501078f78a"},
{ QuestEnum.HealthCarePrivacyP3, "5a68665c86f774255929b4c7"},
{ QuestEnum.HealthCarePrivacyP4, "5a68667486f7742607157d28"},
{ QuestEnum.HealthCarePrivacyP5, "5a68669a86f774255929b4d4"},
{ QuestEnum.GunsmithP1, "5ac23c6186f7741247042bad"},
{ QuestEnum.GunsmithP2, "5ac2426c86f774138762edfe"},
{ QuestEnum.GunsmithP3, "5ac2428686f77412450b42bf"},
{ QuestEnum.GunsmithP5, "5ac242ab86f77412464f68b4"},
{ QuestEnum.GunsmithP6, "5ac244c486f77413e12cf945"},
{ QuestEnum.GunsmithP4, "5ac244eb86f7741356335af1"},
{ QuestEnum.FarmingP1, "5ac345dc86f774288030817f"},
{ QuestEnum.FarmingP2, "5ac3460c86f7742880308185"},
{ QuestEnum.FarmingP3, "5ac3462b86f7741d6118b983"},
{ QuestEnum.FarmingP4, "5ac3464c86f7741d651d6877"},
{ QuestEnum.SignalP1, "5ac3467986f7741d6224abc2"},
{ QuestEnum.SignalP2, "5ac346a886f7744e1b083d67"},
{ QuestEnum.SignalP3, "5ac346cf86f7741d63233a02"},
{ QuestEnum.SignalP4, "5ac346e886f7741d6118b99b"},
{ QuestEnum.BadHabit, "5ac3475486f7741d6224abd3"},
{ QuestEnum.Scout, "5ac3477486f7741d651d6885"},
{ QuestEnum.Insider, "5ac3479086f7742880308199"},
{ QuestEnum.GunsmithP7, "5ae3267986f7742a413592fe"},
{ QuestEnum.GunsmithP8, "5ae3270f86f77445ba41d4dd"},
{ QuestEnum.GunsmithP9, "5ae3277186f7745973054106"},
{ QuestEnum.GunsmithP10, "5ae327c886f7745c7b3f2f3f"},
{ QuestEnum.GunsmithP11, "5ae3280386f7742a41359364"},
{ QuestEnum.OnlyBusiness, "5ae448a386f7744d3730fff0"},
{ QuestEnum.MakeUltraGreatAgain, "5ae448bf86f7744d733e55ee"},
{ QuestEnum.BigSale, "5ae448e586f7744dcf0c2a67"},
{ QuestEnum.TheBloodOfWar, "5ae448f286f77448d73c0131"},
{ QuestEnum.DressedToKill, "5ae4490786f7744ca822adcc"},
{ QuestEnum.DatabaseP1, "5ae4493486f7744efa289417"},
{ QuestEnum.DatabaseP2, "5ae4493d86f7744b8e15aa8f"},
{ QuestEnum.SewItGoodP1, "5ae4495086f77443c122bc40"},
{ QuestEnum.SewItGoodP2, "5ae4495c86f7744e87761355"},
{ QuestEnum.SewItGoodP3, "5ae4496986f774459e77beb6"},
{ QuestEnum.SewItGoodP4, "5ae4497b86f7744cf402ed00"},
{ QuestEnum.TheKeyToSuccess, "5ae4498786f7744bde357695"},
{ QuestEnum.CharismaBringsSuccess, "5ae4499a86f77449783815db"},
{ QuestEnum.NoFussNeeded, "5ae449a586f7744bde357696"},
{ QuestEnum.Gratitude, "5ae449b386f77446d8741719"},
{ QuestEnum.SalesNight, "5ae449c386f7744bde357697"},
{ QuestEnum.Supervisor, "5ae449d986f774453a54a7e1"},
{ QuestEnum.GunsmithP12, "5b47749f86f7746c5d6a5fd4"},
{ QuestEnum.GunsmithP13, "5b47799d86f7746c5d6a5fd8"},
{ QuestEnum.GunsmithP14, "5b477b6f86f7747290681823"},
{ QuestEnum.GunsmithP15, "5b477f7686f7744d1b23c4d2"},
{ QuestEnum.GunsmithP16, "5b47825886f77468074618d3"},
{ QuestEnum.TheBloodOfWarP2, "5b47876e86f7744d1c353205"},
{ QuestEnum.LivingHighIsNotACrime, "5b47891f86f7744d1b23c571"},
{ QuestEnum.HotDelivery, "5b478b1886f7744d1b23c57d"},
{ QuestEnum.Minibus, "5b478d0f86f7744d190d91b5"},
{ QuestEnum.VitaminsP1, "5b478eca86f7744642012254"},
{ QuestEnum.VitaminsP2, "5b478ff486f7744d184ecbbf"},
{ QuestEnum.InformedMeansArmed, "5b47926a86f7747ccc057c15"},
{ QuestEnum.LendLeaseP1, "5b4794cb86f774598100d5d4"},
{ QuestEnum.Chumming, "5b4795fb86f7745876267770"},
{ QuestEnum.TheTarkovShooterP1, "5bc4776586f774512d07cf05"},
{ QuestEnum.TheTarkovShooterP2, "5bc479e586f7747f376c7da3"},
{ QuestEnum.TheTarkovShooterP3, "5bc47dbf86f7741ee74e93b9"},
{ QuestEnum.TheTarkovShooterP4, "5bc480a686f7741af0342e29"},
{ QuestEnum.TheTarkovShooterP5, "5bc4826c86f774106d22d88b"},
{ QuestEnum.TheTarkovShooterP6, "5bc4836986f7740c0152911c"},
{ QuestEnum.TheTarkovShooterP7, "5bc4856986f77454c317bea7"},
{ QuestEnum.TheTarkovShooterP8, "5bc4893c86f774626f5ebf3e"},
{ QuestEnum.Bullshit, "5c0bbaa886f7746941031d82"},
{ QuestEnum.SilentCaliber, "5c0bc91486f7746ab41857a2"},
{ QuestEnum.Insomnia, "5c0bd01e86f7747cdd799e56"},
{ QuestEnum.TestDriveP1, "5c0bd94186f7747a727f09b2"},
{ QuestEnum.Flint, "5c0bdb5286f774166e38eed4"},
{ QuestEnum.AShooterBornInHeaven, "5c0bde0986f77479cf22c2f8"},
{ QuestEnum.PsychoSniper, "5c0be13186f7746f016734aa"},
{ QuestEnum.PrivateClinic, "5c0be5fc86f774467a116593"},
{ QuestEnum.Athlete, "5c0d0d5086f774363760aef2"},
{ QuestEnum.LendLeaseP2, "5c0d0f1886f77457b8210226"},
{ QuestEnum.Grenadier, "5c0d190cd09282029f5390d8"},
{ QuestEnum.DecontaminationService, "5c0d1c4cd0928202a02a6f5c"},
{ QuestEnum.PeacekeepingMission, "5c0d4c12d09282029f539173"},
{ QuestEnum.TheGuide, "5c0d4e61d09282029f53920e"},
{ QuestEnum.TheBloodOfWarP3, "5c10f94386f774227172c572"},
{ QuestEnum.Fertilizers, "5c1128e386f7746565181106"},
{ QuestEnum.Scavenger, "5c112d7e86f7740d6f647486"},
{ QuestEnum.LivingHighIsNotACrimeP2, "5c1141f386f77430ff393792"},
{ QuestEnum.Setup, "5c1234c286f77406fa13baeb"},
{ QuestEnum.PerfectMediator, "5c12452c86f7744b83469073"},
{ QuestEnum.Import, "5c139eb686f7747878361a6f"},
{ QuestEnum.Collector, "5c51aac186f77432ea65c552"},
{ QuestEnum.Introduction, "5d2495a886f77425cd51e403"},
{ QuestEnum.Acquaintance, "5d24b81486f77439c92d6ba8"},
{ QuestEnum.TheSurvivalistPathUnprotectedButDangerous, "5d25aed386f77442734d25d2"},
{ QuestEnum.TheSurvivalistPathThrifty, "5d25b6be86f77444001e1b89"},
{ QuestEnum.TheSurvivalistPathZhivchik, "5d25bfd086f77442734d3007"},
{ QuestEnum.TheSurvivalistPathWoundedBeast, "5d25c81b86f77443e625dd71"},
{ QuestEnum.TheSurvivalistPathToughGuy, "5d25cf2686f77443e75488d4"},
{ QuestEnum.TheSurvivalistPathColdBlooded, "5d25d2c186f77443e35162e5"},
{ QuestEnum.TheSurvivalistPathZatoichi, "5d25dae186f77443e55d2f78"},
{ QuestEnum.TheSurvivalistPathEagleOwl, "5d25e29d86f7740a22516326"},
{ QuestEnum.TheSurvivalistPathCombatMedic, "5d25e2a986f77409dd5cdf2a"},
{ QuestEnum.TheSurvivalistPathJunkie, "5eaaaa7c93afa0558f3b5a1c"},
{ QuestEnum.HuntsmanPathSecuredPerimeter, "5d25e2b486f77409de05bba0"},
{ QuestEnum.HuntsmanPathTheTrophy, "5d25e2c386f77443e7549029"},
{ QuestEnum.HuntsmanPathWoodsCleaning, "5d25e2cc86f77443e47ae019"},
{ QuestEnum.HuntsmanPathController, "5d25e2d886f77442734d335e"},
{ QuestEnum.HuntsmanPathSellOut, "5d25e2e286f77444001e2e48"},
{ QuestEnum.HuntsmanPathWoodsKeeper, "5d25e2ee86f77443e35162ea"},
{ QuestEnum.HuntsmanPathJustice, "5d25e43786f7740a212217fa"},
{ QuestEnum.HuntsmanPathEvilWatchman, "5d25e44386f77409453bce7b"},
{ QuestEnum.HuntsmanPathFactoryChief, "60c0c018f7afb4354815096a"},
{ QuestEnum.HuntsmanPathEraser, "5d25e44f86f77443e625e385"},
{ QuestEnum.HuntsmanPathEraserP2, "5d25e45e86f77408251c4bfa"},
{ QuestEnum.Ambulance, "5d25e46e86f77409453bce7c"},
{ QuestEnum.CourtesyVisit, "5d25e48186f77443e625e386"},
{ QuestEnum.ShadyBusiness, "5d25e48d86f77408251c4bfb"},
{ QuestEnum.Nostalgia, "5d25e4ad86f77443e625e387"},
{ QuestEnum.FishingPlace, "5d25e4b786f77408251c4bfc"},
{ QuestEnum.HuntingTrip, "5d25e4ca86f77409dd5cdf2c"},
{ QuestEnum.Reserv, "5d25e4d586f77443e625e388"},
{ QuestEnum.RegulatedMaterials, "5d4bec3486f7743cac246665"},
{ QuestEnum.AnAppleADayKeepsTheDoctorAway, "5d6fb2c086f77449da599c24"},
{ QuestEnum.Mentor, "5d6fbc2886f77449d825f9d3"},
{ QuestEnum.TheStylishOne, "5dc53acb86f77469c740c893"},
{ QuestEnum.TextileP1Usec, "5e381b0286f77420e3417a74"},
{ QuestEnum.TextileP2Usec, "5e4d4ac186f774264f758336"},
{ QuestEnum.TextileP1Bear, "5e383a6386f77465910ce1f3"},
{ QuestEnum.TextileP2Bear, "5e4d515e86f77438b2195244"},
{ QuestEnum.BunkerP1, "5ede55112c95834b583f052a"},
{ QuestEnum.BunkerP2, "5ede567cfa6dc072ce15d6e3"},
{ QuestEnum.Anesthesia, "5eda19f0edce541157209cee"},
{ QuestEnum.HuntsmanPathSadist, "5edab4b1218d181e29451435"},
{ QuestEnum.ColleaguesP1, "5edab736cc183c769d778bc2"},
{ QuestEnum.ColleaguesP2, "5edaba7c0c502106f869bc02"},
{ QuestEnum.ColleaguesP3, "5edac34d0bb72a50635c2bfa"},
{ QuestEnum.RiggedGame, "5edabd13218d181e29451442"},
{ QuestEnum.Samples, "5edac020218d181e29451446"},
{ QuestEnum.TerraGroupEmployee, "5edac63b930f5454f51e128b"},
{ QuestEnum.TheChemistryCloset, "5f04886a3937dc337a6b8238"},
{ QuestEnum.SearchMission, "5fd9fad9c1ce6b1a3b486d00"},
{ QuestEnum.Hunter, "600302d73b897b11364cd161"},
{ QuestEnum.Revision, "6086c852c945025d41566124"},
{ QuestEnum.PestControl, "608a768d82e40b3c727fd17d"},
{ QuestEnum.BackDoor, "6089736efa70fc097863b8f6"},
{ QuestEnum.SafeCorridor, "6089743983426423753cd58a"},
{ QuestEnum.InventoryCheck, "608974af4b05530f55550c21"},
{ QuestEnum.FuelMatter, "608974d01a66564e74191fc0"},
{ QuestEnum.NoPlaceForRenegades, "60896bca6ee58f38c417d4f2"},
{ QuestEnum.DiseaseHistory, "60896e28e4a85c72ef3fa301"},
{ QuestEnum.Documents, "60896b7bfa70fc097863b8f5"},
{ QuestEnum.SurplusGoods, "6089732b59b92115597ad789"},
{ QuestEnum.ExperienceExchange, "60896888e4a85c72ef3fa300"},
{ QuestEnum.LongLine, "60e71dc0a94be721b065bbfc" },
{ QuestEnum.Booze, "60e71dc67fcf9c556f325056" },
{ QuestEnum.HuntsmanPathRelentless, "60e71e8ed54b755a3b53eb67" },
{ QuestEnum.SwiftOne, "60e729cf5698ee7b05057439"},
{ QuestEnum.TheChoice, "60effd818b669d08a35bfad5" },
{ QuestEnum.NightSweep, "60e71c11d54b755a3b53eb65" },
{ QuestEnum.Intimidator, "60e71bb4e456d449cd47ca75"},
{ QuestEnum.Crisis, "60e71c48c1bfa3050473b8e5"},
{ QuestEnum.CapturingOutposts, "60e71b9bbd90872cb85440f3"},
{ QuestEnum.Escort, "60e71b62a0beca400d69efc4"},
{ QuestEnum.Calibration, "60e71d23c1bfa3050473b8e6"},
{ QuestEnum.MutualInterest, "60e71c9ad54b755a3b53eb66"},
{ QuestEnum.EasyJobPart1, "6179ac7511973d018217d0b9" },
{ QuestEnum.EasyJobPart2, "6179acbdc760af5ad2053585" },
{ QuestEnum.EnergyCrisis, "6179b3a12153c15e937d52bc" },
{ QuestEnum.CommunicationDifficulties, "6179ad74bca27a099552e03a" },
{ QuestEnum.Overpopulation, "6179aff8f57fb279792c60a1" },
{ QuestEnum.SeasideVacation, "6179ad56c760af5ad2053587" },
{ QuestEnum.CorporateSecrets, "6179b3bdc7560e13d23eeb8d" },
{ QuestEnum.Counteraction, "6179b5eabca27a099552e052" },
{ QuestEnum.HuntsmanPathOutcasts, "6179ad0a6e9dd54ac275e3f2" },
{ QuestEnum.MissingCargo, "6179b4f16e9dd54ac275e407" },
{ QuestEnum.RevisionPart2, "6179b4d1bca27a099552e04e" },
{ QuestEnum.OurOwnLand, "6179b5b06e9dd54ac275e409" },
{ QuestEnum.TheHermit, "61904daa7d0d857927447b9c" },
{ QuestEnum.LongRoad, "6193850f60b34236ee0483de" },
{ QuestEnum.CargoXP4, "61958c366726521dd96828ec" },
{ QuestEnum.LostContact, "6179afd0bca27a099552e040"},
{ QuestEnum.ActionTest, "613708a7f8333a5d15594368"}
};
private static readonly Dictionary<string, string> questNames = new Dictionary<string, string>
{
{ "5936d90786f7742b1420ba5b", "Debut" },
{ "5936da9e86f7742d65037edf", "Checking"},
{ "59674cd986f7744ab26e32f2", "Shootout picnic"},
{ "59674eb386f774539f14813a", "Delivery from the past"},
{ "5967530a86f77462ba22226b", "Bad rep evidence"},
{ "59675d6c86f7740a842fc482", "Ice cream cones"},
{ "59675ea386f77414b32bded2", "Postman Pat Part 1"},
{ "596760e186f7741e11214d58", "Postman Pat Part 2"},
{ "5967725e86f774601a446662", "Shaking up teller"},
{ "5967733e86f774602332fc84", "Shortage"},
{ "59689ee586f7740d1570bbd5", "Sanitary Standards Part 1"},
{ "59689fbd86f7740d137ebfc4", "Operation Aquarius Part 1"},
{ "5968eb3186f7741dde183a4d", "Operation Aquarius Part 2"},
{ "5969f90786f77420d2328015", "Painkiller"},
{ "5969f9e986f7741dde183a50", "Pharmacist"},
{ "596a0e1686f7741ddf17dbee", "Supply plans"},
{ "596a101f86f7741ddb481582", "Kind of sabotage" },
{ "596a1e6c86f7741ddc2d3206", "General wares"},
{ "596a204686f774576d4c95de", "Sanitary Standards Part 2"},
{ "596a218586f77420d232807c", "Car repair"},
{ "596b36c586f77450d6045ad2", "Supplier"},
{ "596b43fb86f77457ca186186", "The Extortionist"},
{ "596b455186f77457cb50eccb", "Stirrup"},
{ "5979ed3886f77431307dc512", "Whats on the flash drive?"},
{ "5979eee086f774311955e614", "Golden swag"},
{ "5979f8bb86f7743ec214c7a6", "Polikhim hobo"},
{ "5979f9ba86f7740f6c3fe9f2", "Chemical Part 1"},
{ "597a0b2986f77426d66c0633", "Chemical Part 2"},
{ "597a0e5786f77426d66c0636", "Chemical Part 3"},
{ "597a0f5686f774273b74f676", "Chemical Part 4"},
{ "597a160786f77477531d39d2", "Out of curiosity"},
{ "597a171586f77405ba6887d3", "Big customer"},
{ "59c124d686f774189b3c843f", "BP depot"},
{ "59c50a9e86f7745fef66f4ff", "The Punisher Part 1"},
{ "59c50c8886f7745fed3193bf", "The Punisher Part 2"},
{ "59c512ad86f7741f0d09de9b", "The Punisher Part 3"},
{ "59c9392986f7742f6923add2", "Trust regain"},
{ "59c93e8e86f7742a406989c4", "Loyalty buyout"},
{ "59ca1a6286f774509a270942", "No offence"},
{ "59ca264786f77445a80ed044", "The Punisher Part 4"},
{ "59ca29fb86f77445ab465c87", "The Punisher Part 5"},
{ "59ca2eb686f77445a80ed049", "The Punisher Part 6"},
{ "59f9da6786f774714230d751", "No idea"},
{ "5a03153686f77442d90e2171", "Spa Tour Part 1"},
{ "5a03173786f77451cb427172", "Spa Tour Part 2"},
{ "5a0327ba86f77456b9154236", "Spa Tour Part 3"},
{ "5a03296886f774569778596a", "Spa Tour Part 4"},
{ "5a0449d586f77474e66227b7", "Spa Tour Part 5"},
{ "5a27b75b86f7742e97191958", "Fishing Gear"},
{ "5a27b7a786f774579c3eb376", "Tigr Safari"},
{ "5a27b7d686f77460d847e6a6", "Scrap Metal"},
{ "5a27b80086f774429a5d7e20", "Eagle Eye"},
{ "5a27b87686f77460de0252a8", "Humanitarian Supplies"},
{ "5a27b9de86f77464e5044585", "The Cult Part 1"},
{ "5a27ba1c86f77461ea5a3c56", "The Cult Part 2"},
{ "5a27ba9586f7741b543d8e85", "Spa Tour Part 6"},
{ "5a27bafb86f7741c73584017", "Spa Tour Part 7"},
{ "5a27bb1e86f7741f27621b7e", "Cargo X Part 1"},
{ "5a27bb3d86f77411ea361a21", "Cargo X Part 2"},
{ "5a27bb5986f7741dfb660900", "Cargo X Part 3"},
{ "5a27bb8386f7741c770d2d0a", "Wet Job Part 1"},
{ "5a27bbf886f774333a418eeb", "Wet Job Part 2"},
{ "5a27bc1586f7741f6d40fa2f", "Wet Job Part 3"},
{ "5a27bc3686f7741c73584026", "Wet Job Part 4"},
{ "5a27bc6986f7741c7358402b", "Wet Job Part 5"},
{ "5a27bc8586f7741b543d8ea4", "Wet Job Part 6"},
{ "5a27c99a86f7747d2c6bdd8e", "Friend from the West Part 1"},
{ "5a27d2af86f7744e1115b323", "Friend from the West Part 2"},
{ "5a5642ce86f77445c63c3419", "Hippocratic Vow"},
{ "5a68661a86f774500f48afb0", "Health Care Privacy Part 1"},
{ "5a68663e86f774501078f78a", "Health Care Privacy Part 2"},
{ "5a68665c86f774255929b4c7", "Health Care Privacy Part 3"},
{ "5a68667486f7742607157d28", "Health Care Privacy Part 4"},
{ "5a68669a86f774255929b4d4", "Health Care Privacy Part 5"},
{ "5ac23c6186f7741247042bad", "Gunsmith Part 1"},
{ "5ac2426c86f774138762edfe", "Gunsmith Part 2"},
{ "5ac2428686f77412450b42bf", "Gunsmith Part 3"},
{ "5ac242ab86f77412464f68b4", "Gunsmith Part 5"},
{ "5ac244c486f77413e12cf945", "Gunsmith Part 6"},
{ "5ac244eb86f7741356335af1", "Gunsmith Part 4"},
{ "5ac345dc86f774288030817f", "Farming Part 1"},
{ "5ac3460c86f7742880308185", "Farming Part 2"},
{ "5ac3462b86f7741d6118b983", "Farming Part 3"},
{ "5ac3464c86f7741d651d6877", "Farming Part 4"},
{ "5ac3467986f7741d6224abc2", "Signal Part 1"},
{ "5ac346a886f7744e1b083d67", "Signal Part 2"},
{ "5ac346cf86f7741d63233a02", "Signal Part 3"},
{ "5ac346e886f7741d6118b99b", "Signal Part 4"},
{ "5ac3475486f7741d6224abd3", "Bad habit"},
{ "5ac3477486f7741d651d6885", "Scout"},
{ "5ac3479086f7742880308199", "Insider"},
{ "5ae3267986f7742a413592fe", "Gunsmith Part 7"},
{ "5ae3270f86f77445ba41d4dd", "Gunsmith Part 8"},
{ "5ae3277186f7745973054106", "Gunsmith Part 9"},
{ "5ae327c886f7745c7b3f2f3f", "Gunsmith Part 10"},
{ "5ae3280386f7742a41359364", "Gunsmith Part 11"},
{ "5ae448a386f7744d3730fff0", "Only business"},
{ "5ae448bf86f7744d733e55ee", "Make ULTRA Great Again"},
{ "5ae448e586f7744dcf0c2a67", "Big sale" },
{ "5ae448f286f77448d73c0131", "The Blood of War" },
{ "5ae4490786f7744ca822adcc", "Dressed to kill" },
{ "5ae4493486f7744efa289417", "Database Part 1" },
{ "5ae4493d86f7744b8e15aa8f", "Database Part 2" },
{ "5ae4495086f77443c122bc40", "Sew it good Part 1"},
{ "5ae4495c86f7744e87761355", "Sew it good Part 2"},
{ "5ae4496986f774459e77beb6", "Sew it good Part 3"},
{ "5ae4497b86f7744cf402ed00", "Sew it good Part 4"},
{ "5ae4498786f7744bde357695", "The key to success"},
{ "5ae4499a86f77449783815db", "Charisma brings success" },
{ "5ae449a586f7744bde357696", "No fuss needed" },
{ "5ae449b386f77446d8741719", "Gratitude" },
{ "5ae449c386f7744bde357697", "Sales Night" },
{ "5ae449d986f774453a54a7e1", "Supervisor" },
{ "5b47749f86f7746c5d6a5fd4", "Gunsmith Part 12" },
{ "5b47799d86f7746c5d6a5fd8", "Gunsmith Part 13" },
{ "5b477b6f86f7747290681823", "Gunsmith Part 14" },
{ "5b477f7686f7744d1b23c4d2", "Gunsmith Part 15" },
{ "5b47825886f77468074618d3", "Gunsmith Part 16" },
{ "5b47876e86f7744d1c353205", "The Blood of War Part 2" },
{ "5b47891f86f7744d1b23c571", "Living high is not a crime" },
{ "5b478b1886f7744d1b23c57d", "Hot delivery"},
{ "5b478d0f86f7744d190d91b5", "Minibus"},
{ "5b478eca86f7744642012254", "Vitamins Part 1"},
{ "5b478ff486f7744d184ecbbf", "Vitamins Part 2"},
{ "5b47926a86f7747ccc057c15", "Informed means armed"},
{ "5b4794cb86f774598100d5d4", "Lend lease pt 1"},
{ "5b4795fb86f7745876267770", "Chumming"},
{ "5bc4776586f774512d07cf05", "The Tarkov shooter Part 1"},
{ "5bc479e586f7747f376c7da3", "The Tarkov shooter Part 2"},
{ "5bc47dbf86f7741ee74e93b9", "The Tarkov shooter Part 3"},
{ "5bc480a686f7741af0342e29", "The Tarkov shooter Part 4"},
{ "5bc4826c86f774106d22d88b", "The Tarkov shooter Part 5"},
{ "5bc4836986f7740c0152911c", "The Tarkov shooter Part 6"},
{ "5bc4856986f77454c317bea7", "The Tarkov shooter Part 7"},
{ "5bc4893c86f774626f5ebf3e", "The Tarkov shooter Part 8"},
{ "5c0bbaa886f7746941031d82", "Bullshit" },
{ "5c0bc91486f7746ab41857a2", "Silent caliber" },
{ "5c0bd01e86f7747cdd799e56", "Insomnia" },
{ "5c0bd94186f7747a727f09b2", "Test drive Part 1" },
{ "5c0bdb5286f774166e38eed4", "Flint" },
{ "5c0bde0986f77479cf22c2f8", "A Shooter Born in Heaven" },
{ "5c0be13186f7746f016734aa", "Psycho Sniper" },
{ "5c0be5fc86f774467a116593", "Private clinic" },
{ "5c0d0d5086f774363760aef2", "Athlete" },
{ "5c0d0f1886f77457b8210226", "Lend lease Part 2" },
{ "5c0d190cd09282029f5390d8", "Grenadier" },
{ "5c0d1c4cd0928202a02a6f5c", "Decontamination service" },
{ "5c0d4c12d09282029f539173", "Peacekeeping mission" },
{ "5c0d4e61d09282029f53920e", "The guide" },
{ "5c10f94386f774227172c572", "The Blood of War Part 3" },
{ "5c1128e386f7746565181106", "Fertilizers" },
{ "5c112d7e86f7740d6f647486", "Scavenger" },
{ "5c1141f386f77430ff393792", "Living high is not a crime Part 2"},
{ "5c1234c286f77406fa13baeb", "Setup" },
{ "5c12452c86f7744b83469073", "Perfect mediator" },
{ "5c139eb686f7747878361a6f", "Import" },
{ "5c51aac186f77432ea65c552", "Collector" },
{ "5d2495a886f77425cd51e403", "Introduction" },
{ "5d24b81486f77439c92d6ba8", "Acquaintance" },
{ "5d25aed386f77442734d25d2", "The survivalist path Unprotected but dangerous"},
{ "5d25b6be86f77444001e1b89", "The survivalist path Thrifty" },
{ "5d25bfd086f77442734d3007", "The survivalist path Zhivchik" },
{ "5d25c81b86f77443e625dd71", "The survivalist path Wounded beast" },
{ "5d25cf2686f77443e75488d4", "The survivalist path Tough guy" },
{ "5d25d2c186f77443e35162e5", "The survivalist path Cold blooded" },
{ "5d25dae186f77443e55d2f78", "The survivalist path Zatoichi" },
{ "5d25e29d86f7740a22516326", "The survivalist path Eagle-owl" },
{ "5d25e2a986f77409dd5cdf2a", "The survivalist path Combat medic" },
{ "5eaaaa7c93afa0558f3b5a1c", "The survivalist path Junkie" },
{ "5d25e2b486f77409de05bba0", "Huntsman path Secured perimeter" },
{ "5d25e2c386f77443e7549029", "Huntsman path The trophy" },
{ "5d25e2cc86f77443e47ae019", "Huntsman path Woods cleaning" },
{ "5d25e2d886f77442734d335e", "Huntsman path Controller" },
{ "5d25e2e286f77444001e2e48", "Huntsman path Sell-out" },
{ "5d25e2ee86f77443e35162ea", "Huntsman path Woods keeper" },
{ "5d25e43786f7740a212217fa", "Huntsman path Justice" },
{ "5d25e44386f77409453bce7b", "Huntsman path Evil watchman" },
{ "60c0c018f7afb4354815096a", "Huntsman Path- Factory Chief"},
{ "5d25e44f86f77443e625e385", "Huntsman path Eraser Part 1"},
{ "5d25e45e86f77408251c4bfa", "Huntsman path Eraser Part 2"},
{ "5edab4b1218d181e29451435", "Huntsman path Sadist"},
{ "60e71e8ed54b755a3b53eb67", "Huntsman Path - Relentless" },
{ "5d25e46e86f77409453bce7c", "Ambulance"},
{ "5d25e48186f77443e625e386", "Courtesy visit"},
{ "5d25e48d86f77408251c4bfb", "Shady business" },
{ "5d25e4ad86f77443e625e387", "Nostalgia" },
{ "5d25e4b786f77408251c4bfc", "Fishing place" },
{ "5d25e4ca86f77409dd5cdf2c", "Hunting trip" },
{ "5d25e4d586f77443e625e388", "Reserv" },
{ "5d4bec3486f7743cac246665", "Regulated materials"},
{ "5d6fb2c086f77449da599c24", "An apple a day - keeps the doctor away"},
{ "5d6fbc2886f77449d825f9d3", "Mentor"},
{ "5dc53acb86f77469c740c893", "The stylish one"},
{ "5e381b0286f77420e3417a74", "Textile Part 1 - Usec"},
{ "5e4d4ac186f774264f758336", "Textile Part 2 - Usec"},
{ "5e383a6386f77465910ce1f3", "Textile Part 1 - Bear"},
{ "5e4d515e86f77438b2195244", "Textile Part 2 - Bear"},
{ "5ede55112c95834b583f052a", "Bunker Part 1"},
{ "5ede567cfa6dc072ce15d6e3", "Bunker Part 2"},
{ "5eda19f0edce541157209cee", "Anesthesia"},
{ "5edab736cc183c769d778bc2", "Colleagues Part 1"},
{ "5edaba7c0c502106f869bc02", "Colleagues Part 2"},
{ "5edac34d0bb72a50635c2bfa", "Colleagues Part 3"},
{ "5edabd13218d181e29451442", "Rigged game"},
{ "5edac020218d181e29451446", "Samples"},
{ "5edac63b930f5454f51e128b", "TerraGroup employee"},
{ "5f04886a3937dc337a6b8238", "The chemistry closet"},
{ "5fd9fad9c1ce6b1a3b486d00", "Search Mission"},
{ "600302d73b897b11364cd161", "Hunter"},
{ "6086c852c945025d41566124", "Revision"},
{ "608a768d82e40b3c727fd17d", "Pest control"},
{ "6089736efa70fc097863b8f6", "Back door"},
{ "6089743983426423753cd58a", "Safe corridor"},
{ "608974af4b05530f55550c21", "Inventory check"},
{ "608974d01a66564e74191fc0", "Fuel matter"},
{ "60896bca6ee58f38c417d4f2", "No place for renegades"},
{ "60896e28e4a85c72ef3fa301", "Disease history"},
{ "60896b7bfa70fc097863b8f5", "Documents"},
{ "6089732b59b92115597ad789", "Surplus goods"},
{ "60896888e4a85c72ef3fa300", "Experience exchange"},
{ "60e71dc0a94be721b065bbfc", "Long Line" },
{ "60e71dc67fcf9c556f325056", "Booze" },
{ "60e729cf5698ee7b05057439", "Swift One" },
{ "60effd818b669d08a35bfad5", "The Choice" },
{ "60e71c11d54b755a3b53eb65", "Night Sweep" },
{ "60e71bb4e456d449cd47ca75", "Intimidator"},
{ "60e71c48c1bfa3050473b8e5", "Crisis"},
{ "60e71b9bbd90872cb85440f3", "Capturing Outposts"},
{ "60e71b62a0beca400d69efc4", "Escort"},
{ "60e71d23c1bfa3050473b8e6", "Calibration"},
{ "60e71c9ad54b755a3b53eb66", "Mutual Interest"},
{ "6179ac7511973d018217d0b9", "Easy Job Part 1" },
{ "6179acbdc760af5ad2053585", "Easy Job Part 2" },
{ "6179b3a12153c15e937d52bc", "Energy Crisis" },
{ "6179ad74bca27a099552e03a", "Communication Difficulties" },
{ "6179aff8f57fb279792c60a1", "Overpopulation" },
{ "6179ad56c760af5ad2053587", "Seaside Vacation" },
{ "6179b3bdc7560e13d23eeb8d", "Corporate Secrets" },
{ "6179b5eabca27a099552e052", "Counteraction" },
{ "6179ad0a6e9dd54ac275e3f2", "Huntsman Path Outcasts" },
{ "6179b4f16e9dd54ac275e407", "MissingCargo" },
{ "6179b4d1bca27a099552e04e", "Revision Part 2" },
{ "6179b5b06e9dd54ac275e409", "Our Own Land" },
{ "61904daa7d0d857927447b9c", "The Hermit" },
{ "6193850f60b34236ee0483de", "Long Road" },
{ "61958c366726521dd96828ec", "Cargo X Part 4" },
{ "6179afd0bca27a099552e040", "Lost Contact"},
{ "613708a7f8333a5d15594368", "Action Test"}
};
public static string GetNameById(string id)
{
if (!questNames.ContainsKey(id))
{
return "Unknown quest";
}
return questNames[id];
}
internal static string GetIdByEnum(QuestEnum quest)
{
return questLookup[quest];
}
internal static string GetNameByEnum(QuestEnum quest)
{
var id = GetIdByEnum(quest);
return questNames[id];
}
internal static QuestEnum GetEnumById(string questId)
{
foreach (var quest in questLookup)
{
if (quest.Value == questId)
{
return quest.Key;
}
}
return QuestEnum.NOQUESTFOUND;
}
}
}

View File

@ -0,0 +1,9 @@
namespace AssortValidator.Common.Models
{
public enum CurrencyEnum
{
Rouble = 1,
Euro = 2,
USD = 3,
}
}

View File

@ -0,0 +1,23 @@
using System.Collections.Generic;
namespace AssortValidator.Common.Models
{
public class FlatAssort
{
public FlatAssort()
{
SubItems = new List<Assort.Item>();
BarterDetails = new List<Assort.BarterDetails>();
}
public string AssortId { get; set; }
public string ItemId { get; set; }
public string ItemName { get; set; }
public List<Assort.Item> SubItems { get; set; }
public Assort.Item RawItem { get; set; }
public int Level { get; set; }
public bool IsMoney { get; set; }
public List<Assort.BarterDetails> BarterDetails { get; set; }
}
}

View File

@ -1,4 +1,6 @@
using AssortValidator.Common.Models;
using AssortValidator.Models;
using System.Collections.Generic;
namespace AssortValidator.Common.Helpers.Models
{
@ -8,7 +10,7 @@ namespace AssortValidator.Common.Helpers.Models
public string QuestName { get; set; }
public string TraderId { get; set; }
public Trader TraderType { get; set; }
public string AssortId { get; set; }
public List<QuestRewardItem> AssortItems { get; set; }
public string AssortTemplateId { get; set; }
public int LoyaltyLevel { get; set; }
public string QuestState { get; internal set; }

View File

@ -0,0 +1,255 @@
namespace AssortValidator.Common.Models
{
public enum QuestEnum
{
NOQUESTFOUND = 0,
Debut = 1,
Checking = 2,
ShootoutPicnic = 3,
DeliveryFromThePast = 4,
BadRepEvidence = 5,
IceCreamCones = 6,
PostmanPatP1 = 7,
PostmanPatP2 = 8,
ShakingUpTeller = 9,
Shortage = 10,
SanitaryStandardsP1 = 11,
OperationAquarius = 12,
OperationAquariusP2 = 13,
Painkiller = 14,
Pharmacist = 15,
SupplyPlans = 16,
KindOfSabotage = 17,
GeneralWares = 18,
SanitaryStandardsP2 = 19,
CarRepair = 20,
Supplier = 21,
TheExtortionist = 22,
Stirrup = 23,
WhatsOnTheFlashDrive = 24,
GoldenSwag = 25,
PolikhimHobo = 26,
ChemicalP1 = 27,
ChemicalP2 = 28,
ChemicalP3 = 29,
ChemicalP4 = 30,
OutOfCuriosity = 31,
BigCustomer = 32,
BPDepot = 33,
ThePunisherP1 = 34,
ThePunisherP2 = 35,
ThePunisherP3 = 36,
TrustRegain = 37,
LoyaltyBuyout = 38,
NoOffence = 39,
ThePunisherP4 = 40,
ThePunisherP5 = 41,
ThePunisherP6 = 42,
NoQuestNameGiven = 43,
SpaTourP1 = 44,
SpaTourP2 = 45,
SpaTourP3 = 46,
SpaTourP4 = 47,
SpaTourP5 = 48,
FishingGear = 49,
TigrSafari = 50,
ScrapMetal = 51,
EagleEye = 52,
HumanitarianSupplies = 53,
TheCultP1 = 54,
TheCultP2 = 55,
SpaTourP6 = 56,
SpaTourP7 = 57,
CargoXP1 = 58,
CargoXP2 = 59,
CargoXP3 = 60,
WetJobP1 = 61,
WetJobP2 = 62,
WetJobP3 = 63,
WetJobP4 = 64,
WetJobP5 = 65,
WetJobP6 = 66,
FriendFromTheWestP1 = 67,
FriendFromTheWestP2 = 68,
HippocraticVow = 69,
HealthCarePrivacyP1 = 70,
HealthCarePrivacyP2 = 71,
HealthCarePrivacyP3 = 72,
HealthCarePrivacyP4 = 73,
HealthCarePrivacyP5 = 74,
GunsmithP1 = 75,
GunsmithP2 = 76,
GunsmithP3 = 77,
GunsmithP4 = 78,
GunsmithP5 = 79,
GunsmithP6 = 80,
FarmingP1 = 81,
FarmingP2 = 82,
FarmingP3 = 83,
FarmingP4 = 84,
SignalP1 = 85,
SignalP2 = 86,
SignalP3 = 87,
SignalP4 = 88,
BadHabit = 89,
Scout = 90,
Insider = 91,
GunsmithP7 = 92,
GunsmithP8 = 93,
GunsmithP9 = 94,
GunsmithP10 = 95,
GunsmithP11 = 96,
OnlyBusiness = 97,
MakeUltraGreatAgain = 98,
BigSale = 99,
TheBloodOfWar = 100,
DressedToKill = 101,
DatabaseP1 = 102,
DatabaseP2 = 103,
SewItGoodP1 = 104,
SewItGoodP2 = 105,
SewItGoodP3 = 106,
SewItGoodP4 = 107,
TheKeyToSuccess = 108,
CharismaBringsSuccess = 109,
NoFussNeeded = 110,
Gratitude = 111,
SalesNight = 112,
Supervisor = 113,
GunsmithP12 = 114,
GunsmithP13 = 115,
GunsmithP14 = 116,
GunsmithP15 = 117,
GunsmithP16 = 118,
TheBloodOfWarP2 = 119,
LivingHighIsNotACrime = 120,
HotDelivery = 121,
Minibus = 122,
VitaminsP1 = 123,
VitaminsP2 = 124,
InformedMeansArmed = 125,
LendLeaseP1 = 126,
Chumming = 127,
TheTarkovShooterP1 = 128,
TheTarkovShooterP2 = 129,
TheTarkovShooterP3 = 130,
TheTarkovShooterP4 = 131,
TheTarkovShooterP5 = 132,
TheTarkovShooterP6 = 133,
TheTarkovShooterP7 = 134,
TheTarkovShooterP8 = 135,
Bullshit = 136,
SilentCaliber = 137,
Insomnia = 138,
TestDriveP1 = 139,
Flint = 140,
AShooterBornInHeaven = 141,
PsychoSniper = 142,
PrivateClinic = 143,
Athlete = 144,
LendLeaseP2 = 145,
Grenadier = 146,
DecontaminationService = 147,
PeacekeepingMission = 148,
TheGuide = 149,
Fertilizers = 150,
TheBloodOfWarP3 = 151,
Scavenger = 152,
LivingHighIsNotACrimeP2 = 153,
Setup = 154,
PerfectMediator = 155,
Import = 156,
Collector = 157,
Introduction = 158,
Acquaintance = 159,
TheSurvivalistPathUnprotectedButDangerous = 160,
TheSurvivalistPathThrifty = 161,
TheSurvivalistPathZhivchik = 162,
TheSurvivalistPathWoundedBeast = 163,
TheSurvivalistPathToughGuy = 164,
TheSurvivalistPathColdBlooded = 165,
TheSurvivalistPathZatoichi = 166,
TheSurvivalistPathEagleOwl = 167,
TheSurvivalistPathCombatMedic = 168,
TheSurvivalistPathJunkie = 169,
HuntsmanPathSecuredPerimeter = 170,
HuntsmanPathTheTrophy = 171,
HuntsmanPathWoodsCleaning = 172,
HuntsmanPathController = 173,
HuntsmanPathSellOut = 174,
HuntsmanPathWoodsKeeper = 175,
HuntsmanPathJustice = 176,
HuntsmanPathEvilWatchman = 177,
HuntsmanPathFactoryChief = 178,
HuntsmanPathEraser = 179,
HuntsmanPathEraserP2 = 180,
Ambulance = 181,
CourtesyVisit = 182,
ShadyBusiness = 183,
Nostalgia = 184,
FishingPlace = 185,
HuntingTrip = 186,
Reserv = 187,
RegulatedMaterials = 188,
AnAppleADayKeepsTheDoctorAway = 189,
Mentor = 190,
TheStylishOne = 191,
TextileP1Usec = 192,
TextileP2Usec = 193,
BunkerP1 = 194,
BunkerP2 = 195,
Anesthesia = 196,
HuntsmanPathSadist = 197,
ColleaguesP1 = 198,
ColleaguesP2 = 199,
ColleaguesP3 = 200,
RiggedGame = 201,
Samples = 202,
TerraGroupEmployee = 203,
TheChemistryCloset = 204,
SearchMission = 205,
Hunter = 206,
Revision = 207,
PestControl = 208,
BackDoor = 209,
SafeCorridor = 210,
InventoryCheck = 211,
FuelMatter = 212,
NoPlaceForRenegades = 213,
DiseaseHistory = 214,
Documents = 215,
SurplusGoods = 216,
ExperienceExchange = 217,
LongLine = 218,
Booze = 219,
HuntsmanPathRelentless = 220,
SwiftOne = 221,
TheChoice = 222,
NightSweep = 223,
Intimidator = 224,
Crisis = 225,
CapturingOutposts = 226,
Escort = 227,
Calibration = 228,
MutualInterest = 229,
TextileP1Bear = 230,
TextileP2Bear = 231,
EasyJobPart1 = 232,
EasyJobPart2 = 233,
EnergyCrisis = 234,
CommunicationDifficulties = 235,
Overpopulation = 236,
SeasideVacation = 237,
CorporateSecrets = 238,
Counteraction = 239,
HuntsmanPathOutcasts = 240,
MissingCargo = 241,
RevisionPart2 = 242,
OurOwnLand = 243,
TheHermit = 244,
LongRoad = 245,
CargoXP4 = 246,
LostContact = 247,
ActionTest = 248,
}
}