• There is NO official Otland's Discord server and NO official Otland's server list. The Otland's Staff does not manage any Discord server or server list. Moderators or administrator of any Discord server or server lists have NO connection to the Otland's Staff. Do not get scammed!

Lua Boat NPC

Lakh

Banned User
Joined
Aug 17, 2011
Messages
189
Reaction score
4
Location
Göteborg, Sweden
Hey, my boat NPC won't work.

WOLUo.png


LUA:
if msgcontains(msg, 'Corpus Island') then
	npcHandler:say('So.. Your ready to travel on?')
	talk_state = 1
 
elseif msgcontains(msg,'yes') and talk_state == 1 then
		if hasCondition(cid, CONDITION_INFIGHT) then
				selfSay('May the gods keep you safe.')
				doTeleportThing(cid, {x=1072,y=1004,z=7, stackpos=0})
				doSendMagicEffect(getCreaturePosition(cid), 10)
		else
			npcHandler:say('Ehh it seems there is something trying to attack you. Please kill it!')
	end
end
 
can u post the full script?

That is the boat NPC script. I doubt it actually has anything to do with the NPC.lua, but here.

LUA:
function selfIdle()
	following = false
	attacking = false


	selfAttackCreature(0)
	target = 0
end


function selfSayChannel(cid, message)
	return selfSay(message, cid, false)
end


function selfMoveToCreature(id)
	if(not id or id == 0) then
		return
	end


	local t = getCreaturePosition(id)
	if(not t.x or t.x == nil) then
		return
	end


	selfMoveTo(t.x, t.y, t.z)
	return
end


function getNpcDistanceToCreature(id)
	if(not id or id == 0) then
		selfIdle()
		return nil
	end


	local c = getCreaturePosition(id)
	if(not c.x or c.x == 0) then
		return nil
	end


	local s = getCreaturePosition(getNpcId())
	if(not s.x or s.x == 0 or s.z ~= c.z) then
		return nil
	end


	return math.max(math.abs(s.x - c.x), math.abs(s.y - c.y))
end


function doMessageCheck(message, keyword)
	if(type(keyword) == "table") then
		return table.isStrIn(keyword, message)
	end


	local a, b = message:lower():find(keyword:lower())
	if(a ~= nil and b ~= nil) then
		return true
	end


	return false
end


function doNpcSellItem(cid, itemid, amount, subType, ignoreCap, inBackpacks, backpack)
	local amount = amount or 1
	local subType = subType or 1
	local ignoreCap = ignoreCap and true or false


	local item = 0
	if(isItemStackable(itemid)) then
		if(isItemRune(itemid)) then
			amount = amount * subType
		end


		local count = amount
		repeat
			item = doCreateItemEx(itemid, math.min(100, count))
			if(doPlayerAddItemEx(cid, item, ignoreCap) ~= RETURNVALUE_NOERROR) then
				return 0, 0
			end


			count = count - math.min(100, count)
		until count == 0
		return amount, 0
	end


	local a = 0
	if(inBackpacks) then
		local container = doCreateItemEx(backpack, 1)
		local b = 1
		for i = 1, amount do
			item = doAddContainerItem(container, itemid, subType)
			if(itemid == ITEM_PARCEL) then
				doAddContainerItem(item, ITEM_LABEL)
			end


			if(isInArray({(getContainerCapById(backpack) * b), amount}, i)) then
				if(doPlayerAddItemEx(cid, container, ignoreCap) ~= RETURNVALUE_NOERROR) then
					b = b - 1
					break
				end


				a = i
				if(amount > i) then
					container = doCreateItemEx(backpack, 1)
					b = b + 1
				end
			end
		end


		return a, b
	end


	for i = 1, amount do
		item = doCreateItemEx(itemid, subType)
		if(itemid == ITEM_PARCEL) then
			doAddContainerItem(item, ITEM_LABEL)
		end


		if(doPlayerAddItemEx(cid, item, ignoreCap) ~= RETURNVALUE_NOERROR) then
			break
		end


		a = i
	end


	return a, 0
end


function doRemoveItemIdFromPos(id, n, position)
	local thing = getThingFromPos({x = position.x, y = position.y, z = position.z, stackpos = 1})
	if(thing.itemid ~= id) then
		return false
	end


	doRemoveItem(thing.uid, n)
	return true
end


function getNpcName()
	return getCreatureName(getNpcId())
end


function getNpcPos()
	return getCreaturePosition(getNpcId())
end


function selfGetPosition()
	local t = getNpcPos()
	return t.x, t.y, t.z
end


msgcontains = doMessageCheck
moveToPosition = selfMoveTo
moveToCreature = selfMoveToCreature
selfMoveToPosition = selfMoveTo
selfGotoIdle = selfIdle
isPlayerPremiumCallback = isPremium
doPosRemoveItem = doRemoveItemIdFromPos
doNpcBuyItem = doPlayerRemoveItem
doNpcSetCreatureFocus = selfFocus
getNpcCid = getNpcId
getDistanceTo = getNpcDistanceTo
getDistanceToCreature = getNpcDistanceToCreature
 
Use that, It's my boat system on 0.3.6 and works fine

Code:
local keywordHandler = KeywordHandler:new()
local npcHandler = NpcHandler:new(keywordHandler)
NpcSystem.parseParameters(npcHandler)



-- OTServ event handling functions start
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
-- OTServ event handling functions end


-- Don't forget npcHandler = npcHandler in the parameters. It is required for all StdModule functions!
local travelNode = keywordHandler:addKeyword({'city 1'}, StdModule.say, {npcHandler = npcHandler, onlyFocus = true, text = 'Do you wish to travel to City 1 for 120 gold coins?'})
	travelNode:addChildKeyword({'yes'}, StdModule.travel, {npcHandler = npcHandler, premium = true, level = 0, cost = 120, destination = {x=, y=, z=} })
	travelNode:addChildKeyword({'no'}, StdModule.say, {npcHandler = npcHandler, onlyFocus = true, reset = true, text = 'Too expensive, eh?'})
local travelNode = keywordHandler:addKeyword({'city 2'}, StdModule.say, {npcHandler = npcHandler, onlyFocus = true, text = 'Do you wish to travel to city 2 for 400 gold coins?'})
	travelNode:addChildKeyword({'yes'}, StdModule.travel, {npcHandler = npcHandler, premium = true, level = 0, cost = 400, destination = {x=, y=, z=} })
	travelNode:addChildKeyword({'no'}, StdModule.say, {npcHandler = npcHandler, onlyFocus = true, reset = true, text = 'Too expensive, eh?'})

keywordHandler:addKeyword({'travel'}, StdModule.say, {npcHandler = npcHandler, onlyFocus = true, text = 'I can take you to \{City 1\}, \{City 2\} for just a small fee.'})

-- Makes sure the npc reacts when you say hi, bye etc.
npcHandler:addModule(FocusModule:new())

You have to edit the positions and the names of the citys :D
 
Back
Top