.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}
';
$errorFormStart = '
';
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 .= '';
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 .= 'Add Auction
';
$main_content .= 'If you leave Buy Now field empty or set it to 0 it will be not possible to buy character by option \'Buy Now\'.
';
$main_content .= '';
$main_content .= 'CHARACTERS LIST |
';
$main_content .= '';
############ SEARCH FORM ############
$main_content .= 'ID | Nick | Level & Vocation | Offline | Auction time | Auction min. offer | Buy Now | Add |
';
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 .= '';
}
$main_content .= '
';
}
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 .= 'Auction Info
';
if(isset($auctionInfo['id']))
{
$auctionChar = new Player($auctionInfo['char_id']);
if($auctionChar->isLoaded())
{
if($logged && $account_logged->getPageAccess() >= $add_character_page_access)
$main_content .= '';
############ SHOW STATS ############
$row = 0;
$main_content .= '';
$main_content .= 'CHARACTER INFO |
';
$main_content .= '';
$main_content .= 'AUCTION ID: | ' . $auctionInfo['id'] . ' | ';
$main_content .= 'Name: | ' . $auctionChar->getName() . '
(You select new name when you win auction.) | ';
$main_content .= 'Level: | ' . $auctionChar->getLevel() . ' | ';
$main_content .= 'Vocation: | ' . htmlspecialchars(Website::getVocationName($auctionChar->getVocation(), $auctionChar->getPromotion())) . ' | ';
$main_content .= 'Health: | ' . $auctionChar->getHealthMax() . ' | ';
$main_content .= 'Mana: | ' . $auctionChar->getManaMax() . ' | ';
$main_content .= 'Magic Level: | ' . $auctionChar->getMagLevel() . ' | ';
$main_content .= 'Sword: | ' . $auctionChar->getSkill(2) . ' | ';
$main_content .= 'Axe: | ' . $auctionChar->getSkill(3) . ' | ';
$main_content .= 'Club: | ' . $auctionChar->getSkill(1) . ' | ';
$main_content .= 'Distance: | ' . $auctionChar->getSkill(4) . ' | ';
$main_content .= 'Shielding: | ' . $auctionChar->getSkill(5) . ' | ';
$main_content .= ' | ';
############ SHOW EQ ############
$main_content .= '';
$itemsList = $auctionChar->getItems();
$main_content .= '';
$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 .= 'Soul: '. $auctionChar->getSoul() .' | ';
}
if($itemsList->getSlot($slot) === false) // item does not exist in database
{
$main_content .= ' | ';
}
else
{
$main_content .= ' | ';
}
if($number_of_items_showed % 3 == 2)
{
$main_content .= ' ';
}
if($slot == '8') // add Capacity after show 'feet'
{
$main_content .= 'Cap: '. $auctionChar->getCap() .' | ';
}
}
$main_content .= ' ';
$main_content .= ' | ';
$main_content .= '
';
############ 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 .= '';
if(count($donators_items) > 0)
{
$main_content .= 'DONATORS ITEMS |
';
$row = 0;
foreach($donators_items as $donator_item)
$main_content .= ' | ' . $donator_item['count'] .'x | ' . $donator_item['name'] . ' |
';
}
if(count($donators_depotitems) > 0)
{
$main_content .= 'DONATORS IN DEPOT |
';
$row = 0;
foreach($donators_depotitems as $donator_depotitem)
$main_content .= ' | ' . $donator_depotitem['count'] .'x | ' . $donator_depotitem['name'] . ' |
';
}
$main_content .= '
';
}
############ SHOW AUCTION INFO ############
$row = 0;
$main_content .= '';
$main_content .= 'AUCTION INFO |
';
if($auctionInfo['buy_now'] > 0)
$main_content .= 'Buy now: | ' . $auctionInfo['buy_now'] . ' premium points |
';
$main_content .= 'Highest bid: | ' . $auctionInfo['bid'] . ' premium points |
';
$main_content .= 'Time left: | ' . time_left($auctionInfo['finish_time'] - time()) . ' |
';
$main_content .= '
';
if($auctionInfo['state'] == 0)
{
$main_content .= '
';
if($auctionInfo['buy_now'] > 0)
$main_content .= 'BUY NOW!';
}
$main_content .= '';
}
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 .= 'Bid character
';
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 .= 'You have bidded ' . $userBid . ' premium points on auction ID ' . $auctionInfo['id'] . '!
';
$main_content .= '';
}
else
$main_content .= $errorFormStart . 'Sorry! Your bid is lower then current highest bid.
Your bid is: ' . $userBid . '
Highest bid: ' . $auctionInfo['bid'] . '' . $errorFormEnd;
}
else
$main_content .= $errorFormStart . 'Sorry! You do not have enought premium points.
Your bid is: ' . $userBid . '
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.
Highest bid is: ' . $auctionInfo['bid'] . '
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 .= 'Buy character
';
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 .= 'You have bought new character! Character is now on your account. Login in game and select new name for your character.
';
$main_content .= '';
}
else
$main_content .= $errorFormStart . 'Sorry! You do not have enought premium points.
It cost: ' . $auctionInfo['buy_now'] . '
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 .= 'Characters Auctions
';
$main_content .= '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.
';
$main_content .= 'Time left | Char info | Buy now | Highest bid |
';
$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 .= '' . time_left($auctionInfo['finish_time'] - time()) . ' | ' . $auctionChar->getLevel() . ' ' . htmlspecialchars(Website::getVocationName($auctionChar->getVocation(), $auctionChar->getPromotion())) . ' | ' . $auctionInfo['buy_now'] . ' pp | ' . $auctionInfo['bid'] . ' pp |
';
$timers['timer_' . $auctionInfo['id']] = $auctionInfo['finish_time'] - time();
}
$main_content .= '
Press on auction to get more informations.
';
$main_content .= '';
}
$main_content .= '
';
?>