Ticket #3943: templateTradingGain3943.diff

File templateTradingGain3943.diff, 7.3 KB (added by LittleDev, 8 years ago)
  • binaries/data/mods/public/gui/credits/texts/programming.json

    diff --git a/binaries/data/mods/public/gui/credits/texts/programming.json b/binaries/data/mods/public/gui/credits/texts/programming.json
    index d0490d7..0f45fcd 100644
    a b  
    102102            {"nick": "kingbasil", "name": "Giannis Fafalios"},
    103103            {"nick": "lafferjm", "name": "Justin Lafferty"},
    104104            {"nick": "leper", "name": "Georg Kilzer"},
     105            {"nick": "LittleDev"},
    105106            {"nick": "livingaftermidnight", "name": "Will Dull"},
    106107            {"nick": "Louhike"},
    107108            {"nick": "lsdh"},
  • binaries/data/mods/public/simulation/ai/common-api/entity.js

    diff --git a/binaries/data/mods/public/simulation/ai/common-api/entity.js b/binaries/data/mods/public/simulation/ai/common-api/entity.js
    index d0fcac2..926b1c4 100644
    a b m.Template = m.Class({  
    544544
    545545    visionRange: function() {
    546546        return +this.get("Vision/Range");
     547    },
     548
     549    gainMultiplier: function() {
     550        if (!this.get("Trader"))
     551            return undefined;
     552        return +this.get("Trader/GainMultiplier");
    547553    }
    548554});
    549555
    m.Entity = m.Class({  
    912918        return this;
    913919    },
    914920
    915      research: function(template) {
     921    research: function(template) {
    916922        Engine.PostCommand(PlayerID,{ "type": "research", "entity": this.id(), "template": template });
    917923        return this;
    918924    },
  • binaries/data/mods/public/simulation/ai/common-api/gamestate.js

    diff --git a/binaries/data/mods/public/simulation/ai/common-api/gamestate.js b/binaries/data/mods/public/simulation/ai/common-api/gamestate.js
    index f95b8b3..a1b69df 100644
    a b m.GameState.prototype.isEntityLimitReached = function(category)  
    803803    return (this.playerData.entityCounts[category] >= this.playerData.entityLimits[category]);
    804804};
    805805
     806m.GameState.prototype.getTraderTemplatesGains = function()
     807{
     808    let shipMechantTemplateName = this.applyCiv("units/{civ}_ship_merchant");
     809    let supportTraderTemplateName = this.applyCiv("units/{civ}_support_trader");
     810    let shipMerchantTemplate = (this.isDisabledTemplates(shipMechantTemplateName) ? undefined : this.getTemplate(shipMechantTemplateName));
     811    let supportTraderTemplate = (this.isDisabledTemplates(supportTraderTemplateName) ? undefined : this.getTemplate(supportTraderTemplateName));
     812    return {
     813        "navalGainMultiplier" : (shipMerchantTemplate ? shipMerchantTemplate.gainMultiplier() : undefined),
     814        "landGainMultiplier" : (supportTraderTemplate ? supportTraderTemplate.gainMultiplier() : undefined)
     815    };
     816};
     817
    806818return m;
    807819
    808820}(API3);
  • binaries/data/mods/public/simulation/ai/petra/config.js

    diff --git a/binaries/data/mods/public/simulation/ai/petra/config.js b/binaries/data/mods/public/simulation/ai/petra/config.js
    index e9ae59f..8770145 100644
    a b m.Config = function(difficulty)  
    3434        "provisionFields" : 2
    3535    };
    3636
    37     this.distUnitGain = 115*115;   // TODO  take it directly from helpers/TraderGain.js
    38 
    3937    // Note: attack settings are set directly in attack_plan.js
    4038    // defense
    4139    this.Defense =
  • binaries/data/mods/public/simulation/ai/petra/headquarters.js

    diff --git a/binaries/data/mods/public/simulation/ai/petra/headquarters.js b/binaries/data/mods/public/simulation/ai/petra/headquarters.js
    index 27e4d54..0be2980 100644
    a b m.HQ.prototype.findMarketLocation = function(gameState, template)  
    10481048    var width = this.territoryMap.width;
    10491049    var cellSize = this.territoryMap.cellSize;
    10501050
     1051    let traderTemplatesGains = gameState.getTraderTemplatesGains();
     1052
    10511053    for (var j = 0; j < this.territoryMap.length; ++j)
    10521054    {
    10531055        // do not try on the border of our territory
    m.HQ.prototype.findMarketLocation = function(gameState, template)  
    10621064        var index = gameState.ai.accessibility.landPassMap[i];
    10631065        if (!this.landRegions[index])
    10641066            continue;
    1065 
    10661067        var pos = [cellSize * (j%width+0.5), cellSize * (Math.floor(j/width)+0.5)];
    10671068        // checking distances to other markets
    1068         var maxDist = 0;
     1069        let maxVal = 0;
     1070        let gainMultiplier;
    10691071        for (let market of markets)
    10701072        {
    10711073            if (isNavalMarket && market.hasClass("NavalMarket"))
    10721074            {
    1073                 // TODO check that there are on the same sea. For the time being, we suppose it is true
     1075                if (this.navalManager.getDockIndex(gameState, market, true) !== gameState.ai.accessibility.getAccessValue(pos, true))
     1076                    continue;
     1077                gainMultiplier = traderTemplatesGains.navalGainMultiplier;
    10741078            }
    1075             else if (gameState.ai.accessibility.getAccessValue(market.position()) != index)
     1079            else if (gameState.ai.accessibility.getAccessValue(market.position()) === index)
     1080                gainMultiplier = traderTemplatesGains.landGainMultiplier;
     1081            else
     1082                continue;
     1083            if (gainMultiplier === undefined)
    10761084                continue;
    1077             let dist = API3.SquareVectorDistance(market.position(), pos);
    1078             if (dist > maxDist)
    1079                 maxDist = dist;
     1085            let val = API3.SquareVectorDistance(market.position(), pos) * gainMultiplier;
     1086            if (val > maxVal)
     1087                maxVal = val;
    10801088        }
    1081         if (maxDist == 0)
     1089        if (maxVal === 0)
    10821090            continue;
    1083         if (bestVal !== undefined && maxDist < bestVal)
     1091        if (bestVal !== undefined && maxVal < bestVal)
    10841092            continue;
    10851093        if (this.isDangerousLocation(gameState, pos, halfSize))
    10861094            continue;
    1087         bestVal = maxDist;
     1095        bestVal = maxVal;
    10881096        bestIdx = i;
    10891097        bestJdx = j;
    10901098    }
    m.HQ.prototype.findMarketLocation = function(gameState, template)  
    10941102
    10951103    if (bestVal === undefined)  // no constraints. For the time being, place it arbitrarily by the ConstructionPlan
    10961104        return [-1, -1, -1, 0];
    1097 
    1098     var expectedGain = Math.round(bestVal / this.Config.distUnitGain);
     1105    let expectedGain = Math.round(bestVal / 10000);
    10991106    if (this.Config.debug > 1)
    11001107        API3.warn("this would give a trading gain of " + expectedGain);
    11011108    // do not keep it if gain is too small, except if this is our first BarterMarket
  • binaries/data/mods/public/simulation/ai/petra/tradeManager.js

    diff --git a/binaries/data/mods/public/simulation/ai/petra/tradeManager.js b/binaries/data/mods/public/simulation/ai/petra/tradeManager.js
    index fc510d8..1f14069 100644
    a b m.TradeManager.prototype.checkRoutes = function(gameState, accessIndex)  
    390390    var potential = { "gain": 0 };
    391391    var bestIndex = { "gain": 0 };
    392392    var bestLand  = { "gain": 0 };
     393
     394    let traderTemplatesGains = gameState.getTraderTemplatesGains();
     395
    393396    for (var m1 of market1)
    394397    {
    395398        if (!m1.position())
    m.TradeManager.prototype.checkRoutes = function(gameState, accessIndex)  
    408411            var sea = (sea1 && sea1 == sea2) ? sea1 : undefined;
    409412            if (!land && !sea)
    410413                continue;
    411             var gain = Math.round(API3.SquareVectorDistance(m1.position(), m2.position()) / this.Config.distUnitGain);
     414            let gainMultiplier;
     415            if (land && traderTemplatesGains.landGainMultiplier)
     416                gainMultiplier = traderTemplatesGains.landGainMultiplier;
     417            else if (sea && traderTemplatesGains.navalGainMultiplier)
     418                gainMultiplier = traderTemplatesGains.navalGainMultiplier;
     419            else
     420                continue;
     421            let gain = Math.round(API3.SquareVectorDistance(m1.position(), m2.position()) * gainMultiplier / 10000);
    412422            if (gain < this.minimalGain)
    413423                continue;
    414424            if (m1.foundationProgress() === undefined && m2.foundationProgress() === undefined)