Magic
3+3=3!
- Joined
- Aug 4, 2008
- Messages
- 1,338
- Reaction score
- 180
No wi?c zacznijmy. Na dzi? napisa?em system sprzeda?y postaci, kt?ry polega na tym, ?e po zalogowaniu si? na strone i wej?ciu w odpowiedni? zak?adke mo?emy wybra? posta? z naszej listy, kt?ra zostanie wystawiona na sprzeda?. Wystawiamy j? za dan? ilo?? punkt?w premium do czego dodawana zostaje suma, kt?ra wpiszemy w config.php. Kupuj?cy za? musi posiada? t? ilo?? punkt?w na koncie, a by m?c zakupi? posta?. Po zfinalizowanej tranzakcji posta? przechodzi na konto kupuj?cego. Oczywi?cie po wystawieniu postaci na sprzeda? nie mo?emy si? na ni? zalogowa?.
Przejd?my do instalacji.
1. Wykonujemy zapytanie MySQL'a:
2. Tworzymy plik auctionchar.php i wrzucamy do niego to:
3. Tworzymy plik sellchar.php i uzupe?niamy go tym:
4. Przechodzimy do /config/config.php i dodajemy linijk? (przez ?>):
5. Teraz przechodzimy do pliku index.php i dodajemy:
Dodajemy to oczywi?cie pod np.
6. Dodajemy odpowiedni kod do /layouts/twoj_lay/layout.php, kt?ry jest zale?ny od layoutu, wi?c ka?dy musi si? sam wysili?.
7. Przechodzimy do silnika, a nast?pnie do folderu /data/creaturescripts/scripts/ i tworzymy plik sellCheck.lua i uzupe?niamy go poni?szym kodem:
8. Otwieramy plik /data/creaturescripts/creaturescripts.xml i dopisujemy poni?sz? linijk?:
To ju? wszystko! Poni?ej przedstawi? screen z systemu:'
Przejd?my do instalacji.
1. Wykonujemy zapytanie MySQL'a:
Code:
ALTER TABLE `players` ADD `sell` tinyint(1) NOT NULL default '0'
ALTER TABLE `players` ADD `pp_sell` int(10) NOT NULL default '0'
PHP:
<?
/* `sell` tinyint(1) NOT NULL default '0',
`pp_sell` int(10) NOT NULL default '0' */
$id = (int) $_GET['id'];
$buy = $_GET['buy'];
if ($logged){
$player = $SQL->query('SELECT * FROM players WHERE id = '.$id.' LIMIT 1')->fetch();
if ($player){
if (isset($id) && !isset($buy)){
if ($player['sell']){
$main_content .= 'Czy jeste? peweien, ?e chcesz kupi? posta? o nicku <b>'.$player['name'].'</b> za <b>'.$player['pp_sell'].'</b> punkt?w premium? Je?li tak, kliknij <a href="?subtopic=buycharacter&id='.$id.'&buy=true">tutaj</a>.';
}
}
if (isset($id) && $player['sell']){
if ($buy == 'true'){
if ($account_logged->getCustomField('premium_points') > $player['pp_sell']){
$points = $player['pp_sell'];
$pl_id = $player['id'];
$SQL->query('UPDATE accounts SET premium_points = premium_points + '.$points.' WHERE id = '.$pl_id.' LIMIT 1');
$account_logged->setCustomField('premium_points', $account_logged->getCustomField('premium_points')-$player['pp_sell']);
$SQL->query('UPDATE players SET account_id = '.$account_logged->getID().', sell = 0, pp_sell = 0 WHERE id = '.$id.' LIMIT 1');
$main_content .= 'Kupi?e? posta? <b>'.$player['name'].'</b>. Od teraz ta posta? jest na twoim koncie.';
}
else{
$errors [] = 'Masz za ma?o punkt?w premium aby zakupi? t? posta?.';
}
}
}
else{
$errors [] = 'Ta posta? nie jest na sprzeda?.';
}
}
else{
$errors [] = 'Nie ma takiej postaci w bazie.';
}
if (!empty($errors)){
$main_content .= '<div class="SmallBox" > <div class="MessageContainer" > <div class="BoxFrameHorizontal" style="background-image:url('.$layout_name.'/images/content/box-frame-horizontal.gif);" /></div> <div class="BoxFrameEdgeLeftTop" style="background-image:url('.$layout_name.'/images/content/box-frame-edge.gif);" /></div> <div class="BoxFrameEdgeRightTop" style="background-image:url('.$layout_name.'/images/content/box-frame-edge.gif);" /></div> <div class="ErrorMessage" > <div class="BoxFrameVerticalLeft" style="background-image:url('.$layout_name.'/images/content/box-frame-vertical.gif);" /></div> <div class="BoxFrameVerticalRight" style="background-image:url('.$layout_name.'/images/content/box-frame-vertical.gif);" /></div> <div class="AttentionSign" style="background-image:url('.$layout_name.'/images/content/attentionsign.gif);" /></div><b>Wyst?pi?y poni?sze b??dy:</b><br/>';
foreach($errors as $error) {
$main_content .= '<li>'.$error;
}
$main_content .= '</div> <div class="BoxFrameHorizontal" style="background-image:url('.$layout_name.'/images/content/box-frame-horizontal.gif);" /></div> <div class="BoxFrameEdgeRightBottom" style="background-image:url('.$layout_name.'/images/content/box-frame-edge.gif);" /></div> <div class="BoxFrameEdgeLeftBottom" style="background-image:url('.$layout_name.'/images/content/box-frame-edge.gif);" /></div> </div></div><br/>';
}
}
else{
Header('Location: ?subtopic=accountmanagement');
}
?>
PHP:
<?PHP
if ($logged){
$main_content = '<fieldset><center>';
$account_players = $account_logged->getPlayersList();
if ($account_players > 0){
$main_content .= '<form action = "" method="post"><select name="player">';
foreach($account_players as $acc_player){
if ($acc_player->getCustomField('sell') == 0){
$main_content .= '<option name="'.$acc_player.'">'.$acc_player.'</option>';
}
}
$main_content .= '</select></br>Ile punkt?w premium ma kosztowa? posta?:<br> <input type="text" name="pp"><br><input type="submit" value="Sprzedaj posta?!" name="sub"></form>';
}
else{
$errors[] = 'Nie masz ?adnej postaci.';
}
$main_content .= '</center></fieldset>';
$list_sell_char = $SQL->query('SELECT id, name, level, vocation, promotion, pp_sell FROM players WHERE sell = 1 AND group_id < 2 ORDER BY level')->fetchAll();
if ($list_sell_char){
$counter = 0;
$main_content .='<TABLE BORDER=0 CELLPADDING=4 CELLSPACING=1 WIDTH=100%></TABLE><TABLE BORDER=0 CELLPADDING=4 CELLSPACING=1 WIDTH=100%><TR BGCOLOR="'.$config['site']['vdarkborder'].'"><TD WIDTH=20% CLASS=white><B><center>Name</center></B></TD><TD WIDTH=15% CLASS=white><B><center>Level</center></B></TD><TD WIDTH=25% CLASS=white><b><center>Vocation</center></B></TD><TD WIDTH=15% CLASS=white><b><center>Buy</center></B></TD><TD WIDTH=20% CLASS=white><b><center>Price</center></B></TD></TR>';
foreach($list_sell_char as $sell_char){
$counter++;
if(is_int($counter / 2))
$bgcolor = $config['site']['darkborder'];
else
$bgcolor = $config['site']['lightborder'];
$voc = $player_voc = $vocation_name[0][$sell_char['promotion']][$sell_char['vocation']];
$main_content .= '<tr bgcolor="'.$bgcolor.'"><td><a href="?subtopic=characters&name='.$sell_char['name'].'"><center>'.$sell_char['name'].' </center></a></td><td><center>'.$sell_char['level'].'</center></td><td><center>'.$voc.'</center></td><td><center><a href="?subtopic=buycharacter&id='.$sell_char['id'].'">Buy</a></center></td><td>'.$sell_char['pp_sell'].' premium points!</td>';
}
$main_content .= '</table>';
}
else{
$main_content .= 'Nie ma ?adnej postaci na sprzeda?.';
}
if (isset($_POST['sub'])){
if (is_numeric($_POST['pp'])){
if ($SQL->query('UPDATE players SET sell = true, pp_sell = '.$_POST['pp'].'+100 WHERE name = "'.$_POST['player'].'" LIMIT 1')){
$main_content .= 'Twoja posta? zosta?a dodana do listy.';
}
}
else{
$errors[] = 'Ilo?? punkt?w premium musi by? liczb?!.';
}
}
if (!empty($errors)){
$main_content .= '<div class="SmallBox" > <div class="MessageContainer" > <div class="BoxFrameHorizontal" style="background-image:url('.$layout_name.'/images/content/box-frame-horizontal.gif);" /></div> <div class="BoxFrameEdgeLeftTop" style="background-image:url('.$layout_name.'/images/content/box-frame-edge.gif);" /></div> <div class="BoxFrameEdgeRightTop" style="background-image:url('.$layout_name.'/images/content/box-frame-edge.gif);" /></div> <div class="ErrorMessage" > <div class="BoxFrameVerticalLeft" style="background-image:url('.$layout_name.'/images/content/box-frame-vertical.gif);" /></div> <div class="BoxFrameVerticalRight" style="background-image:url('.$layout_name.'/images/content/box-frame-vertical.gif);" /></div> <div class="AttentionSign" style="background-image:url('.$layout_name.'/images/content/attentionsign.gif);" /></div><b>Wyst?pi?y poni?sze b??dy:</b><br/>';
foreach($errors as $error) {
$main_content .= '<li>'.$error;
}
$main_content .= '</div> <div class="BoxFrameHorizontal" style="background-image:url('.$layout_name.'/images/content/box-frame-horizontal.gif);" /></div> <div class="BoxFrameEdgeRightBottom" style="background-image:url('.$layout_name.'/images/content/box-frame-edge.gif);" /></div> <div class="BoxFrameEdgeLeftBottom" style="background-image:url('.$layout_name.'/images/content/box-frame-edge.gif);" /></div> </div></div><br/>';
}
}
else{
Header('Location: ?subtopic=accountmanagement');
}
$main_content .= '<p align = "right"><small>System created by <a href="http://tibia.net.pl/members/kowol.html">Kowol</a>.</small></p>';
?>
PHP:
$config['site']['char_cost_plus'] = 100; // ile doda punkt?w do ka?dego wystawionej postaci
PHP:
case "buycharacter":
$topic = "Buy Character";
$subtopic = "buycharacter";
include("auctionchar.php");
break;
case "sellchar";
$topic = "Sell character";
$subtopic = "sellchar";
include("sellchar.php");
break;
Code:
case "highscores";
$topic = "Highscores";
$subtopic = "highscores";
include("highscores.php");
break;
7. Przechodzimy do silnika, a nast?pnie do folderu /data/creaturescripts/scripts/ i tworzymy plik sellCheck.lua i uzupe?niamy go poni?szym kodem:
Code:
function onLogin(cid)
local sellquery = db.getResult("SELECT sell FROM players WHERE name = '"..getCreatureName(cid).."' LIMIT 1")
local sell = sellquery:getDataInt("sell")
sellquery:free()
if sell == 1 then
doPlayerPopupFYI(cid, "Twoja postac zostala wystawiona na sprzedaz, nie mozesz sie na nia teraz zalogowac")
doRemoveCreature(cid)
end
return TRUE
end
Code:
<event type="login" name="sellCheck" event="script" value="sellCheck.lua"/>