Ir para conteúdo
  • Cadastre-se

(Resolvido)NPC's que da storage para porta e item para porta


Ir para solução Resolvido por Wakon,

Posts Recomendados

Olá, preciso de dois tipos diferentes de  NPC um que de storage para passar em alguma porta ou portal ao falar com ele tipo "hi - yes ou sim", outro que entregue um item configuravel e de uma storage para acessar alguma porta ou portal e um script de porta que só consiga passar caso tenha o item configuravel (no caso um anel) equipado. TFS 0.4

Editado por Boush (veja o histórico de edições)
Link para o post
Compartilhar em outros sites

Qual a versão amigo?

Precisa de ajuda? Poste a versão de seu TFS.

*************************************************************************************************************

 

Servidores? Eu indico:

logo2.png

Use o cupom TIBIAKING e receba 50% de desconto na primeira mensalidade!

Pague menos de R$ 19,00 no primeiro mês!

 

protecaoddos.jpg afiliados.jpg

Link para o post
Compartilhar em outros sites
  • Solução

Amigo, cuidado com os "UP" no tópico, leia as regras:

http://www.tibiaking.com/forum/topic/1281-regras-gerais/?p=7680

2.7 - Dar "UP" para subir tópicos:
Não é proibido da "UP" em seus tópicos para ele subir na listagem, porém você só poderá usar deste beneficio dentro de um período de 24h, ou seja, se você deu "UP" agora só poderá dar novamente daqui 24h, caso ao contrário seu tópico será fechado. Lembre-se que isto é um exceção da regra do double post, tanto é que você só poderá usar deste beneficio de 48 em 48 horas.


NPC que dá acesso:

local message = {
acesso = "MENSAGEM AO PEDIR ACESSO.", -- MENSAGEM AO PEDIR ACESSO.
acessoc = "MENSAGEM CASO JÁ TENHA ACESSO.", -- MENSAGEM CASO JÁ TENHA ACESSO.
acessop = "MENSAGEM QUANDO LIBERAR O ACESSO." -- MENSAGEM QUANDO LIBERAR O ACESSO.
}

local storage = 55500

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
    msg = msg:lower();
    local talkUser = NPCHANDLER_CONVBEHAVIOR == CONVERSATION_DEFAULT and 0 or cid

   if msgcontains(msg, 'acesso') then
      if getPlayerStorageValue(cid, storage) < 1 then
         selfSay(message.acesso, cid)
         talkState[talkUser] = 1
      else
         selfSay(message.acessoc, cid)
         talkState[talkUser] = 0
      end
   elseif msgcontains(msg, 'yes') then
      if talkState[talkUser] == 1 then
         selfSay(message.acessop, cid)
         setPlayerStorageValue(cid, storage, 1)
      end
   elseif msgcontains(msg, 'no') then
      if talkState[talkUser] == 1 then
         selfSay('Ok.', cid)
         talkState[talkUser] = 0
      end
   end       
end

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

XML do NPC que dá acesso:

<?xml version="1.0" encoding="UTF-8"?>
<npc name="Nome_do_npc" script="data/npc/scripts/nome_do_arquivo.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="Olá |PLAYERNAME|. MENSAGEM AO FALAR COM O NPC."/>
        </parameters>
</npc>


NPC que dá acesso e item:

local message = {
    mission = "MENSAGEM AO PEDIR ACESSO.", -- MENSAGEM AO PEDIR ACESSO.
    acessoc = "MENSAGEM CASO JÁ TENHA ACESSO.", -- MENSAGEM CASO JÁ TENHA ACESSO.
    acessop = "MENSAGEM QUANDO LIBERAR O ACESSO." -- MENSAGEM QUANDO LIBERAR O ACESSO.
}

