Hallo Leute,
und zwar stehe ich nun vor folgendem Problem:
Wenn der User ein Gebäude bauen will, so klickt er auf ausbauen und das Gebäude wird gebaut. Fertig.
Bei dem Bau von Einheiten in der Kaserne habe ich mir das aber etwas anders vorgestellt.
Und zwar soll der User eingeben können wie viele Einheiten er bauen möchte. Diese sollen dann in eine "Auftragsliste" geschrieben werden und eine Einheit nach der anderen soll somit ausgebildet werden bis die Liste abgearbeitet ist.
Der User soll aber auch mitten in der Ausbildung noch weitere Einheiten zur Ausbildung schicken können, also wenn z.b. gerade 5 Arbeiter in Ausbildung sind und der User möchte insgesamt 7, dass er jetzt einfach nur noch 2 nachschicken braucht.
Meine Frage:
Wie genau kann ich so eine Auftragsliste umsetzen ?
Denn ich weiß da irgendwie nicht so recht wie ich anfangen soll.
Auftragsliste ?
gepostet vor 18 Jahre, 7 Monate von Kelturio
gepostet vor 18 Jahre, 7 Monate von Mudder
Schön wenn man Pläne hat
Frage: Findet die Ausbildung paralell statt oder nacheinander..
Also wenn ich nun sage, dass ich 5 Arbeiter haben will, dass die dann auf einmal (aber langsamer?) ausgebildet werden oder einer nach dem anderen?
Frage: Findet die Ausbildung paralell statt oder nacheinander..
Also wenn ich nun sage, dass ich 5 Arbeiter haben will, dass die dann auf einmal (aber langsamer?) ausgebildet werden oder einer nach dem anderen?
gepostet vor 18 Jahre, 7 Monate von Progralixx
Hmm, in meinem Spiel werden Einheiten nacheinander ausgebildet.
Wenn ich einen Soldaten ausbilde, kostet das immer einen festen Wert an Zeit, als Beispiel diene 3 Minuten.
Wenn dieser Soldaten also gerade ausgebildet wird, möchte ich danach noch einen Soldaten ausbilden, also klicke ich auf "Soldat XY ausbilden"
Da der erste Soldat aber noch nicht fertig ist und die Soldaten nicht gleichzeitig ausgebildet werden sollen, mache ich folgendes: Ich addiere die reguläre Ausbildungszeit (also 3 Minuten) zu der Zeit, die mein erster Soldat noch braucht.
Das mache ich mit jedem Soldaten so, der ausgebildet werden soll. Nach vier- oder fünf Soldaten ist der erste schon fast fertig (naja, je nachdem, wie schnell man den Soldaten auf die Liste setzt) und der letzte Soldat in der Liste braucht dann eben 9 oder 12 Minuten.
Wenn ich einen Soldaten ausbilde, kostet das immer einen festen Wert an Zeit, als Beispiel diene 3 Minuten.
Wenn dieser Soldaten also gerade ausgebildet wird, möchte ich danach noch einen Soldaten ausbilden, also klicke ich auf "Soldat XY ausbilden"
Da der erste Soldat aber noch nicht fertig ist und die Soldaten nicht gleichzeitig ausgebildet werden sollen, mache ich folgendes: Ich addiere die reguläre Ausbildungszeit (also 3 Minuten) zu der Zeit, die mein erster Soldat noch braucht.
Das mache ich mit jedem Soldaten so, der ausgebildet werden soll. Nach vier- oder fünf Soldaten ist der erste schon fast fertig (naja, je nachdem, wie schnell man den Soldaten auf die Liste setzt) und der letzte Soldat in der Liste braucht dann eben 9 oder 12 Minuten.
gepostet vor 18 Jahre, 7 Monate von Kelturio
Ja, also die Einheiten sollen nacheinander ausgebildet werden.
Rechts gibt es dann eben ein Eingabefeld in welches man die gewünschte Anzahl eingeben soll, dann soll geguckt werden, ob man sich die Menge auch von den Rohstoffen her leisten kann. Wenn ja, werden alle auf die Liste gesetzt und wenn nein, dann wird die Menge auf die Liste gesetzt, die man mit seinen derzeit zur Verfügung stehenden Ress ausbilden kann. :wink:
Im Prinzip soll der Einheitenbau so funktionieren wie bei dem Game www.ogame.de . Denn die haben dort das selbe Prinzip wie ich es gerne hätte.
Rechts gibt es dann eben ein Eingabefeld in welches man die gewünschte Anzahl eingeben soll, dann soll geguckt werden, ob man sich die Menge auch von den Rohstoffen her leisten kann. Wenn ja, werden alle auf die Liste gesetzt und wenn nein, dann wird die Menge auf die Liste gesetzt, die man mit seinen derzeit zur Verfügung stehenden Ress ausbilden kann. :wink:
Im Prinzip soll der Einheitenbau so funktionieren wie bei dem Game www.ogame.de . Denn die haben dort das selbe Prinzip wie ich es gerne hätte.
gepostet vor 18 Jahre, 7 Monate von Mudder
Der Bau eines Arbeiters dauert 30 Minuten (=1800 Sekunden). Nun machst du es genau wie bei den Gebäuden.
Die letzte Aktualliserung war vor 15 Minuten (=900 Sekunden), sprich es ist noch kein Arbeiter fertig. Es wird wieder die letzte Aktuallisierung gespeichert.
Den nächsten Seitenaufruf macht der Spieler nach einer Stunde (3600 Sekunden). Von den 3600 Sekunden ziehst du nun 900 Sekunden für den 1. Arbeiter ab. Bleiben noch 2700 Sekunden übrig, also man kann schauen ob man sich den nächsten Arbeiter vornehmen kann. 2700 - 1800 macht den nächsten Arbeiter und nochmal 900 Sekunden über, die aber ins Leere laufen weil keine Arbeiter mehr in der Schleife stehen.
Einfach wie bei den Ressourcen schauen wieviel Zeit seit der letzten Aktuallisierung vergangen ist und diese dann mit der Produktion/Ausbildung aufrechnen. Du kannst wie bei den Ressourcen auch andere Ticks nehmen und z.B. Minuten anstatt Sekunden rechnen (was wiederum den Server schohnen würde)
Die letzte Aktualliserung war vor 15 Minuten (=900 Sekunden), sprich es ist noch kein Arbeiter fertig. Es wird wieder die letzte Aktuallisierung gespeichert.
Den nächsten Seitenaufruf macht der Spieler nach einer Stunde (3600 Sekunden). Von den 3600 Sekunden ziehst du nun 900 Sekunden für den 1. Arbeiter ab. Bleiben noch 2700 Sekunden übrig, also man kann schauen ob man sich den nächsten Arbeiter vornehmen kann. 2700 - 1800 macht den nächsten Arbeiter und nochmal 900 Sekunden über, die aber ins Leere laufen weil keine Arbeiter mehr in der Schleife stehen.
Einfach wie bei den Ressourcen schauen wieviel Zeit seit der letzten Aktuallisierung vergangen ist und diese dann mit der Produktion/Ausbildung aufrechnen. Du kannst wie bei den Ressourcen auch andere Ticks nehmen und z.B. Minuten anstatt Sekunden rechnen (was wiederum den Server schohnen würde)
gepostet vor 18 Jahre, 7 Monate von Kelturio
Aha, ok, aber folgende Frage habe ich da noch:
Der User soll ja in ein Eingabefeld schreiben wie viele Arbeiter er ausbilden möchte. Soll ich diese dann in ein DB Feld "Bauanzahl_Arbeiter" schreiben oder wie ?
Wenn der User jetzt schon Arbeiter baut und er klickt erneut auf ausbilden, wie kann ich dann neue Arbeiter der Liste hinzu fügen ?
Der User soll ja in ein Eingabefeld schreiben wie viele Arbeiter er ausbilden möchte. Soll ich diese dann in ein DB Feld "Bauanzahl_Arbeiter" schreiben oder wie ?
Wenn der User jetzt schon Arbeiter baut und er klickt erneut auf ausbilden, wie kann ich dann neue Arbeiter der Liste hinzu fügen ?
gepostet vor 18 Jahre, 7 Monate von Crasher
wir haben sowas auch und wir fügen für jede Einheit die er baut eine neu Zeile in die Tabelle ein. Die Tabelle besteht aus einheitenid, menge , Wo gebaut wird und Timestamp der fertigstellung. Dann schauen wir was fertig wird und fügen das dann ein (bei uns wird parallel gebaut).
Wenn er dann weiter einheiten ausbildet schreiben wir die einfach wieder als neuen eintrag in die Tabelle.
Wenn er dann weiter einheiten ausbildet schreiben wir die einfach wieder als neuen eintrag in die Tabelle.
gepostet vor 18 Jahre, 7 Monate von Kelturio
Sowas ähnliches hatte ich auch scho im Hinterkopf, aber wie genau müssen da die Tabellen verknüpft werden ?
Das ist z.b. die Tabelle "Einheitenbau", aber wenn nun User x 5 Arbeiter baut, dann werden dort 5 Zeilen erzeugt.
Aber was ist wenn jetzt User y 5 Einheiten bauen will ? Kommen die dann in die selbe Tabelle ? Woher weiß dann das Script, wie viele Einheiten jeder bauen wollte ?
Das ist z.b. die Tabelle "Einheitenbau", aber wenn nun User x 5 Arbeiter baut, dann werden dort 5 Zeilen erzeugt.
Aber was ist wenn jetzt User y 5 Einheiten bauen will ? Kommen die dann in die selbe Tabelle ? Woher weiß dann das Script, wie viele Einheiten jeder bauen wollte ?
gepostet vor 18 Jahre, 7 Monate von Crasher
Also bei uns sieht das so aus
Tabelle:
Koordinaten | Anzahl | Fertig | Einheit
In Koordinaten haben wir gespeichert wo die Einheiten hin sollen wenn sie fertig sind
Anzahl ist die Anzahl wieviel der User gebaut hat
Fertig ist der unix Timestamp wann die einheiten fertig werden
Einheit ist bei uns die Einheiten id mit nem extrawert ob es sich um ne waffe oder ne Einheit handelt.
Wenn jetzt user x einmal 5 Arbeiter baut muss er das irgendwo tun das kommt in Koordinaten
(die Koordinaten oder irgend eine Identifikation wo der User die Einheiten gebaut hat [bei uns sind es Häuser mit koordinaten (stadtkoordinate:ykoordinate)])
Die Anzahl ist 5 Fertig werden sie z.b 3600 selunden + aktuellen timestamp und es ist z.B Einheit 1.
Wenn er jetzt wieder 5 Arbeiter baut kommt wieder ein Eintrag in die Tabelle mit einem anderen Timestamp oder anderen Koordinaten.
Wenn jetzt User y Auch 5 Arbeiter baut ändern sich die Koordinaten weil ein Haus nur einem User gehören kann.
Dann musst du nurnoch abfragen welche Einheiten fertig sind und die den Koordinaten zuordnen
Hoffe das war jetzt verständlich *g*
Crasher
Tabelle:
Koordinaten | Anzahl | Fertig | Einheit
In Koordinaten haben wir gespeichert wo die Einheiten hin sollen wenn sie fertig sind
Anzahl ist die Anzahl wieviel der User gebaut hat
Fertig ist der unix Timestamp wann die einheiten fertig werden
Einheit ist bei uns die Einheiten id mit nem extrawert ob es sich um ne waffe oder ne Einheit handelt.
Wenn jetzt user x einmal 5 Arbeiter baut muss er das irgendwo tun das kommt in Koordinaten
(die Koordinaten oder irgend eine Identifikation wo der User die Einheiten gebaut hat [bei uns sind es Häuser mit koordinaten (stadtkoordinate:ykoordinate)])
Die Anzahl ist 5 Fertig werden sie z.b 3600 selunden + aktuellen timestamp und es ist z.B Einheit 1.
Wenn er jetzt wieder 5 Arbeiter baut kommt wieder ein Eintrag in die Tabelle mit einem anderen Timestamp oder anderen Koordinaten.
Wenn jetzt User y Auch 5 Arbeiter baut ändern sich die Koordinaten weil ein Haus nur einem User gehören kann.
Dann musst du nurnoch abfragen welche Einheiten fertig sind und die den Koordinaten zuordnen
Hoffe das war jetzt verständlich *g*
Crasher
gepostet vor 18 Jahre, 7 Monate von Kelturio
Ahhh ... jetzt ist mir alles klar. Vielen Dank.
Also auf ans fröhliche proggen.
Also auf ans fröhliche proggen.
gepostet vor 18 Jahre, 7 Monate von abuzeus
Eine andere Lösungsmöglichkeit, wenn man Serverzugriff hat und dort eigene Programme laufen lassen kann (scheint ja offenbar nicht immer der Fall zu sein), ist ein Programm, welches immer läuft, einen sog. Daemon zu programmieren. (Dafür greift man übrigens normalerweise nicht zu php) Dieser Daemon verwaltet nun eine Liste von Ereignissen, zB. die Bauschlange und immer, wenn ein Auftrag fertig ist, veranlasst er die nötigen Änderungen in der Datenbank und stösst gleichzeitig den nächsten Bau(das nächste Ereignis an. Damit kann man auf das nervige "wann war denn die eltzte Aktualisierung" Geteste im PhP verzichten und sich dort mehr der Ausgabe der Seite widmen. Entkoppelung von Problemen... ;-)