Skip to content

Commit

Permalink
Merge pull request DFHack#590 from BenLubar/ban-cooking
Browse files Browse the repository at this point in the history
ban-cooking script
  • Loading branch information
lethosor committed Mar 28, 2015
2 parents ac2f537 + e657a05 commit b8f621f
Showing 1 changed file with 88 additions and 0 deletions.
88 changes: 88 additions & 0 deletions scripts/ban-cooking.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,88 @@
already_banned = {}
kitchen = df.ui.kitchen
kitchen.item_types.length.times { |i|
already_banned[[kitchen.mat_types[i], kitchen.mat_indices[i], kitchen.item_types[i], kitchen.item_subtypes[i]]] = kitchen.exc_types[i] & 1
}
ban_cooking = lambda { |mat_type, mat_index, type|
subtype = -1
key = [mat_type, mat_index, type, subtype]
if already_banned[key]
next if already_banned[key] == 1

index = kitchen.mat_types.zip(kitchen.mat_indices, kitchen.item_types, kitchen.item_subtypes)
kitchen.exc_types[index] |= 1
already_banned[key] = 1
next
end
df.ui.kitchen.mat_types << mat_type
df.ui.kitchen.mat_indices << mat_index
df.ui.kitchen.item_types << type
df.ui.kitchen.item_subtypes << subtype
df.ui.kitchen.exc_types << 1
already_banned[key] = 1
}

$script_args.each do |arg|
case arg
when 'booze'
df.world.raws.plants.all.each_with_index do |p, i|
p.material.each_with_index do |m, j|
if m.flags[:ALCOHOL]
ban_cooking[j + DFHack::MaterialInfo::PLANT_BASE, i, :DRINK]
end
end
end
df.world.raws.creatures.all.each_with_index do |c, i|
c.material.each_with_index do |m, j|
if m.flags[:ALCOHOL]
ban_cooking[j + DFHack::MaterialInfo::CREATURE_BASE, i, :DRINK]
end
end
end

when 'honey'
# hard-coded in the raws of the mead reaction
honey = df.decode_mat('CREATURE:HONEY_BEE:HONEY')
ban_cooking[honey.mat_type, honey.mat_index, :LIQUID_MISC]

when 'tallow'
df.world.raws.creatures.all.each_with_index do |c, i|
c.material.each_with_index do |m, j|
if m.reaction_product and m.reaction_product.id and m.reaction_product.id.include?('SOAP_MAT')
ban_cooking[j + DFHack::MaterialInfo::CREATURE_BASE, i, :GLOB]
end
end
end

when 'oil'
df.world.raws.plants.all.each_with_index do |p, i|
p.material.each_with_index do |m, j|
if m.reaction_product and m.reaction_product.id and m.reaction_product.id.include?('SOAP_MAT')
ban_cooking[j + DFHack::MaterialInfo::PLANT_BASE, i, :LIQUID_MISC]
end
end
end

when 'seeds'
df.world.raws.plants.all.each do |p|
m = df.decode_mat(p.material_defs.type_basic_mat, p.material_defs.idx_basic_mat).material
ban_cooking[p.material_defs.type_basic_mat, p.material_defs.idx_basic_mat, :PLANT] if m.reaction_product and m.reaction_product.id and m.reaction_product.id.include?('SEED_MAT')

if not p.flags[:TREE]
p.growths.each do |g|
m = df.decode_mat(g).material
ban_cooking[g.mat_type, g.mat_index, :PLANT_GROWTH] if m.reaction_product and m.reaction_product.id and m.reaction_product.id.include?('SEED_MAT')
end
end
end

else
puts "ban-cooking booze - bans cooking of drinks"
puts "ban-cooking honey - bans cooking of honey bee honey"
puts "ban-cooking tallow - bans cooking of tallow"
puts "ban-cooking oil - bans cooking of oil"
puts "ban-cooking seeds - bans cooking of plants that have seeds (tree seeds don't count)"
end
end

# vim: et:sw=4:ts=4

0 comments on commit b8f621f

Please sign in to comment.