Thread Rating:
  • 1 Vote(s) - 4 Average
  • 1
  • 2
  • 3
  • 4
  • 5
Browsergame:Rohstofftimer -> Profis?
#1
Abend,

Mit meinem Browsergame bin ich jetzt schon ziemlich weit... Mein Freund kann Js, ich php, jetzt wollte ich fragen, da wir mit den Rohstoffen nicht weiterkommen...

Holz, Stein, Eisen, wir wollten in eine Array die Produktion pro Stunde der jeweiligen Stufe einspeichern. Ich denke, mit js sollte es dann funktionieren, die Rohstoffe irgendwie gutzuschreiben (also pro Stunde die anzahl)

Aber wir kommen nicht weiter. Wie macht ihr das? Ich brauch jetzt kein script, aber auf welche Art funktioniert es am besten?!

Grüße
knollenmax
Reply
#2
Ich denke mit Js ist es schwer dies zu realisieren, dass die Rohstoffe sich erhöhen, da die Seite dann immer geöffnet sein muss, damit das Js ausgeführt wirdWink
[Image: create.php?uid=511]
Reply
#3
Sowas ist zwar mit JS mögich aber vollkommen sinnfrei, da die Manipulationsmögöichkeiten dadurch enorm steigen. Solche sachen sollten immer Serverseitig laufen und das Hochzählen der Rohstoffe mit JS reinweg zur Anzeige dienen.
Reply
#4
Mit PHP würde ich die Zeit irgendwo speichern (natürlich mit time() nicht im vollen Datum), vielleicht in eine Datenbank.
Und immer wenn man die Seite lädt, dann wird abgefragt, wie viel Sekunden von der abgespeicherten Zeit vergangen sind.
Und wenn dann 3600 Sekunden (1 Stunde) vergangen ist, werden die Rohstoffe gutgeschrieben.

Klar, wenn man mehrere Stunden die Seite nicht neu geladen hat, dann macht man die jetzige Zeit minus die gespeicherte Zeit.
Das Ergebnis geteilt durch 3600 Sekunden und dann hast du die Anzahl von Stunden die vergangen sind.
Nun nurnoch auf keine KOMMASTELLE runden. Und dann kommt z.B. 4 raus, so muss man dem User seine Rohstoffe 4x geben.

So würde ich das machen^^
Manchmal denke ich:
Reply
#5
so hab ichs schon probiert... das mit dem neu laden ist nicht schlecht... aber ich finde, es wäre besser, wenn man wirklich alle Stunden die Ress bekommt... aber so gehts auch
Reply
#6
Der Ansatz ist schon nicht schlecht aber Lückenhaft. Du musst ganz einfach erstmal die Rohstoffe pro Stunde in Rohstoffe pro sekunde ausrechnen also (Rohstoffzuwachs pro Stunde / 3600) und dann bei jedem Seitenaufruf die Zeit speichern und dann beim nächsten aufruf die Zeit in sekunden erreichnen die seit dem letzten aufruf vergangen ist und dann mal deine Rohstoffe pro Sekunde nehmen und schon hast du den wert wie viele Rohstoffe seit dem letzten Seitenaufrunf hinzugekommen sind.
Reply
#7
(02.04.2010, 09:26)agent47 Wrote: Der Ansatz ist schon nicht schlecht aber Lückenhaft. Du musst ganz einfach erstmal die Rohstoffe pro Stunde in Rohstoffe pro sekunde ausrechnen also (Rohstoffzuwachs pro Stunde / 3600) und dann bei jedem Seitenaufruf die Zeit speichern und dann beim nächsten aufruf die Zeit in sekunden erreichnen die seit dem letzten aufruf vergangen ist und dann mal deine Rohstoffe pro Sekunde nehmen und schon hast du den wert wie viele Rohstoffe seit dem letzten Seitenaufrunf hinzugekommen sind.

Genauso hab ich mir das auch gedacht.
Manchmal denke ich:
Reply
#8
Naja eigentlich ist es ganz einfach....

In MySQL habt ihr ne Zeile die nennt sich "last_ress_reload" oder so...
PHP Code:
$sql mysql_query("SELECT * FROM villages WHERE id = ".$villid);
$village mysql_fetch_assoc($sql); // Queries und so

$last_ress_reload $village["last_ress_reload"]; // Last ress reload zeigt an wann zum letzten mal die Rohstoffe neu berechnet wurden.

$ress_per_h "5000"// Rohstoffe in der Stunde

$end_ress round($village["rohstoffart"] + ($ress_per_h $config["speed"] / 60 60 * (time() - $last_ress_reload))); // Die "Formel"

mysql_query("UPDATE villages SET rohstoffart = $end_ress WHERE id = ".$villid); // Rohstoffe eintragen
mysql_query("UPDATE villages SET last_ress_reload = '".time()."' WHERE id = ".$villid); // Time() Eintragen 

