Ir para conteúdo
  • Cadastre-se

Posts Recomendados

Olá! Estou disponibilizando um NPC que desenvolvi. Porém, devo avisar que só testei em TFS 0.4, e não posso garantir que funcionará em outras versões.

 

Sobre:

 

O NPC em questão é o "Gênio da Lâmpada". Para chegar até ele, o jogador precisa ter a "Lâmpada Mágica", que pode ser adquirida através de uma quest ou em algum evento do servidor, por exemplo.

 

A lâmpada pode ser usada apenas uma vez e, mesmo que o jogador obtenha outra lâmpada, não poderá usá-la novamente. Ao usar a Lâmpada, o jogador será teleportado para a sala do Gênio. Lá, ele não poderá sair até realizar os três desejos.

 

O Gênio pode atender desejos como "entregar itens", "reiniciar tasks", "completar addons" e até mesmo "matar um jogador". Você pode personalizar o NPC para oferecer outras recompensas, como "vip days", "premium points" ou "remover redskull". Seja criativo! :)

 

Após o Gênio realizar os três desejos, o jogador será teleportado para o seu templo de origem.

 

 

Vídeo demonstrativo:

 

 

 

 

data > actions > actions.xml

 

Spoiler

<!-- adicione o itemID que será a lâmpada do gênio -->
<action itemid="XXXX" script="lampadaDoGenio.lua" />

 

 

 

data > actions > lampadaDoGenio.lua

 

Spoiler

function onUse(cid, item)
    
	-- Posição do NPC que o jogador irá teleportar
    local npcPosition = {x = 33180, y = 32824, z = 6}

    -- O valor do storage que será usado para controlar a quantidade de desejos do jogador.
    local storageValue = 5000000
    local wishesUsed = tonumber(getPlayerStorageValue(cid, storageValue))

    if wishesUsed >= 0 then
        doPlayerSendCancel(cid, "Voce so pode usar a "..getItemNameById(item.itemid).." uma unica vez.")
        doSendMagicEffect(getCreaturePosition(cid), 2)
        return true
    else
        setPlayerStorageValue(cid, storageValue, 0)
    end

    doTeleportThing(cid, npcPosition)
    doSendMagicEffect(getCreaturePosition(cid), 36) -- 36 | 53
    doCreatureSay(getCreatureByName("Genio"), "Ola, "..getCreatureName(cid).."! Voce pode me pedir 3 desejos.")
    doRemoveItem(item.uid, 1)

    return true
end

 

 

 

data > npc > Genio.xml

 

Spoiler

<?xml version="1.0" encoding="UTF-8"?>
<npc name="Genio" script="data/npc/scripts/Genio.lua" walkinterval="2000" floorchange="0">
<health now="100" max="100"/>
<look type="80" head="0" body="0" legs="0" feet="0" addons="0"/>
<voices>
<voice text="Qual sera o seu desejo?" interval2="120" margin="1" yell="no"/>
</voices>
<parameters>
        <parameter key="message_greet" value="|PLAYERNAME| O que deseja pedir? {Desejos}"/>
        <parameter key="message_farewell" value="Adeus!"/>
		<parameter key="message_walkaway" value="Tchauzinho!" />
</parameters>
</npc>

 

 

 

data > npc > scripts > Genio.lua

 

Spoiler

-- NPC DESENVOLVIDO POR "Imperius".
-- versão: 8.60 | TFS 0.4
-- data: 26/03/2023

-- SOBRE:
-- Este NPC oferece ao jogador que possuir a lâmpada mágica do gênio a oportunidade de fazer três desejos. 
-- A lâmpada pode ser usada apenas uma vez e, mesmo que o jogador obtenha outra lâmpada, não poderá usá-la novamente.

-- FUNCIONAMENTO - IMPORTANTE:
-- É importante observar que (tasks e addons) pode ter storages diferentes do seu servidor, portanto, 
-- é necessário alterá-las, se necessário.

