private void CheckExactDropRate(int totalWeight, MonsterDropTable table, Dictionary <long, float> expectedRate) { foreach (KeyValuePair <long, float> item in expectedRate) { int weigth = GetWeight(item.Key, table); int baseChance = table.baseChance; float rate = ((float)weigth / (float)table.baseChance) * ((float)table.weight / (float)totalWeight); Assert.AreEqual(item.Value, rate, 0.00001); } }
private int GetWeight(long id, MonsterDropTable table) { foreach (MonsterDropTable.BasicLoot loot in table.basicLoots) { if (loot.id == id) { return(loot.weight); } } return(0); }
public void RareDropTableTest() { MonsterDropTable monsterDropTable = JsonHandler.GetMonsterDropTable("rare_drop_table"); int baseChance = monsterDropTable.baseChance; int totalWeight = GetWeightSum(monsterDropTable.basicLoots); Assert.AreEqual(baseChance, totalWeight); Assert.Greater(baseChance, 0); foreach (MonsterDropTable.BasicLoot item in monsterDropTable.basicLoots) { Assert.Greater(item.id, 0); } }
public void GetDropTableHandler(string name) { monsterDropTableHandler = JsonHandler.GetMonsterDropTableHandler(name); if (monsterDropTableHandler.preMadeTables.Count != 0) { foreach (MonsterDropTableHandler.TableInfo tableInfo in monsterDropTableHandler.preMadeTables) { MonsterDropTable table = JsonHandler.GetMonsterDropTable(tableInfo.name); table.weight = tableInfo.weight; monsterDropTableHandler.monsterDropTables.Add(table); } } monsterDropTableHandler.SetTotalLootCount(); }
public void PagesTableTest() { MonsterDropTable monsterDropTable = JsonHandler.GetMonsterDropTable("pages"); int baseChance = monsterDropTable.baseChance; int totalWeight = GetWeightSum(monsterDropTable.basicLoots); Assert.AreEqual(baseChance, totalWeight); Assert.Greater(baseChance, 0); foreach (MonsterDropTable.BasicLoot item in monsterDropTable.basicLoots) { Assert.Greater(item.id, 0); Assert.Greater(item.amountMin, 0); Assert.Greater(item.amountMax, 0); } }
private void CreateUniqueDropTable() { uniqueDropTable = new MonsterDropTable { name = "Unique", weight = 0, baseChance = 256 * 4, }; MonsterDropTable.BasicLoot tanz = new MonsterDropTable.BasicLoot { id = 12922, weight = 1, amountMin = 1, amountMax = 1, }; uniqueDropTable.basicLoots.Add(tanz); MonsterDropTable.BasicLoot magic = new MonsterDropTable.BasicLoot { id = 12932, weight = 1, amountMin = 1, amountMax = 1, }; uniqueDropTable.basicLoots.Add(magic); MonsterDropTable.BasicLoot visage = new MonsterDropTable.BasicLoot { id = 12927, weight = 1, amountMin = 1, amountMax = 1, }; uniqueDropTable.basicLoots.Add(visage); MonsterDropTable.BasicLoot onyx = new MonsterDropTable.BasicLoot { id = 6571, weight = 1, amountMin = 1, amountMax = 1, }; uniqueDropTable.basicLoots.Add(onyx); }
public override void OnInspectorGUI() { MonsterDropTableAdder monsterDropTableAdder = (MonsterDropTableAdder)target; if (GUILayout.Button("Load Bosses")) { Database.LoadBosses(); allBosses = Database.bossesNames; allBosses.AddRange(Database.cluesNames); } monsterInd = EditorGUILayout.Popup("Select Boss:", monsterInd, allBosses.ToArray()); if (Database.bossesNames.Count != 0) { monsterName = Database.bossesNames[monsterInd]; } if (monsterInd != prevMonsterInd) { JSONLoaded = false; } if (GUILayout.Button("Load JSON")) { monsterDropTableAdder.monsterDropTableHandler = JsonHandler.GetMonsterDropTableHandler(monsterName); serializedObject.Update(); prevMonsterInd = monsterInd; JSONLoaded = true; } if (monsterName != null && JSONLoaded) { EditorGUILayout.LabelField("100% Drop and Tertiary", EditorStyles.boldLabel); if (GUILayout.Button("Add")) { monsterDropTableAdder.monsterDropTableHandler.generalDropTables.Add(new GeneralDropTable()); } EditorGUI.indentLevel++; EditorGUILayout.PropertyField(generalDropTables, false); if (generalDropTables.isExpanded) { EditorGUI.indentLevel++; foreach (SerializedProperty table in generalDropTables) { EditorGUILayout.PropertyField(table, false); if (table.isExpanded) { EditorGUI.indentLevel++; EditorGUILayout.PropertyField(table.FindPropertyRelative("name")); EditorGUILayout.PropertyField(table.FindPropertyRelative("numRolls")); EditorGUILayout.PropertyField(table.FindPropertyRelative("lootItems")); EditorGUI.indentLevel--; } } EditorGUI.indentLevel--; } EditorGUI.indentLevel--; EditorGUILayout.Space(10); EditorGUILayout.LabelField("General Info", EditorStyles.boldLabel); EditorGUILayout.PropertyField(monsterDropTableHandler.FindPropertyRelative("rolls")); EditorGUILayout.Space(10); EditorGUILayout.LabelField("General Loot", EditorStyles.boldLabel); EditorGUILayout.PropertyField(monsterDropTableHandler.FindPropertyRelative("baseChance")); if (GUILayout.Button("Add Loot from temp.json")) { tempDropTable = JsonHandler.GetMonsterDropTable("temp"); monsterDropTableAdder.monsterDropTableHandler.basicLoots = tempDropTable.basicLoots; monsterDropTableAdder.monsterDropTableHandler.baseChance = tempDropTable.baseChance; } EditorGUI.indentLevel++; EditorGUILayout.PropertyField(monsterDropTableHandler.FindPropertyRelative("basicLoots")); EditorGUI.indentLevel--; EditorGUILayout.LabelField("Other tables", EditorStyles.boldLabel); EditorGUI.indentLevel++; if (GUILayout.Button("Add Rare Drop Table")) { monsterDropTableAdder.monsterDropTableHandler.preMadeTables.Add(new MonsterDropTableHandler.TableInfo("rare_drop_table", 0)); } if (GUILayout.Button("Add Tree-Herb Seed Table")) { monsterDropTableAdder.monsterDropTableHandler.preMadeTables.Add(new MonsterDropTableHandler.TableInfo("tree_herb_seed", 0)); } if (GUILayout.Button("Add Prayer Page Table")) { monsterDropTableAdder.monsterDropTableHandler.preMadeTables.Add(new MonsterDropTableHandler.TableInfo("pages", 0)); } if (GUILayout.Button("Add Blessing Table")) { monsterDropTableAdder.monsterDropTableHandler.preMadeTables.Add(new MonsterDropTableHandler.TableInfo("blessing", 0)); } if (GUILayout.Button("Add Teleport Table")) { monsterDropTableAdder.monsterDropTableHandler.preMadeTables.Add(new MonsterDropTableHandler.TableInfo("teleport", 0)); } if (GUILayout.Button("Add Custom")) { monsterDropTableAdder.monsterDropTableHandler.monsterDropTables.Add(new MonsterDropTable()); } if (GUILayout.Button("Add Loot from temp.json")) { tempDropTable = JsonHandler.GetMonsterDropTable("temp"); monsterDropTableAdder.monsterDropTableHandler.monsterDropTables.Add(tempDropTable); } EditorGUILayout.PropertyField(monsterDropTableHandler.FindPropertyRelative("monsterDropTables")); SerializedProperty preMadeTables = monsterDropTableHandler.FindPropertyRelative("preMadeTables"); EditorGUILayout.PropertyField(preMadeTables); EditorGUI.indentLevel--; EditorGUI.indentLevel--; serializedObject.ApplyModifiedProperties(); if (GUILayout.Button("Apply")) { JsonHandler.SaveJsonFile(monsterDropTableAdder.monsterDropTableHandler, monsterName); } } }