Ir para conteúdo

Ações Bancárias


joaohd

Posts Recomendados

Ações bancárias

 

Sistema desenvolvido por mim (apocarai), idéia e correções por matheusMkalo.

 

Como funciona: Você deposita uma quantia e, dependendo da cotação, você pode ganhar ou perder dinheiro.

 

Então, mãos à obra:

 

Primeiramente, crie um arquivo com o nome BankSharesEvent.lua em seu diretório globalevents/scripts, colocando o script abaixo:

 

--Script por apocarai, matheusMkalo--
s = {}
y = {}
function countAuctions()

        return #s 
        end

function chance() -- função para balanceamento das ações.

        if math.random(1,10) <= 2 then
           x = (math.random(1,3)*10/100)
        elseif math.random(1,10) >= 3 and math.random(1,10) <= 5 then
           x = (math.random(2,5)*10/100)
        elseif math.random(1,10) >= 6 and math.random(1,10) <= 8 then
           x = (math.random(3,7)*10/100)
        elseif math.random(1,10) == 9 then
           x = (math.random(4,8)*10/100)
        elseif math.random(1,10) == 10 then
           x = (math.random(5,9)*10/100)
        end
        return table.insert(y, 1, x)
        end

function doExecuteBankShares(cid)
         if  math.random(1,10) >= 6  then
           return chance(), doPlayerSetBalance(cid, (getPlayerBalance(cid))*(1+tonumber(y[1]))), doPlayerSendTextMessage(cid, TALKTYPE_ORANGE_1, "As a\ç\õ\es bancárias est\ã\o em alta. Seu saldo teve acréscimo de " .. (tonumber(y[1])*100) .. "'\%\'. Agora seu saldo é de: " .. getPlayerBalance(cid) .. " gp's. Hoje tivemos: " .. countAuctions() .. " movimenta\ç\õ\es financeiras."), table.remove(y,1)

        elseif math.random(1,10) == 10 then
           return doPlayerSetBalance(cid, 0), doPlayerSendTextMessage(cid, TALKTYPE_ORANGE_1, "Os bancos faliram. Voc\ê\ perdeu todo seu investimento. Seu saldo atual é de: " .. getPlayerBalance(cid) .. " gp's. Hoje tivemos: " .. countAuctions() .. " movimenta\ç\\õ\es financeiras.")

        else 
           return chance(), doPlayerSetBalance(cid, (getPlayerBalance(cid))*(tonumber(y[1]))), doPlayerSendTextMessage(cid, TALKTYPE_ORANGE_1, "As a\ç\õ\es bancárias estão sofrendo quedas. Seu saldo teve queda de " .. (tonumber(y[1])*100) .. "'\%\' gp's . Seu saldo atual é de: " .. getPlayerBalance(cid) .. " gp's. Hoje tivemos: " .. countAuctions() .. " movimenta\ç\õ\es financeiras."), table.remove(y,1)    

              end  
        return TRUE
        end

function onThink(interval, lastExecution)
        table.insert(s,"Bank shares: Ok!")

        for i = 1, #getOnlinePlayers() do
            if getPlayerStorageValue(getCreatureByName(getOnlinePlayers()[i]),99889) >= 1 then
              if getPlayerBalance(getCreatureByName(getOnlinePlayers()[i])) ~= 0 then
                 doExecuteBankShares(getCreatureByName(getOnlinePlayers()[i]))
                 print("[bank Shares System:: Executado com sucesso.]")

              end
              end
              end
              return TRUE
              end

 

Salve e feche.

Agora, adicione a seguinte tag em seu globalevents.xml:

 

<globalevent name="BankShares" interval="3600" event="script" value="BankSharesEvent.lua"/>

 

Caso queira alterar o tempo entre as execuções, modifique o interval. Caso contrário, somente salve e feche.

Em seu diretório npc/scripts, crie um arquivo com o nome BankShares.lua, colocando o script abaixo:

 

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

function creatureSayCallback(cid, type, msg)

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

   if msgcontains(msg, 'ajuda') or msgcontains(msg, 'ofertas') then
       selfSay("Voce pode checar seu {saldo} da sua conta, {depositar} dinheiro ou {extrair} para retirar. Voce tambem pode {transferir} dinheiro para outros players, tambem pode entrar nas {açoes}, diga {informaçoes} para saber sobre as açoes.", cid)
       talkState[cid] = 0
-----------------------------------------------------------------
---------------------------- Balance ----------------------------
-----------------------------------------------------------------
   elseif msgcontains(msg, 'saldo') or msgcontains(msg, 'Saldo') then
       selfSay('Seu saldo é '..getPlayerBalance(cid)..' gold.', cid)
       talkState[cid] = 0
