WA

[Gesior Acc] Trade Offline

Por walefxavier, 16 de dez. de 2010 em Tutoriais de Websites

tibia
otserv
40
30.2k
walefxavierW
16 de dezembro de 2010 às 09:13

Vá em xammp/htdocs e crie um arquivo chamado auctionsystem.php dentro adicione isso:

 

 <?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>Instructions<b></TD></TR><TR BGCOLOR='.$config['site']['darkborder'].'><TD><center><h2>Comandos</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://dynamic-world.servegame.com">WSF</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="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 .= '';
}
   ?> 

 

 

 

Agora vá em index.php e add isso:

 

        case "auctionsystem";
               $topic = "Trade Offline";
               $subtopic = "auctionsystem";
               include("auctionsystem.php");
       break;

 

 

Em Htdocs/layout/tibiacom/layout.php add isto:

 

<a href='?subtopic=auctionsystem'>
 <div id='submenu_auctionsystem' class='Submenuitem' onMouseOver='MouseOverSubmenuItem(this)' onMouseOut='MouseOutSubmenuItem(this)'>
   <div class='LeftChain' style='background-image:url(layouts/tibiacom/images/general/chain.gif);'></div>
   <div id='ActiveSubmenuItemIcon_auctionsystem' class='ActiveSubmenuItemIcon' style='background-image:url(layouts/tibiacom/images/menu/icon-activesubmenu.gif);'></div>
   <div class='SubmenuitemLabel'><blink><font color=yellow>Trade Offline</font></blink></div>
   <div class='RightChain' style='background-image:url(layouts/tibiacom/images/general/chain.gif);'></div>
 </div>
</a>

 

 

 

E adicione isso no phpmyadmin (database do seu gesior)

 

CREATE TABLE IF NOT EXISTS `auction_system` (
 `id` int(11) NOT NULL auto_increment,
 `player` int(11) default NULL,
 `item_id` int(11) default NULL,
 `item_name` varchar(255) default NULL,
 `count` int(11) default NULL,
 `cost` int(11) default NULL,
 `date` int(11) default NULL,
 PRIMARY KEY  (`id`)
) ENGINE=MyISAM  DEFAULT CHARSET=latin1 AUTO_INCREMENT=4 ;

 

Agora basta acessar www.SEUSITE.com/?subtopic=auctionsystem

 

....

Editado Dezembro 16 por Walef Xavier

1 mês depois...
RajasR
02 de janeiro de 2011 às 18:51

ta faltando o script do ot tbm !!!

02 de janeiro de 2011 às 22:16

cara a Onde q Fica isso phpmyadmin??? eu nao achei ajuda ae

 

 

vlws

 

 

EDIT: JA ACHEI ERRO MEU !!!

Editado Janeiro 2 por TheDragon

2 semanas depois...
tavaxT
10 de janeiro de 2011 às 13:15

nngm sabe o script do ot?

3 semanas depois...
walefxavierW
26 de janeiro de 2011 às 23:33

Ta ae o script do ot:

 

Vá em Talkactions/scripts e crie um arquivo.lua chamado auctionsystem.lua e add:

 

  --[[
       Offline player to player item trader (Auction System)
               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

 

Em talkactions.xml add a tag:

 

<talkaction words="!offer" event="script" value="auctionsystem.lua"/>

Editado Janeiro 26 por Walef Xavier

w3ndelW
31 de janeiro de 2011 às 12:21

o meu deu um poblema , ele fica do otro lado

la em baixo de Current Pol

 

aalguem me ajuda

Natanael BeckmanN
06 de fevereiro de 2011 às 19:00

Pra script funcionar corretamente precisa disso:

 

ALTER TABLE `players` ADD `auction_balance` INT(15) NOT NULL

12 de fevereiro de 2011 às 20:10

@GM Bekman

onde poe essa linha q vc falo ae?

5374385
15 de fevereiro de 2011 às 21:54

queria saber um AUCTION HOUSE, sem precisar de site, como se fosse um NPC dentro do jogo ou por talkactions mesmo, se tiverem add msn :

actionserver@hotmail.com

obs: nao passo o meu pq o meu eh uma bagunça

baaNisHedB
16 de fevereiro de 2011 às 01:37

Voces sao fod* mesmo, to lendo e até agora nao entendi o que é pra fazer ...

Piabeta KunP
22 de fevereiro de 2011 às 00:38

nego eskece q pro novatos tem q soletrar!

por favor soletre para nois entendermos, eu creio q a ducida maior de todos e como adicionar as linhas no phpmyadmin, se der manda um passo a passo soletrado, pq falar pega ai e importa no php myadmi nao ajuda de nada!

walefxavierW
22 de fevereiro de 2011 às 12:38

xD

 

Acesse o seusite/phpmyadmin na barrinha do seu navegador.

Clique na sua database (a que vc criou quando colocou seu site online)

Depois Clique em SQL,vai estar escrito bem grande la em cima.

Vai aparecer um espaço em branco,vc poem o script que o Gm Beckman falo ae.

Depois so clicar em EXECUTAR...

 

 

____________________

Não sei esplicar muito bem,então quem não entendeu da uma olhada pelo forum ae,que vc acha rapidin...

1 mês depois...
claudiomirC
02 de março de 2011 às 20:38

vo testa depois.

1 mês depois...
Piabeta KunP
02 de abril de 2011 às 22:56

+rep proce manolo agora sim bem explicado, soletrado sahusahu, eu ja tinha aprendido antes mais msmo assim vai ajudar qm nao sabe!!!

 

Nice Job man!

2 semanas depois...
ultimarox7U
14 de abril de 2011 às 18:00

Cara, Te Amo!!!! Zuera, mais cara mto obrigado esse sistema é mto bom!!! :thumbsupsmiley:

+ :button_ok: