[erl] Vault Mod - Börsencrash

Du hast Probleme beim Einbau oder bei der Benutzung eines Mods? In diesem Forum bist du richtig.
Forumsregeln
phpBB 2.0 hat das Ende seiner Lebenszeit überschritten
phpBB 2.0 wird nicht mehr aktiv unterstützt. Insbesondere werden - auch bei Sicherheitslücken - keine Patches mehr bereitgestellt. Der Einsatz von phpBB 2.0 erfolgt daher auf eigene Gefahr. Wir empfehlen einen Umstieg auf phpBB 3.0, welches aktiv weiterentwickelt wird und für welches regelmäßig Updates zur Verfügung gestellt werden.
Benutzeravatar
Dungeonwatcher
Mitglied
Beiträge: 635
Registriert: 11.07.2004 10:04
Wohnort: Berlin

[erl] Vault Mod - Börsencrash

Beitragvon Dungeonwatcher » 15.11.2009 06:36

Hi! 8)

Nach langem grübeln und einigen Fehlschlägen tut nun endlich ein Börsencrash funktionieren. Für Interessierte hier der entsprechende Code:

Man suche in der funktion_vault.php:

Code: Alles auswählen

include($phpbb_root_path . 'language/lang_' . $board_config['default_lang'] . '/lang_vault.'.$phpEx);


und füge danach ein:

Code: Alles auswählen

// --- Berechnung von Index und Vergleichswert --- Start ---

$sql = "SELECT avg(stock_price) FROM " . VAULT_EXCHANGE_TABLE . "";
if( !$db->sql_query($sql))
{
   message_die(GENERAL_ERROR, 'Could not obtain avarade stock_price information', "", __LINE__, __FILE__, $sql);
}
$query = mysql_query($sql);
$array = mysql_fetch_array($query);
$stock_price_avg = $array[0];
$stock_price_avg = round($stock_price_avg * pi(),2);
      
$sql = "SELECT avg(stock_best_price) FROM " . VAULT_EXCHANGE_TABLE . "";
if( !$db->sql_query($sql))
{
   message_die(GENERAL_ERROR, 'Could not obtain avarade stock_best_price information', "", __LINE__, __FILE__, $sql);
}
$query = mysql_query($sql);
$array = mysql_fetch_array($query);
$stock_best_price_avg = $array[0];
$stock_best_price_avg = round($stock_best_price_avg * pi(),2);
      
$sql = "SELECT avg(stock_worst_price) FROM " . VAULT_EXCHANGE_TABLE . "";
if( !$db->sql_query($sql))
{
   message_die(GENERAL_ERROR, 'Could not obtain avarade stock_worst_price information', "", __LINE__, __FILE__, $sql);
}
$query = mysql_query($sql);
$array = mysql_fetch_array($query);
$stock_worst_price_avg = $array[0];
$stock_wost_price_avg = round($stock_worst_price_avg * pi(),2);
      
$stock_avg = round($stock_best_price_avg/$stock_worst_price_avg * pi(),2);

// --- Berechnung von Index und Vergleichswert --- Ende ---


In diesem o.g. Block wird ein Vergleichswert zwischen minimalen Aktienpreis, maximalen Aktienpreis (Vergleichswert) und dem aktuellen Preis (Aktienindex) berechnet. Beide Werte sind variabel, da sie einer stetigen Änderung unterliegen. Der aktuelle Index ändert sich natürlich erheblich öfter als der Vergleichswert.

suche nach:

Code: Alles auswählen

      $sql = "UPDATE " . VAULT_EXCHANGE_TABLE ."
         SET stock_price = $new_price ,
         stock_previous_price = $old_price ,
         stock_best_price = $best_price ,
         stock_worst_price = $worst_price
         WHERE stock_id = ".$exchange[$i]['stock_id'];
      $result = $db->sql_query($sql);
      if( !$result )
      {
         message_die(GENERAL_ERROR, "Couldn't update stock exchange", "", __LINE__, __FILE__, $sql);
      }


und füge danach ein:

Code: Alles auswählen

      // --- Börsencrash - Start ---
      if ( $stock_price_avg >= $stock_avg )
      {
         $variation = mt_rand($vault_general['stock_max_change'] , (2 * $vault_general['stock_max_change']));
         $variation = 0 - $variation ;
         $new_price = round(($exchange[$i]['stock_price'] * ( 1 + ( $variation / 100 ))), 2);
         $old_price = $exchange[$i]['stock_price'];
         $best_price = ( $new_price > $exchange[$i]['stock_best_price'] ) ? $new_price : $exchange[$i]['stock_best_price'];
         $worst_price = ( $new_price < $exchange[$i]['stock_worst_price'] ) ? $new_price : $exchange[$i]['stock_worst_price'];

         $sql = "UPDATE " . VAULT_EXCHANGE_TABLE ."
            SET stock_price = $new_price ,
            stock_previous_price = $old_price ,
            stock_best_price = $best_price ,
            stock_worst_price = $worst_price
            WHERE stock_id = ".$exchange[$i]['stock_id'];
         $result = $db->sql_query($sql);
         if( !$result )
         {
            message_die(GENERAL_ERROR, "Couldn't update stock exchange", "", __LINE__, __FILE__, $sql);
         }
      }
      // --- Börsencrash - Ende ---


In diesem Code werden nun der Vergleichswert und der aktuelle Index in Verhältnis gesetzt. D.h. wenn der aktuelle Index größer bzw. gleich dem Vergleichswert ist, soll es zu einem Börsencrash kommen. Wie hart dieser ausfallen soll wird in dieser Zeile festgelegt:

Code: Alles auswählen

$variation = mt_rand($vault_general['stock_max_change'] , (2 * $vault_general['stock_max_change']));


Es wird der gleiche Wert für max. genutzt in der sich die Preise zufällig ändern können wie im normalen Börsensystem, allerding immer negativ. D.h. der Preis wird immer fallen. Das normale Börsensystem berechnet jedoch vor dem Crashsystem seine Werte. D.h. im Extremfall addieren sich die max. Werte im negativen Sinne oder heben sich auf.

Bye

Zurück zu „phpBB 2.0: Mod Support“