Willkommen zu meinem S&F PServer Handbuch. Hier erkläre ich euch einige Dinge, die ihr vielleicht bei eurem Server brauchen werdet 
Wie ändert man das Startgold und die Startpilze?
Wie erhöht man die gewonnene EXP für eine Mission?
Wie ändert man den Preis aller Items?
Ändern der benötigten EXP pro Level
Ändern der trinkbaren Bieranzahl:
Preise der Mounts ändern:
Wie editiert man Namen der Items und sonstige Texte?
Wie fügt man einen zweiten und dritten Bonus in Items ein?
Wie ändert man die Datenbank auf eine neue?
Wie verkürzt man die Arena-Wartezeit?
Wie verändert man die Kosten für das Überspringen der Wartezeit der Arena?
Wie ändert man die Anzahl des Goldes die man im Dungeon gewinnt?
Wie ändert man die Anzahl der im Dungeon erhaltenen EXP?
Wie ändert man den Gewinn der Stadtwache?
Wie ändert man die Anzahl der Stats die pro Klick vergeben werden?
Funktionierender Gildenchat [By endless-money]
Wir gehen in der Datenbank auf user_data und klicken oben im Menü auf Struktur.
Mushroom = Startpilzanzahl
Silver = Silberanzahl zum Start [100 = 1 Gold]
Mushroom = Startpilzanzahl
Silver = Silberanzahl zum Start [100 = 1 Gold]
Wie erhöht man die gewonnene EXP für eine Mission?
In der Datei "request.php" springen wir zur Zeile 2135 und suchen return ($lvl * 200);
Wie ändert man den Preis aller Items?
In der Datei "request.php" springen wir zur Zeile 1824 und suchen
"gold" => "10000",
Gold - Preis aller Items [100 = 1 Gold]
"gold" => "10000",
Gold - Preis aller Items [100 = 1 Gold]
Ändern der benötigten EXP pro Level
In der Datei "request.php" springen wir zur Zeile 2163 und suchen
$LEVELS = array
400 = Benötigte Exp für Level 1
900 = Benötigte Exp für Level 2
usw.
Ich selbst habe hier 1500 Levelzeilen released, wer sie möchte darf zugreifen

$LEVELS = array
400 = Benötigte Exp für Level 1
900 = Benötigte Exp für Level 2
usw.
Ich selbst habe hier 1500 Levelzeilen released, wer sie möchte darf zugreifen

