Ir para conteúdo
  • Cadastre-se

(Resolvido)[Resolvido] - NPCs Aceitando Outro Gold


Ir para solução Resolvido por .Foxxy,

Posts Recomendados

Eu uso o NPC BANK para deposito, transferências etc.. ele funciona corretamente, porem eu criei um novo gold (ID: 9971, Name: gold ingot, equivalente a 1kk cada barra) eu queria que os NPC trabalha-se também com essa gold, aonde eu consegui-se comprar itens e depositar essa moeda.  

 

Alguem pode me ajudar?

 

NPC:

<?xml version="1.0" encoding="UTF-8"?>
<npc name="Bradesco" script="data/npc/scripts/bankeiro.lua" walkinterval="2000" floorchange="0" access="5" level="1" maglevel="1">
    <health now="150" max="150"/>
    <look type="151" head="115" body="0" legs="114" feet="0" addons="3" corpse="2212"/>
    
    <parameters>
        <parameter key="message_greet" value="Welcome |PLAYERNAME|! Here, you can {deposit}, {withdraw} or {transfer} your money from your bank account. I can change your coins too."/>
        <parameter key="message_alreadyfocused" value="You are drunked ? I talk with you."/>
        <parameter key="message_farewell" value="Goodbye. I wanna see your money... oh you again."/>
    </parameters>
</npc>

Script:

local keywordHandler = KeywordHandler:new()
local npcHandler = NpcHandler:new(keywordHandler)
NpcSystem.parseParameters(npcHandler)
local talkState = {}
local moneyTo = {}
local playerTo = {}

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 function isValidMoney(money)
    if isNumber(money) == TRUE and money > 0 and money < 999999999 then
        return TRUE
    end
    return FALSE
end

function creatureSayCallback(cid, type, msg)

    if(not npcHandler:isFocused(cid)) then
        return false
    end

    if msgcontains(msg, 'help') or msgcontains(msg, 'offer') then
        selfSay("You can check the {balance} of your bank account, {deposit} money or {withdraw} it. You can also {transfer} money to other characters, provided that they have a vocation.", cid)
        talkState[cid] = 0
-----------------------------------------------------------------
---------------------------- Balance ----------------------------
-----------------------------------------------------------------
    elseif msgcontains(msg, 'balance') or msgcontains(msg, 'Balance') then
        selfSay('Your account balance is '..getPlayerBalance(cid)..' gold.', cid)
        talkState[cid] = 0
-----------------------------------------------------------------
---------------------------- Help -------------------------------
-----------------------------------------------------------------
    elseif msgcontains(msg, 'basic functions') then
        selfSay('You can check the {balance{ of your bank account, Pdeposit{ money or Pwithdraw{ it. You can also {transfer} money to othercharacters, provided that they have a vocation.', cid)
        talkState[cid] = 0
    elseif msgcontains(msg, 'advanced functions') then
        selfSay('Renting a house has never been this easy. Simply make a bid for an auction. We will check immediately if you haveenough money.', cid)
        talkState[cid] = 0
-----------------------------------------------------------------
---------------------------- Deposit ----------------------------
-----------------------------------------------------------------
    elseif msgcontains(msg, 'deposit all') then
        moneyTo[cid] = getPlayerMoney(cid)
        if moneyTo[cid] < 1 then
            selfSay('You don\'t have any money to deposit in you inventory..', cid)
            talkState[cid] = 0
        else
            selfSay('Would you really like to deposit '..moneyTo[cid]..' gold?', cid)
            talkState[cid] = 2
        end
    elseif msgcontains(msg, 'deposit') then
        selfSay("Please tell me how much gold it is you would like to deposit.", cid)
        talkState[cid] = 1
    elseif talkState[cid] == 1 then
        moneyTo[cid] = tonumber(msg)
        if isValidMoney(moneyTo[cid]) == TRUE then
            selfSay('Would you really like to deposit '..moneyTo[cid]..' gold?', cid)
            talkState[cid] = 2
        else
            selfSay('Is isnt valid amount of gold to deposit.', cid)
            talkState[cid] = 0
        end
    elseif talkState[cid] == 2 then
        if msgcontains(msg, 'yes') then
            if doPlayerDepositMoney(cid, moneyTo[cid], 1) ~= TRUE then
                selfSay('You do not have enough gold.', cid)
            else
                selfSay('Alright, we have added the amount of '..moneyTo[cid]..' gold to your balance. You can withdraw your money anytime you want to. Your account balance is ' .. getPlayerBalance(cid) .. '.', cid)
            end
        elseif msgcontains(msg, 'no') then
            selfSay('As you wish. Is there something else I can do for you?', cid)
        end
        talkState[cid] = 0