-----------------------------------------------------------------
---------------------------- Help -------------------------------
-----------------------------------------------------------------
   elseif msgcontains(msg, 'basic functions') then
       selfSay('Voce pode checar seu {balance} da sua conta, {deposit} dinheiro ou {withdraw} para extrair. Voce tambem pode {transfer} dinheiro para outros players, tambem pode entrar nas {açoes}.', cid)
       talkState[cid] = 0
   elseif msgcontains(msg, 'informaçoes') then
       selfSay('Açoes, voce tem uma chance de ganhar ou de perder de 10% a 90% do valor total do balance da sua conta.', cid)
       talkState[cid] = 0
-----------------------------------------------------------------
---------------------------- Deposit ----------------------------
-----------------------------------------------------------------
   elseif msgcontains(msg, 'depositar tudo') then
       moneyTo[cid] = getPlayerMoney(cid)
       if moneyTo[cid] < 1 then
           selfSay('Voce nao tem dinheiro.', cid)
           talkState[cid] = 0
       else
           selfSay('Voce realmente quer adicionar '..moneyTo[cid]..' gold?', cid)
           talkState[cid] = 2
       end
   elseif msgcontains(msg, 'depositar') then
       selfSay("Porfavor me diga quanto voce quer depositar.", cid)
       talkState[cid] = 1
   elseif talkState[cid] == 1 then
       moneyTo[cid] = tonumber(msg)
       if isValidMoney(cid, moneyTo[cid]) == TRUE then
           selfSay('Voce realmente quer depositar '..moneyTo[cid]..' gold?', cid)
           talkState[cid] = 2
       else
           selfSay('Nao é uma quantia valida para deposito.', cid)
           talkState[cid] = 0
       end
   elseif talkState[cid] == 2 then
       if msgcontains(msg, 'sim') then
           if doPlayerDepositMoney(cid, moneyTo[cid], 1) ~= TRUE then
               selfSay('Voce nao tem esse dinheiro.', cid)
           else
               selfSay('Tudo bem, nos adicionamos '..moneyTo[cid]..' gold para seu saldo. Voce pode extrair seu dinheiro quando quiser. Seu saldo é ' .. getPlayerBalance(cid) .. '.', cid)
           end
       elseif msgcontains(msg, 'nao') then
           selfSay('Como desejar. Posso fazer mais alguma coisa por voce?', cid)
       end
       talkState[cid] = 0
-----------------------------------------------------------------
---------------------------- Withdraw ---------------------------
-----------------------------------------------------------------
   elseif msgcontains(msg, 'extrair') then
       selfSay("Porfavor, diga-me quanto voce deseja extrair.", cid)
       talkState[cid] = 6
   elseif talkState[cid] == 6 then
       moneyTo[cid] = tonumber(msg)
       if isValidMoney(cid, moneyTo[cid]) == TRUE then
           selfSay('Voce esta certo que quer extrair '..moneyTo[cid]..' gold de sua conta de banco?', cid)
           talkState[cid] = 7
       else
           selfSay('Nao é uma quantia valida para extraçao.', cid)
           talkState[cid] = 0
       end
   elseif talkState[cid] == 7 then
       if msgcontains(msg, 'sim') then
           if doPlayerWithdrawMoney(cid, moneyTo[cid]) ~= TRUE then
               selfSay('Voce nao tem essa quantia em sua conta. Seu saldo é '..getPlayerBalance(cid)..'. Por favor, diga-me quanto quer extrair.', cid)
           else
               selfSay('Aqui esta, ' .. moneyTo[cid] .. ' gold. Porfavor, digame se quizer mais alguma coisa.', cid)
               talkState[cid] = 0
           end
       elseif msgcontains(msg, 'nao') then
           selfSay('Como desejar. Posso fazer mais algo?', cid)
           talkState[cid] = 0
       end
-----------------------------------------------------------------
---------------------------- Transfer ---------------------------
-----------------------------------------------------------------
   elseif msgcontains(msg, 'transferir') then
       selfSay("Por favor, digame quanto de dinheiro voce quer transferir.", cid)
       talkState[cid] = 11
   elseif talkState[cid] == 11 then
       moneyTo[cid] = tonumber(msg)
       if isValidMoney(cid, moneyTo[cid]) == TRUE then
           selfSay('Voce gostaria de transferir '..moneyTo[cid]..' gold para?', cid)
           talkState[cid] = 12
       else
           selfSay('Nao é uma quantia valida para deposito.', cid)
           talkState[cid] = 0
       end
   elseif talkState[cid] == 12 then
       playerTo[cid] = msg

       if getCreatureName(cid) == playerTo[cid] then
           selfSay('Voce deseja transferir dinheiro para voce mesmo? Isto e impossivel!', cid)
           talkState[cid] = 0
           return TRUE
       end

       if playerExists(playerTo[cid]) then
           selfSay('Voce deseja transferir ' .. moneyTo[cid] .. ' gold para "' .. playerTo[cid] .. '" ?', cid)
           talkState[cid] = 13
       else
           selfSay('O player "' .. playerTo[cid] .. '" nao existe.', cid)
           talkState[cid] = 0
       end
   elseif talkState[cid] == 13 then
       if msgcontains(msg, 'sim') then
           if getPlayerBalance(cid) < moneyTo[cid] then
               selfSay('Voce nao tem dinheiro em sua conta.', cid)
               return TRUE
           end

           if doPlayerTransferMoneyTo(cid, playerTo[cid], moneyTo[cid]) ~= TRUE then
               selfSay('Esse player nao existe ou ainda nao tem vocaçao.', cid)
           else
               selfSay('Voce transferiu ' .. moneyTo[cid] .. ' gold tpara "' .. playerTo[cid] ..' ".', cid)
               playerTo[cid] = nil
           end
       elseif msgcontains(msg, 'nao') then
           selfSay('Como deseja. Posso fazer mais alguma coisa para voce?', cid)
       end
       talkState[cid] = 0


