Ir para conteúdo

Npc Banker, Para Tfs 0.3b2+


Alissow

Posts Recomendados

Quero deixar bem claro que o script do npc não é meu é de outro fórum e todos os créditos vão para Gesior.

 

Em config.lua verifique a linha

bankSystem = "yes"

Deixe "yes"

 

Crie um arquivo com nome bank.xml em \data\npc e cole isto:

<?xml version="1.0" encoding="UTF-8"?>
<npc name="Bank" script="data/npc/scripts/bank.lua" walkinterval="2000" floorchange="0">
   <health now="100" max="100"/>
   <look type="134" head="78" body="88" legs="0" feet="88" addons="3"/>
</npc>

 

Agora crie um em bloco de notas com nome bank em \data\npc\scripts e adicione este codigo:

function getCount(msg)
   local ret = -1
   local b, e = string.find(msg, "%d+")
   if b ~= nil and e ~= nil then
      ret = tonumber(string.sub(msg, b, e))
   end

   return ret
end

function msgcontains(message, keyword)
   local a, b = string.find(message, keyword)
   if a == nil or b == nil then
       return false
   end
   return true
end

function addCoin(cid, itemid, count)
   if count > 100 then
       while(count > 100) do
           cash = doCreateItemEx(itemid, 100)
           doPlayerAddItemEx(cid, cash, 1)
           count = count - 100
       end
   end
   if count > 0 then
       cash = doCreateItemEx(itemid, count)
       doPlayerAddItemEx(cid, cash, 1)
   end
end

function doPlayerExist(name)
   local result = db.getResult("SELECT `name` FROM `players` WHERE `name` = " .. db.escapeString(name))
   if (result:getID() ~= -1) then
       local return_name = result:getDataString("name")
       result:free()
   return return_name
   end
   return 0
end

GOLD_COIN = 2148
PLATINUM_COIN = 2152
CRYSTAL_COIN = 2160

local keywordHandler = KeywordHandler:new()
local npcHandler = NpcHandler:new(keywordHandler)
NpcSystem.parseParameters(npcHandler)


function onCreatureAppear(cid)                npcHandler:onCreatureAppear(cid)             end
function onCreatureDisappear(cid)
   talk_state[cid] = 0
   npcHandler:onCreatureDisappear(cid)
end
function onCreatureSay(cid, type, msg)         npcHandler:onCreatureSay(cid, type, msg)     end
function onThink()                             npcHandler:onThink()                         end

npcHandler:setMessage(MESSAGE_GREET, "Greetings |PLAYERNAME|. I'm banker.")

