Page 4 of 5

Re: [0.12.2] Evolution | Alien Manipulation

Posted: Mon Aug 17, 2015 7:21 pm
by ZagatoMKR
Great mod, thanks! One question thought, how do you pick up small/medium/etc. worms? Would be a waste to just kill them, especially if you have a lot of them.

Cheers.

Re: [0.12.2] Evolution | Alien Manipulation

Posted: Mon Aug 17, 2015 8:00 pm
by darkshadow1809
unfortunately theres no way to pick up :( I couldnt code it as minable either since its an actual AI controlled. "thing" :P Would also involve a bug when just picking it up dropping it back down resets it to full health.

so unfortunately you'd have to kill them off;(

Re: [MOD 0.12.2+] Evolution | Alien Manipulation

Posted: Sun Aug 30, 2015 4:10 am
by keyten
Really nice mod. But I have some questions.

I am playing your modpack V5. I had rushed to Mind hive and had built 5 bitter hives. Now bitters are running around my base, screaming at each other and randomly explode filling conveyers with corpses and artifacts while spaming alarms. Is this behavior intended?

Re: [MOD 0.12.2+] Evolution | Alien Manipulation

Posted: Sun Aug 30, 2015 12:29 pm
by Kayser
keyten wrote:Really nice mod. But I have some questions.

I am playing your modpack V5. I had rushed to Mind hive and had built 5 bitter hives. Now bitters are running around my base, screaming at each other and randomly explode filling conveyers with corpses and artifacts while spaming alarms. Is this behavior intended?
LOL. You just made my day :)

Re: [MOD 0.12.2+] Evolution | Alien Manipulation

Posted: Tue Sep 01, 2015 12:00 pm
by darkshadow1809
keyten wrote:Really nice mod. But I have some questions.

