Jump to content

Scripting Npc que entrega um item e teleporta pra um lugar


Recommended Posts

TFS 0.4

 

1- Queria um script de um npc que seria tipo um barco, mas ao inves de entregar gold, você pagaria um item pra ele.
ou

2- Queria um script de piso q você pisa no sqm e se tiver com 1 item na bp você é teleportado para um lugar (Tipo o livro da poi) o item deve sumir

Edited by Orientalz (see edit history)
Link to post
Share on other sites

Em (data/npc/scripts) crie teleport.lua

dentro coloque

Spoiler





local tab = {
	pos = {x = 123, y = 456, z = 7}, -- posição x, y, z do local a teleportar o player
	item = {5432, 1}, -- {itemID, count}
	price = 0
}

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

function creatureSayCallback(cid, type, msg)
    if (not npcHandler:isFocused(cid)) then
        return false
    end
	
	local talkUser = NPCHANDLER_CONVbehavior == CONVERSATION_DEFAULT and 0 or cid
	if (msgcontains(msg, 'teleport')) then
		talkState[talkUser] = 1
		selfSay('Are you sure?', cid)
		selfSay('Remember..you need '..tab.item[2]..' '..getItemNameById(tab.item[1])..' and '..tab.price..' crystal coins to be teleported.', cid)
	elseif (msgcontains(msg, 'yes') and talkState[talkUser] == 1) then
		if (getPlayerItemCount(cid, tab.item[1]) >= tab.item[2] and doPlayerRemoveMoney(cid, tab.price * 10000)) then 
			doTeleportThing(cid, tab.pos)
		 	doPlayerRemoveItem(cid, tab.item[1], tab.item[2])
            doPlayerRemoveMoney(cid, tab.price * 10000)	
			doSendMagicEffect(getThingPos(cid), CONST_ME_TELEPORT)
			selfSay('Have a good trip.', cid)
		else
			talkState[talkUser] = 0
			selfSay('I can not teleport you. You do not have the required items.', cid)
		end
	elseif (msgcontains(msg, 'no') and talkState[talkUser] == 1) then
		talkState[talkUser] = 0
		selfSay('Okay, maybe another time.', cid)
	end
	
	return true
end

npcHandler:setCallback(CALLBACK_MESSAGE_DEFAULT, creatureSayCallback)
npcHandler:addModule(FocusModule:new())

 

Em (data/npc) crie teleport.xml

dentro coloque

Spoiler








<npc name="Teleporter Man" script="data/npc/scripts/teleport.lua" access="5" lookdir="1">
<health now="1000" max="1000"/>
<look type="123" head="45" body="67" legs="79" feet="10" addons="1"/>
	<parameters>
		<parameter key="message_greet" value="Hello |PLAYERNAME|. I can {teleport} you to an area." />
	</parameters>
</npc>

 

 

 

Ajudei?? Rep+ 🥰

Edited by Thony D. Serv (see edit history)
Link to post
Share on other sites

33 minutos atrás, Thony D. Serv disse:

Em (data/npc/scripts) crie teleport.lua

dentro coloque

  Mostrar conteúdo oculto




local tab = {
	pos = {x = 123, y = 456, z = 7}, -- posição x, y, z do local a teleportar o player
	item = {5432, 1}, -- {itemID, count}
	price = 0
}

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

function creatureSayCallback(cid, type, msg)
    if (not npcHandler:isFocused(cid)) then
        return false
    end
	
	local talkUser = NPCHANDLER_CONVbehavior == CONVERSATION_DEFAULT and 0 or cid
	if (msgcontains(msg, 'teleport')) then
		talkState[talkUser] = 1
		selfSay('Are you sure?', cid)
		selfSay('Remember..you need '..tab.item[2]..' '..getItemNameById(tab.item[1])..' and '..tab.price..' crystal coins to be teleported.', cid)
	elseif (msgcontains(msg, 'yes') and talkState[talkUser] == 1) then
		if (getPlayerItemCount(cid, tab.item[1]) >= tab.item[2] and doPlayerRemoveMoney(cid, tab.price * 10000)) then 
			doTeleportThing(cid, tab.pos)
		 	doPlayerRemoveItem(cid, tab.item[1], tab.item[2])
            doPlayerRemoveMoney(cid, tab.price * 10000)	
			doSendMagicEffect(getThingPos(cid), CONST_ME_TELEPORT)
			selfSay('Have a good trip.', cid)
		else
			talkState[talkUser] = 0
			selfSay('I can not teleport you. You do not have the required items.', cid)
		end
	elseif (msgcontains(msg, 'no') and talkState[talkUser] == 1) then
		talkState[talkUser] = 0
		selfSay('Okay, maybe another time.', cid)
	end
	
	return true
