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.
#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;
}
Alles anzeigen