Exemple #1
0
    reserveBoosts: function(room, body, boostAction, replaceWithToughs) {
        //console.log("reserveBoosts",boostAction);
        var boostLabs = [];
        var labs = room.find(FIND_STRUCTURES, {
            filter: function(l) {
                var flag = Game.flags[l.id];
                if (!flag) return false;
                return l.structureType == STRUCTURE_LAB
                    && flag.secondaryColor != COLOR_WHITE
                    && l.mineralAmount > LAB_BOOST_MINERAL* gc.BOOST_RESERVE
                    && l.energy  > LAB_BOOST_ENERGY * gc.BOOST_RESERVE;
            }
        });
        if (labs.length > 0 && body) {
            var newBody = body.slice(0);
            var actionsAdded = [];
            //console.log(newBody,"reserveBoosts",labs);
            for ( var i = 0 ; i < labs.length ; i++ ) {
                var flag = Game.flags[labs[i].id];
                var resource = labColours.resource(flag.color, flag.secondaryColor);
                var maxBoosts = Math.floor(Math.min(labs[i].mineralAmount/LAB_BOOST_MINERAL,
                                                     labs[i].energy/LAB_BOOST_ENERGY));
                var boostPart = _.findKey(BOOSTS,resource);
                var action = _.findKey( BOOSTS[boostPart][resource] );
                var multiplyer = BOOSTS[boostPart][resource][action];
                //console.log(flag,"flag maxBoosts",maxBoosts,"resource",resource,"boostPart",
                //    boostPart,"action",action,"multiplyer",multiplyer);
                if (boostAction.indexOf(action)  != -1
                    &&  body.indexOf(boostPart) != -1) {

                    var numParts = gf.countValues(body, boostPart);
                    var partsBoosted = Math.min(maxBoosts,  numParts - Math.ceil(numParts/multiplyer));
                    //console.log("numParts",numParts,"partsBoosted",partsBoosted);
                    if ( actionsAdded.indexOf(action) == -1 ) {
                        for ( var j = 0 ; j < partsBoosted ; j++ ) {
                            var index = newBody.indexOf(boostPart);
                            //console.log(j,"in for index",index,"newBody",newBody)  ;
                            newBody.splice(index,1);
                        }
                    }
                    actionsAdded.push(action);
                    boostLabs.push(labs[i].id);
                } // if
            } // for
            if (boostLabs.length > 0) {
                return { body : newBody, boostLabs : boostLabs };
            }
        }
        if (replaceWithToughs && body && newBody) {
            var toughs = body.length - newBody.length;
            for ( var k = 0 ; k < toughs ; k++ ) {
                newBody.unshift(TOUGH);
            }
        }
    }
Exemple #2
0
    move: function(terminal) {
        for ( var flagName in Game.flags) {
            if (Game.flags[flagName].memory.type == gc.FLAG_LAB
                && Game.flags[flagName].secondaryColor == COLOR_WHITE
                && Game.flags[flagName].color != COLOR_WHITE) {

                var resourceId = labColours.resource(Game.flags[flagName].color, COLOR_WHITE);
                //console.log(terminal,"fond lab resource",resourceId,terminal.store[resourceId]);
                if (terminal.store[resourceId] > 5000) {
                    var lab = Game.getObjectById(flagName);
                    if (lab.mineralAmount < gc.LAB_REFILL_MINERAL_THRESHOLD) {
                       // console.log(terminal,"fond lab resource",resourceId,"has resouce",terminal.store[resourceId]);
                        if (!this.roomHasResource(lab.room, resourceId)
                            && this.roomHasTerminalWithSpace(lab.room)) {
                            var result = terminal.send(resourceId, gc.TERMINAL_TERMINAL_SEND_AMOUNT, lab.room.name);
                            console.log(terminal,"send resourceId",resourceId,"result",result);
                        }
                    }
                }
            }
        }
    },