Bay 12 Games Forum

Please login or register.

Login with username, password and session length
Advanced search  
Pages: 1 ... 179 180 [181] 182 183 ... 360

Author Topic: DFHack 0.43.03-r1  (Read 1113338 times)

Max™

  • Bay Watcher
  • [CULL:SQUARE]
    • View Profile
Re: DFHack 0.40.24-r3
« Reply #2700 on: May 31, 2015, 02:19:31 am »

If I correctly understood what you're talking about here, there's a trick, try this one-liner:

Code: [Select]
a = df.new(df.viewscreen_setupadventurest) ; a.subscreen = 3 ; gui = require 'gui' ; gui.simulateInput(a, 'A_RANDOM_NAME') ; gui.simulateInput(a, 'A_CUST_NAME')
OMFG YOU ARE A GODDAMN WIZARDNINJA!

Ok, first go at it it looks like it's selecting targets properly and it brings up the name selection screen and everything, the parent is assigned and I think the getname function is aimed right but I'm clearly missing something because I thought gui.sendInputToParent(a, 'nname') would take the currently displayed name and write it to the nname (which hopefully would be either an artifact name field or a unit name field) but no luck so far.

Code: [Select]
local gui = require 'gui'

function getTargetFromScreens()
    local my_trg
    if dfhack.gui.getCurFocus() == 'item' then
        my_trg=dfhack.gui.getCurViewscreen().item

    elseif dfhack.gui.getCurFocus() == 'dwarfmode/LookAround/Flow' then
        local t_look=df.global.ui_look_list.items[df.global.ui_look_cursor]
        my_trg=t_look.flow

    elseif dfhack.gui.getSelectedUnit(true) then
        my_trg=dfhack.gui.getSelectedUnit(true)
    elseif dfhack.gui.getSelectedItem(true) then
        my_trg=dfhack.gui.getSelectedItem(true)
end
    return my_trg
end

function getNameFromTrg(my_trg)
  local trg = my_trg
   if trg == 'item' then
     if general_refs[0].artifact_id then
       local aid = trg.general_refs[0].artifact_id
         local nname = df.global.world.artifacts.all[aid].name
     elseif trg == 'unit' then
      local nname = trg.name
     end
    end
   return nname
end

a = df.new(df.viewscreen_setupadventurest) ; a.subscreen = 3 ; gui = require 'gui' ;
gui.simulateInput(a, 'A_RANDOM_NAME') ; gui.simulateInput(a, 'A_CUST_NAME') ; gui.sendInputToParent(a, 'nname')

To be fair I'm still pretty dumbfounded at that little trick mifki did so it shouldn't be surprising if I'm not sure exactly what the hell is going on there, I mean I get what it's doing and how it's asking for the screen to be displayed properly but I don't think it's quite the same as the regular name choice screens where the dismiss writes the name, all I know for sure is that mifki scares me but I'm glad he's on the side of good.
« Last Edit: May 31, 2015, 03:01:45 am by Max™ »
Logged

mifki

  • Bay Watcher
  • works secretly...
    • View Profile
    • mifki
Re: DFHack 0.40.24-r3
« Reply #2701 on: May 31, 2015, 03:15:24 am »

Well, I don't know how the name choice screen works at all, so maybe it does something not what you need, I don't know. Actually, I don't understand what you're using sendInputToParent() for.

Anyway the trick is not to instantiate the screen you need (because you can't as we can't call constructors), but instead instantiate a screen from which there's a command to show the one you need. That parent screen will not fully work for the same reason, but hopefully it still will be able to show the screen you need (and will call its constructor properly). In this particular case you can also use it just to generate a random name and not show the name screen at all. Oh you'll also need to call parent screen's :delete() after it has created your screen.

Max™

  • Bay Watcher
  • [CULL:SQUARE]
    • View Profile
Re: DFHack 0.40.24-r3
« Reply #2702 on: May 31, 2015, 04:29:53 am »

I don't know why I was trying that either, actually but I think I got a better idea of what I need to do.

I know the screen that pops up when you do that has a viewscreen_layer_choose_language_namest.name field so I just need to work out how to make it send that to the name field from the designated target.
Spoiler (click to show/hide)

Also what do you mean about the :delete() thing, I didn't see the real adventurer screen at all from poking around with gm-editor.

