Vault Mod: Prozentrechnung beim Verkaufen

Allgemeiner Support zum phpBB 2 Board und phpBB 2 Modifikationen
Forumsregeln
Auch wenn hier der Support für phpBB 2 weiterhin aufrecht erhalten bleibt, weisen wir darauf hin, dass das phpBB 2 nicht mehr offiziell unterstützt und weiterentwickelt wird!
Antworten
Benutzeravatar
Dungeonwatcher
Beiträge: 1055
Registriert: Sa 19.Feb, 2005 01:16
Wohnort: Berlin
Kontaktdaten:

Vault Mod: Prozentrechnung beim Verkaufen

Beitrag von Dungeonwatcher »

Hi! :cool:

Folgendes versuche ich umzusetzen:

Wenn ein User seine Aktien verkauft, soll vom Erlös eine bestimmte Prozentzahl abgezogen und der Bank gutgeschrieben werden. Dazu habe ich zwei neue Felder in der Tabelle vault_general erstellt.

bank_profit_sum - hier kommt der Gewinn für die Bank rein
stock_sell_tax - hier steht der per ACP festgelegte Prozentsatz

Nun hänge ich mit einem Blackout vor folgendem Code:

Code: Alles auswählen

if ( $stock_exchange )
{
	$template->set_filenames(array(
		'body' => 'vault_exchange_body.tpl')
	);

	$sql = "SELECT *
		FROM " . VAULT_EXCHANGE_TABLE ."
		ORDER BY stock_id ";
	$result = $db->sql_query($sql);
	if( !$result )
	{
		message_die(GENERAL_ERROR, "Couldn't obtain stock exchange from database", "", __LINE__, __FILE__, $sql);
	}
	$exchange = $db->sql_fetchrowset($result);

	for($i = 0; $i < count($exchange); $i++)
	{
		$a = $exchange[$i]['stock_id']; 
		$buy_item[$a] = "";
		$buy_item[$a] = '<input class="post" type="text" maxlength="8" size="8" name="buy_item'.$a.'" style="text-align: right;" />';

		$sell_item[$a] = "";
		$sell_item[$a] = '<input class="post" type="text" maxlength="8" size="8" name="sell_item'.$a.'" style="text-align: right;" />';
		
		$row_class = ( !($i % 2) ) ? $theme['td_class1'] : $theme['td_class2'];

		$sql = "SELECT *
			FROM " . VAULT_EXCHANGE_USERS_TABLE ."
			WHERE stock_id = ".$exchange[$i]['stock_id']."
			AND user_id = ".$user_id;
		$result = $db->sql_query($sql);
		if( !$result )
		{
			message_die(GENERAL_ERROR, "Couldn't obtain stock exchange from database", "", __LINE__, __FILE__, $sql);
		}
		$owned = $db->sql_fetchrow($result);
		$actions_owned = $owned['stock_amount'];
		$stock_owned_act = $actions_owned * $exchange[$i]['stock_price'];

		if ( !$actions_owned )
		{
			$actions_owned = $lang['Vault_exchange_none'];
		}
Dieser Block ist für den Kauf und Verkauf zuständig. Wenn ich mich nicht irre müsste ab Zeile 28 das Kaufs-/Verkaufsergebnis berechnet werden. Relevant hierbei ist die Zeile 39. Diese habe ich eingefügt um im Template den aktuellen Wert der Aktien anzuzeigen. Von diesem Wert soll nun beim Verkauf die festgelegte Prozentzahl abgezogen und der Bank gutgeschrieben werden.
Ich habe aber keine Idee wie dies umzusetzen ist und bräuchte mal wieder ein paare Denkanstöße mit 'ner "Zaunlatte"... ;)
Zuletzt geändert von Dungeonwatcher am Mo 02.Feb, 2009 07:40, insgesamt 1-mal geändert.
Benutzeravatar
oxpus
Administrator
Beiträge: 28737
Registriert: Mo 27.Jan, 2003 22:13
Wohnort: Bad Wildungen
Kontaktdaten:

Beitrag von oxpus »

Also:

Code: Alles auswählen

$stock_owned_act = $actions_owned * $exchange[$i]['stock_price']; 
Wenn hier der Preis gerechnet werden soll und der Anteil der Bank, kann man folgendes machen:
Setzen wir an dieser Stelle zunächst mal $stock_sell_tax als verfügbar voraus.
Dann würde ich nach o. g. Zeile dieses einfügen:

Code: Alles auswählen

$bank_profit = round($stock_owned_act * $stock_sell_tax / 100, 2);
$stock_owned_act -= $bank_profit;
Dann würde dem Userwert der Bank-Anteil in Prozenten (nach $stock_sell_tax) abgezogen.
Letztlich wäre dann noch mit einer SQL-Anweisung der Bank-Wert zu speichern.
Analog dieser SQL-Anweisung:

Code: Alles auswählen

$sql = "UPDATE phpbb_vault_general SET bank_profit = bank_profit + $bank_profit";
Und natürlich müsste auch dem User genau dieser Bank-Wert abgezogen werden.

Zuletzt wäre noch sicherzustellen, daß $stock_sell_tax auch vor der Berechnung des Bankwertes zur Verfügung steht.
Entweder hast Du das im betreffenden Script bereits gemacht oder es müsste mittels

Code: Alles auswählen

$sql = "SELECT stock_sell_tax FROM phpbb_vault_general";
vorher noch abgefragt werden. Also vor Zeile 28 o. g. Scriptsauszugs...
Karsten Ude
-={ Das Mädchen für alles }=-
Kein Support per Messenger, Email oder PN! Unaufgeforderte Nachrichten werden ignoriert!
No support per Messenger, Email or PM. Each unasked message will be ignored!
Benutzeravatar
Dungeonwatcher
Beiträge: 1055
Registriert: Sa 19.Feb, 2005 01:16
Wohnort: Berlin
Kontaktdaten:

Beitrag von Dungeonwatcher »

Hmm, ganz so einfach geht das mal wieder nicht. Der Autor hat hier ein seltsames System erstellt. Aber so langsam komme ich dahinter. Die Tabelle vault_general hat eine sehr ungewöhnlichen Aufbau und die Werte werden kplt. anders ausgelesen als ich das bisher kenne. Z.B. wird am Anfang der vault.php eine globale Konfiguration festgelegt:

Code: Alles auswählen

$vault_general = vault_get_general_config();
$num_items = $vault_general['num_items'] + 1;
$base_amount = $vault_general['base_amount'];
$stock_sell_tax = $vault_general['stock_sell_tax'];
$bank_profit = $vault_general['bank_profit'];
Die letzten beiden Zeilen habe ich eben hinzugefügt.

So kann ich dann mit

Code: Alles auswählen

$stock_sell_tax = $vault_general['stock_sell_tax'];
echo "$stock_sell_tax";
den festgelegten Prozentsatz auslesen und anzeigen lassen. Wenn ich nun dahinter dies einfüge:

Code: Alles auswählen

$bank_profit = round($stock_owned_act * $stock_sell_tax / 100, 2);
echo "$bank_profit";
wird bleibt beim verkaufen der Profit Null, beim kaufen hingegen wird er berechnet?

Nachtrag:

Ich denke die Ursache hierfür gefunden zu haben. Die von mir eingefügten Zeilen

Code: Alles auswählen

       $actions_owned = $owned['stock_amount'];
       $stock_owned_act = $actions_owned * $exchange[$i]['stock_price']; 
dienen nur dazu in der Übersicht dem User den aktuellen Wert seiner Aktien anzuzeigen. Zum berechnen des Banken Profits sind sie an dieser Stelle falsch.
Ich denke mittlerweile eh das ich im falschen Code Block bin. :!:

Korrekt dürfte dieser Abschnitt sein:

Code: Alles auswählen

if ( $exchange_submit )
{
	$sql = "SELECT *
		FROM " . VAULT_EXCHANGE_TABLE ."
		ORDER BY stock_id 
		DESC LIMIT 1";
	$result = $db->sql_query($sql);
	if( !$result )
	{
		message_die(GENERAL_ERROR, 'Could not obtain stock exchange information', "", __LINE__, __FILE__, $sql);
	}
	$stock_data = $db->sql_fetchrow($result);
	$max = $stock_data['stock_id'];
	
	$owned = $db->sql_fetchrow($result);

	for ($i=0; $i <= $max; $i++) 
	{ 
		$input = 'buy_item' . $i; 
		$$input = doubleval($HTTP_POST_VARS[$input]);
		$input2 = 'sell_item' . $i;
		$$input2 = doubleval($HTTP_POST_VARS[$input2]);
	}
	$sql = "SELECT stock_price , stock_id FROM " . VAULT_EXCHANGE_TABLE ." 
		ORDER BY stock_id";
	$result = $db->sql_query($sql);
	if( !$result )
	{
		message_die(GENERAL_ERROR, 'Could not obtain items pets information', "", __LINE__, __FILE__, $sql);
	}
	$items = $db->sql_fetchrowset($result);
	for ( $i = 0 ; $i < count($items) ; $i ++ )
	{
		$price = 0;
		$a = $items[$i]['stock_id'] ;
		$buys = 'buy_item'.$items[$i]['stock_id'].'';
		$buy = $$buys;
		$sells = 'sell_item'.$items[$i]['stock_id'].'';
		$sell = $$sells;
		$price = ( ( $buy -  $sell ) * $items[$i]['stock_price'] );
		
		$ssql = "SELECT stock_amount FROM " . VAULT_EXCHANGE_USERS_TABLE ." 
		WHERE stock_id = ".$items[$i]['stock_id']."
		AND user_id = ".$user_id;
		$sresult = $db->sql_query($ssql);
		if( !$sresult )
		{
			message_die(GENERAL_ERROR, 'Could not obtain shares information', "", __LINE__, __FILE__, $ssql);
		}
		$user_items = $db->sql_fetchrow($sresult);
		if ( (( $sell - $buy ) > $user_items['stock_amount'] && is_numeric($user_items['stock_amount'])) || ( !(is_numeric($user_items['stock_amount'])) && (( $buy - $sell ) < 0) ) )
		{
			vault_previous( Vault_stock_lack , vault , '' , '');
		}
		if ( $price > $userdata['user_points'])
		{
			vault_previous( Vault_points_lack , vault , '' , '');
		}
		else
		{
			$sql = "UPDATE " . USERS_TABLE ."
				SET user_points = user_points - $price
				WHERE user_id = $user_id";
			if( !$db->sql_query($sql))
			{
				message_die(GENERAL_ERROR, 'Could not obtain update user points', "", __LINE__, __FILE__, $sql);
			}
		}
		$userdata['user_points'] = $userdata['user_points'] - $price;
		$prize = $buy -  $sell;
		if ( is_numeric($user_items['stock_amount']) &&	$prize != 0 )
		{
			$rsql = "UPDATE " . VAULT_EXCHANGE_USERS_TABLE ."
				SET stock_amount = stock_amount + $prize
				WHERE user_id = $user_id
				AND stock_id = ".$items[$i]['stock_id'];
			if( !$db->sql_query($rsql))
			{
				message_die(GENERAL_ERROR, 'Could not update user stock', "", __LINE__, __FILE__, $rsql);
			}
		}
		else if ( !(is_numeric($user_items['stock_amount'])) && $prize != 0 )
		{
			$rsql = "INSERT INTO " . VAULT_EXCHANGE_USERS_TABLE ."
				( stock_id , user_id , stock_amount )
				VALUES ( ".$items[$i]['stock_id']." , $user_id , $prize )";
			if( !$db->sql_query($rsql))
			{
				message_die(GENERAL_ERROR, 'Could not update user stock', "", __LINE__, __FILE__, $rsql);
			}
		}
	}
	$stock_exchange = TRUE;	
}
Und hier ab Zeile 32. ^6
Zuletzt geändert von Dungeonwatcher am So 01.Feb, 2009 19:09, insgesamt 2-mal geändert.
Benutzeravatar
oxpus
Administrator
Beiträge: 28737
Registriert: Mo 27.Jan, 2003 22:13
Wohnort: Bad Wildungen
Kontaktdaten:

Beitrag von oxpus »

Wie schon mehrfach erwähnt: Ich kenne die MOD nicht und kann daher nicht sagen, ob gerade nun diese Stelle richtig ist oder nicht.
Es müsste jedenfalls eine Stelle sein, an der der User seine (Ver)käufe tätigt und dabei eben die Bank bezahlen muss. Und genau zwischen dem Geschäft und der Speicherung in den Userwerten muss eben auch die Bank mit ins Spiel.
Wo das allerdings ist.... k. A. !!!
Karsten Ude
-={ Das Mädchen für alles }=-
Kein Support per Messenger, Email oder PN! Unaufgeforderte Nachrichten werden ignoriert!
No support per Messenger, Email or PM. Each unasked message will be ignored!
Benutzeravatar
Dungeonwatcher
Beiträge: 1055
Registriert: Sa 19.Feb, 2005 01:16
Wohnort: Berlin
Kontaktdaten:

Beitrag von Dungeonwatcher »

Moin! :cool:

Ich denke die korrekte Stelle nun gefunden zu haben. Im zweiten von mir geposteten Codeblock habe ich nach Zeile 40 folgendes eingefügt:

Code: Alles auswählen

		$sell_price = ($sell * $items[$i]['stock_price']);
		$bank_profit = round($sell_price * $stock_sell_tax/100,2);
		$sell_user_profit = $sell_price - $bank_profit;
Hierbei entsprechen:

$sell_price = der reine Verkaufserlös (Stückzahl * Stückpreis)
$bank_profit = der Bankgewinn (festgelegter Prozentsatz des Verkaufserlöses)
$sell_user_profit = der Gewinn, der dem User gutgeschrieben werden soll (Verkaufserlös - Bankgewinn)

Diese Stelle ist direkt nach dem Berechnen des kplt. Erlöses ($price), welcher der User aktuell beim Kaufen/Verkaufen gutgeschrieben oder abgezogen bekommt:

Code: Alles auswählen

$price = ( ( $buy -  $sell ) * $items[$i]['stock_price'] );
Wenn ich den oben zitierten Codeblock richtig verstehe, dann bedeutet dieser Bereich doch:

Code: Alles auswählen

for ( $i = 0 ; $i < count($items) ; $i ++ )
	{
		[...]
	}
das alles dazwischen solange wiederholt wird, bis es keinen neuen Datensatz gibt, korrekt?

Lasse ich mir dies dann per

Code: Alles auswählen

echo "$sell_price";
echo "$bank_profit";
echo "$sell_user_profit";
anzeigen und rechne per Hand nach, stimmen diese Werte.

Nun habe ich das nächste Verständnisproblem. ^6

Dieser Codeblock:

Code: Alles auswählen

		$ssql = "SELECT stock_amount FROM " . VAULT_EXCHANGE_USERS_TABLE ." 
		WHERE stock_id = ".$items[$i]['stock_id']."
		AND user_id = ".$user_id;
		$sresult = $db->sql_query($ssql);
		if( !$sresult )
		{
			message_die(GENERAL_ERROR, 'Could not obtain shares information', "", __LINE__, __FILE__, $ssql);
		}
		$user_items = $db->sql_fetchrow($sresult);
		if ( (( $sell - $buy ) > $user_items['stock_amount'] && is_numeric($user_items['stock_amount'])) || ( !(is_numeric($user_items['stock_amount'])) && (( $buy - $sell ) < 0) ) )
		{
			vault_previous( Vault_stock_lack , vault , '' , '');
		}
		if ( $price > $userdata['user_points'])
		{
			vault_previous( Vault_points_lack , vault , '' , '');
		}
		else
		{
			$sql = "UPDATE " . USERS_TABLE ."
				SET user_points = user_points - $price
				WHERE user_id = $user_id";
			if( !$db->sql_query($sql))
			{
				message_die(GENERAL_ERROR, 'Could not obtain update user points', "", __LINE__, __FILE__, $sql);
			}
		}
		$userdata['user_points'] = $userdata['user_points'] - $price;
		$prize = $buy -  $sell;
		if ( is_numeric($user_items['stock_amount']) &&	$prize != 0 )
		{
			$rsql = "UPDATE " . VAULT_EXCHANGE_USERS_TABLE ."
				SET stock_amount = stock_amount + $prize
				WHERE user_id = $user_id
				AND stock_id = ".$items[$i]['stock_id'];
			if( !$db->sql_query($rsql))
			{
				message_die(GENERAL_ERROR, 'Could not update user stock', "", __LINE__, __FILE__, $rsql);
			}
		}
		else if ( !(is_numeric($user_items['stock_amount'])) && $prize != 0 )
		{
			$rsql = "INSERT INTO " . VAULT_EXCHANGE_USERS_TABLE ."
				( stock_id , user_id , stock_amount )
				VALUES ( ".$items[$i]['stock_id']." , $user_id , $prize )";
			if( !$db->sql_query($rsql))
			{
				message_die(GENERAL_ERROR, 'Could not update user stock', "", __LINE__, __FILE__, $rsql);
			}
		}
sorgt dafür, das die neu berechneten Werte für

$price = Erlös des Kaufs/Verkaufs von Aktien
$prize = Stückzahl der Aktien

in die Datenbank eingetragen werden. Hier muss nun $price durch $sell_user_profit ersetzt werden und $bank_profit neu eingefügt werden?

Nur wie? ^6
Benutzeravatar
oxpus
Administrator
Beiträge: 28737
Registriert: Mo 27.Jan, 2003 22:13
Wohnort: Bad Wildungen
Kontaktdaten:

Beitrag von oxpus »

??
K.A. Ich kenne wie bereits erwähnt die MOD ja nicht und aktuell kann ich mich da auch nicht wirklich tief genug einarbeiten, um Dir hier helfen zu können.
Karsten Ude
-={ Das Mädchen für alles }=-
Kein Support per Messenger, Email oder PN! Unaufgeforderte Nachrichten werden ignoriert!
No support per Messenger, Email or PM. Each unasked message will be ignored!
Benutzeravatar
Dungeonwatcher
Beiträge: 1055
Registriert: Sa 19.Feb, 2005 01:16
Wohnort: Berlin
Kontaktdaten:

Beitrag von Dungeonwatcher »

Tja, wo wenn nicht noch hier können solche Fragen dann noch beantwortet werden? :(
Benutzeravatar
oxpus
Administrator
Beiträge: 28737
Registriert: Mo 27.Jan, 2003 22:13
Wohnort: Bad Wildungen
Kontaktdaten:

Beitrag von oxpus »

Tja, wenn ich die MOD kennen würde, gerne, aber so wird das aktuell etwas schwierig.

... immer diese extra Anpassungen ... tztztz ...
Karsten Ude
-={ Das Mädchen für alles }=-
Kein Support per Messenger, Email oder PN! Unaufgeforderte Nachrichten werden ignoriert!
No support per Messenger, Email or PM. Each unasked message will be ignored!
Benutzeravatar
Dungeonwatcher
Beiträge: 1055
Registriert: Sa 19.Feb, 2005 01:16
Wohnort: Berlin
Kontaktdaten:

Beitrag von Dungeonwatcher »

[quote="oxpus";p="88174"]Tja, wenn ich die MOD kennen würde, gerne, aber so wird das aktuell etwas schwierig.[/quote]

Ich gebe mir doch redlich Mühe und versuche doch auch selber mich da einzuarbeiten. Nicht umsonst nerve ich mit Fragen zur Erklärung von Funktionen oder setze meine selbstgemachten Anpassungen in diverse Supportforen.
... immer diese extra Anpassungen ... tztztz ...
99% Prozent aller von mir verbauten Mods sind ohne spezielle Anpassungen entweder nicht zu gebrauchen weil Fehlerhaft oder aber zu einfach auszutricksen. In diesem Fall trifft leider sogar beides zu. Ersteres habe ich selber hinbekommen, dito auch bei vielen Anpassungen wegen letzterem. Nun hänge ich jedoch mal wieder fest und finde niemanden der mir auf die Sprünge hilft und das seit über 'nem 1/4 Jahr. Genau deswegen reagiere ich aktuell so gereizt auf die Supporter von phpbb. :(
Benutzeravatar
oxpus
Administrator
Beiträge: 28737
Registriert: Mo 27.Jan, 2003 22:13
Wohnort: Bad Wildungen
Kontaktdaten:

Beitrag von oxpus »

Nur die Ruhe.
Ich bin gerade noch an der letzten Umstellung für die Download MOD, dann werde ich mir Deine letzte Anfrage mal genauer anschauen.
Also irgendwann dieses WE.
Vielleicht kann ich ja dann schon helfen...
Karsten Ude
-={ Das Mädchen für alles }=-
Kein Support per Messenger, Email oder PN! Unaufgeforderte Nachrichten werden ignoriert!
No support per Messenger, Email or PM. Each unasked message will be ignored!
Benutzeravatar
oxpus
Administrator
Beiträge: 28737
Registriert: Mo 27.Jan, 2003 22:13
Wohnort: Bad Wildungen
Kontaktdaten:

Beitrag von oxpus »

So, nun habe ich mir Deine Anfrage mal etwas näher angeschaut und schon gleich Fragen:

Die Werte für den Bank-Profit und dem Verdienst des Users werden, so wie Du es nachgerechnet hat, ja bereits korrekt errechnet.
Der Punkt wäre also dann wohl abgehakt.

Nur:
Wo wird denn der Verkaufserlös für den User festgehalten?
In der Usertabelle selber?
Dann müsste in dem von Dir genannten Code-Abschnitt wohl in der Abfrage:

Code: Alles auswählen

			$sql = "UPDATE " . USERS_TABLE ."
				SET user_points = user_points - $price
				WHERE user_id = $user_id";
der Wert für $price durch $sell_user_profit ersetzt werden, wenn ich die von Dir genannten Variablen nun korrekt verstehe.
Wobei noch die Frage zu klären wäre, im letztlich an dieser Stelle der Wert in $sell_user_profit bereits der endgültige Verkaufsprofit über alle Werte in Summe beinhaltet oder dieses ein Array ist und noch zusammengerechnet werden müsste. Das ist aber dann ja nur noch eine "Kleinigkeit".

Dann muss aber auch in der Zeile

Code: Alles auswählen

		$userdata['user_points'] = $userdata['user_points'] - $price;
auch $price durch $sell_user_profit ersetzt werden, um ja die aktuellen Werte des Users live zu korrigieren.

Allerdings bin ich mir nicht sicher, ob der von Dir genannte Code-Abschnitt überhaupt der richtige ist, denn der Verkaufserlös wird von den User-Punkten abgezogen?!? Wird sowas nicht normalerweise addiert?!?

Den Bank-Profit muss man dann allerdings nach diesem Abschnitt speichern und zwar, wie Du im ersten Post nanntest, in der Tabelle "vault_general" im Feld "bank_profit". Passt ja.
Wäre dann eben die SQL-Anweisung

Code: Alles auswählen

$sql = "UPDATE phpbb_vault_general SET bank_profit = bank_profit + $bank_profit";
dahinter auszuführen, was ich weiter oben bereits für eine andere Stelle ja schon einmal postete.

Wie gesagt: Wenn ich wirklich Zeit hätte, könnte ich mir die MOD mal genauer anschauen, um Deiner Anfrage gezielter nachkommen zu können.
Leider ist mir das aber nicht möglich, so daß ich hier nur Tipps und Ansätze aufzeigen kann, aber keine konkreten Vorschläge, da ich mich ledlglich auf die von Dir geposteten Code-Stellen beziehen kann...

Und dazu muss ich sagen, wie Du es ebenfalls bereits schriebst, daß die MOD vom Autoren scheinbar recht verworren programmiert wurde. Ein Banken-/Verkaufs-System kann man auch logischer gestalten, aber ich will hier nichts schlecht reden, was ich kaum kenne.
Vielleicht ist es doch logischer, wenn ich mir das mal näher anschauen würde, als es hier dargestellt wird...
Zuletzt geändert von oxpus am Sa 31.Jan, 2009 19:03, insgesamt 1-mal geändert.
Karsten Ude
-={ Das Mädchen für alles }=-
Kein Support per Messenger, Email oder PN! Unaufgeforderte Nachrichten werden ignoriert!
No support per Messenger, Email or PM. Each unasked message will be ignored!
Benutzeravatar
Dungeonwatcher
Beiträge: 1055
Registriert: Sa 19.Feb, 2005 01:16
Wohnort: Berlin
Kontaktdaten:

Beitrag von Dungeonwatcher »

Hi! :cool:

[quote="oxpus";p="88180"]So, nun habe ich mir Deine Anfrage mal etwas näher angeschaut und schon gleich Fragen:[/quote]

Immer zu, ich versuche alles zu beantworten.
Die Werte für den Bank-Profit und dem Verdienst des Users werden, so wie Du es nachgerechnet hat, ja bereits korrekt errechnet.
Der Punkt wäre also dann wohl abgehakt.
Korrekt.
Nur:
Wo wird denn der Verkaufserlös für den User festgehalten?
In der Usertabelle selber?
Genau dort im Tabellenfeld user_points. Dieses gehört zum Cash Mod, auf das der Vault Mod aufbaut.
Dann müsste in dem von Dir genannten Code-Abschnitt wohl in der Abfrage:

Code: Alles auswählen

			$sql = "UPDATE " . USERS_TABLE ."
				SET user_points = user_points - $price
				WHERE user_id = $user_id";
der Wert für $price durch $sell_user_profit ersetzt werden, wenn ich die von Dir genannten Variablen nun korrekt verstehe.
Genauso hatte ich das bisher auch verstanden und getestet. Allerdings ergibt dies sehr seltsame Ergebnisse.
Wobei noch die Frage zu klären wäre, im letztlich an dieser Stelle der Wert in $sell_user_profit bereits der endgültige Verkaufsprofit über alle Werte in Summe beinhaltet oder dieses ein Array ist und noch zusammengerechnet werden müsste. Das ist aber dann ja nur noch eine "Kleinigkeit".
Nee, das ganze zu addieren ist nach meinem Verständnis nicht nötig.

Ich habe in meinem ersten Post mal den betreffenden Code Block komplettiert.

Wenn ich diesen richtig verstehe, dann wird alles zwischen Zeile 17 und 93 solange wiederholt (for-Schleife), bis alle Datensätze (Aktienfirmen) abgearbeitet sind und bei jedem Ende dieser Schleife wird das Ergebnis in die Datenbank eingetragen.

Code: Alles auswählen

echo "$sell_price / $bank_profit / $sell_user_profit , ";
sieht das ganze nämlich beim verkaufen so aus:
10 / 1.25 / 8.75 , 0 / 0 / 0 , 0 / 0 / 0 ,
Es sind hierbei 3 Firmen, wobei von der ersten Firma 1 Aktie a 10,- verkauft wurde / Bankengewinn 1,25 / Erlös des Verkäufers.

Das Problem dürfte die Codezeile 40 sein:

Code: Alles auswählen

$price = ( ( $buy -  $sell ) * $items[$i]['stock_price'] );
Hier wird der Gewinn wie folgt berechnet:

Gewinn = Gesamtkaufspreis - Gesamtverkaufspreis * Stückzahl

Das funktioniert so natürlich nicht mehr. ^6

Nach vielem experimentieren ohne wirklich zu verstehen habe ich nun folgende Lösung gefunden:

Code: Alles auswählen

$price = ((( $buy -  $sell ) * $items[$i]['stock_price'] ) + $bank_profit);
Warum auch immer, jedenfalls wenn ich zum bisherigen Gewinn (ohne Abzug des Bankengewins) den Bankkengewinn dazu addiere, dann stimmt der Wert den der User gutgeschrieben bekommt. Ich brauche nun nicht mal das Updaten der Datenbank ändern, sondern so belassen:

Code: Alles auswählen

			$sql = "UPDATE " . USERS_TABLE ."
				SET user_points = user_points - $price
				WHERE user_id = $user_id";
Den Bank-Profit muss man dann allerdings nach diesem Abschnitt speichern und zwar, wie Du im ersten Post nanntest, in der Tabelle "vault_general" im Feld "bank_profit". Passt ja.
Wäre dann eben die SQL-Anweisung

Code: Alles auswählen

$sql = "UPDATE phpbb_vault_general SET bank_profit = bank_profit + $bank_profit";
Ich habe das mal angepasst:

Code: Alles auswählen

$sql = "UPDATE " . VAULT_GENERAL_TABLE ."
    SET bank_profit = bank_profit + $bank_profit";
Beides ergibt seltsamerweise die Meldung, das es das Feld bank_profit nicht gibt? ^6

Wie gesagt: Wenn ich wirklich Zeit hätte, könnte ich mir die MOD mal genauer anschauen, um Deiner Anfrage gezielter nachkommen zu können.
Leider ist mir das aber nicht möglich, so daß ich hier nur Tipps und Ansätze aufzeigen kann, aber keine konkreten Vorschläge, da ich mich ledlglich auf die von Dir geposteten Code-Stellen beziehen kann...
Ist schon voll ok. Ich versuche ja mich da selber durchzuwurschteln. Es braucht halt nur regelmäßig Denkanstöße. ;)
Zuletzt geändert von Dungeonwatcher am So 01.Feb, 2009 20:35, insgesamt 5-mal geändert.
Benutzeravatar
oxpus
Administrator
Beiträge: 28737
Registriert: Mo 27.Jan, 2003 22:13
Wohnort: Bad Wildungen
Kontaktdaten:

Beitrag von oxpus »

Vielleicht verwendet die Tabelle phpbb_vault_general eine Struktur, wie man sie von der phpbb_config kennt, also ein Feld für den Wertnamen und ein zweites Feld für den Wert selber.

Wie schaut denn die Struktur dieser Tabelle denn wirklich aus?

Ansonsten verwirrt mich das Problem von Mal zu Mal mehr.
Die Vauilt MOD ist ja scheinbar komplexer programmiert, als Banken überhaupt Geschäfte entwickeln...
Karsten Ude
-={ Das Mädchen für alles }=-
Kein Support per Messenger, Email oder PN! Unaufgeforderte Nachrichten werden ignoriert!
No support per Messenger, Email or PM. Each unasked message will be ignored!
Benutzeravatar
Dungeonwatcher
Beiträge: 1055
Registriert: Sa 19.Feb, 2005 01:16
Wohnort: Berlin
Kontaktdaten:

Beitrag von Dungeonwatcher »

[quote="oxpus";p="88184"]Vielleicht verwendet die Tabelle phpbb_vault_general eine Struktur, wie man sie von der phpbb_config kennt, also ein Feld für den Wertnamen und ein zweites Feld für den Wert selber.[/quote]

Hmmm, offensichtlich.
Wie schaut denn die Struktur dieser Tabelle denn wirklich aus?

Code: Alles auswählen

--
-- Tabellenstruktur fuer Tabelle `phpbb_vault_general`
--

CREATE TABLE `phpbb_vault_general` (
  `config_name` varchar(255) NOT NULL DEFAULT '',
  `config_value` decimal(15,2) NOT NULL DEFAULT '0.00',
  PRIMARY KEY (`config_name`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;

--
-- Daten fuer Tabelle `phpbb_vault_general`
--

INSERT INTO `phpbb_vault_general` VALUES('vault_loan_enable', 1.00);
INSERT INTO `phpbb_vault_general` VALUES('interests_rate', 2.25);
INSERT INTO `phpbb_vault_general` VALUES('interests_time', 2592000.00);
INSERT INTO `phpbb_vault_general` VALUES('loan_interests', 15.25);
INSERT INTO `phpbb_vault_general` VALUES('loan_interests_time', 5184000.00);
INSERT INTO `phpbb_vault_general` VALUES('loan_max_sum', 15000.00);
INSERT INTO `phpbb_vault_general` VALUES('loan_requirements', 50.00);
INSERT INTO `phpbb_vault_general` VALUES('stock_max_change', 15.15);
INSERT INTO `phpbb_vault_general` VALUES('stock_min_change', 0.25);
INSERT INTO `phpbb_vault_general` VALUES('base_amount', 10.00);
INSERT INTO `phpbb_vault_general` VALUES('num_items', 100.00);
INSERT INTO `phpbb_vault_general` VALUES('stock_sell_tax', 1.25);
INSERT INTO `phpbb_vault_general` VALUES('bank_profit_sum', 0.00);
Ansonsten verwirrt mich das Problem von Mal zu Mal mehr.
Die Vauilt MOD ist ja scheinbar komplexer programmiert, als Banken überhaupt Geschäfte entwickeln...
Warscheinlich. ^6

Nachtrag:

Moin! :cool:

Die Verwirrung geht noch weiter. Die Abfrage mittels

Code: Alles auswählen

'BANK_PROFIT_SUM' => $vault_general['bank_profit_sum'],
ergibt kein Ergebnis. Verändere ich diese Abfrage um ein anderes Feld auszulesen:

Code: Alles auswählen

'BANK_PROFIT_SUM' => $vault_general['stock_min_change'],
funktioniert die Abfrage. Das klappt mit jedem Feld, außer den beiden letzten stock_sell_tax und bank_profit_sum. Diese beiden Felder habe ich nachträglich hinzugefügt. ^6
Zuletzt geändert von Dungeonwatcher am Mo 02.Feb, 2009 07:33, insgesamt 5-mal geändert.
Benutzeravatar
oxpus
Administrator
Beiträge: 28737
Registriert: Mo 27.Jan, 2003 22:13
Wohnort: Bad Wildungen
Kontaktdaten:

Beitrag von oxpus »

Die Abfrage auf "stock_sell_tax" müsste dann klappen, wenn auch ein Wert gespeichert wurde.
"bank_profit_sum" müsste allerdings erst noch gefüllt werden, da ja noch nichts da rein kam.
Die obige Abfrage

Code: Alles auswählen

$sql = "UPDATE " . VAULT_GENERAL_TABLE ."
    SET bank_profit = bank_profit + $bank_profit";
müsste hierfür also so ausschauen:

Code: Alles auswählen

$sql = "UPDATE " . VAULT_GENERAL_TABLE . "
    SET config_value = config_value + $bank_profit
    WHERE config_name = 'bank_profit_sum'";
Karsten Ude
-={ Das Mädchen für alles }=-
Kein Support per Messenger, Email oder PN! Unaufgeforderte Nachrichten werden ignoriert!
No support per Messenger, Email or PM. Each unasked message will be ignored!
Benutzeravatar
Dungeonwatcher
Beiträge: 1055
Registriert: Sa 19.Feb, 2005 01:16
Wohnort: Berlin
Kontaktdaten:

Beitrag von Dungeonwatcher »

Moin! :cool:

Jou, das Eintragen des Bankgewinns funktioniert nun auch. :)

Bleibt jetzt nur noch ein "Rätsel" zu lösen. Warum funktioniert dies nicht:

Code: Alles auswählen

'BANK_PROFIT_SUM' => $vault_general['bank_profit_sum'],
Im Tabellenfeld bank_profit_sum steht nun ein passender Wert, welcher auch korrekt berechnet wird. Alle anderen Tabellenfelder lassen sich nun so auslesen. ^6
Benutzeravatar
oxpus
Administrator
Beiträge: 28737
Registriert: Mo 27.Jan, 2003 22:13
Wohnort: Bad Wildungen
Kontaktdaten:

Beitrag von oxpus »

Ich gehe mal davon aus, daß die Tabelle mittels einer Schleife ausgelesen wird.
Entweder wären dann dort die möglichen Felder vordefiniert, wobei man dann die Abfrage um eben "bank_profit_sum" erweitern müsste, oder etwas stimmt nicht mit der Datenübernahme, da das Feld ja vom Typ "decimal" ist...
Karsten Ude
-={ Das Mädchen für alles }=-
Kein Support per Messenger, Email oder PN! Unaufgeforderte Nachrichten werden ignoriert!
No support per Messenger, Email or PM. Each unasked message will be ignored!
Benutzeravatar
Dungeonwatcher
Beiträge: 1055
Registriert: Sa 19.Feb, 2005 01:16
Wohnort: Berlin
Kontaktdaten:

Beitrag von Dungeonwatcher »

Hi! :cool:

So, nun hab ich dies auch hinbekommen. Ich musste noch folgende DB Abfrage an die richtige Stelle hinzufügen:

Code: Alles auswählen

$sql = "SELECT *
FROM " . VAULT_GENERAL_TABLE ;
if(!$result = $db->sql_query($sql))
{
	message_die(CRITICAL_ERROR, "Could not query information in Vault General Table", "", __LINE__, __FILE__, $sql);
}
while( $row = $db->sql_fetchrow($result) )
{
	$vault[$row['config_name']] = $row['config_value'];
}
dann funktioniert auch folgende Abfrage:

Code: Alles auswählen

'BANK_PROFIT_SUM' => number_format($vault['bank_profit_sum'],2, ",", "."),
Supigroßes Dankeschön für deine Tipps und Hinweise :anbet
Benutzeravatar
oxpus
Administrator
Beiträge: 28737
Registriert: Mo 27.Jan, 2003 22:13
Wohnort: Bad Wildungen
Kontaktdaten:

Beitrag von oxpus »

Supigroßes Dankeschön für deine Tipps und Hinweise
No Problem.
Super, daß es jetzt geht...
Karsten Ude
-={ Das Mädchen für alles }=-
Kein Support per Messenger, Email oder PN! Unaufgeforderte Nachrichten werden ignoriert!
No support per Messenger, Email or PM. Each unasked message will be ignored!
Benutzeravatar
Dungeonwatcher
Beiträge: 1055
Registriert: Sa 19.Feb, 2005 01:16
Wohnort: Berlin
Kontaktdaten:

Beitrag von Dungeonwatcher »

Hi! :cool:

[quote="oxpus";p="88190"]Super, daß es jetzt geht...[/quote]

Nicht nur das. Jetzt funktioniert auch das kplt. Kredit- bzw. Zinssystem über diesen Bankgewinn. Bisher wurden Kredite und Zinsen aus dem Nichts vergeben oder verschwanden im Nichts, jetzt werden diese aus dem Bankgewinn aus- bzw. eingezahlt.

Mal schauen was mir noch so an "Gemeinheiten" einfällt. Ein zufälliger "Schwarzer Freitag" im Jahr steht da z.B. noch auf meiner Liste. ;)
Benutzeravatar
oxpus
Administrator
Beiträge: 28737
Registriert: Mo 27.Jan, 2003 22:13
Wohnort: Bad Wildungen
Kontaktdaten:

Beitrag von oxpus »

Ein zufälliger "Schwarzer Freitag" im Jahr steht da z.B. noch auf meiner Liste.
Warum nicht.
Und das gesamte System müsste dann "kontrolliert" zusammenbrechen.

Denkbar wäre auch ein 1. April, an dem alle User keine Punkte hätten oder so.
Als Spaß eben und ab dem 02.April wäre wieder alles i. O. ;)
Karsten Ude
-={ Das Mädchen für alles }=-
Kein Support per Messenger, Email oder PN! Unaufgeforderte Nachrichten werden ignoriert!
No support per Messenger, Email or PM. Each unasked message will be ignored!
Antworten