--------------------------------------------------------------------------------
-------------------------Bank shares--------------------------------------------
--------------------------------------------------------------------------------
  elseif msgcontains(msg, "açoes") then
         selfSay('Açoes, deseja {entrar} ou {sair}?', cid)
         talkState[cid] = 14

  elseif msgcontains(msg, 'entrar') and talkState[cid] == 14 then
       if getPlayerStorageValue(cid, 99889) <= 0 then
         if getPlayerBalance(cid) == 0 then
            selfSay('Okay. Mas, estou vendo seu saldo e ele é 0 gold coins. Quanto voce quer depositar?', cid)
            talkState[cid] = 15
         else
             selfSay('Parabens. Agora, fique preparado para as açoes. Pode acontecer a qualquer hora.', cid)
             setPlayerStorageValue(cid, 99889, 1)
             talkState[cid] = 0
       end 
       else
             selfSay('Voce ja esta nas açoes. Verifique seu saldo.', cid)
             talkState[cid] = 0
       end



   elseif talkState[cid] == 15 then
       moneyTo[cid] = tonumber(msg)
       if isValidMoney(cid, moneyTo[cid]) == TRUE then
           selfSay('Voce realmente quer depositar '..moneyTo[cid]..' gold?', cid)
           talkState[cid] = 16
       else
           selfSay('Voce nao tem esse dinheiro para depositar.', cid)
           talkState[cid] = 0
       end



   elseif talkState[cid] == 16 then
       if msgcontains(msg, 'sim') then
           if doPlayerDepositMoney(cid, moneyTo[cid], 1) ~= TRUE then
               selfSay('Voce nao tem nenhum dinheiro.', cid)
               talkState[cid] = 0
           else
               selfSay('Tudo bem, nos adicionamos '..moneyTo[cid]..' gold para seu saldo. A partir de agora você está apto a participar das a\ç\ões do banco. Seu saldo é ' .. getPlayerBalance(cid) .. '.', cid)
               setPlayerStorageValue(cid, 99889, 1)
          end
           end

       elseif msgcontains(msg, 'nao') then
           selfSay('Como quiser. Posso fazer mais alguma coisa por voce?', cid)
           talkState[cid] = 0

 elseif msg == 'sair' and talkState[cid] == 14 then
        if getPlayerStorageValue(cid, 99889) == 1 then
           selfSay('Feito. Obrigado por usar nossos servicos.', cid)
           setPlayerStorageValue(cid, 99889, -1)
           talkState[cid] = 0
        else
           selfSay('Voce nao esta em nossos registros.', cid)
           talkState[cid] = 0
           end          
    end      

   return TRUE
end

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

 

Salve e feche.

Agora, crie um arquivo com o nome Bank.xml em seu diretório npc, adicionando o código abaixo:

 

<npc name="Bank" script="data/npc/scripts/BankShares.lua" walkinterval="2000" floorchange="0">
   <health now="100" max="100"/>
   <look type="134" head="78" body="88" legs="0" feet="88" addons="3"/>
<parameters>
	<parameter key="message_greet" value="Ola. Para mais informacoes de meus servicos diga {ajuda}." />
	<parameter key="message_farewell" value="Tchau." />
	<parameter key="message_walkaway" value="Tchau." />
</parameters>
</npc>

 

Salve e feche.

Agora, abra seu config.lua e localize:

 

bankSystem = false

 

ou também:

 

bankSystem = "no"

 

E substitua por true,em caso de estar false; e yes, em caso de estar no.

 

Sistema implantado. Agora, simplesmente adicione um respawn do npc bank em seu mapa e negocie as açoes com ele, dizendo hi;açoes;entrar (caso tenha algum dinheiro depositado), ou hi;açoes;entrar;(quantidade que deseja depositar);sim.

 

 

