A few Questions

Place to get help with not working mods / modding interface.
Post Reply
kasandraen
Long Handed Inserter
Long Handed Inserter
Posts: 51
Joined: Wed May 27, 2015 11:00 pm
Contact:

A few Questions

Post by kasandraen »

Hi!

I have tried to create a mod that read of the all the ingame generators, and make a primary, secondary and terciary version of them. And then you can use certan keybind to upgrade/downgrade a generators output.

The issues I've gotten into is:
The program crashed when I try to replace the engine, with the error "Lua.entity doesnt contain the key destroy"
the part of the code relevant is:

Code: Select all

script.on_event("decrease-generator-priority", function(event)
	local selection = game.players[event.player_index].selected
	if selection and selection.type == "generator" then
		DecreasePriority(selection, event, force)
	end
end

function DecreasePriority(entity, event, force)
	if string.find(Name, "-Primary") then 
		print("The generator is now secondary")
		entity.destoy()
		if game.prototypes["GP-".. Name .. "-Secondary"] then 
			surface.create_entity({name = "GP-".. Name .. "-Secondary", postition = Pos, direction = Rot, force = force})
		else
			print("Missing the generator")
		end
	end
What am I missing?

and 2.
Is there a way to generate the Locale on the go?
Like can I use

Code: Select all

local file = io.open(__GeneratorPriority__/locale/en/entity.cfg, "w")

and generate appropiate names into it?

Choumiko
Smart Inserter
Smart Inserter
Posts: 1352
Joined: Fri Mar 21, 2014 10:51 pm
Contact:

Re: A few Questions

Post by Choumiko »

There is a typo in DecreasePriority: entity.destoy instead of destroy(), and you might do the destruction just before creating the new entity, so the player does not have to place it again in case the generator is missing :D

2: try using something like the following in your data.lua or data-updates, data-final-fixes where you create the prototypes

Code: Select all

for _, generator in pairs() do
generator.localized_name = {"generator_priority_terciary", "entity-name." .. generator.name}
end
Typos etc aside this should create something like "Steam engine (terciary)" if you have a local in your mod

Code: Select all

generator_priority_terciary = __1__ (terciary)
From viewtopic.php?f=93&t=6847&start=290#p179290

kasandraen
Long Handed Inserter
Long Handed Inserter
Posts: 51
Joined: Wed May 27, 2015 11:00 pm
Contact:

Re: A few Questions

Post by kasandraen »

Choumiko wrote:There is a typo in DecreasePriority: entity.destoy instead of destroy(), and you might do the destruction just before creating the new entity, so the player does not have to place it again in case the generator is missing :D

2: try using something like the following in your data.lua or data-updates, data-final-fixes where you create the prototypes

Code: Select all

for _, generator in pairs() do
generator.localized_name = {"generator_priority_terciary", "entity-name." .. generator.name}
end
Typos etc aside this should create something like "Steam engine (terciary)" if you have a local in your mod

Code: Select all

generator_priority_terciary = __1__ (terciary)
From viewtopic.php?f=93&t=6847&start=290#p179290
Oh my god... I sat here pondering for hours what I had done wrong with the destroy thing... missing a a r......

And ill try the locale thing, thanks! :)

kasandraen
Long Handed Inserter
Long Handed Inserter
Posts: 51
Joined: Wed May 27, 2015 11:00 pm
Contact:

Re: A few Questions

Post by kasandraen »

Well new issue.. It refuses to spawn the new unit, using the surface.create_entity returns "Attempt to index global "surface" a nil" and using what the wiki says, game.get_surface(1).create_entity returns "LuaGameScript doesnt contain key get_surface"... sigh.. whats the point of a wiki if it doesnt explain shit...

Choumiko
Smart Inserter
Smart Inserter
Posts: 1352
Joined: Fri Mar 21, 2014 10:51 pm
Contact:

Re: A few Questions

Post by Choumiko »

The wiki tends to be outdated quite a bit API wise (data/prototype still is mostly fine i think), try this http://lua-api.factorio.com/latest/index.html

and to get the correct surface i'd do something like:

Code: Select all

local surface = entity.surface
entity.destroy()
surface.create_entity(...)

kasandraen
Long Handed Inserter
Long Handed Inserter
Posts: 51
Joined: Wed May 27, 2015 11:00 pm
Contact:

Re: A few Questions

Post by kasandraen »

kasandraen wrote:
Choumiko wrote:There is a typo in DecreasePriority: entity.destoy instead of destroy(), and you might do the destruction just before creating the new entity, so the player does not have to place it again in case the generator is missing :D

2: try using something like the following in your data.lua or data-updates, data-final-fixes where you create the prototypes

Code: Select all

for _, generator in pairs() do
generator.localized_name = {"generator_priority_terciary", "entity-name." .. generator.name}
end
Typos etc aside this should create something like "Steam engine (terciary)" if you have a local in your mod

Code: Select all

generator_priority_terciary = __1__ (terciary)
From viewtopic.php?f=93&t=6847&start=290#p179290
Oh my god... I sat here pondering for hours what I had done wrong with the destroy thing... missing a a r......

And ill try the locale thing, thanks! :)
The mod is fully working now but,I.. dont fully understand the localization partm could you ELI5? :p

Code: Select all

function GeneratorCreatePrimary(base)
	local obj = util.table.deepcopy(base)
	local NAME = base.name
	
	GeneratorCreateItem(data.raw["item"][NAME],"Primary")
	
	obj.name = "GP-".. NAME.. "-Primary"
	obj.energy_source.usage_priority = "primary-output"
	obj.localized_name = {"generator_priority_primary", "entity-name." .. obj.name}
	data.raw["generator"][obj.name] = obj
end
and the locale is:

Code: Select all

[controls]
increase-generator-priority= Increase generator output priority
decrease-generator-priority= Decrease generator output priority
[item-group-name]
GP-Hidden =  
[entity-name]
generator_priority_primary = __1__ (primary)
generator_priority_secondary = __1__ (secondary)
generator_priority_terciary = __1__ (terciary)

Post Reply

Return to “Modding help”