Fertig.
Mein Tutorial wird bei (Schritt-3) direkt abgeschlossen
- Oskar.Schindler
- Unerledigt
Dein Problem konnte durch einen User gelöst werden? Bedank dich bei ihm indem du seinen Beitrag als Hilfreich markierst sowie einen Daumen oben dalässt
Wichtiger Hinweis: Bitte ändert nicht manuell die Schriftfarbe auf schwarz sondern belasst es bei der Standardeinstellung. Somit tragt ihr dazu bei dass euer Text auch bei Verwendung unseren dunklen Forenstils noch lesbar ist!
Tipp: Ihr wollt längere Codeausschnitte oder Logfiles bereitstellen? Benutzt unseren eigenen PasteBin-Dienst Link
-
-
-
Es wäre hilfreich zu wissen, welches Verhalten du denn erwartest. Aus deinen Angaben kann man das Problem leider nicht rauslesen.
Meinst du eventuell, dass bei Schritt 3 nicht 10 Sekunden lang gewartet wird? Falls ja, kannst du das ganz einfach umsetzen, indem du den Code um einen "== 4"-Absatz erweiterst und den Spieler dann erst spawnst. SetTimerEx führt nämlich Code in X Millisekunden aus, pausiert bis dahin aber nicht.
Damit kannst du das Problem ganz einfach umgehen.
LG
-
Es wäre hilfreich zu wissen, welches Verhalten du denn erwartest. Aus deinen Angaben kann man das Problem leider nicht rauslesen.
Meinst du eventuell, dass bei Schritt 3 nicht 10 Sekunden lang gewartet wird? Falls ja, kannst du das ganz einfach umsetzen, indem du den Code um einen "== 4"-Absatz erweiterst und den Spieler dann erst spawnst. SetTimerEx führt nämlich Code in X Millisekunden aus, pausiert bis dahin aber nicht.
Damit kannst du das Problem ganz einfach umgehen.
LG
Mein Gott... Das man erst jemand anderes fragen muss bevor man den Fehler selbst sieht ist schon ein bisschen peinlich...
Also es funktioniert jetzt ohne Probleme
Ich danke dir vielmals!
Mit freundlichen Grüßen
Oskar.Schindler
-
Es gibt immer solche Situationen in denen man den Wald vor lauter Bäumen nicht sieht.
Das wichtigste ist jedoch, dass du mit etwas Hilfe dein Problem selbst lösen konntest und das ist doch deutlich positiver als so ein kleines Upsi.
-
Ich würde dir empfehlen den Code etwas zu refactoren.
Dadurch wird er weniger Fehleranfällig, da alles separiert und getrennt von der eigentlichen Logik ist.
Hier mal als kleine Inspiration:
C++
Alles anzeigen#include <tutorial> //Unterhalb new PlayerInfo iwo setzen ;) public OnPlayerSpawn(playerid) { if(!PlayerInfo[playerid][pTutorial]) return StartPlayerTutorial(playerid);//pTutorial sollte ein Bool sein SetCameraBehindPlayer(playerid); //Kannst du generell immer hier reinpacken, wenn du das magst :D return 1; //Immer 1 zurückgeben, sonst werden Filterscripts ignoriert (brauchst hier kein SetPlayerSpawn, nutz einfach hier die Funktion) } // In tutorial.inc static stock const CAMERA_TIME = 10_000; //in ms (_ kann als Trenner gesetzt wird, wird vom Compiler ignoriert) stock StartPlayerTutorial(playerid) { SetTimerEx(!"Player_Tutorial", CAMERA_TIME, false, !"ii", playerid, 1); SendClientMessage(playerid, COLOR_ORANGE, !"Das Tutorial startet in 10 Sekunden."); //Das ! vor Strings packt diese, macht diese kleiner und schneller. (nicht bei format anwenden) return 1; } stock EndPlayerTutorial(playerid) { PlayerInfo[playerid][pNeuling] = 1; PlayerInfo[playerid][pTutorial] = 1; Player_Save(playerid); SendClientMessage(playerid, COLOR_GREEN, !"Du hast das Tutorial erfolgreich abgeschlossen."); TogglePlayerSpectating(playerid,0); //Spawnt den Spieler automatisch return 1; } static forward Player_Tutorial(playerid, step); public Player_Tutorial(playerid, step) { switch(step) { case 1: { InterpolateCameraPos(playerid, -2264.149169, -79.553237, 54.108608, -2258.836914, -133.797988, 38.133533, CAMERA_TIME); InterpolateCameraLookAt(playerid, -2269.145263, -79.574234, 53.913345, -2263.404052, -131.805282, 37.719944, CAMERA_TIME); SendClientMessage(playerid, COLOR_YELLOW, !"Der Neulingsspawn"); } case 2: { InterpolateCameraPos(playerid, -2559.761230, 657.360534, 54.506183, -2606.139892, 570.644104, 27.216636, CAMERA_TIME); InterpolateCameraLookAt(playerid, -2564.715087, 657.393859, 55.183780, -2609.537841, 574.257385, 26.585512, CAMERA_TIME); SendClientMessage(playerid, COLOR_YELLOW, !"Das Krankenhaus"); } case 3: { InterpolateCameraPos(playerid, -2731.381347, 52.292167, 44.589134, -2696.582275, -60.425365, 6.027071, CAMERA_TIME); InterpolateCameraLookAt(playerid, -2727.718750, 49.573192, 42.541774, -2693.474609, -56.652973, 7.081593, CAMERA_TIME); SendClientMessage(playerid, COLOR_YELLOW, !"Das Rathaus"); } case 4: return EndPlayerTutorial(playerid); } SetTimerEx(!"Player_Tutorial", CAMERA_TIME, false, !"ii", playerid, step+1); return 1; }
Dann lenkt das nicht so im eigentlichen Gamemode ab
-
Ich würde dir empfehlen den Code etwas zu refactoren.
Dadurch wird er weniger Fehleranfällig, da alles separiert und getrennt von der eigentlichen Logik ist.
Hier mal als kleine Inspiration:
C++
Alles anzeigen#include <tutorial> //Unterhalb new PlayerInfo iwo setzen ;) public OnPlayerSpawn(playerid) { if(!PlayerInfo[playerid][pTutorial]) return StartPlayerTutorial(playerid);//pTutorial sollte ein Bool sein SetCameraBehindPlayer(playerid); //Kannst du generell immer hier reinpacken, wenn du das magst :D return 1; //Immer 1 zurückgeben, sonst werden Filterscripts ignoriert (brauchst hier kein SetPlayerSpawn, nutz einfach hier die Funktion) } // In tutorial.inc static stock const CAMERA_TIME = 10_000; //in ms (_ kann als Trenner gesetzt wird, wird vom Compiler ignoriert) stock StartPlayerTutorial(playerid) { SetTimerEx(!"Player_Tutorial", CAMERA_TIME, false, !"ii", playerid, 1); SendClientMessage(playerid, COLOR_ORANGE, !"Das Tutorial startet in 10 Sekunden."); //Das ! vor Strings packt diese, macht diese kleiner und schneller. (nicht bei format anwenden) return 1; } stock EndPlayerTutorial(playerid) { PlayerInfo[playerid][pNeuling] = 1; PlayerInfo[playerid][pTutorial] = 1; Player_Save(playerid); SendClientMessage(playerid, COLOR_GREEN, !"Du hast das Tutorial erfolgreich abgeschlossen."); TogglePlayerSpectating(playerid,0); //Spawnt den Spieler automatisch return 1; } static forward Player_Tutorial(playerid, step); public Player_Tutorial(playerid, step) { switch(step) { case 1: { InterpolateCameraPos(playerid, -2264.149169, -79.553237, 54.108608, -2258.836914, -133.797988, 38.133533, CAMERA_TIME); InterpolateCameraLookAt(playerid, -2269.145263, -79.574234, 53.913345, -2263.404052, -131.805282, 37.719944, CAMERA_TIME); SendClientMessage(playerid, COLOR_YELLOW, !"Der Neulingsspawn"); } case 2: { InterpolateCameraPos(playerid, -2559.761230, 657.360534, 54.506183, -2606.139892, 570.644104, 27.216636, CAMERA_TIME); InterpolateCameraLookAt(playerid, -2564.715087, 657.393859, 55.183780, -2609.537841, 574.257385, 26.585512, CAMERA_TIME); SendClientMessage(playerid, COLOR_YELLOW, !"Das Krankenhaus"); } case 3: { InterpolateCameraPos(playerid, -2731.381347, 52.292167, 44.589134, -2696.582275, -60.425365, 6.027071, CAMERA_TIME); InterpolateCameraLookAt(playerid, -2727.718750, 49.573192, 42.541774, -2693.474609, -56.652973, 7.081593, CAMERA_TIME); SendClientMessage(playerid, COLOR_YELLOW, !"Das Rathaus"); } case 4: return EndPlayerTutorial(playerid); } SetTimerEx(!"Player_Tutorial", CAMERA_TIME, false, !"ii", playerid, step+1); return 1; }
Dann lenkt das nicht so im eigentlichen Gamemode ab
Wow heftig :O Ich werde das definitiv verwenden bzw anpassen, danke euch 2!
Da hast du dir aber echt Mühe gemacht.
Mit freundlichen Grüßen
Oskar.Schindler