talk_state = {}
last_count = {}
last_name = {}
function creatureSayCallback(cid, type, msg)
   orginal_msg = msg
   msg = string.lower(msg)
   if(not npcHandler:isFocused(cid)) then
   talk_state[cid] = 0
       return false
   end
   if talk_state[cid] == nil then
       talk_state[cid] = 0
       last_count[cid] = 0
       last_name[cid] = ""
   end
   -- select action
   if msgcontains(msg, 'change') and talk_state[cid] ~= 41 then
       talk_state[cid] = 10
       npcHandler:say('We exchange gold, platinum and crystal coins.', cid)
   elseif msgcontains(msg, 'balance') and talk_state[cid] ~= 41 then
       talk_state[cid] = 0
       local balance = getPlayerBalance(cid)
       if balance == 0 then
           npcHandler:say('Your bank account is empty.', cid)
       elseif balance <= 100000 then
           npcHandler:say('Your account balance is ' .. balance .. ' gold coins.', cid)
       elseif balance <= 1000000 then
           npcHandler:say('Your account balance is ' .. balance .. ' gold coins.', cid)
       else 
           npcHandler:say('Your account balance is ' .. balance .. ' gold coins.', cid)
       end
   elseif msgcontains(msg, 'deposit') and talk_state[cid] ~= 41 then
       talk_state[cid] = 20
       npcHandler:say('How much gold you would like to deposit?', cid)
   elseif msgcontains(msg, 'withdraw') and talk_state[cid] ~= 41 then
       talk_state[cid] = 30
       npcHandler:say('How much gold you would like to withdraw?', cid)
   elseif msgcontains(msg, 'transfer') and talk_state[cid] ~= 41 then
       talk_state[cid] = 40
       npcHandler:say('How much gold you would like to transfer?', cid)
   end
   --  change
   if talk_state[cid] == 10 then
       if msgcontains(msg, 'platinum') then
           talk_state[cid] = 12
           npcHandler:say('Do you want to change your platinum coins to gold or crystal?', cid)
       elseif msgcontains(msg, 'gold') then
           talk_state[cid] = 11
           npcHandler:say('How many platinum coins do you want to get?', cid)
       elseif msgcontains(msg, 'crystal') then
           talk_state[cid] = 13
           npcHandler:say('How many crystal coins do you want to change to platinum?', cid)
       end
   end
   if talk_state[cid] >= 11 and talk_state[cid] <= 13 then
       if talk_state[cid] == 11 and getCount(msg) > 0 then
           talk_state[cid] = 14
           last_count[cid] = getCount(msg)
           npcHandler:say('So I should change ' .. getCount(msg) * 100 .. ' of your gold coins to ' .. getCount(msg) .. ' platinum coins for you?', cid)
       elseif talk_state[cid] == 12 then
           if msgcontains(msg, 'gold') then
               talk_state[cid] = 15
               npcHandler:say('How many platinum coins do you want to change to gold?', cid)
           elseif msgcontains(msg, 'crystal') then
               talk_state[cid] = 16
               npcHandler:say('How many crystal coins do you want to get?', cid)
           end
       elseif talk_state[cid] == 13 and getCount(msg) > 0 then
           talk_state[cid] = 17
           last_count[cid] = getCount(msg)
           npcHandler:say('So I should change ' .. getCount(msg) .. ' of your crystal coins to ' .. getCount(msg)*100 .. ' platinum coins for you?', cid)
       end
   end
   if talk_state[cid] >= 14 and talk_state[cid] <= 17 then
       if talk_state[cid] == 14 and getCount(msg) <= 0 then
           if msgcontains(msg, 'yes') then
               if math.floor(getPlayerItemCount(cid, GOLD_COIN) / 100) >= last_count[cid] then
                   doPlayerRemoveItem(cid, GOLD_COIN, last_count[cid] * 100)
                   addCoin(cid, PLATINUM_COIN, last_count[cid])
                   npcHandler:say('Here you are.', cid)
               else
                   npcHandler:say('You don\'t have ' .. last_count[cid] * 100 .. ' gold coins.', cid)
               end
           else
               npcHandler:say('Well, can I help you with something else?', cid)
           end
           talk_state[cid] = 0
       elseif talk_state[cid] == 15 and getCount(msg) > 0 then
           talk_state[cid] = 18
           last_count[cid] = getCount(msg)
           npcHandler:say('So I should change ' .. getCount(msg) .. ' of your platinum coins to ' .. getCount(msg) * 100 .. ' gold coins for you?', cid)
       elseif talk_state[cid] == 16 and getCount(msg) > 0 then
           talk_state[cid] = 19
           last_count[cid] = getCount(msg)
           npcHandler:say('So I should change ' .. getCount(msg) * 100 .. ' of your platinum coins to ' .. getCount(msg) .. ' crystal coins for you?', cid)
       elseif talk_state[cid] == 17 and getCount(msg) <= 0 then
           if msgcontains(msg, 'yes') then
               if getPlayerItemCount(cid, CRYSTAL_COIN) >= last_count[cid] then
                   doPlayerRemoveItem(cid, CRYSTAL_COIN, last_count[cid])
                   addCoin(cid, PLATINUM_COIN, last_count[cid] * 100)
                   npcHandler:say('Here you are.', cid)
               else
                   npcHandler:say('You don\'t have ' .. last_count[cid] .. ' crystal coins.', cid)
               end
           else
               npcHandler:say('Well, can I help you with something else?', cid)
           end
           talk_state[cid] = 0
       end
   end
   if talk_state[cid] >= 18 and talk_state[cid] <= 19 then
       if talk_state[cid] == 18 and getCount(msg) <= 0 then
           if msgcontains(msg, 'yes') then
               print(2)
               if getPlayerItemCount(cid, PLATINUM_COIN) >= last_count[cid] then
                   doPlayerRemoveItem(cid, PLATINUM_COIN, last_count[cid])
                   addCoin(cid, GOLD_COIN, last_count[cid] * 100)
                   npcHandler:say('Here you are.', cid)
               else
                   npcHandler:say('You don\'t have ' .. last_count[cid] .. ' platinum coins.', cid)
               end
           else
               npcHandler:say('Well, can I help you with something else?', cid)
           end
           talk_state[cid] = 0
       elseif talk_state[cid] == 19 and getCount(msg) <= 0 then
           if msgcontains(msg, 'yes') then
               if math.floor(getPlayerItemCount(cid, PLATINUM_COIN) / 100) >= last_count[cid] then
                   doPlayerRemoveItem(cid, PLATINUM_COIN, last_count[cid] * 100)
                   addCoin(cid, CRYSTAL_COIN, last_count[cid])
                   npcHandler:say('Here you are.', cid)
               else
                   npcHandler:say('You don\'t have ' .. last_count[cid] * 100 .. ' platinum coins.', cid)
               end
           else
               npcHandler:say('Well, can I help you with something else?', cid)
           end
           talk_state[cid] = 0
       end
   end
   --deposit
   if talk_state[cid] == 20 and getCount(msg) > 0 then
       talk_state[cid] = 21
       last_count[cid] = getCount(msg)
       npcHandler:say('Would you really like to deposit ' .. last_count[cid] .. ' gold coins?', cid)
   elseif talk_state[cid] == 20 and msgcontains(msg, 'all') then
       if getPlayerMoney(cid) <= 0 then
           talk_state[cid] = 0
           npcHandler:say('You don\'t have any money.', cid)
       else
           talk_state[cid] = 21
           last_count[cid] = getPlayerMoney(cid)
           npcHandler:say('Would you really like to deposit your all money, ' .. last_count[cid] .. ' gold coins?', cid)
       end
   elseif talk_state[cid] == 21 and getCount(msg) <= 0 then
       if msgcontains(msg, 'yes') then
           if doPlayerDepositMoney(cid, last_count[cid]) == TRUE then
               npcHandler:say('You deposited ' .. last_count[cid] .. ' gold coins. Now your account balance is ' .. getPlayerBalance(cid) .. ' gold coins.', cid)
           else
               npcHandler:say('You don\'t have ' .. last_count[cid] .. ' gold coins.', cid)
           end
       else
           npcHandler:say('Well, can I help you with something else?', cid)
       end
       talk_state[cid] = 0
   end
   --withdraw
   if talk_state[cid] == 30 and getCount(msg) > 0 then
       talk_state[cid] = 31
       last_count[cid] = getCount(msg)
       npcHandler:say('Would you really like to withdraw ' .. last_count[cid] .. ' gold coins?', cid)
   elseif talk_state[cid] == 30 and msgcontains(msg, 'all') then
           talk_state[cid] = 31
           last_count[cid] = getPlayerBalance(cid)
           npcHandler:say('Would you really like to withdraw your all money, ' .. last_count[cid] .. ' gold coins?', cid)
   elseif talk_state[cid] == 31 and getCount(msg) <= 0 then
       if msgcontains(msg, 'yes') then
           if doPlayerWithdrawMoney(cid, last_count[cid]) == TRUE then
               npcHandler:say('You withdrawed ' .. last_count[cid] .. ' gold coins. Now your account balance is ' .. getPlayerBalance(cid) .. ' gold coins.', cid)
           else
               npcHandler:say('You don\'t have ' .. last_count[cid] .. ' gold coins on your account. You account balance is ' .. getPlayerBalance(cid) .. '.', cid)
           end
           talk_state[cid] = 0
       else
           npcHandler:say('Well, can I help you with something else?', cid)
       end
       talk_state[cid] = 0
   end
   -- transfer
   if talk_state[cid] == 40 and getCount(msg) > 0 then
       if getPlayerBalance(cid) >= getCount(msg) then
           talk_state[cid] = 41
           last_count[cid] = getCount(msg)
           npcHandler:say('To who would you like transfer ' .. last_count[cid] .. ' gold coins from your account? Tell me his or her name.', cid)
       else
           talk_state[cid] = 0
           npcHandler:say('You don\'t have ' .. getCount(msg) .. ' gold coins on your account.', cid)
       end
   elseif talk_state[cid] == 41 then
       local toPlayer = doPlayerExist(msg)
       if toPlayer ~= 0 then
           last_name[cid] = toPlayer
           talk_state[cid] = 42
           npcHandler:say('So you would like to transfer ' .. last_count[cid] .. ' gold coins to ' .. last_name[cid] .. '?', cid)
       else
           talk_state[cid] = 0
           npcHandler:say('I don\'t know player with name ' .. orginal_msg .. '.', cid)
       end
   elseif talk_state[cid] == 42 then
       if msgcontains(msg, 'yes') then
           if doPlayerTransferMoneyTo(cid, last_name[cid], last_count[cid]) == TRUE then
               npcHandler:say('You have transfered ' .. last_count[cid] .. ' gold coins to bank account of player ' .. last_name[cid] .. '. Now your account balance is ' .. getPlayerBalance(cid) .. '.', cid)
           else
               npcHandler:say('You don\'t have ' .. last_count[cid] .. ' gold coins on your bank account or player with name ' .. last_name[cid] .. ' doesn\'t exist. Money not transfered.', cid)
               last_name[cid] = ""
           end
       else
           npcHandler:say('Well, can I help you with something else?', cid)
       end
       talk_state[cid] = 0
   end
   return true
