Ticket #1691: trader.patch
File trader.patch, 3.5 KB (added by , 12 years ago) |
---|
-
simulation/helpers/TraderGain.js
4 4 // Additional gain for trading performed between markets of different players, in percents 5 5 const INTERNATIONAL_TRADING_ADDITION = 50; 6 6 7 // Fraction of the additionnal gain to go to the owner of the trader, in percents 8 const FRACTION_BONUS_TRADER = 60; 9 7 10 function CalculateTraderGain(firstMarket, secondMarket, template) 8 11 { 9 12 var cmpFirstMarketPosition = Engine.QueryInterface(firstMarket, IID_Position); … … 31 34 return gain; 32 35 } 33 36 37 function CalculateTraderShare() 38 { 39 var fraction = (100 - INTERNATIONAL_TRADING_ADDITION + 2*INTERNATIONAL_TRADING_ADDITION*FRACTION_BONUS_TRADER/100); 40 fraction = fraction / (100 + INTERNATIONAL_TRADING_ADDITION); 41 // Add protections against unreasonnable input values 42 if(fraction < 0) return 0; 43 if(fraction > 1) return 1; 44 return fraction; 45 } 46 34 47 Engine.RegisterGlobal("CalculateTraderGain", CalculateTraderGain); 48 Engine.RegisterGlobal("CalculateTraderShare", CalculateTraderShare); -
simulation/components/UnitAI.js
3180 3180 3181 3181 if (this.CheckTargetRange(currentMarket, IID_Trader)) 3182 3182 { 3183 this.PerformTrade( );3183 this.PerformTrade(currentMarket); 3184 3184 if (this.MoveToMarket(nextMarket)) 3185 3185 { 3186 3186 // We've started walking to the next market … … 3194 3194 } 3195 3195 }; 3196 3196 3197 UnitAI.prototype.PerformTrade = function( )3197 UnitAI.prototype.PerformTrade = function(currentMarket) 3198 3198 { 3199 3199 var cmpTrader = Engine.QueryInterface(this.entity, IID_Trader); 3200 cmpTrader.PerformTrade( );3200 cmpTrader.PerformTrade(currentMarket); 3201 3201 }; 3202 3202 3203 3203 UnitAI.prototype.StopTrading = function() -
simulation/components/Trader.js
32 32 this.preferredGoods = "metal"; 33 33 // Currently carried goods 34 34 this.goods = { "type": null, "amount": 0 }; 35 // Fraction of the gain to go to the trader at each market stop 36 this.fraction = CalculateTraderShare(); 35 37 } 36 38 37 39 Trader.prototype.CalculateGain = function(firstMarket, secondMarket, template) … … 175 177 return true; 176 178 } 177 179 178 Trader.prototype.PerformTrade = function( )180 Trader.prototype.PerformTrade = function(market) 179 181 { 180 182 if (this.goods.amount > 0) 181 183 { 184 var traderGain = Math.round(this.fraction * this.goods.amount); 185 182 186 var cmpPlayer = QueryOwnerInterface(this.entity, IID_Player); 183 cmpPlayer.AddResource(this.goods.type, t his.goods.amount);187 cmpPlayer.AddResource(this.goods.type, traderGain); 184 188 185 189 var cmpStatisticsTracker = QueryOwnerInterface(this.entity, IID_StatisticsTracker); 186 190 if (cmpStatisticsTracker) 187 cmpStatisticsTracker.IncreaseTradeIncomeCounter(this.goods.amount); 191 cmpStatisticsTracker.IncreaseTradeIncomeCounter(traderGain); 192 193 var marketGain = this.goods.amount - traderGain; 194 195 var marketOwner = QueryOwnerInterface(market, IID_Player); 196 marketOwner.AddResource(this.goods.type, marketGain); 197 198 var marketStatisticsTracker = QueryOwnerInterface(market, IID_StatisticsTracker); 199 if (marketStatisticsTracker) 200 marketStatisticsTracker.IncreaseTradeIncomeCounter(marketGain); 188 201 } 189 202 this.goods.type = this.preferredGoods; 190 203 this.goods.amount = this.gain;