online 1
gast (50)

/ Forum / Skripte(PHP,ASP,Perl...)

Skripte(PHP,ASP,Perl...)Skripte(PHP,ASP,Perl...)

Fragevon Uesch vom 29.12.2019, 16:13 Options

Kompliziertes Problem

Hallo allerseits,

ich komme nicht mehr weiter und brauche dringend Hilfe.
Mein Problem ist die MySQL - Abfrage. Es geht um ein Browserspiel, das ich versuche, zu bauen. Nun scheitere ich aber bei den CronJobs. Und zwar soll stündlich eine bestimmte Anzahl an Nahrung, Steinen, Metall usw. zu den Ressourcen des Spielers hinzugefügt werden. Die Anzahl ist abhängig von der Anzahl der Gebäude, die die Ressource bilden. Das heißt also, dass ich aus der Tabelle "buildings", in welcher die User_id, der Building_kind (also um was für ein Gebäude es sich handelt), sowie die building_amount (also wieviele Gebäude man von dieser Art hat). Beim ersten Login nach der Registrierung wird für jedes Gebäude die User_id, der Building_kind und die Anzahl (nämlich 0) in die Tabelle eingefügt. So, nehmen wir jetzt an, jemand hat 7 Steinminen. Das bedeutet, dass als erstes aus der "about_buildings" - Tabelle herausgesucht werden soll, wieviel ein Gebäude dieser Art produziert. Daraufhin wird diese Produktionshöhe mit der Anzahl der Gebäude dieses Typs multipliziert.
Am Ende muss dieser Wert dann dem bisherigen Wert der Ressourcen hinzugefügt werden.

So, das klingt jetzt bestimmt kompliziert. Ich zeig euch mal einen Ansatz, den ich versucht habe:

$sql = "SELECT
            user_id
        FROM
            buildings";
            
$result = mysql_query ($sql);
$data = mysql_fetch_array ($result);

foreach ($data as $v) {
$sql2 = "SELECT
            building_kind, building_amount
        FROM
            buildings
            WHERE
            user_id = '".$v."'";
$build = mysql_query ($sql2);
$data2 = mysql_fetch_array ($result);
}
$sql3 = "SELECT
            building_product, production
        FROM
            buildings
            WHERE
            building_kind = '".$data2["building_kind"]."'";
$about = mysql_query ($sql3);

foreach ($data as $v) {
$aendern = "UPDATE ressources Set '".$about["building_product"]."' = '".$about["building_product"]."' + '".$about["production"]."'";

$eintragend = mysql_query($aendern);
}


Im ersten Schritt werden die User_ids, dann wird für jede User_id die Art des Gebäudes, sowie die Anzahl der Gebäude dieses Typs herausgefiltert. Dann wird das building_product (also was das Gebäude produziert sowie die production (also wieviel es produziert).

ICh glaube, es ist komplett falsch. Dachte mir, vielleicht sollte ich es ohne CronJob machens, sondern so, dass beim Login die Ressourcen hinzugefügt werden. Das wäre bestimmt einfacher. Komme damit aber auch nicht klar. Da habe ich nämlich das Problem, dass er bei buildings (also welche Gebäude ein User hat) immer nur das erste Gebäude , welches die ID des Users hat nimmt. Habe folgenden Code:

$sel = "SELECT
            building_kind
        FROM
            buildings
            WHERE
            user_id = '".$_SESSION["user_id"]."'";


So, da aber viele gleiche UserIds in der Tabelle sind, da ja für jedes Gebäude die User_id erneut geschrieben wurde, holt er sich nur das erste Gebäude. Wie kann ich ihn weitersuchen lassen, so dass er ALLE Gebäude findet, bei denen die User_ID der SessionID übereinstimmt?


Kann mit bitte jemand helfen?

Danke im Vorraus,

Üsch


Antwort schreiben

Antwort 1 von McMonky vom 31.12.2019, 14:28 Options

Hi Üsch,

ich bin gerade dabei selbst ein browsergame zu erstellen.
und hier der tipp:
wie wäre es wenn du statt viele gebäude einfach ausbaustufen machst, du müsstest nicht viele riesige tabellen machen, sondern nur in der benutzertabelle alle gebäude hineinschreiben und die ausbaustufe, außerdem kannst du mit z.B. "prodsteine" festlegen wie viele steine produziert werden, und den wert einfach mit print() oder echo (je nachdem was du benutzt) ausgeben. Bsp. für die tabelle:

benutzer  |test
passwort  |test
...       |...
steine    |750
prodsteine|50
steinmiene|4

das bedeutet, der benutzer test hat 750 steine und eine steinmiene auf stufe 4, die ihm pro stunde 50 steine liefert.

Mfg
McMonky

P.S.:
Sag bescheid wenn dein spiel fertig ist!

Antwort 2 von Uesch vom 31.12.2019, 15:54 Options

Das ist ein Hammeridee! Sehr gut!

Aber, wie machst du es denn, wenn man auf "Alle vorhandenen Gebäude anzeigen" geht, dass er in der Datenbank nach allen Ausbaustufen sucht, die die ID haben, welcher der User hat? Weil sonst zeigt er halt nur an: Steinminen = Ausbaustufe 4. Er sucht dann nicht weiter, sondern stoppt die Suche, weil er ja schon ein result gefunden hat.

Hast du da ne Idee?

PS: ich mache ein Browserspiel mit Touristen, denen du auf einem beliebigen Planeten eine Art Ferienanlage bauen musst. Will vor allem viel mit 3D-Videos und Bildern machen.

Was machst du denn für ein Spiel? Auch Weltraum?


Gruß,
Üsch

Antwort 3 von Uesch vom 01.01.2020, 20:22 Options

Ah, ok ich habs.

Ähnliche Themen

Trojaner
ludni  23.01.2007 - 69 Hits - 10 Antworten

Win95 Spiel auf XP zum laufen bringen?!
Krax  14.02.2007 - 94 Hits - 8 Antworten

Yakumo Cordless Double - Hotkeys funktionieren nicht
snooze_  01.03.2007 - 65 Hits - 1 Antwort

Kommentar aus anderem Blatt
Marten  27.09.2007 - 23 Hits - 1 Antwort

Umwandlung ".jpg" zu ".bmp"
Fixstern  16.02.2008 - 75 Hits - 5 Antworten

Hinweis

Diese Frage ist schon etwas älter, Sie können daher nicht mehr auf sie antworten. Sollte Ihre Frage noch nicht gelöst sein, stellen Sie einfach eine neue Frage im Forum..

Neue Einträge

Version: supportware 1.9.150 / 10.06.2022, Startzeit:Mon Jan 26 01:23:17 2026