Ir para conteúdo
  • Cadastre-se

Monster/NPC [NPC] Nicknamer para Poketibia


Posts Recomendados

Eae galera do TK, Hoje venho disponibilizar um NPC com a mesma função do NPC do Otpokemon, ele altera o nome do seu pokemon, para qualquer um que voce queira por tal quantia de HDs ou TDs (isso você que edita.). Bom primeiro vou dar um exemplo, e depois vamos partir ao que interessa.

Exemplo:Voce possui um pokemon, digamos que seja um Shiny alakazam, voce quer mudar o seu Nick de Shiny alakazam para TibiaKing.

Basta você ir falar com o NPC que estará em tal local, e ele irá lhe cobrar tal valor em dinheiro, durante toda a conversa com ele, seu pokemon deve permanecer na pokebola.

Após acabar o papo com o NPC, você poderá usar o seu pokemon e ele já estará com o Nick escolhido.

Agora vou deixar de enrolação e partir ao que interessa XD

Um ultimo aviso, deixarei o Download do arquivo .lua e do .XML do NPC no fim do tópico para os mais preguiçosos XD.

Bom, primeiramente vá na Pastadoseuserver/data/npc/scripts e crie um arquivo .lua, renomeie para Nick, abra-o coloque isso dentro.

Spoiler

local focus = 0
local talk_start = 0
local conv = 0
local target = 0
local following = false
local attacking = false
local talkState = {}
local finalname = ""

function onThingMove(creature, thing, oldpos, oldstackpos)
end

function onCreatureAppear(creature)
end

function onCreatureDisappear(cid, pos)
if focus == cid then
selfSay('Good bye sir!')
focus = 0
talk_start = 0
end
end

function onCreatureTurn(creature)
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, msge)
local msg = string.lower(msge)
local talkUser = NPCHANDLER_CONVBEHAVIOR == CONVERSATION_DEFAULT and 0 or cid


    if focus == cid then
        talk_start = os.clock()
    end

local auras = {"red aura", "blue aura", "green aura", "yellow aura", "white aura", "gray aura", "cyan aura", "purple aura", "orange aura"}


if (msgcontains(msg, 'oi') and (focus == 0) and (getDistanceToCreature(cid) <= 4)) then

    focus = cid
    conv = 1
    talk_start = os.clock()
    selfSay("Ola, "..getCreatureName(cid).."! Eu posso dar ao seu Pokémon um apelido ou eu posso colocar no seu pokemon uma aura elementar, se ele for Boost pelo menos +5")

elseif (msgcontains(msg, "nao") or msgcontains(msg, "xau")) and focus == cid and conv ~= 3 then

    selfSay("Sem problema, então , senhor. Volte quando você quiser!")
    focus = 0

elseif (msgcontains(msg, "nome") or msgcontains(msg, "apelido")) and focus == cid and conv == 1 then

        if getPlayerSlotItem(cid, 8).uid <= 0 then
            selfSay("Desculpe, voce nao tem pokemon no slot principal")
            focus = 0
        return true
        end

    selfSay("Coloque o seu pokemon no Slot principal e me diga, o apelido que gostaria de dar a seu pokemon ?")
    conv = 3
    
elseif msgcontains(msg, "aura") and focus == cid and conv == 1 then

     if getPlayerSlotItem(cid, 8).uid <= 0 then
        selfSay("Desculpe, você não tem um pokemon no Slot principal!")
        focus = 0
     return true
     end
     
     local pb = getPlayerSlotItem(cid, 8).uid
     if not getItemAttribute(pb, "boost") or getItemAttribute(pb, "boost") < 5 then
        selfSay("Desculpe, seu pokemon tem que ter no minimo Boost +5!")
        focus = 0
     return true
     end  
     
     if getItemAttribute(pb, "aura") and getItemAttribute(pb, "aura") ~= "" then
        selfSay("Desculpe, seu pokemon já tem uma aura elementar !")
        focus = 0
     return true
     end
     
     if #getCreatureSummons(cid) >= 1 then
        selfSay("Volte seu pokemon para a pokebola!")
        focus = 0
     return true
     end       
          
     selfSay("Escolha uma aura: red aura, blue aura, green aura, yellow aura, white aura, gray aura, cyan aura, purple aura, orange aura. Qual a sua preferida?")
     conv = 9
     
elseif isInArray(auras, msg) and focus == cid and conv == 9 then

       selfSay("Tem certeza que deseja colocar uma "..msg.." no seu pokemon?")
       conv = 11
       local d, e = msg:find('(.-) aura')
       auraFinal = string.sub(msg, d -1, e - 5)
       
elseif msgcontains(msg, "sim") and focus == cid and conv == 11 then        

     if getPlayerSlotItem(cid, 8).uid <= 0 then
        selfSay("Desculpe, voce nao tem pokemon no slot principal!")
        focus = 0
     return true
     end
     
     local pb = getPlayerSlotItem(cid, 8).uid
     if not getItemAttribute(pb, "boost") or getItemAttribute(pb, "boost") < 5 then
        selfSay("Desculpe, seu pokemon nao e boost +5!")
        focus = 0
     return true
     end
     
     if #getCreatureSummons(cid) >= 1 then
        selfSay("Volte seu pokemon para a pokebola!")
        focus = 0
     return true
     end   
     
     doItemSetAttribute(pb, "aura", auraFinal)   
     selfSay("Pronto! Agora seu pokemon tem uma aura elementar, aproveite!")
     focus = 0
     conv = 0
       
