CA
sistema

Shopping Sytem Demo By Caotic

Por caotic, 09 de set. de 2012 em Mods, funções e outros

otserv
tibia
script
5.0 (2)
11
2.4k
caoticC
09 de setembro de 2012 às 13:44

~Shop Sytem Demo~

Ola galera do xtibia venho postar um sistema de shopping.

Ele ainda se encontra na versão inicial vai ser melhorado mais ja pode ser usado.

Resolvi postar a versão demo para demonstrar como o script tem potencial alem de que a demo poder se bem útil a você.

O script e um shop onde o player coloca um item no shopping e outro player compra seu item mesmo que o player vendedor esteja off.

 

Antes de tudo precisamos instalar o sistema.

Vai na sua dabase e execute tais comandos:

 

 

CREATE TABLE "shop" (
"item" INT NOT NULL,
"price" INT NOT NULL,
"players" INT NOT NULL
);

ALTER TABLE `players` ADD `shop` INT(15) NOT NULL DEFAULT 0;

 

 

Agora vá na pasta lib e crie um arquivo lua chamado shop e coloque este codigo:

 

function doPlayerAddItemInShop(cid, itemid, price)
db.executeQuery("INSERT INTO `shop` VALUES (".. itemid ..", ".. price ..", ".. getPlayerGUID(cid) ..")")
return true
end
function getItemPriceInShop(itemid)
local shop = db.getResult("SELECT * FROM `shop` WHERE `item` = ".. itemid ..";")
return shop:getDataInt("price")
end
function getItemPlayerInShop(itemid)
local shop = db.getResult("SELECT * FROM `shop` WHERE `item` = ".. itemid ..";")
return shop:getDataInt("players")
end
function getExistItemInShop(itemid)
local shop = db.getResult("SELECT * FROM `shop` WHERE `item` = ".. itemid ..";")
if shop:getID() ~= -1 then
return true
end
return nil
end
function doPlayerBuyItemInShop(cid, itemid)
doPlayerAddItem(cid, itemid)
doPlayerRemoveMoney(cid, getItemPriceInShop(itemid))
db.executeQuery("UPDATE `players` SET `shop` = "..getItemPriceInShop(itemid).." WHERE `id` = "..getItemPlayerInShop(itemid))
db.executeQuery("DELETE FROM `shop` WHERE `item` = ".. itemid ..";")
end

function getMoneyGainInShop(cid)
local money = db.getResult("SELECT `shop` FROM `players` WHERE `id` = "..getPlayerGUID(cid))
return money:getDataInt("shop")
end

function setMoneyGainInShop(cid, money)
db.executeQuery("UPDATE `players` SET `shop` = "..money.." WHERE `id` = "..getPlayerGUID(cid))
end

 

Agora vamos a pasta talkactions e vamos criar um arquivo lua chamado shop também e coloque este codigo:

 

function onSay(cid, words, param, channel)
if param == " " or param == "" or not param then
return doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Coloque o id do item")
end
local t = string.explode(param, ",")
if not t[1] then
return doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Coloque o id do item")
end
if not t[2] then
return doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Coloque o preço do item")
end
if(isNumeric(t[1])) then
return doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Coloque o nome do item")
end
if not getItemIdByName(t[1], false) then
return doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Este item "..t[2].." não existe")
end
local item = getItemIdByName(t[1])
local price = t[2]
if getExistItemInShop(item) then
return doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Este item ja esta sendo vendido no shop espere ele ser comprado")
end
if getPlayerItemCount(cid, item) < 1 then
return doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Você não tem "..t[1].."")
end
doPlayerRemoveItem(cid, item, 1)
doPlayerAddItemInShop(cid, item, price)
doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Você colocou no shopping o seu item "..t[1].."")
return true
end

 

Agora na mesma pasta talkactions vamos criar um arquivo lua chamado comprar e coloque este codigo:

 

 

function onSay(cid, words, param, channel)
if param == " " or param == "" or not param or isNumeric(param) then
return doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Coloque o nome do item")
end
if not getItemIdByName(param, false) then
return doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Este item "..t[2].." não existe")
end
local itemid = getItemIdByName(param)
if not getExistItemInShop(itemid) then
return doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Este item não existe no shopping")
end

if not doPlayerRemoveMoney(cid, getItemPriceInShop(itemid)) then
return doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Você não tem "..price.." para comprar "..itemid.." do shopping")
end

doPlayerBuyItemInShop(cid, itemid)
return true
end

 

Seguidamente na mesma pasta talkactions crie outro arquivo lua chamado find e coloque este codigo:

 

 

 

function onSay(cid, words, param, channel)
if param == " " or param == "" or not param or isNumeric(param) then
return doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Coloque o nome do item que você quer procurar no shopping")
end
if not getItemIdByName(param, false) then
return doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Este item "..param.." não existe se estiver afim de comprar confirme seu nome")
end
local itemid = getItemIdByName(param)
if not getExistItemInShop(itemid) then
return doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Este item não se encontra disponivel no shopping se estiver afim de comprar espere algum player colocar no shopping")
end
doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "O "..param.." encontrasse no shopping pelo preço de "..getItemPriceInShop(itemid).." money pelo player "..getPlayerNameByGUID(getItemPlayerInShop(itemid), false).."")
return true
end

 

Agora coloque esta tags em talkactions.xml:

 

 

 

<talkaction log="yes" words="/shop" access="1" event="script" value="shop.lua"/>

