Ir para conteúdo
Propaganda

Posts Recomendados

Olá galera, eu estava atrás de um npc onde o player poderia acessar varios locais escondidos através de um npc, porém, nao estava conseguindo, hoje que saiu o npc...ou seja como funciona.

O player chega no npc fala hi, o npc pede pra ele dizer a palavra chave secreta, caso ele acerte, ele é teleportado em 1 das 10 posições disponiveis no script, porem caso ele erre a palavra chave, ele leva um hit de dano na hp.

 

local cfg = {
    keyword = "SENHA_AQUI", -- A SENHA, MUDE A SEU CRITÉRIO
    damageAmount = 100,      -- QUANTIDADE DE DANOS NO HP
    teleportPositions = {    -- LISTA DAS 10 POSIÇÕES
        {x = 1506, y = 742, z = 6},
        {x = 1510, y = 746, z = 6},
        {x = 1499, y = 738, z = 6},
        {x = 1515, y = 748, z = 6},
        {x = 1495, y = 736, z = 6},
        {x = 1520, y = 750, z = 6},
        {x = 1490, y = 734, z = 6},
        {x = 1525, y = 752, z = 6},
        {x = 1485, y = 732, z = 6},
        {x = 1530, y = 754, z = 6}
    },
    correctKeywordEffect = 30,  -- EFEITO CASO ACERTE A PALAVRA CHAVE
    incorrectKeywordEffect = 11 -- EFEITO CASO ERRE A PALAVRA CHAVE
}

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