-- LOCALIZAÇÃO DO NPC:
-- O NPC deve ser colocado em um local fechado no mapa, onde os jogadores não possam chegar ou sair. 
-- Após conceder todos os três desejos, o NPC teleportará automaticamente o jogador de volta ao seu templo de origem.

-- CONFIGURAÇÃO DO ITEM:
-- Por fim, é importante criar um novo item com uma ID exclusiva para a lâmpada do gênio.

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 = {}
local storage = 5000000 -- Storage que salvará a quantidade de desejos do jogador. (recomendo não mexer).
local npc = getCreatureByName("Genio") -- nome do NPC que será o gênio.
 

-- ADICIONE AS IDs DOS ITENS QUE PODERÃO SER ENTREGUES PELO GÊNIO.
-- a quantidade que será entregue sempre será "1" para qualquer item.
local itemsID = {2493, 2523, 2640, 2400, 6579}

-- TASKS QUE PODERÃO SER REINICIADAS.
-- em seu servidor pode ser diferente os storage das tasks. Altere-os para não ter erro.
local tasks = {
 -- [NAME TASK]      =  STORAGE TASK
    ["crocodiles"]     = 320000,
    ["tarantulas"]     = 320001,
    ["sea serpents"]   = 14001,
    ["serpent spawns"] = 14002,
    ["stone golems"]   = 14010,
    ["mammoths"]       = 14011,
    ["ice golems"]     = 14012,
    ["giant spiders"]  = 14020,
    ["hydras"]         = 14021,
    ["behemoths"]      = 14022
}

-- ADDONS QUE PODERÃO SER ENTREGUES AO JOGADOR.
-- em seu servidor pode ser diferente os storage e os looktypes dos outfits. Altere-os para não ter erro.
local addons = {
 -- [OUTFIT NAME]   = {["first"]} = STORAGE, ["second"] = STORAGE, ["female"] = LOOKTYPE, ["male"] = LOOKTYPE} 
    ["citizen"]     = {["first"]  = 10001,   ["second"] = 10002,   ["female"] = 136,      ["male"] = 128},
    ["hunter"]      = {["first"]  = 10003,   ["second"] = 10004,   ["female"] = 137,      ["male"] = 129},
    ["knight"]      = {["first"]  = 10005,   ["second"] = 10006,   ["female"] = 139,      ["male"] = 131},
    ["mage"]        = {["first"]  = 10007,   ["second"] = 10008,   ["female"] = 138,      ["male"] = 130},
    ["summoner"]    = {["first"]  = 10009,   ["second"] = 10010,   ["female"] = 141,      ["male"] = 133},
    ["barbarian"]   = {["first"]  = 10011,   ["second"] = 10012,   ["female"] = 147,      ["male"] = 143},
    ["druid"]       = {["first"]  = 10013,   ["second"] = 10014,   ["female"] = 148,      ["male"] = 144},
    ["oriental"]    = {["first"]  = 10017,   ["second"] = 10018,   ["female"] = 150,      ["male"] = 146},
    ["warrior"]     = {["first"]  = 10019,   ["second"] = 10020,   ["female"] = 142,      ["male"] = 134},
    ["wizard"]      = {["first"]  = 10021,   ["second"] = 10022,   ["female"] = 149,      ["male"] = 145},
    ["assassin"]    = {["first"]  = 10023,   ["second"] = 10024,   ["female"] = 156,      ["male"] = 152},
    ["beggar"]      = {["first"]  = 10025,   ["second"] = 10026,   ["female"] = 157,      ["male"] = 153},
    ["pirate"]      = {["first"]  = 10027,   ["second"] = 10028,   ["female"] = 155,      ["male"] = 151},
    ["shaman"]      = {["first"]  = 10029,   ["second"] = 10030,   ["female"] = 158,      ["male"] = 154},
    ["norseman"]    = {["first"]  = 10031,   ["second"] = 10032,   ["female"] = 252,      ["male"] = 251},
    ["jester"]      = {["first"]  = 10033,   ["second"] = 10034,   ["female"] = 270,      ["male"] = 273},
    ["demonhunter"] = {["first"]  = 10034,   ["second"] = 10036,   ["female"] = 288,      ["male"] = 289},
    ["nightmare"]   = {["first"]  = 10037,   ["second"] = 10038,   ["female"] = 269,      ["male"] = 268},
    ["brotherhood"] = {["first"]  = 10039,   ["second"] = 10040,   ["female"] = 279,      ["male"] = 278}
}

