Page 1 of 1

Decider combinator configuration question

Posted: Wed Nov 16, 2016 7:01 pm
by Tritano
I try to configure a decider combinator in a mod as an auxiliary entity. What the code does is create a decider-combinator and configure it's control behaviour. According to the game's html documentation the control behaviour parameters are read/write. Unfortunately the behaviour does not change, as the log below shows and opening the GUI of the entity proofs.

In a nutshell the code is:

Code: Select all

local combinator = entity.surface.create_entity({ name = "decider-combinator",
    position = { entity.position.x + 1, entity.position.y } , force = entity.force })

log("controlBehavior before: "..inspect(combinator.get_or_create_control_behavior().parameters))

combinator.get_or_create_control_behavior().parameters =
  { first_signal = { type="item", name="iron-plate"}, constant = 100, comparator = "<",
    output_signal = { type="item", name="copper-plate"}, copy_count_from_input = false }

log("controlBehavior after: "..inspect(combinator.get_or_create_control_behavior().parameters))
The code above is run in an on_built_entity event when the primary entity is placed.
The log output is:
30.370 Script control.lua:46: controlBehavior before: {
parameters = { comparator = ">", constant = 0, copy_count_from_input = true,
first_signal = { type = "item" },
output_signal = { type = "item" }
}
}
30.370 Script control.lua:54: controlBehavior after: {
parameters = { comparator = ">", constant = 0, copy_count_from_input = true,
first_signal = { type = "item" },
output_signal = { type = "item" }
}
}
I would be very grateful for tips on what I am doing wrong.

Re: Decider combinator configuration question

Posted: Wed Nov 16, 2016 8:35 pm
by Choumiko
Try

Code: Select all

combinator.get_or_create_control_behavior().parameters.parameters =
  { first_signal = { type="item", name="iron-plate"}, constant = 100, comparator = "<",
    output_signal = { type="item", name="copper-plate"}, copy_count_from_input = false }
Yes, double parameters :roll: A bit confusing and hard getting used to :D

Re: Decider combinator configuration question

Posted: Wed Nov 16, 2016 9:17 pm
by Tritano
I have seen the double parameters used with another entity type, but unfortunately it does not work for the decider-combinator.

update

I made a tiny demo mod to easier reproduce it.
Set a wooden chest and get a free (but unconfigured) decider combinator.
data.lua is empty, and control.lua is very simple:

Code: Select all

require "inspect"

function onBuildEntity(event)
  local entity = event.created_entity
  log("onBuildEntity " .. entity.name)
  
  if entity.name == "wooden-chest" then
    local combinator = entity.surface.create_entity({ name = "decider-combinator",
        position = { entity.position.x + 1, entity.position.y },
        force = entity.force })

    combinator.get_or_create_control_behavior().parameters.parameters =
        { first_signal = { type="item", name="iron-plate"}, 
          constant = 100, comparator = "<", copy_count_from_input = false,
          output_signal = { type="item", name="copper-plate"} }

    log("parameters: " .. inspect(combinator.get_or_create_control_behavior().parameters.parameters))
  end
end

script.on_event(defines.events.on_built_entity, onBuildEntity)
script.on_event(defines.events.on_robot_built_entity, onBuildEntity)

Re: Decider combinator configuration question

Posted: Fri Nov 18, 2016 5:04 pm
by Tritano
I am still hoping that somebody has a hint for me.
As it stands now it looks to me like a bug in the game :?

Re: Decider combinator configuration question

Posted: Fri Nov 18, 2016 5:26 pm
by gheift
Tritano wrote:I have seen the double parameters used with another entity type, but unfortunately it does not work for the decider-combinator.

update

I made a tiny demo mod to easier reproduce it.
Set a wooden chest and get a free (but unconfigured) decider combinator.
data.lua is empty, and control.lua is very simple:

Code: Select all

require "inspect"

function onBuildEntity(event)
  local entity = event.created_entity
  log("onBuildEntity " .. entity.name)
  
  if entity.name == "wooden-chest" then
    local combinator = entity.surface.create_entity({ name = "decider-combinator",
        position = { entity.position.x + 1, entity.position.y },
        force = entity.force })

    combinator.get_or_create_control_behavior().parameters.parameters =
        { first_signal = { type="item", name="iron-plate"}, 
          constant = 100, comparator = "<", copy_count_from_input = false,
          output_signal = { type="item", name="copper-plate"} }

    log("parameters: " .. inspect(combinator.get_or_create_control_behavior().parameters.parameters))
  end
end

script.on_event(defines.events.on_built_entity, onBuildEntity)
script.on_event(defines.events.on_robot_built_entity, onBuildEntity)
Use the following:

Code: Select all

combinator.get_or_create_control_behavior().parameters = {
parameters =
        { first_signal = { type="item", name="iron-plate"}, 
          constant = 100, comparator = "<", copy_count_from_input = false,
          output_signal = { type="item", name="copper-plate"} }
}

Re: Decider combinator configuration question

Posted: Fri Nov 18, 2016 7:36 pm
by Tritano
Thanks a lot, this did the trick :D