Last active
October 25, 2024 10:15
-
-
Save slawkens/3cce6a075353fc6f2dd4ddf70fe7388a to your computer and use it in GitHub Desktop.
Character Auction for MyAAC
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<?PHP | |
################################################# | |
### Scripted by Shadow_ ### | |
### All rights reserverd ### | |
### Do not use/distribute without permission! ### | |
### Contact: Discord: Carcoo#2914 ### | |
### [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: #d0d0d0;table-layout:fixed;} | |
.tableHead {background-color: #111111;text-align: center;vertical-align: middle;font-size: 20pt;width:100%} | |
.tableRow0 {background-color: #808080;text-align: left;vertical-align: middle;font-size: 12pt} | |
.tableRow0:hover {background-color: #111111;} | |
.tableRow1 {background-color: #333232;text-align: left;vertical-align: middle;font-size: 12pt} | |
.tableRow1:hover {background-color: #111111;} | |
.tableRowSmall0 {background-color: #808080;text-align: left;vertical-align: middle;font-size: 10pt} | |
.tableRowSmall0:hover {background-color: #111111;} | |
.tableRowSmall1 {background-color: #333232;text-align: left;vertical-align: middle;font-size: 10pt} | |
.tableRowSmall1:hover {background-color: #111111;} | |
.linkButton {background-color: #111111;font-size: 14pt;padding: 6px;text-shadow: 2mm 2mm 2mm #342423;letter-spacing: 1mm} | |
.linkButton:hover {background-color: white;} | |
.table, th, td { | |
border: 2px double #e6e6e65c; | |
} | |
.bigText {font-size: 24pt} | |
.normalText {font-size: 12pt;} | |
.showItemSquare {height: 49px;width: 39px;padding: 7px;} | |
.showItemImage {height: 40px;width: 40px;padding: 0px;} | |
.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 + \'D\' + \' \'; | |
innerHTML += hours + \'H\' + \' \'; | |
innerHTML += minutes + \'M\' + \' \'; | |
innerHTML += seconds + \'S\'; | |
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 OTS_Account(); | |
$finishedAuctionBidder->load($finishedAuction['bidder']); | |
$finishedAuctionChar = new OTS_Player(); | |
$finishedAuctionChar->load($finishedAuction['char_id']); | |
$finishedAuctionChar->setAccount($finishedAuctionBidder); | |
$finishedAuctionChar->save(); | |
$SQL->query('UPDATE `characters_auctions` SET `state` = 2 WHERE `id` = ' . $finishedAuction['id']); | |
$SQL->query('INSERT INTO `players_storage` (`player_id` , `key` , `value`) VALUES (' .$auctionChar->getId() . ' , 38193, 1);'); | |
} | |
else | |
$SQL->query('UPDATE `characters_auctions` SET `state` = 1 WHERE `id` = ' . $finishedAuction['id']); | |
} | |
############ VISIBLE THINGS ############ | |
if($action == "addauction") ############ ADD AUCTION / VIEW CHARACTERS LIST ############ | |
{ | |
if($logged && $account_logged->getAccess() < $add_character_page_access) | |
{ | |
$daysAgo = (int) $_REQUEST['days_ago']; | |
$nameContains = $_REQUEST['name_contains']; | |
$minLevel = 25; | |
$maxLastLogout = time() - $daysAgo * 24 * 3600; | |
$orderBy = ($_REQUEST['order_by'] == 'lastlogout') ? $_REQUEST['order_by'] : 'rebirth'; | |
$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 class="tableHead"><td colspan="8">CHARACTERS LIST</td></tr>'; | |
$main_content .= '<form action="?" method="get"><input type="hidden" name="subtopic" value="auction" /><input type="hidden" name="action" value="addauction" />'; | |
$main_content .= '<tr class="tableHead" style="font-size: 10pt;"><td colspan="2">ORDER BY</td><td><select name="order_by"><option' . (($orderBy == 'lastlogout') ? ' selected="selected"' : '') . '>lastlogout</option><option' . (($orderBy == 'rebirth') ? ' selected="selected"' : '') . '>Awaken</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 class="tableHead" 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" /> Awaken</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 class="tableHead" style="font-size: 14pt;"><td>ID</td><td>Nick</td><td>Awaken</td><td>Offline</td><td>Auction time</td><td>Auction min. offer</td><td>Buy Now</td><td>Add</td></tr>'; | |
$account_idLOG = $account_logged->getId(); | |
foreach($SQL->query('SELECT * FROM `players` WHERE `id` NOT IN (' . implode(",", $charsAlreadyOnAuctions) . ') AND `account_id` <=> ' . $account_idLOG . ' AND `lastlogout` > 0 AND `rebirth` >= ' . ($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=auction&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['rebirth'] . ' ' . $config['vocations'][$player['promotion']][$player['vocation']] . '</td><td>' . (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" /> Points</td><td><input type="text" name="price_buy_now" value="" size="5" /> Points</td><td><center><input type="submit" onclick="this.form.submit();this.disabled = true;" value="Add" /></center></td></tr></form>'; | |
$main_content .= '</table>'; | |
} | |
else | |
$main_content .= $errorFormStart . 'ERROR! You do not have access to this page.' . $errorFormEnd; | |
} | |
if($action == "adminauction") ############ ADD AUCTION / VIEW CHARACTERS LIST ############ | |
{ | |
if($logged && admin()) | |
{ | |
$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'] : 'rebirth'; | |
$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 class="tableHead"><td colspan="8">CHARACTERS LIST</td></tr>'; | |
$main_content .= '<form action="?" method="get"><input type="hidden" name="subtopic" value="auction" /><input type="hidden" name="action" value="adminauction" />'; | |
$main_content .= '<tr class="tableHead" style="font-size: 10pt;"><td colspan="2">ORDER BY</td><td><select name="order_by"><option' . (($orderBy == 'lastlogout') ? ' selected="selected"' : '') . '>lastlogout</option><option' . (($orderBy == 'rebirth') ? ' selected="selected"' : '') . '>Awaken</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 class="tableHead" 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" /> Awaken</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 class="tableHead" style="font-size: 14pt;"><td>ID</td><td>Nick</td><td>Awaken</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 `rebirth` >= ' . $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=auction&action=adminauction&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'] . ' ' . $config['vocations'][$player['promotion']][$player['vocation']] . '</td><td>' . (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" /> Points</td><td><input type="text" name="price_buy_now" value="" size="5" /> Points</td><td><input type="submit" onclick="this.form.submit();this.disabled = true;" value="Add" /></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 OTS_Player(); | |
$auctionChar->load($auctionInfo['char_id']); | |
if($auctionChar->isLoaded()) | |
{ | |
if($logged && admin()) | |
$main_content .= '<div class="btn btn-primary"><a href="?subtopic=auction&delete=' . $auctionInfo['id'] . '">DELETE AUCTION</a></div>'; | |
############ SHOW STATS ############ | |
$row = 0; | |
$main_content .= '<table class="tableFonts" style="margin-left: auto;margin-right: auto;">'; | |
$main_content .= '<tr class="tableHead"><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() . '</td></tr>'; | |
$main_content .= '<tr class="tableRow' . ($row++ % 2) . '"><td>Awaken:</td><td>' . $auctionChar->getRebirth() . '</td></tr>'; | |
$main_content .= '<tr class="tableRow' . ($row++ % 2) . '"><td>Vocation:</td><td>' . $auctionChar->getVocationName() . '</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 ############ | |
foreach($SQL->query('SELECT * FROM `player_items` WHERE `player_id` = ' . $auctionChar->getId() . ' AND `pid` >= 1 AND `pid` <= 10;') as $item) | |
$player_items[$item['pid']] = $item['itemtype']; | |
$empty_slots = array("", "no_helmet", "no_necklace", "no_backpack", "no_armor", "no_handleft", "no_handright", "no_legs", "no_boots", "no_ring", "no_ammo"); | |
for($i = 0; $i <= 10; $i++) | |
{ | |
if(!isset($player_items[$i]) || $player_items[$i] == 0) | |
$player_items[$i] = $empty_slots[$i]; | |
} | |
for($i = 1; $i < 11; $i++) | |
{ | |
if(Validator::number($player_items[$i])) | |
$player_items[$i] = getItemImage($player_items[$i]); | |
else | |
$player_items[$i] = '<img src="images/items/' . $player_items[$i] . '.gif" width="32" height="32" border="0" alt=" ' . $player_items[$i] . '" />'; | |
} | |
$row = 0; | |
$main_content .= '<td><table style="border-spacing: 1px">'; | |
$main_content .= '<tr><td class="showItemSquare" style="background-color: #232323">' . $player_items[2] . '</td>'; | |
$main_content .= '<td class="showItemSquare" style="background-color: #232323">' . $player_items[1] . '</td>'; | |
$main_content .= '<td class="showItemSquare" style="background-color: #232323">' . $player_items[3] . '</td></tr>'; | |
$main_content .= '<tr><td class="showItemSquare" style="background-color: #232323">' . $player_items[6] . '</td>'; | |
$main_content .= '<td class="showItemSquare" style="background-color: #232323">' . $player_items[4] . '</td>'; | |
$main_content .= '<td class="showItemSquare" style="background-color: #232323">'. $player_items[5] . '</td></tr>'; | |
$main_content .= '<tr><td class="showItemSquare" style="background-color: #232323">'. $player_items[9] . '</td>'; | |
$main_content .= '<td class="showItemSquare" style="background-color: #232323">'. $player_items[7] . '</td>'; | |
$main_content .= '<td class="showItemSquare" style="background-color: #232323">'. $player_items[10] . '</tr>'; | |
$main_content .= '<tr><td class="showItemSquare" style="background-color: #232323;text-align: center;color:#FFFFFF">Soul:<br />' . $auctionChar->getSoul() . '</td>'; | |
$main_content .= '<td class="showItemSquare" style="background-color: #232323">'. $player_items[8] . '</td>'; | |
$main_content .= '<td class="showItemSquare" style="background-color: #232323;text-align: center;color:#FFFFFF">Cap:<br />' . $auctionChar->getCap() . '</td></tr>'; | |
$main_content .= '</tr></table></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;width:100%">'; | |
if(count($donators_items) > 0) | |
{ | |
$main_content .= '<tr class="tableHead"><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="' . $config['item_images_url'] . ''. $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 class="tableHead"><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="' . $config['item_images_url'] . ''. $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;width:100%">'; | |
$main_content .= '<tr class="tableHead"><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 width="45%">Time left:</td><td width="45%"><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=auction&action=bid&id=' . $auctionInfo['id'] . '" method="post" onsubmit="return checkBid(' . (($logged) ? $account_logged->getId() : 0) . ', ' . $auctionInfo['bidder'] . ', ' . (($logged) ? $account_logged->getCustomField('premium_points') : 0) . ', ' . $auctionInfo['bid'] . ');">'; | |
$main_content .= '<table class="tableFonts" style="margin-left: auto;margin-right: auto">'; | |
$main_content .= '<tr class="tableHead"><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" onclick="this.form.submit();this.disabled = true;" value="BID" /></td></tr></table></form><br />'; | |
if($auctionInfo['buy_now'] > 0) | |
$main_content .= '<a href="?subtopic=auction&action=buy&id=' . $auctionInfo['id'] . '" class="btn btn-primary" style="float: right;" onclick="return checkBuyNow(' . (($logged) ? $account_logged->getId() : 0) . ', ' . (($logged) ? $account_logged->getCustomField('premium_points') : 0) . ', ' . $auctionInfo['buy_now'] . ');">BUY NOW!</a>'; | |
} | |
$main_content .= '<div style="padding-top: 120px;padding-left: 45%"><a href="?subtopic=auction" class="btn btn-primary">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 OTS_Player(); | |
$auctionChar->load($auctionInfo['char_id']); | |
if($auctionChar->isLoaded()) | |
{ | |
if($account_logged->getCustomField('premium_points') > $auctionInfo['bid'] || ($account_logged->getId() == $auctionInfo['bidder'] && $account_logged->getCustomField('premium_points') > 0)) | |
{ | |
if(isset($_REQUEST['bid']) && (int) $_REQUEST['bid'] > 0) | |
{ | |
$userBid = (int) $_REQUEST['bid']; | |
if($account_logged->getCustomField('premium_points') >= $userBid || ($account_logged->getId() == $auctionInfo['bidder'] && $account_logged->getCustomField('premium_points') + $auctionInfo['bid'] >= $userBid)) | |
{ | |
if($userBid > $auctionInfo['bid']) | |
{ | |
if($account_logged->getId() != $auctionInfo['bidder']) | |
{ | |
$last_bidder = new OTS_Account(); | |
$last_bidder->load($auctionInfo['bidder']); | |
if($last_bidder->isLoaded()) | |
{ | |
$last_bidder->setCustomField('premium_points', $last_bidder->getCustomField('premium_points') + $auctionInfo['bid']); | |
$last_bidder->save(); | |
} | |
$account_logged->setCustomField('premium_points', $account_logged->getCustomField('premium_points') - $userBid); | |
} | |
else | |
$account_logged->setCustomField('premium_points', $account_logged->getCustomField('premium_points') + $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=auction&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->getCustomField('premium_points') . '' . $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->getCustomField('premium_points') . '' . $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 OTS_Player(); | |
$auctionChar->load($auctionInfo['char_id']); | |
if($auctionChar->isLoaded()) | |
{ | |
if($account_logged->getCustomField('premium_points') >= $auctionInfo['buy_now'] || ($account_logged->getId() == $auctionInfo['bidder'] && $account_logged->getCustomField('premium_points') + $auctionInfo['bid'] >= $auctionInfo['buy_now'])) | |
{ | |
if($account_logged->getId() != $auctionInfo['bidder']) | |
{ | |
$last_bidder = new OTS_Account(); | |
$last_bidder->load($auctionInfo['bidder']); | |
if($last_bidder->isLoaded()) | |
{ | |
$last_bidder->setCustomField('premium_points', $last_bidder->getCustomField('premium_points') + $auctionInfo['bid']); | |
$last_bidder->save(); | |
} | |
$account_logged->setCustomField('premium_points', $account_logged->getCustomField('premium_points') - $auctionInfo['buy_now']); | |
} | |
else | |
$account_logged->setCustomField('premium_points', $account_logged->getCustomField('premium_points') + $auctionInfo['bid'] - $auctionInfo['buy_now']); | |
$account_logged->save(); | |
$auctionChar->setAccount($account_logged); | |
$auctionChar->save(); | |
$SQL->query('UPDATE `characters_auctions` SET `state` = 2, `finish_time` = ' . time() . ', `bidder` = ' . $account_logged->getId() . ', `bid` = `buy_now` WHERE `id` = ' . $auctionInfo['id']); | |
$SQL->query('INSERT INTO `player_storage` (`player_id` , `key` , `value`) VALUES (' .$auctionChar->getId() . ' , 38193, 1);'); | |
$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=auction" 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->getCustomField('premium_points') . '' . $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 ############ | |
{ | |
$timers = []; | |
if(isset($_REQUEST['delete'])) | |
if($logged && admin()) | |
{ | |
$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 .= '<br></br><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" style ="margin-right:auto;margin-left:auto"><tr class="tableHead" style="object-fit: fill;font-size: 15px;text-align: center"><td width="180">Character</td><td width="120">Time left</td><td width="120">Char info</td><td width="90">Buy now</td><td width="90">Highest bid</td></tr>'; | |
foreach($SQL->query('SELECT * FROM `characters_auctions` WHERE `finish_time` > ' . time())->fetchAll() as $auctionInfo) | |
{ | |
$auctionChar = new OTS_Player(); | |
$auctionChar->load($auctionInfo['char_id']); | |
if($auctionChar->isLoaded()) | |
$players_db = $db->query('SELECT `name`, `rebirth`,`experience`, `looktype`' . ($db->hasColumn('players', 'lookaddons') ? ', `lookaddons`' : '') . ', `lookhead`, `lookbody`, `looklegs`, `lookfeet` FROM `players` WHERE `group_id` < ' . $config['highscores_groups_hidden'] . ' AND `id` <=> '.$auctionChar->getId().' ORDER BY `experience` DESC LIMIT 5;'); | |
$players = array(); | |
foreach($players_db as $player) | |
$players[] = array('name' => $player['name'], 'rebirth' => $player['rebirth'], 'looktype' => $player['looktype'], 'lookaddons' => $player['lookaddons'], 'lookhead' => $player['lookhead'], 'lookbody' => $player['lookbody'], 'looklegs' => $player['looklegs'], 'lookfeet' => $player['lookfeet']); | |
$main_content .= '<tr class="tableRow' . ($row++ % 2) . '" style="font-size: 14px;text-align: center" onclick="window.location = \'?subtopic=auction&action=show&id=' . $auctionInfo['id'] . '\'"><td style="text-align: center"><img src="https://outfit-images.ots.me/animatedOutfits1090/animoutfit.php?id='.$player['looktype'].'&addons='.$player['lookaddons'].'&head='.$player['lookhead'].'&body='.$player['lookbody'].'&legs='.$player['looklegs'].'&feet='.$player['lookfeet'].'" width="32" height="32"> ' . $player['name'].' </td><td><div id="timer_' . $auctionInfo['id'] . '">' . time_left($auctionInfo['finish_time'] - time()) . '</div></td><td>[' . $auctionChar->getRebirth() . ']AWK [' . $auctionChar->getVocationName(). ']</td><td>' . $auctionInfo['buy_now'] . ' Points</td><td>' . $auctionInfo['bid'] . ' Points</td></tr>'; | |
$timers['timer_' . $auctionInfo['id']] = $auctionInfo['finish_time'] - time(); | |
} | |
if($logged && $account_logged->getAccess() && admin()) | |
$main_content .= '<center><div class="btn btn-primary"><a style="color:white" href="?subtopic=auction&action=adminauction">ADMIN PANEL</a></div><br></br></center>'; | |
echo nl2br("</br>\r\n"); | |
if($logged) | |
$main_content .= '<center><div class="btn btn-primary"><a style="color:white" href="?subtopic=auction&action=addauction">ADD AUCTION</a></div></center>'; | |
$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 />'; | |
?> |
I have error:
"Undefined variable $timers"
$timers['timer_' . $auctionInfo['id']] = $auctionInfo['finish_time'] - time();
}
if($logged && $account_logged->getAccess() && admin())
$main_content .= 'ADMIN PANEL';
echo nl2br("\r\n");
if($logged)
$main_content .= 'ADD AUCTION';
$main_content .= 'Press on auction to get more informations.';
$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 .= '';
?>
I updated the script. Do you have any other errors?
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
I have error:
"Undefined variable $timers"