[CF-Devel] Bargaining skill not working?
crossfire-devel at archives.real-time.com
crossfire-devel at archives.real-time.com
Mon Oct 27 04:39:07 CST 2003
On Sat, 25 Oct 2003, Mark Wedel wrote:
>
>
Bargaining skill gives you a bonus to your charisma.
>
>
The bonus is (player level + 2) / 3. So at low levels, it doesn't give you
>
much a bonus.
>
>
Realistic, the bonus should be related to the skill level, and not player
>
level. But to do that, some way to get exp in bargaining is needed.
>
IMO, one should only get optimal prices if one has cha=30 AND maxlevel in
bargaining.
Otherwise, the charisma stat is more irrelevant than need be.
now:
server/shop.c line 160:
if (find_skill(who,SK_BARGAINING)) {
charisma += (who->level+2)/3;
...
/* Diff is now a float between 0 and 1 */
diff=(cha_bonus[charisma]-1)/(1+cha_bonus[charisma]);
/* we need to multiply these by 4.0 to keep buy costs roughly the
same
* (otherwise, you could buy a potion of charisma for around 400 pp.
* Arguable, the costs in the archetypes should be updated to better
* reflect values (potion charisma list for 1250 gold)
*/
if(flag==F_BUY)
val=(4.0*(float)val*(1.0+diff));
else if (flag==F_SELL)
val=(4.0*(float)val*(1.0-diff));
else val *=4;
}
Looking at cha_bonus[] i see that diff actually only spans 0.2 - ~0.82.
Thus one buys and sells for +/- 20-82%.
My suggestion:
1. No bonus on charisma for bargaining.
2. Calculate a bonus for bargaining:
2a. additive:
diff += .1 - .2 * SQRT((level(bargaining)+5)/(maxlevel+5))
Thus diff would be between 0.1 and 0.92.
2b. multiplicative:
diff2 = .1 - .2 * SQRT((level(bargaining)+5)/(maxlevel+5))
...
if(flag==F_BUY)
val=(4.0*(float)val*(1.0+diff)*(1.0+diff2));
else if (flag==F_SELL)
val=(4.0*(float)val*(1.0-diff)*(1.0-diff2));
The SQRT would help to generate diminishing returns for higher levels.
The actual formula / weighting between cha and bargaining has to be
tuned of course.
3. Experience in bargaining:
If we actually buy/sell an item, we calculate the actual price for the
player and the price for a dummy-player with cha=0 and no bargaining
skill.
Then exp += abs(price_for_player-price_for_dummy)*somefactor.
Thus one would not get exp. for gems.
I suggest to set the ratio for overall level to zero.
With the 64bit exp. high level players could waste bizzarre amounts of
money to level up in bargaining. :)
And lazy players (too lazy to bother with +cha equipment) would waste
money no matter what level they are.
I could start coding right away, but i'd rather wait for some
comments/discussion.
Bernd Edler
_______________________________________________
crossfire-devel mailing list
crossfire-devel at lists.real-time.com
https://mailman.real-time.com/mailman/listinfo/crossfire-devel
More information about the crossfire
mailing list