[MOD 0.12.x] Autofill

Topics and discussion about specific mods
Post Reply
PiggyWhiskey
Filter Inserter
Filter Inserter
Posts: 252
Joined: Wed May 13, 2015 5:28 am
Contact:

Re: [MOD 0.12.x] Autofill

Post by PiggyWhiskey »

Deathtopia wrote:snip
Bartimaeus wrote:snip
Bartimaeus, I saw your post on the 0.12.12 release thread but you hadn't updated here.
For information, instead of using "game.get_localised_entity_name" you should use "game.item_prototypes["iron-plate"].localised_name"

https://forums.factorio.com/forum/vie ... =3&t=17189

rk84 wrote:Update 1.3.8 Fixed for for factorio 0.12.11
1.3.8 isn't working for me for some reason. I've unpacked everything to folders because of the localisation bug and don't want more broken mods (going to wait a little bit)
I added a game.print("Boop") onto the script.on_load() and on_init() and neither of them get run in either my old save, or a new save.

Any ideas?

Never mind. I'm an idiot. With the hubbub of 0.12.11 and broken mods I had disabled a couple of them. All I had to do was fix the mod-list.json file.

Bartimaeus
Inserter
Inserter
Posts: 42
Joined: Sun Aug 16, 2015 10:23 am
Contact:

Re: [MOD 0.12.x] Autofill

Post by Bartimaeus »

hah yeah sorry I got so happy once I finally found a solution to fix them all that I forgot to update here.

actually you have to use "game.entity_prototypes["iron-plate"].localised_name" instead of "game.item_prototypes["iron-plate"].localised_name". For some reason the item_prototypes didn't work for me, maybe I just overlooked some other reason why it didn't work.

Also once I fixed the localised_name problem, I ran into another, that once you have no fuel to autofill, it breaks because it is trying to get an item_prototype of liquid-fuel-container ... which does not exist in the prototype table. So I had to wrap it in if block to check the return is not nil. I tried to look deeper into the logic of the mod, but I could not find why does it do that when you have no type of fuel in your inventory.

here is the full solution to fix 1.3.8 for 0.12.12:

control.lua

Code: Select all

require "defines"
require "util"
require "loader"

loader.addItems "settings/vanilla-items"
loader.addSets "settings/vanilla-sets"
loader.addSets "settings/bob-sets"
loader.addSets "settings/farl-sets"

MOD = { NAME = "Autofill", IF = "af" }

--flying text colors
local RED = {r = 0.9}
local GREEN = {g = 0.7}
local YELLOW = {r = 0.8, g = 0.8}

local order = { 
  default = 1,
  opposite = 2,
  itemcount = 3
}

--
--Events
--

script.on_init(function()
  initMod()
end)

script.on_load(function()
  initMod()
end)

script.on_event(defines.events.on_built_entity, function(event)
  local player = game.get_player(event.player_index)
  local global = global
  if global.personalsets[player.name] and global.personalsets[player.name].active then
    local fillset = global.personalsets[player.name][event.created_entity.name] or global.defaultsets[event.created_entity.name]
    if fillset ~= 0 and fillset ~= nil then 
      autoFill(event.created_entity, player, fillset)
    end
  end
end)

script.on_event(defines.events.on_player_created, function(event)
  local username = game.get_player(event.player_index).name
  if global.personalsets[username] == nil then
    global.personalsets[username] = { active = true }
  end
end)

--
--Funtions
--

