--- deliantra/server/common/treasure.C 2007/04/21 22:12:59 1.56 +++ deliantra/server/common/treasure.C 2007/04/29 00:19:16 1.59 @@ -199,8 +199,6 @@ * Add up the chance total, and check to make sure the yes & no * fields of the treasures are not being used. */ - tl->total_chance = 0; - if (one) { for (treasure *t = tl->items; t; t = t->next) @@ -375,6 +373,12 @@ } } +void +object::create_treasure (treasurelist *tl, int flags) +{ + ::create_treasure (tl, this, flags, map ? map->difficulty : 0); +} + /* This calls the appropriate treasure creation function. tries is passed * to determine how many list transitions or attempts to create treasure * have been made. It is really in place to prevent infinite loops with @@ -395,6 +399,15 @@ return; } + if (op->flag [FLAG_TREASURE_ENV]) + { + // do not generate items when there already is something above the object + if (op->flag [FLAG_IS_FLOOR] && op->above) + return; + + flag |= GT_ENVIRONMENT; + } + if (tl->total_chance) create_one_treasure (tl, op, flag, difficulty, tries); else