-----------------------------------------------------------------
---------------------------- Withdraw ---------------------------
-----------------------------------------------------------------
    elseif msgcontains(msg, 'withdraw') then
        selfSay("Please tell me how much gold you would like to withdraw.", cid)
        talkState[cid] = 6
    elseif talkState[cid] == 6 then
        moneyTo[cid] = tonumber(msg)
        if isValidMoney(moneyTo[cid]) == TRUE then
            selfSay('Are you sure you wish to withdraw '..moneyTo[cid]..' gold from your bank account?', cid)
            talkState[cid] = 7
        else
            selfSay('Is isnt valid amount of gold to withdraw.', cid)
            talkState[cid] = 0
        end
    elseif talkState[cid] == 7 then
        if msgcontains(msg, 'yes') then
            if doPlayerWithdrawMoney(cid, moneyTo[cid]) ~= TRUE then
                selfSay('There is not enough gold on your account. Your account balance is '..getPlayerBalance(cid)..'. Please tell me the amount of gold coins you would like to withdraw.', cid)
            else
                selfSay('Here you are, ' .. moneyTo[cid] .. ' gold. Please let me know if there is something else I can do for you.', cid)
                talkState[cid] = 0
            end
        elseif msgcontains(msg, 'no') then
            selfSay('As you wish. Is there something else I can do for you?', cid)
            talkState[cid] = 0
        end
-----------------------------------------------------------------
---------------------------- Transfer ---------------------------
-----------------------------------------------------------------
    elseif msgcontains(msg, 'transfer') then
        selfSay("Please tell me the amount of gold you would like to transfer.", cid)
        talkState[cid] = 11
    elseif talkState[cid] == 11 then
        moneyTo[cid] = tonumber(msg)
        if isValidMoney(moneyTo[cid]) == TRUE then
            selfSay('Who would you like transfer '..moneyTo[cid]..' gold to?', cid)
            talkState[cid] = 12
        else
            selfSay('Is isnt valid amount of gold to transfer.', cid)
            talkState[cid] = 0
        end
    elseif talkState[cid] == 12 then
        playerTo[cid] = msg

        if getCreatureName(cid) == playerTo[cid] then
            selfSay('Ehm, You want transfer money to yourself? Its impossible!', cid)
            talkState[cid] = 0
            return TRUE
        end

        if playerExists(playerTo[cid]) then
            selfSay('So you would like to transfer ' .. moneyTo[cid] .. ' gold to "' .. playerTo[cid] .. '" ?', cid)
            talkState[cid] = 13
        else
            selfSay('Player with name "' .. playerTo[cid] .. '" doesnt exist.', cid)
            talkState[cid] = 0
        end
    elseif talkState[cid] == 13 then
        if msgcontains(msg, 'yes') then
            if getPlayerBalance(cid) < moneyTo[cid] then
                selfSay('You dont have enought money on your bank account.', cid)
                return TRUE
            end

            if doPlayerTransferMoneyTo(cid, playerTo[cid], moneyTo[cid]) ~= TRUE then
                selfSay('This player does not exist on this world or have no vocation.', cid)
            else
                selfSay('You have transferred ' .. moneyTo[cid] .. ' gold to "' .. playerTo[cid] ..' ".', cid)
                playerTo[cid] = nil
            end
        elseif msgcontains(msg, 'no') then
            selfSay('As you wish. Is there something else I can do for you?', cid)
        end
        talkState[cid] = 0
    end
    return TRUE
end

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

 

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

