--- deliantra/server/common/treasure.c 2006/07/11 16:50:16 1.2 +++ deliantra/server/common/treasure.c 2006/08/09 15:57:27 1.3 @@ -480,42 +480,32 @@ }; -/* calculate the appropriate level for wands staves and scrolls. If - * retmult is 1, return the multiplier, not the level, for computing value +/* calculate the appropriate level for wands staves and scrolls. * This code presumes that op has had its spell object created (in op->inv) + * + * elmex Wed Aug 9 17:44:59 CEST 2006: + * Removed multiplicator, too many high-level items were generated on low-difficulty maps. */ -int level_for_item(const object *op, int difficulty, int retmult) +int level_for_item(const object *op, int difficulty) { - int level, mult, olevel; + int mult = 0, olevel = 0; - mult = 0; - if (!op->inv) { - LOG(llevError,"level_for_item: Object %s has no inventory!\n", op->name); - return 0; + if (!op->inv) + { + LOG(llevError,"level_for_item: Object %s has no inventory!\n", op->name); + return 0; } - level = op->inv->level; - /* Basically, we set mult to the lowest spell increase attribute that is - * not zero - zero's mean no modification is done, so we don't want those. - * given we want non zero results, we can't just use a few MIN's here. - */ - mult = op->inv->dam_modifier; - if (op->inv->range_modifier && (op->inv->range_modifierinv->range_modifier; - if (op->inv->duration_modifier && (op->inv->duration_modifier < mult || mult==0)) - mult = op->inv->duration_modifier; - - if (mult == 0) - mult = 5; + olevel = op->inv->level + (double) difficulty * (1 - drand48 () * drand48 () * 2); - if (retmult) - return mult; + if (olevel <= 0) + olevel = rndm (1, MIN (op->inv->level, 1)); - olevel = mult * rndm(0, difficulty) + level; - if (olevel > MAXLEVEL) olevel = MAXLEVEL; + if (olevel > MAXLEVEL) + olevel = MAXLEVEL; - return olevel; + return olevel; } /* @@ -973,7 +963,7 @@ */ if (op->inv->duration_modifier || op->inv->dam_modifier || op->inv->range_modifier) { - op->level = level_for_item(op, difficulty, 0); + op->level = level_for_item(op, difficulty); op->value= op->value* op->inv->value * (op->level +50)/ (op->inv->level + 50); } @@ -984,7 +974,7 @@ break; case ROD: - op->level = level_for_item(op, difficulty, 0); + op->level = level_for_item(op, difficulty); /* Add 50 to both level an divisor to keep prices a little more * reasonable. Otherwise, a high level version of a low level * spell can be worth tons a money (eg, level 20 rod, level 2 spell = @@ -1001,7 +991,7 @@ break; case SCROLL: - op->level = level_for_item(op, difficulty, 0); + op->level = level_for_item(op, difficulty); op->value= op->value * op->inv->value * (op->level +50) / (op->inv->level + 50); /* add exp so reading them properly gives xp */ op->stats.exp = op->value/5;