MA
talkaction

[ Talkaction ]Talkaction De Compra De Itens.

Por MatheusGlad, 27 de mai. de 2010 em Actions e Talkactions

otserv
tibia
script
8
2.3k
MatheusGladM
27 de maio de 2010 às 17:58

Creditos: Apocarai e MatheusMkalo

 

Bom o script funciona assim, des de que tenha um tal item no script voce pode compra-lo por um tal preço e se for agrupavel voce pode escolher a quantidade.

 

Como usar:

/buyitem gold nugget,50

 

Onde esta 50 é a quantidade de gold nugget que voce ira comprar.

 

Bom, vá na pasta data/talkactions/scripts e crie um arquivo.lua chamado buyitens e bote este script dentro:

------Script by MatheusMkalo and apocarai-------
------Exclusivo para o Xtibia--------
function onSay(cid, words, param)

local a = {
[2472] = {price = 160000, countmax = 1},
[2157] = {price = 13000, countmax = 100},
[2466] = {price = 60000, countmax = 1},
[2494] = {price = 150000, countmax = 1}
}

local b = string.explode(param, ",")

      if a[getItemIdByName(b[1])] then
         if isNumber(b[2]) then
            if tonumber(b[2]) > 0 then
               if tonumber(b[2]) <= a[getItemIdByName(b[1])].countmax then
                  if getPlayerMoney(cid) >= (a[getItemIdByName(b[1])].price*tonumber(b[2])) then 
                     doPlayerRemoveMoney(cid,(a[getItemIdByName(b[1])].price*tonumber(b[2])))
                     doPlayerAddItem(cid, getItemIdByName(b[1]),b[2])
                     doPlayerSendTextMessage(cid,25,"You have bought " .. tonumber(b[2]) .. " " .. getItemNameById(getItemIdByName(b[1])) .. " for " .. (a[getItemIdByName(b[1])].price*tonumber(b[2])) .. " gold pieces.")

                  else
                      doPlayerSendCancel(cid,"You have not enough money.")
                  end
               else
                   doPlayerSendCancel(cid,"You have informed a quantity higher than count max.")
               end
            else
                doPlayerSendCancel(cid,"You have informed a quantity lower than 0")
            end
         else
             doPlayerSendCancel(cid,"Quantity must be a number.")
         end
      end


return TRUE
end 

 

Depois salve-o e va em talkactions.xml e bote a seguinte tag:

<talkaction words="/buyitens" event="script" value="buyitens.lua"/>

 

Adicionando mais itens:

Para isso voce tera que botar mais uma linha nas tables. assim olha

Normal:

local a = {
[2472] = {price = 160000, countmax = 1},
[2157] = {price = 13000, countmax = 100},
[2466] = {price = 60000, countmax = 1},
[2494] = {price = 150000, countmax = 1}
}

 

Item adicionado:

local a = {

[2472] = {price = 160000, countmax = 1},

[2157] = {price = 13000, countmax = 100},

[2466] = {price = 60000, countmax = 1},

[2147] = {price = 600, countmax = 100},

[2494] = {price = 150000, countmax = 1}

}

 

Legendas:

Vermelho: O id do item que ira poder comprar entre colchetes "[]"

Rosa: O preço por cada unidade de item que ira comprar

Azul: A quantidade maxima que voce podera comprar (nao pode ultrapassar de 100)

 

AVISO IMPORTANTE!

Se voce botar quantidade maior que 1 em um item nao agrupavel, ou seja, nao da para juntar em 100, a pessoa ira tentar comprar 2 itens, ira pagar por 2 itens mais so recebera 1 item.

 

BETA VERSION!

Sujeito a mudanças...

Achou bugs? Duvidas? Sugestoes? Aceitamos aqui ou por PM.

NAO POSTE EM OUTRO FORUM, POIS SERA CONSIDERADO RIPPING

Editado Maio 28 por MatheusMkalo

matheus1000M
27 de maio de 2010 às 23:31

Ótimo,

 

adorei. Vou ver se adiciono no meu Ot.

++REP

joaohdJ
28 de maio de 2010 às 13:00

Isso ae mano. Tabelas encurtam muito o script. Hoje vamo ve se da pra fazer a versão final né ( se eu tiver tempo ).

 

 

 

 

 

 

flw

KydraiK
28 de maio de 2010 às 15:26

Você tinha me passado no msn, agora dei uma olhada no que poderia estar errado.

 

Precisa verificar se existe os parâmetros.

if param == "" or b[1] == "" or b[2] == "" then
doPlayerSendCancel(cid,"Command param required. Use /buyitens item name, quantity")
return TRUE
end

 

Aconselho a usar variáveis.

local item = getItemIdByName(b[1], false)
local qnt = tonumber(b[2])

 

Colocar um "false" (getItemIdByName(b[1], false)) pra não ficar mostrando o erro quando alguém digita um item que não existe.

 

Poderia usar um "else" caso o a[getItemIdByName(b[1])] não exista.

 

Impedir que o player compre caso não tenha cap ou slot também seria bom.

 

Uma sugestão seria criar um parâmetro pra exibir os items da lista.

Exemplo: /buyitens info

Iria aparecer algo como:

name price max

name price max

name price max

Editado Maio 28 por kydrai

OneshotO
28 de maio de 2010 às 20:07

Gostei do sistema, interessante.

Ajuda muito em servidores de jogo rápido, mas, na minha opinião, destrói o RPG do servidor.

 

Sobre a programação, bem limpa e bem desenvolvida.

Digno de um bom programador. :)

OapocalipseO
02 de junho de 2010 às 23:47

Perfeito! testei e funciona muito bem para items menores, que são sempre pedidos, so não gosto de por MPA esse tipo...

2 semanas depois...
digo327D
13 de junho de 2010 às 16:12

Gostei muito, vou ver se ponho no meu ot.

 

Esse script e bom para aqueles items tipo, shovel, pick, rope etc.

 

Podemos tar num sitio em que precisamos de um desses items e nao tem nenhum NPC que venda por perto.

 

Abraço ;D

1 ano depois...
daniko434D
27 de janeiro de 2012 às 23:08

cara se puder postar como comprar o item sem ser com dinheiro tipo com outro item posta ai vlw