-- FUNÇÃO DE TELEPORTE CASO A SENHA SEJA CORRETA
function teleportToRandomPosition(cid)
    local randomIndex = math.random(1, #cfg.teleportPositions)
    local randomPosition = cfg.teleportPositions[randomIndex]
    doTeleportThing(cid, randomPosition)
end

function creatureSayCallback(cid, type, msg)
    if (not npcHandler:isFocused(cid)) then
        return false
    end

    if msgcontains(msg, cfg.keyword) then
        -- Palavra-chave correta, teletransporte o jogador e exiba o efeito correto
        selfSay("Palavra-chave correta! Teleportando você para o local secreto.")
        doSendMagicEffect(getCreaturePosition(cid), cfg.correctKeywordEffect)
        teleportToRandomPosition(cid)  -- Teleporte o NPC para uma posição aleatória
        doSendMagicEffect(getCreaturePosition(cid), 21) -- Teleport effect
    else
        -- Palavra-chave incorreta, causa dano e exibe o efeito incorreto
        selfSay("Palavra-chave incorreta! Você sofre danos de vida.")
        doSendMagicEffect(getCreaturePosition(cid), cfg.incorrectKeywordEffect)
        doCreatureAddHealth(cid, -cfg.damageAmount)
    end

    return true
end

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

XML

<?xml version="1.0" encoding="UTF-8"?>
<npc name="Room Guardian" script="tphit.lua" walkinterval="3000" floorchange="0" access="5" level="1" maglevel="1">
<health now="150" max="150"/>
<look type="1158" head="114" body="119" legs="114" feet="114" corpse="2212"/>
<health now="150" max="150"/>
<look type="520" head="115" body="88" legs="114" feet="0"/>
<parameters>
<parameter key="message_greet" value="Eu posso te levar a alguns lugares secreto, diga a senha correta!"/>
<parameter key="message_walkaway" value="Boa Sorte aventureiro!"/>
</parameters>
</npc>

 

  • Like 4
Link para o comentário
https://tibiadevs.com/forums/topic/166-npc-de-teleport-com-senha/
Compartilhar em outros sites

Nossa muito bom!!

editei um pouco botei outras posições e uma senha especifica para cada posição 
 

Spoiler
local cfg = {
    teleportPositions = {
        {x = 1506, y = 742, z = 6, keyword = "SENHA_1"},
        {x = 1510, y = 746, z = 6, keyword = "SENHA_2"},
        {x = 1499, y = 738, z = 6, keyword = "SENHA_3"},
        {x = 1515, y = 748, z = 6, keyword = "SENHA_4"},
        {x = 1495, y = 736, z = 6, keyword = "SENHA_5"},
        {x = 1520, y = 750, z = 6, keyword = "SENHA_6"},
        {x = 1490, y = 734, z = 6, keyword = "SENHA_7"},
        {x = 1525, y = 752, z = 6, keyword = "SENHA_8"},
        {x = 1485, y = 732, z = 6, keyword = "SENHA_9"},
        {x = 1530, y = 754, z = 6, keyword = "SENHA_10"}
    },
    correctKeywordEffect = 30,
    incorrectKeywordEffect = 11,
    damageAmount = 100
}

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 teleportToRandomPosition(cid)
    local randomIndex = math.random(1, #cfg.teleportPositions)
    local randomPosition = cfg.teleportPositions[randomIndex]
    doTeleportThing(cid, randomPosition)
end

function creatureSayCallback(cid, type, msg)
    if (not npcHandler:isFocused(cid)) then
        return false
    end

    local keywordFound = false

    for _, position in ipairs(cfg.teleportPositions) do
        if msgcontains(msg, position.keyword) then
            selfSay("Palavra-chave correta! Teleportando você para o local secreto.")
            doSendMagicEffect(getCreaturePosition(cid), cfg.correctKeywordEffect)
            doTeleportThing(cid, position)
            doSendMagicEffect(getCreaturePosition(cid), 21)
            keywordFound = true
            break
        end
    end

    if not keywordFound then
        selfSay("Palavra-chave incorreta! Você sofre danos de vida.")
        doSendMagicEffect(getCreaturePosition(cid), cfg.incorrectKeywordEffect)
        doCreatureAddHealth(cid, -cfg.damageAmount)
    end

    return true
end

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

 

 

  • Like 1
Link para o comentário
https://tibiadevs.com/forums/topic/166-npc-de-teleport-com-senha/#findComment-706
Compartilhar em outros sites

17 minutos atrás, ThonySz disse:

Nossa muito bom!!

editei um pouco botei outras posições e uma senha especifica para cada posição 

codigo:
 

  Ocultar conteúdo
local cfg = {
    teleportPositions = {
        {x = 1506, y = 742, z = 6, keyword = "SENHA_1"},
        {x = 1510, y = 746, z = 6, keyword = "SENHA_2"},
        {x = 1499, y = 738, z = 6, keyword = "SENHA_3"},
        {x = 1515, y = 748, z = 6, keyword = "SENHA_4"},
        {x = 1495, y = 736, z = 6, keyword = "SENHA_5"},
        {x = 1520, y = 750, z = 6, keyword = "SENHA_6"},
        {x = 1490, y = 734, z = 6, keyword = "SENHA_7"},
        {x = 1525, y = 752, z = 6, keyword = "SENHA_8"},
        {x = 1485, y = 732, z = 6, keyword = "SENHA_9"},
        {x = 1530, y = 754, z = 6, keyword = "SENHA_10"}
    },
    correctKeywordEffect = 30,
    incorrectKeywordEffect = 11
}

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 teleportToRandomPosition(cid)
    local randomIndex = math.random(1, #cfg.teleportPositions)
    local randomPosition = cfg.teleportPositions[randomIndex]
    doTeleportThing(cid, randomPosition)
end

function creatureSayCallback(cid, type, msg)
    if (not npcHandler:isFocused(cid)) then
        return false
    end

    local keywordFound = false

    for _, position in ipairs(cfg.teleportPositions) do
        if msgcontains(msg, position.keyword) then
            selfSay("Palavra-chave correta! Teleportando você para o local secreto.")
            doSendMagicEffect(getCreaturePosition(cid), cfg.correctKeywordEffect)
            doTeleportThing(cid, position)
            doSendMagicEffect(getCreaturePosition(cid), 21)
            keywordFound = true
            break
        end
    end

    if not keywordFound then
        selfSay("Palavra-chave incorreta! Você sofre danos de vida.")
        doSendMagicEffect(getCreaturePosition(cid), cfg.incorrectKeywordEffect)
        doCreatureAddHealth(cid, -cfg.damageAmount)
    end

    return true
end

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

 

 

aqui vc retiro o damageAmount mais a ideia é boa

 

  • Like 1
  • Haha 1
Link para o comentário
https://tibiadevs.com/forums/topic/166-npc-de-teleport-com-senha/#findComment-709
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisar ser um membro para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar Agora
×
  • Criar Novo...