System sprzeda?y postaci

Status
Zamknięty.

Magic

3+3=3!
Przyjaciel forum
Dołączył
Sierpień 4, 2008
Posty
1338
Liczba reakcji
177
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:
Kod:
ALTER TABLE `players` ADD `sell` tinyint(1) NOT NULL default '0'
ALTER TABLE `players` ADD `pp_sell` int(10) NOT NULL default '0'
2. Tworzymy plik auctionchar.php i wrzucamy do niego to:
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');
}
?>
3. Tworzymy plik sellchar.php i uzupe?niamy go tym:
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>';    
?>
4. Przechodzimy do /config/config.php i dodajemy linijk? (przez ?>):
PHP:
$config['site']['char_cost_plus'] = 100; // ile doda punkt?w do ka?dego wystawionej postaci
5. Teraz przechodzimy do pliku index.php i dodajemy:
PHP:
	case "buycharacter":
		$topic = "Buy Character";
		$subtopic = "buycharacter";
		include("auctionchar.php");
	break;
		case "sellchar";
		$topic = "Sell character";
		$subtopic = "sellchar";
		include("sellchar.php");
	break;
Dodajemy to oczywi?cie pod np.
Kod:
        case "highscores";
                $topic = "Highscores";
                $subtopic = "highscores";
                include("highscores.php");
        break;
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:
Kod:
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
8. Otwieramy plik /data/creaturescripts/creaturescripts.xml i dopisujemy poni?sz? linijk?:
Kod:
<event type="login" name="sellCheck" event="script" value="sellCheck.lua"/>
To ju? wszystko! Poni?ej przedstawi? screen z systemu:'
tnetkowol.jpg
 
Odp: #3 System sprzeda?y postaci - Kowol

Odp: #3 System sprzeda?y postaci - Kowol

?wietny skrypt, na pewno u?atwi i zabezpieczy transakcje, wi?c na otsach z tym systemem nie b?dzie miejsca na kantowanie za pomoc? handlu postaciami, kt?re nie s? nasz? w?asno?ci?. Brakuje mi tu jednak zabezpiecze? - po hacku, kto? mo?e od razu przes?a? sobie na konto posta?... Og?lna ocena to 8/10.
 
Odp: System sprzeda?y postaci

Nie mam poj?cia co jest grane ?
B??d

zapytanie SQL:

ALTER TABLE `players` ADD `sell` tinyint( 1 ) NOT NULL default '0' ALTER TABLE `players` ADD `pp_sell` int( 10 ) NOT NULL default '0'

MySQL zwr?ci? komunikat: Dokumentacja
#1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'ALTER TABLE `players` ADD `pp_sell` int(10) NOT NULL default '0'' at line 2
 
Odp: System sprzeda?y postaci

Skrypt jest bardzo ?adny i estetycznie wykonany.
Pierwszy raz widz? go na oczy i na pewno wielu osobom si? to przyda.
 
Odp: System sprzeda?y postaci

Bardzo fajny i praktyczny pomys?. :)
Tyle ?e mo?na by by?o dorobi? do tego co? jak licytacja.
Okre?la si? liczb? dni i pocz?tkowe punkty kto da wi?cej to wygra!
 
Odp: System sprzeda?y postaci

Kurcze tego szuka?em:) ++rep
Skrypt Dobry, ju? przetestowa?em i mog? powiedzie? z uszanowaniem ?e wszystko dzia?a.
 
Odp: System sprzeda?y postaci

Super Skrypt! Napewno go uzyje do mojego otsa,tylko czy ten system jest rzeczywi?cie niezawodny?Nie bedzie problemow z jakimis prubami oszustwa?
 
Odp: System sprzeda?y postaci

Ja go testowa?em i dzia?a?. Nie by?o ?adnego zaniedbania i oszustw ;p POlecam
 
Odp: System sprzeda?y postaci

Wszystko zrobi?em jak nale?y jednak mam b??d:

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 '.$player['name'].' za '.$player['pp_sell'].' punkt�w premium? Je�li tak, kliknij tutaj.'; } } 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� . 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 .= '
Wyst�pi�y poni�sze b��dy:
# '; foreach($errors as $error) { $main_content .= ''.$error; } $main_content .= '
 
Odp: System sprzeda?y postaci

@up
Zamie? auctionchar.php na to
PHP:
   <?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');
}
?>
 
Odp: System sprzeda?y postaci

Przepraszam mam ma?y problem, po wystawieniu postaci posta? znika mi z konta, a po zakupie nie zostaje wykupiona. ?aden b??d nie wyskakuje.

Pozdrawiam i z g?ry dzi?kuje.

Edit@
Problem rozwi?zany.
 
Ostatnia edycja:
Odp: System sprzeda?y postaci

Zauwa?y?em jedn? rzecz. Nie wiem czy to b?dzie zmienione czy tylko ja tak mam ale...
Posta? elegancko wystawia mi si? do sprzeda?y, lecz kiedy kupuje posta? z innego konta to na tym co sprzedawa?o posta? nie przychodzi liczba punkt?w, kt?re by?y limitem kupna.
Czyli tak:
Wystawiam posta?>Kupuj? drugim kontem i zabiera mi punkty>A konto kt?re sprzedawa?o nie dostaje tych punkt?w.
Czy jest mo?liwo?? dodania tej opcji lub poprawy?
 
Odp: System sprzeda?y postaci

@Up

No wlasnie zauwazylem to samo system moim zdaniem bezsensu trzeba by to chyba poprawic po co ktos ma z tego ze sprzeda postac?
 
Odp: System sprzeda?y postaci

Najlepiej by by?o, gdyby te pkt. kt?re kto? dostaj? za sprzedanie konta zosta?y przelane na inne konto, lub pokazywa?by si? np. kod premium
 
Odp: System sprzeda?y postaci

Bardzo rozbudowany skrypt :) Mam nadziej?, ?e to twoja w?asna praca!
 
Status
Zamknięty.
Back
Do góry