Barter Overview

Revision as of 12:36, 3 February 2023 by Ortorin (talk | contribs) (grammer)

Barter is not generally accessible to the construction set. There is precious little that can be done to affect it because the functionality is in the game code. Barter is a function of the relative mercantile skills, the merchant's current disposition, and the haggle percentage.

The dialogue presented during barter is set on the service tab of a quest. Below are the game settings that control the formulas for bartering prices.


Barter Formulas.

The formula used to check if a trade will be accepted by the merchant depending on the position of the slider is:

Value = fBarterHaggleDispMult * floor(fActorLuckSkillMult * (Disposition - 10) / 4) + (100 + min(PlayerSkill + fActorLuckSkillMult * (PlayerLuck - 50), 100) - min(MerchantSkill + fActorLuckSkillMult * (MerchantLuck - 50), 100)) / (10 - (SliderPosition * fBarterHaggleBase))
  • SliderPosition is a value between 0 and 40 (fBarterHaggleMax) and represents the position in which the slider is located.
  • If the value returned by the formula is greater than or equal to 0, the trade will be accepted by the merchant.
  • Note that sometimes the result of the formula may give 0 (arithmetically) and therefore the trade should be accepted but it is not. This is because of floating-point errors. The handling of these errors can be done but that would over complicate the representation of the formula on this page.
  • Editor's note: it has yet to be found if and where fBarterHaggleCurve fits into the above formula.


Alternatively, if you wish to know the best slider position you can use:

BestSliderPosition = floor(((fBarterHaggleDispMult * floor(fActorLuckSkillMult * (Disposition - 10) / 4) + (100 + min(PlayerSkill + fActorLuckSkillMult * (PlayerLuck - 50),100) - min(MerchantSkill + fActorLuckSkillMult * (MerchantLuck - 50),100)) /10) ^fBarterHaggleCurve) / fBarterHaggleBase)

To change the slider position through script, use SetMenuFloatValue with the default path for the slider value being; "Negotiate_Background\Negotiate_Scroll\Horizontal_Scroll_Marker\_Value_Scrolled_To".

Example: SetMenuFloatValue "Negotiate_Background\Negotiate_Scroll\Horizontal_Scroll_Marker\_Value_Scrolled_To" 1025 SliderPositionVar