public static void GenerateLoot(CLRScriptBase script, int lootValue, int maxItemValue) { if (lootValue < 1) { return; } if (maxItemValue < 1) { maxItemValue = lootValue; } // For expensive caches, favor magic that is going to be most-commonly crafted. while (lootValue > 1000) { if (maxItemValue > lootValue) { maxItemValue = lootValue; } switch (script.d10(1)) { case 1: { lootValue -= GenerateArt(script, maxItemValue); break; } default: { int roll = script.d100(1); int decrease = 0; if (roll > 82) { decrease = GenerateScroll.NewScroll(script, maxItemValue); // 81-100 lootValue -= decrease; } else if (roll > 65) { decrease = GeneratePotion.NewPotion(script, maxItemValue); // 66-80 lootValue -= decrease; } else if (roll > 55) { decrease = GenerateWand.NewWand(script, maxItemValue); // 56-65 lootValue -= decrease; } else if (roll > 52) { decrease = GenerateStaff.NewStaff(script, maxItemValue); // 53-55 lootValue -= decrease; } else if (roll > 50) { decrease = GenerateRod.NewRod(script, maxItemValue); // 51-52 lootValue -= decrease; } else if (roll > 42) { decrease = GenerateArmor.NewArmor(script, maxItemValue); // 43-50 lootValue -= decrease; } else if (roll > 35) { decrease = GenerateWeapon.NewWeapon(script, maxItemValue); // 36-42 lootValue -= decrease; } else if (roll > 30) { decrease = GenerateAmulet.NewAmulet(script, maxItemValue); // 31-35 lootValue -= decrease; } else if (roll > 25) { decrease = GenerateBelt.NewBelt(script, maxItemValue); // 26-30 lootValue -= decrease; } else if (roll > 20) { decrease = GenerateBoots.NewBoots(script, maxItemValue); // 21-25 lootValue -= decrease; } else if (roll > 15) { decrease = GenerateCloak.NewCloak(script, maxItemValue); // 16-20 lootValue -= decrease; } else if (roll > 10) { decrease = GenerateHelmet.NewHelmet(script, maxItemValue); // 11-15 lootValue -= decrease; } else if (roll > 5) { decrease = GenerateRing.NewRing(script, maxItemValue); // 6-10 lootValue -= decrease; } else { decrease = GenerateGloves.NewGloves(script, maxItemValue); // 1-5 lootValue -= decrease; } break; } } if (lootValue < 10) { script.CreateItemOnObject("nw_it_gold001", script.OBJECT_SELF, lootValue, "", FALSE); return; } if (script.d100(1) > 95) { script.CreateItemOnObject("nw_it_gold001", script.OBJECT_SELF, maxItemValue / 10, "", FALSE); lootValue -= maxItemValue / 10; } } // For cheap loot or to clean up big caches, use more weapons and armor. while (lootValue > 0) { if (maxItemValue > lootValue) { maxItemValue = lootValue; } switch (script.d10(1)) { case 1: { lootValue -= GenerateArt(script, maxItemValue); break; } default: { int roll = script.d100(1); int decrease = 0; if (roll > 91) { decrease = GenerateScroll.NewScroll(script, maxItemValue); // 83-100 lootValue -= decrease; } else if (roll > 82) { decrease = GeneratePotion.NewPotion(script, maxItemValue); // 61-82 lootValue -= decrease; } else if (roll > 60) { decrease = GenerateArmor.NewArmor(script, maxItemValue); // 61-82 lootValue -= decrease; } else if (roll > 21) { decrease = GenerateWeapon.NewWeapon(script, maxItemValue); // 22-59 lootValue -= decrease; } else if (roll > 18) { decrease = GenerateAmulet.NewAmulet(script, maxItemValue); // 19-21 lootValue -= decrease; } else if (roll > 15) { decrease = GenerateBelt.NewBelt(script, maxItemValue); // 16-18 lootValue -= decrease; } else if (roll > 12) { decrease = GenerateBoots.NewBoots(script, maxItemValue); // 13-15 lootValue -= decrease; } else if (roll > 9) { decrease = GenerateCloak.NewCloak(script, maxItemValue); // 10-12 lootValue -= decrease; } else if (roll > 6) { decrease = GenerateHelmet.NewHelmet(script, maxItemValue); // 7-9 lootValue -= decrease; } else if (roll > 3) { decrease = GenerateRing.NewRing(script, maxItemValue); // 4-6 lootValue -= decrease; } else { decrease = GenerateGloves.NewGloves(script, maxItemValue); // 1-3 lootValue -= decrease; } break; } } if (lootValue < 10) { script.CreateItemOnObject("nw_it_gold001", script.OBJECT_SELF, lootValue, "", FALSE); return; } if (script.d100(1) > 95) { script.CreateItemOnObject("nw_it_gold001", script.OBJECT_SELF, maxItemValue / 10, "", FALSE); lootValue -= maxItemValue / 10; } } }