I am playing your modpack V5. I had rushed to Mind hive and had built 5 bitter hives. Now bitters are running around my base, screaming at each other and randomly explode filling conveyers with corpses and artifacts while spaming alarms. Is this behavior intended?
Been trying to fix this. unfortunately factorio has no real options for AI behavior so i discontinued this mod :(

Re: [MOD 0.12.2+] Evolution | Alien Manipulation

Posted: Wed Nov 11, 2015 7:58 pm
by Andaren
I encounter an error when starting a new world on version 0.12.16
"__Evolution__/control.lua:8: attempt to index global 'game' (a nil value)"

Re: [MOD 0.12.2+] Evolution | Alien Manipulation

Posted: Thu Nov 12, 2015 2:35 am
by vedrit
Andaren wrote:I encounter an error when starting a new world on version 0.12.16
"__Evolution__/control.lua:8: attempt to index global 'game' (a nil value)"
Quick fix is to go and change those error-inducing 'game' to 'script'
Beyond that, you're probably not going to get much help because...
darkshadow1809 wrote:... i discontinued this mod :(

Re: [MOD 0.12.2+] Evolution | Alien Manipulation

Posted: Wed Jan 13, 2016 6:10 pm
by donoya
I tried this mod a few months back and IT WAS AWESOME! I would really like to see the dytech biters and especially the mechanical biter. The mechanical biter sounds really, really cool. Anyways, keep up the good work. If there's any way to support you without needing to spend money, I'd be happy to do so.

Edit: I just noticed that you said you'd be discontinuing it. Why would you discontinue it?! It's such a great mod! What about the mechanical biter? Please reconsider!

Re: [MOD 0.12.2+] Evolution | Alien Manipulation

Posted: Sat Mar 05, 2016 10:38 pm
by DaysofKnight
Getting and error that makes no sense to me
"Unknown key:"Error while running the on_load:_ _Evolution_ _/control.lua:18: attempt to index global 'game' (a nil value)" "
From what I've seen all over Factorio mods when trying to run 0.11.x mods in 0.12.x is to swap the game.on code for script.on. I did this with the control.lua file for Evolution - Alien Manipulation mod already. So you can see my confusion..

Re: [MOD 0.12.2+] Evolution | Alien Manipulation

Posted: Sat Mar 05, 2016 10:58 pm
by daniel34
DaysofKnight wrote:Getting and error that makes no sense to me
"Unknown key:"Error while running the on_load:_ _Evolution_ _/control.lua:18: attempt to index global 'game' (a nil value)" "
From what I've seen all over Factorio mods when trying to run 0.11.x mods in 0.12.x is to swap the game.on code for script.on. I did this with the control.lua file for Evolution - Alien Manipulation mod already. So you can see my confusion..
Are you sure you got all of them?
control.lua:18: attempt to index global 'game'
Check line 18 again.

Re: [MOD 0.12.2+] Evolution | Alien Manipulation

Posted: Sun Mar 06, 2016 1:07 am
by DaysofKnight
daniel34 wrote:Are you sure you got all of them?
control.lua:18: attempt to index global 'game'
Check line 18 again.
I used the "Replace all" thing in notepad, I got'em all. I even scrolled though the whole thing myself, there's no game.on's in the control file. I even found the load line, there's a script.on there

EDIT: Unless you can ind it, I don't know lua, or any coding for that matter. So I wouldn't even know what line 18 is, or what is considered "line 18".

Code: Select all

require "defines"
local update_com_count = 80
local agro_area_rad = 40
local call_back_area_rad = agro_area_rad + 15
local max_unit_count = 20


script.on_init(function()
	if global.evolution == nil then
      global.evolution = {}
   end
end)

script.on_load(function()
   if global.evolution == nil then
      global.evolution = {}
   end
    for i = 1, #game.players, 1 do
        if game.players[i].force.technologies["Hive-mind"].researched then
           game.players[i].force.recipes["attractor-on2"].enabled = true
        end
    end
end)

script.on_event(defines.events.on_tick, function(event)
	if event.tick % update_com_count == 0 then
		for index, player in ipairs(game.players) do
			if player.character then
				UpdateUnitsCommands(index)		
			end
		end
	end
end)

function UpdateUnitsCommands(player_index)
	local player = game.players[player_index].character
	local pos = player.position
    local aggression_area = {{pos.x - agro_area_rad, pos.y - agro_area_rad}, {pos.x + agro_area_rad, pos.y + agro_area_rad}}
	if not player.surface.valid then return end
	local targets = player.surface.find_entities(aggression_area)
	local min_dist = agro_area_rad + 10;
	local closest_index = -1
	local surface = player.surface
	
	for index, target in ipairs(targets) do
		if target.health then
			if target.force == game.forces.enemy and target.type ~= "turret" and target.type ~= "unit" then
				local dist = GetDistance(target.position, pos)			
				if min_dist > dist then
					min_dist = dist
					closest_index = index
				end
			end
		end
	end
	
	local unit_count = 0
	if closest_index == -1 then
		
		local attOn = game.players[player_index].get_item_count("attractor-on") 
		local attOff = game.players[player_index].get_item_count("attractor-off") 
		local lastState = nil
		if global.evolution[game.players[player_index].name] and global.evolution[game.players[player_index].name].lastState then
			lastState = global.evolution[game.players[player_index].name].lastState
		else
			if global.evolution[game.players[player_index].name] == nil then
				global.evolution[game.players[player_index].name] = {}
			end
			global.evolution[game.players[player_index].name].lastState = nil
		end
		
		if attOn > 0 and attOff == 0 then
			if attOn > 1 then
				game.players[player_index].removeitem({name="attractor-on", count=(attOn - 1)})
			end
			lastState = "on"
		elseif attOn == 0 and attOff > 0 then
			if attOff > 1 then
				game.players[player_index].removeitem({name="attractor-off", count=(attOff - 1)})
			end
			lastState = "off"
		elseif attOn > 0 and attOff > 0 then
			if lastState ~= nil and lastState == "off" then
				game.players[player_index].removeitem({name="attractor-off", count=attOff})
				if attOn > 1 then
					game.players[player_index].removeitem({name="attractor-on", count=(attOn - 1)})
				end
				lastState = "on"
			else
				game.players[player_index].removeitem({name="attractor-on", count=attOn})
				if attOn > 1 then
					game.players[player_index].removeitem({name="attractor-on", count=(attOn - 1)})
				end
				lastState = "off"
			end
		else
			lastState = "off"
		end
		global.evolution[game.players[player_index].name].lastState = lastState
		
		if lastState == "off" then return end
		local call_back_area = {{pos.x -  call_back_area_rad, pos.y -  call_back_area_rad}, {pos.x +  call_back_area_rad, pos.y +  call_back_area_rad}}
		local biters = surface.find_entities_filtered{area = call_back_area, type = "unit"}
		for index, biter in ipairs(biters) do
			if biter.force == (player.force) then
				biter.set_command({type = defines.command.go_to_location, destination = pos, radius = 10, distraction = defines.distraction.byanything});	
				unit_count = unit_count + 1
				
			end
			if unit_count > max_unit_count then return end
		end	
	else
		local call_back_area = {{pos.x -  call_back_area_rad, pos.y -  call_back_area_rad}, {pos.x +  call_back_area_rad, pos.y +  call_back_area_rad}}
		local biters = player.surface.find_entities_filtered{area = call_back_area, type = "unit"}
		for index, biter in ipairs(biters) do
			if biter.force == player.force then
				biter.set_command({type = defines.command.attack, target = targets[closest_index], distraction = defines.distraction.byanything});
				unit_count = unit_count + 1					
			end
			if unit_count > max_unit_count then return end
		end	
	end
end

function GetDistance(pos1 , pos2)
	return math.sqrt((pos1.x - pos2.x)^2 + (pos1.y - pos2.y)^2)
end
There's the file if you wanna look it over

Re: [MOD 0.12.2+] Evolution | Alien Manipulation

Posted: Sun Mar 06, 2016 12:56 pm
by orzelek
In this case follow the error command exactly :)

There is a script.on_load function there that has reference to game.player - thats not allowed anymore.
In on_load you can't reference game - that was one of changes of the patch also.

On the other hand.. this mod is obsolete and content from it should be in Natural Evolution mod.

Re: [MOD 0.12.2+] Evolution | Alien Manipulation

Posted: Sun Mar 06, 2016 3:53 pm
by DaysofKnight
orzelek wrote:In this case follow the error command exactly :)

