• There is NO official Otland's Discord server and NO official Otland's server list. The Otland's Staff does not manage any Discord server or server list. Moderators or administrator of any Discord server or server lists have NO connection to the Otland's Staff. Do not get scammed!

GESIOR 2012 - ideas, bug reports

i dont blame gesior... i love gesior too
really? what version is safe?

Some ots use gesior, and they havent problems with hackers, like NoxiousOT - Latest News - Open Tibia - Free multiplayer online role playing game, Masiyah - Latest News etc

i use uniform+gesior, antiddos guardian and ip bloker (host: i7 3,4ghz, 16gb ram) then what is the problem? gesior version?

22:11 Black Hack [20]: check your website now, down again
kind regards

Ofc my friend, tibia.com, cipsoft is using gesior Acc. Let's give him an aplause please!
 
Geolocation Data and Items Images moved to:
https://github.com/gesior/Gesior2012/downloads
because there is no option to download .zip files from github. Only instructions left in old folders with these files.

Added images of items from 8.6 tibia client.

Tommorow I will move folder 'Geolocation Data' and 'Items Images' to new folder 'Additional Scripts' and add there .php scripts to unpack Tibia.dat, Tibia.spr and items.otb [8.6 and 9.6] to .gif
 
You do have the option to download as a .zip file. :)

EDIT: Just realised that you may have meant subfolders, and if that is indeed the case. You may be correct, my bad. I'll blame it on the time, it is 7 AM after all, hehe.

tEGg.png
 