<talkaction log="yes" words="/compra" access="1" event="script" value="comprar.lua"/>

<talkaction log="yes" words="/find" access="1" event="script" value="find.lua"/>

 

 

 

 

 

 

Agora vamos a pasta creaturescripts/scripts e crie um arquivo lua chamado shop e coloque isto nele:

 

function onThink(cid, interval)
if getMoneyGainInShop(cid) > 0 then
doPlayerAddMoney(cid, getMoneyGainInShop(cid))
doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR, "Seu itens foi vendidos você recebeu "..getMoneyGainInShop(cid).." money")
setMoneyGainInShop(cid, 0)
return true
end
return true
end

 

 

Agora vamos em creaturescripts/scripts e em login.lua registre o evento colocando antes do ultimo return:

 

 

 

registerCreatureEvent(cid, "shop")

 

 

 

 

Agora vamos em creaturescripts/creaturescripts.xml e vamos colocar esta tag:

 

<event type="think" name="shop" event="script" value="shop.lua"/>

 

 

 

 

Comandos

 

 

/shop (Nome do item, Preço) --------Coloca os itens no shopping

/compra (Nome do item) ---- Compra o item do shop

/find (Nome do item) --- Procura um item do shopping

Editado Setembro 9 por caotic

StigalS
09 de setembro de 2012 às 14:09

Boa, Muito Uteo!

Pois Diminue Mt Usuarios No Trade e Fica Mais Pratico e Eficiente!

 

<3 Seu Lindo

caoticC
09 de setembro de 2012 às 14:41

Alem de que pode ser que os players vendedores podem estar off.

 

Mais a versão a seguir vem com muitos mais novidades(lista de itens,sem limite de itens no shop e etc..)

LolkskyL
09 de setembro de 2012 às 14:53

+ coloque para player poder usar o sistema

+ e também poder colocar mais de 1 item, ou seja, 2 fulanos colocarem o mesmo item, porém, cada um com o seu preço

+ e no comando /find, coloque para abrir um quadro (aquele de mensagem) com todos os itens a venda da procura, tipo, se o player procura por fire sword, todas fire swords à venda aparecem no quadro. Só que nisso, teria que implementar algo pra identificar um item do outro, pro comprador poder escolher qual vai comprar.

caoticC
09 de setembro de 2012 às 15:15

Exatamento o que vou fazer Lordsky.

 

Mais player pode usar sim o sistema.

 

Verifica as tags que vc pos

LolkskyL
09 de setembro de 2012 às 15:18

Exatamento o que vou fazer Lordsky.

 

Mais player pode usar sim o sistema.

 

Verifica as tags que vc pos

 

sim sim, eu tirei o acess=1

mas se player usar do jeito que está aí o script, só um player poderá colocar X item, se já tem uma fire sword por ex., outro player não poderá colocar a sua fire sword.

 

Mas, parabéns pelo script, se puder, faça isso que pedi =D, acho que ficará bem melhor =D

fico no aguardo \o

_________

Se não for pedir demais, quando você fizer essa alteração, teria como me avisar por PM? *-*

Editado Setembro 9 por Lolksky

caoticC
09 de setembro de 2012 às 15:43

Uma semana mais ou menos

 

A proxima versão tera descrição onde o player vai colocar a descrição do item.

Vai ter a lista de acordo com o preço do item.

 

E etc.....

Eu mando pm quando estiver pronto sim

VodkartV
09 de setembro de 2012 às 18:32

é mesmo caotic, ai o player não vai pode adicionar um item igual, e também deveria ter um limite de dias para que se não vendesse fosse removido da lista '-'

 

enfim a tabela primaria poderia ter sido:

 

CREATE TABLE shop (
	id				INTEGER NOT NULL,
	player_id   INTEGER NOT NULL,
	item   INTEGER NOT NULL,
	price	  INT NOT NULL DEFAULT 0,
	PRIMARY KEY ( id )
);

 

 

@topic

 

faltou tbm fazer uma lista para ver os items que estao na venda

Editado Setembro 9 por Vodkart

caoticC
09 de setembro de 2012 às 19:57

Como disse e uma versão demo ta em desenvolvimento

 

A lista vo fazer na versão completa porque um merd@ fazer esta lista.

 

Boa ideia limite de dias ficaria bem legal vou estar adicionando uma verificação dos dias que o item esta no shop pelo globalevents.

 

As ideias estão boas espero que tenha mais ideias.

StigalS
09 de setembro de 2012 às 20:03

Como disse e uma versão demo ta em desenvolvimento

 

A lista vo fazer na versão completa porque um merd@ fazer esta lista.

 

Boa ideia limite de dias ficaria bem legal vou estar adicionando uma verificação dos dias que o item esta no shop pelo globalevents.

 

As ideias estão boas espero que tenha mais ideias.

Seria Otimo Se Informace tudo exemplo:

 

Dia Adicionado - Usuario

ITEM - Preço - Quantidade

Quantos Dias Para Sair Da Loja

 

e uma dica pra um novo script:

um tipo de lojinha que abre em "x" a "x" de tempo e vende "x,x,x,x" de itens quest ou seila...

seria legal para um evento automatico "Lojinha Maluka" ou seila ;D

 

Abraço Caotic gay gay gay

VodkartV
09 de setembro de 2012 às 21:36

caso precise de ajuda só mandar um PM

 

será um prazer colossal em lhe ajudar