-- ==== [INICIO - FUNÇÕES DE CONFIGURAÇÕES] ==== --
-- RECOMENDO NÃO MEXER PARA NÃO TER PROBLEMAS --

-- Retorna uma string concatenada com o nome de cada item da lista de "itemsID".
function getListItemsName()
    local itemsName = {}
    for i, id in ipairs(itemsID) do
        table.insert(itemsName, "{{"..getItemNameById(id).."}}")
    end
    
    local result = table.concat(itemsName, ", ")
    return result:gsub(",([^,]+)$", " ou%1")
end

-- Retorna uma string concatenada com o nome de cada task que pode ser reiniciada.
function getListTasksName()
    local tasksName = {}
    for name, storage in pairs(tasks) do
        table.insert(tasksName, "{{"..name.."}}")
    end
    local result = table.concat(tasksName, ", ")
    return result:gsub(",([^,]+)$", " ou%1")
end

-- Retorna uma string concatenada com o nome de cada addon de outfit
function getListAddonsName()
    local addonsName = {}
    for name, data in pairs(addons) do
      table.insert(addonsName, "{{"..name.."}}")
    end
    
    local result = table.concat(addonsName, ", ")
    return result:gsub(",([^,]+)$", " ou%1")
end

-- Sempre que um desejo for concedido, adicionará +1 no storage dos desejos.
-- Quando todos os "3" desejos forem concedidos, o jogador será teleportado ao seu templo e o npc "Genio" se despedirá
function checkRemainingWishes(cid, storage, desejosUsados)
    setPlayerStorageValue(cid, storage, desejosUsados)
    if desejosUsados == 3 then
        local npc = getCreatureByName("Genio")
        doCreatureSay(npc, "Meu trabalho terminou por aqui.")
        doCreatureSay(npc, "Adeus "..getCreatureName(cid).."! :)")

        -- teleporta o player até o seu templo
        local pos = getTownTemplePosition(getPlayerTown(cid), false)
        doTeleportThing(cid, pos, true)
        doSendMagicEffect(getCreaturePosition(cid), 23)
    end
end

-- Envia o item escolhido dentro de uma parcel para o DEPOT da CITY do jogador.
function sendItemToPlayerDepot(cid, itemID)
    local parcel = doCreateItemEx(2595)
    local item   = doCreateItemEx(itemID)
    doAddContainerItemEx(parcel, item)
    doPlayerSendMailByName(getCreatureName(cid), parcel, getPlayerTown(cid))
end