end

npcHandler:setCallback(CALLBACK_MESSAGE_DEFAULT, creatureSayCallback)
npcHandler:addModule(FocusModule:new())

 

Em (data/npc) crie teleport.xml

dentro coloque

  Mostrar conteúdo oculto







<npc name="Teleporter Man" script="data/npc/scripts/teleport.lua" access="5" lookdir="1">
<health now="1000" max="1000"/>
<look type="123" head="45" body="67" legs="79" feet="10" addons="1"/>
	<parameters>
		<parameter key="message_greet" value="Hello |PLAYERNAME|. I can {teleport} you to an area." />
	</parameters>
</npc>

 

 

 

Ajudei?? Rep+ 🥰

Como remove a parte do price man?

Link to post
Share on other sites

2- Da para fazer da seguinte forma e que eu consegui fazer foi:

 O player passa pelo tile perde o item, porém não é teleportado, da para você colocar um portal logo na frente do tile para o player ser teleportado para a pos desejada.

caso queira utilizar, tá ai:

Em movements/script/crie um arquivo.lua e coloque:

 

Spoiler

function onStepIn(cid, item, position, fromPosition)

    local id,amount = 2419,1 -- id, quantidade para poder passar pelo tile
    
    if not doPlayerRemoveItem(cid, id, amount) then
    
        doTeleportThing(cid, fromPosition, true)
        
        doPlayerSendTextMessage(cid, 25, "Você só pode passar se tiver " .. amount .. " " .. getItemNameById(id) .. ".")
        
        doSendMagicEffect(getThingPos(cid), CONST_ME_MAGIC_BLUE)
        
        return true
        
    end
    
    return true
    
end

Em movements.xml adiciona:


<movevent type="StepIn" actionid="25364" event="script" value="nomedoarquivo.lua"/>

 

Configurando:

actionid="25364" -- Action que você coloca na tile no RME.

Edited by Nysman (see edit history)
Link to post
Share on other sites

NPC:

 

Boat.xml

Spoiler

<?xml version="1.0" encoding="UTF-8"?>
<npc name="Dederin" script="boat.lua" walkinterval="0">
    <health now="100" max="100"/>
    <look type="459"/>
    <parameters>
        <parameter key="module_shop" value="1"/>
        <parameter key="message_greet" value="Olá, |PLAYERNAME|! Eu posso te levar para {Assassin Tower}."/>
    </parameters>
</npc>

Boat.lua

Spoiler

local assassintower = {x=1015, y=885, z=7}
local itemid = 2144
local quantidade = 1
local keywordHandler = KeywordHandler:new()
local npcHandler = NpcHandler:new(keywordHandler)
NpcSystem.parseParameters(npcHandler)
 
function onCreatureAppear(cid)         npcHandler:onCreatureAppear(cid)         end
function onCreatureDisappear(cid)      npcHandler:onCreatureDisappear(cid)         end
function onCreatureSay(cid, type, msg)   npcHandler:onCreatureSay(cid, type, msg:lower())   end
function onThink()                  npcHandler:onThink()                  end
local talkState = {}
 
function creatureSayCallback(cid, type, msg)
   if(not npcHandler:isFocused(cid)) then
      return false
   end
 
   local talkUser = NPCHANDLER_CONVBEHAVIOR == CONVERSATION_DEFAULT and 0 or cid
    if msgcontains(msg, "assassin tower") then
        selfSay("Voce tem certeza que deseja ir ate Assassin Tower?", cid)
        talkState[talkUser] = 1
    elseif (msgcontains(msg, "yes") and talkState[talkUser] == 1) and (getPlayerItemCount(cid, itemid) >= quantidade) then
        doPlayerRemoveItem(cid, itemid, quantidade)
        doTeleportThing(cid, assassintower)
        selfSay("Ate mais!", cid)
        talkState[talkUser] = 0
    elseif (msgcontains(msg, "yes") and talkState[talkUser] == 1) and (getPlayerItemCount(cid, itemid) <= quantidade) then
        selfSay("Desculpe, voce precisa ter nomeitem para passar.", cid)
        talkState[talkUser] = 0
    end
   return true
end
 
npcHandler:setCallback(CALLBACK_MESSAGE_DEFAULT, creatureSayCallback)
npcHandler:addModule(FocusModule:new())

 

Edited by So volto tarde
correção npc, retirando a citação (see edit history)
Link to post
Share on other sites

