-
-
Save slawkens/3cce6a075353fc6f2dd4ddf70fe7388a to your computer and use it in GitHub Desktop.
<?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 />'; | |
?> |
how implement this?
Put into system/pages/auction.php
Then execute SQL in phpmyadmin (code is in first lines)
How to sell?
How to sell?
I never used that script personally.
But from what I can read in the script, there should be "ADD AUCTION" button, but you need to be logged-in to see that.
Hi, I added the code to my myaac, I have a problem that when clicking ADDAUCTION
http://localhost/?subtopic=auction&action=addauction
I get an error:
HTTP ERROR 500
Admin auction > HTTP ERROR 500
File saved as
system\pages\auction.php
What could be the reason for this?
Database also updated.
Hi, I added the code to my myaac, I have a problem that when clicking ADDAUCTION
http://localhost/?subtopic=auction&action=addauction
I get an error: HTTP ERROR 500 Admin auction > HTTP ERROR 500 File saved as system\pages\auction.php
What could be the reason for this? Database also updated.
Read in the FAQ
Then post the error you are getting.
I have error:
"Undefined variable $timers"
$timers['timer_' . $auctionInfo['id']] = $auctionInfo['finish_time'] - time();
}
if($logged && $account_logged->getAccess() && admin())
$main_content .= '
';
echo nl2br("
\r\n");
if($logged)
$main_content .= '';
$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 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?
how implement this?