Favor não postar em outros fóruns.

 

 

Caso tenham algum problema com o sistema, poste sua dúvida para que possa saná-la.

 

 

flw

 

 

Obs: O npc que usei, é do servidor do alissow, modifiquei e matheusMkalo traduziu (não gostei).

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

xD, eu acho que esse script vai ficar famoso hehe, se nao ficar tbm =/

 

ESQUECEU DE FALAR QEU EU TESTEI O SCRIPT TBM DISGRAÇA brinks

 

Gente, vou falar como mecher em um negocio:

<globalevent name="BankShares" interval="3600" event="script" value="BankSharesEvent.lua"/>

 

Ali no interval e o tempo que as açoes vao ser aplicadas e em .xml o tempo e em segundos entao ali seria 3600 segundos voces podem almentar.

 

SS:

bancarias.png

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

Muito bom o script !!

 

^^

 

Mais acho que seria melhor por uma quantia certa á ganhar, e n dobrar sua balance (se é isso q eu intendi) ;x

Parabéns aos 2, ótimo trabalho. (:

 

 

--------------

edit

 

Me corrija se eu estiver errado, mas não é permitido usar 'ç' nas falas dos npcs é ? Oo'

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

Como dito, ele pode ganhar ou perder. Ele pode depositar quantias exorbitantes e ganhar muito. Porém, de uma hora para a outra ele pode perder tudo.

 

flw

 

@vampiresco

Dinheiro move o mundo.

 

@TheGodMax

E permitido sim o uso de 'ç' em npcs. Creio que o uso só é restrito ao xml.

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

Opa, mas um bom script shoow para o meu otserver!

Muito bom mesmo.. testado: APROVADO!

 

Voces estão sempre trabalhando com dinheiro?

!apostar

Agr isso xD!

Gostei muito cara (LOL)

 

ABRAÇO.

Link para o comentário
Compartilhar em outros sites

só precisa depois que criar os códigos formatalos para torna-los mais legiveis.

 

modifica algumas coisas nele.

 

s = {}

y = {}

 

-- não é necessario o uso de duas tabelas globais.

 

if math.random(1,10) >= 6 then

elseif math.random(1,10) == 10 then

 

--não entendi o que o elseif está fazendo.

 

não era necessario declarar

 

return TRUE

 

ja que ele não requer o uso de bollean, sem conta que a função retorno outros valores e numca vai executar essa linha.

Link para o comentário
Compartilhar em outros sites

Aff, como sempre. Marcryzius, sempre vejo você em tópicos meus, seja desmentindo o que digo ou tentando ser superior.

Neste script, eu confesso que tem várias coisas que não precisariam estar ali. Porém, para que o script funcionasse perfeitamente, fui obrigado a criar alguns POG's. As tabelas que criei foram para armazenar o valor retornado pela função chance() e para armazenar o número de eventos ocorridos. Já o elseif, é para que caso o valor retornado for 10, o jogador perca todas as ações, o que torna mais imprevisível o futuro do dinheiro depositado.

 

A propósito, sei que é um grande scripter, porém, não vejo a necessidade de interferir/corrigir (por vezes sem fundamentos) nos scripts que não sejam postados por você. Não que eu queira criar uma rixa, mas não é a primeira vez que vejo isto acontecer.

 

 

Espero que termine aqui.

 

 

flw

Link para o comentário
Compartilhar em outros sites

Aff, como sempre. Marcryzius, sempre vejo você em tópicos meus, seja desmentindo o que digo ou tentando ser superior.

Neste script, eu confesso que tem várias coisas que não precisariam estar ali. Porém, para que o script funcionasse perfeitamente, fui obrigado a criar alguns POG's. As tabelas que criei foram para armazenar o valor retornado pela função chance() e para armazenar o número de eventos ocorridos. Já o elseif, é para que caso o valor retornado for 10, o jogador perca todas as ações, o que torna mais imprevisível o futuro do dinheiro depositado.

 

A propósito, sei que é um grande scripter, porém, não vejo a necessidade de interferir/corrigir (por vezes sem fundamentos) nos scripts que não sejam postados por você. Não que eu queira criar uma rixa, mas não é a primeira vez que vejo isto acontecer.

 

 

Espero que termine aqui.

 

 

flw

 

 

cara não estou querendo demonstrar ser o sábio não, e sim que seja melhor pra você.

estou apenas dando dicas de como criar cada vez mais script de qualidade.

você pode sim se superar veja o que eu citei não como afronte e sim como uma forma de aprimorar cada vez mais seus conhecimentos.

 

não afronto ninguem apenas demonstro que elas podem melhorar sabendo por onde começar.

espero que entenda isso. :)

Link para o comentário
Compartilhar em outros sites

×
×
  • Criar Novo...