local config = {
    storagen = 55505, -- Storage para não ganhar o item varias vezes.
    storage = 55501, -- Storage para acesso.
    item = 2160
}

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
    msg = msg:lower();
    local talkUser = NPCHANDLER_CONVBEHAVIOR == CONVERSATION_DEFAULT and 0 or cid

   if msgcontains(msg, 'acesso') then
      if getPlayerStorageValue(cid, config.storagen) < 1 then
         selfSay(message.acesso, cid)
         talkState[talkUser] = 1
      else
         selfSay(message.acessoc, cid)
         talkState[talkUser] = 0
      end
   elseif msgcontains(msg, 'yes') then
      if talkState[talkUser] == 1 then
         selfSay(message.acessop, cid)
         doPlayerAddItem(cid, config.item, 1)
         setPlayerStorageValue(cid, config.storage, 1)
      end
   elseif msgcontains(msg, 'no') then
      if talkState[talkUser] == 1 then
         selfSay('Ok.', cid)
         talkState[talkUser] = 0
      end
   end       
end

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

XML do npc que dá acesso e item:

<?xml version="1.0" encoding="UTF-8"?>
<npc name="Nome_do_npc" script="data/npc/scripts/nome_do_arquivo.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="Olá |PLAYERNAME|. MENSAGEM AO FALAR COM O NPC."/>
        </parameters>
</npc>


Portal com acesso:

"Data/movements/scripts", nome_do_arquivo.lua:

local config = {
    anel = 2121, -- ID do anel.
    toPos = {x = 160, y = 54, z = 7}
}

function onStepIn(cid, item, position, fromPosition)
    if not isPlayer(cid) then return true end
    if getPlayerSlotItem(cid, CONST_SLOT_RING).itemid == config.anel then
       doTeleportThing(cid, config.toPos)    
       doSendMagicEffect(getPlayerPosition(cid), CONST_ME_TELEPORT)
       doSendMagicEffect(getThingPosition(item.uid), CONST_ME_TELEPORT)
    else
       doTeleportThing(cid, fromPosition)
       doPlayerSendCancel(cid, "Você precisa equipar o anel "..getItemNameById(config.anel).." para passar.")
       doSendMagicEffect(getThingPosition(item.uid), CONST_ME_TELEPORT)
    end
   return true
end

"Data/movements", no arquivo movements.xml adicione a TAG:

<movevent type="StepIn" actionid="actionID_desejada" event="script" value="nome_do_arquivo.lua" />

Só colocar a actionID_desejada no teleport.

 

Não testei os NPC's, se der erro me avise.

Link para o post
Compartilhar em outros sites

Amigo, cuidado com os "UP" no tópico, leia as regras:

http://www.tibiaking.com/forum/topic/1281-regras-gerais/?p=7680


NPC que dá acesso:

local message = {

acesso = "MENSAGEM AO PEDIR ACESSO.", -- MENSAGEM AO PEDIR ACESSO.

acessoc = "MENSAGEM CASO JÁ TENHA ACESSO.", -- MENSAGEM CASO JÁ TENHA ACESSO.

acessop = "MENSAGEM QUANDO LIBERAR O ACESSO." -- MENSAGEM QUANDO LIBERAR O ACESSO.

}

local storage = 55500

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

    msg = msg:lower();

    local talkUser = NPCHANDLER_CONVBEHAVIOR == CONVERSATION_DEFAULT and 0 or cid

   if msgcontains(msg, 'acesso') then

      if getPlayerStorageValue(cid, storage) < 1 then

         selfSay(message.acesso, cid)

         talkState[talkUser] = 1

      else

         selfSay(message.acessoc, cid)

         talkState[talkUser] = 0

      end

   elseif msgcontains(msg, 'yes') then

      if talkState[talkUser] == 1 then

         selfSay(message.acessop, cid)

         setPlayerStorageValue(cid, storage, 1)

      end

   elseif msgcontains(msg, 'no') then

      if talkState[talkUser] == 1 then

         selfSay('Ok.', cid)

         talkState[talkUser] = 0

      end

   end       

end

npcHandler:setCallback(CALLBACK_MESSAGE_DEFAULT, creatureSayCallback)

npcHandler:addModule(FocusModule:new())

XML do NPC que dá acesso:

<?xml version="1.0" encoding="UTF-8"?>

<npc name="Nome_do_npc" script="data/npc/scripts/nome_do_arquivo.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="Olá |PLAYERNAME|. MENSAGEM AO FALAR COM O NPC."/>

        </parameters>

