camera position

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
  • 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;
    }

    Einmal editiert, zuletzt von Simon ()

  • man ist schwer verletzt und stirbt nach einiger zeit. wenn man nun gestorben ist, wird der spieler unter die map geportet das man ihn nicht sieht. nun was ich möchte:
    man soll vom himmel auf die anderen hinabgucken. ich werde zur not gleich mal ein screen posten. die camera position muss so eingestellt werden, als wäre man in einem flugzeug und man würde nach unten auf den boden gucken.

  • ja :D das weiß ich, nur ich kenne mich da nicht so mit den camera koordinaten aus, wie müssten sie aussehen? also ich habe ja die spieler position:

    Spieler[playerid][posx]
    Spieler[playerid][posy]
    Spieler[playerid][posz]


    und daraus nun so die camera einstellen das man vom himmel aus alle beobachten kann :D

  • ähm ja man stirbt und sieht den bereich wo man gestorben ist von oben


    //edit: hier mal ein bild was zeigt wie e aussehen soll, das ganze ohne den skin, der wird unter die erde geportet, was auch klappt..


    Einmal editiert, zuletzt von Simon ()

  • Hi


    Lol, klar geht das xD


    Wenn er stirbt posi abfragen, dann einfach den PLAYER! iwo hinporten, dann musst du mit den Camerafunktionen arbeiten. Also so:


    SetPlayerCameraPos(playerid, PlayerX, PlayerY, PlayerX+höhe);
    SetPlayerCameraLookAt(playerid, PlayerX, PlayerY, PlayerX);


    Für die Höhe dann einfach ne Zahl einsetzen, jenachdem wie hoch die Kamera sein soll^^


    MFG, Robdeflop®

  • ouh mann -.-


    das ist soo logisch :D die camra wird hoch gesetzt und schaut auf den spieler -.-


    da hätte wirklich jeder drauf kommen könne, danke werde es gleich einbauen..


    //edit: wunderbar es klappt, eine kurze frage noch, und zwar bugt die animation, kann gut daran liegen das ich die parameter falsch gesetzt habe.. also die animation wird gestartet und wenn man dann engültig stirbt gestoppt und man wird weggeportet und die camera sicht wird eingestellt. nur ab und zu startet die animation nicht.. keine ahnung wieso..


    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); //hier die animation
    }
    return 1;
    }


    Einmal editiert, zuletzt von Simon ()

  • do.de - Domain-Offensive - Domains für alle und zu super Preisen