end

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

 

 

Exemplo de conversa com o npc:

21:02 Bank: Greetings GOD Alissow. I'm banker.

21:02 GOD Alissow [1000]: deposit 3000

21:02 Bank: Would you really like to deposit 3000 gold coins?

21:02 GOD Alissow [1000]: yes

21:02 Bank: You deposited 3000 gold coins. Now your account balance is 3000 gold coins.

21:02 GOD Alissow [1000]: deposit all

21:02 Bank: Would you really like to deposit your all money, 80 gold coins?

21:03 GOD Alissow [1000]: yes

21:03 Bank: You deposited 80 gold coins. Now your account balance is 3080 gold coins.

21:03 GOD Alissow [1000]: balance

21:03 Bank: Your account balance is 3080 gold coins.

21:03 GOD Alissow [1000]: withdraw all

21:03 Bank: Would you really like to withdraw your all money, 3080 gold coins?

21:03 GOD Alissow [1000]: yes

21:03 Bank: You withdrawed 3080 gold coins. Now your account balance is 0 gold coins.

21:03 Bank: How rude!

 

Só funciona bem em TFS 0.3b2+

Faça bom uso.

Editado por alissow
Link para o comentário
Compartilhar em outros sites

Tá loco, esse script aí é só uma function, verifique se o script que você colocou está correto >.>

 

