2022-01-12 23:30:51 +00:00
using AssortHelpers.Common.Helpers ;
using AssortHelpers.Helpers ;
using AssortUpdater ;
2022-01-13 15:21:55 +00:00
using AssortValidator.Common ;
2022-01-12 23:30:51 +00:00
using AssortValidator.Common.Helpers ;
2022-01-13 15:21:55 +00:00
using AssortValidator.Common.Models ;
2022-01-15 15:01:24 +00:00
using QuestValidator.Common.Helpers ;
2022-01-12 23:30:51 +00:00
class Program
{
static void Main ( string [ ] args )
{
2022-01-13 15:25:49 +00:00
var inputPath = DiskHelpers . CreateWorkingFolder ( "input" ) ;
2022-01-12 23:30:51 +00:00
InputFileHelper . SetInputFiles ( inputPath ) ;
var existingAssortData = AssortHelper . GetAssortData ( ) ;
var liveAssortData = AssortHelper . GetLiveAssortData ( ) ;
var questData = QuestHelper . GetQuestData ( "quests" ) ;
var questAssortData = QuestHelper . GetQuestAssortUnlocks ( questData . Values . ToList ( ) ) ;
foreach ( var trader in liveAssortData )
{
var traderId = TraderHelper . GetTraderIdByName ( trader . Key ) ;
var traderQuests = questData . Where ( x = > x . Value . traderId = = traderId ) ;
2022-01-15 15:01:24 +00:00
var traderQuestAssortUnlocks = questAssortData . Where ( x = > x . TraderId = = traderId ) ;
2022-01-12 23:30:51 +00:00
2022-01-13 15:21:55 +00:00
var liveAssortsForTrader = trader . Value ;
var existingAssortsForTrader = existingAssortData [ trader . Key ] ;
2022-01-12 23:30:51 +00:00
2022-01-13 15:21:55 +00:00
var flattenedLiveAssorts = AssortFlattener . FlattenLiveAssorts ( liveAssortsForTrader ) ;
var flattenedExistingAssorts = AssortFlattener . FlattenExistingAssorts ( existingAssortsForTrader ) ;
2022-01-12 23:30:51 +00:00
//LogItemsMissingInLiveAssorts(trader.Key.ToString(), flattenedExistingAssorts, flattenedLiveAssorts);
//LogItemsMissingInExistingAssorts(trader.Key.ToString(), flattenedExistingAssorts, flattenedLiveAssorts);
2022-01-13 15:21:55 +00:00
var flatAssorts = AssortMerger . CreateMergedFlattenedAssorts ( trader . Key . ToString ( ) , flattenedLiveAssorts , flattenedExistingAssorts ) ;
2022-01-12 23:30:51 +00:00
2022-01-15 15:01:24 +00:00
LoggingHelpers . LogInfo ( $"trader: {TraderHelper.GetTraderIdByName(trader.Key)}" ) ;
2022-01-15 15:02:37 +00:00
AssortMerger . ListDuplicatesInMergedAssorts ( flatAssorts ) ;
2022-01-12 23:30:51 +00:00
2022-01-13 15:21:55 +00:00
Assort unflattenedAssorts = AssortFlattener . UnFlatten ( flatAssorts ) ;
JsonWriter . WriteJson ( unflattenedAssorts , traderId , Directory . GetCurrentDirectory ( ) , "assort" ) ;
2022-01-12 23:30:51 +00:00
2022-01-15 15:01:24 +00:00
var questAssorts = QuestHelper . CreateQuestAssortsList ( traderQuestAssortUnlocks ) ;
LogQuestUnlocks ( questAssorts , unflattenedAssorts ) ;
JsonWriter . WriteJson ( questAssorts , traderId , Directory . GetCurrentDirectory ( ) , "questassort" ) ;
}
}
private static void LogQuestUnlocks ( QuestHelper . QuestAssorts questAssorts , Assort unflattenedAssorts )
{
foreach ( var item in questAssorts . success )
{
var assortId = item . Key ;
var questId = item . Value ;
var assortData = unflattenedAssorts . items . Find ( x = > x . _id = = assortId ) ;
LoggingHelpers . LogToConsole ( $"Item {assortId} {assortData?.ItemName} is unlocked by quest {QuestNames.GetNameById(questId)}" ) ;
}
}
2022-01-12 23:30:51 +00:00
private static void LogItemsMissingInExistingAssorts ( string traderName , List < AssortFlattener . FlatAssort > flattenedExistingAssorts , List < AssortFlattener . FlatAssort > flattenedLiveAssorts )
{
foreach ( var liveAssort in flattenedLiveAssorts )
{
// get live assort, match by level and item tpl
var existingAssort = flattenedExistingAssorts . Where ( x = > x . ItemId = = liveAssort . ItemId & & x . Level = = liveAssort . Level ) ;
if ( existingAssort . Count ( ) > 1 )
{
// we have multiple matches, lets compare by number of rewards
existingAssort = flattenedExistingAssorts . Where ( x = > x . ItemId = = liveAssort . ItemId
& & x . Level = = liveAssort . Level
& & x . BarterDetails . Count = = liveAssort . BarterDetails . Count
& & x . SubItems . Count = = liveAssort . SubItems . Count
& & x . IsMoney = = liveAssort . IsMoney ) ;
if ( existingAssort is null )
{
LoggingHelpers . LogError ( $"{traderName} multiple matches found for item: {liveAssort.ItemId} {liveAssort.ItemName} Level: {liveAssort.Level}" ) ;
continue ;
}
}
if ( liveAssort is null )
{
LoggingHelpers . LogError ( $"{traderName} unable to find matching live assort for item: {liveAssort.ItemId} {liveAssort.ItemName} Level: {liveAssort.Level}" ) ;
}
else
{
LoggingHelpers . LogSuccess ( $"{traderName} found matching live assort for item: {liveAssort.ItemId} {liveAssort.ItemName} Level: {liveAssort.Level}" ) ;
}
}
}
private static void LogItemsMissingInLiveAssorts ( string traderName , List < AssortFlattener . FlatAssort > flattenedExistingAssorts , List < AssortFlattener . FlatAssort > flattenedLiveAssorts )
{
foreach ( var existingAssort in flattenedExistingAssorts )
{
// get live assort, match by level and item tpl
var liveAssort = flattenedLiveAssorts . Where ( x = > x . ItemId = = existingAssort . ItemId & & x . Level = = existingAssort . Level ) ;
if ( liveAssort . Count ( ) > 1 )
{
// we have multiple matches, lets compare by number of rewards
liveAssort = flattenedLiveAssorts . Where ( x = > x . ItemId = = existingAssort . ItemId
& & x . Level = = existingAssort . Level
& & x . BarterDetails . Count = = existingAssort . BarterDetails . Count
& & x . SubItems . Count = = existingAssort . SubItems . Count
& & x . IsMoney = = existingAssort . IsMoney ) ;
if ( liveAssort . Count ( ) > 1 )
{
LoggingHelpers . LogError ( $"{traderName} multiple matches found for item: {existingAssort.ItemId} {existingAssort.ItemName} Level: {existingAssort.Level}" ) ;
continue ;
}
}
if ( liveAssort is null )
{
LoggingHelpers . LogError ( $"{traderName} unable to find matching existing assort for item: {existingAssort.ItemId} {existingAssort.ItemName} Level: {existingAssort.Level}" ) ;
}
else
{
LoggingHelpers . LogSuccess ( $"{traderName} found matching existing assort for item: {existingAssort.ItemId} {existingAssort.ItemName} Level: {existingAssort.Level}" ) ;
}
}
}
}