Ändern der trinkbaren Bieranzahl:
In der Datei "request.php" springen wir zur Zeile 7438 und suchen
if ($db_data ['beers'] >= 10) {
10 = Anzahl der Biere die man trinken kann
if ($db_data ['beers'] >= 10) {
10 = Anzahl der Biere die man trinken kann
Preise der Mounts ändern:
In der Datei "request.php" springen wir zur Zeile 3923 und suchen
switch ($mount) {
Silver = Preis in Silber [100 = 1 Gold]
Mushroom = Preis in Pilzen
switch ($mount) {
Silver = Preis in Silber [100 = 1 Gold]
Mushroom = Preis in Pilzen
Wie editiert man Namen der Items und sonstige Texte?
Im Ordner "lang" öffnen wir sfgame_de.txt und editieren ihn.
Wie fügt man einen zweiten und dritten Bonus in Items ein?
In der Datei "request.php" springen wir zur Zeile 1902 und suchen
// generate stats
Bestenfalls ändern wir auf:
$stat_type = rand ( 1, 3 ); //Generiert Bonus 1 (Nur Stärke, Geschick und Intelligenz)
$stat_type_2 = rand ( 4, 4 ); //Generiert Bonus 2 (Nur Ausdauer)
$stat_type_3 = rand ( 5, 5 ); //Generiert Bonus 3 (Nur Glück)
$m = mt_rand ( 900, 1100 ) / 1000;
$stat_val = round ( $lvl * 3.5 * $m ); //Rechnet Stats für Bonus 1 (level x 3.5 x oben definiertes $m)
$stat_val_2 = round ( $lvl * 3 * $m ); //Rechnet Stats für Bonus 2 (level x 3 x oben definiertes $m)
$stat_val_3 = round ( $lvl * 2.5 * $m ); //Rechnet Stats für Bonus 3 (level x 2.5 x oben definiertes $m)
$item ['atr_type_1'] = $stat_type;
$item ['atr_val_1'] = $stat_val;
$item ['atr_type_2'] = $stat_type_2;
$item ['atr_val_2'] = $stat_val_2;
$item ['atr_type_3'] = $stat_type_3;
$item ['atr_val_3'] = $stat_val_3;
return $item;
// generate stats
Bestenfalls ändern wir auf:
$stat_type = rand ( 1, 3 ); //Generiert Bonus 1 (Nur Stärke, Geschick und Intelligenz)
$stat_type_2 = rand ( 4, 4 ); //Generiert Bonus 2 (Nur Ausdauer)
$stat_type_3 = rand ( 5, 5 ); //Generiert Bonus 3 (Nur Glück)
$m = mt_rand ( 900, 1100 ) / 1000;
$stat_val = round ( $lvl * 3.5 * $m ); //Rechnet Stats für Bonus 1 (level x 3.5 x oben definiertes $m)
$stat_val_2 = round ( $lvl * 3 * $m ); //Rechnet Stats für Bonus 2 (level x 3 x oben definiertes $m)
$stat_val_3 = round ( $lvl * 2.5 * $m ); //Rechnet Stats für Bonus 3 (level x 2.5 x oben definiertes $m)
$item ['atr_type_1'] = $stat_type;
$item ['atr_val_1'] = $stat_val;
$item ['atr_type_2'] = $stat_type_2;
$item ['atr_val_2'] = $stat_val_2;
$item ['atr_type_3'] = $stat_type_3;
$item ['atr_val_3'] = $stat_val_3;
return $item;
Wie ändert man die Datenbank auf eine neue?
In der Datei "request.php" springen wir zur Zeile 5277 und suchen
$db = new PDO ( 'mysql:host=localhost;dbname=sfgame;charset=utf8', 'root', 'test');
localhost = Name der Datenbank
root = Name des Users
test = Passwort
$db = new PDO ( 'mysql:host=localhost;dbname=sfgame;charset=utf8', 'root', 'test');
localhost = Name der Datenbank
root = Name des Users
test = Passwort
Wie verkürzt man die Arena-Wartezeit?
In der Datei "request.php" springen wir zur Zeile 5918 und suchen
$time += 600;
600 = Wartezeit vor nächstem Angriff [60 = 1 Minute]
$time += 600;
600 = Wartezeit vor nächstem Angriff [60 = 1 Minute]
Wie verändert man die Kosten für das Überspringen der Wartezeit der Arena?
In der Datei "request.php" springen wir zur Zeile 5912 und suchen
$p1 ['mushroom'] = $p1 ['mushroom'] - 1;
1 = kosten in Pilzen
$p1 ['mushroom'] = $p1 ['mushroom'] - 1;
1 = kosten in Pilzen
Wie ändert man die Anzahl des Goldes die man im Dungeon gewinnt?
In der Datei "request.php" springen wir zur Zeile 788 und suchen
$this->silver = 1000000000;
100000000 = anzahl Gold [100 = 1 Gold]
$this->silver = 1000000000;
100000000 = anzahl Gold [100 = 1 Gold]
Wie ändert man die Anzahl der im Dungeon erhaltenen EXP?
In der Datei "request.php" springen wir zur Zeile 786 und suchen
$this->exp = $exp * 2;
2 = Anzahl mal die $exp genommen wird [Je höher desto mehr]
$this->exp = $exp * 2;
2 = Anzahl mal die $exp genommen wird [Je höher desto mehr]
Wie ändert man den Gewinn der Stadtwache?
In der Datei "request.php" springen wir zur Zeile 4107 und suchen
return 10000000;
100000000 = Anzahl Gold pro Stunde [100 = 1 Gold]
return 10000000;
100000000 = Anzahl Gold pro Stunde [100 = 1 Gold]
Wie ändert man die Anzahl der Stats die pro Klick vergeben werden?
In der Datei "request.php" springen wir zur Zeile 6206 und suchen
$qry->bindParam ( ':statval', $a = 1 + $db_data ['stat'] );
1 = Anzahl der Stats die pro Klick dazugegeben werden
$qry->bindParam ( ':statval', $a = 1 + $db_data ['stat'] );
1 = Anzahl der Stats die pro Klick dazugegeben werden
Funktionierender Gildenchat [By endless-money]
case $ACT_GET_CHAT_HISTORY :
// Get guild id
$qry = $db->prepare ( "SELECT guild_id FROM user_data WHERE ssid = :ssid" );
$qry->bindParam ( ':ssid', $SSID );
$qry->execute ();
$gid = $qry->fetchAll ();
// get last 5 messages
$qry2 = $db->prepare ( "SELECT * FROM guild_chat WHERE guild_id = :gid ORDER BY time DESC LIMIT 5");
$qry2->bindParam ( ':gid', $gid [0] ['guild_id'] );
$qry2->execute ();
$gcdata = $qry2->fetchAll ();
// construct message
$msg = array();
$resto = array();
foreach($gcdata as $row)
{
$qry = $db->prepare ( "SELECT user_name FROM user_data WHERE user_id = :sid" );
$qry->bindParam ( ':sid', $row['sender_id'] );
$qry->execute ();
$una = $qry->fetchAll();
// pretty time
$pt = date('h:i',$row["time"]);
$msg[] = $pt . " " . $una[0]['user_name'].": " . urldecode($row['msg']);
$resto[] = $row['msg_id'];
}
$msgs = implode("/", $msg);
$pitm = ";".$gcdata [0] ['msg_id'].";;";
$rest = implode("/", $resto) . "/";
$ret = array (
"161".$msgs.$pitm.$rest
);
break;
case $ACT_SEND_CHAT :
$data = explode ( ';', $action_extra );
$msg = $data[0];
$time = new DateTime ();
$time = $time->getTimestamp ();
$recid = "0";
$qry = $db->prepare ( "SELECT user_name, user_id, guild_id FROM user_data WHERE ssid = :ssid" );
$qry->bindParam ( ':ssid', $SSID );
$qry->execute ();
$ids = $qry->fetchAll ();
$qry = $db->prepare ("INSERT INTO guild_chat(guild_id, sender_id, reciver_id, time, msg)
VALUES(:guildid, :uid, :recid, :time, :msg)");
$qry->bindParam ( ':guildid', $ids [0] ['guild_id'] );
$qry->bindParam ( ':uid', $ids [0] ['user_id'] );
$qry->bindParam ( ':recid', $recid );
$qry->bindParam ( ':time', $time );
$qry->bindParam ( ':msg', $msg );
$qry->execute ();
$ret = array ("162".$ids [0] ['user_name'].":" . $msg . ";" . $recid );
break;
// Get guild id
$qry = $db->prepare ( "SELECT guild_id FROM user_data WHERE ssid = :ssid" );
$qry->bindParam ( ':ssid', $SSID );
$qry->execute ();
$gid = $qry->fetchAll ();
// get last 5 messages
$qry2 = $db->prepare ( "SELECT * FROM guild_chat WHERE guild_id = :gid ORDER BY time DESC LIMIT 5");
$qry2->bindParam ( ':gid', $gid [0] ['guild_id'] );
$qry2->execute ();
$gcdata = $qry2->fetchAll ();
// construct message
$msg = array();
$resto = array();
foreach($gcdata as $row)
{
$qry = $db->prepare ( "SELECT user_name FROM user_data WHERE user_id = :sid" );
$qry->bindParam ( ':sid', $row['sender_id'] );
$qry->execute ();
$una = $qry->fetchAll();
// pretty time
$pt = date('h:i',$row["time"]);
$msg[] = $pt . " " . $una[0]['user_name'].": " . urldecode($row['msg']);
$resto[] = $row['msg_id'];
}
$msgs = implode("/", $msg);
$pitm = ";".$gcdata [0] ['msg_id'].";;";
$rest = implode("/", $resto) . "/";
$ret = array (
"161".$msgs.$pitm.$rest
);
break;
case $ACT_SEND_CHAT :
$data = explode ( ';', $action_extra );
$msg = $data[0];
$time = new DateTime ();
$time = $time->getTimestamp ();
$recid = "0";
$qry = $db->prepare ( "SELECT user_name, user_id, guild_id FROM user_data WHERE ssid = :ssid" );
$qry->bindParam ( ':ssid', $SSID );
$qry->execute ();
$ids = $qry->fetchAll ();
$qry = $db->prepare ("INSERT INTO guild_chat(guild_id, sender_id, reciver_id, time, msg)
VALUES(:guildid, :uid, :recid, :time, :msg)");
$qry->bindParam ( ':guildid', $ids [0] ['guild_id'] );
$qry->bindParam ( ':uid', $ids [0] ['user_id'] );
$qry->bindParam ( ':recid', $recid );
$qry->bindParam ( ':time', $time );
$qry->bindParam ( ':msg', $msg );
$qry->execute ();
$ret = array ("162".$ids [0] ['user_name'].":" . $msg . ";" . $recid );
break;
//Update: 29.06.2014
Statistiken ab 15.000+ kostenlos - Der Fix!
Wir ersetzen die Zeilen von function getStatCost($class, $race, $stat_index, $stat) { bis return $TrueAttPreis [$stat];
} mit:
function getStatCost($class, $race, $stat_index, $stat)
{
$base = loadDefaultStats ( $class, $race );
// var_dump($base, $stat);
$stat -= $base [$stat_index - 1];
// STAT COST
$attPriceLimitation = false;
$GoldKurve = array (
0,
25,
50,
75
);
// generate price until 15k
// after 15k it's always 10m
// fix and performanceboost by jessi
if($stat <= 15000)
{
$TrueAttPreis = array ();
for($i = 4; $i <= 15000; $i ++)
{
$GoldKurve [$i] = ((( int ) ($GoldKurve [($i - 1)]) + ( int ) (($GoldKurve [(($i / 2))] / 3))) + ( int ) (($GoldKurve [(( int ) ($i / 3))] / 4)));
$GoldKurve [$i] = ( int ) (($GoldKurve [$i] / 5));
$GoldKurve [$i] = ($GoldKurve [$i] * 5);
}
for($i = 0; $i <= 15000; $i ++)
{
$TrueAttPreis [$i] = $GoldKurve [( int ) ((1 + ($i / 5)))];
}
for($i = 0; $i < 14996; $i ++)
{
if ($attPriceLimitation)
{
$TrueAttPreis [$i] = 1000000000; // 0x3B9ACA00;
}
else
{
$TrueAttPreis [$i] = ((((( int ) ($TrueAttPreis [$i]) + ($TrueAttPreis [($i + 1)])) + ( int ) ($TrueAttPreis [($i + 2)])) + ( int ) ($TrueAttPreis [($i + 3)])) + ( int ) ($TrueAttPreis [($i + 4)]));
$TrueAttPreis [$i] = ( int ) (($TrueAttPreis [$i] / 5));
$TrueAttPreis [$i] = ( int ) (($TrueAttPreis [$i] / 5));
$TrueAttPreis [$i] = ( int ) (($TrueAttPreis [$i] * 5));
if ($TrueAttPreis [$i] > 1000000000)
{
$TrueAttPreis [$i] = 1000000000;
//$attPriceLimitation = true;
}
}
}
$i = 1;
}
else
{ // so skip the loop and give out 10m
$TrueAttPreis [$stat] = 1000000000;
}
return $TrueAttPreis [$stat];
}
} mit:
function getStatCost($class, $race, $stat_index, $stat)
{
$base = loadDefaultStats ( $class, $race );
// var_dump($base, $stat);
$stat -= $base [$stat_index - 1];
// STAT COST
$attPriceLimitation = false;
$GoldKurve = array (
0,
25,
50,
75
);
// generate price until 15k
// after 15k it's always 10m
// fix and performanceboost by jessi
if($stat <= 15000)
{
$TrueAttPreis = array ();
for($i = 4; $i <= 15000; $i ++)
{
$GoldKurve [$i] = ((( int ) ($GoldKurve [($i - 1)]) + ( int ) (($GoldKurve [(($i / 2))] / 3))) + ( int ) (($GoldKurve [(( int ) ($i / 3))] / 4)));
$GoldKurve [$i] = ( int ) (($GoldKurve [$i] / 5));
$GoldKurve [$i] = ($GoldKurve [$i] * 5);
}
for($i = 0; $i <= 15000; $i ++)
{
$TrueAttPreis [$i] = $GoldKurve [( int ) ((1 + ($i / 5)))];
}
for($i = 0; $i < 14996; $i ++)
{
if ($attPriceLimitation)
{
$TrueAttPreis [$i] = 1000000000; // 0x3B9ACA00;
}
else
{
$TrueAttPreis [$i] = ((((( int ) ($TrueAttPreis [$i]) + ($TrueAttPreis [($i + 1)])) + ( int ) ($TrueAttPreis [($i + 2)])) + ( int ) ($TrueAttPreis [($i + 3)])) + ( int ) ($TrueAttPreis [($i + 4)]));
$TrueAttPreis [$i] = ( int ) (($TrueAttPreis [$i] / 5));
$TrueAttPreis [$i] = ( int ) (($TrueAttPreis [$i] / 5));
$TrueAttPreis [$i] = ( int ) (($TrueAttPreis [$i] * 5));
if ($TrueAttPreis [$i] > 1000000000)
{
$TrueAttPreis [$i] = 1000000000;
//$attPriceLimitation = true;
}
}
}
$i = 1;
}
else
{ // so skip the loop and give out 10m
$TrueAttPreis [$stat] = 1000000000;
}
return $TrueAttPreis [$stat];
}
Command /gold -9999999 und /pilze -9999999 fixxen:
Wir gehen zur Zeile indem sich der Code befindet:
// if not enough gold
if ($db_data ['silver'] < $donation ['silver']) {
$ret = array (
$ERR_TOO_EXPENSIVE
);
break;
}
Und fügen den Code obendrüber ein:
if (0 > $donation ['silver']) {
$ret = array (
$ERR_TOO_EXPENSIVE
);
break;
}
if (0 > $donation ['mushroom']) {
$ret = array (
$ERR_TOO_EXPENSIVE
);
break;
}
// if not enough gold
if ($db_data ['silver'] < $donation ['silver']) {
$ret = array (
$ERR_TOO_EXPENSIVE
);
break;
}
Und fügen den Code obendrüber ein:
if (0 > $donation ['silver']) {
$ret = array (
$ERR_TOO_EXPENSIVE
);
break;
}
if (0 > $donation ['mushroom']) {
$ret = array (
$ERR_TOO_EXPENSIVE
);
break;
}
//Update: 02.07.2014
Armor Fix
Füge diese Funktion ein:
function getRealArmor($uid)
{
// experimental fix by Jessi & Crasim
// - what took us so long? -24.06.
$qry = $GLOBALS ['db']->prepare ( "SELECT SUM(dmg_min) as armor FROM `items`
WHERE (slot = 0 AND owner_id = :uid) OR
(slot = 1 AND owner_id = :uid2) OR
(slot = 2 AND owner_id = :uid3) OR
(slot = 3 AND owner_id = :uid4) OR
(slot = 5 AND owner_id = :uid5)" );
$qry->bindParam ( ':uid', $uid );
$qry->bindParam ( ':uid2', $uid );
$qry->bindParam ( ':uid3', $uid );
$qry->bindParam ( ':uid4', $uid );
$qry->bindParam ( ':uid5', $uid );
$qry->execute ();
$armor = $qry->fetchAll ();
if($armor [0] ['armor'] < 1)
$rarmor = 0;
else
$rarmor = $armor [0] ['armor'];
return $rarmor;
}
Ersetze:
$GLOBALS ['ret'] [447] =
in
function loadCharData($db_data)
und
function loadDefaultData()
mit:
$GLOBALS ['ret'] [447] = getRealArmor($db_data ['user_id']);
suche:
function __construct($db_data) {
$this->class = $db_data ['class'];
$this->lvl = $db_data ['lvl'];
füge darunter ein:
$this->uid = $db_data ['user_id'];
suche:
function getArmor($oponent)
und ersetze die $armor - line mit
$armor = getRealArmor($this->uid) / $oponent->getLvl ();
function getRealArmor($uid)
{
// experimental fix by Jessi & Crasim
// - what took us so long? -24.06.
$qry = $GLOBALS ['db']->prepare ( "SELECT SUM(dmg_min) as armor FROM `items`
WHERE (slot = 0 AND owner_id = :uid) OR
(slot = 1 AND owner_id = :uid2) OR
(slot = 2 AND owner_id = :uid3) OR
(slot = 3 AND owner_id = :uid4) OR
(slot = 5 AND owner_id = :uid5)" );
$qry->bindParam ( ':uid', $uid );
$qry->bindParam ( ':uid2', $uid );
$qry->bindParam ( ':uid3', $uid );
$qry->bindParam ( ':uid4', $uid );
$qry->bindParam ( ':uid5', $uid );
$qry->execute ();
$armor = $qry->fetchAll ();
if($armor [0] ['armor'] < 1)
$rarmor = 0;
else
$rarmor = $armor [0] ['armor'];
return $rarmor;
}
Ersetze:
$GLOBALS ['ret'] [447] =
in
function loadCharData($db_data)
und
function loadDefaultData()
mit:
$GLOBALS ['ret'] [447] = getRealArmor($db_data ['user_id']);
suche:
function __construct($db_data) {
$this->class = $db_data ['class'];
$this->lvl = $db_data ['lvl'];
füge darunter ein:
$this->uid = $db_data ['user_id'];
suche:
function getArmor($oponent)
und ersetze die $armor - line mit
$armor = getRealArmor($this->uid) / $oponent->getLvl ();
Tower Helpers
Some calculation that might you help with Tower helpers
public static function calculateWin($pers1, $pers2, $tower_helper1, $tower_helper2, $tower_helper3 ) {
// 0 = nothing | 1 = shield block | 2 = dodge ? | 3 = crit
$logs = array ();
$begin = rand ( 0, 100 ) < 50 ? TRUE : FALSE;
while ( $pers1->getHP () > 0 && $pers2->getHP () > 0 ) {
/*
* if($n>1 && $n<=4) $damage_k = 1.4; if($n>4 && $n<=6) $damage_k = 1.8; if($n>6)$damage_k += 0.4;
*/
if ($begin == FALSE) {
$log1 = array(0,0,0);
}else{
$crit = $pers1->ifCrit ( $pers2->getLvl () );
$hit = SF_Calc::getRandomDPS ( $pers1, $pers2, 0 ) * $crit * $pers2->getArmor ( $pers1 );
$log1 = $pers2->setHit($hit, $crit, $pers1);
}
if (( int ) $pers2->getHP () <= 0) {
$log2 = array(0,0,0);
} else {
$crit = $pers2->ifCrit ( $pers1->getLvl () );
$hit = SF_Calc::getRandomDPS ( $pers2, $pers1, 0 ) * $crit * $pers1->getArmor ( $pers2 );
$log2 = $pers1->setHit($hit,$crit,$pers2);
}
$log1 [0] = $pers1->getHP ();
$log2 [0] = $pers2->getHP ();
array_push ( $logs, $log1, $log2 );
$begin = TRUE;
}
return $logs;
}
private static function getRandomDPS($pers1, $pers2, $n) {
$k = 1; // + ($n - 1) * 0.2;
$dps = rand ( $pers1->WeaponMin () * $k, $pers1->WeaponMax () * $k );
return max(1,ceil ( $dps ));
return round ( $dps * (1 + (($pers1->PrimaryAttr ()) / 10) - $pers1->getRes ( $pers2 )) );
}
}
public static function calculateWin($pers1, $pers2, $tower_helper1, $tower_helper2, $tower_helper3 ) {
// 0 = nothing | 1 = shield block | 2 = dodge ? | 3 = crit
$logs = array ();
$begin = rand ( 0, 100 ) < 50 ? TRUE : FALSE;
while ( $pers1->getHP () > 0 && $pers2->getHP () > 0 ) {
/*
* if($n>1 && $n<=4) $damage_k = 1.4; if($n>4 && $n<=6) $damage_k = 1.8; if($n>6)$damage_k += 0.4;
*/
if ($begin == FALSE) {
$log1 = array(0,0,0);
}else{
$crit = $pers1->ifCrit ( $pers2->getLvl () );
$hit = SF_Calc::getRandomDPS ( $pers1, $pers2, 0 ) * $crit * $pers2->getArmor ( $pers1 );
$log1 = $pers2->setHit($hit, $crit, $pers1);
}
if (( int ) $pers2->getHP () <= 0) {
$log2 = array(0,0,0);
} else {
$crit = $pers2->ifCrit ( $pers1->getLvl () );
$hit = SF_Calc::getRandomDPS ( $pers2, $pers1, 0 ) * $crit * $pers1->getArmor ( $pers2 );
$log2 = $pers1->setHit($hit,$crit,$pers2);
}
$log1 [0] = $pers1->getHP ();
$log2 [0] = $pers2->getHP ();
array_push ( $logs, $log1, $log2 );
$begin = TRUE;
}
return $logs;
}
private static function getRandomDPS($pers1, $pers2, $n) {
$k = 1; // + ($n - 1) * 0.2;
$dps = rand ( $pers1->WeaponMin () * $k, $pers1->WeaponMax () * $k );
return max(1,ceil ( $dps ));
return round ( $dps * (1 + (($pers1->PrimaryAttr ()) / 10) - $pers1->getRes ( $pers2 )) );
}
}
//Update 18.05.2015
Portal
case $ACT_PORTAL_FIGHT_SINGLE :
//portal
$db_data = loadDefaultData ();
// STRUCTURE
//$ret [0] = '3215216960/7103/1791/1770/4384/3909/25172784/2473/5947/2464/5763/3930;4655420/0/0/25172784/561540/3/4405539/0/2/25172784/249880/0/4153589/0/2/25172784/251950/0/3787388/936784/3/24236000/366200/0/2288974/1346645/3/22889354/1498414/3/1706694/765428/0/22123926/582280/0/151549/883898/0/21240028/1555145/3/-661731/1047733/0/20192294/813280/0/;' . $db_data ['user_name'] . '/237/0/0/1/-391/0/0/0/0/0/0/0/0/0/37/272/0/0/3/-436/0/0/0/0/0/0/0/0/0;1/57/458/646/1/4/5/328/328/328/0/0/1/2003/455/909/0/0/0/0/0/0/0/0;0/0/0/0/0/0/0/0/0/0/0/0/0/0/0/0/0/0/0/0/0/0/0/0;2;0;0;0;-1;;36;37ǭ1/2/3/' . $db_data ['user_name'] . '///-1/////DZ191428/1528/1511/6632/2503/3746/25172784/2473/5947/2464/5763/3930;695733/0/0/20192294/495694/0/25093/1744524/3/18447770/670640/0/-946245/2487723/3/15960047/971338/3/;' . $db_data ['user_name'] . '/237/0/0/2/-392/0/0/0/0/0/0/0/0/0/37/272/0/0/3/-436/0/0/0/0/0/0/0/0/0;1/1009/819/1467/3/1/2/986/0/0/22997039/0/1/2003/455/909/0/0/0/0/0/0/0/0;0/0/0/0/0/0/0/0/0/0/0/0/0/0/0/0/0/0/0/0/0/0/0/0;2;0;0;0;-1;;36;37ǭ1/3/' . $db_data ['user_name'] . '////20192294/////Ǵ363968/1528/6323/1508/4584/3565/25172784/2473/5947/2464/5763/3930;4128753/357705/3/15602342/235215/0/4128753/0/2/15602342/0/2/3783833/296818/0/15305524/344920/0/3783833/0/2/15305524/0/2/3783833/0/2/15305524/0/2/3144072/427037/0/14878487/639761/3/2733022/0/2/14878487/411049/0/2733022/0/2/14878487/0/2/2222398/0/2/14878487/510624/0/1531360/609312/0/14269175/691038/0/1531360/0/2/14269175/0/2/232841/0/2/14269175/1298519/3/232841/787640/0/13481535/0/2/232841/864448/0/12617087/0/2/232841/0/2/12617087/0/2/-1730563/1884610/3/10732477/1963404/3/;' . $db_data ['user_name'] . '/237/0/0/3/-393/0/0/0/0/0/0/0/0/0/37/272/0/0/3/-436/0/0/0/0/0/0/0/0/0;1/2056/600/644/2/4/5/588/588/588/0/0/1/2003/455/909/0/0/0/0/0/0/0/0;0/0/0/0/0/0/0/0/0/0/0/0/0/0/0/0/0/0/0/0/0/0/0/0;2;0;0;0;-1;;36;37ǭ1/' . $db_data ['user_name'] . '/////15960047/////DZ082424/961/1005/6661/2274/2125/25172784/2473/5947/2464/5763/3930;166101/1403916/3/9328561/916323/3/-632401/995043/0/8333517/798503/0/;' . $db_data ['user_name'] . '/237/1/1/2/2/103/102/2/109/3/2/15/1/0/37/272/0/0/3/-436/0/0/0/0/0/0/0/0/0;1/1009/1046/1410/3/4/5/1064/0/0/18758009/0/1/2003/455/909/0/0/0/0/0/0/0/0;0/0/0/0/0/0/0/0/0/0/0/0/0/0/0/0/0/0/0/0/0/0/0/0;2;0;0;0;-1;;36;37ǭ1//////10732477/////ǻ0;-1;0;0;0DZ264302793/92087/1397866973/1301994663/841267025/22/0/237/111298869/123996780/96905/933/-1/65338476/0/1338/1324/2/103/102/2/109/3/2/15/1/0/1/257/2/961/804/1950/1791/1700/0/201/4711/483/425/870/709/1848/1697/1602/0/1/0/1023410182/656368/443/0/3/4/2/492/0/0/11048178/0/3/1008/783/0/3/2/1/539/0/0/17891075/0/855638021/66546/532/0/3/4/5/532/0/0/9488487/0/687865860/1967089/437/0/3/2/1/500/0/0/6277787/0/1358954504/655369/0/0/3/1/5/528/0/0/7667088/0/1191182343/66544/622/0/3/2/4/512/0/0/8327251/0/1526726665/655368/0/0/4/1/5/483/0/0/0/0/1694498826/1310746/0/0/3/2/1/544/0/0/8864890/0/184549377/328689/1046/1410/3/4/5/1064/0/0/18758009/0/0/0/0/0/0/0/0/0/0/0/0/0/8/19/0/0/1/5/3/571/0/0/29292628/0/0/1008/532/0/4/3/1/548/0/0/0/0/0/2010/2154/0/1/2/3/295/269/0/0/0/0/15/0/0/11/5/0/72/25/0/1852482/0/0/1/0/0/1/5/3/304/248/0/0/0/0/237/237/237/5/4/1/-90/-93/-80/17/8/2/720/720/960/0/1010/718/0/4/1/5/295/269/0/27657353/0/0/1008/743/0/4/3/2/332/242/0/30570794/0/0/19/0/0/1/5/3/571/0/0/29292628/0/234800/839600/340000/28276200/10709600/34308500/2359298/1397782503/5/1008/579/0/3/1/5/552/0/0/40004185/0/3/1009/676/0/4/5/3/283/283/0/52922554/10/5/1009/411/0/5/4/2/289/267/0/55685219/10/5/1008/827/0/1/2/4/316/260/0/41133282/1/1/1008/809/1739/2/5/4/1120/0/0/99431632/0/1/1009/1160/1378/1/3/5/634/458/0/158498908/10/1397782757/8/7/0/0/1/3/2/342/224/0/21909165/10/12/16/0/0/11/12/0/168/25/0/3087470/15/9/5/0/0/5/4/2/557/0/0/39474100/0/8/5/0/0/1/4/2/340/224/0/10585665/1/9/14/0/0/1/5/3/350/218/0/12332167/1/8/12/0/0/4/3/5/552/0/0/37778355/0/37/0/829/3/272/10968/921711/1357235982/12/10/1391589443/0/0/1/2817/1046/1410/0/1398880351/3/0/0/1397866956/6000/0/100/1397870573/1397859709/146/146/1/1356631675/237/100/5192/9239/8082/1000000000/102529/2/1362/83/0/0/4/1397866973/5/12/12/12/12/12/12/12/12/12/12/120/16/485/15/12/0/1398042462/1398040963/0/25/25/0/0/304900910/304900910/304900910/1/1368876356/0/1596/1397866973';
//break;
// check time restrictions
$time = new DateTime ();
$time = $time->getTimestamp ();
if ($time < $db_data ['dungeon_time']) {
if ($db_data ['mushroom'] <= 0) {
// TODO throw error
break;
}
$db_data ['mushroom'] = $db_data ['mushroom'] - 1;
$time = $db_data ['dungeon_time'];
} else {
$time = $time + 1800;
}
$stage = $db_data['portal_level'];
$OP = getPortalMonster ( $stage, $db_data );
$p = new Char ( $db_data );
// response
$t_ret = array ();
// player stats
array_push ( $t_ret, "122" . $p->getHP (), $p->getStr (), $p->getDex (), $p->getInt (), $p->getWit (), $p->getLuck () );
// mob stats
array_push ( $t_ret, $OP->getHP (), $OP->getStr (), $OP->getDex (), $OP->getInt (), $OP->getWit (), $OP->getLuck () . ";" ); // . $p->getHp () );
// simulation
$sim = SF_Calc::calculateWin ( $p, $OP );
$win = $sim [count ( $sim ) - 1] [0] <= 0 ? true : false;
// if win -> update exp, lvl, etc...
if ($win) {
// increment stage lvl
$stage ++;
// add gained exp & gold
$db_data ['exp'] = ( int ) $db_data ['exp'] + $OP->getExp ();
$db_data ['silver'] = ( int ) $db_data ['silver'] + $OP->getGold ();
$db_data ['potion_value1'] = $db_data ['potion_value1'] + 1;
// add item rewards
$lvl = $db_data ['lvl'];
$class = $db_data ['class'];
$shop = rand(0, 1);
$item = genItem ($lvl, $class, $shop, 'dungeon');
$qry = $db->prepare ( "SELECT slot FROM items WHERE slot = 10 AND owner_id = " . $db_data['user_id'] );
$qry->execute ();
if ($qry->rowCount () < 1) {
$item ['slot'] = 10;
} else {
$qry = $db->prepare ( "SELECT slot FROM items WHERE slot = 11 AND owner_id = " . $db_data['user_id'] );
$qry->execute ();
if ($qry->rowCount () < 1) {
$item ['slot'] = 11;
} else {
$qry = $db->prepare ( "SELECT slot FROM items WHERE slot = 12 AND owner_id = " . $db_data['user_id'] );
$qry->execute ();
if ($qry->rowCount () < 1) {
$item ['slot'] = 12;
} else {
$qry = $db->prepare ( "SELECT slot FROM items WHERE slot = 13 AND owner_id = " . $db_data['user_id']);
$qry->execute ();
if ($qry->rowCount () < 1) {
$item ['slot'] = 13;
} else {
$qry = $db->prepare ( "SELECT slot FROM items WHERE slot = 14 AND owner_id = " . $db_data['user_id'] );
$qry->execute ();
if ($qry->rowCount () < 1) {
$item ['slot'] = 14;
} else {
$ret = array (
$ERR_INVENTORY_FULL
);
break;
}
}
}
}
}
$qry = $db->prepare ( 'INSERT INTO items(item_type, item_id, dmg_min, dmg_max, atr_type_1, atr_type_2, atr_type_3, atr_val_1, atr_val_2, atr_val_3, gold, mush, slot, owner_id)
VALUES(' . $item ['item_type'] . ',' . $item ['item_id'] . ',' . $item ['dmg_min'] . ',' . $item ['dmg_max'] . ',
' . $item ['atr_type_1'] . ',' . $item ['atr_type_2'] . ',' . $item ['atr_type_3'] . ',' . $item ['atr_val_1'] . ',' . $item ['atr_val_2'] . ',
' . $item ['atr_val_3'] . ',' . $item ['gold'] . ',' . $item ['mush'] . ',' . $item ['slot'] . ',' . $db_data['user_id'] . ')' );
$qry->execute ();
// lvl up
while ( $db_data ['exp'] > $LEVELS [$db_data ['lvl']] ) {
$db_data ['exp'] -= $LEVELS [$db_data ['lvl']];
$db_data ['lvl'] = ( int ) $db_data ['lvl'] + 1;
}
}
//
$db_data ['portal_bonus'] = $stage ;
//
// update database
$qry_str = "UPDATE user_data SET
exp = :exp,
lvl = :lvl,
silver = :silver,
mushroom = :shroom,
dungeon_time = :time,
potion_value1 =
otion_value1,
portal_level =
ortal_level";
$qry_str .= " WHERE ssid = :ssid";
$qry = $db->prepare ( $qry_str );
$qry->bindParam ( ':exp', $db_data ['exp'] );
$qry->bindParam ( ':lvl', $db_data ['lvl'] );
$qry->bindParam ( ':silver', $db_data ['silver'] );
$qry->bindParam ( ':shroom', $db_data ['mushroom'] );
$qry->bindParam ( ':time', $time );
$qry->bindParam ( '
otion_value1', $db_data ['potion_value1'] );
$qry->bindParam ( '
ortal_level', $stage );
$qry->bindParam ( ':ssid', $SSID );
$qry->execute ();
$t_ret [count ( $t_ret ) - 1] .= $sim [0] [0];
// ---logs----
// first 3, one in previous index, separated by semicolon
array_push ( $t_ret, $sim [0] [1], $sim [0] [2] );
for($i = 1; $i < count ( $sim ); $i ++) {
array_push ( $t_ret, $sim [$i] [0], $sim [$i] [1], $sim [$i] [2] );
// echo $sim [$i][0]."/".$sim [$i][1]."/".$sim [$i][2]."/";
}
// looks
array_push ( $t_ret, ";" . $db_data ['user_name'], $p->getLvl (), $db_data ['race'], $db_data ['gender'], $db_data ['class'] );
// faces
for($i = 1; $i <= 9; $i ++) {
$t_ret [] = $db_data ['face' . $i];
}
// mob looks, lvl, weapon
array_push ( $t_ret, "0", "0", $OP->getLvl (), "0", "0", "1", "-" . $OP->getId (), "0", "0", "0", "0", "0", "0", "0", "0", "0;" . $p->hasWeapon () );
// weapon info - player
$weap = $p->getWeapon ();
array_push ( $t_ret, $weap ['item_id'], $weap ['dmg_min'], $weap ['dmg_max'], $weap ['atr_type_1'], $weap ['atr_type_2'], $weap ['atr_type_3'], $weap ['atr_val_1'], $weap ['atr_val_2'], $weap ['atr_val_3'], $weap ['gold'], $weap ['mush'] );
// weapon info - mob
$weap = $OP->getWeapon ();
array_push ( $t_ret, $OP->hasWeapon (), $weap ['item_id'], $weap ['dmg_min'], $weap ['dmg_max'], $weap ['atr_type_1'], $weap ['atr_type_2'], $weap ['atr_type_3'], $weap ['atr_val_1'], $weap ['atr_val_2'], $weap ['atr_val_3'], $weap ['gold'], $weap ['mush'] . ";" . $p->hasShield () );
// shields
$sh = $p->getShield ();
array_push ( $t_ret, $sh ['item_id'], $sh ['dmg_min'], $sh ['dmg_max'], $sh ['atr_type_1'], $sh ['atr_type_2'], $sh ['atr_type_3'], $sh ['atr_val_1'], $sh ['atr_val_2'], $sh ['atr_val_3'], $sh ['gold'], $sh ['mush'] );
$sh = $OP->getShield ();
array_push ( $ret, $OP->hasShield (), $sh ['item_id'], $sh ['dmg_min'], $sh ['dmg_max'], $sh ['atr_type_1'], $sh ['atr_type_2'], $sh ['atr_type_3'], $sh ['atr_val_1'], $sh ['atr_val_2'], $sh ['atr_val_3'], $sh ['gold'] );
// ?;?;?;exp;silver;win?
$t_ret [] = $sh ['mush'] . ";3;0;" . $OP->getExp () . ";" . $OP->getGold () . ";-1;";
// rest is default data
$t_ret [count ( $t_ret ) - 1] .= $ret [0];
// set dungeon time left
$ret [$SF_DUNGEON_ENDTIME] = $time;
for($i = 1; $i < count ( $ret ); $i ++) {
$t_ret [] = $ret [$i];
}
exit ( join ( "/", $t_ret ) );
break;
W request, oczywiście również act:
$ACT_PORTAL_FIGT = '358';
$ACT_PORTAL_FIGHT_SINGLE = '360';
$ERR_PORTAL_FOUGHT_ALREADY = '-106';
$ERR_PORTAL_MEMBERSHIP_TOO_SHORT = '-107';
$RESP_PORTAL_fIGHT = 359;
$RESP_PORTAL_FIGHT_SINGLE = 361;
Pod mobami z wieży:
function getPortalMonster($stage, $db_data) {
switch ($stage) {
case 1 :
return new Monster ( 400, 1, 17570, 12655, 12630, 17290, 11716, 1365356, 1548792, 112976200, 115087, 500, 178017293, -1);
case 2 :
return new Monster ( 360, 2, 1970, 1990, 8000, 7560, 2838, 881901, 1323252, 5458320, 3060, 501, 191202824, 1003 );
}
}
Und in der Datenbank:
`portal_level` tinyint(4) NOT NULL DEFAULT '1',
//portal
$db_data = loadDefaultData ();
// STRUCTURE
//$ret [0] = '3215216960/7103/1791/1770/4384/3909/25172784/2473/5947/2464/5763/3930;4655420/0/0/25172784/561540/3/4405539/0/2/25172784/249880/0/4153589/0/2/25172784/251950/0/3787388/936784/3/24236000/366200/0/2288974/1346645/3/22889354/1498414/3/1706694/765428/0/22123926/582280/0/151549/883898/0/21240028/1555145/3/-661731/1047733/0/20192294/813280/0/;' . $db_data ['user_name'] . '/237/0/0/1/-391/0/0/0/0/0/0/0/0/0/37/272/0/0/3/-436/0/0/0/0/0/0/0/0/0;1/57/458/646/1/4/5/328/328/328/0/0/1/2003/455/909/0/0/0/0/0/0/0/0;0/0/0/0/0/0/0/0/0/0/0/0/0/0/0/0/0/0/0/0/0/0/0/0;2;0;0;0;-1;;36;37ǭ1/2/3/' . $db_data ['user_name'] . '///-1/////DZ191428/1528/1511/6632/2503/3746/25172784/2473/5947/2464/5763/3930;695733/0/0/20192294/495694/0/25093/1744524/3/18447770/670640/0/-946245/2487723/3/15960047/971338/3/;' . $db_data ['user_name'] . '/237/0/0/2/-392/0/0/0/0/0/0/0/0/0/37/272/0/0/3/-436/0/0/0/0/0/0/0/0/0;1/1009/819/1467/3/1/2/986/0/0/22997039/0/1/2003/455/909/0/0/0/0/0/0/0/0;0/0/0/0/0/0/0/0/0/0/0/0/0/0/0/0/0/0/0/0/0/0/0/0;2;0;0;0;-1;;36;37ǭ1/3/' . $db_data ['user_name'] . '////20192294/////Ǵ363968/1528/6323/1508/4584/3565/25172784/2473/5947/2464/5763/3930;4128753/357705/3/15602342/235215/0/4128753/0/2/15602342/0/2/3783833/296818/0/15305524/344920/0/3783833/0/2/15305524/0/2/3783833/0/2/15305524/0/2/3144072/427037/0/14878487/639761/3/2733022/0/2/14878487/411049/0/2733022/0/2/14878487/0/2/2222398/0/2/14878487/510624/0/1531360/609312/0/14269175/691038/0/1531360/0/2/14269175/0/2/232841/0/2/14269175/1298519/3/232841/787640/0/13481535/0/2/232841/864448/0/12617087/0/2/232841/0/2/12617087/0/2/-1730563/1884610/3/10732477/1963404/3/;' . $db_data ['user_name'] . '/237/0/0/3/-393/0/0/0/0/0/0/0/0/0/37/272/0/0/3/-436/0/0/0/0/0/0/0/0/0;1/2056/600/644/2/4/5/588/588/588/0/0/1/2003/455/909/0/0/0/0/0/0/0/0;0/0/0/0/0/0/0/0/0/0/0/0/0/0/0/0/0/0/0/0/0/0/0/0;2;0;0;0;-1;;36;37ǭ1/' . $db_data ['user_name'] . '/////15960047/////DZ082424/961/1005/6661/2274/2125/25172784/2473/5947/2464/5763/3930;166101/1403916/3/9328561/916323/3/-632401/995043/0/8333517/798503/0/;' . $db_data ['user_name'] . '/237/1/1/2/2/103/102/2/109/3/2/15/1/0/37/272/0/0/3/-436/0/0/0/0/0/0/0/0/0;1/1009/1046/1410/3/4/5/1064/0/0/18758009/0/1/2003/455/909/0/0/0/0/0/0/0/0;0/0/0/0/0/0/0/0/0/0/0/0/0/0/0/0/0/0/0/0/0/0/0/0;2;0;0;0;-1;;36;37ǭ1//////10732477/////ǻ0;-1;0;0;0DZ264302793/92087/1397866973/1301994663/841267025/22/0/237/111298869/123996780/96905/933/-1/65338476/0/1338/1324/2/103/102/2/109/3/2/15/1/0/1/257/2/961/804/1950/1791/1700/0/201/4711/483/425/870/709/1848/1697/1602/0/1/0/1023410182/656368/443/0/3/4/2/492/0/0/11048178/0/3/1008/783/0/3/2/1/539/0/0/17891075/0/855638021/66546/532/0/3/4/5/532/0/0/9488487/0/687865860/1967089/437/0/3/2/1/500/0/0/6277787/0/1358954504/655369/0/0/3/1/5/528/0/0/7667088/0/1191182343/66544/622/0/3/2/4/512/0/0/8327251/0/1526726665/655368/0/0/4/1/5/483/0/0/0/0/1694498826/1310746/0/0/3/2/1/544/0/0/8864890/0/184549377/328689/1046/1410/3/4/5/1064/0/0/18758009/0/0/0/0/0/0/0/0/0/0/0/0/0/8/19/0/0/1/5/3/571/0/0/29292628/0/0/1008/532/0/4/3/1/548/0/0/0/0/0/2010/2154/0/1/2/3/295/269/0/0/0/0/15/0/0/11/5/0/72/25/0/1852482/0/0/1/0/0/1/5/3/304/248/0/0/0/0/237/237/237/5/4/1/-90/-93/-80/17/8/2/720/720/960/0/1010/718/0/4/1/5/295/269/0/27657353/0/0/1008/743/0/4/3/2/332/242/0/30570794/0/0/19/0/0/1/5/3/571/0/0/29292628/0/234800/839600/340000/28276200/10709600/34308500/2359298/1397782503/5/1008/579/0/3/1/5/552/0/0/40004185/0/3/1009/676/0/4/5/3/283/283/0/52922554/10/5/1009/411/0/5/4/2/289/267/0/55685219/10/5/1008/827/0/1/2/4/316/260/0/41133282/1/1/1008/809/1739/2/5/4/1120/0/0/99431632/0/1/1009/1160/1378/1/3/5/634/458/0/158498908/10/1397782757/8/7/0/0/1/3/2/342/224/0/21909165/10/12/16/0/0/11/12/0/168/25/0/3087470/15/9/5/0/0/5/4/2/557/0/0/39474100/0/8/5/0/0/1/4/2/340/224/0/10585665/1/9/14/0/0/1/5/3/350/218/0/12332167/1/8/12/0/0/4/3/5/552/0/0/37778355/0/37/0/829/3/272/10968/921711/1357235982/12/10/1391589443/0/0/1/2817/1046/1410/0/1398880351/3/0/0/1397866956/6000/0/100/1397870573/1397859709/146/146/1/1356631675/237/100/5192/9239/8082/1000000000/102529/2/1362/83/0/0/4/1397866973/5/12/12/12/12/12/12/12/12/12/12/120/16/485/15/12/0/1398042462/1398040963/0/25/25/0/0/304900910/304900910/304900910/1/1368876356/0/1596/1397866973';
//break;
// check time restrictions
$time = new DateTime ();
$time = $time->getTimestamp ();
if ($time < $db_data ['dungeon_time']) {
if ($db_data ['mushroom'] <= 0) {
// TODO throw error
break;
}
$db_data ['mushroom'] = $db_data ['mushroom'] - 1;
$time = $db_data ['dungeon_time'];
} else {
$time = $time + 1800;
}
$stage = $db_data['portal_level'];
$OP = getPortalMonster ( $stage, $db_data );
$p = new Char ( $db_data );
// response
$t_ret = array ();
// player stats
array_push ( $t_ret, "122" . $p->getHP (), $p->getStr (), $p->getDex (), $p->getInt (), $p->getWit (), $p->getLuck () );
// mob stats
array_push ( $t_ret, $OP->getHP (), $OP->getStr (), $OP->getDex (), $OP->getInt (), $OP->getWit (), $OP->getLuck () . ";" ); // . $p->getHp () );
// simulation
$sim = SF_Calc::calculateWin ( $p, $OP );
$win = $sim [count ( $sim ) - 1] [0] <= 0 ? true : false;
// if win -> update exp, lvl, etc...
if ($win) {
// increment stage lvl
$stage ++;
// add gained exp & gold
$db_data ['exp'] = ( int ) $db_data ['exp'] + $OP->getExp ();
$db_data ['silver'] = ( int ) $db_data ['silver'] + $OP->getGold ();
$db_data ['potion_value1'] = $db_data ['potion_value1'] + 1;
// add item rewards
$lvl = $db_data ['lvl'];
$class = $db_data ['class'];
$shop = rand(0, 1);
$item = genItem ($lvl, $class, $shop, 'dungeon');
$qry = $db->prepare ( "SELECT slot FROM items WHERE slot = 10 AND owner_id = " . $db_data['user_id'] );
$qry->execute ();
if ($qry->rowCount () < 1) {
$item ['slot'] = 10;
} else {
$qry = $db->prepare ( "SELECT slot FROM items WHERE slot = 11 AND owner_id = " . $db_data['user_id'] );
$qry->execute ();
if ($qry->rowCount () < 1) {
$item ['slot'] = 11;
} else {
$qry = $db->prepare ( "SELECT slot FROM items WHERE slot = 12 AND owner_id = " . $db_data['user_id'] );
$qry->execute ();
if ($qry->rowCount () < 1) {
$item ['slot'] = 12;
} else {
$qry = $db->prepare ( "SELECT slot FROM items WHERE slot = 13 AND owner_id = " . $db_data['user_id']);
$qry->execute ();
if ($qry->rowCount () < 1) {
$item ['slot'] = 13;
} else {
$qry = $db->prepare ( "SELECT slot FROM items WHERE slot = 14 AND owner_id = " . $db_data['user_id'] );
$qry->execute ();
if ($qry->rowCount () < 1) {
$item ['slot'] = 14;
} else {
$ret = array (
$ERR_INVENTORY_FULL
);
break;
}
}
}
}
}
$qry = $db->prepare ( 'INSERT INTO items(item_type, item_id, dmg_min, dmg_max, atr_type_1, atr_type_2, atr_type_3, atr_val_1, atr_val_2, atr_val_3, gold, mush, slot, owner_id)
VALUES(' . $item ['item_type'] . ',' . $item ['item_id'] . ',' . $item ['dmg_min'] . ',' . $item ['dmg_max'] . ',
' . $item ['atr_type_1'] . ',' . $item ['atr_type_2'] . ',' . $item ['atr_type_3'] . ',' . $item ['atr_val_1'] . ',' . $item ['atr_val_2'] . ',
' . $item ['atr_val_3'] . ',' . $item ['gold'] . ',' . $item ['mush'] . ',' . $item ['slot'] . ',' . $db_data['user_id'] . ')' );
$qry->execute ();
// lvl up
while ( $db_data ['exp'] > $LEVELS [$db_data ['lvl']] ) {
$db_data ['exp'] -= $LEVELS [$db_data ['lvl']];
$db_data ['lvl'] = ( int ) $db_data ['lvl'] + 1;
}
}
//
$db_data ['portal_bonus'] = $stage ;
//
// update database
$qry_str = "UPDATE user_data SET
exp = :exp,
lvl = :lvl,
silver = :silver,
mushroom = :shroom,
dungeon_time = :time,
potion_value1 =
portal_level =
$qry_str .= " WHERE ssid = :ssid";
$qry = $db->prepare ( $qry_str );
$qry->bindParam ( ':exp', $db_data ['exp'] );
$qry->bindParam ( ':lvl', $db_data ['lvl'] );
$qry->bindParam ( ':silver', $db_data ['silver'] );
$qry->bindParam ( ':shroom', $db_data ['mushroom'] );
$qry->bindParam ( ':time', $time );
$qry->bindParam ( '
$qry->bindParam ( '
$qry->bindParam ( ':ssid', $SSID );
$qry->execute ();
$t_ret [count ( $t_ret ) - 1] .= $sim [0] [0];
// ---logs----
// first 3, one in previous index, separated by semicolon
array_push ( $t_ret, $sim [0] [1], $sim [0] [2] );
for($i = 1; $i < count ( $sim ); $i ++) {
array_push ( $t_ret, $sim [$i] [0], $sim [$i] [1], $sim [$i] [2] );
// echo $sim [$i][0]."/".$sim [$i][1]."/".$sim [$i][2]."/";
}
// looks
array_push ( $t_ret, ";" . $db_data ['user_name'], $p->getLvl (), $db_data ['race'], $db_data ['gender'], $db_data ['class'] );
// faces
for($i = 1; $i <= 9; $i ++) {
$t_ret [] = $db_data ['face' . $i];
}
// mob looks, lvl, weapon
array_push ( $t_ret, "0", "0", $OP->getLvl (), "0", "0", "1", "-" . $OP->getId (), "0", "0", "0", "0", "0", "0", "0", "0", "0;" . $p->hasWeapon () );
// weapon info - player
$weap = $p->getWeapon ();
array_push ( $t_ret, $weap ['item_id'], $weap ['dmg_min'], $weap ['dmg_max'], $weap ['atr_type_1'], $weap ['atr_type_2'], $weap ['atr_type_3'], $weap ['atr_val_1'], $weap ['atr_val_2'], $weap ['atr_val_3'], $weap ['gold'], $weap ['mush'] );
// weapon info - mob
$weap = $OP->getWeapon ();
array_push ( $t_ret, $OP->hasWeapon (), $weap ['item_id'], $weap ['dmg_min'], $weap ['dmg_max'], $weap ['atr_type_1'], $weap ['atr_type_2'], $weap ['atr_type_3'], $weap ['atr_val_1'], $weap ['atr_val_2'], $weap ['atr_val_3'], $weap ['gold'], $weap ['mush'] . ";" . $p->hasShield () );
// shields
$sh = $p->getShield ();
array_push ( $t_ret, $sh ['item_id'], $sh ['dmg_min'], $sh ['dmg_max'], $sh ['atr_type_1'], $sh ['atr_type_2'], $sh ['atr_type_3'], $sh ['atr_val_1'], $sh ['atr_val_2'], $sh ['atr_val_3'], $sh ['gold'], $sh ['mush'] );
$sh = $OP->getShield ();
array_push ( $ret, $OP->hasShield (), $sh ['item_id'], $sh ['dmg_min'], $sh ['dmg_max'], $sh ['atr_type_1'], $sh ['atr_type_2'], $sh ['atr_type_3'], $sh ['atr_val_1'], $sh ['atr_val_2'], $sh ['atr_val_3'], $sh ['gold'] );
// ?;?;?;exp;silver;win?
$t_ret [] = $sh ['mush'] . ";3;0;" . $OP->getExp () . ";" . $OP->getGold () . ";-1;";
// rest is default data
$t_ret [count ( $t_ret ) - 1] .= $ret [0];
// set dungeon time left
$ret [$SF_DUNGEON_ENDTIME] = $time;
for($i = 1; $i < count ( $ret ); $i ++) {
$t_ret [] = $ret [$i];
}
exit ( join ( "/", $t_ret ) );
break;
W request, oczywiście również act:
$ACT_PORTAL_FIGT = '358';
$ACT_PORTAL_FIGHT_SINGLE = '360';
$ERR_PORTAL_FOUGHT_ALREADY = '-106';
$ERR_PORTAL_MEMBERSHIP_TOO_SHORT = '-107';
$RESP_PORTAL_fIGHT = 359;
$RESP_PORTAL_FIGHT_SINGLE = 361;
Pod mobami z wieży:
function getPortalMonster($stage, $db_data) {
switch ($stage) {
case 1 :
return new Monster ( 400, 1, 17570, 12655, 12630, 17290, 11716, 1365356, 1548792, 112976200, 115087, 500, 178017293, -1);
case 2 :
return new Monster ( 360, 2, 1970, 1990, 8000, 7560, 2838, 881901, 1323252, 5458320, 3060, 501, 191202824, 1003 );
}
}
Und in der Datenbank:
`portal_level` tinyint(4) NOT NULL DEFAULT '1',
Gildenkriege:
case $ACT_GUILD_COMMENCE_ATTACK :
// attack a guild
//Guild atack (1vs1) BETA
//Guild atack (1vs1) BETA
//Guild atack (1vs1) BETA
//Guild atack (1vs1) BETA
$db_data = loadDefaultData ();
// STRUCTURE
//$ret [0] = '3215216960/7103/1791/1770/4384/3909/25172784/2473/5947/2464/5763/3930;4655420/0/0/25172784/561540/3/4405539/0/2/25172784/249880/0/4153589/0/2/25172784/251950/0/3787388/936784/3/24236000/366200/0/2288974/1346645/3/22889354/1498414/3/1706694/765428/0/22123926/582280/0/151549/883898/0/21240028/1555145/3/-661731/1047733/0/20192294/813280/0/;' . $db_data ['user_name'] . '/237/0/0/1/-391/0/0/0/0/0/0/0/0/0/37/272/0/0/3/-436/0/0/0/0/0/0/0/0/0;1/57/458/646/1/4/5/328/328/328/0/0/1/2003/455/909/0/0/0/0/0/0/0/0;0/0/0/0/0/0/0/0/0/0/0/0/0/0/0/0/0/0/0/0/0/0/0/0;2;0;0;0;-1;;36;37Ç*1/2/3/' . $db_data ['user_name'] . '///-1/////DZ191428/1528/1511/6632/2503/3746/25172784/2473/5947/2464/5763/3930;695733/0/0/20192294/495694/0/25093/1744524/3/18447770/670640/0/-946245/2487723/3/15960047/971338/3/;' . $db_data ['user_name'] . '/237/0/0/2/-392/0/0/0/0/0/0/0/0/0/37/272/0/0/3/-436/0/0/0/0/0/0/0/0/0;1/1009/819/1467/3/1/2/986/0/0/22997039/0/1/2003/455/909/0/0/0/0/0/0/0/0;0/0/0/0/0/0/0/0/0/0/0/0/0/0/0/0/0/0/0/0/0/0/0/0;2;0;0;0;-1;;36;37Ç*1/3/' . $db_data ['user_name'] . '////20192294/////Ç´363968/1528/6323/1508/4584/3565/25172784/2473/5947/2464/5763/3930;4128753/357705/3/15602342/235215/0/4128753/0/2/15602342/0/2/3783833/296818/0/15305524/344920/0/3783833/0/2/15305524/0/2/3783833/0/2/15305524/0/2/3144072/427037/0/14878487/639761/3/2733022/0/2/14878487/411049/0/2733022/0/2/14878487/0/2/2222398/0/2/14878487/510624/0/1531360/609312/0/14269175/691038/0/1531360/0/2/14269175/0/2/232841/0/2/14269175/1298519/3/232841/787640/0/13481535/0/2/232841/864448/0/12617087/0/2/232841/0/2/12617087/0/2/-1730563/1884610/3/10732477/1963404/3/;' . $db_data ['user_name'] . '/237/0/0/3/-393/0/0/0/0/0/0/0/0/0/37/272/0/0/3/-436/0/0/0/0/0/0/0/0/0;1/2056/600/644/2/4/5/588/588/588/0/0/1/2003/455/909/0/0/0/0/0/0/0/0;0/0/0/0/0/0/0/0/0/0/0/0/0/0/0/0/0/0/0/0/0/0/0/0;2;0;0;0;-1;;36;37Ç*1/' . $db_data ['user_name'] . '/////15960047/////DZ082424/961/1005/6661/2274/2125/25172784/2473/5947/2464/5763/3930;166101/1403916/3/9328561/916323/3/-632401/995043/0/8333517/798503/0/;' . $db_data ['user_name'] . '/237/1/1/2/2/103/102/2/109/3/2/15/1/0/37/272/0/0/3/-436/0/0/0/0/0/0/0/0/0;1/1009/1046/1410/3/4/5/1064/0/0/18758009/0/1/2003/455/909/0/0/0/0/0/0/0/0;0/0/0/0/0/0/0/0/0/0/0/0/0/0/0/0/0/0/0/0/0/0/0/0;2;0;0;0;-1;;36;37Ç*1//////10732477/////Ç»0;-1;0;0;0DZ264302793/92087/1397866973/1301994663/841267025/22/0/237/111298869/123996780/96905/933/-1/65338476/0/1338/1324/2/103/102/2/109/3/2/15/1/0/1/257/2/961/804/1950/1791/1700/0/201/4711/483/425/870/709/1848/1697/1602/0/1/0/1023410182/656368/443/0/3/4/2/492/0/0/11048178/0/3/1008/783/0/3/2/1/539/0/0/17891075/0/855638021/66546/532/0/3/4/5/532/0/0/9488487/0/687865860/1967089/437/0/3/2/1/500/0/0/6277787/0/1358954504/655369/0/0/3/1/5/528/0/0/7667088/0/1191182343/66544/622/0/3/2/4/512/0/0/8327251/0/1526726665/655368/0/0/4/1/5/483/0/0/0/0/1694498826/1310746/0/0/3/2/1/544/0/0/8864890/0/184549377/328689/1046/1410/3/4/5/1064/0/0/18758009/0/0/0/0/0/0/0/0/0/0/0/0/0/8/19/0/0/1/5/3/571/0/0/29292628/0/0/1008/532/0/4/3/1/548/0/0/0/0/0/2010/2154/0/1/2/3/295/269/0/0/0/0/15/0/0/11/5/0/72/25/0/1852482/0/0/1/0/0/1/5/3/304/248/0/0/0/0/237/237/237/5/4/1/-90/-93/-80/17/8/2/720/720/960/0/1010/718/0/4/1/5/295/269/0/27657353/0/0/1008/743/0/4/3/2/332/242/0/30570794/0/0/19/0/0/1/5/3/571/0/0/29292628/0/234800/839600/340000/28276200/10709600/34308500/2359298/1397782503/5/1008/579/0/3/1/5/552/0/0/40004185/0/3/1009/676/0/4/5/3/283/283/0/52922554/10/5/1009/411/0/5/4/2/289/267/0/55685219/10/5/1008/827/0/1/2/4/316/260/0/41133282/1/1/1008/809/1739/2/5/4/1120/0/0/99431632/0/1/1009/1160/1378/1/3/5/634/458/0/158498908/10/1397782757/8/7/0/0/1/3/2/342/224/0/21909165/10/12/16/0/0/11/12/0/168/25/0/3087470/15/9/5/0/0/5/4/2/557/0/0/39474100/0/8/5/0/0/1/4/2/340/224/0/10585665/1/9/14/0/0/1/5/3/350/218/0/12332167/1/8/12/0/0/4/3/5/552/0/0/37778355/0/37/0/829/3/272/10968/921711/1357235982/12/10/1391589443/0/0/1/2817/1046/1410/0/1398880351/3/0/0/1397866956/6000/0/100/1397870573/1397859709/146/146/1/1356631675/237/100/5192/9239/8082/1000000000/102529/2/1362/83/0/0/4/1397866973/5/12/12/12/12/12/12/12/12/12/12/120/16/485/15/12/0/1398042462/1398040963/0/25/25/0/0/304900910/304900910/304900910/1/1368876356/0/1596/1397866973';
//break;
// check time restrictions
$time = new DateTime ();
$time = $time->getTimestamp ();
if ($time < $db_data ['dungeon_time']) {
if ($db_data ['mushroom'] <= 0) {
// TODO throw error
break;
}
$db_data ['mushroom'] = $db_data ['mushroom'] - 100; // 100 grzybĂłw za walke z przeciwnikiem
$time = $db_data ['dungeon_time'];
} else {
$time = $time + 1; // niedziała/not working
}
$stage = $db_data['guild_level'];
$OP = getGuildMonster ( $stage, $db_data );
$p = new Char ( $db_data );
// response
$t_ret = array ();
// Staty gracza
array_push ( $t_ret, "122" . $p->getHP (), $p->getStr (), $p->getDex (), $p->getInt (), $p->getWit (), $p->getLuck () );
// Staty przeciwnika
array_push ( $t_ret, $OP->getHP (), $OP->getStr (), $OP->getDex (), $OP->getInt (), $OP->getWit (), $OP->getLuck () . ";" ); // . $p->getHp () );
// walka/sumulacja
$sim = SF_Calc::calculateWin ( $p, $OP );
$win = $sim [count ( $sim ) - 1] [0] <= 0 ? true : false;
// Gdy wgramy ....
if ($win) {
// increment stage lvl
$stage ++;
// Bonus Gildijny
$ebonus = 1 + (($db_data ['instructor'] + $db_data ['dung']) / 50);
$gbonus = 1 + (($db_data ['treasure'] + $db_data ['dung']) / 50);
// Dodanie expa i golda : ...
$db_data ['exp'] = ( int ) $db_data ['exp'] + $OP->getExp ();
$db_data ['silver'] = ( int ) $db_data ['silver'] + $OP->getGold ();
// Dodanie itemkĂłw
$itemRand = 1;
$lvl = $db_data ['lvl'];
$class = $db_data ['class'];
$epicRand = 1;
$shop = rand(0, 1);
$item = genItem ($lvl, $class, $shop, 'dungeon');
$qry = $db->prepare ( "SELECT slot FROM items WHERE slot = 10 AND owner_id = " . $db_data['user_id'] );
$qry->execute ();
if ($qry->rowCount () < 1) {
$item ['slot'] = 10;
} else {
$qry = $db->prepare ( "SELECT slot FROM items WHERE slot = 11 AND owner_id = " . $db_data['user_id'] );
$qry->execute ();
if ($qry->rowCount () < 1) {
$item ['slot'] = 11;
} else {
$qry = $db->prepare ( "SELECT slot FROM items WHERE slot = 12 AND owner_id = " . $db_data['user_id'] );
$qry->execute ();
if ($qry->rowCount () < 1) {
$item ['slot'] = 12;
} else {
$qry = $db->prepare ( "SELECT slot FROM items WHERE slot = 13 AND owner_id = " . $db_data['user_id']);
$qry->execute ();
if ($qry->rowCount () < 1) {
$item ['slot'] = 13;
} else {
$qry = $db->prepare ( "SELECT slot FROM items WHERE slot = 14 AND owner_id = " . $db_data['user_id'] );
$qry->execute ();
if ($qry->rowCount () < 1) {
$item ['slot'] = 14;
} else {
$ret = array (
$ERR_INVENTORY_FULL
);
break;
}
}
}
}
}
$qry = $db->prepare ( 'INSERT INTO items(item_type, item_id, dmg_min, dmg_max, atr_type_1, atr_type_2, atr_type_3, atr_val_1, atr_val_2, atr_val_3, gold, mush, slot, owner_id)
VALUES(' . $item ['item_type'] . ',' . $item ['item_id'] . ',' . $item ['dmg_min'] . ',' . $item ['dmg_max'] . ',
' . $item ['atr_type_1'] . ',' . $item ['atr_type_2'] . ',' . $item ['atr_type_3'] . ',' . $item ['atr_val_1'] . ',' . $item ['atr_val_2'] . ',
' . $item ['atr_val_3'] . ',' . $item ['gold'] . ',' . $item ['mush'] . ',' . $item ['slot'] . ',' . $db_data['user_id'] . ')' );
$qry->execute ();
// lvl up
while ( $db_data ['exp'] > $LEVELS [$db_data ['lvl']] ) {
$db_data ['exp'] -= $LEVELS [$db_data ['lvl']];
$db_data ['lvl'] = ( int ) $db_data ['lvl'] + 1;
}
}
// update database
$qry_str = "UPDATE user_data SET
exp = :exp,
lvl = :lvl,
silver = :silver,
mushroom = :shroom,
dungeon_time = :time,
guild_level = :guild_level ";
$qry_str .= " WHERE ssid = :ssid";
$qry = $db->prepare ( $qry_str );
$qry->bindParam ( ':exp', $db_data ['exp'] );
$qry->bindParam ( ':lvl', $db_data ['lvl'] );
$qry->bindParam ( ':silver', $db_data ['silver'] );
$qry->bindParam ( ':shroom', $db_data ['mushroom'] );
$qry->bindParam ( ':time', $time );
$qry->bindParam ( ':guild_level', $stage );
$qry->bindParam ( ':ssid', $SSID );
$qry->execute ();
$t_ret [count ( $t_ret ) - 1] .= $sim [0] [0];
// ---logs----
// first 3, one in previous index, separated by semicolon
array_push ( $t_ret, $sim [0] [1], $sim [0] [2] );
for($i = 1; $i < count ( $sim ); $i ++) {
array_push ( $t_ret, $sim [$i] [0], $sim [$i] [1], $sim [$i] [2] );
// echo $sim [$i][0]."/".$sim [$i][1]."/".$sim [$i][2]."/";
}
// looks
array_push ( $t_ret, ";" . $db_data ['user_name'], $p->getLvl (), $db_data ['race'], $db_data ['gender'], $db_data ['class'] );
// faces
for($i = 1; $i <= 9; $i ++) {
$t_ret [] = $db_data ['face' . $i];
}
// mob looks, lvl, weapon
array_push ( $t_ret, "0", "0", $OP->getLvl (), "0", "0", "1", "-" . $OP->getId (), "0", "0", "0", "0", "0", "0", "0", "0", "0;" . $p->hasWeapon () );
// weapon info - player
$weap = $p->getWeapon ();
array_push ( $t_ret, $weap ['item_id'], $weap ['dmg_min'], $weap ['dmg_max'], $weap ['atr_type_1'], $weap ['atr_type_2'], $weap ['atr_type_3'], $weap ['atr_val_1'], $weap ['atr_val_2'], $weap ['atr_val_3'], $weap ['gold'], $weap ['mush'] );
// weapon info - mob
$weap = $OP->getWeapon ();
array_push ( $t_ret, $OP->hasWeapon (), $weap ['item_id'], $weap ['dmg_min'], $weap ['dmg_max'], $weap ['atr_type_1'], $weap ['atr_type_2'], $weap ['atr_type_3'], $weap ['atr_val_1'], $weap ['atr_val_2'], $weap ['atr_val_3'], $weap ['gold'], $weap ['mush'] . ";" . $p->hasShield () );
// shields
$sh = $p->getShield ();
array_push ( $t_ret, $sh ['item_id'], $sh ['dmg_min'], $sh ['dmg_max'], $sh ['atr_type_1'], $sh ['atr_type_2'], $sh ['atr_type_3'], $sh ['atr_val_1'], $sh ['atr_val_2'], $sh ['atr_val_3'], $sh ['gold'], $sh ['mush'] );
$sh = $OP->getShield ();
array_push ( $ret, $OP->hasShield (), $sh ['item_id'], $sh ['dmg_min'], $sh ['dmg_max'], $sh ['atr_type_1'], $sh ['atr_type_2'], $sh ['atr_type_3'], $sh ['atr_val_1'], $sh ['atr_val_2'], $sh ['atr_val_3'], $sh ['gold'] );
// ?;?;?;exp;silver;win?
$t_ret [] = $sh ['mush'] . ";3;0;" . $OP->getExp () . ";" . $OP->getGold () . ";-1;";
// rest is default data
$t_ret [count ( $t_ret ) - 1] .= $ret [0];
// set dungeon time left
$ret [$SF_DUNGEON_ENDTIME] = $time;
for($i = 1; $i < count ( $ret ); $i ++) {
$t_ret [] = $ret [$i];
}
exit ( join ( "/", $t_ret ) );
break;
// attack a guild
//Guild atack (1vs1) BETA
//Guild atack (1vs1) BETA
//Guild atack (1vs1) BETA
//Guild atack (1vs1) BETA
$db_data = loadDefaultData ();
// STRUCTURE
//$ret [0] = '3215216960/7103/1791/1770/4384/3909/25172784/2473/5947/2464/5763/3930;4655420/0/0/25172784/561540/3/4405539/0/2/25172784/249880/0/4153589/0/2/25172784/251950/0/3787388/936784/3/24236000/366200/0/2288974/1346645/3/22889354/1498414/3/1706694/765428/0/22123926/582280/0/151549/883898/0/21240028/1555145/3/-661731/1047733/0/20192294/813280/0/;' . $db_data ['user_name'] . '/237/0/0/1/-391/0/0/0/0/0/0/0/0/0/37/272/0/0/3/-436/0/0/0/0/0/0/0/0/0;1/57/458/646/1/4/5/328/328/328/0/0/1/2003/455/909/0/0/0/0/0/0/0/0;0/0/0/0/0/0/0/0/0/0/0/0/0/0/0/0/0/0/0/0/0/0/0/0;2;0;0;0;-1;;36;37Ç*1/2/3/' . $db_data ['user_name'] . '///-1/////DZ191428/1528/1511/6632/2503/3746/25172784/2473/5947/2464/5763/3930;695733/0/0/20192294/495694/0/25093/1744524/3/18447770/670640/0/-946245/2487723/3/15960047/971338/3/;' . $db_data ['user_name'] . '/237/0/0/2/-392/0/0/0/0/0/0/0/0/0/37/272/0/0/3/-436/0/0/0/0/0/0/0/0/0;1/1009/819/1467/3/1/2/986/0/0/22997039/0/1/2003/455/909/0/0/0/0/0/0/0/0;0/0/0/0/0/0/0/0/0/0/0/0/0/0/0/0/0/0/0/0/0/0/0/0;2;0;0;0;-1;;36;37Ç*1/3/' . $db_data ['user_name'] . '////20192294/////Ç´363968/1528/6323/1508/4584/3565/25172784/2473/5947/2464/5763/3930;4128753/357705/3/15602342/235215/0/4128753/0/2/15602342/0/2/3783833/296818/0/15305524/344920/0/3783833/0/2/15305524/0/2/3783833/0/2/15305524/0/2/3144072/427037/0/14878487/639761/3/2733022/0/2/14878487/411049/0/2733022/0/2/14878487/0/2/2222398/0/2/14878487/510624/0/1531360/609312/0/14269175/691038/0/1531360/0/2/14269175/0/2/232841/0/2/14269175/1298519/3/232841/787640/0/13481535/0/2/232841/864448/0/12617087/0/2/232841/0/2/12617087/0/2/-1730563/1884610/3/10732477/1963404/3/;' . $db_data ['user_name'] . '/237/0/0/3/-393/0/0/0/0/0/0/0/0/0/37/272/0/0/3/-436/0/0/0/0/0/0/0/0/0;1/2056/600/644/2/4/5/588/588/588/0/0/1/2003/455/909/0/0/0/0/0/0/0/0;0/0/0/0/0/0/0/0/0/0/0/0/0/0/0/0/0/0/0/0/0/0/0/0;2;0;0;0;-1;;36;37Ç*1/' . $db_data ['user_name'] . '/////15960047/////DZ082424/961/1005/6661/2274/2125/25172784/2473/5947/2464/5763/3930;166101/1403916/3/9328561/916323/3/-632401/995043/0/8333517/798503/0/;' . $db_data ['user_name'] . '/237/1/1/2/2/103/102/2/109/3/2/15/1/0/37/272/0/0/3/-436/0/0/0/0/0/0/0/0/0;1/1009/1046/1410/3/4/5/1064/0/0/18758009/0/1/2003/455/909/0/0/0/0/0/0/0/0;0/0/0/0/0/0/0/0/0/0/0/0/0/0/0/0/0/0/0/0/0/0/0/0;2;0;0;0;-1;;36;37Ç*1//////10732477/////Ç»0;-1;0;0;0DZ264302793/92087/1397866973/1301994663/841267025/22/0/237/111298869/123996780/96905/933/-1/65338476/0/1338/1324/2/103/102/2/109/3/2/15/1/0/1/257/2/961/804/1950/1791/1700/0/201/4711/483/425/870/709/1848/1697/1602/0/1/0/1023410182/656368/443/0/3/4/2/492/0/0/11048178/0/3/1008/783/0/3/2/1/539/0/0/17891075/0/855638021/66546/532/0/3/4/5/532/0/0/9488487/0/687865860/1967089/437/0/3/2/1/500/0/0/6277787/0/1358954504/655369/0/0/3/1/5/528/0/0/7667088/0/1191182343/66544/622/0/3/2/4/512/0/0/8327251/0/1526726665/655368/0/0/4/1/5/483/0/0/0/0/1694498826/1310746/0/0/3/2/1/544/0/0/8864890/0/184549377/328689/1046/1410/3/4/5/1064/0/0/18758009/0/0/0/0/0/0/0/0/0/0/0/0/0/8/19/0/0/1/5/3/571/0/0/29292628/0/0/1008/532/0/4/3/1/548/0/0/0/0/0/2010/2154/0/1/2/3/295/269/0/0/0/0/15/0/0/11/5/0/72/25/0/1852482/0/0/1/0/0/1/5/3/304/248/0/0/0/0/237/237/237/5/4/1/-90/-93/-80/17/8/2/720/720/960/0/1010/718/0/4/1/5/295/269/0/27657353/0/0/1008/743/0/4/3/2/332/242/0/30570794/0/0/19/0/0/1/5/3/571/0/0/29292628/0/234800/839600/340000/28276200/10709600/34308500/2359298/1397782503/5/1008/579/0/3/1/5/552/0/0/40004185/0/3/1009/676/0/4/5/3/283/283/0/52922554/10/5/1009/411/0/5/4/2/289/267/0/55685219/10/5/1008/827/0/1/2/4/316/260/0/41133282/1/1/1008/809/1739/2/5/4/1120/0/0/99431632/0/1/1009/1160/1378/1/3/5/634/458/0/158498908/10/1397782757/8/7/0/0/1/3/2/342/224/0/21909165/10/12/16/0/0/11/12/0/168/25/0/3087470/15/9/5/0/0/5/4/2/557/0/0/39474100/0/8/5/0/0/1/4/2/340/224/0/10585665/1/9/14/0/0/1/5/3/350/218/0/12332167/1/8/12/0/0/4/3/5/552/0/0/37778355/0/37/0/829/3/272/10968/921711/1357235982/12/10/1391589443/0/0/1/2817/1046/1410/0/1398880351/3/0/0/1397866956/6000/0/100/1397870573/1397859709/146/146/1/1356631675/237/100/5192/9239/8082/1000000000/102529/2/1362/83/0/0/4/1397866973/5/12/12/12/12/12/12/12/12/12/12/120/16/485/15/12/0/1398042462/1398040963/0/25/25/0/0/304900910/304900910/304900910/1/1368876356/0/1596/1397866973';
//break;
// check time restrictions
$time = new DateTime ();
$time = $time->getTimestamp ();
if ($time < $db_data ['dungeon_time']) {
if ($db_data ['mushroom'] <= 0) {
// TODO throw error
break;
}
$db_data ['mushroom'] = $db_data ['mushroom'] - 100; // 100 grzybĂłw za walke z przeciwnikiem
$time = $db_data ['dungeon_time'];
} else {
$time = $time + 1; // niedziała/not working
}
$stage = $db_data['guild_level'];
$OP = getGuildMonster ( $stage, $db_data );
$p = new Char ( $db_data );
// response
$t_ret = array ();
// Staty gracza
array_push ( $t_ret, "122" . $p->getHP (), $p->getStr (), $p->getDex (), $p->getInt (), $p->getWit (), $p->getLuck () );
// Staty przeciwnika
array_push ( $t_ret, $OP->getHP (), $OP->getStr (), $OP->getDex (), $OP->getInt (), $OP->getWit (), $OP->getLuck () . ";" ); // . $p->getHp () );
// walka/sumulacja
$sim = SF_Calc::calculateWin ( $p, $OP );
$win = $sim [count ( $sim ) - 1] [0] <= 0 ? true : false;
// Gdy wgramy ....
if ($win) {
// increment stage lvl
$stage ++;
// Bonus Gildijny
$ebonus = 1 + (($db_data ['instructor'] + $db_data ['dung']) / 50);
$gbonus = 1 + (($db_data ['treasure'] + $db_data ['dung']) / 50);
// Dodanie expa i golda : ...
$db_data ['exp'] = ( int ) $db_data ['exp'] + $OP->getExp ();
$db_data ['silver'] = ( int ) $db_data ['silver'] + $OP->getGold ();
// Dodanie itemkĂłw
$itemRand = 1;
$lvl = $db_data ['lvl'];
$class = $db_data ['class'];
$epicRand = 1;
$shop = rand(0, 1);
$item = genItem ($lvl, $class, $shop, 'dungeon');
$qry = $db->prepare ( "SELECT slot FROM items WHERE slot = 10 AND owner_id = " . $db_data['user_id'] );
$qry->execute ();
if ($qry->rowCount () < 1) {
$item ['slot'] = 10;
} else {
$qry = $db->prepare ( "SELECT slot FROM items WHERE slot = 11 AND owner_id = " . $db_data['user_id'] );
$qry->execute ();
if ($qry->rowCount () < 1) {
$item ['slot'] = 11;
} else {
$qry = $db->prepare ( "SELECT slot FROM items WHERE slot = 12 AND owner_id = " . $db_data['user_id'] );
$qry->execute ();
if ($qry->rowCount () < 1) {
$item ['slot'] = 12;
} else {
$qry = $db->prepare ( "SELECT slot FROM items WHERE slot = 13 AND owner_id = " . $db_data['user_id']);
$qry->execute ();
if ($qry->rowCount () < 1) {
$item ['slot'] = 13;
} else {
$qry = $db->prepare ( "SELECT slot FROM items WHERE slot = 14 AND owner_id = " . $db_data['user_id'] );
$qry->execute ();
if ($qry->rowCount () < 1) {
$item ['slot'] = 14;
} else {
$ret = array (
$ERR_INVENTORY_FULL
);
break;
}
}
}
}
}
$qry = $db->prepare ( 'INSERT INTO items(item_type, item_id, dmg_min, dmg_max, atr_type_1, atr_type_2, atr_type_3, atr_val_1, atr_val_2, atr_val_3, gold, mush, slot, owner_id)
VALUES(' . $item ['item_type'] . ',' . $item ['item_id'] . ',' . $item ['dmg_min'] . ',' . $item ['dmg_max'] . ',
' . $item ['atr_type_1'] . ',' . $item ['atr_type_2'] . ',' . $item ['atr_type_3'] . ',' . $item ['atr_val_1'] . ',' . $item ['atr_val_2'] . ',
' . $item ['atr_val_3'] . ',' . $item ['gold'] . ',' . $item ['mush'] . ',' . $item ['slot'] . ',' . $db_data['user_id'] . ')' );
$qry->execute ();
// lvl up
while ( $db_data ['exp'] > $LEVELS [$db_data ['lvl']] ) {
$db_data ['exp'] -= $LEVELS [$db_data ['lvl']];
$db_data ['lvl'] = ( int ) $db_data ['lvl'] + 1;
}
}
// update database
$qry_str = "UPDATE user_data SET
exp = :exp,
lvl = :lvl,
silver = :silver,
mushroom = :shroom,
dungeon_time = :time,
guild_level = :guild_level ";
$qry_str .= " WHERE ssid = :ssid";
$qry = $db->prepare ( $qry_str );
$qry->bindParam ( ':exp', $db_data ['exp'] );
$qry->bindParam ( ':lvl', $db_data ['lvl'] );
$qry->bindParam ( ':silver', $db_data ['silver'] );
$qry->bindParam ( ':shroom', $db_data ['mushroom'] );
$qry->bindParam ( ':time', $time );
$qry->bindParam ( ':guild_level', $stage );
$qry->bindParam ( ':ssid', $SSID );
$qry->execute ();
$t_ret [count ( $t_ret ) - 1] .= $sim [0] [0];
// ---logs----
// first 3, one in previous index, separated by semicolon
array_push ( $t_ret, $sim [0] [1], $sim [0] [2] );
for($i = 1; $i < count ( $sim ); $i ++) {
array_push ( $t_ret, $sim [$i] [0], $sim [$i] [1], $sim [$i] [2] );
// echo $sim [$i][0]."/".$sim [$i][1]."/".$sim [$i][2]."/";
}
// looks
array_push ( $t_ret, ";" . $db_data ['user_name'], $p->getLvl (), $db_data ['race'], $db_data ['gender'], $db_data ['class'] );
// faces
for($i = 1; $i <= 9; $i ++) {
$t_ret [] = $db_data ['face' . $i];
}
// mob looks, lvl, weapon
array_push ( $t_ret, "0", "0", $OP->getLvl (), "0", "0", "1", "-" . $OP->getId (), "0", "0", "0", "0", "0", "0", "0", "0", "0;" . $p->hasWeapon () );
// weapon info - player
$weap = $p->getWeapon ();
array_push ( $t_ret, $weap ['item_id'], $weap ['dmg_min'], $weap ['dmg_max'], $weap ['atr_type_1'], $weap ['atr_type_2'], $weap ['atr_type_3'], $weap ['atr_val_1'], $weap ['atr_val_2'], $weap ['atr_val_3'], $weap ['gold'], $weap ['mush'] );
// weapon info - mob
$weap = $OP->getWeapon ();
array_push ( $t_ret, $OP->hasWeapon (), $weap ['item_id'], $weap ['dmg_min'], $weap ['dmg_max'], $weap ['atr_type_1'], $weap ['atr_type_2'], $weap ['atr_type_3'], $weap ['atr_val_1'], $weap ['atr_val_2'], $weap ['atr_val_3'], $weap ['gold'], $weap ['mush'] . ";" . $p->hasShield () );
// shields
$sh = $p->getShield ();
array_push ( $t_ret, $sh ['item_id'], $sh ['dmg_min'], $sh ['dmg_max'], $sh ['atr_type_1'], $sh ['atr_type_2'], $sh ['atr_type_3'], $sh ['atr_val_1'], $sh ['atr_val_2'], $sh ['atr_val_3'], $sh ['gold'], $sh ['mush'] );
$sh = $OP->getShield ();
array_push ( $ret, $OP->hasShield (), $sh ['item_id'], $sh ['dmg_min'], $sh ['dmg_max'], $sh ['atr_type_1'], $sh ['atr_type_2'], $sh ['atr_type_3'], $sh ['atr_val_1'], $sh ['atr_val_2'], $sh ['atr_val_3'], $sh ['gold'] );
// ?;?;?;exp;silver;win?
$t_ret [] = $sh ['mush'] . ";3;0;" . $OP->getExp () . ";" . $OP->getGold () . ";-1;";
// rest is default data
$t_ret [count ( $t_ret ) - 1] .= $ret [0];
// set dungeon time left
$ret [$SF_DUNGEON_ENDTIME] = $time;
for($i = 1; $i < count ( $ret ); $i ++) {
$t_ret [] = $ret [$i];
}
exit ( join ( "/", $t_ret ) );
break;
Gildendungeon:
case $ACT_GUILD_COMMENCE_ATTACK :
$db_data = loadDefaultData ();
$time = new DateTime ();
$time = $time->getTimestamp ();
if ($time < $db_data ['dungeon_time']) {
if ($db_data ['mushroom'] <= 0) {
break;
}
$db_data ['mushroom'] = $db_data ['mushroom'] - 1;
$time = $db_data ['dungeon_time'];
} else {
$time = $time + 1800;
}
$stage = $db_data['guild_level'];
$OP = getGuildMonster ( $stage, $db_data );
$p = new Char ( $db_data );
$t_ret = array ();
array_push ( $t_ret, "122" . $p->getHP (), $p->getStr (), $p->getDex (), $p->getInt (), $p->getWit (), $p->getLuck () );
array_push ( $t_ret, $OP->getHP (), $OP->getStr (), $OP->getDex (), $OP->getInt (), $OP->getWit (), $OP->getLuck () . ";" ); // . $p->getHp () );
$sim = SF_Calc::calculateWin ( $p, $OP );
$win = $sim [count ( $sim ) - 1] [0] <= 0 ? true : false;
if ($win) {
$stage ++;
$ebonus = 1 + (($db_data ['instructor'] + $db_data ['dung']) / 50);
$gbonus = 1 + (($db_data ['treasure'] + $db_data ['dung']) / 50);
$db_data ['exp'] = ( int ) $db_data ['exp'] + $OP->getExp ();
$db_data ['silver'] = ( int ) $db_data ['silver'] + $OP->getGold ();
$itemRand = 1;
$lvl = $db_data ['lvl'];
$class = $db_data ['class'];
$epicRand = 1;
$shop = rand(0, 1);
$item = genItem ($lvl, $class, $shop, 'dungeon');
$qry = $db->prepare ( "SELECT slot FROM items WHERE slot = 10 AND owner_id = " . $db_data['user_id'] );
$qry->execute ();
if ($qry->rowCount () < 1) {
$item ['slot'] = 10;
} else {
$qry = $db->prepare ( "SELECT slot FROM items WHERE slot = 11 AND owner_id = " . $db_data['user_id'] );
$qry->execute ();
if ($qry->rowCount () < 1) {
$item ['slot'] = 11;
} else {
$qry = $db->prepare ( "SELECT slot FROM items WHERE slot = 12 AND owner_id = " . $db_data['user_id'] );
$qry->execute ();
if ($qry->rowCount () < 1) {
$item ['slot'] = 12;
} else {
$qry = $db->prepare ( "SELECT slot FROM items WHERE slot = 13 AND owner_id = " . $db_data['user_id']);
$qry->execute ();
if ($qry->rowCount () < 1) {
$item ['slot'] = 13;
} else {
$qry = $db->prepare ( "SELECT slot FROM items WHERE slot = 14 AND owner_id = " . $db_data['user_id'] );
$qry->execute ();
if ($qry->rowCount () < 1) {
$item ['slot'] = 14;
} else {
$ret = array (
$ERR_INVENTORY_FULL
);
break;
}
}
}
}
}
$qry = $db->prepare ( 'INSERT INTO items(item_type, item_id, dmg_min, dmg_max, atr_type_1, atr_type_2, atr_type_3, atr_val_1, atr_val_2, atr_val_3, gold, mush, slot, owner_id)
VALUES(' . $item ['item_type'] . ',' . $item ['item_id'] . ',' . $item ['dmg_min'] . ',' . $item ['dmg_max'] . ',
' . $item ['atr_type_1'] . ',' . $item ['atr_type_2'] . ',' . $item ['atr_type_3'] . ',' . $item ['atr_val_1'] . ',' . $item ['atr_val_2'] . ',
' . $item ['atr_val_3'] . ',' . $item ['gold'] . ',' . $item ['mush'] . ',' . $item ['slot'] . ',' . $db_data['user_id'] . ')' );
$qry->execute ();
while ( $db_data ['exp'] > $LEVELS [$db_data ['lvl']] ) {
$db_data ['exp'] -= $LEVELS [$db_data ['lvl']];
$db_data ['lvl'] = ( int ) $db_data ['lvl'] + 1;
}
}
$qry_str = "UPDATE user_data SET
exp = :exp,
lvl = :lvl,
silver = :silver,
mushroom = :shroom,
dungeon_time = :time,
guild_level = :guild_level ";
$qry_str .= " WHERE ssid = :ssid";
$qry = $db->prepare ( $qry_str );
$qry->bindParam ( ':exp', $db_data ['exp'] );
$qry->bindParam ( ':lvl', $db_data ['lvl'] );
$qry->bindParam ( ':silver', $db_data ['silver'] );
$qry->bindParam ( ':shroom', $db_data ['mushroom'] );
$qry->bindParam ( ':time', $time );
$qry->bindParam ( ':guild_level', $stage );
$qry->bindParam ( ':ssid', $SSID );
$qry->execute ();
$t_ret [count ( $t_ret ) - 1] .= $sim [0] [0];
$qry_str = "UPDATE guilds SET
guild_id = :guild_id,
instructor = :instructor,
dung = :dung,
treasure = :treasure ";
$qry = $db->prepare ( $qry_str );
$qry->bindParam ( ':guild_id', $db_data ['guild_id'] );
$qry->bindParam ( ':instructor', $db_data ['instructor'] );
$qry->bindParam ( ':treasure', $db_data ['treasure'] );
$qry->bindParam ( ':dung', $db_data ['dung'] );
$qry->execute ();
array_push ( $t_ret, $sim [0] [1], $sim [0] [2] );
for($i = 1; $i < count ( $sim ); $i ++) {
array_push ( $t_ret, $sim [$i] [0], $sim [$i] [1], $sim [$i] [2] );
}
array_push ( $t_ret, ";" . $db_data ['user_name'], $p->getLvl (), $db_data ['race'], $db_data ['gender'], $db_data ['class'] );
for($i = 1; $i <= 9; $i ++) {
$t_ret [] = $db_data ['face' . $i];
}
array_push ( $t_ret, "0", "0", $OP->getLvl (), "0", "0", "1", "-" . $OP->getId (), "0", "0", "0", "0", "0", "0", "0", "0", "0;" . $p->hasWeapon () );
$weap = $p->getWeapon ();
array_push ( $t_ret, $weap ['item_id'], $weap ['dmg_min'], $weap ['dmg_max'], $weap ['atr_type_1'], $weap ['atr_type_2'], $weap ['atr_type_3'], $weap ['atr_val_1'], $weap ['atr_val_2'], $weap ['atr_val_3'], $weap ['gold'], $weap ['mush'] );
$weap = $OP->getWeapon ();
array_push ( $t_ret, $OP->hasWeapon (), $weap ['item_id'], $weap ['dmg_min'], $weap ['dmg_max'], $weap ['atr_type_1'], $weap ['atr_type_2'], $weap ['atr_type_3'], $weap ['atr_val_1'], $weap ['atr_val_2'], $weap ['atr_val_3'], $weap ['gold'], $weap ['mush'] . ";" . $p->hasShield () );
$sh = $p->getShield ();
array_push ( $t_ret, $sh ['item_id'], $sh ['dmg_min'], $sh ['dmg_max'], $sh ['atr_type_1'], $sh ['atr_type_2'], $sh ['atr_type_3'], $sh ['atr_val_1'], $sh ['atr_val_2'], $sh ['atr_val_3'], $sh ['gold'], $sh ['mush'] );
$sh = $OP->getShield ();
array_push ( $ret, $OP->hasShield (), $sh ['item_id'], $sh ['dmg_min'], $sh ['dmg_max'], $sh ['atr_type_1'], $sh ['atr_type_2'], $sh ['atr_type_3'], $sh ['atr_val_1'], $sh ['atr_val_2'], $sh ['atr_val_3'], $sh ['gold'] );
$t_ret [] = $sh ['mush'] . ";3;0;" . $OP->getExp () . ";" . $OP->getGold () . ";-1;";
$t_ret [count ( $t_ret ) - 1] .= $ret [0];
$ret [$SF_DUNGEON_ENDTIME] = $time;
for($i = 1; $i < count ( $ret ); $i ++) {
$t_ret [] = $ret [$i];
}
exit ( join ( "/", $t_ret ) );
break;
2. Dann suchen wir: function getTowerMonster
Und gehen mit dem Cursor zu:
case 100 :
return new Monster ( (198 + 2 * $stage), 1, 18000, 5781, 5578, 18994, 7980, 365356, 548792, 100000000, 15087, (399 + $stage), 178017293, -1);
}
}
Unter diesem fügen wir ein:
function getGuildMonster($stage, $db_data) {
$stage -= 1;
if ($stage < 1)
$stage = 1;
else if ($stage > 50)
$stage = 50;
switch ($stage) {
case 1 :
return new Monster ( 152, 1, 2880, 1000, 975, 2600, 750, 59534, 89590, 1989000, 6460, 193, 3467701,-1);
case 2 :
return new Monster ( 156, 2, 730, 750, 3040, 2600, 1090, 145485, 218380, 816400, 1326, 194, 3868959, -2);
case 3 :
return new Monster ( 160, 3, 770, 3040, 760, 2760, 1125, 82960, 124440, 1777440, 3400, 195, 4307201, -1);
case 4 :
return new Monster ( 162, 1, 3080, 1075, 1050, 2800, 800, 67980, 101970, 2282000, 6885, 196, 4541147, -5 );
case 5 :
return new Monster ( 166, 2, 780, 800, 3240, 2800, 1165, 164775, 247325, 935200, 1411, 197, 5040468, -2);
case 6 :
return new Monster ( 174, 1, 3320, 1165, 1140, 3040, 860, 78588, 117882, 2660000, 7395, 198, 6175189, 2004 );
case 7 :
return new Monster ( 176, 3, 850, 3360, 840, 3080, 1245, 100763, 150976, 2180640, 3740, 199, 6489101, 8 );
case 8 :
return new Monster ( 178, 3, 860, 3400, 850, 3120, 1260, 102982, 154473, 2233920, 3782, 200, 6816906, 9 );
case 9 :
return new Monster ( 190, 2, 900, 920, 3720, 3280, 1340, 216713, 325256, 1252960, 1615, 201, 9081081, -2 );
case 10 :
return new Monster ( 205, 3, 995, 3940, 985, 3660, 1450, 137460, 206190, 3015840, 4356, 202, 12751538, 24);
case 11 :
return new Monster ( 210, 1, 4040, 1420, 1395, 3760, 1010, 115425, 173340, 3966800, 8925, 203, 14222021, 24);
case 12 :
return new Monster ( 215, 1, 4140, 1455, 1430, 3860, 1030, 121180, 181770, 4168800, 9137, 204, 15824529, 13);
case 13 :
return new Monster ( 220, 1, 4240, 1490, 1465, 3960, 1050, 127075, 190400, 4375800, 9350, 205, 17581974, -4 );
case 14 :
return new Monster ( 225, 3, 1095, 4340, 1085, 4060, 1590, 166170, 249255, 3670240, 4781, 206, 19491852, -1);
case 15 :
return new Monster ( 230, 3, 1120, 4440, 1110, 4160, 1615, 173995, 260770, 3843840, 4887, 207, 21576743, -1);
case 16 :
return new Monster ( 235, 2, 1125, 1145, 4620, 4180, 1655, 332897, 499114, 1972960, 1997, 208, 23839326, -1);
case 17 :
return new Monster ( 240, 1, 4640, 1630, 1605, 4360, 1130, 151590, 227385, 5253800, 10200, 209, 26302843, 13);
case 18 :
return new Monster ( 245, 1, 4740, 1665, 1640, 4460, 1150, 158175, 237025, 5485800, 10412, 210, 28966329, -1);
case 19 :
return new Monster ( 250, 1, 4840, 1700, 1675, 4560, 1170, 164900, 247350, 5722800, 10625, 211, 31862139, 10);
case 20 :
return new Monster ( 255, 1, 4940, 1735, 1710, 4660, 1190, 171270, 257400, 5964800, 10837, 212, 34985806, 20 );
case 21 :
return new Monster ( 260, 3, 1270, 5040, 1260, 4760, 1835, 223210, 334815, 4969440, 5525, 213, 38369989, 7 );
case 22 :
return new Monster ( 265, 1, 5140, 1805, 1780, 4860, 1230, 185400, 278100, 6463800, 11262, 214, 42016588, 12);
case 23 :
return new Monster ( 270, 1, 5240, 1840, 1815, 4960, 1250, 192675, 288750, 6720800, 11475, 215, 45958126, 6 );
case 24 :
return new Monster ( 275, 2, 1325, 1345, 5420, 4980, 1935, 456663, 685266, 2748960, 2337, 216, 50191950,-1 );
case 25 :
return new Monster ( 280, 3, 1370, 5440, 1360, 5160, 1975, 259420, 389130, 5799840, 5950, 217, 54764133, -4 );
case 26 :
return new Monster ( 285, 1, 5540, 1945, 1920, 5260, 1310, 214785, 322455, 7521800, 12112, 218, 59666036, 20 );
case 27 :
return new Monster ( 290, 3, 1420, 5640, 1410, 5360, 2045, 278545, 417535, 6239040, 6162, 219, 64942539, 29 );
case 28 :
return new Monster ( 295, 2, 1425, 1445, 5820, 5380, 2075, 525866, 789382, 3184960, 2507, 220, 70595045, 6 );
case 29 :
return new Monster ( 300, 1, 5840, 2050, 2025, 5560, 1370, 238680, 358020, 8367800, 12750, 221, 76669139, -1 );
case 30 :
return new Monster ( 305, 2, 1475, 1495, 6020, 5580, 2145, 562599, 843597, 3414960, 2592, 222, 83158305, -1 );
case 31 :
return new Monster ( 310, 2, 1500, 1520, 6120, 5680, 2180, 581124, 871686, 3532960, 2635, 223, 90125436, -1 );
case 32 :
return new Monster ( 315, 1, 6140, 2155, 2130, 5860, 1430, 263220, 394830, 9258800, 13387, 224, 97556858, -1 );
case 33 :
return new Monster ( 320, 3, 1570, 6240, 1560, 5960, 2255, 340000, 510000, 7652640, 6800, 225, 105514978, -5 );
case 34 :
return new Monster ( 325, 2, 1575, 1595, 6420, 5980, 2285, 639142, 958713, 3898960, 2762, 226, 113997992, -1 );
case 35 :
return new Monster ( 330, 1, 6440, 2260, 2235, 6160, 1490, 288960, 434085, 10194800, 14025, 227, 123067419,30 );
case 36 :
return new Monster ( 335, 3, 1645, 6540, 1635, 6260, 2360, 372695, 559370, 8413440, 7118, 228, 132712488, -1 );
case 37 :
return new Monster ( 340, 1, 6640, 2330, 2305, 6360, 1530, 307230, 460845, 10843800, 14450, 229, 143018630, -5 );
case 38 :
return new Monster ( 345, 1, 6740, 2365, 2340, 6460, 1150, 316575, 474525, 11175800, 14662, 230, 153964246, 53 );
case 39 :
return new Monster ( 350, 1, 6840, 2400, 2375, 6560, 1570, 326060, 489090, 11512800, 14875, 231, 165631756, 51 );
case 40 :
return new Monster ( 355, 1, 7570, 2655, 2630, 7290, 1716, 365356, 548792, 12976200, 15087, 232, 178017293, -1);
case 41 :
return new Monster ( 360, 2, 1970, 1990, 8000, 7560, 2838, 881901, 1323252, 5458320, 3060, 233, 191202824, 1003 );
case 42 :
return new Monster ( 365, 1, 8290, 2908, 2882, 8010, 1860, 411680, 617520, 14658300, 15512, 244, 205171015, -1);
case 43 :
return new Monster ( 370, 2, 2160, 2180, 8760, 8320, 3104, 992764, 1489146, 6173440, 3145, 245, 220033230, 1008 );
case 44 :
return new Monster ( 375, 1, 9340, 3275, 3250, 9060, 2070, 476850, 715275, 17032800, 15937, 246, 235758967, 0 );
case 45 :
return new Monster ( 380, 3, 2682, 10690, 2672, 10410, 3812, 691220, 1036830, 15864840, 8075, 247, 252458197, 2056 );
case 46 :
return new Monster ( 385, 2, 2888, 2908, 11670, 11230, 4122, 1375904, 2063856, 8669560, 3272, 248, 270120546, 1056 );
case 47 :
return new Monster ( 390, 1, 12540, 4395, 4370, 12260, 2710, 665150, 997725, 23968300, 16575, 249, 288853442, 55 );
case 48 :
return new Monster ( 395, 1, 13540, 4724, 4720, 13260, 2910, 727635, 1090775, 26254800, 16787, 250, 308630400, 11 );
case 49 :
return new Monster ( 400, 1, 16840, 5900, 5875, 16540, 3570, 916640, 1374960, 33162700, 17000, 251, 329599075, 22 );
case 50 :
return new Monster ( 450, 1, 16840, 5900, 5875, 16540, 3570, 916640, 1374960, 33162700, 17000, 252, 329599075, 22 );
}
}
Danach gehen wir in phpmyadmin in die Datenbank und fügen ein:
ALTER TABLE user_data ADD guild_level tinyint(4) NOT NULL DEFAULT 1 after user_id
$db_data = loadDefaultData ();
$time = new DateTime ();
$time = $time->getTimestamp ();
if ($time < $db_data ['dungeon_time']) {
if ($db_data ['mushroom'] <= 0) {
break;
}
$db_data ['mushroom'] = $db_data ['mushroom'] - 1;
$time = $db_data ['dungeon_time'];
} else {
$time = $time + 1800;
}
$stage = $db_data['guild_level'];
$OP = getGuildMonster ( $stage, $db_data );
$p = new Char ( $db_data );
$t_ret = array ();
array_push ( $t_ret, "122" . $p->getHP (), $p->getStr (), $p->getDex (), $p->getInt (), $p->getWit (), $p->getLuck () );
array_push ( $t_ret, $OP->getHP (), $OP->getStr (), $OP->getDex (), $OP->getInt (), $OP->getWit (), $OP->getLuck () . ";" ); // . $p->getHp () );
$sim = SF_Calc::calculateWin ( $p, $OP );
$win = $sim [count ( $sim ) - 1] [0] <= 0 ? true : false;
if ($win) {
$stage ++;
$ebonus = 1 + (($db_data ['instructor'] + $db_data ['dung']) / 50);
$gbonus = 1 + (($db_data ['treasure'] + $db_data ['dung']) / 50);
$db_data ['exp'] = ( int ) $db_data ['exp'] + $OP->getExp ();
$db_data ['silver'] = ( int ) $db_data ['silver'] + $OP->getGold ();
$itemRand = 1;
$lvl = $db_data ['lvl'];
$class = $db_data ['class'];
$epicRand = 1;
$shop = rand(0, 1);
$item = genItem ($lvl, $class, $shop, 'dungeon');
$qry = $db->prepare ( "SELECT slot FROM items WHERE slot = 10 AND owner_id = " . $db_data['user_id'] );
$qry->execute ();
if ($qry->rowCount () < 1) {
$item ['slot'] = 10;
} else {
$qry = $db->prepare ( "SELECT slot FROM items WHERE slot = 11 AND owner_id = " . $db_data['user_id'] );
$qry->execute ();
if ($qry->rowCount () < 1) {
$item ['slot'] = 11;
} else {
$qry = $db->prepare ( "SELECT slot FROM items WHERE slot = 12 AND owner_id = " . $db_data['user_id'] );
$qry->execute ();
if ($qry->rowCount () < 1) {
$item ['slot'] = 12;
} else {
$qry = $db->prepare ( "SELECT slot FROM items WHERE slot = 13 AND owner_id = " . $db_data['user_id']);
$qry->execute ();
if ($qry->rowCount () < 1) {
$item ['slot'] = 13;
} else {
$qry = $db->prepare ( "SELECT slot FROM items WHERE slot = 14 AND owner_id = " . $db_data['user_id'] );
$qry->execute ();
if ($qry->rowCount () < 1) {
$item ['slot'] = 14;
} else {
$ret = array (
$ERR_INVENTORY_FULL
);
break;
}
}
}
}
}
$qry = $db->prepare ( 'INSERT INTO items(item_type, item_id, dmg_min, dmg_max, atr_type_1, atr_type_2, atr_type_3, atr_val_1, atr_val_2, atr_val_3, gold, mush, slot, owner_id)
VALUES(' . $item ['item_type'] . ',' . $item ['item_id'] . ',' . $item ['dmg_min'] . ',' . $item ['dmg_max'] . ',
' . $item ['atr_type_1'] . ',' . $item ['atr_type_2'] . ',' . $item ['atr_type_3'] . ',' . $item ['atr_val_1'] . ',' . $item ['atr_val_2'] . ',
' . $item ['atr_val_3'] . ',' . $item ['gold'] . ',' . $item ['mush'] . ',' . $item ['slot'] . ',' . $db_data['user_id'] . ')' );
$qry->execute ();
while ( $db_data ['exp'] > $LEVELS [$db_data ['lvl']] ) {
$db_data ['exp'] -= $LEVELS [$db_data ['lvl']];
$db_data ['lvl'] = ( int ) $db_data ['lvl'] + 1;
}
}
$qry_str = "UPDATE user_data SET
exp = :exp,
lvl = :lvl,
silver = :silver,
mushroom = :shroom,
dungeon_time = :time,
guild_level = :guild_level ";
$qry_str .= " WHERE ssid = :ssid";
$qry = $db->prepare ( $qry_str );
$qry->bindParam ( ':exp', $db_data ['exp'] );
$qry->bindParam ( ':lvl', $db_data ['lvl'] );
$qry->bindParam ( ':silver', $db_data ['silver'] );
$qry->bindParam ( ':shroom', $db_data ['mushroom'] );
$qry->bindParam ( ':time', $time );
$qry->bindParam ( ':guild_level', $stage );
$qry->bindParam ( ':ssid', $SSID );
$qry->execute ();
$t_ret [count ( $t_ret ) - 1] .= $sim [0] [0];
$qry_str = "UPDATE guilds SET
guild_id = :guild_id,
instructor = :instructor,
dung = :dung,
treasure = :treasure ";
$qry = $db->prepare ( $qry_str );
$qry->bindParam ( ':guild_id', $db_data ['guild_id'] );
$qry->bindParam ( ':instructor', $db_data ['instructor'] );
$qry->bindParam ( ':treasure', $db_data ['treasure'] );
$qry->bindParam ( ':dung', $db_data ['dung'] );
$qry->execute ();
array_push ( $t_ret, $sim [0] [1], $sim [0] [2] );
for($i = 1; $i < count ( $sim ); $i ++) {
array_push ( $t_ret, $sim [$i] [0], $sim [$i] [1], $sim [$i] [2] );
}
array_push ( $t_ret, ";" . $db_data ['user_name'], $p->getLvl (), $db_data ['race'], $db_data ['gender'], $db_data ['class'] );
for($i = 1; $i <= 9; $i ++) {
$t_ret [] = $db_data ['face' . $i];
}
array_push ( $t_ret, "0", "0", $OP->getLvl (), "0", "0", "1", "-" . $OP->getId (), "0", "0", "0", "0", "0", "0", "0", "0", "0;" . $p->hasWeapon () );
$weap = $p->getWeapon ();
array_push ( $t_ret, $weap ['item_id'], $weap ['dmg_min'], $weap ['dmg_max'], $weap ['atr_type_1'], $weap ['atr_type_2'], $weap ['atr_type_3'], $weap ['atr_val_1'], $weap ['atr_val_2'], $weap ['atr_val_3'], $weap ['gold'], $weap ['mush'] );
$weap = $OP->getWeapon ();
array_push ( $t_ret, $OP->hasWeapon (), $weap ['item_id'], $weap ['dmg_min'], $weap ['dmg_max'], $weap ['atr_type_1'], $weap ['atr_type_2'], $weap ['atr_type_3'], $weap ['atr_val_1'], $weap ['atr_val_2'], $weap ['atr_val_3'], $weap ['gold'], $weap ['mush'] . ";" . $p->hasShield () );
$sh = $p->getShield ();
array_push ( $t_ret, $sh ['item_id'], $sh ['dmg_min'], $sh ['dmg_max'], $sh ['atr_type_1'], $sh ['atr_type_2'], $sh ['atr_type_3'], $sh ['atr_val_1'], $sh ['atr_val_2'], $sh ['atr_val_3'], $sh ['gold'], $sh ['mush'] );
$sh = $OP->getShield ();
array_push ( $ret, $OP->hasShield (), $sh ['item_id'], $sh ['dmg_min'], $sh ['dmg_max'], $sh ['atr_type_1'], $sh ['atr_type_2'], $sh ['atr_type_3'], $sh ['atr_val_1'], $sh ['atr_val_2'], $sh ['atr_val_3'], $sh ['gold'] );
$t_ret [] = $sh ['mush'] . ";3;0;" . $OP->getExp () . ";" . $OP->getGold () . ";-1;";
$t_ret [count ( $t_ret ) - 1] .= $ret [0];
$ret [$SF_DUNGEON_ENDTIME] = $time;
for($i = 1; $i < count ( $ret ); $i ++) {
$t_ret [] = $ret [$i];
}
exit ( join ( "/", $t_ret ) );
break;
2. Dann suchen wir: function getTowerMonster
Und gehen mit dem Cursor zu:
case 100 :
return new Monster ( (198 + 2 * $stage), 1, 18000, 5781, 5578, 18994, 7980, 365356, 548792, 100000000, 15087, (399 + $stage), 178017293, -1);
}
}
Unter diesem fügen wir ein:
function getGuildMonster($stage, $db_data) {
$stage -= 1;
if ($stage < 1)
$stage = 1;
else if ($stage > 50)
$stage = 50;
switch ($stage) {
case 1 :
return new Monster ( 152, 1, 2880, 1000, 975, 2600, 750, 59534, 89590, 1989000, 6460, 193, 3467701,-1);
case 2 :
return new Monster ( 156, 2, 730, 750, 3040, 2600, 1090, 145485, 218380, 816400, 1326, 194, 3868959, -2);
case 3 :
return new Monster ( 160, 3, 770, 3040, 760, 2760, 1125, 82960, 124440, 1777440, 3400, 195, 4307201, -1);
case 4 :
return new Monster ( 162, 1, 3080, 1075, 1050, 2800, 800, 67980, 101970, 2282000, 6885, 196, 4541147, -5 );
case 5 :
return new Monster ( 166, 2, 780, 800, 3240, 2800, 1165, 164775, 247325, 935200, 1411, 197, 5040468, -2);
case 6 :
return new Monster ( 174, 1, 3320, 1165, 1140, 3040, 860, 78588, 117882, 2660000, 7395, 198, 6175189, 2004 );
case 7 :
return new Monster ( 176, 3, 850, 3360, 840, 3080, 1245, 100763, 150976, 2180640, 3740, 199, 6489101, 8 );
case 8 :
return new Monster ( 178, 3, 860, 3400, 850, 3120, 1260, 102982, 154473, 2233920, 3782, 200, 6816906, 9 );
case 9 :
return new Monster ( 190, 2, 900, 920, 3720, 3280, 1340, 216713, 325256, 1252960, 1615, 201, 9081081, -2 );
case 10 :
return new Monster ( 205, 3, 995, 3940, 985, 3660, 1450, 137460, 206190, 3015840, 4356, 202, 12751538, 24);
case 11 :
return new Monster ( 210, 1, 4040, 1420, 1395, 3760, 1010, 115425, 173340, 3966800, 8925, 203, 14222021, 24);
case 12 :
return new Monster ( 215, 1, 4140, 1455, 1430, 3860, 1030, 121180, 181770, 4168800, 9137, 204, 15824529, 13);
case 13 :
return new Monster ( 220, 1, 4240, 1490, 1465, 3960, 1050, 127075, 190400, 4375800, 9350, 205, 17581974, -4 );
case 14 :
return new Monster ( 225, 3, 1095, 4340, 1085, 4060, 1590, 166170, 249255, 3670240, 4781, 206, 19491852, -1);
case 15 :
return new Monster ( 230, 3, 1120, 4440, 1110, 4160, 1615, 173995, 260770, 3843840, 4887, 207, 21576743, -1);
case 16 :
return new Monster ( 235, 2, 1125, 1145, 4620, 4180, 1655, 332897, 499114, 1972960, 1997, 208, 23839326, -1);
case 17 :
return new Monster ( 240, 1, 4640, 1630, 1605, 4360, 1130, 151590, 227385, 5253800, 10200, 209, 26302843, 13);
case 18 :
return new Monster ( 245, 1, 4740, 1665, 1640, 4460, 1150, 158175, 237025, 5485800, 10412, 210, 28966329, -1);
case 19 :
return new Monster ( 250, 1, 4840, 1700, 1675, 4560, 1170, 164900, 247350, 5722800, 10625, 211, 31862139, 10);
case 20 :
return new Monster ( 255, 1, 4940, 1735, 1710, 4660, 1190, 171270, 257400, 5964800, 10837, 212, 34985806, 20 );
case 21 :
return new Monster ( 260, 3, 1270, 5040, 1260, 4760, 1835, 223210, 334815, 4969440, 5525, 213, 38369989, 7 );
case 22 :
return new Monster ( 265, 1, 5140, 1805, 1780, 4860, 1230, 185400, 278100, 6463800, 11262, 214, 42016588, 12);
case 23 :
return new Monster ( 270, 1, 5240, 1840, 1815, 4960, 1250, 192675, 288750, 6720800, 11475, 215, 45958126, 6 );
case 24 :
return new Monster ( 275, 2, 1325, 1345, 5420, 4980, 1935, 456663, 685266, 2748960, 2337, 216, 50191950,-1 );
case 25 :
return new Monster ( 280, 3, 1370, 5440, 1360, 5160, 1975, 259420, 389130, 5799840, 5950, 217, 54764133, -4 );
case 26 :
return new Monster ( 285, 1, 5540, 1945, 1920, 5260, 1310, 214785, 322455, 7521800, 12112, 218, 59666036, 20 );
case 27 :
return new Monster ( 290, 3, 1420, 5640, 1410, 5360, 2045, 278545, 417535, 6239040, 6162, 219, 64942539, 29 );
case 28 :
return new Monster ( 295, 2, 1425, 1445, 5820, 5380, 2075, 525866, 789382, 3184960, 2507, 220, 70595045, 6 );
case 29 :
return new Monster ( 300, 1, 5840, 2050, 2025, 5560, 1370, 238680, 358020, 8367800, 12750, 221, 76669139, -1 );
case 30 :
return new Monster ( 305, 2, 1475, 1495, 6020, 5580, 2145, 562599, 843597, 3414960, 2592, 222, 83158305, -1 );
case 31 :
return new Monster ( 310, 2, 1500, 1520, 6120, 5680, 2180, 581124, 871686, 3532960, 2635, 223, 90125436, -1 );
case 32 :
return new Monster ( 315, 1, 6140, 2155, 2130, 5860, 1430, 263220, 394830, 9258800, 13387, 224, 97556858, -1 );
case 33 :
return new Monster ( 320, 3, 1570, 6240, 1560, 5960, 2255, 340000, 510000, 7652640, 6800, 225, 105514978, -5 );
case 34 :
return new Monster ( 325, 2, 1575, 1595, 6420, 5980, 2285, 639142, 958713, 3898960, 2762, 226, 113997992, -1 );
case 35 :
return new Monster ( 330, 1, 6440, 2260, 2235, 6160, 1490, 288960, 434085, 10194800, 14025, 227, 123067419,30 );
case 36 :
return new Monster ( 335, 3, 1645, 6540, 1635, 6260, 2360, 372695, 559370, 8413440, 7118, 228, 132712488, -1 );
case 37 :
return new Monster ( 340, 1, 6640, 2330, 2305, 6360, 1530, 307230, 460845, 10843800, 14450, 229, 143018630, -5 );
case 38 :
return new Monster ( 345, 1, 6740, 2365, 2340, 6460, 1150, 316575, 474525, 11175800, 14662, 230, 153964246, 53 );
case 39 :
return new Monster ( 350, 1, 6840, 2400, 2375, 6560, 1570, 326060, 489090, 11512800, 14875, 231, 165631756, 51 );
case 40 :
return new Monster ( 355, 1, 7570, 2655, 2630, 7290, 1716, 365356, 548792, 12976200, 15087, 232, 178017293, -1);
case 41 :
return new Monster ( 360, 2, 1970, 1990, 8000, 7560, 2838, 881901, 1323252, 5458320, 3060, 233, 191202824, 1003 );
case 42 :
return new Monster ( 365, 1, 8290, 2908, 2882, 8010, 1860, 411680, 617520, 14658300, 15512, 244, 205171015, -1);
case 43 :
return new Monster ( 370, 2, 2160, 2180, 8760, 8320, 3104, 992764, 1489146, 6173440, 3145, 245, 220033230, 1008 );
case 44 :
return new Monster ( 375, 1, 9340, 3275, 3250, 9060, 2070, 476850, 715275, 17032800, 15937, 246, 235758967, 0 );
case 45 :
return new Monster ( 380, 3, 2682, 10690, 2672, 10410, 3812, 691220, 1036830, 15864840, 8075, 247, 252458197, 2056 );
case 46 :
return new Monster ( 385, 2, 2888, 2908, 11670, 11230, 4122, 1375904, 2063856, 8669560, 3272, 248, 270120546, 1056 );
case 47 :
return new Monster ( 390, 1, 12540, 4395, 4370, 12260, 2710, 665150, 997725, 23968300, 16575, 249, 288853442, 55 );
case 48 :
return new Monster ( 395, 1, 13540, 4724, 4720, 13260, 2910, 727635, 1090775, 26254800, 16787, 250, 308630400, 11 );
case 49 :
return new Monster ( 400, 1, 16840, 5900, 5875, 16540, 3570, 916640, 1374960, 33162700, 17000, 251, 329599075, 22 );
case 50 :
return new Monster ( 450, 1, 16840, 5900, 5875, 16540, 3570, 916640, 1374960, 33162700, 17000, 252, 329599075, 22 );
}
}
Danach gehen wir in phpmyadmin in die Datenbank und fügen ein:
ALTER TABLE user_data ADD guild_level tinyint(4) NOT NULL DEFAULT 1 after user_id
Neue Epics (Weihnachten, Halloween etc.)
Es reicht wenn wir einfach das hier ändern:
function genNewItem($lvl, $class, $shop, $slot, $itemid) {
global $db;
$item = genItem ( $lvl, $class, $shop );
$table = $shop == 0 ? "items_shakes" : "items_fidget";
$qry = $db->prepare ( 'UPDATE ' . $table . ' SET
item_type = ' . $item ['item_type'] . ',
item_id = ' . $item ['item_id'] . ',
dmg_min = ' . $item ['dmg_min'] . ',
dmg_max = ' . $item ['dmg_max'] . ',
atr_type_1 = ' . $item ['atr_type_1'] . ',
atr_type_2 = ' . $item ['atr_type_2'] . ',
atr_type_3 = ' . $item ['atr_type_3'] . ',
atr_val_1 = ' . $item ['atr_val_1'] . ',
atr_val_2 = ' . $item ['atr_val_2'] . ',
atr_val_3 = ' . $item ['atr_val_3'] . ',
gold = ' . $item ['gold'] . ',
mush = ' . $item ['mush'] . '
WHERE id = ' . $itemid . ';' );
if (! $qry->execute ()) {
// var_dump($qry -> errorInfo());
}
}
function genItem($lvl, $class, $shop, $option, $db_data) {
global $shakes_item_ids, $fidget_item_ids;
if ($shop == 0) {
$type = rand ( 1, 7 );
} else {
if ($option == "toilet" or $option == "dungeon"){
$type = rand ( 8, 10); //toilet, and dungeon isn't giving out keys or potions
} elseif ($option == "tavern") {
$type = rand ( 8, 11); //11 is keys, 12 is potions
} else {
$type = rand ( 8, 12); //11 is keys, 12 is potions
}
if ($type == 11 and $option != "tavern"){
$type = rand ( 8, 10);
}
}
if ($option == "toilet"){
$epicRand = rand(1, 2); //if toilet
} elseif ($option == "dungeon") {
$epicRand = rand(1, 4); //if dungeon
} elseif ($option == "tavern" and $lvl > 25) {
$epicRand = rand(1, 15); //if tavern
} elseif ($lvl > 25) {
$epicRand = rand(1, 2); //if shop
} else {
$epicRand = -1;
}
// if epic event or chirstmas
if (event () == 2 or event () == 5){
if ($option == "toilet"){
$epicRand = 1; //if toilet
} elseif ($option == "dungeon") {
$epicRand = rand(1, 3); //if dungeon
} elseif ($option == "tavern") {
$epicRand = rand(1, 10); //if tavern
} else {
$epicRand = rand(1, 2); //if shop
}
}
$statNumRand = rand(1, 7);
if ($shop == 1 and $type == 12){
if ($lvl < 10){ //if level < 10 then shop gives only small potions
$potionIDRand = rand (1, 5);
} elseif ($lvl < 25 and $lvl > 9) { //if level < 25 then shop gives small potions and medium potions
$potionIDRand = rand (1, 10);
} elseif ($lvl > 24) { //if level > 24 then shop gives small, medium and big potions + Potion of the Eternal Life
$potionIDRand = rand (1, 16);
}
}
$itemMush = 0;
if ($type == 1){ // if weapon item
$itemGold = rand($lvl * $lvl * ($lvl * 4 + 10), $lvl * $lvl * ($lvl * 5 + 12));
} else { // if normal item
$itemGold = rand($lvl * $lvl * ($lvl * 3 + 10), $lvl * $lvl * ($lvl * 5 + 12)) / 2;
}
// potions - shop 2
if ($potionIDRand > 0 and $potionIDRand < 6 and $type == 12){ // if small potions
$itemGold = rand($lvl * $lvl * ($lvl * 5 + 10), $lvl * $lvl * ($lvl * 6 + 12)) / 20;
} elseif ($potionIDRand > 5 and $potionIDRand < 11 and $type == 12){ // if medium potions
$itemGold = rand($lvl * $lvl * ($lvl * 5 + 10), $lvl * $lvl * ($lvl * 6 + 12)) / 15;
} elseif ($potionIDRand > 10 and $potionIDRand < 16 and $type == 12){ // if big potions
$itemGold = rand($lvl * $lvl * ($lvl * 5 + 10), $lvl * $lvl * ($lvl * 6 + 12)) / 10;
} elseif ($potionIDRand == 16 and $type == 12){ // if life potions
$itemGold = rand($lvl * $lvl * ($lvl * 5 + 10), $lvl * $lvl * ($lvl * 6 + 12)) / 10;
}
if ($option == 'tavern' or $option == 'dungeon' or $option == 'toilet'){ // items - tavern, dungeon, toilet
$itemGold = rand($lvl * $lvl * ($lvl * 5 + 10), $lvl * $lvl * ($lvl * 6 + 12)) / 5;
}
if ($type == 11){
$itemGold = 10000000;
}
if ($epicRand == 1 and $type < 11){
$itemMush = 15;
} elseif ($statNumRand == 1 and $type < 11) { // if normal items with 2 stats
$itemMush = 6;
} elseif ($type == 12 and $potionIDRand == 16) { // if life potion
$itemMush = 15;
} else {
$itemMush = 0;
}
if ($option == "toilet" or $option == "dungeon" or $option == "tavern"){
$itemMush = 0;
}
$item = array (
"item_type" => "1",
"item_id" => "1005",
"dmg_min" => "1",
"dmg_max" => "0",
"atr_type_1" => "0",
"atr_type_2" => "0",
"atr_type_3" => "0",
"atr_val_1" => "0",
"atr_val_2" => "0",
"atr_val_3" => "0",
"gold" => $itemGold,
"mush" => $itemMush,
"slot" => "0",
"owner_id" => $itemOwner
);
if ($shop == 0) {
while ( $class != 1 && $type == 2 )
$type = rand ( 1, 7 );
$item ['item_type'] = $type;
$random = rand ( 1, $shakes_item_ids [$class - 1] [$type - 1] );
if ($epicRand == 1){
if ($class == 3){
if ($type == 1 or $type == 2)
{
$item ['item_id'] = rand(2050, 2063);
}
else
{
$item ['item_id'] = rand(2050, 2063);
while($item['item_id'] == 2059 || $item ['item_id'] == 2060) {
$item ['item_id'] = rand(2050, 2063);
}
}
}
if ($class == 2){
if ($type == 1 or $type == 2)
{
$item ['item_id'] = rand(1050, 1063) ;
}
else
{
$item ['item_id'] = rand(1063, 1064);
while($item['item_id'] == 1059 || $item ['item_id'] == 1060) {
$item ['item_id'] = rand(1063, 1064);
}
}
}
if ($class == 1){
if ($type == 1 or $type == 2)
{
$item ['item_id'] = rand(50, 63);
}
else
{
$item ['item_id'] = rand(50, 63);;
while($item['item_id'] == 59 || $item ['item_id'] == 60) {
$item ['item_id'] = rand(50, 63);
$item ['item_id'] = rand(50, 63);
}
}
}
} else {
$item ['item_id'] = $random + (($class - 1) * 1000);
}
if ($type == 1) {
$class_weap_multiplier = array (
1.2,
4,
2.1
);
$m = mt_rand ( 900, 1100 ) / 1000;
$avg = round($lvl * '1.3' * $class_weap_multiplier [$class - 1]);
$minmax_m = round(mt_rand(750, 1000) / 1000);
$item ['dmg_min'] = round($avg * $minmax_m);
$item ['dmg_max'] = round($avg * ($minmax_m + '0.25') + rand (1, 50));
} else {
if ($type == 2){
if ($lvl < 1){
$shieldNumber = 2;
}
if ($lvl < 5 and $lvl > 10){
$shieldNumber = 6;
}
if ($lvl < 9 and $lvl > 10){
$shieldNumber = 10;
}
if ($lvl < 14 and $lvl > 10){
$shieldNumber = 15;
}
if ($lvl < 20 and $lvl > 10){
$shieldNumber = 20;
}
if ($lvl > 35){
$shieldNumber = 25;
}
$item ['dmg_min'] = $shieldNumber;
} else {
$item ['dmg_min'] = $lvl * 2 * rand(1.51, 1.74) + rand(1, 6);
}
}
} else {
$item ['dmg_min'] = 0;
$item ['item_type'] = $type;
if ($epicRand == 1){
$item ['item_id'] = rand (50, 63);
} else {
$item ['item_id'] = rand ( 1, $fidget_item_ids [$type - 8] );
}
}
if ($class == 1){
$classStat = 1;
}
if ($class == 2){
$classStat = 3;
}
if ($class == 3){
$classStat = 2;
}
if ($epicRand == 1){
if (rand(1, 2) == 1){ //epic item with 3 stats
$stat_type2 = 4;
$stat_type3 = 5;
$m = mt_rand ( 850, 1300 ) / rand(850, 1000) * rand(1.4, 1.5);
$stat_val1 = round ( $lvl * $m );
$stat_val2 = round ( $lvl * $m );
$stat_val3 = round ( $lvl * $m );
$item ['atr_type_1'] = $classStat;
$item ['atr_val_1'] = $stat_val1;
$item ['atr_type_2'] = $stat_type2;
$item ['atr_val_2'] = $stat_val2;
$item ['atr_type_3'] = $stat_type3;
$item ['atr_val_3'] = $stat_val3;
} else { //epic item with all stat
$stat_type = 6;
$m = mt_rand ( 850, 1300 ) / rand(850, 1000) * rand(1.1, 1.2);
$stat_val = round ( $lvl * $m );
$item ['atr_type_1'] = $stat_type;
$item ['atr_val_1'] = $stat_val;
}
} else {
if ($statNumRand == 1){ //normal item with 2 stats
$stat_type1 = rand ( 1, 5 );
$stat_type2 = rand ( 1, 5 );
if ($stat_type2 == $stat_type1){
if ($stat_type1 < 2){
$stat_type2 = $stat_type1 + 1;
} else {
$stat_type2 = $stat_type1 - 1;
}
}
$m1 = mt_rand ( 850, 1300 ) / rand(850, 1000);
$m2 = mt_rand ( 850, 1300 ) / rand(850, 1000);
$stat_val1 = round ( $lvl * rand(1.3, 1.6) * $m1 );
$stat_val2 = round ( $lvl * rand(1.2, 1.4) * $m2 );
$item ['atr_type_1'] = $stat_type1;
$item ['atr_val_1'] = $stat_val1;
$item ['atr_type_2'] = $stat_type2;
$item ['atr_val_2'] = $stat_val2;
} else { //normal item with 1 stat
$stat_type = rand ( 1, 5 );
$m = mt_rand ( 850, 1300 ) / rand(850, 1000);
$stat_val = round ( $lvl * rand(2, 2.2) * $m );
$item ['atr_type_1'] = $stat_type;
$item ['atr_val_1'] = $stat_val;
}
}
if ($type == 11){ //if key then
$item ['item_id'] = -1; // default value
if ($option == 'tavern'){
// if (rand (1, 2) == 1 and $lvl > 50 and $db_data ['magic_mirror'] == 0){
// $item ['item_id'] = 21; // magic mirror key ?? what's this?
// }
// if (rand (1, 50) == 1){
// $item ['item_id'] = rand(22, 24); // eggs ?? what's this?
// }
if (rand (1, 3) == 1 and $lvl > 50 and $db_data ['magic_mirror'] == 0 and $db_data ['magic_mirror_shard'] < 43){
$item ['item_id'] = $db_data['magic_mirror_shard']; // magic mirrors
}
if (rand (1, 2) == 1 and $lvl > 99 and $db_data ['toilet'] == 0){
$item ['item_id'] = 20; // toilet key
}
if ($item ['item_id'] == -1){
if ($db_data ['dungeon_1'] == 0 and $lvl > 9){
$item ['item_id'] = 1;
} elseif ($db_data ['dungeon_2'] == 0 and $lvl > 19){
$item ['item_id'] = 2;
} elseif ($db_data ['dungeon_3'] == 0 and $lvl > 29){
$item ['item_id'] = 3;
} elseif ($db_data ['dungeon_4'] == 0 and $lvl > 39){
$item ['item_id'] = 4;
} elseif ($db_data ['dungeon_5'] == 0 and $lvl > 49){
$item ['item_id'] = 5;
} elseif ($db_data ['dungeon_6'] == 0 and $lvl > 59){
$item ['item_id'] = 6;
} elseif ($db_data ['dungeon_7'] == 0 and $lvl > 59){
$item ['item_id'] = 7;
} elseif ($db_data ['dungeon_8'] == 0 and $lvl > 69){
$item ['item_id'] = 8;
} elseif ($db_data ['dungeon_9'] == 0 and $lvl > 79){
$item ['item_id'] = 9;
} else {
return ('0/0/0/0/0/0/0/0/0/0/0/0');
break;
}
}
} else {
$item ['item_id'] = rand (1, 9);
}
$item ['dmg_min'] = 0;
$item ['atr_type_1'] = 0;
$item ['atr_val_1'] = 0;
$item ['atr_type_2'] = 0;
$item ['atr_val_2'] = 0;
$item ['atr_type_3'] = 0;
$item ['atr_val_3'] = 0;
}
if ($type == 12){
$item ['item_id'] = $fidget_item_ids [$type - 8] + $potionIDRand;
switch ($potionIDRand) {
case 1:
$potionAtr_type = 1;
$potionAtr_val = 5;
break;
case 2:
$potionAtr_type = 2;
$potionAtr_val = 5;
break;
case 3:
$potionAtr_type = 3;
$potionAtr_val = 5;
break;
case 4:
$potionAtr_type = 4;
$potionAtr_val = 5;
break;
case 5:
$potionAtr_type = 5;
$potionAtr_val = 5;
break;
case 6:
$potionAtr_type = 1;
$potionAtr_val = 15;
break;
case 7:
$potionAtr_type = 2;
$potionAtr_val = 15;
break;
case 8:
$potionAtr_type = 3;
$potionAtr_val = 15;
break;
case 9:
$potionAtr_type = 4;
$potionAtr_val = 15;
break;
case 10:
$potionAtr_type = 5;
$potionAtr_val = 15;
break;
case 11:
$potionAtr_type = 1;
$potionAtr_val = 25;
break;
case 12:
$potionAtr_type = 2;
$potionAtr_val = 25;
break;
case 13:
$potionAtr_type = 3;
$potionAtr_val = 25;
break;
case 14:
$potionAtr_type = 4;
$potionAtr_val = 25;
break;
case 15:
$potionAtr_type = 5;
$potionAtr_val = 25;
break;
case 16:
$potionAtr_type = 12;
$potionAtr_val = 25;
break;
}
$item ['atr_type_1'] = $potionAtr_type;
$item ['atr_val_1'] = $potionAtr_val;
$item ['dmg_min'] = 0;
$item ['atr_type_2'] = 0;
$item ['atr_val_2'] = 0;
$item ['atr_type_3'] = 0;
$item ['atr_val_3'] = 0;
}
return $item;
}
// returns items array
Dazu habt ihr noch die perfekte Einstellung der Stats der neuen Epics
function genNewItem($lvl, $class, $shop, $slot, $itemid) {
global $db;
$item = genItem ( $lvl, $class, $shop );
$table = $shop == 0 ? "items_shakes" : "items_fidget";
$qry = $db->prepare ( 'UPDATE ' . $table . ' SET
item_type = ' . $item ['item_type'] . ',
item_id = ' . $item ['item_id'] . ',
dmg_min = ' . $item ['dmg_min'] . ',
dmg_max = ' . $item ['dmg_max'] . ',
atr_type_1 = ' . $item ['atr_type_1'] . ',
atr_type_2 = ' . $item ['atr_type_2'] . ',
atr_type_3 = ' . $item ['atr_type_3'] . ',
atr_val_1 = ' . $item ['atr_val_1'] . ',
atr_val_2 = ' . $item ['atr_val_2'] . ',
atr_val_3 = ' . $item ['atr_val_3'] . ',
gold = ' . $item ['gold'] . ',
mush = ' . $item ['mush'] . '
WHERE id = ' . $itemid . ';' );
if (! $qry->execute ()) {
// var_dump($qry -> errorInfo());
}
}
function genItem($lvl, $class, $shop, $option, $db_data) {
global $shakes_item_ids, $fidget_item_ids;
if ($shop == 0) {
$type = rand ( 1, 7 );
} else {
if ($option == "toilet" or $option == "dungeon"){
$type = rand ( 8, 10); //toilet, and dungeon isn't giving out keys or potions
} elseif ($option == "tavern") {
$type = rand ( 8, 11); //11 is keys, 12 is potions
} else {
$type = rand ( 8, 12); //11 is keys, 12 is potions
}
if ($type == 11 and $option != "tavern"){
$type = rand ( 8, 10);
}
}
if ($option == "toilet"){
$epicRand = rand(1, 2); //if toilet
} elseif ($option == "dungeon") {
$epicRand = rand(1, 4); //if dungeon
} elseif ($option == "tavern" and $lvl > 25) {
$epicRand = rand(1, 15); //if tavern
} elseif ($lvl > 25) {
$epicRand = rand(1, 2); //if shop
} else {
$epicRand = -1;
}
// if epic event or chirstmas
if (event () == 2 or event () == 5){
if ($option == "toilet"){
$epicRand = 1; //if toilet
} elseif ($option == "dungeon") {
$epicRand = rand(1, 3); //if dungeon
} elseif ($option == "tavern") {
$epicRand = rand(1, 10); //if tavern
} else {
$epicRand = rand(1, 2); //if shop
}
}
$statNumRand = rand(1, 7);
if ($shop == 1 and $type == 12){
if ($lvl < 10){ //if level < 10 then shop gives only small potions
$potionIDRand = rand (1, 5);
} elseif ($lvl < 25 and $lvl > 9) { //if level < 25 then shop gives small potions and medium potions
$potionIDRand = rand (1, 10);
} elseif ($lvl > 24) { //if level > 24 then shop gives small, medium and big potions + Potion of the Eternal Life
$potionIDRand = rand (1, 16);
}
}
$itemMush = 0;
if ($type == 1){ // if weapon item
$itemGold = rand($lvl * $lvl * ($lvl * 4 + 10), $lvl * $lvl * ($lvl * 5 + 12));
} else { // if normal item
$itemGold = rand($lvl * $lvl * ($lvl * 3 + 10), $lvl * $lvl * ($lvl * 5 + 12)) / 2;
}
// potions - shop 2
if ($potionIDRand > 0 and $potionIDRand < 6 and $type == 12){ // if small potions
$itemGold = rand($lvl * $lvl * ($lvl * 5 + 10), $lvl * $lvl * ($lvl * 6 + 12)) / 20;
} elseif ($potionIDRand > 5 and $potionIDRand < 11 and $type == 12){ // if medium potions
$itemGold = rand($lvl * $lvl * ($lvl * 5 + 10), $lvl * $lvl * ($lvl * 6 + 12)) / 15;
} elseif ($potionIDRand > 10 and $potionIDRand < 16 and $type == 12){ // if big potions
$itemGold = rand($lvl * $lvl * ($lvl * 5 + 10), $lvl * $lvl * ($lvl * 6 + 12)) / 10;
} elseif ($potionIDRand == 16 and $type == 12){ // if life potions
$itemGold = rand($lvl * $lvl * ($lvl * 5 + 10), $lvl * $lvl * ($lvl * 6 + 12)) / 10;
}
if ($option == 'tavern' or $option == 'dungeon' or $option == 'toilet'){ // items - tavern, dungeon, toilet
$itemGold = rand($lvl * $lvl * ($lvl * 5 + 10), $lvl * $lvl * ($lvl * 6 + 12)) / 5;
}
if ($type == 11){
$itemGold = 10000000;
}
if ($epicRand == 1 and $type < 11){
$itemMush = 15;
} elseif ($statNumRand == 1 and $type < 11) { // if normal items with 2 stats
$itemMush = 6;
} elseif ($type == 12 and $potionIDRand == 16) { // if life potion
$itemMush = 15;
} else {
$itemMush = 0;
}
if ($option == "toilet" or $option == "dungeon" or $option == "tavern"){
$itemMush = 0;
}
$item = array (
"item_type" => "1",
"item_id" => "1005",
"dmg_min" => "1",
"dmg_max" => "0",
"atr_type_1" => "0",
"atr_type_2" => "0",
"atr_type_3" => "0",
"atr_val_1" => "0",
"atr_val_2" => "0",
"atr_val_3" => "0",
"gold" => $itemGold,
"mush" => $itemMush,
"slot" => "0",
"owner_id" => $itemOwner
);
if ($shop == 0) {
while ( $class != 1 && $type == 2 )
$type = rand ( 1, 7 );
$item ['item_type'] = $type;
$random = rand ( 1, $shakes_item_ids [$class - 1] [$type - 1] );
if ($epicRand == 1){
if ($class == 3){
if ($type == 1 or $type == 2)
{
$item ['item_id'] = rand(2050, 2063);
}
else
{
$item ['item_id'] = rand(2050, 2063);
while($item['item_id'] == 2059 || $item ['item_id'] == 2060) {
$item ['item_id'] = rand(2050, 2063);
}
}
}
if ($class == 2){
if ($type == 1 or $type == 2)
{
$item ['item_id'] = rand(1050, 1063) ;
}
else
{
$item ['item_id'] = rand(1063, 1064);
while($item['item_id'] == 1059 || $item ['item_id'] == 1060) {
$item ['item_id'] = rand(1063, 1064);
}
}
}
if ($class == 1){
if ($type == 1 or $type == 2)
{
$item ['item_id'] = rand(50, 63);
}
else
{
$item ['item_id'] = rand(50, 63);;
while($item['item_id'] == 59 || $item ['item_id'] == 60) {
$item ['item_id'] = rand(50, 63);
$item ['item_id'] = rand(50, 63);
}
}
}
} else {
$item ['item_id'] = $random + (($class - 1) * 1000);
}
if ($type == 1) {
$class_weap_multiplier = array (
1.2,
4,
2.1
);
$m = mt_rand ( 900, 1100 ) / 1000;
$avg = round($lvl * '1.3' * $class_weap_multiplier [$class - 1]);
$minmax_m = round(mt_rand(750, 1000) / 1000);
$item ['dmg_min'] = round($avg * $minmax_m);
$item ['dmg_max'] = round($avg * ($minmax_m + '0.25') + rand (1, 50));
} else {
if ($type == 2){
if ($lvl < 1){
$shieldNumber = 2;
}
if ($lvl < 5 and $lvl > 10){
$shieldNumber = 6;
}
if ($lvl < 9 and $lvl > 10){
$shieldNumber = 10;
}
if ($lvl < 14 and $lvl > 10){
$shieldNumber = 15;
}
if ($lvl < 20 and $lvl > 10){
$shieldNumber = 20;
}
if ($lvl > 35){
$shieldNumber = 25;
}
$item ['dmg_min'] = $shieldNumber;
} else {
$item ['dmg_min'] = $lvl * 2 * rand(1.51, 1.74) + rand(1, 6);
}
}
} else {
$item ['dmg_min'] = 0;
$item ['item_type'] = $type;
if ($epicRand == 1){
$item ['item_id'] = rand (50, 63);
} else {
$item ['item_id'] = rand ( 1, $fidget_item_ids [$type - 8] );
}
}
if ($class == 1){
$classStat = 1;
}
if ($class == 2){
$classStat = 3;
}
if ($class == 3){
$classStat = 2;
}
if ($epicRand == 1){
if (rand(1, 2) == 1){ //epic item with 3 stats
$stat_type2 = 4;
$stat_type3 = 5;
$m = mt_rand ( 850, 1300 ) / rand(850, 1000) * rand(1.4, 1.5);
$stat_val1 = round ( $lvl * $m );
$stat_val2 = round ( $lvl * $m );
$stat_val3 = round ( $lvl * $m );
$item ['atr_type_1'] = $classStat;
$item ['atr_val_1'] = $stat_val1;
$item ['atr_type_2'] = $stat_type2;
$item ['atr_val_2'] = $stat_val2;
$item ['atr_type_3'] = $stat_type3;
$item ['atr_val_3'] = $stat_val3;
} else { //epic item with all stat
$stat_type = 6;
$m = mt_rand ( 850, 1300 ) / rand(850, 1000) * rand(1.1, 1.2);
$stat_val = round ( $lvl * $m );
$item ['atr_type_1'] = $stat_type;
$item ['atr_val_1'] = $stat_val;
}
} else {
if ($statNumRand == 1){ //normal item with 2 stats
$stat_type1 = rand ( 1, 5 );
$stat_type2 = rand ( 1, 5 );
if ($stat_type2 == $stat_type1){
if ($stat_type1 < 2){
$stat_type2 = $stat_type1 + 1;
} else {
$stat_type2 = $stat_type1 - 1;
}
}
$m1 = mt_rand ( 850, 1300 ) / rand(850, 1000);
$m2 = mt_rand ( 850, 1300 ) / rand(850, 1000);
$stat_val1 = round ( $lvl * rand(1.3, 1.6) * $m1 );
$stat_val2 = round ( $lvl * rand(1.2, 1.4) * $m2 );
$item ['atr_type_1'] = $stat_type1;
$item ['atr_val_1'] = $stat_val1;
$item ['atr_type_2'] = $stat_type2;
$item ['atr_val_2'] = $stat_val2;
} else { //normal item with 1 stat
$stat_type = rand ( 1, 5 );
$m = mt_rand ( 850, 1300 ) / rand(850, 1000);
$stat_val = round ( $lvl * rand(2, 2.2) * $m );
$item ['atr_type_1'] = $stat_type;
$item ['atr_val_1'] = $stat_val;
}
}
if ($type == 11){ //if key then
$item ['item_id'] = -1; // default value
if ($option == 'tavern'){
// if (rand (1, 2) == 1 and $lvl > 50 and $db_data ['magic_mirror'] == 0){
// $item ['item_id'] = 21; // magic mirror key ?? what's this?
// }
// if (rand (1, 50) == 1){
// $item ['item_id'] = rand(22, 24); // eggs ?? what's this?
// }
if (rand (1, 3) == 1 and $lvl > 50 and $db_data ['magic_mirror'] == 0 and $db_data ['magic_mirror_shard'] < 43){
$item ['item_id'] = $db_data['magic_mirror_shard']; // magic mirrors
}
if (rand (1, 2) == 1 and $lvl > 99 and $db_data ['toilet'] == 0){
$item ['item_id'] = 20; // toilet key
}
if ($item ['item_id'] == -1){
if ($db_data ['dungeon_1'] == 0 and $lvl > 9){
$item ['item_id'] = 1;
} elseif ($db_data ['dungeon_2'] == 0 and $lvl > 19){
$item ['item_id'] = 2;
} elseif ($db_data ['dungeon_3'] == 0 and $lvl > 29){
$item ['item_id'] = 3;
} elseif ($db_data ['dungeon_4'] == 0 and $lvl > 39){
$item ['item_id'] = 4;
} elseif ($db_data ['dungeon_5'] == 0 and $lvl > 49){
$item ['item_id'] = 5;
} elseif ($db_data ['dungeon_6'] == 0 and $lvl > 59){
$item ['item_id'] = 6;
} elseif ($db_data ['dungeon_7'] == 0 and $lvl > 59){
$item ['item_id'] = 7;
} elseif ($db_data ['dungeon_8'] == 0 and $lvl > 69){
$item ['item_id'] = 8;
} elseif ($db_data ['dungeon_9'] == 0 and $lvl > 79){
$item ['item_id'] = 9;
} else {
return ('0/0/0/0/0/0/0/0/0/0/0/0');
break;
}
}
} else {
$item ['item_id'] = rand (1, 9);
}
$item ['dmg_min'] = 0;
$item ['atr_type_1'] = 0;
$item ['atr_val_1'] = 0;
$item ['atr_type_2'] = 0;
$item ['atr_val_2'] = 0;
$item ['atr_type_3'] = 0;
$item ['atr_val_3'] = 0;
}
if ($type == 12){
$item ['item_id'] = $fidget_item_ids [$type - 8] + $potionIDRand;
switch ($potionIDRand) {
case 1:
$potionAtr_type = 1;
$potionAtr_val = 5;
break;
case 2:
$potionAtr_type = 2;
$potionAtr_val = 5;
break;
case 3:
$potionAtr_type = 3;
$potionAtr_val = 5;
break;
case 4:
$potionAtr_type = 4;
$potionAtr_val = 5;
break;
case 5:
$potionAtr_type = 5;
$potionAtr_val = 5;
break;
case 6:
$potionAtr_type = 1;
$potionAtr_val = 15;
break;
case 7:
$potionAtr_type = 2;
$potionAtr_val = 15;
break;
case 8:
$potionAtr_type = 3;
$potionAtr_val = 15;
break;
case 9:
$potionAtr_type = 4;
$potionAtr_val = 15;
break;
case 10:
$potionAtr_type = 5;
$potionAtr_val = 15;
break;
case 11:
$potionAtr_type = 1;
$potionAtr_val = 25;
break;
case 12:
$potionAtr_type = 2;
$potionAtr_val = 25;
break;
case 13:
$potionAtr_type = 3;
$potionAtr_val = 25;
break;
case 14:
$potionAtr_type = 4;
$potionAtr_val = 25;
break;
case 15:
$potionAtr_type = 5;
$potionAtr_val = 25;
break;
case 16:
$potionAtr_type = 12;
$potionAtr_val = 25;
break;
}
$item ['atr_type_1'] = $potionAtr_type;
$item ['atr_val_1'] = $potionAtr_val;
$item ['dmg_min'] = 0;
$item ['atr_type_2'] = 0;
$item ['atr_val_2'] = 0;
$item ['atr_type_3'] = 0;
$item ['atr_val_3'] = 0;
}
return $item;
}
// returns items array
Dazu habt ihr noch die perfekte Einstellung der Stats der neuen Epics
PROJEKT NEUGESTARTET:

Wer Interesse an einem SF Privatserver hat möchte sich doch bitte bei mir melden. Suche noch ein nützliches Team, welches mit mir das Script weiterführen möchte.
Skype: rey0_man1






