Guten Tag. Ich bräuchte mal eure hilfe bei einer kleinen sache. Undzwar:
Wenn man stirbt, wird man gefreezed und man macht eine Animation(schwerverletzt) die man nicht beenden kann.gleichzeitig läuft ein timer von 3 Minuten. Wenn dieser Timer abläuft wird man unter den boden geportet und ebenfall gefreezed. nun ist man unterm boden und wartet bis der nächste timer abläuft, damit man wieder gespawnt wird.
während man unterm boden ist, soll es aussehen, als würde man vom himmel auf die anderen hinabblicken.dazu muss ich die Camera Postion ändern, weiß aber nicht welche genau und wie die koordinaten wären.In der .ini wird die letzte position abgespeichert und ob er verletzt bzw. tot war, d.h. sobald er relog macht, um das zu umgehen wird alles gespeichert und beim einloggen wird er an der selben stelle gefreezed und die zeit läuft erneut ab. die position wird auch gespeichert sobald er stirbt, damit er zu dieser position wieder zurückgeportet wird.
hier das script:
enum Sinfo
{
Float:posx,
Float:posy,
Float:posz,
Verletzt,
Tot
}
new Spieler[MAX_PLAYERS][Sinfo];
public OnPlayerDeath(playerid, killerid, reason)
{
GetPlayerPos(playerid,Spieler[playerid][posx],Spieler[playerid][posy],Spieler[playerid][posz]);
Spieler[playerid][Verletzt] = 1;
Update(playerid);
return 1;
}
public OnPlayerSpawn(playerid)
{
if(Spieler[playerid][Verletzt] == 1)
{
SetPlayerPos(playerid,Spieler[playerid][posx],Spieler[playerid][posy],Spieler[playerid][posz]);
TogglePlayerControllable(playerid,0);
todtimer1[playerid] = SetTimerEx("tot1",180000,0,"i",playerid);
ApplyAnimation(playerid,"CRACK","crckdeth2",3.0,1,1,1,1,0);
}
if(Spieler[playerid][Tot] == 1) //wird nur gebraucht falls er relogg macht, er spawnt und weil er vor dem disconnecten tot war, wird er wieder hingeportet und das selbe spiel von vorn
{
SetPlayerPos(playerid,Spieler[playerid][posx],Spieler[playerid][posy],Spieler[playerid][posz]-50);
SendClientMessage(playerid,0xFF0000FF,"Der Medic war zu langsam, du bist gestorben!");
todtimer2[playerid] = SetTimerEx("tot2",90000,0,"i",playerid);
ClearAnimations(playerid);
Spieler[playerid][Verletzt] = 0;
Spieler[playerid][Tot] = 1;
}
Update(playerid);
return 1;
}
public tot1(playerid)
{
SetPlayerPos(playerid,Spieler[playerid][posx],Spieler[playerid][posy],Spieler[playerid][posz]-50);
SendClientMessage(playerid,0xFF0000FF,"Der Medic war zu langsam, du bist gestorben!");
todtimer2[playerid] = SetTimerEx("tot2",90000,0,"i",playerid);
ClearAnimations(playerid);
Spieler[playerid][Verletzt] = 0;
Spieler[playerid][Tot] = 1;
return 1;
}
public tot2(playerid)
{
Spieler[playerid][Tot] = 0;
TogglePlayerControllable(playerid,0);
SpawnPlayer(playerid);
return 1;
}
public OnPlayerDisconnect(playerid, reason)
{
GetPlayerPos(playerid,Spieler[playerid][posx],Spieler[playerid][posy],Spieler[playerid][posz]);
Update(playerid);
return 1;
}
public Update(playerid)
{
new Spielerdatei[256];
new SpielerName[MAX_PLAYER_NAME];
GetPlayerName(playerid,SpielerName,sizeof(SpielerName));
format(Spielerdatei,sizeof(Spielerdatei),"/User/%s.ini",SpielerName);
dini_FloatSet(Spielerdatei,"posx",Spieler[playerid][posx]);
dini_FloatSet(Spielerdatei,"posy",Spieler[playerid][posy]);
dini_FloatSet(Spielerdatei,"posz",Spieler[playerid][posz]);
dini_IntSet(Spielerdatei,"Verletzt",Spieler[playerid][Verletzt]);
dini_IntSet(Spielerdatei,"Tot",Spieler[playerid][Tot]);
return 1;
}