function autoFill(entity, player, fillset)
  local textpos = entity.position
  local maininv = player.get_inventory(defines.inventory.player_main)

  local vehicleinv
  local ok, err = pcall(function() vehicleinv = player.vehicle.get_inventory(2) end)
  if not ok then vehicleinv = false end

  local quickbar = player.get_inventory(defines.inventory.player_quickbar)
  local array, item, count, groupsize, slots, totalitemcount, color, inserted, removed
  for i=1, #fillset do
    array = fillset[i]
    item = false
    count = 0
    color = RED
    
    if fillset.priority == order.itemcount then -- Pick item with highest count
      for j = 1, #array do
        if vehicleinv then
          if maininv.get_item_count(array[j]) + vehicleinv.get_item_count(array[j]) > count then
            item = array[j]
            count = maininv.get_item_count(array[j]) + vehicleinv.get_item_count(array[j])
          end
        else
          if maininv.get_item_count(array[j]) > count then
            item = array[j]
            count = maininv.get_item_count(array[j])
          end
        end
      end
    elseif fillset.priority == order.opposite then --Pick last available item
      for j = #array, 1, -1 do
        if maininv.get_item_count(array[j]) > 0 or vehicleinv and vehicleinv.get_item_count(array[j]) > 0 then
          item = array[j]
          count = maininv.get_item_count(array[j])
          count = not vehicleinv and count or count + vehicleinv.get_item_count(array[j])
          break
        end
      end
    else --Pick first available item
      for j = 1, #array do
        if maininv.get_item_count(array[j]) > 0 or vehicleinv and vehicleinv.get_item_count(array[j]) > 0 then
          item = array[j]
          count = maininv.get_item_count(array[j])
          count = not vehicleinv and count or count + vehicleinv.get_item_count(array[j])
          break
        end
      end
    end

    if not item or count < 1 then
    	if game.entity_prototypes[array[1]] then
      	text({"autofill.out-of-item",game.entity_prototypes[array[1]].localised_name}, textpos, color)
    	else --invalid-entityname= __1__ is not valid entity name.
    		text({"autofill.out-of-item",array[1]}, textpos, color)
      	textpos.y = textpos.y + 1
    		text({"autofill.invalid-entityname",array[1]}, textpos, color)
    	end
      -- text({"autofill.out-of-item",game.get_localised_item_name(array[1])}, textpos, color)
      textpos.y = textpos.y + 1
    else
      -- Divide stack between group (only items in quickbar are part of group)
      if fillset.group then
        if player.cursor_stack.valid_for_read then
          groupsize = player.cursor_stack.count + 1 
        else
          groupsize = 1
        end
        
        for k,v in pairs(global.personalsets[player.name]) do
          if type(v) == "table" and v.group == fillset.group then
            groupsize = groupsize + quickbar.get_item_count(k)
          end
        end
        for k,v in pairs(global.defaultsets) do
          if not global.personalsets[player.name][k] and v.group == fillset.group then
            groupsize = groupsize + quickbar.get_item_count(k)
          end
        end
        
        totalitemcount = 0
        for j=1, #array do
          totalitemcount = totalitemcount + maininv.get_item_count(array[j])
        end
        if vehicleinv then
          for j=1, #array do
            totalitemcount = totalitemcount + vehicleinv.get_item_count(array[j])
          end
        end
        count = math.max( 1, math.min( count, math.floor(totalitemcount / groupsize) ) )
      end
      
      -- Limit insertion if has limit value
      if fillset.limits and fillset.limits[i] then
        if count > fillset.limits[i] then
          count = fillset.limits[i]
        end
      end

      -- Determine insertable stack count if has slot count
      if fillset.slots and fillset.slots[i] then
        slots = fillset.slots[i]
      else
        slots = 1
      end
      
      if count < game.item_prototypes[item].stack_size * slots then
        color = YELLOW
      else
        count = game.item_prototypes[item].stack_size * slots
        color = GREEN
      end

      -- Insert, count the difference and remove the difference
      inserted = entity.get_item_count(item)
      entity.insert({name=item, count=count})
      inserted = entity.get_item_count(item) - inserted
      if inserted > 0 then
        if vehicleinv then
          removed = vehicleinv.get_item_count(item)
          vehicleinv.remove({name=item, count=inserted})
          removed = removed - vehicleinv.get_item_count(item)
          if inserted > removed then
            maininv.remove({name=item, count=inserted - removed})
          end
        else
          maininv.remove({name=item, count=inserted})
        end
        if removed then
          text({"autofill.insertion-from-vehicle", inserted, game.entity_prototypes[item].localised_name, removed, game.entity_prototypes[player.vehicle.name].localised_name}, textpos, color)
          -- text({"autofill.insertion-from-vehicle", inserted, game.get_localised_item_name(item), removed, game.get_localised_item_name(player.vehicle.name)}, textpos, color)
          textpos.y = textpos.y + 1
        else
        	text({"autofill.insertion", inserted, game.entity_prototypes[item].localised_name}, textpos, color)
          -- text({"autofill.insertion", inserted, game.get_localised_item_name(item)}, textpos, color)
          textpos.y = textpos.y + 1
        end
      end      
    end -- if not item or count < 1 then
  end -- for i=1, #fillset do
end

