On Thu, 15 Apr 2004, Andreas Kirschbaum wrote: > I think there is a bug in the function query_cost() for high priced > items: the graph of the adjusted price is not a continuous function (see > red function in attached image). I.e. you will get the "real" price for > items up to 25000; for higher priced items you will get about 11000 > only. > > What is the "right" fix for this problem? > > 1. Decrease the limit from 25000 to 10000 (green function in image). > (Maybe this was the case some time ago because this makes the > existing adjustment function continuous and the comment for > query_cost() mentions "10000".) > > 2. Modify the adjustment function (blue function in image). > > 3. Leave it as is (red function in image). > Indeed, this is a bug. server/shop.c 148: /* Limit amount of money you can get for really great items. */ if (flag==F_TRUE || flag==F_SELL) { if (val/number>25000) { val=8000+isqrt((int)val/number)*20; val *= number; } } My suggestion: /* Limit amount of money you can get for really great items. */ if (flag==F_TRUE || flag==F_SELL) { if (val/number>PRICE_LIMIT) { val=isqrt((int)val/number)*2*isqrt(PRICE_LIMIT)-PRICE_LIMIT; val *= number; } } One can define PRICE_LIMIT here or even in the config.h if desired. These functions are not only continuous but even more important here, monotonic increasing. They are also differentiable, meaning they bend away smoothly from the linear function. On choosing PRICE_LIMIT : 10,000 : linear until 800 pt 2,000 pt -> 1728 pt 4,000 pt -> 2776 pt 20,000 pt -> 7,200 pt 40,000 pt -> 10,512 pt 25,000 : linear until 2000 pt 4,000 pt -> 3,656 pt 20,000 pt -> 10,640 pt 40,000 pt -> 15,872 pt 10,000 silver are 200 pt. ,but all prices are multiplied by 4. _______________________________________________ crossfire-devel mailing list crossfire-devel at lists.real-time.com https://mailman.real-time.com/mailman/listinfo/crossfire-devel