elseif conv == 3 and focus == cid then

    local tablee = {"a", "b", "c", "d", "e", "f", "g", "h", "i", "j", "k", "l", "m", "n", "o", "p", "q", "r", "s", "t", "u", "v", "x", "w", "y", "z", ".", ":", "'", '"', "~", "^", "@", "#", "$", "%", "&", "*", "(", ")", "-", "+", "_", "?", ">", "<", "•", ";", "°", "¹", "²", "³", "£", "¢", "¬", "1", "2", "3", "4", "5", "6", "7", "8", "9", "0"}
    local table = {"'", '"', "!", "ã", "õ", "ç", "´", "`", "á", "à", "ó", "ò", "é", "è", "í", "ì", "ú", "ù", "¹", "²", "³", "£", "¢", "¬", "§", "°", "º", "ª", "•", "|"}

    for a = 1, #table do
        if string.find(msg, table[a]) then
            selfSay("Desculpe, o nome possui simbolos invalidos.")
        return true
        end
    end

    if string.len(msg) <= 1 or string.len(msg) >= 19 then
        selfSay("Desculpe, o nome e muito grande ou muito pequeno.")
    return true
    end

    local pokename = getItemAttribute(getPlayerSlotItem(cid, 8).uid, "poke")


    selfSay("Tem certeza que deseja mudar o nome do seu "..pokename.." para \""..msge.."\"? isso custara 10 hundred dollars.")
    conv = 5
    finalname = msge

elseif msgcontains(msg, "sim") and focus == cid and conv == 5 then

    if getPlayerSlotItem(cid, 8).uid <= 0 then
        selfSay("Onde esta seu pokemon? voce deve mante-lo no slot principal")
        focus = 0
    return true
    end

    if doPlayerRemoveMoney(cid, 100000) == false then
        selfSay("Voce nao tem dinheiro para pagar o servico, volte mais tarde.")
        focus = 0
        conv = 0
    return true
    end

    local nick = ""..finalname..""
    local description = "Contains a "..getItemAttribute(getPlayerSlotItem(cid, 8).uid, "poke").."."
    selfSay("Pronto! Seu pokemon agora possui um nome, aproveite!")
    doItemSetAttribute(getPlayerSlotItem(cid, 8).uid, "nick", nick)
    local newdes = description.."\nIt's nickname is: "..finalname.."."
    doItemSetAttribute(getPlayerSlotItem(cid, 8).uid, "description", newdes)
    local hp = getItemAttribute(getPlayerSlotItem(cid, 8).uid, "happy")
    doItemSetAttribute(getPlayerSlotItem(cid, 8).uid, "happy", hp + 25)
    if #getCreatureSummons(cid) >= 1 then
        adjustStatus(getCreatureSummons(cid)[1], getPlayerSlotItem(cid, 8).uid)
    end
    focus = 0
    conv = 0
    end
end
 
local intervalmin = 38
local intervalmax = 70
local delay = 25
local number = 1
local messages = {"Quer dar alguns apelidos para o seu pokemon ? Fale comigo!",
          "Voce pode por um nome legal em seu pokemon!",
          "Cada pokemon quer ter um apelido ! Venha falar comigo!",
          "Pokemons adoram nomes, de um para o seu agora.",
         }

function onThink()

    if focus == 0 then
        selfTurn(1)
            delay = delay - 0.5
            if delay <= 0 then
                selfSay(messages[number])
                number = number + 1
                    if number > #messages then
                        number = 1
                    end
                delay = math.random(intervalmin, intervalmax)
            end
        return true
    else

    if not isCreature(focus) then
        focus = 0
    return true
    end

        local npcpos = getThingPos(getThis())
        local focpos = getThingPos(focus)

        if npcpos.z ~= focpos.z then
            focus = 0
        return true
        end

        if (os.clock() - talk_start) > 45 then
            focus = 0
            selfSay("Volte outra hora!")
        end

        if getDistanceToCreature(focus) > 3 then
            selfSay("Ate logo!")
            focus = 0
        return true
        end

        local dir = doDirectPos(npcpos, focpos)    
        selfTurn(dir)
    end


return true
end

Ok, feito isso, salve e feche.

Agora vá na Pastadoseuserver/data/npc e crie um arquivo .XML, coloque o nome de Namer, abra-o e coloque isso dentro.

Spoiler

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

<npc name="Namer" script="nick.lua" walkinterval="350000" floorchange="0" speed="0" lookdir="2">

    <health now="150" max="150"/>

    <look type="614" head="115" body="122" legs="0" feet="76"/>

    <parameters>


    </parameters>

</npc>

Feito isso, salve e feche.

Pronto, seu NPC está criado, agora vamos a descobrir como editar o NPC.