33 minutos atrás, So volto tarde disse:

NPC:

 

Boat.xml

  Mostrar conteúdo oculto

<?xml version="1.0" encoding="UTF-8"?>
<npc name="Dederin" script="boat.lua" walkinterval="0">
    <health now="100" max="100"/>
    <look type="459"/>
    <parameters>
        <parameter key="module_shop" value="1"/>
        <parameter key="message_greet" value="Olá, |PLAYERNAME|! Eu posso te levar para {Assassin Tower}."/>
    </parameters>
</npc>

Boat.lua

  Mostrar conteúdo oculto

 -- Adicione a posição dos locais aqui, seguindo o modelo abaixo:
local assassintower = {x=254, y=393, z=7}
local itemid = 2144 -- id do item
 
local keywordHandler = KeywordHandler:new()
local npcHandler = NpcHandler:new(keywordHandler)
NpcSystem.parseParameters(npcHandler)
 
function onCreatureAppear(cid)         npcHandler:onCreatureAppear(cid)         end
function onCreatureDisappear(cid)      npcHandler:onCreatureDisappear(cid)         end
function onCreatureSay(cid, type, msg)   npcHandler:onCreatureSay(cid, type, msg:lower())   end
function onThink()                  npcHandler:onThink()                  end
local talkState = {}
 
function creatureSayCallback(cid, type, msg)
   if(not npcHandler:isFocused(cid)) then
      return false
   end
 
   local talkUser = NPCHANDLER_CONVBEHAVIOR == CONVERSATION_DEFAULT and 0 or cid
    if msgcontains(msg, "travel") then
        selfSay("Eu posso te levar para {Assassin Tower}, {exemplo1} e {exemplo2}.", cid) -- ao colocar as palavras entre chaves "{}", as mesmas sairão na cor azul dentro do jogo
    end
    
    if msgcontains(msg, "assassin tower") then
        selfSay("Voce realmente quer viajar para {Assassin Tower}? Eu te cobrarei o item """, cid)
        talkState[talkUser] = 9
    elseif msgcontains(msg, "yes") and talkState[talkUser] == 9 then
        if not isPlayerPzLocked(cid) then
            doPlayerRemoveItem(cid, itemid, 1) -- o "1" é a quantidade caso queira mudar
            doSendMagicEffect(getThingPos(cid), 10) -- efeito no player no boat atual
            npcHandler:releaseFocus(cid)
            doTeleportThing(cid, assassintower)
            doSendMagicEffect(assassintower, 10) -- efeito no player ao chegar no destino
        else
            selfSay("Voce deve estar sem pz locked!", cid)
        end
        elseif getPlayerItemCount(cid, itemid) == 0 then -- caso queira adicionar uma quantia ao item necessário para viajar, uma alteração terá de ser feita aqui
            selfSay("Desculpe, voce nao tem o item!", cid)
        end
    talkState[talkUser] = 0
    end
    
   return true
end
 
 
npcHandler:setCallback(CALLBACK_MESSAGE_DEFAULT, creatureSayCallback)
npcHandler:addModule(FocusModule:new())

 

 

  Mostrar conteúdo oculto

function onStepIn(cid, item, position, fromPosition)

    local id,amount = 2419,1 -- id, quantidade para poder passar pelo tile

    local lugar = {x=0, y=0, z=0}
    
    if not doPlayerRemoveItem(cid, id, amount) then
    
        doTeleportThing(cid, lugar)
        
        doPlayerSendTextMessage(cid, 25, "Você só pode passar se tiver " .. amount .. " " .. getItemNameById(id) .. ".")
        
        doSendMagicEffect(getThingPos(cid), CONST_ME_MAGIC_BLUE)
        
        return true
        
    end
    
    return true
    
end

 

Ele vai teleportar com esse script ai seu mas não vai pedir item e nem remover brother ^^ 

Link to post
Share on other sites

42 minutos atrás, Nysman disse:

Ele vai teleportar com esse script ai seu mas não vai pedir item e nem remover brother ^^ 

NPC corrigido, reformulação movement:

Spoiler

local posic = {x=1017, y=884, z=7} --- posição de teleporte
local itemid = 2144
local quantidade = 1
function onStepIn(cid, item, position, fromPosition, toPosition)
    if (getPlayerItemCount(cid, itemid) >= quantidade) then
        doPlayerRemoveItem(cid, itemid, quantidade)
        doTeleportThing(cid, posic)
        doSendMagicEffect(posic,10)
    else
        doTeleportThing(cid, fromPosition)
        doPlayerSendCancel(cid, "Você não tem o item.")