Hmmm, I was sure this would work, I removed the sendinput bit from the trick you showed me and have this after it:
Code: [Select]
function getNewName()
local n = dfhack.gui.getCurViewscreen()
 if n == df.viewscreen_layer_choose_language_namest then
  local nn = n.name
 end
return nn
end

nn = nname
I assumed that would take nn (being the name from the choose screen I think) and send it to nname (being the name from the current target) but it ain't doing it yet.
« Last Edit: May 31, 2015, 04:41:39 am by Max™ »
Logged

mifki

  • Bay Watcher
  • works secretly...
    • View Profile
    • mifki
Re: DFHack 0.40.24-r3
« Reply #2703 on: May 31, 2015, 05:02:02 am »

There are multiple errors in your code, it should be something like

Code: [Select]
function getNewName()
  local n = dfhack.gui.getCurViewscreen()
  if n._type == df.viewscreen_layer_choose_language_namest then
    return n.name
  end
end

In my example, you'll need to add a:delete() because the adventurer screen has been created, even if you don't see it ;)

Max™

  • Bay Watcher
  • [CULL:SQUARE]
    • View Profile
Re: DFHack 0.40.24-r3
« Reply #2704 on: May 31, 2015, 05:24:17 am »

There are multiple errors in your code, it should be something like

Code: [Select]
function getNewName()
  local n = dfhack.gui.getCurViewscreen()
  if n._type == df.viewscreen_layer_choose_language_namest then
    return n.name
  end
end

In my example, you'll need to add a:delete() because the adventurer screen has been created, even if you don't see it ;)
Well yeah, I'm kinda poking around making up a lot of it from what I've seen on the lua api and in other scripts+what seems like it might work, just realized I had the bit I was trying to have grab the artifact name trying to use the id for the index so I had to rejigger that.

I'll toss that bit in there too, and what, just put the ; a:delete() at the end?
Logged

Max™

  • Bay Watcher
  • [CULL:SQUARE]
    • View Profile
Re: DFHack 0.40.24-r3
« Reply #2705 on: May 31, 2015, 05:26:59 am »

lol almost choked on my cereal when my question was answered by it freezing for a sec and killing df entirely. :D

See, this is how I progress when trying to hack together some script:

1. Hmmm, I bet I could [whatever], wait, that is kinda similar to part of [some other script I've looked at]
2. Ok, let's see if this works.
Code: [Select]
/home/thefunk/.dfwl/hack/scripts/names.lua:34: ha ha, nope, suck it max3. Ok *fix those that pop up until the script runs* right, let's get started!
4.
5. Since nothing happened I poke around and see what I forgot, occasionally find a better method or at times learn I can streamline an entire block of code into a line or two, and run it again.
6. Success! Well, of a sort, there's still something that wasn't right... but *poke poke poke* that should do it.
7. Ha ha, I made a thing, awesome.
8. *play with it until it breaks then show it if it doesn't*
« Last Edit: May 31, 2015, 05:46:29 am by Max™ »
Logged

mifki

  • Bay Watcher
  • works secretly...
    • View Profile
    • mifki
Re: DFHack 0.40.24-r3
« Reply #2706 on: May 31, 2015, 05:52:25 am »

It seems in this case you can only call a:delete() once you (user) finished with the name selection screen.

Max™

  • Bay Watcher
  • [CULL:SQUARE]
    • View Profile
Re: DFHack 0.40.24-r3
« Reply #2707 on: May 31, 2015, 05:54:21 am »

Yeah, cause the ways I tried it just killed df the first time and segfaulted the second (when I tried to do it without the semicolon) so hey, that's why I posted here, the stuff I know is vastly outweighed by what I don't.

How do I make it check that I'm done with the selection screen? Is that where a gui.onDismiss(a) or something would go?

Oh yeah, I meant to ask, when the next update comes around is there anything particular that can be done on linux to help finding symbols and such, and what tools should I grab to do so? I know a lot of them can be found automatically apparently with certain scripts but is that it for linux or?
« Last Edit: May 31, 2015, 05:57:11 am by Max™ »
Logged

Max™

  • Bay Watcher
  • [CULL:SQUARE]
    • View Profile
Re: DFHack 0.40.24-r3
« Reply #2708 on: May 31, 2015, 07:22:44 pm »

Urgh, so I figured out how to put in a line to print a check if it was getting the right targets and it confirmed that no, in fact it was not.
Code: (names.lua) [Select]
local gui = require 'gui'

function getTargetFromScreens()
    local old = dfhack.gui.getCurViewscreen()
     if old._type == viewscreen_itemst then
      if old.item.general_refs[0] then
       local aid = old.item.general_refs[0].artifact_id
        local facts = df.global.world.artifacts.all
         for _,v in facts do
          if v.id == aid then
           local nold = facts[v].name
    elseif old._type == viewscreen_dungeon_monsterstatusst then
          local nold = old.unit.name
end
                       end
                      end
                     end
    return nold
end
print(nold)

a = df.new(df.viewscreen_setupadventurest) ; a.subscreen = 3 ; gui = require 'gui' ;
gui.simulateInput(a, 'A_RANDOM_NAME') ; gui.simulateInput(a, 'A_CUST_NAME')

function getNewName()
  local n = dfhack.gui.getCurViewscreen()
  if n._type == df.viewscreen_layer_choose_language_namest then
    local new = n.name
     nold = new
   end
  end
print(new)
It's weird because if I do parts of what I think should get the right target it seems right, like gui/gm-editor dfhack.gui.getCurViewscreen().item pulls it up like I expect it to but I'm clearly missing something needed to get it to pass that along to the next part.


I also somehow removed the .name part somewhere along the line while trying to get it to print the target checks, hah.
« Last Edit: May 31, 2015, 07:37:06 pm by Max™ »
Logged

lethosor

  • Bay Watcher
    • View Profile
Re: DFHack 0.40.24-r3
« Reply #2709 on: May 31, 2015, 08:07:51 pm »

For one thing, "old._type == viewscreen_itemst" will never be true, since viewscreen_itemst will be nil unless you've set it to something. You want df.viewscreen_itemst instead. (You can also use "df.viewscreen_itemst:is_instance(old)", I believe.)
Logged
DFHack - Dwarf Manipulator (Lua) - DF Wiki talk

There was a typo in the siegers' campfire code. When the fires went out, so did the game.

Max™

  • Bay Watcher
  • [CULL:SQUARE]
    • View Profile
Re: DFHack 0.40.24-r3
« Reply #2710 on: May 31, 2015, 08:13:07 pm »

AH! See I didn't even catch that and it didn't spit an error either.
Logged

Max™

  • Bay Watcher
  • [CULL:SQUARE]
    • View Profile
Re: DFHack 0.40.24-r3
« Reply #2711 on: June 01, 2015, 03:19:23 am »

So I'm a super tard and realized there was a better way to do a lot of this and I get the feeling that it is close but I'm not sure how to have it run the function getNewName stuff until after the screen is called.
Code: (nametest.lua) [Select]
a = df.new(df.viewscreen_setupadventurest) ; a.subscreen = 3 ; gui = require 'gui' ; gui.simulateInput(a, 'A_RANDOM_NAME') ; gui.simulateInput(a, 'A_CUST_NAME')
function getNewName()
 local n = dfhack.gui.getCurViewscreen()
  if df.viewscreen_layer_choose_language_namest:is_instance(n) then
      local newn = n.name
      end
  return newn
end

if dfhack.gui.getCurViewscreen().parent == df.viewscreen_itemst then
 local trg = dfhack.gui.getCurViewscreen().parent.item.general_refs[0].artifact_id
 local fact = df.artifact_record.find(trg)
 local oldn = fact.name
elseif dfhack.gui.getCurViewscreen().parent == df.viewscreen_dungeon_monsterstatusst then
 local trg = dfhack.gui.getCurViewscreen().parent.unit
 local oldn = trg.name
return oldn
end
newn = oldn

Argh, so I was looking at the classes stuff and I think I got the general idea enough that this will load without errors but it still isn't getting the right targets post init.
Code: (nametest.lua) [Select]
name_change = defclass(name_change, choices)
choices = df.new(df.viewscreen_setupadventurest) ; choices.subscreen = 3 ; gui = require 'gui' ; gui.simulateInput(choices, 'A_RANDOM_NAME') ; gui.simulateInput(choices, 'A_CUST_NAME')


function name_change:init()
 local n = dfhack.gui.getCurViewscreen()
end

function name_change:postinit()
  if df.viewscreen_layer_choose_language_namest:is_instance(n) then
      local newn = n.name
    end
  return newn
end

if dfhack.gui.getCurViewscreen().parent == df.viewscreen_itemst then
 local trg = dfhack.gui.getCurViewscreen().parent.item.general_refs[0].artifact_id
 local fact = df.artifact_record.find(trg)
 local oldn = fact.name
elseif dfhack.gui.getCurViewscreen().parent == df.viewscreen_dungeon_monsterstatusst then
 local trg = dfhack.gui.getCurViewscreen().parent.unit
 local oldn = trg.name
return oldn
end

function name_change:onInput(keys)
 if keys.SELECT then
  newn = oldn
 elseif keys.LEAVESCREEN then
  if newn ~= oldn then
     newn = oldn
     self:dismiss()
     choices:dismiss()
    end 
  end
end
« Last Edit: June 01, 2015, 06:06:49 pm by Max™ »
Logged

Putnam

  • Bay Watcher
  • DAT WIZARD
    • View Profile
Re: DFHack 0.40.24-r3
« Reply #2712 on: June 02, 2015, 04:14:38 am »

Code: [Select]
FamilyNode=defclass(FamilyNode)

FamilyNode.ATTRS {
    histfig_id = DEFAULT_NIL,
    mother = DEFAULT_NIL,
    father = DEFAULT_NIL,
    spouse = DEFAULT_NIL,
    children = {}
}

function FamilyNode:clean()
    local remove_table={}
    for k,v in pairs(self.children) do
        if v.mother~=self and v.father~=self then
            remove_table[k]=true
        end
    end
    for k,v in pairs(remove_table) do
        self.children[k]=nil
    end
    self.children_nodes=nil
end

function FamilyNode:getChildrenNum()
    local size=0
    for k,v in pairs(self.children) do
        size=size+1
    end
    return size
end

function FamilyNode:isVoid()
    return (not self.mother and not self.father and self:getChildrenNum()==0)
end

FamilyTree=defclass(FamilyTree)

FamilyTree.ATTRS {
    histfig_lookup={}
}

function FamilyTree:insertNode(node)
    if self:histfigLookup(node.histfig_id) then
        return self:histfigLookup(node.histfig_id)
    else
        self.histfig_lookup[node.histfig_id]=node
        return node
    end
end

function FamilyTree:mergeFamily(other_tree)
    for k,v in pairs(other_tree.histfig_lookup) do
        self.histfig_lookup[k]=self.histfig_lookup[k] or v
    end
    other_tree=self
end

function FamilyTree:histfigLookup(histfig_id)
    self.histfig_lookup=self.histfig_lookup or {}
    return self.histfig_lookup[histfig_id]
end

function FamilyTree:getSize()
    local size=0
    for k,v in pairs(self.histfig_lookup) do
        size=size+1
    end
    return size
end

function FamilyTree:clean()
    for k,v in pairs(self.histfig_lookup) do
        v:clean()
        if v.mother and not self:histfigLookup(v.mother.histfig_id) then
            self:insertNode(v.mother)
        end
        if v.father and not self:histfigLookup(v.father.histfig_id) then
            self:insertNode(v.father)
        end
        for _,child in pairs(v.children) do
            if not self:histfigLookup(child.histfig_id) then
                self:insertNode(child)
            end
        end
        if v:isVoid() then
            self.histfig_lookup[k]=nil
        end
    end
end

function FamilyTree:giveFamilyName()
    local father,mother=self:findProgenitor()
    local father_fig,mother_fig=df.historical_figure.find(father.histfig_id),df.historical_figure.find(mother.histfig_id)
    local name_words={father_fig.name.words[0],mother_fig.name.words[1]}
    local name_parts_of_speech={father_fig.name.parts_of_speech[0],mother_fig.name.parts_of_speech[1]}
    for k,v in pairs(self.histfig_lookup) do
        local fig=df.historical_figure.find(v.histfig_id)
        fig.name.words[1]=name_words[2]
        fig.name.parts_of_speech[1]=name_parts_of_speech[2]
    end
end

function FamilyTree:findProgenitor()
    local father,mother
    for k,v in pairs(self.histfig_lookup) do --actually just returns after first one, heh
        father=v.father or v
        mother=v.mother or v
        while father.father do
            father=father.father or father
        end
        while mother.mother do
            mother=mother.mother or mother
        end
        return father,mother
    end
end

function getLeadingZeroes(num,numDigits)
    local zeroes=numDigits-math.floor(math.log(num)/math.log(10))-1
    local str=''
    for i=1,zeroes do
        str=str..'0'
    end
    return str..num
end

function getMonthDate(num)
    return num~=-1 and getLeadingZeroes(math.ceil(num/33600),2)..getLeadingZeroes(math.ceil((num%33600)/1200),2) or '0000'
end

function FamilyTree:exportToFamilyScript()
    local file=""
    local counter=1
    for k,v in pairs(self.histfig_lookup) do
        print('Exporting member #'..counter..'/'..self:getSize()..', hist fig number #'..k)
        local fig=df.historical_figure.find(v.histfig_id)
        file=file..'i'..v.histfig_id..' g'..(fig.sex==0 and 'f' or 'm')
        file=file..' p'..dfhack.TranslateName(fig.name)
        file=file..' b'..getLeadingZeroes(fig.born_year,4)..getMonthDate(fig.born_seconds)
        if fig.died_year~=-1 then
            file=file..' z1 d'..getLeadingZeroes(fig.died_year,4)..getMonthDate(fig.died_seconds)
        end
        if v.mother then
            file=file..' m'..v.mother.histfig_id
        end
        if v.father then
            file=file..' f'..v.father.histfig_id
        end
        if v.spouse then
            file=file..' s'..v.spouse.histfig_id
        end
        file=file..NEWLINE
        counter=counter+1
    end
    local f=assert(io.open('family_'..self:findProgenitor().histfig_id..'.family',"w"))
    f:write(file)
    f:close()
end

Families=defclass(Families)

Families.ATTRS {
    families={}
}

function Families:getFamilyFromHistFig(histfig_id)
    self.families=self.families or {}
    self.families_histfig_lookup = self.families_histfig_lookup or {}
    local family=self.families_histfig_lookup[histfig_id]
    if family then return family:histfigLookup(histfig_id),family end
    return nil
end

function Families:insertNode(node,family)
    local existingFamily=self:getFamilyFromHistFig(node.histfig_id)
    if existingFamily then
        return existingFamily:histfigLookup(node.histfig_id)
    else
        local newFamily=family or FamilyTree{}
        if not family then
            newFamily.histfig_lookup={}
            newFamily:insertNode(node)
            self.families_histfig_lookup[node.histfig_id]=newFamily
            table.insert(self.families,newFamily)
        else
            newFamily:insertNode(node)
            self.families_histfig_lookup[node.histfig_id]=newFamily
        end
        return node,newFamily
    end
end

function Families:getFamily(hist_fig_id,family,children_only,parent)
    local hist_fig=df.historical_figure.find(hist_fig_id)
    local oldNode,oldfamily=self:getFamilyFromHistFig(hist_fig_id)
    if oldNode then
        if parent and (not oldNode.mother or not oldNode.father) then
            for _,fig_link in pairs(hist_fig.histfig_links) do
                if fig_link.target_hf==parent.histfig_id then
                    if fig_link._type==df.histfig_hf_link_motherst then
                        oldNode.mother=parent
                    elseif fig_link._type==df.histfig_hf_link_fatherst then
                        oldNode.father=parent
                    end
                end
            end
            family:insertNode(parent)
        end
        return oldNode,oldfamily
    end
    local node,family=self:insertNode(FamilyNode{histfig_id=hist_fig_id},family)
    node.children={}
    if children_only and parent then
        local parent_fig=df.historical_figure.find(parent.histfig_id)
        if parent_fig.sex==0 then
            node.mother=parent
        else
            node.father=parent
        end
        family:insertNode(parent)
    end
    for _,fig_link in pairs(hist_fig.histfig_links) do
        if fig_link._type==df.histfig_hf_link_motherst and not children_only then
            node.mother=self:getFamily(fig_link.target_hf,family,children_only)
        elseif fig_link._type==df.histfig_hf_link_fatherst and not children_only then
            node.father=self:getFamily(fig_link.target_hf,family,children_only)
        elseif fig_link._type==df.histfig_hf_link_childst then
            local childNode=self:getFamily(fig_link.target_hf,family,children_only,node)
            node.children[childNode.histfig_id]=childNode
        elseif fig_link._type==df.histfig_hf_link_spousest then
            node.spouse=self:getFamily(fig_link.target_hf,family,children_only)
        end
    end
    return node
end

function Families:clean()
    local prevAmount=1
    for i=#self.families,1,-1 do
        local size=self.families[i]:getSize()
        if size<2 then table.remove(self.families,i) end
        prevAmount=size
    end
    for k,v in pairs(self.families) do
        v:clean()
    end
end

function Families:sort()
    table.sort(self.families,function(a,b) return a:getSize()>b:getSize() end)
end

function Families:getAllHistFigs(children_only)
    print('Gathering all historical figures...')
    for k,v in pairs(df.global.world.history.figures) do
        if k%100==0 then print('At figure #'..k..'/'..#df.global.world.history.figures) end
        self:getFamily(v.id,nil,children_only)
    end
    self:clean()
    self:clean() --two passes actually does something, weirdly enough
    self:sort()
end

local utils=require('utils')

validArgs = validArgs or utils.invert({
 'all',
 'this',
 'help',
 'heritage',
 'export'
})

local args = utils.processArgs({...}, validArgs)

if args.export then
    if args.all then
        local dlg=require('gui.dialogs')
        dlg.showYesNoPrompt('Family lineage','Really export all families? (May take very long time and may cause game to hang!)',COLOR_WHITE,function()
            local families=Families()
            families:getAllHistFigs()
            for k,v in ipairs(families.families) do
                print('Exporting family of ' .. dfhack.TranslateName(df.historical_figure.find(v:findProgenitor().histfig_id).name) .. '...')
                v:exportToFamilyScript()
            end
        end
        )
    end

    if args.this then
        local families=Families()
        families:getFamily(dfhack.gui.getSelectedUnit().hist_figure_id)
        families:clean()
        families:clean()
        for k,v in ipairs(families.families) do
            print('Exporting family of ' .. dfhack.TranslateName(df.historical_figure.find(v:findProgenitor().histfig_id).name) .. '...')
            v:exportToFamilyScript()
        end
    end
end
if args.heritage then
    if args.all then
        local families=Families()
        families:getAllHistFigs(true)
        families:clean()
        for k,v in ipairs(families.families) do
            local progenitor1,progenitor2=v:findProgenitor()
            print('Naming family of ' .. dfhack.TranslateName(df.historical_figure.find(progenitor1.histfig_id).name) .. ' and ' .. dfhack.TranslateName(df.historical_figure.find(progenitor2.histfig_id).name)..'...')
            v:giveFamilyName()
        end
    end
    if args.this then
        local families=Families()
        families:getFamily(dfhack.gui.getSelectedUnit().hist_figure_id)
        families:clean()
        families:clean()
        for k,v in ipairs(families.families) do
            local progenitor1,progenitor2=v:findProgenitor()
            print('Naming family of ' .. dfhack.TranslateName(df.historical_figure.find(progenitor1.histfig_id).name) .. ' and ' .. dfhack.TranslateName(df.historical_figure.find(progenitor2.histfig_id).name)..'...')
            v:giveFamilyName()
        end
    end
end

if args.help then
 print([[scripts/family.lua
arguments
    -help
        print this help message
    -export
        exports specified families to FamilyScript file
    -heritage
        gives family name to specified families
    -all
        specifies all the world's families (may crash game)
    -this
        specifies selected unit's family
]])
 return
end

Here's a script that exports a FamilyScript file from either a given unit's genealogy or every genealogy in the world. Arguments are there so it can also be used as a script_environment library (for heritage 2.0 or somesuch)

Example of parsed output (on http://www.familyecho.com/):



EDIT: fixed to make significantly less sexist/homophobic/speciesist (I.E i'm not assuming that mother is female and father is male; other situations are technically possible)

EDIT 2: Old insertion algorithm was O(n), since it required iterating through all existing families, making process of scraping all hist figs O(n^2). Now insertion is O(1), at least given that Lua table access is O(1) (which is true, AFAIK), which makes scraping process significantly faster (hilariously so).

EDIT 3: Added -heritage, reorganized args
« Last Edit: June 02, 2015, 02:42:47 pm by Putnam »
Logged

Max™

  • Bay Watcher
  • [CULL:SQUARE]
    • View Profile
Re: DFHack 0.40.24-r3
« Reply #2713 on: June 02, 2015, 06:35:34 am »

Well that's pretty damn cool.

Code: [Select]
if args.help then
 print([[scripts/modtools/syndrome-trigger.lua
arguments
at the end should be familynode or whatever shouldn't it?
« Last Edit: June 02, 2015, 06:37:58 am by Max™ »
Logged

Putnam

  • Bay Watcher
  • DAT WIZARD
    • View Profile
Re: DFHack 0.40.24-r3
« Reply #2714 on: June 02, 2015, 01:10:35 pm »

aha yeah it should be

i've been calling it "family.lua" and I guess that's appropriate considering that it's primarily a library
Pages: 1 ... 179 180 [181] 182 183 ... 360