-- ==== [FIM - FUNÇÕES DE CONFIGURAÇÕES] ==== --

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

	local talkUser = NPCHANDLER_CONVBEHAVIOR == CONVERSATION_DEFAULT and 0 or cid
	local msg              = string.lower(msg)
    local desejosUsados    = tonumber(getPlayerStorageValue(cid, storage))
    local desejosRestantes = (desejosUsados >= 1) and 3 - desejosUsados or 3

    -- caso nao foi o jogador que invocou o genio
    if getPlayerStorageValue(cid, storage) < 0 then
        selfSay('Voce nao e o meu mestre', cid)
        npcHandler:releaseFocus(cid)
    
    -- Caso o jogador já tenha utilizado todos os desejos
    elseif desejosRestantes == 0 then
        selfSay('Sinto muito, voce ja usou todos os seus desejos.', cid)
        npcHandler:releaseFocus(cid)

    ----- Opção: Desejos
    elseif isInArray({"desejos"}, msg) then
        talkState[talkUser] = 1
        selfSay('Voce pode me pedir '..desejosRestantes..' desejos.', cid)
        selfSay('{{5kk}}, {{itens}}, {{addons}}, {{tasks}} ou {{matar um jogador}}', cid)

    -- Opção: 5kk
    elseif isInArray({"5kk"}, msg) and talkState[talkUser] == 1 then
        talkState[talkUser] = '5kk'
        selfSay('Precisando de grana? Posso te ajudar com isso...', cid)
        selfSay('Deseja realmente os 5kk? {{sim}} ou {{nao}}', cid)

    -- Confirmação: 5kk
    elseif isInArray({"sim"}, msg) and talkState[talkUser] == '5kk' then
        doPlayerAddItem(cid, 2160, 500)

        doSendMagicEffect(getCreaturePosition(cid), 11)
        selfSay('Feito! Aproveite os seus {{5kks}}.', cid)
        talkState[talkUser] = 0
        checkRemainingWishes(cid, storage, desejosUsados + 1)
        npcHandler:releaseFocus(cid)

    -- Opção: Itens
    elseif isInArray({"itens"}, msg) and talkState[talkUser] == 1 then
        talkState[talkUser] = 'itens'
        selfSay('Certo... Me diga o {{nome}} de um item que voce deseja.', cid)
        selfSay(getListItemsName(), cid)


    -- Escolhendo: Itens
    elseif talkState[talkUser] == 'itens' then
        
        local itemName = msg
        local itemID   = getItemIdByName(itemName)

        if not isInArray(itemsID, itemID) then
            selfSay('Esse item nao esta na minha lista.', cid)
        else
            selfSay('Posso te ajudar com isso.', cid)
            selfSay('enviarei o item para o depot da sua city.', cid)
            selfSay('{{'..itemName..'}}. Entao esse e o seu desejo? {{sim}} ou {{nao}}', cid)
            
            talkState[talkUser] = {'item_yes', itemID}
        end

    -- Confirmação: Itens
    elseif isInArray({"sim"}, msg) and talkState[talkUser][1] == "item_yes" then

        selfSay('Tudo bem, divirta-se com o seu novo brinquedinho...', cid)
        sendItemToPlayerDepot(cid, talkState[talkUser][2])
        doSendMagicEffect(getCreaturePosition(cid), 11)
        talkState[talkUser] = 0
        checkRemainingWishes(cid, storage, desejosUsados + 1)
        npcHandler:releaseFocus(cid)

    -- Opção: Addons
    elseif isInArray({"addons"}, msg) and talkState[talkUser] == 1 then
        talkState[talkUser] = 'addons'
        selfSay('Querendo dar um tapa no visual? Posso te ajudar com isso...', cid)
        selfSay('Qual addon voce deseja? '..getListAddonsName()..'', cid)

     -- Escolhendo: Addons
    elseif talkState[talkUser] == 'addons' then
        
        if addons[msg] ~= nil then
            talkState[talkUser] = {'addons_choice', msg}
            selfSay('Certo! Qual voce deseja? {{first}} ou {{second}', cid)
            selfSay('Apos escolher, nao podera voltar atras.', cid)
        else
            selfSay('Esse addon nao esta na minha lista. Sinto muito.', cid)
        end
        
    -- Confirmação: Addons
    elseif isInArray({"first", "second"}, msg) and talkState[talkUser][1] == 'addons_choice' then

        local typeAddon = (msg == "first") and 1 or 2

        setPlayerStorageValue(cid, addons[talkState[talkUser][2]][msg], 1)
        doPlayerAddOutfit(cid, addons[talkState[talkUser][2]]["male"], typeAddon)
        doPlayerAddOutfit(cid, addons[talkState[talkUser][2]]["female"], typeAddon)

        selfSay('Seu desejo foi concedido!', cid)
        selfSay('Voce agora tem o {{'..msg..' '..talkState[talkUser][2]..' addon}}', cid)
        doSendMagicEffect(getCreaturePosition(cid), 51)
        talkState[talkUser] = 0
        checkRemainingWishes(cid, storage, desejosUsados + 1)
        npcHandler:releaseFocus(cid)

    
    -- Opção: Tasks
    elseif isInArray({"tasks"}, msg) and talkState[talkUser] == 1 then
        talkState[talkUser] = 'task'
        selfSay('Posso reiniciar qualquer task', cid)
        selfSay('Basta me dizer um {{nome}}. '..getListTasksName()..'', cid)
        
    -- Escolhendo: Tasks
    elseif talkState[talkUser] == 'task' then

        if tasks[msg] then
            talkState[talkUser] = {'task_yes', msg}
            selfSay('Posso reiniciar a task {{'..msg..'}} para voce.', cid)
            selfSay('Esse e o seu desejo? {{sim}} ou {{nao}}', cid)
        else
            selfSay('Nao encontrei nenhuma task com este nome', cid)
        end

    -- Confirmação: Tasks
    elseif msg == "sim" and talkState[talkUser][1] == 'task_yes' then
        selfSay('Feito!', cid)

        setPlayerStorageValue(cid, tasks[talkState[talkUser][2]], 1)
        
        doSendMagicEffect(getCreaturePosition(cid), 11)

        checkRemainingWishes(cid, storage, desejosUsados + 1)
        talkState[talkUser] = 0
        npcHandler:releaseFocus(cid)


    -- Opção: Matar um jogador
    elseif isInArray({"matar jogador", "matar um jogador"}, msg) then
        talkState[talkUser] = 'kill'

        doCreatureSay(npc, 'HeHeHaHeAhAHe!', TALKTYPE_ORANGE_1) 
        selfSay('Hmmm... Tem alguem te incomodando?', cid)
        selfSay('Me fale o {{nome}} do meliante e eu o matarei para voce!', cid)

    -- Escolhendo: Matar um jogador
    elseif msg and talkState[talkUser] == 'kill' then

        local playerName = msg
        local player     = getCreatureByName(playerName)

        if not player then
            selfSay('Desculpe, eu nao consegui encontrar o jogador '..playerName..'.', cid)
        elseif getPlayerAccess(player) >= 3 then
            selfSay('Voce e muito ousado meu caro...', cid)
            selfSay('Infelizmente nao tenho esse poder, mas voce pode escolher outro jogador.', cid)
            selfSay('Basta me dizer um {{nome}}.', cid)
        else
            
            if player == cid then
                selfSay('Voce e bem estranho...', cid)
                selfSay('Nao posso fazer isso. Tenho meus principios...', cid)
            else
                selfSay('Interessante! Cuidarei de {{'..playerName..'}} para voce se e isso que voce quer.', cid)
                selfSay('Tem realmente certeza disso? {{sim}} ou {{nao}}', cid)
                talkState[talkUser] = {'kill_yes', player}
            end
           
        end
    
    -- Confirmação: Matar um jogador
    elseif msg == "sim" and talkState[talkUser][1] == 'kill_yes' then

        local playerToKill = talkState[talkUser][2]
        local playerToKillName = getCreatureName(talkState[talkUser][2])

        if playerToKillName then
            
            doSendMagicEffect(getCreaturePosition(npc), 65)
            selfSay('Seu desejo foi concedido, {{'..playerToKillName..'}} foi morto!', cid)
           
            doSendMagicEffect(getCreaturePosition(playerToKill), 40)
            doCreatureSay(playerToKill, 'HaHaHaHa!', TALKTYPE_ORANGE_1) 
            doCreatureAddHealth(playerToKill, -getCreatureMaxHealth(playerToKill))
    
            talkState[talkUser] = 0
            checkRemainingWishes(cid, storage, desejosUsados + 1)
            npcHandler:releaseFocus(cid)
        else
            selfSay('Puts! O meliante acabou de sair, que safado!', cid)
            selfSay('Voce pode me dizer outro {{nome}} se quiser.', cid)
            talkState[talkUser] = 'kill'
        end
   
 
  -- Cancelamento
    elseif isInArray({"nao"}, msg) then
        selfSay('Tudo bem entao', cid)
        talkState[talkUser] = 0
        npcHandler:releaseFocus(cid)
    end
 

	return true
