From 35071dd44b7397f4d9c4ac7f4828ee0e6654c6da Mon Sep 17 00:00:00 2001 From: mimo Date: Fri, 17 Jul 2015 19:27:15 +0000 Subject: [PATCH] allow changing the trading gain with tech + rework of market techs, fixes #3326 This was SVN commit r16866. --- .../data/mods/public/globalscripts/Templates.js | 8 ++++++-- .../data/mods/public/simulation/ai/petra/config.js | 2 +- .../mods/public/simulation/components/Trader.js | 3 ++- ...trade_convoys.json => trade_convoys_armor.json} | 5 +++-- ...eed_trader_01.json => trade_convoys_speed.json} | 0 .../data/technologies/trade_gain_01.json | 13 +++++++++++++ .../data/technologies/trade_gain_02.json | 14 ++++++++++++++ .../mods/public/simulation/helpers/TraderGain.js | 9 +++++++-- .../template_structure_economic_market.xml | 5 ++++- 9 files changed, 50 insertions(+), 9 deletions(-) rename binaries/data/mods/public/simulation/data/technologies/{armor_trade_convoys.json => trade_convoys_armor.json} (80%) rename binaries/data/mods/public/simulation/data/technologies/{speed_trader_01.json => trade_convoys_speed.json} (100%) create mode 100644 binaries/data/mods/public/simulation/data/technologies/trade_gain_01.json create mode 100644 binaries/data/mods/public/simulation/data/technologies/trade_gain_02.json diff --git a/binaries/data/mods/public/globalscripts/Templates.js b/binaries/data/mods/public/globalscripts/Templates.js index 306adac175..9986f879e7 100644 --- a/binaries/data/mods/public/globalscripts/Templates.js +++ b/binaries/data/mods/public/globalscripts/Templates.js @@ -239,8 +239,12 @@ function GetTemplateDataHelper(template, player) } if (template.Trader) - ret.trader = template.Trader; - + { + ret.trader = { + "GainMultiplier": func("Trader/GainMultiplier", +template.Trader.GainMultiplier, player, template) + }; + } + if (template.WallSet) { ret.wallSet = { diff --git a/binaries/data/mods/public/simulation/ai/petra/config.js b/binaries/data/mods/public/simulation/ai/petra/config.js index 577941095e..d23ea800a4 100644 --- a/binaries/data/mods/public/simulation/ai/petra/config.js +++ b/binaries/data/mods/public/simulation/ai/petra/config.js @@ -34,7 +34,7 @@ m.Config = function(difficulty) "provisionFields" : 2 }; - this.distUnitGain = 110*110; // TODO take it directly from helpers/TraderGain.js + this.distUnitGain = 115*115; // TODO take it directly from helpers/TraderGain.js // Note: attack settings are set directly in attack_plan.js // defense diff --git a/binaries/data/mods/public/simulation/components/Trader.js b/binaries/data/mods/public/simulation/components/Trader.js index 33cf945e8e..774e4abdb4 100644 --- a/binaries/data/mods/public/simulation/components/Trader.js +++ b/binaries/data/mods/public/simulation/components/Trader.js @@ -222,6 +222,7 @@ Trader.prototype.PerformTrade = function(currentMarket) // First take the preferred goods of the trader if any, // otherwise choose one according to the player's trading priorities // if still nothing (but should never happen), choose metal + // and recomputes the gain in case it has changed (for example by technology) var nextGoods = this.GetRequiredGoods(); if (!nextGoods || RESOURCES.indexOf(nextGoods) == -1) { @@ -233,7 +234,7 @@ Trader.prototype.PerformTrade = function(currentMarket) nextGoods = "metal"; } this.goods.type = nextGoods; - this.goods.amount = this.gain; + this.goods.amount = this.CalculateGain(this.firstMarket, this.secondMarket); this.goods.origin = currentMarket; }; diff --git a/binaries/data/mods/public/simulation/data/technologies/armor_trade_convoys.json b/binaries/data/mods/public/simulation/data/technologies/trade_convoys_armor.json similarity index 80% rename from binaries/data/mods/public/simulation/data/technologies/armor_trade_convoys.json rename to binaries/data/mods/public/simulation/data/technologies/trade_convoys_armor.json index e371b5ea13..658438ba3b 100644 --- a/binaries/data/mods/public/simulation/data/technologies/armor_trade_convoys.json +++ b/binaries/data/mods/public/simulation/data/technologies/trade_convoys_armor.json @@ -1,9 +1,10 @@ { - "genericName": "Trade convoys", + "genericName": "Trade Convoys", "description": "Increases defensive capability of traders.", "cost": {"food": 0, "wood": 0, "stone": 0, "metal": 200}, - "requirements": {"tech": "phase_town"}, + "requirements": {"tech": "phase_city"}, "requirementsTooltip": "Unlocked in City Phase.", + "supersedes": "trade_convoys_speed", "icon": "wheel.png", "researchTime": 40, "tooltip": "Traders +2 Hack and Pierce armor levels.", diff --git a/binaries/data/mods/public/simulation/data/technologies/speed_trader_01.json b/binaries/data/mods/public/simulation/data/technologies/trade_convoys_speed.json similarity index 100% rename from binaries/data/mods/public/simulation/data/technologies/speed_trader_01.json rename to binaries/data/mods/public/simulation/data/technologies/trade_convoys_speed.json diff --git a/binaries/data/mods/public/simulation/data/technologies/trade_gain_01.json b/binaries/data/mods/public/simulation/data/technologies/trade_gain_01.json new file mode 100644 index 0000000000..385aa2fc1b --- /dev/null +++ b/binaries/data/mods/public/simulation/data/technologies/trade_gain_01.json @@ -0,0 +1,13 @@ +{ + "genericName": "Handicraft", + "description": "The progress in handicraft improves the trading profit.", + "cost": {"food": 0, "wood": 150, "stone": 0, "metal": 150}, + "requirements": {"tech": "phase_town"}, + "requirementsTooltip": "Unlocked in Town Phase.", + "icon": "metal_pot.png", + "researchTime": 40, + "tooltip": "Traders +10% gain.", + "modifications": [{"value": "Trader/GainMultiplier", "multiply": 1.10}], + "affects": ["Trader"], + "soundComplete": "interface/alarm/alarm_upgradearmory.xml" +} diff --git a/binaries/data/mods/public/simulation/data/technologies/trade_gain_02.json b/binaries/data/mods/public/simulation/data/technologies/trade_gain_02.json new file mode 100644 index 0000000000..d044a4cbe6 --- /dev/null +++ b/binaries/data/mods/public/simulation/data/technologies/trade_gain_02.json @@ -0,0 +1,14 @@ +{ + "genericName": "Advanced Handicraft", + "description": "The progress in handicraft improves the trading profit.", + "cost": {"food": 0, "wood": 300, "stone": 0, "metal": 300}, + "requirements": {"tech": "phase_city"}, + "requirementsTooltip": "Unlocked in City Phase.", + "supersedes": "trade_gain_01", + "icon": "metal_pot.png", + "researchTime": 40, + "tooltip": "Traders +15% gain.", + "modifications": [{"value": "Trader/GainMultiplier", "multiply": 1.15}], + "affects": ["Trader"], + "soundComplete": "interface/alarm/alarm_upgradearmory.xml" +} diff --git a/binaries/data/mods/public/simulation/helpers/TraderGain.js b/binaries/data/mods/public/simulation/helpers/TraderGain.js index 975a87964f..35275a21c8 100644 --- a/binaries/data/mods/public/simulation/helpers/TraderGain.js +++ b/binaries/data/mods/public/simulation/helpers/TraderGain.js @@ -1,5 +1,5 @@ // This constant used to adjust gain value depending on distance -const DISTANCE_FACTOR = 1 / 110; +const DISTANCE_FACTOR = 1 / 115; // Additional gain (applying to each market) for trading performed between markets of different players, in percents const INTERNATIONAL_TRADING_ADDITION = 25; @@ -22,7 +22,12 @@ function CalculateTraderGain(firstMarket, secondMarket, template, trader) // We calculate gain as square of distance to encourage trading between remote markets gain.traderGain = Math.pow(distance * DISTANCE_FACTOR, 2); if (template && template.GainMultiplier) - gain.traderGain *= template.GainMultiplier; + { + if (trader) + gain.traderGain *= ApplyValueModificationsToEntity("Trader/GainMultiplier", +template.GainMultiplier, trader); + else // called from the gui with modifications already applied + gain.traderGain *= template.GainMultiplier; + } gain.traderGain = Math.round(gain.traderGain); // If trader undefined, the trader owner is supposed to be the same as the first market if (trader) diff --git a/binaries/data/mods/public/simulation/templates/template_structure_economic_market.xml b/binaries/data/mods/public/simulation/templates/template_structure_economic_market.xml index eef49fdf4a..9f23b9ae5a 100644 --- a/binaries/data/mods/public/simulation/templates/template_structure_economic_market.xml +++ b/binaries/data/mods/public/simulation/templates/template_structure_economic_market.xml @@ -50,8 +50,11 @@ 0.7 - speed_trader_01 unlock_shared_los + trade_convoys_speed + trade_convoys_armor + trade_gain_01 + trade_gain_02 units/{civ}_support_trader