This shows you the differences between two versions of the page.
|
lua:scripting:examples:speechmenu [2014/12/24 05:45] vodur created |
— (current) | ||
|---|---|---|---|
| Line 1: | Line 1: | ||
| - | 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. | ||
| - | <code lua> | ||
| - | -- 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 | ||
| - | </code> | ||
| - | |||
| - | <code lua> | ||
| - | -- Menu test say * [321] | ||
| - | if not mt or not mt.loaded then | ||
| - | loadprog(320) | ||
| - | end | ||
| - | |||
| - | mt.parse(ch,trigger) | ||
| - | -- End Menu test say * | ||
| - | </code> | ||
| - | |||
| - | |||
| - | <code lua> | ||
| - | -- Menu test give * [322] | ||
| - | if not mt or not mt.loaded then | ||
| - | loadprog(320) | ||
| - | end | ||
| - | |||
| - | mt.receive(obj1,ch) | ||
| - | -- End Menu test give * | ||
| - | </code> | ||
| - | |||
| - | <code lua> | ||
| - | -- Menu test act * [323] | ||
| - | if not mt or not mt.loaded then | ||
| - | loadprog(320) | ||
| - | end | ||
| - | |||
| - | mt.checkgive(trigger) | ||
| - | -- End Menu test act * | ||
| - | </code> | ||
| - | |||
| - | ----- | ||
| - | <code> | ||
| - | 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...' | ||
| - | </code> | ||