Real Time Countdown setzen

  • Allgemein

Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

  • Real Time Countdown setzen

    Moin Leute,

    ich suche schon ne ganze weil nach einer Möglichkeit einen typischen Countdown zu setzen welcher auch abläuft wenn das Spiel geschlossen ist. Wenn man z.B. ein PowerUp auslöst und dieser sehr mächtig ist soll es einen Cooldown geben von sagen wir 30 Minuten. Das was da passieren müsste wäre ja eigentlich:

    - beim Auslösen Systemzeit lesen + 30 Minuten in ini Datei speichern
    - Abfrage für Countdown Systemzeit lesen und Cooldown aus ini Datei lesen, Subtraktion und -=1/room_speed
    - Abfrage wenn Systemzeit höher wie Cooldown aus ini Datei ist, dann Freigabe für erneutes auslösen des PowerUps

    Ich weiß nicht ob das die Variante ist die am meinsten Sinn macht. Weil das Probelm kommt ab 23:31 Uhr. 30 Minuten später ist es 0:01 Uhr. Selbst wenn man das mit dem Datum macht, woher soll er wissen das nach dem 31.7 der 1.8 später ist. z.B. 31+7 = 38 aber 1+8 = 9. Also nicht höher. Funktioniert nicht.

    Lässt man eine Variable städing hochzählen sobald die Zeit wieder niedriger ist, als beim letzten spielen? Selbst wenn das der richtige Weg wäre - wüsste ich nicht wie ich das Programmieren müsste. Vielleicht hat ja jemand ne simplere Idee und kann mir dabei helfen. Das wäre super nett.

    Beste Grüße
    Adrian
  • So ich habe mich mal versucht und habe es geschafft und musste feststellen, dass der Game Maker sehr gut zwei Datums miteinander vergleichen kann.

    Dann bin ich gleich noch ein Schritt weitergegangen und habe es auf die Anzahl der Leben angewandt. Bedeutet, sobald man ein Leben verliert, beginnt ein Countdown runter zu laufen. In meinen Fall bekommt man nach 15 Minuten ein Leben zurück. Die Schwierigkeit dabei ist den Countdown nur einmal starten zu lassen UND egal ob das Spiel läuft oder nicht 15 Minuten später hat man ein Leben zurück.

    Beispiel: Man verliert ein Leben, 7 Minuten später wieder eins. Der Countdown hat schon 8 Minuten runtergezählt, wäre ja blöd wenn der jetzt wieder auf 15 Minuten springt.

    Deshalb habe ich das ganze so gelöst. Es wird einmal das Datum und die Uhrzeit gespeichert, nämlich genau dann wenn man sein ersten Leben verliert von 5 auf 4.

    Das übernimmt bei mir der Game_Controller. Stirbt der Spieler passiert Folgendes:

    GML-Quellcode

    1. /// Leben
    2. lives -= 1;
    3. ini_open(INIMain);
    4. ini_write_real('Lives','Lives', lives);
    5. ini_close();
    6. setyear = date_get_year(date_current_datetime());
    7. setmonth = date_get_month(date_current_datetime());
    8. setday = date_get_day(date_current_datetime());
    9. sethour = date_get_hour(date_current_datetime());
    10. setminute = date_get_minute(date_current_datetime());
    11. setsecond = date_get_second(date_current_datetime());
    12. if lives = 4 {
    13. ini_open(INIMain);
    14. // Schreibe aktuelle Zeit
    15. ini_write_real('Set_Date','Year', setyear);
    16. ini_write_real('Set_Date','Month', setmonth);
    17. ini_write_real('Set_Date','Day', setday);
    18. ini_write_real('Set_Date','Hour', sethour);
    19. ini_write_real('Set_Date','Minute', setminute);
    20. ini_write_real('Set_Date','Second', setsecond);
    21. ini_close();
    22. }
    Alles anzeigen


    Datum und Uhrzeit sind einzeln gespeichert und können abgerufen werden. Weiter geht’s...

    Das Management der Leben übernimmt bei mir der Live_Controller und dieser sitzt bei mir mit „Presistent“ im gesamten Menübereich.

    Create Event:

    GML-Quellcode

    1. ini_open(INIMain);
    2. lives = ini_read_real('Lives','Lives', 0);
    3. multiplikator = ini_read_real('Multi','Multi', 0);
    4. ini_close();
    5. time_to_get = -15 * multiplikator;


    Der "multiplikator" wird bei mir wenn kein Eintrag in der INI vorhanden ist auf 1 gestellt, das ist Wichtig.
    Folgendes kann auch ins Create Event oder nur in ein Alarm Event. Je Häufiger es abgerufen desto genauer ist die Rückgabe es Lebens.

    GML-Quellcode

    1. ini_open(INIMain);
    2. // Lese geschriebene Zeit
    3. year5 = ini_read_real('Set_Date','Year', 1970);
    4. month5 = ini_read_real('Set_Date','Month', 1);
    5. day5 = ini_read_real('Set_Date','Day', 1);
    6. hour5 = ini_read_real('Set_Date','Hour', 0);
    7. minute5 = ini_read_real('Set_Date','Minute', 0);
    8. second5 = ini_read_real('Set_Date','Second', 0);
    9. ini_close();
    10. // Vergleiche geschriebene Zeit mit aktueller Zeit
    11. live_diff = date_compare_datetime(date_create_datetime( year5, month5, day5, hour5, minute5, second5 ), date_current_datetime());
    12. minute_diff = date_minute_span(date_create_datetime( year5, month5, day5, hour5, minute5, second5 ), date_current_datetime());
    13. // Rechne die Differenz aus
    14. get_live = live_diff*minute_diff;
    15. if lives < 5 {
    16. // Gebe Leben
    17. if get_live < time_to_get {
    18. lives +=1
    19. ini_open(INIMain);
    20. ini_write_real('Lives','Lives', lives);
    21. ini_read_real('Lives','Lives', lives);
    22. multiplikator += 1;
    23. ini_write_real('Multi','Multi', multiplikator);
    24. ini_close();
    25. }
    26. }
    27. if (lives = 5) {
    28. multiplikator = 1;
    29. ini_open(INIMain);
    30. ini_write_real('Multi','Multi', multiplikator);
    31. multiplikator = ini_read_real('Multi','Multi', 0);
    32. ini_close();
    33. }
    Alles anzeigen


    Der Muliplikator ist der Wert der aus den 15 Minuten 30 Minuten dann 45 Minuten macht usw. Bis man wieder 5 Leben hat - dann stellt er sich wieder zurück auf 1. Verliert man nun sein ersten Leben (von 5 auf 4) steht der Multiplikator auf 1. 15*1=15 - verliert man jetzt noch ein Leben geht er auf 2 also - 15*2=30. So ist sichergestellt das die Leben nacheinander wieder aufgeladen werden und zwar alle 15 Minuten eins. Das ist die Lösung für die ich drei Tage gebraucht habe, das ist echt ganz schön kompliziert. Die ersten Versuche kamen zu keinen geschlossenen System. Entweder hat man keine weiteren Leben bekommen sobald man das Spiel verlassen hat, immer nur eins halt. Oder man bekam das letzte Leben nicht mehr weil 5 Countdowns gesetzt waren. Nun ja es scheint zu funktionieren. :D

    Vielleicht braucht ja mal was ähnliches dann hilft das hier vielleicht ja.

    Bis dann!

    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von AdrianB ()

  • Schön, dass du es geschafft hast :)

    Aber ich möchte dich auf folgendes trotzdem nochmal hinweisen:
    Man kann die Zeit einmal über die Ini Datei und einmal über die Systemeinstellungen der Zeit manipulieren, so dass man keine 15 Min, sondern 0 Min warten muss.

    Zack +1 Leben, Zeit zurückgestellt und weiter gehts.

    Am sichersten ist es die Zeit in einer Datenbank zu speichern und komplett auf die Ini Einträge zu verzichten - aber für ein kleines Spiel lohnt sich das natürlich nicht. Und eine Datenbank bringt den Nachteil der benötigten Internetverbindung mit sich.

    Wollte dich da nur drauf hinweisen, bevor du diesbezüglich noch Probleme beim Release bekommen solltest :)

    Gruß
    Killian
  • Ich hasse es wenn meine Nachrichten beim Absenden einfach verschwinden... :D

    Also nochmal:
    Das ist richtig, dass sich die Zeit manipulieren lässt. Allerdings wirst du das Problem meines Erachtens nur mit einem eigenen Zeit-Server lösen können.. Und ob sich das mit GameMaker vernünftig umsetzen lässt bezweifel ich. Aber selbst Spiele wie Candy Crush lassen sich auf diese Weise manipulieren.
    Wenn du aber die Zeit abspeicherst, zu der ein Leben aufgefüllt wird, dann verschiebt sich der Auffüllzeitpunkt immer weiter nach hinten.
    Also: Zeit vorstellen -> +1 Leben (nächstes Leben in 15 Min) -> Zeit zurück stellen -> nächstes Leben in 30 Min.
    Somit kann man den Cheater zumindest ein bisschen nerven. Klar kann man dann eben 30 Min vorstellen, aber irgendwann verliert man den Überblick wie weit man die Systemzeit vorstellen muss um wieder genügend Leben zu erhalten.
  • Das mit der Manipulation der Systemzeit ist leider wahr. Das übers Internet laufen zu lassen ist mir eine Nummer zu hoch. Sollte man alle Leben verloren haben, kann man sich auch neue gegen Token kaufen – diese droppen zufällig (1zu4) beim killen der Monstern. Die Token sind also nicht wirklich so viel Wert wie z.B. Goldbarren bei Candy Crush oder so. Man bekommt ständig welche. Muss aber Haushalten.

    Übrigens ein netter Nebeneffekt ist – startet man das Spiel nachdem alle oder einige Leben verloren hat und genug Zeit vergangen ist, werden die Leben im Hauptmenü im Sekundentakt (Alarm auf 30) hochgezählt wieder. Das habe ich mit einem positiven Sound untermalt – das hat was. Wenn noch jemand den Code benötigt um den Countdown anzeigen zu lassen, poste ich diesen gerne. Hier im Screenshot sieht man oben die 15 für die 15 Minuten halt. Verliert man jetzt noch ein Leben springt der Countdown auch ein „Feld“ weiter nach links.



    Ursprünglich wollte ich auch im Hauptmenü einen Counter haben der wirklich jedes gekillte Monster hoch zählt – von allen Spielern. Einen Server habe ich – jedoch von diesen ganzen Datenbanken und Web-Anwendungen keinen Plan. Auch raffe ich noch dieses async Zeugs vom Game Maker nicht. Wenn jemand so was aus dem Ärmel schütteln kann wäre das mega klasse.
  • Ersteinmal:
    Nettes Bildchen, das hat was :D (Würde es gerne mal anzocken, enn es fertig ist.)

    Das Datenbankgedödel kann ich mit dir bei Gelegenheit mal besprechen. Ich habe leider wenig Zeit, aber das kriegt man zwischendurch bestimmt hin. Aber sollte sich dann wie gesagt auch für das Spiel lohnen. Sonst bringt der ganze Aufwand nix, da macht man dann aus na Mücke nen Elefanten :D

    Das einzige was du benötigst ist eine MySQL Datenbank - am besten mit Navicat. Das Script inkl. UTF-8 Kodierung habe ich noch von meiner aktuellen App für mein Betrieb vorrätig. Das sollte kein Problem sein.

    Grüße
    Killian
  • Ohje... sag mal, warum machen wir jungen neuen Entwickler es nicht besser als die alten? Wir sollte mit guten Ideen und Fortschritt glänzen. Wenn mich ein Spiel 15 Minuten warten lässt um weiterzukommen, oder ich kann mir auch ein leben kaufen, werde ich mir kein Leben kaufen und auch keine 15 Minuten warten. Entweder ich manipuliere die Zeit wie oben angesprochen, oder ich deinstalliere es einfach.
    Was bringt es Designphilosophisch oder gameplaytechnisch so ein Hindernis einzubauen? Es ärgert, nur den User und bestraft ihn unverhältnismäßig für seine Fehler ohne das er sofort daraus lernen kann und sich verbessern kann. Denn dafür muss er warten oder zahlen.

    Mach doch lieber das Spiel kostenpflichtig mit unbegrenzten Respawns.

    ancient-pixel.com
    youtube.com/user/SebastianMerkl <<< ich freu mich über einen Besuch ;)
  • @icqgamer Wenn du weißt wie sowas funktioniert und Zeit hast, wäre das echt super. Falls du mal Zeit hast, kannst du mich gerne anschreiben. Danke dir! :)

    @Aku_Ryou Auf der einen Seite verstehe ich was du meinst - diese typischen Free2Play ob bei Google oder Apple sind wirklich wahnsinnige Abzocke - sobald man es übertreibt oder sich drauf einlässt. Jedem das Seine. In einem TV-Bericht hieß es vor einiger Zeit, dass King alleine mit Candy Crush 1 Mio Doller in den USA am Tag mit IAP macht. Das ist mega krass. Ich weiß zwar nicht was das mit jungen und alten Entwicklern zu tun hat, das ist einfach eine Art den Spannungsbogen zu erhöhen und kein Hindernis. Wenn du tatsächlich nur mit Geld deine Leben kaufen kannst, dann ist das Abzocke oder halt normal bei F2P. Wenn man ein Gratis Game holt – was erwartet man? Irgendwie müssen die Entwickler ja ihre Brötchen verdienen. Man kann ja selber entscheiden ob man es spielt oder nicht.

    In meinem Fall kannst du die eingesammelten Token verwenden und das sind nicht wenige. Dabei kannst du entscheiden ob du sie nun dafür ausgibst oder nicht - ähnlich ist es bei den Upgrades. Muss man die auch gleich sofort und immer haben? Es ist ein Element was man sich erspielen kann und sollte.

    Und leider....
    … wenn man sich die Statistiken anschaut was wie geladen wird im mobilen Bereich - dann sieht man das es die F2P Games ganz drastisch vorne liegen. Die Leute zahlen heute nicht mal 89 Cent für ein Spiel (ne Cola ist teurer), nur noch Gratis Gratis Gratis das ist der Wahnsinn. Also übertrieben gesagt, das trifft natürlich nicht auf alle zu. Ich persönlich gehöre auch nicht dazu. Gerne schaue ich mir mal das Geld-Model dahinter an aber das wars dann auch. Gelöscht! Ich zahle lieber ein zwei oder mehr Euro für ein Spiel und kann es fair benutzen. Doch selbst bei Angry Birds kann man für irgendwas Geld ausgeben – obwohl man das Spiel schon bezahlt hat. Na ja – es sind und bleiben Geldmaschinen diese bekannten Apps und so lange die Leute dafür Geld ausgeben wird es sie auch geben. Ich schweife ab.

    Aber wie gesagt - das ist bei Monster Slam nicht der Fall - du bekommst genug Token. Wenn man halt ungeschickt ist braucht man halt länger um die Upgrades freizuschalten oder die nächsten Welten. Der Token wird dadurch für den Spieler wertvoller und die Risikobereitschaft noch mal schnell runter zu springen von der Platform um den Token zu bekommen steigt einfach. Und ob man wirklich mal die Token gegen Geld kaufen kann - weiß ich noch nicht. Derzeit ist keine Funktion oder ein Button dafür vorgesehen. Ein Experiment wäre es aber wert. Aber ich verstehe deine Meinung - das ist halt immer eine Auslegungssache. Das Spiel ist zur Zeit kostenpflichtig mit unbegrenzten Leben.

    Ich suche nach Möglichkeiten mehr Spannung einzubauen und mehr Möglichkeiten das Spielgeschehen vom Spieler entscheiden zu lassen. Deswegen die Upgrades, Token, das Levelsystem usw. Im Survival Mode droppt auch zufällig ein Leben das man einsammeln kann - weil im Survival Mode kann man eigentlich die Arena nicht lebend verlassen - da geht es halt nur um den Highscore. Das wäre ja mies. Aber die Wahrscheinlichkeit das es nicht droppt bevor man stirbt ist natürlich da. Das Cheaten mit dem Verstellen der Uhrzeit ist ja auch noch vorhanden. :D

    Ist glaube das war jetzt fast zu 100% Off-Topic :whistling: Benutzt es oder halt nicht - wollte es der Community hier bereitstellen. Weil man findet da irgendwie keine Tutorials zu oder ich weiß einfach nicht wie man sowas nennt.
  • Mit dem aktuellen Update auf Version 1.3.1386 bekommt man bei iOS Devices einen Error. Das passiert wenn kein Datum gespeichert wurde, so wie beim absolut ersten Spielstart. Deshalb habe ich oben den Code geändert. GMS berücksichtigt jetzt das Datum 1.1.1970 (The Epoch). Wenn kein Wert vorhanden ist, ist es einfach der 1. Januar 1970. Alles davor wird nicht akzeptiert im Vergleich.