Changeset View
Changeset View
Standalone View
Standalone View
ps/trunk/binaries/data/mods/public/simulation/helpers/TraderGain.js
Show All 21 Lines | function CalculateTraderGain(firstMarket, secondMarket, traderTemplate, trader) | ||||
let gainMultiplier = TradeGainNormalization(mapSize); | let gainMultiplier = TradeGainNormalization(mapSize); | ||||
if (trader) | if (trader) | ||||
{ | { | ||||
let cmpTrader = Engine.QueryInterface(trader, IID_Trader); | let cmpTrader = Engine.QueryInterface(trader, IID_Trader); | ||||
if (!cmpTrader) | if (!cmpTrader) | ||||
return null; | return null; | ||||
gainMultiplier *= cmpTrader.GetTraderGainMultiplier(); | gainMultiplier *= cmpTrader.GetTraderGainMultiplier(); | ||||
} | } | ||||
else //called from the gui, modifications already applied | else // Called from the gui, modifications already applied. | ||||
{ | { | ||||
if (!traderTemplate || !traderTemplate.GainMultiplier) | if (!traderTemplate || !traderTemplate.GainMultiplier) | ||||
return null; | return null; | ||||
gainMultiplier *= traderTemplate.GainMultiplier; | gainMultiplier *= traderTemplate.GainMultiplier; | ||||
} | } | ||||
let gain = {}; | let gain = {}; | ||||
// Calculate ordinary Euclidean distance between markets. | // Calculate ordinary Euclidean distance between markets. | ||||
// We don't use pathfinder, because ordinary distance looks more fair. | // We don't use pathfinder, because ordinary distance looks more fair. | ||||
let distanceSq = firstMarketPosition.distanceToSquared(secondMarketPosition); | let distanceSq = firstMarketPosition.distanceToSquared(secondMarketPosition); | ||||
// We calculate gain as square of distance to encourage trading between remote markets | // We calculate gain as square of distance to encourage trading between remote markets | ||||
// and gainMultiplier corresponds to the gain for a 100m distance | // and gainMultiplier corresponds to the gain for a 100m distance | ||||
gain.traderGain = gainMultiplier * TradeGain(distanceSq, mapSize); | gain.traderGain = gainMultiplier * TradeGain(distanceSq, mapSize); | ||||
gain.market1Owner = cmpMarket1Player.GetPlayerID(); | gain.market1Owner = cmpMarket1Player.GetPlayerID(); | ||||
gain.market2Owner = cmpMarket2Player.GetPlayerID(); | gain.market2Owner = cmpMarket2Player.GetPlayerID(); | ||||
// If trader undefined, the trader owner is supposed to be the same as the first market | // If trader undefined, the trader owner is supposed to be the same as the first market | ||||
let cmpPlayer = trader ? QueryOwnerInterface(trader) : cmpMarket1Player; | let cmpPlayer = trader ? QueryOwnerInterface(trader) : cmpMarket1Player; | ||||
if (!cmpPlayer) | if (!cmpPlayer) | ||||
return null; | return null; | ||||
gain.traderOwner = cmpPlayer.GetPlayerID(); | gain.traderOwner = cmpPlayer.GetPlayerID(); | ||||
// Add potential player trade multipliers | |||||
let playerBonus = cmpPlayer.GetTradeRateMultiplier(); | |||||
// If markets belong to different players, add gain from international trading | // If markets belong to different players, add gain from international trading | ||||
if (gain.market1Owner != gain.market2Owner) | if (gain.market1Owner != gain.market2Owner) | ||||
{ | { | ||||
let market1PlayerBonus = cmpMarket1Player.GetTradeRateMultiplier(); | |||||
let market2PlayerBonus = cmpMarket2Player.GetTradeRateMultiplier(); | |||||
let internationalBonus1 = cmpMarket1.GetInternationalBonus(); | let internationalBonus1 = cmpMarket1.GetInternationalBonus(); | ||||
let internationalBonus2 = cmpMarket2.GetInternationalBonus(); | let internationalBonus2 = cmpMarket2.GetInternationalBonus(); | ||||
gain.market1Gain = Math.round(gain.traderGain * internationalBonus1 * market1PlayerBonus); | gain.market1Gain = Math.round(gain.traderGain * internationalBonus1); | ||||
gain.market2Gain = Math.round(gain.traderGain * internationalBonus2 * market2PlayerBonus); | gain.market2Gain = Math.round(gain.traderGain * internationalBonus2); | ||||
} | } | ||||
gain.traderGain = Math.round(gain.traderGain * playerBonus); | |||||
return gain; | return gain; | ||||
} | } | ||||
Engine.RegisterGlobal("CalculateTraderGain", CalculateTraderGain); | Engine.RegisterGlobal("CalculateTraderGain", CalculateTraderGain); |
Wildfire Games · Phabricator