Esta é uma mensagem automática! Este tópico foi movido para a área correta.
Pedimos que você leia as regras do fórum.

Spoiler

This is an automated message! This topic has been moved to the correct area.
Please read the forum rules.

 

@davidguimaraesdrum você precisará adicionar esse id na source, e fazer uma modificação para ele aceitar ela como gold superior(maior) aos outros! 

                                                              ezgif-1-98aab239f3.gif.1a897c9c3225228909e7b356a5cfb8e4.gif

Link para o post
Compartilhar em outros sites

@davidguimaraesdrum tendo em vista o que disse sobre a source, posso deduzir que não saiba o seja. A source é um conjunto de arquivos que ao ser compilado se transforma na distro do server, de forma mais simples, se transforma no programa que liga o server.

 

Primeiramente vá atras de saber primeiramente o que a source, existe explicações mais detalhadas pelo fórum, basta procurar, depois de saber mais sobre a source, procure saber das do seus server, caso não tenha, procure detalhes que indique que seu server não tenha funções internas(na source), caso não tenha, você pode pegar uma source limpa e usar no mesmo.

 

E então você pode tentar adicionar a nova moeda no seu game.

 

Abraços, e boa noite!! 

                                                              ezgif-1-98aab239f3.gif.1a897c9c3225228909e7b356a5cfb8e4.gif

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

Boa Tarde @davidguimaraesdrum , acredito que dê pra fazer sem alterar nada na source, testa ai, mas antes , faça um BACKUP de todos os arquivos que você irá alterar.

 

No meu otserv eu possuo uma moda que equivale a 1kk (gold nugget), você precisará fazer alguns passos para que o npc aceite ela como novo gold, vamo lá:

 

OBS: Se você já fez algum desses processos, pode pular, acredito que pra vc só falta adicionar a tag do 4º passo, mas vou deixar completo caso alguém tenha duvida ou até você mesmo.