function getDefaultSets()
  return {
    ["car"] = {priority=order.default, global.fuels.all, global.ammo.bullets },
    ["tank"] = {priority=order.default, slots={2,1,1}, global.fuels.all, global.ammo.bullets, global.ammo.shells },
    ["diesel-locomotive"] = {priority=order.default, slots={1}, global.fuels.high},
    ["boiler"] = {priority=order.default, group="burners", limits={5}, global.fuels.high},
    ["burner-inserter"]= {priority=order.default, group="burners", limits={1}, global.fuels.high},
    ["burner-mining-drill"] = {priority=order.default, group="burners", limits={5}, global.fuels.high},
    ["stone-furnace"] = {priority=order.default, group="burners", limits={5}, global.fuels.high},
    ["steel-furnace"] = {priority=order.default, group="burners", limits={5}, global.fuels.high},
    ["gun-turret"]= {priority=order.default, group="turrets", limits= {10}, global.ammo.bullets }
  } -- if group is defined, then insertable items are divided for buildable
    -- items in quickbar (and in hand).
end

function getLiteSets()
  return {
    ["burner-inserter"]= {priority=order.default, group="burners", limits={1}, global.fuels.high},
    ["gun-turret"]= {priority=order.default, group="turrets", limits= {10}, global.ammo.bullets }
  }
end

function makePersonalLiteSets()
  local personalsets = {}
  for k, v in pairs(global.defaultsets) do
    personalsets[k] = 0
  end

  personalsets["burner-inserter"] = { priority=order.default, group="burners", limits={1}, global.item_arrays["fuels-high"] }
  personalsets["gun-turret"] = { priority=order.default, group="turrets", limits= {10}, global.item_arrays["ammo-bullets"] }

  return personalsets
end

function globalPrint(msg)
  local players = game.players
  msg = { "autofill.msg-template", msg }
  for i=1, #players do
    players[i].print(msg)
  end
end

function initMod(reset)
  if not global.has_init or reset then
    global = {} -- Clears global

    loader.loadBackup()

    global.personalsets = {}
    for k, player in pairs(game.players) do
      global.personalsets[player.name] = { active = true }
    end
    
    global.has_init = true
  end
end

function isValidEntity(name)
  if game.entity_prototypes[name] then
    return true
  end
  
  globalPrint( {"autofill.invalid-entityname", tostring(name)} )
  return false
end

-- This fuction not just verifies the set, but also links strings into item arrays (replaces).
function isValidSet(set)
  if set == nil or set == 0 then
    return true
  elseif type(set) == "table" then
    for i = 1, #set do
    
      if type(set[i]) == "string" then
      
        if global.item_arrays[set[i]] then -- replace name with array
          set[i] = global.item_arrays[set[i]]
        else
          if game.item_prototypes[set[i]] then
            set[i] = { set[i] }
          else
            globalPrint( {"autofill.invalid-itemname", tostring(set[i])} )
            return false
          end
        end
        
      elseif type(set[i]) == "table" then
      
        for j = 1, #set[i] do
          if game.item_prototypes[set[i][j]] == nil then
            globalPrint( {"autofill.invalid-itemname", tostring(set[i][j])} )
            return false
          end
        end
        
      else
        globalPrint( {"autofill.invalid-form"} )
        return false
      end

    end -- for i = 1, #set do
    
    return true
  end
  globalPrint( {"autofill.invalid-parameter"} )
  return false
end

function isValidUser(name)
  local players = game.players
  for i=1, #players do
    if players[i].name == name then
      return players[i].name
    end
  end
  
  if game.player then -- for single player game
    return game.player.name
  end
  
  globalPrint( {"autofill.invalid-username", tostring(name)} )
  return false
end


function printToFile(line, path)
  path = path or "log"
  path = table.concat({ MOD.IF, "/", path, ".txt" })
  game.makefile( path,  line)
end

function text(line, pos, colour) --colour as optional
  local surface = game.get_surface(1)
  if colour == nil then
    surface.create_entity({name="flying-text", position=pos, text=line})
  else
    surface.create_entity({name="flying-text", position=pos, text=line, color=colour})
  end
end

--
-- Mod interface
--

