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 GniusPlay
      Pessoal, preciso de uma script que ao player usar o item na pokeball do pokemon, ele ganhe +100 de vida
      Exemplo:
      Ele tem 1400 de vida, ai ao usar o item ele ficaria com 1500
       
    • By Nother
      Olá, gostaria de uma speel em área que puxasse o agro dos bixos para que eles parassem de focar outra pessoa e focassem quem agrou eles.
      A spell pode ser um quadrado de 4 sqm de distancia para todos os lados.
      Desde já agradeço
       
    • By Kanoshi
      Ent to tentando fazer com que o npc feche o shop assim que o player der bye porém ele continua com o shop aberto.
       
      Rep a quem ajudar!
    • By xBlackWolf
      .Qual servidor ou website você utiliza como base? 
      OTG 
       
      Qual o motivo deste tópico? 
      Estou tentando repassar para linguagem do OTG e não funciona o script, também não dá erros.
       
      Você tem o código disponível? Se tiver publique-o aqui: 
       function addOnlineBonus(player, minutos, bonus_contador, bonus_max) player:setStorageValue(bonus_contador, player:getStorageValue(bonus_contador) + 1) addEvent(addOnlineBonus, minutos * 60 * 1000, player, minutos, bonus_contador, bonus_max) end function MinutesToClock(minutes) local minutes = tonumber(minutes) if minutes <= 0 then return "00:00"; else if minutes >= 60 then hours = string.format("%02.f", math.floor(minutes/60)); mins = string.format("%02.f", math.floor(minutes - hours*60)); else hours = "00"; mins = minutes; end if hours ~= 1 then return hours.." Horas e "..mins.. " minutos." else return hours.." Hora e "..mins.. " minutos." end end end function showOnlineBonus(player,bonus_contador,minutos) local finaltime = 0 if(player:getStorageValue(bonus_contador) >= 60) then finaltime = MinutesToClock(player:getStorageValue(bonus_contador)) else finaltime = (player:getStorageValue(bonus_contador).." Minutos.") end player:SendTextMessage(MESSAGE_STATUS_CONSOLE_BLUE,"Voce esta Online a: " ..finaltime) addEvent(showOnlineBonus, minutos * 600 * 1000, player, bonus_contador, minutos) end function onLogin(player) player:registerEvent("onlinebonus") local bonus_contador = 72702 -- Storage que vai guardar tempo online em minutos. local bonus_max = 99999 -- Quantidade de minutos máximo por dia. local minutos = 1 -- A cada quanto tempo vamos ganhar pontos. if player:getStorageValue(bonus_contador) > 0 then player:SendTextMessage(MESSAGE_STATUS_CONSOLE_BLUE,"Tempo Online acumulado hoje: "..MinutesToClock(player:getStorageValue(cid,bonus_contador))) else player:setStorageValue(bonus_contador, 0) player:SendTextMessage(MESSAGE_STATUS_CONSOLE_BLUE,"Fique Online e receba o TOP Online ! Alem de chances maiores na loteria ! Tenha um otimo jogo!") end addEvent(addOnlineBonus, minutos * 60 * 1000, player, minutos, bonus_contador, bonus_max) addEvent(showOnlineBonus, minutos * 600 * 1000, player, bonus_contador, minutos) return true end  
      Você tem alguma imagem que possa auxiliar no problema? Se sim, coloque-a aqui. 
       
      Não tem print de erros, simplesmente o processo não inicia de contar os minutos disponíveis... também não envia nada ao player.
       
      Segue script usado como base TFS 0.4 :
      function addOnlineBonus(cid, minutos, bonus_contador, bonus_max) if not isPlayer(cid) then return false end setPlayerStorageValue(cid, bonus_contador, getPlayerStorageValue(cid, bonus_contador) + 1) addEvent(addOnlineBonus, minutos * 60 * 1000, cid, minutos, bonus_contador, bonus_max) end function MinutesToClock(minutes) local minutes = tonumber(minutes) if minutes <= 0 then return "00:00"; else if minutes >= 60 then hours = string.format("%02.f", math.floor(minutes/60)); mins = string.format("%02.f", math.floor(minutes - hours*60)); else hours = "00"; mins = minutes; end if hours ~= 1 then return hours.." Horas e "..mins.. " minutos." else return hours.." Hora e "..mins.. " minutos." end end end function showOnlineBonus(cid,bonus_contador,minutos) local finaltime = 0 if not isPlayer(cid) then return false end if(getPlayerStorageValue(cid,bonus_contador) >= 60) then finaltime = MinutesToClock(getPlayerStorageValue(cid,bonus_contador)) else finaltime = (getPlayerStorageValue(cid,bonus_contador).." Minutos.") end doPlayerSendTextMessage(cid,MESSAGE_STATUS_CONSOLE_BLUE,"Voce esta Online a: " ..finaltime) addEvent(showOnlineBonus, minutos * 600 * 1000, cid, bonus_contador, minutos) end function onLogin(cid) local bonus_contador = 72702 -- Storage que vai guardar tempo online em minutos. local bonus_max = 99999 -- Quantidade de minutos máximo por dia. local minutos = 1 -- A cada quanto tempo vamos ganhar pontos. if getPlayerStorageValue(cid, bonus_contador) > 0 then doPlayerSendTextMessage(cid,MESSAGE_STATUS_CONSOLE_BLUE,"Tempo Online acumulado hoje: "..MinutesToClock(getPlayerStorageValue(cid,bonus_contador))) else setPlayerStorageValue(cid, bonus_contador, 0) doPlayerSendTextMessage(cid,MESSAGE_STATUS_CONSOLE_BLUE,"Fique Online e receba o TOP Online ! Alem de chances maiores na loteria ! Tenha um otimo jogo!") end addEvent(addOnlineBonus, minutos * 60 * 1000, cid, minutos, bonus_contador, bonus_max) addEvent(showOnlineBonus, minutos * 600 * 1000, cid, bonus_contador, minutos) return true end  
       
      Aguardo quem puder me ajudar rsrs
    • By ZeeroBR
      Não sei se é padrão do game ou coisa do tipo, mas os summons que eu spawno conseguem me atacar com spells em área, alguém sabe a solução? tentei utilizar um script mas não tive êxito. Utilizo tfs 0.4 rev 3884 8.60
  • Recently Browsing   0 members

    No registered users viewing this page.


×
×
  • Create New...

Important Information

Confirmação de Termo