1º procure pelo arquivo chamado changegold.lua (provavelmente estará em /data/action/scripts/other), faça um backup desse arquivo, apague tudo de dentro dele e adicione:

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
},
[9971] = {
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

 

2º vá em /data/action/scripts e crie um arquivo chamado novamoeda.lua e cole isso:

function onUse(cid, item, frompos, item2, topos)
if doRemoveItem(item.uid,1) then
doPlayerSendTextMessage(cid,22,"Voce trocou 1 gold ingot por 1kk.")
doPlayerAddItem(cid,2160,100)
end
end

3º adicione essa tag em data/action.xml

<action itemid="9971" script="novamoeda.lua" />

4º vá em items.xml, procure pelo id 9971 e adicione esta tag:

<attribute key="worth" value="1000000" />

ficará assim:

</item>
    <item id="9971" article="a" name="gold ingot">
                <attribute key="weight" value="10"/>
                <attribute key="worth" value="1000000" />

 

creio que após isso, qualquer npc reconhecerá ela como uma moeda equivalente a 1kk, essa ultima função em item.xml é que indica o valor.

Se ajudei, REP+ haha

Editado por XandimH
adicionei uma obs (veja o histórico de edições)
Link para o post
Compartilhar em outros sites
Em 23/04/2017 ás 12:47, XandimH disse:

Boa Tarde @davidguimaraesdrum , acredito que dê pra fazer sem alterar nada na source, testa ai, mas antes , faça um BACKUP de todos os arquivos que você irá alterar.

 

No meu otserv eu possuo uma moda que equivale a 1kk (gold nugget), você precisará fazer alguns passos para que o npc aceite ela como novo gold, vamo lá:

 

OBS: Se você já fez algum desses processos, pode pular, acredito que pra vc só falta adicionar a tag do 4º passo, mas vou deixar completo caso alguém tenha duvida ou até você mesmo.


1º procure pelo arquivo chamado changegold.lua (provavelmente estará em /data/action/scripts/other), faça um backup desse arquivo, apague tudo de dentro dele e adicione:

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
},
[9971] = {
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

 

2º vá em /data/action/scripts e crie um arquivo chamado novamoeda.lua e cole isso:

function onUse(cid, item, frompos, item2, topos)
if doRemoveItem(item.uid,1) then
doPlayerSendTextMessage(cid,22,"Voce trocou 1 gold ingot por 1kk.")
doPlayerAddItem(cid,2160,100)
end
end

3º adicione essa tag em data/action.xml

<action itemid="9971" script="novamoeda.lua" />

4º vá em items.xml, procure pelo id 9971 e adicione esta tag:

<attribute key="worth" value="1000000" />

ficará assim:

</item>
    <item id="9971" article="a" name="gold ingot">
                <attribute key="weight" value="10"/>
                <attribute key="worth" value="1000000" />

 

creio que após isso, qualquer npc reconhecerá ela como uma moeda equivalente a 1kk, essa ultima função em item.xml é que indica o valor.

Se ajudei, REP+ haha

 

 

CARA*¨%#$&%¨FUNCIONOU PERFEITAMENTE, VOCÊ É O CARA!!!!!!!!!!!!!!!

Link para o post
Compartilhar em outros sites

@davidguimaraesdrum, que bom que deu certo bro! Fico feliz em ajudar! Se possível, marque como melhor resposta para que fique como [RESOLVIDO]. Obrigado!

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 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 Lekstar
      Boa noite galera do TK!
       
        Em meu servidor utilizo Golden Ingot (barras de ouro) como 4ª moeda, porem eu apenas adcionei o script de change coin e etc. entao vamos ao problema: 
      gostaria de fazer com que golden ingot realmente fosse uma moeda, pois os npcs nao o reconhecem como moeda.
       
      Exemplo #1 :
      Exemplo #2 :
       
      então é isso galera, gostaria de que golden ingot fosse reconhecido como moeda no jogo.
      Obrigado !
    • Por guilherme152
      Olá queria ajuda de vocês , Bem Estou criando um Servidor, e pra quem ja jogou pokepro, Eu queria um sistema igual o deles de moeda Red Chip , Que dá pra comprar coisas, mais se clicar nela , ela n transforma em td, nda, é Tipo uma moeda de Evento , Alguem me ajuda ? Vlw *---*
    • Por xWhiteWolf
      Vi um pessoal atrás desse sistema e decidi trazer pra cá ;]
      O que é: Um sistema em que você insere um Cartão de Crédito em um Caixa Eletrônico para executar ações iguais às de um banco de verdade.

      Crie um arquivo em mods com extensão .xml e coloque isso dentro
      Por recomendações do criador do script, é sugerido que se coloque NO-LOGOUT na área da fila.

      Veja as imagens abaixo: 
       
       
      Observações:
      - Para usar o caixa eletrônico, você tem que dar Use With nele com o cartão.
      Créditos:
      LuckOake -- Pelo sistema
    • Por Wiserxd
      Então... por onde eu começo??
      Hm.. vamos desde ao início...
       
       
      Tudo começou por volta de 2009 a 2010 se eu não me engano,eu jogava Svke e sempre quis ter um servidor igual ao deles então em 2010 comecei a procurar e achei vários servers o primeiro foi um que só tinha um pedaço de terra como mapa,pois é na época não sabia muito bem mexer com mapping... e depois de 1 semana +ou- lançou o Pokemon Flash V1.0...
      E daí surgiu meu primeiro servidor Pokemon Gold...
      E eu quero continuar com ele então vamos ao o que interessa...
       
      Então,necessito das seguintes funções:
       
      1 SCRIPTER
      2 SPRITERS
      3 TUTORS
      Por enquanto é só isso...
       
      Para o recrutamento exijo as seguintes informações:
       
      Nome:
      Idade:
      Função:
      Email ou Skype:
      O que deseja fazer pelo servidor?
      Já fez algum projeto?(Se sim,qual?)
      Já participou de alguma staff de server?(Se sim,qual?)
       
       
      Usarei como base o pokemon Kpdo.
      Irei abrir ele no dia 20/04/2015
       
      Obrigado a todos que lerem...
       
       

      Se escrevi algo errado por favor me perdoem  
×
×
  • Criar Novo...

Informação Importante

Confirmação de Termo