remote.add_interface(MOD.IF,
{
  insertset = function(username, entityname, set)--this fuction is for inserting personal sets.
    username = isValidUser(username)
    if username and isValidEntity(entityname) and isValidSet(set) then
      global.personalsets[username][entityname] = set
    end
  end,
  
  addToDefaultSets = function(entityname, set)
    if isValidEntity(entityname) and isValidSet(set) then
      global.defaultsets[entityname] = set
    end
  end,
  
  getDefaultSets = function()
    local sets = table.deepcopy(global.defaultsets)
    for entity_name, set in pairs(sets) do
      for i=1, #set do
        for name, array in pairs(global.item_arrays) do
          if global.defaultsets[entity_name][i] == array then
            set[i] = name
            break
          end
        end
      end
    end
    return sets
  end,
  
  setDefaultSets = function(sets)
    for entity_name, set in pairs(sets) do
      if not isValidSet(set) then
        return
      end
    end
    global.defaultsets = sets
  end,

  getItemArray = function(name)
    return global.item_arrays[name]
  end,
  
  setItemArray = function(name, new_array)
    if global.item_arrays[name] == nil then
      global.item_arrays[name] = new_array
    else -- replaces content of table without creating new table to maintain referers
      local old_array = global.item_arrays[name]
      local max = #old_array < #new_array and #new_array or #old_array
      for i=1, max do
        old_array[i] = new_array[i]
      end
    end
  end,
  
  globalToFile = function(key)
    key = key or "global"
    if _G[key] then
      printToFile( serpent.block(_G[key]), key )
    else
      globalPrint("Global not found.")
    end
  end,

  resetMod = function()
    initMod(true)
  end,
  
  resetUser = function(setname, username)
    username = isValidUser(username)
    if username then
      if setname == "lite" then
        global.personalsets[username] = makePersonalLiteSets()
      else
        global.personalsets[username] = { active = true }
      end
    end
  end,

  toggleUsage = function(username)
    username = isValidUser(username)
    if username then
      if global.personalsets[username] then
        global.personalsets[username].active = not global.personalsets[username].active
      else
        global.personalsets[username] = { active = true }
      end
    end
  end
})                        

User avatar
rk84
Filter Inserter
Filter Inserter
Posts: 556
Joined: Wed Feb 13, 2013 9:15 am
Contact:

Re: [MOD 0.12.x] Autofill

Post by rk84 »

at some point, I used to update fuel item arrays on load, but thats not possible any more. I'm bit annoyed that onload is only event I can't initialize the mod. I might "delay" the action for ontick, not sure yet.
Test mode
Searching Flashlight
[WIP]Fluid handling expansion
[WIP]PvP gamescript
[WIP]Rocket Express
Autofill: The torch has been pass to Nexela

Colossus
Long Handed Inserter
Long Handed Inserter
Posts: 56
Joined: Mon Mar 10, 2014 8:31 pm
Contact:

Re: [MOD 0.12.x] Autofill

Post by Colossus »

Bartimaeus wrote:*snip* here is the full solution to fix 1.3.8 for 0.12.12: *snip*
I'm getting a crash when I attempt to place a turret
  • Error while running the event handler:
    __autofill__/control.lua:190: attempt to
    index field '?' (a nil value)

User avatar
Anoyomouse
Long Handed Inserter
Long Handed Inserter
Posts: 54
Joined: Tue Oct 20, 2015 12:53 pm
Contact:

Re: [MOD 0.12.x] Autofill

Post by Anoyomouse »

Colossus wrote:
Bartimaeus wrote:*snip* here is the full solution to fix 1.3.8 for 0.12.12: *snip*
I'm getting a crash when I attempt to place a turret
  • Error while running the event handler:
    __autofill__/control.lua:190: attempt to
    index field '?' (a nil value)
Turns out the correct place for items such as bullets is in game.item_prototypes, not entity_prototypes, so the fix is:

Code: Select all

107:    if not item or count < 1 then
108:      text({"autofill.out-of-item", game.item_prototypes[array[1]].localised_name}, textpos, color)
109:      textpos.y = textpos.y + 1

Code: Select all

178:        if removed then
179:          text({"autofill.insertion-from-vehicle", inserted, game.item_prototypes[item].localised_name, removed, player.vehicle.localised_name }, textpos, color)
180:          textpos.y = textpos.y + 1
181:        else
182:          text({"autofill.insertion", inserted, game.item_prototypes[item].localised_name}, textpos, color)
183:          textpos.y = textpos.y + 1
184:        end
If this was in github i'd submit a patch and stuff

hope it helps
Hacker (n): Someone who makes furniture with an axe

