Hello
Right now I am trying to get a list of items to show the percentage chance values of the drop table for the container - basically show what they can get from opening a chest via an info button or something that other games have. Give the player an idea of what they can get from the drops and right now with a 6 layer drop table the code is getting pretty intense - maybe there is a way to build something that you can think of to help for the future or perhaps the private preview economy has some features for this?
note my code is still being written - 5 more layers to go for the bottom part and i think should be almost done
thanks!
Daniel
// get result drop table [FunctionName("GetLootTableItems")] public static async Task<dynamic> GetLootTableItems( [HttpTrigger(AuthorizationLevel.Function, "post", Route = null)] HttpRequestMessage req, ILogger log) { /* Create the function execution's context through the request */ var context = await FunctionContext<dynamic>.Create(req); var args = context.FunctionArgument; var resultTables = args["resultTables"]; var serverApi = new PlayFabServerInstanceAPI(context.ApiSettings, context.AuthenticationContext); var GetItemRandomResultTableReq = new GetRandomResultTablesRequest { TableIDs = resultTables }; var GetRandomResultTables = await serverApi.GetRandomResultTablesAsync(GetItemRandomResultTableReq); var Firstresult = GetRandomResultTables.Result; var firstDropResult = CycleThroughDropTables(Firstresult) ; DropResultItems secondDropResult = null; DropResultItems thirdDropResult = null; DropResultItems fourthDropResult = null; DropResultItems fifthDropResult = null; DropResultItems sixthDropResult = null; DropResultItems seventhDropResult = null; if (firstDropResult.DropTableNodes.Count > 0) { List<string> secondtableids = new List<String>(); foreach(var table in firstDropResult.DropTableNodes.Values) secondtableids.Add(table.ResultItem); var getSecondLevelRandomDropTablesReq = new GetRandomResultTablesRequest { TableIDs = secondtableids }; var getSecondLevelDropTablesResult = await serverApi.GetRandomResultTablesAsync(getSecondLevelRandomDropTablesReq); var SecondResult = getSecondLevelDropTablesResult.Result; log.LogDebug($"Get second Random Result Table"); secondDropResult = CycleThroughDropTables(SecondResult) ; if (secondDropResult.DropTableNodes.Count > 0) { List<string> thirdtableids = new List<String>(); foreach(var table in secondDropResult.DropTableNodes.Values) thirdtableids.Add(table.ResultItem); var getThirdLevelDroptable = new GetRandomResultTablesRequest { TableIDs = thirdtableids }; var getThirdLevelDropTableResult = await serverApi.GetRandomResultTablesAsync(getThirdLevelDroptable); var Thirdresult = getThirdLevelDropTableResult.Result; log.LogDebug($"Get third Random Result Table"); thirdDropResult = CycleThroughDropTables(Thirdresult); if (thirdDropResult.DropTableNodes.Count > 0) { List<string> fourthtableids = new List<String>(); foreach(var table in thirdDropResult.DropTableNodes.Values) fourthtableids.Add(table.ResultItem); var getFourthLevelDropTablereq = new GetRandomResultTablesRequest { TableIDs = fourthtableids }; var getFourthLevelDropTableResult = await serverApi.GetRandomResultTablesAsync(getFourthLevelDropTablereq); var FourthResult = getFourthLevelDropTableResult.Result; log.LogDebug($"Get fourth Random Result Table"); fourthDropResult = CycleThroughDropTables(FourthResult); if (fourthDropResult.DropTableNodes.Count > 0) { List<string> fifthTableIds = new List<String>(); foreach(var table in fourthDropResult.DropTableNodes.Values) fifthTableIds.Add(table.ResultItem); var getFifthLevelDropTableReq = new GetRandomResultTablesRequest { TableIDs = fifthTableIds }; var getFifthLevelDropTableResult = await serverApi.GetRandomResultTablesAsync(getFifthLevelDropTableReq); var FifthResult = getFifthLevelDropTableResult.Result; log.LogDebug($"Get fifth Random Result Table"); fifthDropResult = CycleThroughDropTables(FifthResult); if (fifthDropResult.DropTableNodes.Count > 0) { List<string> sixthtableids = new List<String>(); foreach(var table in fifthDropResult.DropTableNodes.Values) sixthtableids.Add(table.ResultItem); var getSixthDropTableReq = new GetRandomResultTablesRequest { TableIDs = sixthtableids }; var getSixthDropTableResult = await serverApi.GetRandomResultTablesAsync(getSixthDropTableReq); var sixthResult = getSixthDropTableResult.Result; log.LogDebug($"Get fifth Random Result Table"); sixthDropResult = CycleThroughDropTables(sixthResult); if (sixthDropResult.DropTableNodes.Count > 0) { List<string> seventhdropids = new List<String>(); foreach(var table in sixthDropResult.DropTableNodes.Values) seventhdropids.Add(table.ResultItem); var getSeventhDropReq = new GetRandomResultTablesRequest { TableIDs = seventhdropids }; var getSeventhDropResult = await serverApi.GetRandomResultTablesAsync(getSeventhDropReq); var seventhResult = getSeventhDropResult.Result; log.LogDebug($"Get fifth Random Result Table"); seventhDropResult = CycleThroughDropTables(seventhResult); } } } } } } List<ItemWithPercentage> Items = new List<ItemWithPercentage> (); foreach( var item in firstDropResult.ItemNodes.Values) Items.Add(new ItemWithPercentage { PercentageToReceive = item.Weight / firstDropResult.TotalWeight, ItemId = item.ResultItem } ); if (secondDropResult.DropTableNodes.Count > 0 || secondDropResult.ItemNodes.Count > 0) { foreach ( var item in secondDropResult.ItemNodes) { var firstDropPercentage = firstDropResult.DropTableNodes[item.Key].Weight / firstDropResult.TotalWeight; var currentItemWeightDropPercentage = item.Value.Weight / secondDropResult.TotalWeight; var totalItemAmount = ((firstDropPercentage / 100) * (currentWeightDropPercentage / 100)) *100; log.LogDebug("firstDropPercentage: " + firstDropPercentage +" currentweightdroppercent: " + currentItemWeightDropPercentage + " total amount: "+ totalItemAmount); Items.Add(new ItemWithPercentage { PercentageToReceive = totalItemAmount, ItemId = item.Value.ResultItem } ); } if (thirdDropResult.DropTableNodes.Count > 0 || thirdDropResult.ItemNodes.Count > 0) { foreach ( var item in thirdDropResult.ItemNodes) { var secondDropPercentage = secondDropResult.DropTableNodes[item.Key].Weight / secondDropResult.TotalWeight; var firstdropPercentage = firstDropResult.DropTableNodes[secondDropResult.DropTableNodes[item.Key].ResultItem].Weight / firstDropResult.TotalWeight; var currentItemWeightDropPercentage = item.Value.Weight / secondDropResult.TotalWeight; var totalItemAmount = ((firstdropPercentage / 100) * (currentItemWeightDropPercentage / 100) * (secondDropPercentage / 100)) *100; log.LogDebug("firstDropPercentage: " + firstdropPercentage +" currentweightdroppercent: " + currentItemWeightDropPercentage + " secondDropPercentage: "+ secondDropPercentage+ " total amount: "+ totalItemAmount); Items.Add(new ItemWithPercentage { PercentageToReceive = totalItemAmount, ItemId = item.Value.ResultItem } ); } } } thirdDropResult fourthDropResult fifthDropResult sixthDropResult seventhDropResult return true; } public static DropResultItems CycleThroughDropTables(GetRandomResultTablesResult RandomTables ) { var dropresult = new DropResultItems { }; foreach ( var eachResultTable in RandomTables.Tables.Values) { //first list of nodes //total weight amount of first foreach(var tableOrItem in eachResultTable.Nodes) { dropresult.TotalWeight += tableOrItem.Weight; if (tableOrItem.ResultItemType == 0) { dropresult.ItemNodes.Add(eachResultTable.TableId,tableOrItem); } else { dropresult.DropTableNodes.Add(eachResultTable.TableId,tableOrItem); } } } return dropresult; }