MfG milos
✝ RiP 
Weiter geht's  Cool
Reply
#9
Und wenn er den "Speed" nicht eingestellt ist, dann ist die GROßE Formel anders.

auch geht das so:

PHP Code:
$end_ress round(time() - $last_ress_reload 3600 $ress_per_h);

mysql_query("UPDATE villages SET rohstoffart = rohstoffart + $end_ress WHERE id = '".$villid."'"); 

Glaub ich xD
Manchmal denke ich:
Reply
#10
(02.04.2010, 14:58)Yannici Wrote: Und wenn er den "Speed" nicht eingestellt ist, dann ist die GROßE Formel anders.

auch geht das so:

PHP Code:
$end_ress round(time() - $last_ress_reload 3600 $ress_per_h);

mysql_query("UPDATE villages SET rohstoffart = rohstoffart + $end_ress WHERE id = '".$villid."'"); 

Glaub ich xD
Ne die Formel bei dir ist falsch...
Die sollte so sein
PHP Code:
$end_ress round((time() - $last_ress_reload) * ($ress_per_h 3600); 


Meine Formel is aber Cool ^^
✝ RiP 
Weiter geht's  Cool
Reply
#11
danke das hat mir auch sehr geholfen!

ps. ich mach auch gtrad nen BG Wink
Reply
#12
PHP Code:
        <?php
            $wasser 
$village["Wasser"];
            
$holz $village["Holz"];
            
$eisen $village["Eisen"];
            
$id $_COOKIE['id'];
            
$time TIME();
            
            
$sql mysqli_query($db"SELECT * FROM Benutzer WHERE id = ".$id);
            
$village mysqli_fetch_assoc($sql);
            
            
$last_ress_reload $village["last_ress_reload"]; // Last ress reload zeigt an wann zum letzten mal die Rohstoffe neu berechnet wurden.
            
            
$ress_per_sec_wasser "0.6"// Wasser in der Stunde
            
$ress_per_sec_holz "0.6"// Holz in der Stunde
            
$ress_per_sec_eisen "0.4"// Eisen in der Stunde
            
            
$end_ress_wasser round($village["Wasser"] + (time() - $last_ress_reload) * $ress_per_sec_wasser); // Die "Formel" für Wasser
            
mysqli_query($db"UPDATE Benutzer SET Wasser = $end_ress_wasser WHERE id = ".$id); // Wasser eintragen
            
            
$end_ress_holz round($village["holz"] + (time() - $last_ress_reload) * $ress_per_sec_holz); // Die "Formel" für Holz
            
mysqli_query($db"UPDATE Benutzer SET Holz = $end_ress_holz WHERE id = ".$id); // Holz eintragen
            
            
$end_ress_eisen round($village["eisen"] + (time() - $last_ress_reload) * $ress_per_sec_eisen); // Die "Formel" für Eisen
            
mysqli_query($db"UPDATE Benutzer SET Eisen = $end_ress_eisen WHERE id = ".$id); // Eisen eintragen
            
            
mysqli_query($db"UPDATE Benutzer SET last_ress_reload = '".time()."' WHERE id = ".$id); // Time() Eintragen
        
?>

so... das ist mein code!

wen ich die seite neulade und dann in die mysql datenbank schaue wird eisen und holz weniger oder bleibt gleich und wasser (so wies sein soll mehr)!

ich will mit jetzt nicht länger den kopf darüber zerbrechen und frage euch deswegen um hilfe!
wen ich es per h nicht per sec mache ist es genau das gleiche!

PHP Code:
            $ress_per_h_wasser "6000"// Wasser in der Stunde
            
$ress_per_h_holz "6000"// Holz in der Stunde
            
$ress_per_h_eisen "6000"// Eisen in der Stunde
            
            
$end_ress_wasser round($village["Wasser"] + (time() - $last_ress_reload) * ($ress_per_h_wasser 3600)); // Die "Formel" für Wasser
            
mysqli_query($db"UPDATE Benutzer SET Wasser = $end_ress_wasser WHERE id = ".$id); // Wasser eintragen
            
            
$end_ress_holz round($village["holz"] + (time() - $last_ress_reload) * ($ress_per_h_holz 3600)); // Die "Formel" für Holz
            
mysqli_query($db"UPDATE Benutzer SET Holz = $end_ress_holz WHERE id = ".$id); // Holz eintragen
            
            
$end_ress_eisen round($village["eisen"] + (time() - $last_ress_reload) * ($ress_per_h_eisen 3600)); // Die "Formel" für Eisen
            
mysqli_query($db"UPDATE Benutzer SET Eisen = $end_ress_eisen WHERE id = ".$id); // Eisen eintragen
            
            
mysqli_query($db"UPDATE Benutzer SET last_ress_reload = '".time()."' WHERE id = ".$id); // Time() Eintragen 
[/code]
Reply
#13
php ist caseinsesitive bei assosiierten indizes vermuztlich must du eisen und holz einfach groß schreiben
Reply
#14
danke
Reply




Users browsing this thread: 10 Guest(s)