User avatar
Anoyomouse
Long Handed Inserter
Long Handed Inserter
Posts: 54
Joined: Tue Oct 20, 2015 12:53 pm
Contact:

Re: [MOD 0.12.x] Autofill

Post by Anoyomouse »

rk84 wrote:at some point, I used to update fuel item arrays on load, but thats not possible any more. I'm bit annoyed that onload is only event I can't initialize the mod. I might "delay" the action for ontick, not sure yet.
I know i'm new to this whole modding thing, but isn't on_init the place to initalise these values? (once the game is running and the script inits?)
Hacker (n): Someone who makes furniture with an axe

User avatar
rk84
Filter Inserter
Filter Inserter
Posts: 556
Joined: Wed Feb 13, 2013 9:15 am
Contact:

Re: [MOD 0.12.x] Autofill

Post by rk84 »

Anoyomouse wrote:I know i'm new to this whole modding thing, but isn't on_init the place to initalise these values? (once the game is running and the script inits?)
on_init triggers only once (new games). So it does not cover saves that need initialization or reinitialization.
Actually you were right. on_init were changed in 0.12.11 and it does trigger once for newly added mod, but still it is not enough to deal need of reinitialization.

But I have been testing new events out and I think I can cover rest of cases with on_configuration_changed.

ps. It is in github

EDit: I released 1.3.9
Test mode
Searching Flashlight
[WIP]Fluid handling expansion
[WIP]PvP gamescript
[WIP]Rocket Express
Autofill: The torch has been pass to Nexela

User avatar
Anoyomouse
Long Handed Inserter
Long Handed Inserter
Posts: 54
Joined: Tue Oct 20, 2015 12:53 pm
Contact:

Re: [MOD 0.12.x] Autofill

Post by Anoyomouse »

Glad to hear they changed it, it now makes more sense at least.

I've watched your repo ;)
Hacker (n): Someone who makes furniture with an axe

khozmo
Burner Inserter
Burner Inserter
Posts: 9
Joined: Wed Aug 12, 2015 10:25 pm
Contact:

Re: [MOD 0.12.x] Autofill

Post by khozmo »

Thanks for the 1.3.9 update.

I just gave it a try with a turret and a burner inserter. As soon as I place the item the text that floats up says unknown key "autofill.insertion" instead of how many items were inserted into the placed item.

If I do not have ammo in my inventory when I place the turret I get unknown key "autofill.out-of-item"

These are not lua errors. Its the text that floats upwards after placing the item.

User avatar
rk84
Filter Inserter
Filter Inserter
Posts: 556
Joined: Wed Feb 13, 2013 9:15 am
Contact:

Re: [MOD 0.12.x] Autofill

Post by rk84 »

khozmo wrote:Thanks for the 1.3.9 update.

I just gave it a try with a turret and a burner inserter. As soon as I place the item the text that floats up says unknown key "autofill.insertion" instead of how many items were inserted into the placed item.

If I do not have ammo in my inventory when I place the turret I get unknown key "autofill.out-of-item"

These are not lua errors. Its the text that floats upwards after placing the item.
Localization is part that requires restart, if you enabled mod via Mods -screen.
Test mode
Searching Flashlight
[WIP]Fluid handling expansion
[WIP]PvP gamescript
[WIP]Rocket Express
Autofill: The torch has been pass to Nexela

khozmo
Burner Inserter
Burner Inserter
Posts: 9
Joined: Wed Aug 12, 2015 10:25 pm
Contact:

Re: [MOD 0.12.x] Autofill

Post by khozmo »

RK,

I got update to 0.12.13 and everything is working fine now. Maybe just needed a restart. Thanks for checking in.

User avatar
Skellitor301
Fast Inserter
Fast Inserter
Posts: 140
Joined: Mon Aug 04, 2014 10:04 pm
Contact:

Re: [MOD 0.12.x] Autofill

Post by Skellitor301 »

Is anyone else getting this kind of error?:
Image

This error happens before I load any map; new, old, and (as you can see in the screenshot) at map generation. I kept my game version at 12.10 due to the newer updates breaking a majority of mods, and the version of Autofill I'm using is v. 1.3.9

MakiabelMFE
Burner Inserter
Burner Inserter
Posts: 15
Joined: Sat May 16, 2015 6:30 am
Contact:

Re: [MOD 0.12.x] Autofill

Post by MakiabelMFE »