Ye, can't download subfolder + can't download just 1 file. When there was 18MB .zip file there was no way to download (view option also blocked, too big file) it from www. You had to download all files together in .zip :(
 
Does old Gesior scripts will be compatible with this new one?
 
Updated. Now on github is version '1.0 BETA 2'.
Changes:
Added install.txt file - now it requires installation after unpack.
Added serverinfo.php page.
Little changes in install.php, shopsystem.php and accountmanagement.php.
Added tutorial how to configure account maker [config.php file].
Updated files available here:
https://github.com/gesior/Gesior2012/
 
I suggest you read the articles tags and branches in git. Each branch should be a separate version of the tfs, and each tag should be new version of your AAC.
 
@up
I know, but I had problems with branches on github, so I decied to put it as it's now.

@topic
Updated acc. maker on github:

Last fixes before release. Version 1.0 BETA 3
- added cache support for guild logos (304 http code in header), reduce bandwitdh use
- changed $initialized variable to constant 'INITIALIZED' in all pages and classes
- added 'ONLY_PAGE' constant (true/false) to make it possible to execute 'page' code without login/connection to SQL server and not counted by 'visits counter'
- added scripts to generate item images
- small changes in Guild class

https://github.com/gesior/Gesior2012

There is also available description of config.php file:
http://otland.net/f479/configuration-gesior2012-config-php-file-description-172012/
 
'Sell characters' for GESIOR 2012:
http://paste.ots.me/3637/text

Changed colors to tibia.com layout colors, fixed vocations and EQ showing (to make it work with 2012 version), changed OTS_Player and OTS_Account classes and it's use. Removed 'query' (commented) that add namelock, you must edit it for your distributions and uncomment to make it work.

It will not be in Gesior 2012, because I had report about problems on big ots (400-500 online) with that script [random crashes of ots after installation of that script].
I don't add scripts about which I'm not 100% sure that they are safe, but I will use that script on my OTS.
 
So, I dunno if this has been posted yet or not. But do you have any plans of ditching the current $main_content system?
 
The link is working for me though. :p
 
So, I dunno if this has been posted yet or not. But do you have any plans of ditching the current $main_content system?
system/load.page.php
PHP:
<?php
if(!defined('INITIALIZED'))
	exit;

ob_start();
$main_content = '';
include("pages/" . $subtopic . ".php");
$main_content .= ob_get_clean();
If anyone make script for new account maker, he can use 'echo' in place of '$main_content .=', but in layouts you must still put in right place 'echo $main_content;'. I want keep it compatible with old scripts/layouts.

'sellchar.php' code for Gesior 2012:
PHP:
<?PHP 
################################################# 
### Scripted by PhoOwned                      ### 
### All rights reserverd                      ### 
### Do not use/distribute without permission! ### 
### Contact: [email protected]                   ### 
###          [email protected]               ### 
################################################# 
/* 
In MySQL: 
CREATE TABLE `characters_auctions` ( 
`id` INT NOT NULL AUTO_INCREMENT PRIMARY KEY , 
`state` TINYINT( 1 ) NOT NULL DEFAULT '0' , 
`finish_time` INT NOT NULL , 
`char_id` INT NOT NULL , 
`buy_now` INT NOT NULL , 
`bid` INT NOT NULL , 
`bidder` INT NOT NULL , 
INDEX ( `finish_time` )); 
*/ 
$add_character_page_access = 3; 
$auctions_default_time = 3 * 24;// auction item in hours 
// styles and scripts 
$main_content .= '  
    <style type="text/css"> 
    .tableFonts {color: #FFFFFF}
    .tableRow0 {background-color: #F1E0C6;text-align: left;vertical-align: middle;font-size: 12pt}
    .tableRow1 {background-color: #D4C0A1;text-align: left;vertical-align: middle;font-size: 12pt}
    .tableRowSmall0 {background-color: #F1E0C6;text-align: left;vertical-align: middle;font-size: 10pt}
    .tableRowSmall1 {background-color: #D4C0A1;text-align: left;vertical-align: middle;font-size: 10pt}
    .linkButton {font-size: 14pt;padding: 6px;text-shadow: 2mm 2mm 2mm #342423;letter-spacing: 2mm} 
    .linkButton:hover {font-size: 16pt;} 
    .bigText {font-size: 24pt} 
    .normalText {font-size: 12pt;} 
    .showItemSquare {height: 49px;width: 39px;padding: 7px;} 
    .showItemImage {height: 40px;width: 40px;padding: 0px;} 
    input {text-align: right;} 
     
    .er{display:block} 
    .er *{ 
      display:block; 
      height:1px; 
      overflow:hidden; 
      font-size:.01em; 
      background:#b20000} 
    .er1{ 
      margin-left:3px; 
      margin-right:3px; 
      padding-left:1px; 
      padding-right:1px; 
      border-left:1px solid #870000; 
      border-right:1px solid #870000; 
      background:#9f0000} 
    .er2{ 
      margin-left:1px; 
      margin-right:1px; 
      padding-right:1px; 
      padding-left:1px; 
      border-left:1px solid #6f0000; 
      border-right:1px solid #6f0000; 
      background:#a30000} 
    .er3{ 
      margin-left:1px; 
      margin-right:1px; 
      border-left:1px solid #a30000; 
      border-right:1px solid #a30000;} 
    .er4{ 
      border-left:1px solid #870000; 
      border-right:1px solid #870000} 
    .er5{ 
      border-left:1px solid #9f0000; 
      border-right:1px solid #9f0000} 
    .erfg{ 
      background:#b20000;font-size: 16pt;text-align: center} 
    </style> 
    <script type="text/javascript"> 
        function checkLogin(account_id) { 
        if(account_id == 0) 
        { 
        alert ("You are not logged in."); 
        return false 
        } 
        return true 
        } 
         
        function checkBid(account_id, bidder_id, user_points, bid_now) { 
        if(!checkLogin(account_id)) 
        return false 
        var bid = window.document.getElementById("bid").value; 
        if(bid <= bid_now) 
        { 
            alert ("Current highest bid is " + bid_now + ". You can not bid " + bid + "."); 
            return false 
        } 
        if(bid > user_points) 
        { 
            alert ("You can not bid " + bid + ". You have only " + user_points + "."); 
            return false 
        } 
        if(account_id == bidder_id) 
        { 
        var answer = confirm ("You have highest bid in this auction. Are you sure you want make higher bid?") 
        if (answer) 
        return true 
        else 
        return false 
        } 
        return true 
        } 
         
        function checkBuyNow(account_id, user_points, buy_now) { 
        if(!checkLogin(account_id)) 
        return false 
        if(user_points < buy_now) 
        { 
            alert ("This character cost " + buy_now + ". You have only " + user_points + "."); 
            return false 
        } 
        var answer = confirm ("This character cost " + buy_now + ". Do you want to buy it?") 
        if (answer) 
        return true 
        else 
        return false 
        } 
         
        var innerHTML; 
        function countdown(Time_Left, target_id) 
        { 
        if(Time_Left <= 0) 
        { 
            document.getElementById(target_id).innerHTML = \'Finished\'; 
            return 0; 
        } 
        setTimeout(countdown, 1000, Time_Left-1, target_id); 
        //More datailed. 
        days = Math.floor(Time_Left / (60 * 60 * 24)); 
        Time_Left %= (60 * 60 * 24); 
        hours = Math.floor(Time_Left / (60 * 60)); 
        Time_Left %= (60 * 60); 
        minutes = Math.floor(Time_Left / 60); 
        Time_Left %= 60; 
        seconds = Time_Left; 

        dps = \'s\'; hps = \'s\'; mps = \'s\'; sps = \'s\'; 
        //ps is short for plural suffix. 
        if(days == 1) dps =\'\'; 
        if(hours == 1) hps =\'\'; 
        if(minutes == 1) mps =\'\'; 
        if(seconds == 1) sps =\'\'; 

        innerHTML = days + \' day\' + dps + \' \'; 
        innerHTML += hours + \' hour\' + hps + \' \'; 
        innerHTML += minutes + \' minute\' + mps + \' and \'; 
        innerHTML += seconds + \' second\' + sps; 

        document.getElementById(target_id).innerHTML = innerHTML; 
        } 
    </script>'; 
     
$errorFormStart = '<div><b class="er"><b class="er1"><b></b></b><b class="er2"><b></b></b><b class="er3"></b><b class="er4"></b><b class="er5"></b></b><div class="erfg">'; 
$errorFormEnd = '</div><b class="er"><b class="er5"></b><b class="er4"></b><b class="er3"></b><b class="er2"><b></b></b><b class="er1"><b></b></b></b></div>'; 
function time_left($integer) 
 {  
     if($integer <= 0) return "Finished"; 
     $seconds=$integer; 
     if ($seconds/60 >=1)  
     { 
         $minutes=floor($seconds/60); 
         if ($minutes/60 >= 1)  
         { # Hours  
             $hours=floor($minutes/60); 
             if ($hours/24 >= 1)  
             { #days  
                     $days=floor($hours/24); 
                     if ($days/7 >=1)  
                     { #weeks  
                         $weeks=floor($days/7); 
                         if ($weeks>=2) $return="$weeks weeks"; 
                         else $return="$weeks week"; 
                     } #end of weeks  
                     $days=$days-(floor($days/7))*7; 
                     if ($weeks>=1 && $days >=1) $return="$return, "; 
                     if ($days >=2) $return="$return $days d"; 
                     if ($days ==1) $return="$return $days d"; 
             } #end of days 
             $hours=$hours-(floor($hours/24))*24; 
             if ($days>=1 && $hours >=1) $return="$return, "; 
             if ($hours >=2 || $hours ==0) $return="$return $hours h"; 
             if ($hours ==1) $return="$return $hours h"; 
         } #end of Hours 
         $minutes=$minutes-(floor($minutes/60))*60; 
         if ($hours>=1 && $minutes >=1) $return="$return, "; 
         if ($minutes >=2 || $minutes ==0) $return="$return $minutes m"; 
         if ($minutes ==1) $return="$return $minutes m"; 
     } #end of minutes  
     $seconds=$integer-(floor($integer/60))*60; 
     if ($minutes>=1 && $seconds >=1) $return="$return, "; 
     if ($seconds >=2 || $seconds ==0) $return="$return $seconds sec"; 
     if ($seconds ==1) $return="$return $seconds sec"; 
     $return="$return."; 
     return $return; 
 } 
############ FINISH AUCTIONS AND ADD CHARACTERS ############ 
foreach($SQL->query('SELECT * FROM `characters_auctions` WHERE `state` = 0 AND `finish_time` <= ' . time())->fetchAll() as $finishedAuction) 
{ 
    if($finishedAuction['bidder'] > 0) 
    { 
        // if server show error in one of lines below it mean 
        // someone delete character or account that won auction 
        // admin must check it manualy (give points back to account that won auction?) 
        $finishedAuctionBidder = new Account($finishedAuction['bidder']);
        $finishedAuctionChar = new Player($finishedAuction['char_id']);
        $finishedAuctionChar->setAccount($finishedAuctionBidder); 
        $finishedAuctionChar->setGroup(1); 
        $finishedAuctionChar->save(); 
        $SQL->query('UPDATE `characters_auctions` SET `state` = 2 WHERE `id` = ' . $finishedAuction['id']); 
        //$SQL->query('INSERT INTO `bans` (`id` , `type` , `value` ,`param` ,`active` ,`expires` ,`added` ,`admin_id` ,`comment` ,`reason` ,`action` ,`statement`) VALUES (NULL , 2, ' .$auctionChar->getId() . ', 2, 1, -1, ' . time() . ', 1, \'BUY CHAR\', 0, 1, \'\');'); 
    } 
    else 
        $SQL->query('UPDATE `characters_auctions` SET `state` = 1 WHERE `id` = ' . $finishedAuction['id']); 
} 
############ VISIBLE THINGS ############ 
if($logged && $account_logged->getPageAccess() >= $add_character_page_access) 
    $main_content .= '<div class="normalText"><a href="?subtopic=sellchar&action=addauction">ADMIN PANEL: >ADD AUCTION<</a></div>'; 
if($action == "addauction") ############ ADD AUCTION / VIEW CHARACTERS LIST ############ 
{ 
    if($logged && $account_logged->getPageAccess() >= $add_character_page_access) 
    {
        $daysAgo = (int) $_REQUEST['days_ago']; 
        $nameContains = $_REQUEST['name_contains']; 
        $minLevel = (int) $_REQUEST['min_level']; 
        $maxLastLogout = time() - $daysAgo * 24 * 3600; 
        $orderBy = ($_REQUEST['order_by'] == 'lastlogout') ? $_REQUEST['order_by'] : 'level'; 
        $orderType = ($_REQUEST['order_type'] == 'DESC') ? $_REQUEST['order_type'] : 'ASC'; 
        $resultsLimit = (isset($_REQUEST['results_limit'])) ? (int) $_REQUEST['results_limit'] : 30; 
        if(isset($_REQUEST['id'])) 
        { 
            $id = (int) $_REQUEST['id']; 
            $priceAuction = (int) $_REQUEST['price_auction']; 
            $priceBuyNow = (int) $_REQUEST['price_buy_now']; 
            $auctionTime = (int) $_REQUEST['auction_time'] * 3600; 
            $SQL->query('INSERT INTO `characters_auctions` (`id` ,`finish_time` ,`char_id` ,`buy_now` ,`bid` ,`bidder`) VALUES (NULL , ' . (time() + $auctionTime) . ', ' . $id . ', ' . $priceBuyNow . ', ' . $priceAuction . ', 0);'); 
            $main_content .= $errorFormStart . 'Character with ID ' . $id . ' auction added.' . $errorFormEnd; 
        } 
        $charsAlreadyOnAuctions = array(0); 
        foreach($SQL->query('SELECT `char_id` FROM `characters_auctions` WHERE `state` = 0') as $charsAlreadyOnAuction) 
            $charsAlreadyOnAuctions[] = $charsAlreadyOnAuction['char_id']; 
        $main_content .= '<div class="bigText" style="text-align: center">Add Auction</div>'; 
        $main_content .= '<div class="normalText">If you leave Buy Now field empty or set it to 0 it will be not possible to buy character by option \'Buy Now\'.</div>'; 
        $main_content .= '<table class="tableFonts" style="margin-left: auto;margin-right: auto;">'; 
        $main_content .= '<tr style="background-color:'.$config['site']['vdarkborder'].'"><td colspan="8">CHARACTERS LIST</td></tr>'; 
        $main_content .= '<form action="?" method="get"><input type="hidden" name="subtopic" value="sellchar" /><input type="hidden" name="action" value="addauction" />'; 
        $main_content .= '<tr style="background-color:'.$config['site']['vdarkborder'].'" style="font-size: 10pt;"><td colspan="2">ORDER BY</td><td><select name="order_by"><option' . (($orderBy == 'lastlogout') ? ' selected="selected"' : '') . '>lastlogout</option><option' . (($orderBy == 'level') ? ' selected="selected"' : '') . '>level</option></select></td><td><select name="order_type"><option' . (($orderType == 'ASC') ? ' selected="selected"' : '') . '>ASC</option><option' . (($orderType == 'DESC') ? ' selected="selected"' : '') . '>DESC</option></select></td><td colspan="4"></td></tr>'; 
        $main_content .= '<tr style="background-color:'.$config['site']['vdarkborder'].'" style="font-size: 10pt;"><td colspan="3">Nick contains:<br /><input type="text" name="name_contains" value="' . htmlspecialchars($nameContains) .'" size="30" /><td colspan="2">Min. <input type="text" name="min_level" value="' . $minLevel .'" size="4" /> level</td><td>Min. <input type="text" name="days_ago" value="' . $daysAgo .'" size="2" /> days</td><td>Results<br /><input type="text" name="results_limit" value="' . $resultsLimit .'" size="3" /></td><td><input type="submit" value="Search"/></td></tr>'; 
        $main_content .= '</form>'; 
        ############ SEARCH FORM ############ 
        $main_content .= '<tr style="background-color:'.$config['site']['vdarkborder'].'" style="font-size: 14pt;"><td>ID</td><td>Nick</td><td>Level & Vocation</td><td>Offline</td><td>Auction time</td><td>Auction min. offer</td><td>Buy Now</td><td>Add</td></tr>'; 
        foreach($SQL->query('SELECT * FROM `players` WHERE `id` NOT IN (' . implode(",", $charsAlreadyOnAuctions) . ') AND `lastlogout` > 0 AND `level` >= ' . $SQL->quote($minLevel) . ' AND `lastlogout` <= ' . $SQL->quote($maxLastLogout) . ' AND `name` LIKE ' . $SQL->quote('%'.$nameContains.'%') . ' ORDER BY `' . $orderBy . '` ' . $orderType . ', `name` ASC LIMIT ' . $resultsLimit .';') as $player)
		{
            $main_content .= '<form action="?subtopic=sellchar&action=addauction&order_by=' . $orderBy .'&order_type=' . $orderType . '&name_contains=' . urlencode($nameContains) . '&min_level=' . $minLevel . '&days_ago=' . $daysAgo . '&results_limit=' . $resultsLimit . '" method="post"><input type="hidden" name="id" value="' . $player['id'] . '" /><tr class="tableRow' . ($row++ % 2) . '"><td>' . $player['id'] . '</td><td>' . $player['name'] . '</td><td>' . $player['level'] . ' ' . htmlspecialchars(Website::getVocationName($player['vocation'], $player['promotion'])) . '</td><td style="float: right;">' . (floor((time() - $player['lastlogin']) / 86400)) . ' days</td><td><input type="text" name="auction_time" value="' . $auctions_default_time . '" size="3" /> hours</td><td><input type="text" name="price_auction" value="" size="5" /> pp</td><td><input type="text" name="price_buy_now" value="" size="5" /> pp</td><td><input type="submit" value="Add Auction" /></td></tr></form>'; 
		}
        $main_content .= '</table>'; 
    } 
    else 
        $main_content .= $errorFormStart . 'ERROR! You do not have access to this page.' . $errorFormEnd; 
} 
elseif($action == "show") ############ SHOW CHARACTER INFO ############ 
{ 
    $auctionInfo = $SQL->query('SELECT * FROM `characters_auctions` WHERE `id` = ' . (int) $_REQUEST['id'])->fetch(); 
    $main_content .= '<div class="bigText" style="text-align: center">Auction Info</div>'; 
    if(isset($auctionInfo['id'])) 
    { 
        $auctionChar = new Player($auctionInfo['char_id']);
        if($auctionChar->isLoaded()) 
        { 
            if($logged && $account_logged->getPageAccess() >= $add_character_page_access) 
                $main_content .= '<div class="normalText"><a href="?subtopic=sellchar&delete=' . $auctionInfo['id'] . '">ADMIN PANEL: >DELETE AUCTION<</a></div>'; 
############ SHOW STATS ############ 
            $row = 0; 
            $main_content .= '<table class="tableFonts" style="margin-left: auto;margin-right: auto;">'; 
            $main_content .= '<tr style="background-color:'.$config['site']['vdarkborder'].'"><td colspan="3">CHARACTER INFO</td></tr>'; 
            $main_content .= '<tr><td><table style="width: 360px;border-spacing: 1px">'; 
            $main_content .= '<tr class="tableRow' . ($row++ % 2) . '"><td>AUCTION ID:</td><td>' . $auctionInfo['id'] . '</td></tr>'; 
            $main_content .= '<tr class="tableRow' . ($row++ % 2) . '"><td>Name:</td><td>' . $auctionChar->getName() . '<br /><div style="font-size: 8pt;">(You select new name when you win auction.)</div></td></tr>'; 
            $main_content .= '<tr class="tableRow' . ($row++ % 2) . '"><td>Level:</td><td>' . $auctionChar->getLevel() . '</td></tr>'; 
            $main_content .= '<tr class="tableRow' . ($row++ % 2) . '"><td>Vocation:</td><td>' . htmlspecialchars(Website::getVocationName($auctionChar->getVocation(), $auctionChar->getPromotion())) . '</td></tr>';
            $main_content .= '<tr class="tableRow' . ($row++ % 2) . '"><td>Health:</td><td>' . $auctionChar->getHealthMax() . '</td></tr>'; 
            $main_content .= '<tr class="tableRow' . ($row++ % 2) . '"><td>Mana:</td><td>' . $auctionChar->getManaMax() . '</td></tr>'; 
            $main_content .= '<tr class="tableRowSmall' . ($row++ % 2) . '"><td>Magic Level:</td><td>' . $auctionChar->getMagLevel() . '</td></tr>'; 
            $main_content .= '<tr class="tableRowSmall' . ($row++ % 2) . '"><td>Sword:</td><td>' . $auctionChar->getSkill(2) . '</td></tr>'; 
            $main_content .= '<tr class="tableRowSmall' . ($row++ % 2) . '"><td>Axe:</td><td>' . $auctionChar->getSkill(3) . '</td></tr>'; 
            $main_content .= '<tr class="tableRowSmall' . ($row++ % 2) . '"><td>Club:</td><td>' . $auctionChar->getSkill(1) . '</td></tr>'; 
            $main_content .= '<tr class="tableRowSmall' . ($row++ % 2) . '"><td>Distance:</td><td>' . $auctionChar->getSkill(4) . '</td></tr>'; 
            $main_content .= '<tr class="tableRowSmall' . ($row++ % 2) . '"><td>Shielding:</td><td>' . $auctionChar->getSkill(5) . '</td></tr>'; 
            $main_content .= '</table></td>'; 
############ SHOW EQ ############ 

            $main_content .= '<td>'; 
			
			
			
			
			
			$itemsList = $auctionChar->getItems();
			$main_content .= '<table with=100% style="border: solid 1px #888888;" CELLSPACING="1"><TR>';		
			$list = array('2','1','3','6','4','5','9','7','10','8');
			foreach ($list as $number_of_items_showed => $slot)
			{
				if($slot == '8') // add Soul before show 'feet'
				{
					$main_content .= '<td style="background-color: '.$config['site']['darkborder'].'; text-align: center;">Soul:<br/>'. $auctionChar->getSoul() .'</td>';
				}
				if($itemsList->getSlot($slot) === false) // item does not exist in database
				{
					$main_content .= '<TD style="background-color: '.$config['site']['darkborder'].';"><img src="images/items/'. $slot .'.gif" width="45"/></TD>';
				}
				else
				{
					$main_content .= '<TD style="background-color: '.$config['site']['darkborder'].';"><img src="images/items/'. $itemsList->getSlot($slot)->getID() . '.gif" width="45"/></TD>';
				}
				if($number_of_items_showed % 3 == 2)
				{
					$main_content .= '</tr><tr>';
				}
				if($slot == '8') // add Capacity after show 'feet'
				{
					$main_content .= '<td style="background-color: '.$config['site']['darkborder'].'; text-align: center;">Cap:<br/>'. $auctionChar->getCap() .'</td>';
				}
			}
			$main_content .= '</tr></TABLE>';
			
			
			
			
			
			
			
			
			
			
            $main_content .= '</td>'; 
            $main_content .= '</tr></table>'; 
############ SHOW DONATORS SHOP ITEMS ############ 
            $donators_items = $SQL->query('SELECT `player_items`.`itemtype`, SUM(`player_items`.`count`) AS count, `z_shop_offer`.`offer_name` AS name FROM `player_items`, `z_shop_offer` WHERE `player_items`.`player_id` = ' . $auctionChar->getId() . ' AND `z_shop_offer`.`offer_type` = \'item\' AND `player_items`.`itemtype` = `z_shop_offer`.`itemid1` GROUP BY `player_items`.`itemtype`;')->fetchAll(); 
            $donators_depotitems = $SQL->query('SELECT `player_depotitems`.`itemtype`, SUM(`player_depotitems`.`count`) AS count, `z_shop_offer`.`offer_name` AS name FROM `player_depotitems`, `z_shop_offer` WHERE `player_depotitems`.`player_id` = ' . $auctionChar->getId() . ' AND `z_shop_offer`.`offer_type` = \'item\' AND `player_depotitems`.`itemtype` = `z_shop_offer`.`itemid1` GROUP BY `player_depotitems`.`itemtype`;')->fetchAll(); 
            if(count($donators_items) > 0 || count($donators_depotitems) > 0) 
            { 
                $main_content .= '<table class="tableFonts" style="margin-left: auto;margin-right: auto;padding-top: 30px;">'; 
                if(count($donators_items) > 0) 
                { 
                    $main_content .= '<tr style="background-color:'.$config['site']['vdarkborder'].'"><td colspan="3">DONATORS ITEMS</td></tr>'; 
                    $row = 0; 
                    foreach($donators_items as $donator_item) 
                        $main_content .= '<tr class="tableRow' . ($row++ % 2) . '"><td class="showItemSquare"><img src="/images/items/'. $donator_item['itemtype'] . '.gif" alt="" class="showItemImage"/></td><td>' . $donator_item['count'] .'x</td><td>' . $donator_item['name'] . '</td></tr>'; 
                } 
                if(count($donators_depotitems) > 0) 
                { 
                    $main_content .= '<tr style="background-color:'.$config['site']['vdarkborder'].'"><td colspan="3">DONATORS IN DEPOT</td></tr>'; 
                    $row = 0; 
                    foreach($donators_depotitems as $donator_depotitem) 
                        $main_content .= '<tr class="tableRow' . ($row++ % 2) . '"><td class="showItemSquare"><img src="/images/items/'. $donator_depotitem['itemtype'] . '.gif" alt="" class="showItemImage"/></td><td>' . $donator_depotitem['count'] .'x</td><td>' . $donator_depotitem['name'] . '</td></tr>'; 
                } 
                $main_content .= '</table>'; 
            } 
############ SHOW AUCTION INFO ############ 
            $row = 0; 
            $main_content .= '<table class="tableFonts" style="margin-left: auto;margin-right: auto;padding-top: 30px;">'; 
            $main_content .= '<tr style="background-color:'.$config['site']['vdarkborder'].'"><td colspan="2">AUCTION INFO</td></tr>'; 
            if($auctionInfo['buy_now'] > 0) 
                $main_content .= '<tr class="tableRow' . ($row++ % 2) . '"><td>Buy now:</td><td>' . $auctionInfo['buy_now'] . ' premium points</td></tr>'; 
            $main_content .= '<tr class="tableRow' . ($row++ % 2) . '"><td>Highest bid:</td><td>' . $auctionInfo['bid'] . ' premium points</td></tr>'; 
            $main_content .= '<tr class="tableRow' . ($row++ % 2) . '"><td>Time left:</td><td><div name="timer_' . $auctionInfo['id'] . '" id="timer_' . $auctionInfo['id'] . '">' . time_left($auctionInfo['finish_time'] - time()) . '</div></td></tr>'; 
            $main_content .= '</table><br /><script type="text/javascript">countdown(' . ($auctionInfo['finish_time'] - time()) . ', \'timer_' . $auctionInfo['id'] . '\');</script>'; 
            if($auctionInfo['state'] == 0) 
            { 
                $main_content .= '<form action="?subtopic=sellchar&action=bid&id=' . $auctionInfo['id'] . '" method="post" onsubmit="return checkBid(' . (($logged) ? $account_logged->getId() : 0) . ', ' . $auctionInfo['bidder'] . ', ' . (($logged) ? $account_logged->getPremiumPoints() : 0) . ', ' . $auctionInfo['bid'] . ');">'; 
                $main_content .= '<table class="tableFonts" style="float: left;">'; 
                $main_content .= '<tr style="background-color:'.$config['site']['vdarkborder'].'"><td colspan="2">YOUR BID</td></tr>'; 
                $main_content .= '<tr class="tableRow' . ($row++ % 2) . '"><td>Bid:</td><td><input type="text" id="bid" name="bid" value="' . ($auctionInfo['bid'] + 1) . '" /> pp</td></tr>'; 
                $main_content .= '<tr class="tableRow' . ($row++ % 2) . '"><td colspan="2" style="text-align: center;"><input type="submit" value="BID" /></td></tr></table></form><br />'; 
                if($auctionInfo['buy_now'] > 0) 
                    $main_content .= '<a href="?subtopic=sellchar&action=buy&id=' . $auctionInfo['id'] . '" class="linkButton" style="float: right;" onclick="return checkBuyNow(' . (($logged) ? $account_logged->getId() : 0) . ', ' . (($logged) ? $account_logged->getPremiumPoints() : 0) . ', ' . $auctionInfo['buy_now'] . ');">BUY NOW!</a>'; 
            } 
            $main_content .= '<div style="padding-top: 120px;padding-left: 45%"><a href="?subtopic=sellchar" class="linkButton">BACK</a></div>'; 
        } 
        else 
            $main_content .= $errorFormStart . 'ERROR! Character doesn\'t exist.' . $errorFormEnd; 
    } 
    else 
        $main_content .= $errorFormStart . 'ERROR! Auction with this ID doesn\'t exist.' . $errorFormEnd; 
} 
elseif($action == "bid") ############ BID CHARACTER ############ 
{ 
    $main_content .= '<div class="bigText" style="text-align: center">Bid character</div>'; 
    if($logged) 
    { 
        $auctionInfo = $SQL->query('SELECT * FROM `characters_auctions` WHERE `state` = 0 AND `id` = ' . (int) $_REQUEST['id'])->fetch(); 
        if(isset($auctionInfo['id'])) 
        { 
            $auctionChar = new Player($auctionInfo['char_id']);
            if($auctionChar->isLoaded()) 
            { 
                if($account_logged->getPremiumPoints() > $auctionInfo['bid'] || ($account_logged->getId() == $auctionInfo['bidder'] && $account_logged->getPremiumPoints() > 0)) 
                { 
                    if(isset($_REQUEST['bid']) && (int) $_REQUEST['bid'] > 0) 
                    { 
                        $userBid = (int) $_REQUEST['bid']; 
                        if($account_logged->getPremiumPoints() >= $userBid || ($account_logged->getId() == $auctionInfo['bidder'] && $account_logged->getPremiumPoints() + $auctionInfo['bid'] >= $userBid)) 
                        { 
                            if($userBid > $auctionInfo['bid']) 
                            { 
                                if($account_logged->getId() != $auctionInfo['bidder']) 
                                { 
                                    $last_bidder = new Account($auctionInfo['bidder']);
                                    if($last_bidder->isLoaded()) 
                                    { 
                                        $last_bidder->setPremiumPoints($last_bidder->getPremiumPoints() + $auctionInfo['bid']); 
                                        $last_bidder->save(); 
                                    } 
                                    $account_logged->setPremiumPoints($account_logged->getPremiumPoints() - $userBid); 
                                } 
                                else 
                                    $account_logged->setPremiumPoints($account_logged->getPremiumPoints() + $auctionInfo['bid'] - $userBid); 
                                $account_logged->save(); 
                                $SQL->query('UPDATE `characters_auctions` SET `bid` = ' . $userBid . ', `bidder` = ' . $account_logged->getId() . ' WHERE `id` = ' . $auctionInfo['id']); 
                                if($auctionInfo['finish_time'] - time() < 60) 
                                    $SQL->query('UPDATE `characters_auctions` SET `finish_time` = ' . time() + 60 . ' WHERE `id` = ' . $auctionInfo['id']); 
                                $main_content .= '<div class="normalText">You have bidded ' . $userBid . ' premium points on auction ID ' . $auctionInfo['id'] . '!</div>'; 
                                $main_content .= '<div style="padding-top: 120px;padding-left: 45%"><a href="?subtopic=sellchar&action=show&id=' . $auctionInfo['id'] . '" class="linkButton">BACK</a></div>'; 
                            } 
                            else 
                                $main_content .= $errorFormStart . 'Sorry! Your bid is lower then current highest bid.<br />Your bid is: ' . $userBid . '<br />Highest bid: ' . $auctionInfo['bid'] . '' . $errorFormEnd; 
                        } 
                        else 
                            $main_content .= $errorFormStart . 'Sorry! You do not have enought premium points.<br />Your bid is: ' . $userBid . '<br />You have: ' . $account_logged->getPremiumPoints() . '' . $errorFormEnd; 
                    } 
                    else 
                        $main_content .= $errorFormStart . 'You must bid more then 0.' . $errorFormEnd; 
                } 
                else 
                    $main_content .= $errorFormStart . 'Sorry! You do not have enought premium points.<br />Highest bid is: ' . $auctionInfo['bid'] . '<br />You have: ' . $account_logged->getPremiumPoints() . '' . $errorFormEnd; 
            } 
            else 
                $main_content .= $errorFormStart . 'ERROR! Character doesn\'t exist.' . $errorFormEnd; 
        } 
        else 
            $main_content .= $errorFormStart . 'ERROR! Auction with this ID doesn\'t exist.' . $errorFormEnd; 
    } 
    else 
        $main_content .= $errorFormStart . 'You are not logged in.' . $errorFormEnd; 
} 
elseif($action == "buy") ############ BUY CHARACTER ############ 
{ 
    $main_content .= '<div class="bigText" style="text-align: center">Buy character</div>'; 
    if($logged) 
    { 
        $auctionInfo = $SQL->query('SELECT * FROM `characters_auctions` WHERE `state` = 0 AND `id` = ' . (int) $_REQUEST['id'])->fetch(); 
        if(isset($auctionInfo['id'])) 
        { 
            if($auctionInfo['buy_now'] > 0) 
            { 
                $auctionChar = new Player($auctionInfo['char_id']);
                if($auctionChar->isLoaded()) 
                { 
                    if($account_logged->getPremiumPoints() >= $auctionInfo['buy_now'] || ($account_logged->getId() == $auctionInfo['bidder'] && $account_logged->getPremiumPoints() + $auctionInfo['bid'] >= $auctionInfo['buy_now'])) 
                    { 
                        if($account_logged->getId() != $auctionInfo['bidder']) 
                        { 
                            $last_bidder = new Account($auctionInfo['bidder']);
                            if($last_bidder->isLoaded()) 
                            { 
                                $last_bidder->setPremiumPoints($last_bidder->getPremiumPoints() + $auctionInfo['bid']); 
                                $last_bidder->save(); 
                            } 
                            $account_logged->setPremiumPoints($account_logged->getPremiumPoints() - $auctionInfo['buy_now']); 
                        } 
                        else 
                            $account_logged->setPremiumPoints($account_logged->getPremiumPoints() + $auctionInfo['bid'] - $auctionInfo['buy_now']); 
                        $account_logged->save(); 
                        $auctionChar->setAccount($account_logged); 
                        $auctionChar->setGroup(1); 
                        $auctionChar->save(); 
                        $SQL->query('INSERT INTO `bans` (`id` , `type` , `value` ,`param` ,`active` ,`expires` ,`added` ,`admin_id` ,`comment` ,`reason` ,`action` ,`statement`) VALUES (NULL , 2, ' .$auctionChar->getId() . ', 2, 1, -1, ' . time() . ', 1, \'BUY CHAR\', 0, 1, \'\');'); 
                        $SQL->query('UPDATE `characters_auctions` SET `state` = 2, `finish_time` = ' . time() . ', `bidder` = ' . $account_logged->getId() . ', `bid` = `buy_now` WHERE `id` = ' . $auctionInfo['id']); 
                        $main_content .= '<div class="normalText">You have bought new character! Character is now on your account. Login in game and select new name for your character.</div>'; 
                        $main_content .= '<div style="padding-top: 120px;padding-left: 45%"><a href="?subtopic=sellchar" class="linkButton">BACK</a></div>'; 
                    } 
                    else 
                        $main_content .= $errorFormStart . 'Sorry! You do not have enought premium points.<br />It cost: ' . $auctionInfo['buy_now'] . '<br />You have: ' . $account_logged->getPremiumPoints() . '' . $errorFormEnd;
                } 
                else 
                    $main_content .= $errorFormStart . 'ERROR! Character doesn\'t exist.' . $errorFormEnd; 
            } 
            else 
                $main_content .= $errorFormStart . 'ERROR! You can not buy this character by Buy Now option. You can only Bid on auction.' . $errorFormEnd; 
        } 
        else 
            $main_content .= $errorFormStart . 'ERROR! Auction with this ID doesn\'t exist.' . $errorFormEnd; 
    } 
    else 
        $main_content .= $errorFormStart . 'You are not logged in.' . $errorFormEnd; 
} 
else ############ SHOW LIST OF AUCTIONS ############ 
{ 
    if(isset($_REQUEST['delete'])) 
        if($logged && $account_logged->getPageAccess() >= $add_character_page_access) 
        { 
            $SQL->query('DELETE FROM `characters_auctions` WHERE `id` = ' . (int) $_REQUEST['delete']); 
            $main_content .= $errorFormStart . 'Auction ' . (int) $_REQUEST['delete'] . ' should be deleted.' . $errorFormEnd; 
        } 
        else 
            $main_content .= $errorFormStart . 'You can not delete. You do not have access.' . $errorFormEnd; 
    $main_content .= '<div class="bigText" style="text-align: center">Characters Auctions</div>'; 
    $main_content .= '<div class="normalText">With this system you can buy un-used (inactive) characters by auctioning for them. When you bid on a character it will automatically take premium points from your account. If someone out-bids you, you will get those premium points added back to your account. If the auction time is under 2 minutes when someone bids, 1 minute will automatically be added to the auction time to give time for a re-bid from the previous bidder. If you choose to "buy now" you will get the character within 1 minute.</div>'; 
    $main_content .= '<table class="tableFonts"><tr style="background-color:'.$config['site']['vdarkborder'].'" style="font-size: 28px;text-align: center"><td>Time left</td><td>Char info</td><td>Buy now</td><td>Highest bid</td></tr>'; 
	$timers = array();
    foreach($SQL->query('SELECT * FROM `characters_auctions` WHERE `finish_time` > ' . time())->fetchAll() as $auctionInfo)
    { 
        $auctionChar = new Player($auctionInfo['char_id']);
        if($auctionChar->isLoaded()) 
            $main_content .= '<tr class="tableRow' . ($row++ % 2) . '" style="font-size: 16px;text-align: center" onclick="window.location = \'?subtopic=sellchar&action=show&id=' . $auctionInfo['id'] . '\'"><td><div id="timer_' . $auctionInfo['id'] . '">' . time_left($auctionInfo['finish_time'] - time()) . '</div></td><td>' . $auctionChar->getLevel() . ' ' . htmlspecialchars(Website::getVocationName($auctionChar->getVocation(), $auctionChar->getPromotion())) . '</td><td>' . $auctionInfo['buy_now'] . ' pp</td><td>' . $auctionInfo['bid'] . ' pp</td></tr>'; 
        $timers['timer_' . $auctionInfo['id']] = $auctionInfo['finish_time'] - time(); 
    } 
    $main_content .= '</table><br /><div class="normalText">Press on auction to get more informations.</div>'; 
    $main_content .= '<script type="text/javascript">'; 
    foreach($timers as $timer_id => $time_left) 
        $main_content .= 'countdown(' . $time_left . ', \'' . $timer_id . '\');'; 
    $main_content .= '</script>'; 
} 
$main_content .= '<br /><br />'; 
?>
 
Back
Top