Barter Overview

From the Oblivion ConstructionSet Wiki
Revision as of 11:40, 3 February 2023 by Ortorin (talk | contribs) (more grammar)
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)
Jump to navigation Jump to search

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