Esse aí não funciona não =p

 

Ele funciona sim, eu testei e funcionou em tfs 0.3, siga o topico que funciona.

Link para o comentário
Compartilhar em outros sites

Opa, foi mal, pensei que só tinha uma function, é que o meu IE estava bugado no outro PC. Não apareceu a barra de rolagem, se você puder colocar em quote, fica melhor.

 

Bom o script :)

Link para o comentário
Compartilhar em outros sites

Gesior complico demais um npc simples...

 

 

http://www.xtibia.com/forum/831npc-Bank-Ot-Sql-t104061.html

 

Mais simples e melhor

 

ELe criou uma função para adicionar dinheiro <inutil>

Uma para verificar se o player existe <desnecessario>

Link para o comentário
Compartilhar em outros sites

  • 2 weeks later...

Cara assim do fundo do coração da dó das pessoas q se dedicam a um projeto mais esse seu projeto mesmo eu nao o baixando quero te dizer uma coisa nao gostei nem um pouco pq um dos motivos do otserv ser criado é fujir da rotina normal do tibia global como:

Npc's em ingles -motivo pelo qual eu nao gostei do seu npc

Exp Alta

Outro Mapa

Entre Outros

mais entao tente mudar a linguagem ponha um pouco de gírias , diferencie bom se voce entende oq eu digo seria muito bom se vc fizesse isso

Att~

ThunderLauncher

Link para o comentário
Compartilhar em outros sites

×
×
  • Criar Novo...