</npc>


NPC que dá acesso e item:

local message = {

    mission = "MENSAGEM AO PEDIR ACESSO.", -- MENSAGEM AO PEDIR ACESSO.

    acessoc = "MENSAGEM CASO JÁ TENHA ACESSO.", -- MENSAGEM CASO JÁ TENHA ACESSO.

    acessop = "MENSAGEM QUANDO LIBERAR O ACESSO." -- MENSAGEM QUANDO LIBERAR O ACESSO.

}

local config = {

    storagen = 55505, -- Storage para não ganhar o item varias vezes.

    storage = 55501, -- Storage para acesso.

    item = 2160

}

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

    msg = msg:lower();

    local talkUser = NPCHANDLER_CONVBEHAVIOR == CONVERSATION_DEFAULT and 0 or cid

   if msgcontains(msg, 'acesso') then

      if getPlayerStorageValue(cid, config.storagen) < 1 then

         selfSay(message.acesso, cid)

         talkState[talkUser] = 1

      else

         selfSay(message.acessoc, cid)

         talkState[talkUser] = 0

      end

   elseif msgcontains(msg, 'yes') then

      if talkState[talkUser] == 1 then

         selfSay(message.acessop, cid)

         doPlayerAddItem(cid, config.item, 1)

         setPlayerStorageValue(cid, config.storage, 1)

      end

   elseif msgcontains(msg, 'no') then

      if talkState[talkUser] == 1 then

         selfSay('Ok.', cid)

         talkState[talkUser] = 0

      end

   end       

end

npcHandler:setCallback(CALLBACK_MESSAGE_DEFAULT, creatureSayCallback)

npcHandler:addModule(FocusModule:new())

XML do npc que dá acesso e item:

<?xml version="1.0" encoding="UTF-8"?>

<npc name="Nome_do_npc" script="data/npc/scripts/nome_do_arquivo.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="Olá |PLAYERNAME|. MENSAGEM AO FALAR COM O NPC."/>

        </parameters>

</npc>


Portal com acesso:

"Data/movements/scripts", nome_do_arquivo.lua:

local config = {

    anel = 2121, -- ID do anel.

    toPos = {x = 160, y = 54, z = 7}

}

function onStepIn(cid, item, position, fromPosition)

    if not isPlayer(cid) then return true end

    if getPlayerSlotItem(cid, CONST_SLOT_RING).itemid == config.anel then

       doTeleportThing(cid, config.toPos)    

       doSendMagicEffect(getPlayerPosition(cid), CONST_ME_TELEPORT)

       doSendMagicEffect(getThingPosition(item.uid), CONST_ME_TELEPORT)

    else

       doTeleportThing(cid, fromPosition)

       doPlayerSendCancel(cid, "Você precisa equipar o anel "..getItemNameById(config.anel).." para passar.")

       doSendMagicEffect(getThingPosition(item.uid), CONST_ME_TELEPORT)

    end

   return true

end

"Data/movements", no arquivo movements.xml adicione a TAG:

<movevent type="StepIn" actionid="actionID_desejada" event="script" value="nome_do_arquivo.lua" />

Só colocar a actionID_desejada no teleport.

 

Não testei os NPC's, se der erro me avise.

Desculpe pelo up excessivo, eu só tenho uma dúvida antes de testar os npc, a storage que o npc dá, é a actionID que tenho que arrumar na porta?

Link para o post
Compartilhar em outros sites

Participe da conversa

Você pode postar agora e se cadastrar mais tarde. Se você tem uma conta, faça o login para postar com sua conta.

Visitante
Responder

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emojis são permitidos.

×   Seu link foi automaticamente incorporado.   Mostrar como link

×   Seu conteúdo anterior foi restaurado.   Limpar o editor

×   Não é possível colar imagens diretamente. Carregar ou inserir imagens do URL.

  • Quem Está Navegando   0 membros estão online

    Nenhum usuário registrado visualizando esta página.

×
×
  • Criar Novo...

Informação Importante

Confirmação de Termo