Ir para conteúdo

Featured Replies

Postado
  • Este é um post popular.
  Citar
Nome: Auction System

Versao Testada: 0.3.4pl2, 0.3.5pl1 e 0.3.6pl1 (Nao Custa nada tentar em otras)

Creditos: vDk (Otland)

Boa Noite Galera, Trago a voces Hoje o sistema Auction System (Vender items mesmo estando offline), Espero que Gostem.

Informaçoes deste Script:

*Visualizaçao de Items na Pagina do Gesior.

*Outros Jogadores podem comprar usando o AuctionID.

*Lembrese de Bloquear todos os Items com tempo de Duraçao.

Changelog:

v1.0 - Primeiro Relase

v1.1 - Corrigido falhas de memória, acrescentou levelRequiredToAdd

v1.1a - Fixed bug crítico com maxOffersPerPlayer verificação

V1.1B - Corrigido o erro com números negativos

v1.2 - Novo comando "retirar", correções para 0.3.6pl1

v1.2a - Fixed bug clone itens

Fotos:

14wmrl.png

Database Querys:

Va Na sua database e depois clique em SQL, e Execute essa Query:

ALTER TABLE `players` ADD `auction_balance` INT( 11 ) NOT NULL DEFAULT '0';
e Depois essa:

CREATE TABLE `auction_system` (

  `id` int(11) NOT NULL auto_increment,

  `player` int(11),

  `item_id` int(11),

  `item_name` varchar(255),

  `count` int(11),

  `cost` int(11),

  `date` int(11),

  PRIMARY KEY  (`id`)

) ENGINE=MyISAM  DEFAULT CHARSET=latin1 AUTO_INCREMENT=1 ;

e Depois va ate a pasta onde fica seu website e crie a seguinte pagina para o Gesior ACC:

<?PHP

$auctions = $SQL->query('SELECT `auction_system`.`player`, `auction_system`.`id`, `auction_system`.`item_name`, `auction_system`.`item_id`, `auction_system`.`count`, `auction_system`.`cost`, `auction_system`.`date`, `players`.`name` FROM `auction_system`, `players` WHERE `players`.`id` = `auction_system`.`player` ORDER BY `auction_system`.`id` DESC')->fetchAll();

$players = 0;


	$main_content .= '<TABLE BORDER=0 CELLSPACING=1 CELLPADDING=4 WIDTH=100%><TR BGCOLOR="'.$config['site']['vdarkborder'].'"><TD CLASS=white><b>Instruction<b></TD></TR><TR BGCOLOR='.$config['site']['darkborder'].'><TD><center><h2>Commands</h2><b>!offer add, itemName, itemPrice, itemCount</b><br /><small>example: !offer add, plate armor, 500, 1</small><br /><br /><B>!offer buy, AuctionID</b><br /><small>example: !offer buy, 1943</small><br /><br /><b>!offer remove, AuctionID</b><br /><small>example: !offer remove, 1943</small><br /><br /><b>!offer withdraw</b><br /><small>Use this command to get money for sold items.</small></center></TR></TD></TABLE><br />';

	if(empty($auctions))

	{

    	$main_content .= '<TABLE BORDER=0 CELLSPACING=1 CELLPADDING=4 WIDTH=100%><TR BGCOLOR="'.$config['site']['vdarkborder'].'"><TD CLASS=white><b>Auctions</b></td></TR><TR BGCOLOR='.$config['site']['darkborder'].'><TD>Currently is no one active Auction.</TD></TR></TABLE>';

    	$main_content .= '<br /><p align="right"><small>System created by <a href="http://otland.net/members/vDk/">vDk</a>.</small></p>';

	}

	else

	{

	foreach($auctions as $auction) {

    	$players++;

        	if(is_int($players / 2))

            	$bgcolor = $config['site']['lightborder'];

        	else

            	$bgcolor = $config['site']['darkborder'];

    	$cost = round($auction['cost']/1000, 2);

    	$content .= '<TR BGCOLOR='.$bgcolor.'><TD><center>'.$auction['id'].'</center></TD><TD><center><img src="http://otland.net/images/items/'.$auction['item_id'].'.gif"/></center></TD><TD><center>'.$auction['item_name'].'</center></TD><TD><center><a href="?subtopic=characters&name='.urlencode($auction['name']).'">'.$auction['name'].'</a></center></TD><TD><center>'.$auction['count'].'</center></TD><TD><center>'.$cost.'k<br /><small>'.$auction['cost'].'gp</small></center></TD><TD><center>!offer buy, '.$auction['id'].'</center></TR>';

	}


	$main_content .= '<TABLE BORDER=0 CELLSPACING=1 CELLPADDING=4 WIDTH=100%><TR BGCOLOR="'.$config['site']['vdarkborder'].'"><TD CLASS=white><b><center>ID</center></b></TD><TD class="white"><b><center>#</center></b></TD><TD class="white"><b><center>Item Name</center></b></TD><TD class="white"><b><center>Player</center></b></TD><TD class="white"><b><center>Count</center></b></TD><TD class="white"><b><center>Cost</center></b></td><TD class="white"><b><center>Buy</center></b></td></TR>'.$content.'</TABLE>';

	$main_content .= '<br /><p align="right"><small>System created by <a href="http://otland.net/members/vDk/">vDk</a>.</small></p>';

}

	?>

