Merge branch 'adaptation-4015' of https://github.com/hobotron-df/dfhack into develop
Conflicts: NEWSdevelop
						commit
						c7e0a13505
					
				@ -0,0 +1,95 @@
 | 
			
		||||
# View or set level of cavern adaptation for the selected unit or the whole fort
 | 
			
		||||
# based on removebadthoughts.rb
 | 
			
		||||
 | 
			
		||||
# Color constants, values mapped to color_value enum in include/ColorText.h
 | 
			
		||||
COLOR_GREEN  = 2
 | 
			
		||||
COLOR_RED    = 4
 | 
			
		||||
COLOR_YELLOW = 14
 | 
			
		||||
COLOR_WHITE  = 15
 | 
			
		||||
 | 
			
		||||
def usage(s)
 | 
			
		||||
    if nil != s
 | 
			
		||||
        puts(s)
 | 
			
		||||
    end
 | 
			
		||||
    puts "Usage: adaptation <show|set> <him|all> [value]"
 | 
			
		||||
    throw :script_finished
 | 
			
		||||
end
 | 
			
		||||
 | 
			
		||||
mode  = $script_args[0] || 'help'
 | 
			
		||||
who   = $script_args[1]
 | 
			
		||||
value = $script_args[2]
 | 
			
		||||
 | 
			
		||||
if 'help' == mode
 | 
			
		||||
    usage(nil)
 | 
			
		||||
elsif 'show' != mode && 'set' != mode
 | 
			
		||||
    usage("Invalid mode '#{mode}': must be either 'show' or 'set'")
 | 
			
		||||
end
 | 
			
		||||
 | 
			
		||||
if nil == who
 | 
			
		||||
    usage("Target not specified")
 | 
			
		||||
elsif 'him' != who && 'all' != who
 | 
			
		||||
    usage("Invalid target '#{who}'")
 | 
			
		||||
end
 | 
			
		||||
 | 
			
		||||
if 'set' == mode
 | 
			
		||||
    if nil == value
 | 
			
		||||
        usage("Value not specified")
 | 
			
		||||
    elsif !/[[:digit:]]/.match(value)
 | 
			
		||||
        usage("Invalid value '#{value}'")
 | 
			
		||||
    end
 | 
			
		||||
 | 
			
		||||
    if 0 > value.to_i || 800000 < value.to_i
 | 
			
		||||
        usage("Value must be between 0 and 800000")
 | 
			
		||||
    end
 | 
			
		||||
    value = value.to_i
 | 
			
		||||
end
 | 
			
		||||
 | 
			
		||||
num_set = 0
 | 
			
		||||
 | 
			
		||||
set_adaptation_value = lambda { |u,v|
 | 
			
		||||
    next if !df.unit_iscitizen(u)
 | 
			
		||||
    next if u.flags1.dead
 | 
			
		||||
    u.status.misc_traits.each { |t|
 | 
			
		||||
        if t.id == :CaveAdapt
 | 
			
		||||
            # TBD: expose the color_ostream console and color values of
 | 
			
		||||
            # t.value based on adaptation level
 | 
			
		||||
            if mode == 'show'
 | 
			
		||||
                if df.respond_to?(:print_color)
 | 
			
		||||
                    print "Unit #{u.id} (#{u.name}) has an adaptation of "
 | 
			
		||||
                    case t.value
 | 
			
		||||
                    when 0..399999
 | 
			
		||||
                        #df.print_color(COLOR_GREEN, "#{t.value}\n")
 | 
			
		||||
                        print "#{t.value}\n"
 | 
			
		||||
                    when 400000..599999
 | 
			
		||||
                        df.print_color(COLOR_YELLOW, "#{t.value}\n")
 | 
			
		||||
                    else
 | 
			
		||||
                        df.print_color(COLOR_RED, "#{t.value}\n")
 | 
			
		||||
                    end
 | 
			
		||||
                else
 | 
			
		||||
                    puts "Unit #{u.id} (#{u.name}) has an adaptation of #{t.value}"
 | 
			
		||||
                end
 | 
			
		||||
            elsif mode == 'set'
 | 
			
		||||
                puts "Unit #{u.id} (#{u.name}) changed from #{t.value} to #{v}"
 | 
			
		||||
                t.value = v
 | 
			
		||||
                num_set += 1
 | 
			
		||||
            end
 | 
			
		||||
        end
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
case who
 | 
			
		||||
when 'him'
 | 
			
		||||
    if u = df.unit_find
 | 
			
		||||
        set_adaptation_value[u,value]
 | 
			
		||||
    else
 | 
			
		||||
        puts 'Please select a dwarf ingame'
 | 
			
		||||
    end
 | 
			
		||||
when 'all'
 | 
			
		||||
    df.unit_citizens.each { |uu|
 | 
			
		||||
        set_adaptation_value[uu,value]
 | 
			
		||||
    }
 | 
			
		||||
end
 | 
			
		||||
 | 
			
		||||
if 'set' == mode
 | 
			
		||||
    puts "#{num_set} unit#{'s' if num_set != 1} updated."
 | 
			
		||||
end
 | 
			
		||||
		Loading…
	
		Reference in New Issue