Skellitor301 wrote:snip
I think 1.3.9 is updated to 0.12.12. So it changed from using of game. to script. so either you have to use an older version of Autofill or update to at least 0.12.12. I'm currently using it and it's working perfectly.

User avatar
Skellitor301
Fast Inserter
Fast Inserter
Posts: 140
Joined: Mon Aug 04, 2014 10:04 pm
Contact:

Re: [MOD 0.12.x] Autofill

Post by Skellitor301 »

Which one are you using because I'm not finding a changelog for this mod

User avatar
rk84
Filter Inserter
Filter Inserter
Posts: 556
Joined: Wed Feb 13, 2013 9:15 am
Contact:

Re: [MOD 0.12.x] Autofill

Post by rk84 »

Skellitor301 wrote:Which one are you using because I'm not finding a changelog for this mod
Yea I should start logging things. Autofill 1.3.7 should work in Factorio 0.12.10
Test mode
Searching Flashlight
[WIP]Fluid handling expansion
[WIP]PvP gamescript
[WIP]Rocket Express
Autofill: The torch has been pass to Nexela

User avatar
Skellitor301
Fast Inserter
Fast Inserter
Posts: 140
Joined: Mon Aug 04, 2014 10:04 pm
Contact:

Re: [MOD 0.12.x] Autofill

Post by Skellitor301 »

Heh, thanks for the help RK :)

User avatar
Darkestnoir
Inserter
Inserter
Posts: 29
Joined: Sun Nov 23, 2014 8:57 pm
Contact:

Re: [MOD 0.12.x] Autofill

Post by Darkestnoir »

Can you add the AmmoBox mod https://forums.factorio.com/forum/vie ... 93&t=15182 turrets ?

roy7
Filter Inserter
Filter Inserter
Posts: 337
Joined: Fri Dec 12, 2014 4:24 pm
Contact:

Re: [MOD 0.12.x] Autofill

Post by roy7 »

If you could add support for Yuoki's gun turrets that'd be great. :) (Gun-T and Gun-T/2)

To do it manually, I'm using

Code: Select all

/c remote.call("af","insertset","","y_turret_gun1f12",{priority=1,group="turrets",limits={20},"ammo-bullets"})
/c remote.call("af","insertset","","y_turret_gun2f12",{priority=1,group="turrets",limits={20},"ammo-bullets"})

User avatar
rk84
Filter Inserter
Filter Inserter
Posts: 556
Joined: Wed Feb 13, 2013 9:15 am
Contact:

Re: [MOD 0.12.x] Autofill

Post by rk84 »

Sorry for lack of attention. I can add those turrets, but I have problem adding items. The mod have to verify item exist, but it can't do that because "game" and "require" are not available in same scope. Also item have to be verified before adding them to exiting arrays. Nothing "mod" breaking, but requires some work.

I have been thinking of wildcards and have one idea. Basicly if wildcard (* in name) has been used in entity name. It will add search pattern in some array (with connection to right set). Now if player builds something and name of the build entity has no entry in database, all of the search patterns are used to check if they match with build entity name. To cut the future search work, new entry could be created with connect to right set or e.g. with 0 or false value for items that are not mean to be filled.
edit: it hit me later that I can just do pre-search to prototype list, save needed entries and be done with it.
/edit

You would think that mod like this is simple. Yet, I sometimes burn myself out with thinking all that can go wrong.
But don't worry for me, I have learn to take breaks from modding :)
Test mode
Searching Flashlight
[WIP]Fluid handling expansion
[WIP]PvP gamescript
[WIP]Rocket Express
Autofill: The torch has been pass to Nexela

User avatar
rk84
Filter Inserter
Filter Inserter
Posts: 556
Joined: Wed Feb 13, 2013 9:15 am
Contact:

Re: [MOD 0.12.x] Autofill

Post by rk84 »

Here is the 1.3.10
  • Added loader.extendItemArray. Use to add items to exiting arrays.
  • Added wildcard character * that can be used in set definitions. if entity name has * character(s) the name is convert to pattern. * are changed to .+ and - are changed to %-
  • Added AmmoBox turrets and ammoboxes
  • Added color coding locos
  • Added Yuoki's gun turrets
I'm hoping you guys will test it, before I add it to op. I only tested locos of color coding mod.
Test mode
Searching Flashlight
[WIP]Fluid handling expansion
[WIP]PvP gamescript
[WIP]Rocket Express
Autofill: The torch has been pass to Nexela

Post Reply

Return to “Mods”