[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