ich hab gestern mal als ich müde war nach der Arbeit mich an ein "Bank System" dran gesetzt. Dies soll dazu dienen Das die User außerhalb von Ingame sich ein Bank Konto errichten können. In diesem Konto können sie dann von ihren Chars. Yang abheben oder Wieder ihren Chars yang geben. Außerdem können sie untereinander anderen Spielern die Ebenfalls ein Bankkonto besitzen Yang senden, sodass es seinem Hinzugefügt wird. Außerdem ist eine 20 Minütige Auslogg sperre vorhanden.
Ich hatte Ursprünglich vor dieses Script für eine Kleine Summe zu verkaufen, jedoch dacht ich mir ich werde die Basic Funktionen Free rausgeben. Wer die Erweiterungen wie ein Log System für jede Transaktion möchte muss sich leider bei mir melden und es kaufen.
Hier noch ein Screen:
Bitte um Feedback, Tipps, Tricks, Bugs in diesem Thread.
Lieben Gruß.
yym3
Anhang:
QUERY für Datenbank (von der Seite die datenbank verwenden!!! da wo auch psc_log etc ist!!!)
PHP Code:
CREATE TABLE `bank` (
`bank_account_id` int(255) NOT NULL auto_increment,
`user_id` int(50) NOT NULL,
`user_name` varchar(100) NOT NULL,
`user_yang` varchar(500) default NULL,
`user_pin` int(10) NOT NULL,
PRIMARY KEY (`bank_account_id`)
) ENGINE=MyISAM AUTO_INCREMENT=5 DEFAULT CHARSET=latin1;
€dit:
30 Min Sperre...
Quote:
So hab mal eine Kleine Funktion eingebaut.
Wenn man länger als 30 mins ausgeloggt war wird die die last_play umgeändert auf die Aktuelle Zeit bei Allen Chars.
Damit würde auch die 20 minuten sperre ohne probleme laufen.
Die 24h Sperre geht nur mit den Log daten, und da halt ich mich an meinen ersten post. Also Sorry^.
Hier mal der Code für den 30 Min check.
PHP Code:function last_playCheck(){
$GetLastPlay = mysql_query("SELECT last_play FROM player.player WHERE account_id = '".$_SESSION["user_id"]."'");
$lastPlayRow = mysql_fetch_object($GetLastPlay);
$timestamp = time();
$lastPlayTime = strtotime($lastPlayRow->last_play);
$lastPlayDiff = $lastPlayTime+1800;
if($lastPlayDiff <= $timestamp)
{
return true;
}
else
{
return false;
}
}
if(last_playCheck() == true)
{
mysql_query("UPDATE player.player SET last_play = '".date("Y-m-d H:i:s", time())."' WHERE account_id = '".$_SESSION["user_id"]."'");
}
Am besten so über die Andere Funktion posten.
Das wär nun eine Kleine Methode damit man sich so saven kann vor jeglichen Bugs.
Lieben Gruß.
yym3
€dit2:
24H Lock, V2 (Nicht die Originale)
Quote:
So für alle die Interesse gezeigt haben an diesem Script.
Ich habe nun eine Alternative zu meinem Original 24H Lock gebastelt.
Diese Erfüllt soweit wie es meine Testergebnisse gezeigt haben den Selben effekt.
Der Nachteil ist halt das es keine Log Daten gibt und es auch nicht meine Originale 24H lock ist sondern nur eine Alternative.
Diese Funktioniert mit 2 Session variablen.
Sobald man die erste und letzte Aktion aufruft, und auch erfolgreich ausführt wird das Bank Konto gesperrt für 24 stunden. Da ich es mit den Sessions nicht testen kann ob es mit 24 Std klappt kann ich nichts genaues sagen, jedoch klappt es für mehr als ne Stunde und das ist ja auch ein Gutes Ergebnis.
Hier die neue bank.php im pages ordner:
Nun habt ihr eine 20 Minütige Wartezeit, ein 30 Min Lock sowie 24h Lock.PHP Code:<?PHP
if(isset($_SESSION['user_admin']) && checkInt($_SESSION['user_admin']) && $_SESSION['user_admin']>=0) {
$sqlArray = mysql_fetch_array(mysql_query("SELECT * FROM ".SQL_HP_DB.".bank WHERE user_id = '".$_SESSION["user_id"]."'"));
$getKontoDetails = mysql_fetch_array(mysql_query("SELECT * FROM ".SQL_HP_DB.".bank"));
$sqlGet = mysql_fetch_array(mysql_query("SELECT * FROM ".SQL_HP_DB.".bank WHERE user_id = '".$_SESSION["user_id"]."'"));
$aktuelleDatum = date("Y-m-d H:i:s", time());
function last_playCheck(){
$GetLastPlay = mysql_query("SELECT last_play FROM player.player WHERE account_id = '".$_SESSION["user_id"]."'");
$lastPlayRow = mysql_fetch_object($GetLastPlay);
$timestamp = time();
$lastPlayTime = strtotime($lastPlayRow->last_play);
$lastPlayDiff = $lastPlayTime+1800;
if($lastPlayDiff <= $timestamp)
{
return true;
}
else
{
return false;
}
}
if(last_playCheck() == true)
{
mysql_query("UPDATE player.player SET last_play = '".date("Y-m-d H:i:s", time())."' WHERE account_id = '".$_SESSION["user_id"]."'");
}
function zeitBerechnen($sCharName){
$sqlLastPlay = mysql_fetch_object(mysql_query("SELECT last_play FROM player.player WHERE account_id = '".$_SESSION["user_id"]."' and name ='".$sCharName."'"));
$timestamp = time();
$lastPlayZeit = strtotime($sqlLastPlay->last_play);
$zeitDiff = $lastPlayZeit+(60*20);
if($zeitDiff >= $timestamp)
{
return true;
}
else
{
return false;
}
}
// Konto einrichtungs Funktion
if(isset($_POST["registerAccount"]) && $_POST["registerAccount"] == "Konto Erstellen")
{
$pin = mt_rand(1000, 9999);
$sqlCmd = mysql_query("INSERT INTO ".SQL_HP_DB.".bank (user_id, user_name, user_yang, user_pin) VALUES ('".$_SESSION["user_id"]."', '".$_SESSION["user_name"]."', '0', '".$pin."')");
echo "Konto erfolgreich erstellt.<br />";
echo "Ihre Pin: ".$pin."<br/>";
echo "Bitte merken Sie sich ihre Pin gut, Sie können diese <b>nicht</b> zurücksetzen.";
}
if($sqlArray["user_id"] != $_SESSION["user_id"])
{
echo'<h2>Bank</h2>';
echo'<p>Hier können Sie sich ein "Bank-Konto" erstellen, um ihr Yang extern (nicht im Spiel) zu Lagern.<br />
Desweiteren können Sie einen Yang Transfer an einen Anderen User machen. Dieser muss aber ein "Bank-Konto" besitzen.</p>';
?>
<form method="post" action="">
<table>
<tr>
<td class="topLine">
<input type="submit" name="registerAccount" value="Konto Erstellen" />
</td>
</tr>
</table>
</form>
<?PHP
}
else
{
echo'<h2>Bank</h2>';
echo'<p>Sie können hier Ihren Konto Status abrufen, Ihr konto "auffüllen" sowie Yang an andere User Überweisen.<br />
<a href="index.php?s=bank&konto=fill">Konto Aufüllen</a> • <a href="index.php?s=bank&send_yang=true">Yang Versenden</a> • <a href="index.php?s=bank&fill_char_yang=true">Yang vom Char. auffüllen</a></p>';
echo '<table><tr><th class="topLine">Kontostand: </th><td class="tdunkel">'.$sqlGet["user_yang"].' Yang</td><th class="topLine">Konto Nr.: </th><td class="thell">'.$sqlGet["bank_account_id"].'</td></tr>';
// Konto Auffüll Funktion
if(isset($_GET["konto"]) && $_GET["konto"] == "fill")
{
if(isset($_POST["addYang"]) && $_POST["addYang"] == "Konto Aufladen")
{
$charName = mysql_real_escape_string(trim(strip_tags($_POST["charName"])));
$yangMenge = mysql_real_escape_string(trim(strip_tags($_POST["yangMenge"])));
$pinCheck = mysql_real_escape_string(trim(strip_tags($_POST["pinCode"])));
$sqlChar = mysql_fetch_array(mysql_query("SELECT * FROM player.player WHERE account_id = '".$_SESSION['user_id']."' and name = '".$charName."'"));
if($charName != "")
{
if($yangMenge != "")
{
$difBerechnen = $sqlChar["gold"] - $yangMenge;
if($difBerechnen <= 0)
{
echo 'Sie besitzten nicht genug Yang.';
}
else
{
if($pinCheck == $sqlGet["user_pin"])
{
if(zeitBerechnen($charName) == true)
{
echo'Sie sind noch keine 20 Minuten ausgeloggt.';
}
else
{
if($_SESSION["bank_lock_1"] >= time())
{
echo'Sie müssen Leider 1 Tag warten um die Aktion zu wiederholen.';
}
else
{
$addYang = mysql_query("UPDATE ".SQL_HP_DB.".bank SET user_yang = user_yang+'".$yangMenge."' WHERE user_id = '".$_SESSION["user_id"]."' and user_name = '".$_SESSION["user_name"]."'");
$accYangNehmen = mysql_query("UPDATE player.player SET gold = gold-'".$yangMenge."' WHERE name = '".$charName."' and account_id = '".$_SESSION["user_id"]."'");
$_SESSION["bank_lock_1"] = time()+86400;
$neuesYang = $sqlGet["user_yang"]+$yangMenge;
echo 'Konto erfolgreich aufgefüllt. Ihr Kontostand ist nun: <b>'.$neuesYang.'</b>';
}
}
}
else
{
echo 'Pin ist Falsch.';
}
}
}
}
}
echo '<tr style="display:none;"><td><form method="post" action=""></td></tr>';
echo "<tr><th class='topLine' colspan='4'>Konto Füllen:</td></tr>";
echo '<tr><th class="topLine">Char. Namen eingeben:</th><td class="thell" colspan="3"><input type="text" name="charName" /></td></tr>';
echo '<tr><th class="topLine">Yang Menge eingeben:</th><td class="tdunkel" colspan="3"><input type="text" name="yangMenge" /></td></tr>';
echo '<tr><th class="topLine">Pin:</th><td class="thell" colspan="3"><input type="text" name="pinCode" /></td></tr>';
echo '<tr><th class="topLine" colspan="4"><input type="submit" name="addYang" value="Konto Aufladen" /></th></tr>';
echo '<tr style="display:none;"><td></form></td></tr>';
}
// Yang Send Funktion
if(isset($_GET["send_yang"]) && $_GET["send_yang"] == "true")
{
if(isset($_POST["sendYangToUser"]) && $_POST["sendYangToUser"] == "Yang Versenden")
{
$eKontoNr = mysql_real_escape_string(strip_tags(trim($_POST["eKontoNr"])));
$eYangBetrag = mysql_real_escape_string(strip_tags(trim($_POST["eYangBetrag"])));
$mPin = mysql_real_escape_string(strip_tags(trim($_POST["mPin"])));
if($eKontoNr != "")
{
if($eKontoNr == $getKontoDetails["bank_account_id"])
{
if($eYangBetrag != "")
{
$difBerechnen2 = $sqlGet["user_yang"] - $eYangBetrag;
if($difBerechnen2 >= 0)
{
if($mPin == $sqlArray["user_pin"])
{
$sendYangToUser = mysql_query("UPDATE ".SQL_HP_DB.".bank SET user_yang = user_yang+'".$eYangBetrag."' WHERE bank_account_id = '".$eKontoNr."'");
$deleteUserYang = mysql_query("UPDATE ".SQL_HP_DB.".bank SET user_yang = user_yang-'".$eYangBetrag."' WHERE user_id = '".$_SESSION["user_id"]."'");
echo 'Sie haben Erfolgreich: <b>'.$eYangBetrag.'</b> versendet.';
}
else
{
echo "Ihr Pin ist Falsch.";
}
}
else
{
echo 'Sie haben nicht genug Yang.';
}
}
else
{
echo 'Es wurde kein Yangbetrag angegeben zum Versenden.';
}
}
else
{
echo 'Das angegebene Konto existiert nicht.';
}
}
else
{
echo 'Es wurde kein Konto angegeben zum Versenden.';
}
}
echo '<tr style="display:none;"><td><form method="post" action=""></td></tr>';
echo '<tr><th class="topLine" colspan="4">Yang versenden:</th></tr>';
echo '<tr><th class="topLine">Konto Nr. vom Empfänger:</th><td class="thell" colspan="3"><input type="text" name="eKontoNr" /></td></tr>';
echo '<tr><th class="topLine">Yang Betrag:</th><td class="tdunkel" colspan="3"><input type="text" name="eYangBetrag" /></td></tr>';
echo '<tr><th class="topLine">Pin:</th><td class="thell" colspan="3"><input type="text" name="mPin" /></td></tr>';
echo '<tr><th class="topLine" colspan="4"><input type="submit" name="sendYangToUser" value="Yang Versenden" /></th></tr>';
echo '<tr style="display:none;"><td></form></td></tr>';
}
// Yang auffüll funktion
if(isset($_GET["fill_char_yang"]) && $_GET["fill_char_yang"] == "true")
{
if(isset($_POST["loadYang"]) && $_POST["loadYang"] == "Yang Aufladen")
{
$lCharName = mysql_real_escape_string(strip_tags(trim($_POST["lCharName"])));
$lYangBetrag = mysql_real_escape_string(strip_tags(trim($_POST["lYangBetrag"])));
$lPin = mysql_real_escape_string(strip_tags(trim($_POST["lPin"])));
if($lCharName != "")
{
if($lYangBetrag != "")
{
$difBerechnen3 = $sqlGet["user_yang"] - $lYangBetrag;
if($difBerechnen3 >= 0)
{
if($lPin == $sqlArray["user_pin"])
{
if(zeitBerechnen($lCharName) == true)
{
echo'Sie sind noch keine 20 Minuten ausgeloggt.';
}
else
{
if($_SESSION["bank_lock_3"] >= time())
{
echo'Sie müssen Leider 1 Tag warten um die Aktion zu wiederholen.';
}
else
{
$updateChar = mysql_query("UPDATE player.player SET gold = gold+'".$lYangBetrag."' WHERE account_id = '".$_SESSION["user_id"]."' and name = '".$lCharName."'");
$updateBank = mysql_query("UPDATE ".SQL_HP_DB.".bank SET user_yang = user_yang-'".$lYangBetrag."' WHERE user_id = '".$_SESSION["user_id"]."'");
$_SESSION["bank_lock_3"] = time()+86400;
}
}
}
}
else
{
echo 'Sie besitzen nicht genug Yang.';
}
}
else
{
echo 'Yang Betrag darf nicht Leer sein.';
}
}
else
{
echo 'Char Name darf nicht Leer sein.';
}
}
echo '<tr style="display:none;"><td><form method="post" action=""></td></tr>';
echo '<tr><th class="topLine" colspan="4">Yang vom Char. Auffüllen:</th></tr>';
echo '<tr><th class="topLine">Char. Name:</th><td class="thell" colspan="3"><input type="text" name="lCharName" /></td></tr>';
echo '<tr><th class="topLine">Yang Betrag:</th><td class="tdunkel" colspan="3"><input type="text" name="lYangBetrag" /></td></tr>';
echo '<tr><th class="topLine">Pin:</th><td class="thell" colspan="3"><input type="text" name="lPin" /></td></tr>';
echo '<tr><th class="topLine" colspan="4"><input type="submit" name="loadYang" value="Yang Aufladen" /></th></tr>';
echo '<tr style="display:none;"><td></form></td></tr>';
}
echo '</table>';
}
}
else {
echo'<p class="meldung">Sie müssen für diesen Bereich angemeldet sein.</p>';
}
?>
Also zusammenfassung wie das Script nun Funktioniert sobald man ein Konto hat:
Das Script setzt ganz am anfang die Aktuelle Zeit als Last_play falls die Differenz höher als 30 Minuten ist, da man so leichter Yang Buggen kann. Außerdem wird überprüft ob man 20 Minuten Ausgeloggt ist, ansonsten kann man kein Yang Transfer machen. Zum Schluss wird gecheckt ob 24h vergangen sind, jedoch befürchte ich das es bei den Session Variablen klappt das man genau 24h Sperrt, jedoch eine Stunde ist ja auch eine Supper Zeit. Was euch jetzt fehlt ist die Log Tabelle. Die die sich auskennen können es selber schreiben ist ja kein problem, die anderen müssen es leider wie ich im first post sagte kaufen für eine sehr geringe summe (10€). Somit kriegen diejenigen mein bank script mit der Richtigen 24h Lock + die Log Query + die Ansicht für die Logs.
Lieben Gruß.
yym3
PS: Please Feedback.