end
return true
end

 

Link to post
Share on other sites

Agora, Thony D. Serv disse:

Mantém 0 que ele não irá cobrar nada

é q eu n queria q fosse tipo barco, o cara iria entregar o item de surpresa e seria teleportado, com o price, alem da frase doq o npc pede, aparece tipo a mensagem "0 golds" algo assim

Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

  • Similar Content

    • By hiquezerah
      .Qual servidor ou website você utiliza como base? OTX
       
      Qual o motivo deste tópico? Bom dia rapazeada do tk, alguém poderia me ajudar a solucionar esse erro que está ocorrendo com esse script? Acabei achando esse script aqui mesmo no tk e tentei adaptalo para assim que o player chegar a certa porcentagem de vida irá ativar uma spell.
      o script está funcionando, a spell está sendo ativada, porém mostra esse erro na distro "spell not found". Alguém poderia me ajudar por favor?
       
      Está surgindo algum erro? Se sim coloque-o aqui. 
       
      Você tem o código disponível? Se tiver publique-o aqui: 
      local config = { vocations = {10,11, 22}, --IDs das vocações. percent = 95, -- porcentagem de sair a magia (50 = 50% de chance) valorvida = 100, --quanto deve ser o valor minimo de vida a perder para executar o script storage = 112993, time = 1, spell = "shikai" } function onStatsChange(cid, attacker, type, combat, value) if type == STATSCHANGE_HEALTHLOSS and value >= config.valorvida and isInArray(config.vocations, getPlayerVocation(cid)) then if math.random (1,100) <= config.percent and getPlayerStorageValue(cid, 112993) < os.time() then doCreatureCastSpell(cid, config.spell) setPlayerStorageValue(cid, 112993, os.time() + config.time * 20) end end return true end    
      Você tem alguma imagem que possa auxiliar no problema? Se sim, coloque-a aqui. 
       
    • By knepperzik
      Estou usando OTX.

      Fala galera,

      Estou com um probleminha em meu servidor, sobre o castle, não esta salvando a guild dominante.
      Ja verifiquei o config.lua e sim esta como "true" saveGlobalStorage=true.
      Se alguem conseguir dar uma ajuda.
       
    • By GniusPlay
      Pessoal, tenho uma script que o player ganha x item e volta para o cp quando não tem ninguem em x  area, mas eu gostaria de fazer com que essa script fosse ativada depois de 5 segundos após o player pisar nesse tile.
      Exemplo: Player pisa no tile, da 5 segundos e o script é ativado
      Se não tiver ninguem nessa area, o script passa 5 segundos e funciona normal, caso tenha player nessa area, o script não funciona!
      A script ja esta ok, só falta adicionar 5 segundos
       
      function onStepIn(cid, item, position, fromPosition) local pos = {x = 1037, y = 1034, z = 7} local battlewin = 1 if #getCreatureSummons(cid) >= 1 then else if #getPlayersInArea(battleroyale.area) > 1 then return true end doTeleportThing(cid, pos) local item = doPlayerAddItem(cid, 5805, 1) doItemSetAttribute(item, "description", getCreatureName(cid).." conquistou este trofeu apos vencer uma partida no Battle Royale.") doBroadcastMessage(""..getCreatureName(cid).." Venceu o evento Battle Royale") doPlayerAddItem(cid,12618,1) doPlayerAddItem(cid,2152,30) addTopbattle(cid, battlewin) return true end end  
    • By GniusPlay
      Pessoal, preciso de uma script que limitasse x item dos players
      Por exemplo, ele só poderia ter na sua conta 5 pedras, se colocasse pra ter 6 pedra não teria como!
       
    • By GniusPlay
      Pessoal, tenho uma script que o player só passa se ele tiver uma guild, a script funciona  certinho, só q da um erro na distro quando um pokemon (monstro) passa por cima desse tile
      Erro:
      [07/03/2021 16:08:43] [Error - MoveEvents Interface] 
      [07/03/2021 16:08:43] datapack/movements/scripts/guildpiso.lua:onStepIn
      [07/03/2021 16:08:43] Description: 
      [07/03/2021 16:08:43] datapack/movements/scripts/guildpiso.lua:2: attempt to compare number with boolean
      [07/03/2021 16:08:43] stack traceback:
      [07/03/2021 16:08:43]     datapack/movements/scripts/guildpiso.lua:2: in function <datapack/movements/scripts/guildpiso.lua:1>
       
      Script:
       
       
  • Recently Browsing   0 members

    No registered users viewing this page.


×
×
  • Create New...

Important Information

Confirmação de Termo