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-12 23:30:51 +00:00
class Program
{
static void Main ( string [ ] args )
{
var inputPath = CreateWorkingFolders ( ) ;
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 ) ;
var traderAssortData = questAssortData . Where ( x = > x . TraderId = = traderId ) ;
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-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
// generate trader specific assort quest data, write out to file
var questAssorts = QuestHelper . CreateQuestAssortsList ( traderAssortData ) ;
//JsonWriter.WriteJson(questAssorts, traderId, Directory.GetCurrentDirectory(), "questassort");
}
}
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}" ) ;
}
}
}
private static string CreateWorkingFolders ( )
{
var workingPath = Directory . GetCurrentDirectory ( ) ;
// create input folder
var inputPath = $"{workingPath}//input" ;
DiskHelpers . CreateDirIfDoesntExist ( inputPath ) ;
return inputPath ;
}
}