This is an old revision of the document!
Script example using the “trigger” variable to create a menu for players. With this script, the mob will remember any object a player gives to it, be able to list the objects any given player has given, and be able give back specific objects when asked to.
-- Menu test helper code [320] mt={} mt.list={} function mt.menu() say("Just say the word!") say("list - a list of the objects you gave me") say("give <item> - I'll give you the object back") end function mt.parse(ch,trigger) if trigger=="list" then mt.showlist(ch) return end local s,f=string.find(trigger,"give") if s==1 then -- if give is the first word mt.give(ch,string.sub(trigger,f+2)) -- only send the rest of the arg return end mt.menu() end function mt.showlist(ch) if not mt.list[ch.name] then say("You haven't given me anything...") return end if table.getn(mt.list[ch.name])<1 then say("I don't have anything of yours...") return end for _,v in ipairs(mt.list[ch.name]) do say(v.sdesc) end end function mt.give(ch,words) if not mt.list[ch.name] then say("You haven't given me anything...") return end for i,v in ipairs(mt.list[ch.name]) do if string.find(v.name, words) then mt.gave={ name=ch.name, sdesc=v.sdesc, index=i} mdo(string.format("give '%s' %s", v.name, ch.name)) -- mdo(string.format("drop '%s'", v.name)) -- in case ch had a full inventory -- table.remove(mt.list[ch.name],i) -- remove it from the table return end end -- if we're here, didn't find it say("Sorry, you never gave me " .. words .. "...") end function mt.checkgive(trigger) if mt.gave==nil then return end if string.find(trigger, string.format("You give %s to", mt.gave.sdesc) ) then table.remove(mt.list[mt.gave.name], mt.gave.index) say("There ya go.") else say("Hmmm, I couldn't give it to you...is your inventory full?") end mt.gave=nil end function mt.receive(obj,ch) if not mt.list[ch.name] then mt.list[ch.name]={} end table.insert(mt.list[ch.name],{ name=obj.name, sdesc=obj.shortdescr}) say("Ok, I'll hold onto " .. obj.shortdescr .. " for you " .. ch.name .. ".") end mt.loaded=true -- End Menu test helper code
-- Menu test say * [321] if not mt or not mt.loaded then loadprog(320) end mt.parse(ch,trigger) -- End Menu test say *
-- Menu test give * [322] if not mt or not mt.loaded then loadprog(320) end mt.receive(obj1,ch) -- End Menu test give *
-- Menu test act * [323] if not mt or not mt.loaded then loadprog(320) end mt.checkgive(trigger) -- End Menu test act *
You say 'list' lua test 20 says 'You haven't given me anything...' You give a pile of coal and rocks to lua test 20. lua test 20 says 'Ok, I'll hold onto a pile of coal and rocks for you Vodur.' You give a pile of coal and rocks to lua test 20. lua test 20 says 'Ok, I'll hold onto a pile of coal and rocks for you Vodur.' El Ranglor gives Surf and Turf to lua test 20. lua test 20 says 'Ok, I'll hold onto Surf and Turf for you Ranglor.' El Ranglor says 'list' lua test 20 says 'Surf and Turf' You say 'list' lua test 20 says 'a pile of coal and rocks' lua test 20 says 'a pile of coal and rocks' You give a pile of coal and rocks to El Ranglor. El Ranglor has his hands full. El Ranglor says 'give surf' lua test 20 asks 'Hmmm, I couldn't give it to you...is your inventory full?' El Ranglor drops a pile of coal and rocks. El Ranglor says 'surf' lua test 20 exclaims 'Just say the word!' lua test 20 says 'list - a list of the objects you gave me' lua test 20 says 'give <item> - I'll give you the object back' El Ranglor says 'give surf' lua test 20 says 'There ya go.' Lua test 20 gives Surf and Turf to El Ranglor. El Ranglor says 'list' lua test 20 says 'I don't have anything of yours...'