From 2028bc1e0de04991eed99445defc7cf09782572f Mon Sep 17 00:00:00 2001 From: dolorous Date: Sun, 4 May 2008 20:27:42 +0000 Subject: For consistency, move source/lua/ to source/dat/lua/. git-svn-id: https://crawl-ref.svn.sourceforge.net/svnroot/crawl-ref/trunk@4867 c06c8d41-db1a-0410-9941-cceddc491573 --- crawl-ref/source/dat/lua/pickup.lua | 123 ++++++++++++++++++++++++++++++++++++ 1 file changed, 123 insertions(+) create mode 100644 crawl-ref/source/dat/lua/pickup.lua (limited to 'crawl-ref/source/dat/lua/pickup.lua') diff --git a/crawl-ref/source/dat/lua/pickup.lua b/crawl-ref/source/dat/lua/pickup.lua new file mode 100644 index 0000000000..feae944ac4 --- /dev/null +++ b/crawl-ref/source/dat/lua/pickup.lua @@ -0,0 +1,123 @@ +------------------------------------------------------------ +-- pickup.lua: +-- Smarter autopickup handling that takes into account the +-- item type in combination with your character's race, +-- religion, knowledge, and eating habits. +-- +-- To use this, add this line to your init.txt: +-- lua_file = lua/pickup.lua +-- +-- Notes: +-- * This script only handles items of classes with +-- autopickup on. +-- * Any result can still be overridden using +-- autopickup_exceptions. +------------------------------------------------------------ + +function make_hash(ls) + local h = { } + for _, i in ipairs(ls) do + h[i] = true + end + return h +end + +-- don't count Vampires here because of all those exceptions +function you_real_undead() + return you.race() == "Mummy" or you.race() == "Ghoul" +end + +-- not identified +function unknown_potion(type) + return type == 0 +end + +function good_potion(type) + return type == 1 +end + +function bad_potion(type) + return type == 2 +end + +-- special cases +function spec_potion(type) + return type == 3 +end + +function ch_autopickup(it) + local spells = make_hash( you.spells() ) + + if item.class(it) == "Potions" then + + local type = item.potion_type(it) + + -- "bad" potions only for Evaporate + if spells["Evaporate"] and bad_potion(type) then + return true + end + + -- no potions for Mummies + -- also: no bad potions for anyone else + if you.race() == "Mummy" or bad_potion(type) then + return false + end + + -- pickup "good" and unID'd potions + if good_potion(type) or unknown_potion(type) then + return true + end + + -- special handling + if spec_potion(type) then + + -- real undead cannot use berserk + -- or anything involving mutations + if item.subtype(it) == "berserk" + or item.subtype(it) == "gain ability" + or item.subtype(it) == "cure mutation" then + if you_real_undead() then + return false + else + return true + end + end + + -- special cases for blood, water, and porridge + if item.subtype(it) == "blood" + or item.subtype(it) == "water" + or item.subtype(it) == "porridge" then + return food.can_eat(it, false) + end + end + + -- anything not handled until here can be picked up + return true + end + + if item.class(it) == "Carrion" + or item.class(it) == "Comestibles" then + return food.can_eat(it, false) + end + + if item.class(it) == "Books" and you.god() == "Trog" + then return false + end + + if item.class(it) == "Jewellery" then + if item.subtype(it) == "hunger" + or item.subtype(it) == "inaccuracy" then + return false + end + if you_real_undead() and + (item.subtype(it) == "regeneration" + or item.subtype(it) == "rage" + or item.subtype(it) == "sustenance" + and you.race() == "Mummy") then + return false + end + end + + -- we only get here if class autopickup ON + return true +end -- cgit v1.2.3-54-g00ecf