There is a script.on_load function there that has reference to game.player - thats not allowed anymore.
In on_load you can't reference game - that was one of changes of the patch also.

On the other hand.. this mod is obsolete and content from it should be in Natural Evolution mod.
Natural Evolution doesn't look as appealing, as it's main focus point seems to be PvP oriented.
How do I fix the line you mentioned? Show me the code that needs replacing and what it needs to be replaced with.

Again, not a coder in anyway, so I'm just winging it here. Would appreciate help trying to make it work.

Edit: Actually, I seem to have made it work on my own. I deleted the code for the game.player reference. Loaded up just fine (On a new world. Gonna test if having Evolution entities makes a difference).

Re: [MOD 0.12.2+] Evolution | Alien Manipulation

Posted: Sun Mar 06, 2016 4:34 pm
by Nukerman9
So I see the mod is giving some issues in the above posts, I think it still holds true now...http://puu.sh/nwWRk/dd7c50e81d.jpg

And what I don't understand is that the mods was working once before...I was to able to use everything and such, And i'd like to mention I don't think the ore gen works with Train Outposts...Never did do much to any testing but yea it doesnt seem like they work together.

Re: [MOD 0.12.2+] Evolution | Alien Manipulation

Posted: Sun Mar 06, 2016 4:49 pm
by DaysofKnight
Nukerman9 wrote:So I see the mod is giving some issues in the above posts, I think it still holds true now...http://puu.sh/nwWRk/dd7c50e81d.jpg

And what I don't understand is that the mods was working once before...I was to able to use everything and such, And i'd like to mention I don't think the ore gen works with Train Outposts...Never did do much to any testing but yea it doesnt seem like they work together.
You're having the same problem I had. All I did to make it work was -

Code: Select all

script.on_load(function()
   if global.evolution == nil then
      global.evolution = {}
   end
    for i = 1, #game.players, 1 do
        if game.players[i].force.technologies["Hive-mind"].researched then
           game.players[i].force.recipes["attractor-on2"].enabled = true
        end
    end
end)
Find this in your control.lua file, should be near the top.
Delete " for i = 1, #game.players, 1 do
if game.players.force.technologies["Hive-mind"].researched then
game.players.force.recipes["attractor-on2"].enabled = true
end "
and it should work. I really don't know what it does, I'm not a coder. But it made my game load fine

Re: [MOD 0.12.2+] Evolution | Alien Manipulation