Agora va ate pasta do seu ot/data/talkactions/talkactions.xml e abra: Adicione a seguinte tinha:
<talkaction words="!offer" event="script" value="auctionsystem.lua"/>
Agora crie um arquivo .lua chamado auctionsystem.lua e adicione isso dentro, depois salve e largue dentro do data/talkactions/scripts:

--[[

    	Offline player to player item trader (Auction System) by vDk

            	Script version: 1.2a [ -- FIXED CLONE ITEMS BUG -- ]

]]--

local config = {

    	levelRequiredToAdd = 20,

    	maxOffersPerPlayer = 5,

    	SendOffersOnlyInPZ = true,

    	blocked_items = {2165, 2152, 2148, 2160, 2166, 2167, 2168, 2169, 2202, 2203, 2204, 2205, 2206, 2207, 2208, 2209, 2210, 2211, 2212, 2213, 2214, 2215, 2343, 2433, 2640, 6132, 6300, 6301, 9932, 9933}

    	}

function onSay(cid, words, param, channel)

    	if(param == '') then

            	doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Command requires param.")

            	return true

    	end


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

    	if(t[1] == "add") then

            	if((not t[2]) or (not t[3]) or (not t[4])) then

                    	doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Command requires param.")

                    	return true

            	end


            	if(not tonumber(t[3]) or (not tonumber(t[4]))) then

                    	doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "You don't set valid price or items count.")

                    	return true

            	end


            	if(string.len(t[3]) > 7 or (string.len(t[4]) > 3)) then

                    	doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "This price or item count is too high.")

                    	return true

            	end


            	local item = getItemIdByName(t[2], false)

            	if(not item) then

                    	doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Item wich such name does not exists.")

                    	return true

            	end


            	if(getPlayerLevel(cid) < config.levelRequiredToAdd) then

                    	doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "You don't have required (" .. config.levelRequiredToAdd .. ") level.")

                    	return true

            	end


            	if(isInArray(config.blocked_items, item)) then

                    	doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "This item is blocked.")

                    	return true

            	end


            	if(getPlayerItemCount(cid, item) < (tonumber(t[4]))) then

                    	doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Sorry, you don't have this item(s).")

                    	return true

            	end


            	local check = db.getResult("SELECT `id` FROM `auction_system` WHERE `player` = " .. getPlayerGUID(cid) .. ";")

            	if(check:getID() == -1) then

            	elseif(check:getRows(true) >= config.maxOffersPerPlayer) then

                    	doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Sorry you can't add more offers (max. " .. config.maxOffersPerPlayer .. ")")

                    	return true

            	end


            	if(config.SendOffersOnlyInPZ) then  

                    	if(not getTilePzInfo(getPlayerPosition(cid))) then

                            	doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "You must be in PZ area when you add offert to database.")

                            	return true

                    	end

            	end


            	if(tonumber(t[4]) < 1 or (tonumber(t[3]) < 1)) then

                    	doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "You have to type a number higher than 0.")

                    	return true

            	end


            	local itemcount, costgp = math.floor(t[4]), math.floor(t[3])

            	doPlayerRemoveItem(cid, item, itemcount)

            	db.executeQuery("INSERT INTO `auction_system` (`player`, `item_name`, `item_id`, `count`, `cost`, `date`) VALUES (" .. getPlayerGUID(cid) .. ", \"" .. t[2] .. "\", " .. getItemIdByName(t[2]) .. ", " .. itemcount .. ", " .. costgp ..", " .. os.time() .. ")")

            	doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR, "You successfully add " .. itemcount .." " .. t[2] .." for " .. costgp .. " gps to offerts database.")

    	end


    	if(t[1] == "buy") then

            	if(not tonumber(t[2])) then

                    	doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Wrong ID.")

                    	return true

            	end


            	local buy = db.getResult("SELECT * FROM `auction_system` WHERE `id` = " .. (tonumber(t[2])) .. ";")

            	if(buy:getID() ~= -1) then

                    	if(getPlayerMoney(cid) < buy:getDataInt("cost")) then

                            	doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "You don't have enoguh GP.")

                            	buy:free()

                            	return true

                    	end


                    	if(getPlayerName(cid) == getPlayerNameByGUID(buy:getDataInt("player"))) then

                            	doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Sorry, you can't buy your own items.")

                            	buy:free()

                            	return true

                    	end


                    	if(getPlayerFreeCap(cid) < getItemWeightById(buy:getDataInt("item_id"), buy:getDataInt("count")))then

                            	doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "You try to buy a " .. buy:getDataString("item_name") .. ". It weight " .. getItemWeightById(buy:getDataInt("item_id"), buy:getDataInt("count")) .. " cap oz. and you have only " .. getPlayerFreeCap(cid) .. " oz. free capacity. Put some items to depot and try again.")

                            	buy:free()

                            	return true

                    	end


                    	if(isItemStackable((buy:getDataString("item_id")))) then

                            	doPlayerAddItem(cid, buy:getDataString("item_id"), buy:getDataInt("count"))

                    	else

                            	for i = 1, buy:getDataInt("count") do

                                    	doPlayerAddItem(cid, buy:getDataString("item_id"), 1)

                            	end

                    	end


                    	doPlayerRemoveMoney(cid, buy:getDataInt("cost"))

                    	db.executeQuery("DELETE FROM `auction_system` WHERE `id` = " .. t[2] .. ";")

                    	doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR, "You bought " .. buy:getDataInt("count") .. " ".. buy:getDataString("item_name") .. " for " .. buy:getDataInt("cost") .. " gps!")

                    	db.executeQuery("UPDATE `players` SET `auction_balance` = `auction_balance` + " .. buy:getDataInt("cost") .. " WHERE `id` = " .. buy:getDataInt("player") .. ";")

                    	buy:free()

            	else

                    	doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Wrong ID.")

            	end

    	end


    	if(t[1] == "remove") then

            	if((not tonumber(t[2]))) then

                    	doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Wrong ID.")

                    	return true

            	end


                            	if(config.SendOffersOnlyInPZ) then  

                                    	if(not getTilePzInfo(getPlayerPosition(cid))) then

                                            	doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "You must be in PZ area when you remove offerts from database.")

                                            	return true

                                    	end

            	end


            	local delete = db.getResult("SELECT * FROM `auction_system` WHERE `id` = " .. (tonumber(t[2])) .. ";")      

            	if(delete:getID() ~= -1) then

                    	if(getPlayerGUID(cid) == delete:getDataInt("player")) then

                            	db.executeQuery("DELETE FROM `auction_system` WHERE `id` = " .. t[2] .. ";")

                            	if(isItemStackable(delete:getDataString("item_id"))) then

                                    	doPlayerAddItem(cid, delete:getDataString("item_id"), delete:getDataInt("count"))

                            	else

                                    	for i = 1, delete:getDataInt("count") do

                                            	doPlayerAddItem(cid, delete:getDataString("item_id"), 1)

                                    	end

                            	end


                            	doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR, "Your offert has been deleted from offerts database.")

                    	else

                            	doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "This is not your offert!")

                    	end

            	delete:free()

            	else

                    	doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Wrong ID.")

            	end

    	end


    	if(t[1] == "withdraw") then

            	local balance = db.getResult("SELECT `auction_balance` FROM `players` WHERE `id` = " .. getPlayerGUID(cid) .. ";")

            	if(balance:getDataInt("auction_balance") < 1) then

                    	doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR, "You don't have money on your auction balance.")

                    	balance:free()

                    	return true

            	end


            	doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR, "You got " .. balance:getDataInt("auction_balance") .. " gps from auction system!")

            	doPlayerAddMoney(cid, balance:getDataInt("auction_balance"))

            	db.executeQuery("UPDATE `players` SET `auction_balance` = '0' WHERE `id` = " .. getPlayerGUID(cid) .. ";")

            	balance:free()

    	end

    	return true

end

Bem e isso, Comentem!

Editado por Dudu Ruller (veja o histórico de edições)

  • Respostas 8
  • Visualizações 5k
  • Created
  • Última resposta

Top Posters In This Topic

Most Popular Posts

  • @Jota Cintra @thigriku @Dudu Ruller Pessoal, alguém pode tirar minha dúvida estou com o mesmo problema que vcs.... Implantei esse sistema no meu server, o comando está funcionando normalment

Postado

Cara, se foi vc que fez o action parabens, mais se nao fez poste os devidos creditos,

#Topico

Excelente action é muito util para OTserver serios, quando tem bastante players,

Mais é ruim que o pessoal as vezes pede absurdos pelos itens X:

Participe da conversa

Você pode postar agora e se cadastrar mais tarde. Se você tem uma conta, faça o login para postar com sua conta.

Visitante
Responder

Quem Está Navegando 0

  • Nenhum usuário registrado visualizando esta página.

Estatísticas dos Fóruns

  • Tópicos 96.9k
  • Posts 519.6k

Informação Importante

Confirmação de Termo