[ Talkaction ]Talkaction De Compra De Itens.

MatheusGlad

<~~> Scripter <~~>
avatar
Conde
Conde

INFOS

Grupo: CondeRegistrado: 09/09/09Posts: 528Char no Tibia: Emekalo Makalo

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

Yours Mkalo :)

matheus1000

avatar
Artesão
Artesão

INFOS

Grupo: ArtesãoRegistrado: 14/05/10Posts: 114

Ótimo,

 

adorei. Vou ver se adiciono no meu Ot.

++REP

att,

MasterMathw

 

 

Voltando aos poucos.

joaohd

Neox Boy
avatar
Visconde
Visconde

INFOS

Grupo: ViscondeRegistrado: 03/02/09Posts: 361Char no Tibia: Fearless Man

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

Kydrai

"Keep Your Mind Wide Open"
avatar
Visconde
Visconde

INFOS

Grupo: ViscondeRegistrado: 21/08/06Posts: 250

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

~ Kydrai
Programador / Scripter

 

sign.png

Oneshot

avatar
Marquês
Marquês

INFOS

Grupo: MarquêsRegistrado: 05/07/09Posts: 1347

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. :)

Oapocalipse

avatar
Campones
Campones

INFOS

Grupo: CamponesRegistrado: 29/04/07Posts: 57Char no Tibia: Careta Feia

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

digo327

~~Gammy Fan~~
avatar
Campones
Campones

INFOS

Grupo: CamponesRegistrado: 03/05/10Posts: 19Char no Tibia: Lord Tyz

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

Es fan do Gammy?? Entao poe esta barra na tua assinatura xD

 

~~Hail Gammy Bear~~

 

gammy.png

Ja ouviste o Gammy hj?? Nao?? Porque??

daniko434

avatar
Campones
Campones

INFOS

Grupo: CamponesRegistrado: 26/01/12Posts: 1Char no Tibia: Master Daniko

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