end

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

 

 

 

Isso é tudo! Se tiverem sugestões ou dúvidas, estou à disposição!

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.

  • Conteúdo Similar

    • Por specail
      Olá. Estou com um problema no NPC Halvar, o carinha da arena de Svar... A quest funciona normalmente (cada player só pode fazer 1x cada e em ordem, começando pela Greenhorn, depois Scrapper e Warlord...)
       
      Porém aparecem alguns erros que incomodam um pouco, queria saber se tem como tirar...

      Quando falo hi pro npc:
       
      [15/7/2023 18:29:17] [Error - NpcScript Interface] [15/7/2023 18:29:17] data/npc/scripts/arena.lua:onCreatureSay [15/7/2023 18:29:17] Description: [15/7/2023 18:29:17] (LuaInterface::internalGetPlayerInfo) Player not found when requesting player info #3 [15/7/2023 18:29:17] [Error - NpcScript Interface] [15/7/2023 18:29:17] data/npc/scripts/arena.lua:onCreatureSay [15/7/2023 18:29:17] Description: [15/7/2023 18:29:17] data/npc/scripts/arena.lua:46: attempt to compare number with boolean [15/7/2023 18:29:17] stack traceback: [15/7/2023 18:29:17] data/npc/scripts/arena.lua:46: in function <data/npc/scripts/arena.lua:34> [15/7/2023 18:29:17] [C]: in function 'selfSay' [15/7/2023 18:29:17] data/npc/scripts/arena.lua:37: in function <data/npc/scripts/arena.lua:34>  
      E quando eu falo bye ou fico sem digitar nada por alguns segundos o NPC fica louco e spamma "bye" 20 vezes kkkkkk... Segue o erro:
      [15/7/2023 18:29:28] [Error - NpcEvents::onCreatureSay] NPC Name: Halvar - Call stack overflow  
      Eu renomeei todas falas dele com "bye" pra saber qual causava isso, porque o fdm tem 4 falas assim... e a mensagem que ele está spamando é essa que esta agora como "Bye three!"
      Segue o script completo que acusa o erro:
      domodlib('arenaFunctions') 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 local focus = 0 local talk_start = 0 local TS = 0 function onCreatureDisappear(cid, pos) if focus == cid then selfSay('Bye one.') focus = 0 talk_start = 0 end end local function BYE() focus = 0 talk_start = 0 TS = 0 end function msgcontains(txt, str) return (string.find(txt, str) and not string.find(txt, '(%w+)' .. str) and not string.find(txt, str .. '(%w+)')) end function onCreatureSay(cid, type, msg) msg = string.lower(msg) if (msgcontains(msg, 'hi') and (focus == 0)) then selfSay('Hello ' .. getCreatureName(cid) .. ', do you want to fight in the arena?') focus = cid talk_start = os.clock() TS = 1 elseif msgcontains(msg, 'hi') and (focus ~= cid) then selfSay('Im Busy') elseif TS == 1 and msgcontains(msg, 'yes') or msgcontains(msg, 'fight') or msgcontains(msg, 'arena') then if getPlayerStorageValue(cid, myArenaLevel) < 3 then local enterArena = myArenaLevelIs(cid) if getPlayerLevel(cid) >= enterArena.RLV then if getPlayerMoney(cid) >= enterArena.RC then setPlayerStorageValue(cid, talkNPC, 1) doPlayerRemoveMoney(cid, enterArena.RC) selfSay("Now you can face the... ".. enterArena.LN .."level!") BYE() else selfSay("You don\'t have "..enterArena.RC.." gold! Come back when you are ready!") BYE() end else selfSay("You don\'t have level "..enterArena.RLV.." yet! Come back when you are ready!") BYE() end else selfSay(Cancel[6]) BYE() end elseif TS == 1 and msgcontains(msg, 'no') then selfSay("Bye two!") BYE() elseif msgcontains(msg, 'bye') then selfSay("Bye three!") BYE() end return true end function onThink() doNpcSetCreatureFocus(focus) if (os.clock() - talk_start) > 10 then if focus > 0 then selfSay('Bye four.') end focus = 0 end end npcHandler:setCallback(CALLBACK_MESSAGE_DEFAULT, creatureSayCallback) npcHandler:addModule(FocusModule:new())  
    • Por L3K0T
      NPC DE TELETRANSPORTE
       
      Nada mais diz, é um NPC que faz para teletransportar jogadores para lugares aleatórios e deixando o jogo mais interessante.
       
       
      INSTALANDO:
      1 - vá em data/npc/scripts copie um arquivo .lua, renomeia a gosto, apague o que esta dentro e adicione o código abaixo:
       
      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 local l3k0tpos = { {x = 1002, y = 1000, z = 7}, --trocar posisão 1 {x = 1003, y = 1000, z = 7}, --trocar posisão 2 {x = 1004, y = 1000, z = 7}, --trocar posisão 3 {x = 1004, y = 1000, z = 7} --trocar posisão 4 } 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, 'teleporte')) and talkState[talkUser] ~= 2 then selfSay('Gostaria de ir para um lugar aletorio? {yes} ou {no}.', cid) talkState[talkUser] = 1 elseif(msgcontains(msg, 'yes')) and talkState[talkUser] == 1 then local l3k0t = l3k0tpos[math.random(#l3k0tpos)] doTeleportThing(cid, l3k0t) doSendMagicEffect(l3k0t, CONST_ME_TELEPORT) selfSay('Pronto! Boa jornada.', cid) talkState[talkUser] = 0 elseif(msgcontains(msg, 'no')) and talkState[talkUser] ~= 1 then talkState[talkUser] = 0 selfSay('Ok, até logo!', cid) end return true end npcHandler:setCallback(CALLBACK_MESSAGE_DEFAULT, creatureSayCallback) npcHandler:addModule(FocusModule:new())  
       
      2 - agora em data/npc/ copie um arquivo .xml, renomeia a gosto e coloque o colodigo abaixo:
       
      <npc name="Teleporte" script="data/npc/scripts/npctelerandom.lua" floorchange="0" walkinterval="2000" access="5" level="1" maglevel="1"> <health now="150" max="150"/> <look type="128" head="79" body="95" legs="57" feet="106" addons="2"/> <parameters> <parameter key="message_greet" value="Hello |PLAYERNAME| posso te levar para um ilugar especial, deseja ir? é só dizer {teleporte}" /> </parameters> </npc>  
       
      Créditos: @L3K0T
      agora é só por o npc no mapa e usar
       
       
       
       
    • Por MatheusVidaLoka
      Fala galera do Tibia King, hoje venho trazer um actions a vocês, queria dizer que essa action já é velha, mas dei uma olhada no TK e não vi nada a respeito da action, então decidi postar para vocês.




      Qual a função da Action?



      É um novo tipo de gold que cada um vale 1kk, funcionando normal nas compras e vendas de itens em npcs, e nas trocas de crystal coin para o golda nugget (novo gold).




      Bom vamos ao script.




      Vá em data/actions/scripts e abra o arquivo crystal.lua, apague tudo o que está dentro, logo em seguida cole o script abaixo:









      Traduzindo:
      Vermelho: É o id da crystal coin, e a quantidade a ser trocada por 1 gold nugget (Novo Gold).
      Azul: É o id da gold nugget, e a quantidade de gold nugget.




      Logo em seguida, vá novamente em data/actions/scripts copie qualquer arquivo.lua e cole, em seguida renomeie-o para "goldnuggets" sem aspas, abra-o, apague tudo, e cole o script abaixo.




      Traduzindo:
      Laranja: É o que vai dizer quando o player trocar 1 gold nugget por 100 crystal coins.
      Verde: É o id da crystal coin, e a quantidade equivalente a 1 gold nugget.



      Logo em seguida, abra data/actions/actions.xml e adicione a tag abaixo.









      Traduzindo:
      Rosa: É o id do gold nuggets.
      Azul: O nome do arquivo.lua que você salvou.




      Depois disso abra data/items/items.xml, aperte CTRL + F, e digite 2157, ai você vai achar o item Gold Nugget que vai estar assim:








      Substitua tudo por isso:



      <item id="2157" article="a" name="gold nugget" plural="gold nuggets">
      <attribute key="weight" value="10"/>
      <attribute key="worth" value="1000000" />




      Traduzindo:
      Vermelho: Peso do gold nugget.
      Azul: Valor do item (como 1 crystal coin = 10k , 1 gold nugget = 1kk)




      Logo depois vá data/actions/scripts/other e abra o arquivo changegold.lua, susbistitua tudo oque está la dentro por esse script a seguir, e salve:




      -- By MatheusVidaLoka
      local coins = {
      [iTEM_GOLD_COIN] = {
      to = ITEM_PLATINUM_COIN, effect = TEXTCOLOR_YELLOW
      },
      [iTEM_PLATINUM_COIN] = {
      from = ITEM_GOLD_COIN, to = ITEM_CRYSTAL_COIN, effect = TEXTCOLOR_LIGHTBLUE
      },
      [iTEM_CRYSTAL_COIN] = {
      from = ITEM_PLATINUM_COIN, to = 2157, effect = TEXTCOLOR_LIGHTBLUE
      },
      [2157] = {
      from = ITEM_CRYSTAL_COIN, effect = TEXTCOLOR_TEAL
      }



      }



      function onUse(cid, item, fromPosition, itemEx, toPosition)
      if(getPlayerFlagValue(cid, PLAYERFLAG_CANNOTPICKUPITEM)) then
      return false
      end



      local coin = coins[item.itemid]
      if(not coin) then
      return false
      end



      if(coin.to ~= nil and item.type == ITEMCOUNT_MAX) then
      doChangeTypeItem(item.uid, item.type - item.type)
      doPlayerAddItem(cid, coin.to, 1)
      doSendAnimatedText(fromPosition, "$$$", coins[coin.to].effect)
      elseif(coin.from ~= nil) then
      doChangeTypeItem(item.uid, item.type - 1)
      doPlayerAddItem(cid, coin.from, ITEMCOUNT_MAX)
      doSendAnimatedText(fromPosition, "$$$", coins[coin.from].effect)
      end
      return true
      end



      Traduzindo:
      Vermelho: É o id do Gold Nugget.




      Por fim vá em data/actions/actions.xml, pule uma linha qualquer e cole isso, e salve:



      <action itemid="2157" event="script" value="other/changegold.lua"/>




      Traduzindo:
      Azul: É o id do gold nugget.
      Verde: O nome do arquivo que você salvou.

      Server testado em Ot 8.60 e funcionou corretamente.



      Creditos:



      MatheusVidaLoka



      JFLNT




      Se enfringi alguma regra do TK por favor me reporte.




      Desculpe-me pelos mal usos das ferramentas do TK (quotes,spoiler,CODES,etc) pois estou com certos problemas.

    • Por pabloxp
      gostaria que alguem me ajuda-se!! queria 1 sistema ou script que o trenó (Sled) se movimentase qnd o char fica-se em cima dele e ele controlase o trenó para as direçoes segurando CTRL + a direção desejada
      +rep pra qm ajudar
    • Por jonei
      Olá Tibiakinguianos, meu OT tem uma coisa que eu não entendo pra que...
      Vip system
      Premmium system
       
      Pelo que eu sei o premmium system é aquele no qual tu pode tocar as spells, usar barco, comprar casa entre outros
       
      o Vip system... Ai é que esta o problema, eu não sei nem pra que serve o Vip system. então estou aqui pedindo pra que alguém me explique a diferença entre estes

      Desde já agradeço
×
×
  • Criar Novo...

Informação Importante

Confirmação de Termo