Ir para conteúdo
Propaganda

NPC DE TELEPORT COM SENHA


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
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
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
Compartilhar em outros sites

Participe da Conversa

Você pode postar agora e se cadastrar mais tarde. Cadastre-se Agora para publicar com Sua Conta.

Visitante
Responder

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

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.

×
  • Criar Novo...