Tested with TFS 0.3.6pl1 8.54
City Guide.xml
cityguide.lua
Ingame example
Let me know if you have any questions, suggestions or bugs.
If you want to use a scroll instead of a NPC, look here.
http://otland.net/f82/mapmark-scroll-167597/
City Guide.xml
XML:
<?xml version="1.0" encoding="UTF-8"?>
<npc name="City Guide" script="cityguide.lua" walkinterval="2000" floorchange="0">
<health now="100" max="100"/>
<look type="130" head="95" body="114" legs="118" feet="4" addons="0"/>
<parameters>
<parameter key="message_greet" value="Hello |PLAYERNAME|. I'm the city guide from xcity and I know almost every place in the city and around it. Just tell me where you want to go or where you want to hunt and I will add a mapmark to guide you there. You can also ask for more {information} about a location or I can show you the {list} of locations I know."/>
</parameters>
</npc>
cityguide.lua
Lua:
-- City Guide, adding mapmarks to locations by Limos
local keywordHandler = KeywordHandler:new()
local npcHandler = NpcHandler:new(keywordHandler)
NpcSystem.parseParameters(npcHandler)
local talkState = {}
function onCreatureAppear(cid) npcHandler:onCreatureAppear(cid) end
function onCreatureDisappear(cid) npcHandler:onCreatureDisappear(cid) end
function onCreatureSay(cid, type, msg) npcHandler:onCreatureSay(cid, type, msg) end
function onThink() npcHandler:onThink() end
local config = {
["Riona"] = {mark = {x = 1000, y = 1000, z = 7}, type = MAPMARK_TICK, name = "Riona's Tool Shop", text = "find", info = "Riona sells tools and backpacks."},
["Deposit"] = {mark = {x = 1000, y = 1000, z = 7}, type = MAPMARK_TICK, name = "Deposit", text = "find the"},
["Boat"] = {mark = {x = 1000, y = 1000, z = 7}, type = MAPMARK_TICK, name = "Boat", text = "find the", info = "You can use the boat to travel to other cities."},
["Rotworms"] = {mark = {x = 1000, y = 1000, z = 7}, type = MAPMARK_TICK, name = "Rotworms", text = "hunt"},
["Cyclops"] = {mark = {x = 1000, y = 1000, z = 7}, type = MAPMARK_TICK, name = "Cyclops", text = "hunt"},
["Dragons"] = {mark = {x = 1000, y = 1000, z = 7}, type = MAPMARK_TICK, name = "Dragons", text = "hunt"},
["Demons"] = {mark = {x = 1000, y = 1000, z = 7}, type = MAPMARK_TICK, name = "Demons", text = "hunt"}
}
function creatureSayCallback(cid, type, msg)
if(not npcHandler:isFocused(cid)) then
return false
end
local talkUser = NPCHANDLER_CONVBEHAVIOR == CONVERSATION_DEFAULT and 0 or cid
local function addCptl(first, rest)
return first:upper()..rest:lower()
end
local x = config[msg:gsub("(%a)([%w_']*)", addCptl)]
if(x and talkState[talkUser] ~= 2) then
selfSay('Do you want me to add a mapmark where you can '..x.text..' '..msg..'?', cid)
xmsg = msg
talkState[talkUser] = 1
elseif(msgcontains(msg, 'yes') and talkState[talkUser] == 1) then
x = config[xmsg:gsub("(%a)([%w_']*)", addCptl)]
selfSay('Here you are.', cid)
doPlayerAddMapMark(cid, x.mark,x.type,x.name)
talkState[talkUser] = 0
elseif(msgcontains(msg, 'no') and talkState[talkUser] == 1) then
selfSay('Ok then.', cid)
talkState[talkUser] = 0
elseif(msgcontains(msg, 'information')) then
selfSay('About which location do you want more information?', cid)
talkState[talkUser] = 2
elseif(talkState[talkUser] == 2) then
if(x) then
if(x.info) then
selfSay('' .. x.info, cid)
else
selfSay('Sorry, I can\'t give you any useful information about this location.', cid)
end
else
selfSay('I don\'t know about this place, look in the {list} which locations I know.', cid)
end
talkState[talkUser] = 0
elseif (msgcontains(msg, 'mapmark')) then
selfSay("Which location do you want to go?", cid)
talkState[talkUser] = 0
elseif(msgcontains(msg, 'list')) then
selfSay('Here is my list, tell me where you want to go or you can also ask me for {information} about a location.', cid)
local text = 'Locations\n'
for i, x in pairs(config) do
text = text .. '\n' .. i .. ''
end
doShowTextDialog(cid, 1949, '' .. text)
talkState[talkUser] = 0
else
local messages = {'Sorry, I have no idea what you mean with '..msg..'.', 'What?', 'What do you mean?', 'Hmm?', 'Tell me a location, you can look in the {list} which locations I know.'}
selfSay(messages[math.random(#messages)], cid)
end
return true
end
npcHandler:setCallback(CALLBACK_MESSAGE_DEFAULT, creatureSayCallback)
npcHandler:addModule(FocusModule:new())
Ingame example
Let me know if you have any questions, suggestions or bugs.
If you want to use a scroll instead of a NPC, look here.
http://otland.net/f82/mapmark-scroll-167597/
Last edited: