Actually sotonin, I found out it does NOT roll a strict yes/no for "will something drop":
Code:
for (int32 i=0; i<lts->NumEntries; i++) {
for (int32 k = 1; k <= lts->Entries[i].multiplier; k++) {
if ( (rand()%100) < lts->Entries[i].probability) {
AddLootDropToNPC(npc,lts->Entries[i].lootdrop_id, itemlist);
For each item that can drop, if it passes the rand() test it will add an item to the mob (if it also passes the check for the item in addlootdropnpc). If the for and if statements were reversed, then it would be a strict yes/no for "will stuff drop".I know I said this doesn't happen when we talked about it, but I was looking at the wrong code
In the current system, using sotonin's example, item1 is ALWAYS tested to see if it drops, since it is first in the array. item4 is only tested if FOUR other tests fail...this is not truely random itemization. Now imagine this in a loot table with 80 items (which a lot of sebilis tables are)...items toward the bottom have a significant mathimatical disadvantage, since 70+ checks must fail before the item even has a chance...and then it still has to pass it's own rand() check.
This system keeps rare items rare, since the item must still pass the second, individual item chance test. The only difference is items near the beginning of the loottable are not more likely to drop.