• 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!
  • New resources must be posted under Resources tab. A discussion thread will be created automatically, you can't open threads manually anymore.

NPC Exchanger

Amiroslo

Excellent OT User
Joined
Jul 28, 2009
Messages
6,768
Solutions
5
Reaction score
769
I saw many people requesting this so here you are

add in data/npc
Exchanger.xml
XML:
<?xml version="1.0" encoding="UTF-8"?>
<npc name="Exchanger" script="ex.lua" walkinterval="2000" floorchange="0">
	<health now="100" max="100"/>
	<look type="138" head="57" body="59" legs="40" feet="76" addons="0"/>
	<parameters>
		<parameter key="message_greet" value="Hello |PLAYERNAME|. Do you want to exchange THEITEM for THEPRIZE?!"/> 
		<parameter key="message_farewell" value="Cya later!"/>
	</parameters>
</npc>

in scripts /data/npc/scripts make ex.lua
Lua:
--Script by Amiroslo
local keywordHandler = KeywordHandler:new()
local npcHandler = NpcHandler:new(keywordHandler)
NpcSystem.parseParameters(npcHandler)
 
local t = {}
 
local item = 9020 -- The item that he should have
local count = 1 -- how many of it he should have
 
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
 
function creatureSayCallback(cid, type, msg)
	if not npcHandler:isFocused(cid) then
		return false
	elseif msgcontains(msg, 'change') then
		selfSay('are you sure you want to change '.. count ..' of '.. getItemNameById(item) ..' for THEPRIZE?', cid)--Change THEPRIZE to prize name
		t[cid] = 1
	elseif t[cid] == 1 then
		npcHandler:releaseFocus(cid)
		t[cid] = nil
		if msgcontains(msg, 'yes') then
			if doPlayerRemoveItem(cid, item, count) then
			   doPlayerAddItem(cid, ITEMID) --Change ITEMID to the prize
				selfSay('you have recieved THEPRIZE', cid) --Change THEPRIZE to prize name
			else
				selfSay('you don\'t have '.. count ..' of '.. getItemNameById(item) ..' to recieve your prize!', cid)
				end
			end
		end
	return true
end
 
npcHandler:setCallback(CALLBACK_MESSAGE_DEFAULT, creatureSayCallback)
npcHandler:addModule(FocusModule:new())

Tested on 0.3.6pl1

Rep++ if helped you
 
Last edited:
doesn't work on tfs 0.3.6 he takes the item off you and you dont recieve the reward..
 
edited :p
try now and change that line
doPlayerAddItem(cid, ITEMID) --Change ITEMID to the prize
 
Back
Top Bottom