O NPC vem com uma função de Aura, ainda nao entendi como ela funciona, pois a Script não é minha, apenas traduzi as falas do NPC e compartilhei ela com vocês.

Temos uma parte assim ...

Citar

     local pb = getPlayerSlotItem(cid, 8).uid
     if not getItemAttribute(pb, "boost") or getItemAttribute(pb, "boost") < 5 then
        selfSay("Desculpe, seu pokemon tem que ter no minimo Boost +5!")
        focus = 0
     return true
     end 

Onde está escrito: 5 then, é o boost necessario para por aura no pokemon, ali por exemplo, está que precisa de no minimo Boost +5, altere para a sua preferencia, caso seu server nao possua sistema de boost, coloque um 0 no lugar do 5

Logo em baixo, tem escrito:Desculpe, seu pokemon tem que ter no minimo Boost+5. Ali você edita o 5, para o número que voce colocou como boost minimo.

Agora na parte de valor cobrado para por nick no pokemon.

Citar

    if doPlayerRemoveMoney(cid, 100000) == false then
        selfSay("Voce nao tem dinheiro para pagar o servico, volte mais tarde.")
        focus = 0
        conv = 0
    return true
    end

Onde está : if doPlayerRemoveMoney(cid, 100000) == false then << você altera o 100000 para o valor que voce deseja que seja cobrado, ali por exemplo, está cobrando 10HDs, aumentando mais um zero, ficaria 100HDs e assim sucessivamente.

Simbolos validos e invalidos para por no nick.

Citar

    local tablee = {"a", "b", "c", "d", "e", "f", "g", "h", "i", "j", "k", "l", "m", "n", "o", "p", "q", "r", "s", "t", "u", "v", "x", "w", "y", "z", ".", ":", "'", '"', "~", "^", "@", "#", "$", "%", "&", "*", "(", ")", "-", "+", "_", "?", ">", "<", "•", ";", "°", "¹", "²", "³", "£", "¢", "¬", "1", "2", "3", "4", "5", "6", "7", "8", "9", "0"}
    local table = {"'", '"', "!", "ã", "õ", "ç", "´", "`", "á", "à", "ó", "ò", "é", "è", "í", "ì", "ú", "ù", "¹", "²", "³", "£", "¢", "¬", "§", "°", "º", "ª", "•", "|"}

 

Onde está: local tablee, é os simbolos que podem ser usados no nick, e onde está : local table, sao os que não podem, para validar um simbolo, apague ele da linha de baixo, e adicione na linha de cima.

Comandos aceitos:

Spoiler

O NPC atende pelos seguintes comandos:
Oi
Nao
Xau
Apelido
Nome
Aura
Sim

Segue Prints do antes e depois de renomear o Pokemon.( clique na imagem para ampliar e ver melhor.)

tk.pngtk2.jpg

Scan do Nick.lua

Scan do Namer.xml

Donwloads: se encontram no fim do tópico.

Então galera é isso:D espero ter ajudado alguém e se ajudei, deixao o REP+ pra fortalecer :D

OBS: Estou começando agora a postar no TK, este é o meu segundo Post, em nenhum de meus posts atuais e futuros, deixarei de por créditos por autoria, ediçao e etc... nestes não estou colocando, pois nao sei quem foi o verdadeiro autor da script, eu apenas a vi em meu server a traduzi e a fiz funcionar em meu servidor, caso o autor esteja no forum, comente que deixarei seus devidos créditos.

Namer.xml

nick.lua

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

Parabéns, seu tópico de conteúdo foi aprovado!
Muito obrigado pela sua contribuição, nós do Tibia King agradecemos.
Seu conteúdo com certeza ajudará à muitos outros, você recebeu +1 REP.

Spoiler

Congratulations, your content has been approved!
Thank you for your contribution, we of Tibia King we are grateful.
Your content will help many other users, you received +1 REP.

 

Link para o post
Compartilhar em outros sites
  • 2 months later...

não funcionou amigo!! fiz tudo certinho não deu nenhum erro no distro ao adicionar mais quando falo hi ou qualquer outra saudação ao NPC ele não responde!!

Se Ajudei Clique no rep_up.png ao Lado, Não Custa nada :D!!

Link para o post
Compartilhar em outros sites
  • 1 year later...

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 Henrique Gaudard
      Olá pessoal, primeiramente quero dizer que acho muito complicado mecher em monsters, poís qualquer erro, é fatal!! não sei porque quando fasso algumas modficações nos monsters/npcs que é quando eu modfico algumas coisas.., não entendo, só edito os nomes tipo assim;
      name "sfdsdfds" eu ponho "dhfudshgusopofkpsdakfgjid" (obs: não é no nome do arquivo lua mais sim o nome do monster mesmo já na edição) e dá erro. Se eu meche-se nas parada lá nos código todo doido de scripting tudo bem mais eu só quero editar e quando eu vou colocá-lo no mapa acontece o seguinte:
       
      Quando ligo aparece: "[Spawn : : addMonster] Cannot find "Ninja Star"" (ele está no presente no mapa e é um script obviamente). Falo!!
       
      Sistema Operacional: Windows 10

×
×
  • Criar Novo...

Informação Importante

Confirmação de Termo