Posted: Sun Mar 06, 2016 5:17 pm
by Nukerman9
DaysofKnight wrote:
Nukerman9 wrote:So I see the mod is giving some issues in the above posts, I think it still holds true now...http://puu.sh/nwWRk/dd7c50e81d.jpg

And what I don't understand is that the mods was working once before...I was to able to use everything and such, And i'd like to mention I don't think the ore gen works with Train Outposts...Never did do much to any testing but yea it doesnt seem like they work together.
You're having the same problem I had. All I did to make it work was -

Code: Select all

script.on_load(function()
   if global.evolution == nil then
      global.evolution = {}
   end
    for i = 1, #game.players, 1 do
        if game.players[i].force.technologies["Hive-mind"].researched then
           game.players[i].force.recipes["attractor-on2"].enabled = true
        end
    end
end)
Find this in your control.lua file, should be near the top.
Delete " for i = 1, #game.players, 1 do
if game.players.force.technologies["Hive-mind"].researched then
game.players.force.recipes["attractor-on2"].enabled = true
end "
and it should work. I really don't know what it does, I'm not a coder. But it made my game load fine


Yup that seemed to fix it, and yes to the mod developer, Doesn't look like Train Ouposts generates the Alien Artifact ore.

Other than the few names that kinda bug me for not being capitalized, Great mod over all (I'm just a tab OCD when it comes to names) And yes, Thanks to you DaysofKnight for the fix

Re: [MOD 0.12.2+] Evolution | Alien Manipulation

Posted: Mon Mar 07, 2016 12:00 am
by Nukerman9
OK I know I'm repeating this, but the mod worked once i started a new map and everything worked i started playing with the mod some, saved it, quit game for a bit loaded it again but it gave the same error control.lua:18: attempt to index a nil value... Always does this after i save then try loading the game. This is confusing...

Re: [MOD 0.12.2+] Evolution | Alien Manipulation

Posted: Fri Mar 11, 2016 4:33 am
by Nukerman9
OK so I've been messing around with a friend who is familiar with Lua, and he was saying how this bit...

Code: Select all

    for i = 1, game.players, 1 do
        if game.players[i].force.technologies["Hive-mind"].researched then
           game.players[i].force.recipes["attractor-on2"].enabled = true
        end
    end
Is a loop i guess? Constantly checking or something, so i got rid of it, started up the game went into my world just fine, tested around it worked and i was able to research stuff and use it, i closed the game after saving it and it still worked. Sooo yea... Delete that bit of code EXCLUSIVELY. And the mod should then work? If it doesn't then i have no idea.

Re: [MOD 0.12.2+] Evolution | Alien Manipulation

Posted: Fri Mar 11, 2016 7:22 pm
by DaysofKnight
Nukerman9 wrote:OK so I've been messing around with a friend who is familiar with Lua, and he was saying how this bit...

Code: Select all

    for i = 1, game.players, 1 do
        if game.players[i].force.technologies["Hive-mind"].researched then
           game.players[i].force.recipes["attractor-on2"].enabled = true
        end
    end
Is a loop i guess? Constantly checking or something, so i got rid of it, started up the game went into my world just fine, tested around it worked and i was able to research stuff and use it, i closed the game after saving it and it still worked. Sooo yea... Delete that bit of code EXCLUSIVELY. And the mod should then work? If it doesn't then i have no idea.
Isn't that exactly what I said? Albeit missing that extra "end", but that's literally exactly what I said...

Re: [MOD 0.12.2+] Evolution | Alien Manipulation

Posted: Sun Mar 20, 2016 2:39 pm
by Cyriel
Didn't work for me initially but i've updated the control.lua so it at least activates without problem (had an issue with game.on being outdated. Minor search/replace fixed it) . Haven't tested much in game beyond that point, but it's a start. How many times is this now ?

e2. DaysofKnight's part about removing

Code: Select all

    for i = 1, #game.players, 1 do
        if game.players[i].force.technologies["Hive-mind"].researched then
           game.players[i].force.recipes["attractor-on2"].enabled = true
        end
    end
updated in there as well. (commented out)

Code: Select all

require "defines"
local update_com_count = 80
local agro_area_rad = 40
local call_back_area_rad = agro_area_rad + 15
local max_unit_count = 20


script.on_init(function()
	if global.evolution == nil then
      global.evolution = {}
   end
end)

script.on_load(function()
   if global.evolution == nil then
      global.evolution = {}
   end
--    for i = 1, #game.players, 1 do
--        if game.players[i].force.technologies["Hive-mind"].researched then
--           game.players[i].force.recipes["attractor-on2"].enabled = true
--        end
--    end
end)

script.on_event(defines.events.on_tick, function(event)
	if event.tick % update_com_count == 0 then
		for index, player in ipairs(game.players) do
			if player.character then
				UpdateUnitsCommands(index)		
			end
		end
	end
end)

function UpdateUnitsCommands(player_index)
	local player = game.players[player_index].character
	local pos = player.position
    local aggression_area = {{pos.x - agro_area_rad, pos.y - agro_area_rad}, {pos.x + agro_area_rad, pos.y + agro_area_rad}}
	if not player.surface.valid then return end
	local targets = player.surface.find_entities(aggression_area)
	local min_dist = agro_area_rad + 10;
	local closest_index = -1
	local surface = player.surface
	
	for index, target in ipairs(targets) do
		if target.health then
			if target.force == game.forces.enemy and target.type ~= "turret" and target.type ~= "unit" then
				local dist = GetDistance(target.position, pos)			
				if min_dist > dist then
					min_dist = dist
					closest_index = index
				end
			end
		end
	end
	
	local unit_count = 0
	if closest_index == -1 then
		
		local attOn = game.players[player_index].get_item_count("attractor-on") 
		local attOff = game.players[player_index].get_item_count("attractor-off") 
		local lastState = nil
		if global.evolution[game.players[player_index].name] and global.evolution[game.players[player_index].name].lastState then
			lastState = global.evolution[game.players[player_index].name].lastState
		else
			if global.evolution[game.players[player_index].name] == nil then
				global.evolution[game.players[player_index].name] = {}
			end
			global.evolution[game.players[player_index].name].lastState = nil
		end
		
		if attOn > 0 and attOff == 0 then
			if attOn > 1 then
				game.players[player_index].removeitem({name="attractor-on", count=(attOn - 1)})
			end
			lastState = "on"
		elseif attOn == 0 and attOff > 0 then
			if attOff > 1 then
				game.players[player_index].removeitem({name="attractor-off", count=(attOff - 1)})
			end
			lastState = "off"
		elseif attOn > 0 and attOff > 0 then
			if lastState ~= nil and lastState == "off" then
				game.players[player_index].removeitem({name="attractor-off", count=attOff})
				if attOn > 1 then
					game.players[player_index].removeitem({name="attractor-on", count=(attOn - 1)})
				end
				lastState = "on"
			else
				game.players[player_index].removeitem({name="attractor-on", count=attOn})
				if attOn > 1 then
					game.players[player_index].removeitem({name="attractor-on", count=(attOn - 1)})
				end
				lastState = "off"
			end
		else
			lastState = "off"
		end
		global.evolution[game.players[player_index].name].lastState = lastState
		
		if lastState == "off" then return end
		local call_back_area = {{pos.x -  call_back_area_rad, pos.y -  call_back_area_rad}, {pos.x +  call_back_area_rad, pos.y +  call_back_area_rad}}
		local biters = surface.find_entities_filtered{area = call_back_area, type = "unit"}
		for index, biter in ipairs(biters) do
			if biter.force == (player.force) then
				biter.set_command({type = defines.command.go_to_location, destination = pos, radius = 10, distraction = defines.distraction.byanything});	
				unit_count = unit_count + 1
				
			end
			if unit_count > max_unit_count then return end
		end	
	else
		local call_back_area = {{pos.x -  call_back_area_rad, pos.y -  call_back_area_rad}, {pos.x +  call_back_area_rad, pos.y +  call_back_area_rad}}
		local biters = player.surface.find_entities_filtered{area = call_back_area, type = "unit"}
		for index, biter in ipairs(biters) do
			if biter.force == player.force then
				biter.set_command({type = defines.command.attack, target = targets[closest_index], distraction = defines.distraction.byanything});
				unit_count = unit_count + 1					
			end
			if unit_count > max_unit_count then return end
		end	
	end
end

function GetDistance(pos1 , pos2)
	return math.sqrt((pos1.x - pos2.x)^2 + (pos1.y - pos2.y)^2)
end
TL:DR. Copy paste 2nd codebox, replace entire control.lua with that.