Skinauswahl und die Kamera 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
  • Aloha,
    Hier seit langer Zeit ein weiteres Tutorial von mir, es geht umd die KameraPosition bei der Skinauswahl,
    In diesem Tutorial erkläre ich euch was die einzelnen Codeteile machen und wie man sie verändern kann!


    Grundlegendes
    Als einfachstes und Grundsätzlichstes beispiel für die Anwendung von SetPlayerCameraLookAt und SetPlayerCameraPos ist die Skinauswahl.
    In einem leeren Gamemode (new.pwn) Sind die wiefolgt:

    public OnPlayerRequestClass(playerid, classid)
    {
    SetPlayerPos(playerid, 1958.3783, 1343.1572, 15.3746);
    SetPlayerCameraPos(playerid, 1958.3783, 1343.1572, 15.3746);
    SetPlayerCameraLookAt(playerid, 1958.3783, 1343.1572, 15.3746);
    return 1;
    }

    Zunächstmal wird das public OnPlayerRequestClass aufgerufen wenn der Spieler in die Skinauswahl kommt, daraufhin laufen die einzelnen Teile von oben nach unten ab.
    SetPlayerPos(playerid, X, Y, Z); | Setzt die Figur des Spielers an einen Punkt der durch die 3 Koordinaten bestimmt ist.
    SetPlayerCameraPos(playerid, X, Y,Z); | Setzt die Kamera Position an einen Punkt der ebenfalls durch die 3 Koordinaten bestimmt wird.
    SetPlayerCameraLookAt(playerid, X, Y, Z,); | Setzt den Punkt zumdem die Kamera blicken soll, auch hier mit den 3 Koordinaten.


    Soweit ist das nochnicht ganz verständlich, aber dazu kommen wir ja nun, standart, wie oben im Code zu sehen, würde die Skinauswahl so aussehen:


    Nicht schön, man sieht auch keine Skins, somit kann man das nicht als Skinauswahl benutzen, aber das ändern wir jetzt!


    Wie erstelle ich eine neue Skinauswahl Ansicht?
    Zunächst suchen wir mal einen einfachen Ort, wie wärs mit dem hier?


    Nun , erinnern wir uns, brauchen wir 3 mal 3 Koordinaten.
    Fangen wir mal mit der ersten an, das war SetPlayerPos.
    Wie erwähnt setzt man damit die Spielerposition fest, stellen wir unseren mal einfach hier in die Mitte mit Blickrichtung nach dort oben.
    Diese Position speichern wir mit dem Befehl /save [Kommentar]
    Hinweis: Das Kommentar ist dabei Optional und muss nicht gemacht werden, der übersichthalber solltet ihr es aber trotzdem benutzen, ihr seht gleich warum ;)
    Achtung: Der Befehl /save ist in SA-MP verbaut, ihr müsst ihn nicht scripten


    Nun haben wir die Spielerposition gespeichert, jetzt gehen wir zum nächsten, das war SetPlayerCameraPos
    Hm da wir unseren Skin ja voll im Bild haben wollen, stellen wir die Kamera doch am besten hier oben hin :D
    Und wieder speichern wir mit dem /save Befehl.


    Und zum Schluss die dritte und letzte Position, SetPlayerCameraLookAt!
    Sie bestimmt den Punkt zudem die Kamera schauen soll, da wir unseren Skin sehen wollen setzen wir den Punkt am besten wohin?
    Hinter den Spieler, sodass der voll im Bild ist, das wäre hier bei uns, sagen wir hier:


    Wunderbar! Nun haben wir alle 3 Koordinaten, doch was haben wir jetzt eigentlich gespeichert?
    Fassen wir die Punkte nochmal zusammen um einen Überlick zu gewinnen :D


    Die Kamera schaut also von oben auf den Punkt dort unten. Sich das vorzustellen ist vllt schwer, aber der Screen am ende wird es euch verdeutlichen!


    Einfügen der neuen Koordinaten
    Jetzt geht es an den Code :D Doch moment wo finden wir unsere Positionen?
    Sie liegen je nach Betriebsystem unter Eigene Dateien oder Dokumente > GTA San Andreas User Files > SAMP > savedpositions.txt
    Nun sehen wir warum ihr kommentare benutzen solltet, oder hättet ihr sagen können was nun was ist? ;)


    Nunentnehmen wir den Code, fangen wir bei SetPlayerPos an, was brauchen wir?
    SetPlayerPos(playerid, X, Y, Z);
    und was haben wir ?
    AddPlayerClass(287,-1946.2579,487.7636,31.9688,87.9005,0,0,0,0,0,0); // SpielerPosition
    Hm das sind viele Zahlen, welche nehmen wir da? Fragen wir die allwissende Wiki :D


    Aha! Also nehmen wir für SetPlayerPos diese hier:
    AddPlayerClass(287,-1946.2579,487.7636,31.9688,87.9005,0,0,0,0,0,0); // SpielerPosition


    Da wir bei den anderen beiden auch nur die X Y Z Koordinaten brauchen können wir diese auch aus den jeweilgen Save Zeilen rauskopieren!
    Nun einfach alle der reihe nach einsetzen!
    Aus:
    AddPlayerClass(287,-1946.2579,487.7636,31.9688,87.9005,0,0,0,0,0,0); // SpielerPosition
    AddPlayerClass(287,-1961.7993,486.6956,35.1719,269.2988,0,0,0,0,0,0); // KameraPosition
    AddPlayerClass(287,-1936.5033,487.7016,31.9688,90.4072,0,0,0,0,0,0); // KameraAnschauPunkt
    Wird:
    -1946.2579,487.7636,31.9688
    -1961.7993,486.6956,35.1719
    -1936.5033,487.7016,31.9688
    Und eingesetzt:
    public OnPlayerRequestClass(playerid, classid)
    {
    SetPlayerPos(playerid, -1946.2579,487.7636,31.9688);
    SetPlayerCameraPos(playerid, -1961.7993,486.6956,35.1719);
    SetPlayerCameraLookAt(playerid, -1936.5033,487.7016,31.9688);
    return 1;
    }


    Nun schauen wir uns das Ergebniss an Im Spiel an :)


    Na das schaut doch schon gut aus, erkennt ihr jetzt den zusammenhang zwischen SetPlayerCameraPos und SetPlayerPos?
    Seht euch die Bilder nocheinmal an falls es nochnicht klick macht, etwas vorrausschauendes denken brauch man hierbei schon... :D
    Aber moment der Spieler schaut uns garnicht an? Das lässt sich ändern! Wie? Indem wir die Blickrichtung ändern !
    Der Befehl dafür lautet:
    SetPlayerFacingAngle(playerid,Angle); | Angle ist ein Komma wert der von 0 - 360 geht denn der spieler kann sich nur im kreis drehen (wie auch sonst)
    Und da ein Kreis 360 Grad hat ist 360 der Maximale wert! Doch wie finden wir jetzt die richtige Richtung raus ?
    Das brauchen wir garnichtmehr, denn erinnert ihr euch daran was ich oben geschrieben habe?
    Mit dem Speichern von "SpielerPosition" haben wir die blickrichtung direkt mitgegespeichert und wenn wir uns richtig hingestellt haben, können wir diese auch nehmen!
    Schauen wir nochmal in die Wiki, dort ist es als "winkel" bezeichnet, und der steht neben der Z Koordinate, also rauskopieren aus dem Save:
    AddPlayerClass(287,-1946.2579,487.7636,31.9688,87.9005,0,0,0,0,0,0); // SpielerPosition
    Und in den Befehl Einfügen und der Code sollte so aussehen:

    public OnPlayerRequestClass(playerid, classid)
    {
    SetPlayerPos(playerid, -1946.2579,487.7636,31.9688);
    SetPlayerCameraPos(playerid, -1961.7993,486.6956,35.1719);
    SetPlayerCameraLookAt(playerid, -1936.5033,487.7016,31.9688);
    SetPlayerFacingAngle(playerid,87.9005);
    return 1;
    }

    Und das Ergebniss Ingame kann man sich denke ich vorstellen:


    Nagut er steht etwas weit weg aber durch das anpassen der Koordinaten könnt ihr das ja ändern wie ihr wollt :D


    Das wars, ein relativ langes Tutorial wie ich finde, aber da sieht man mal wieviel wissen und aufwand hinter sowas simplem wie ner KameraAuswahl steckt...
    Ich hoffe manchen ist das nun etwas klarer geworden :)
    Falls fragen sind, immer her damit :D


    mfg INk

  • Nice Nice Nice 10/10 ich danke dir :thumbup: endlich mal was sehr hilft jetzt weiß ich auch endlich wie

  • 1a Tutorial, da werden sich VIELE Anfänger freuen 8o .
    10/10 Breadis von mir. Für eine relativ einfache Scripting "Sache" sehr schön und ausfürlich beschrieben. Jetzt wird es 100 Posts/ Threads weniger geben mit dem Namen: Problem mit Skinauswahl usw.
    Top. :love:

    :D Was schaut ihr mich alle an??? Ich bin auch nur eine Signatur :D

  • do.de - Domain-Offensive - Domains für alle und zu super Preisen
  • Hmm ich hab das jetzt eingefügt und habe jetzt 22 Errors^^
    C:\Users\Administrator\Desktop\samp03csvr_win32\gamemodes\GeZReallifeloh.pwn(8730) : error 010: invalid function or declaration
    C:\Users\Administrator\Desktop\samp03csvr_win32\gamemodes\GeZReallifeloh.pwn(8733) : error 010: invalid function or declaration
    C:\Users\Administrator\Desktop\samp03csvr_win32\gamemodes\GeZReallifeloh.pwn(8735) : error 010: invalid function or declaration
    C:\Users\Administrator\Desktop\samp03csvr_win32\gamemodes\GeZReallifeloh.pwn(8739) : error 010: invalid function or declaration
    C:\Users\Administrator\Desktop\samp03csvr_win32\gamemodes\GeZReallifeloh.pwn(8744) : error 021: symbol already defined: "PlayerPlaySound"
    C:\Users\Administrator\Desktop\samp03csvr_win32\gamemodes\GeZReallifeloh.pwn(8746) : error 010: invalid function or declaration
    C:\Users\Administrator\Desktop\samp03csvr_win32\gamemodes\GeZReallifeloh.pwn(8751) : error 010: invalid function or declaration
    C:\Users\Administrator\Desktop\samp03csvr_win32\gamemodes\GeZReallifeloh.pwn(8756) : error 010: invalid function or declaration
    C:\Users\Administrator\Desktop\samp03csvr_win32\gamemodes\GeZReallifeloh.pwn(8761) : error 010: invalid function or declaration
    C:\Users\Administrator\Desktop\samp03csvr_win32\gamemodes\GeZReallifeloh.pwn(8766) : error 010: invalid function or declaration
    C:\Users\Administrator\Desktop\samp03csvr_win32\gamemodes\GeZReallifeloh.pwn(8771) : error 010: invalid function or declaration
    C:\Users\Administrator\Desktop\samp03csvr_win32\gamemodes\GeZReallifeloh.pwn(8776) : error 010: invalid function or declaration
    C:\Users\Administrator\Desktop\samp03csvr_win32\gamemodes\GeZReallifeloh.pwn(8781) : error 010: invalid function or declaration
    C:\Users\Administrator\Desktop\samp03csvr_win32\gamemodes\GeZReallifeloh.pwn(8786) : error 010: invalid function or declaration
    C:\Users\Administrator\Desktop\samp03csvr_win32\gamemodes\GeZReallifeloh.pwn(8791) : error 010: invalid function or declaration
    C:\Users\Administrator\Desktop\samp03csvr_win32\gamemodes\GeZReallifeloh.pwn(8796) : error 010: invalid function or declaration
    C:\Users\Administrator\Desktop\samp03csvr_win32\gamemodes\GeZReallifeloh.pwn(8801) : error 010: invalid function or declaration
    C:\Users\Administrator\Desktop\samp03csvr_win32\gamemodes\GeZReallifeloh.pwn(8806) : error 010: invalid function or declaration
    C:\Users\Administrator\Desktop\samp03csvr_win32\gamemodes\GeZReallifeloh.pwn(8811) : error 010: invalid function or declaration
    C:\Users\Administrator\Desktop\samp03csvr_win32\gamemodes\GeZReallifeloh.pwn(8816) : error 010: invalid function or declaration
    C:\Users\Administrator\Desktop\samp03csvr_win32\gamemodes\GeZReallifeloh.pwn(8821) : error 010: invalid function or declaration
    C:\Users\Administrator\Desktop\samp03csvr_win32\gamemodes\GeZReallifeloh.pwn(8828) : error 010: invalid function or declaration
    Pawn compiler 3.2.3664 Copyright (c) 1997-2006, ITB CompuPhase
    22 Errors.
    Bitte hilft mir.
    MfG xAdy
    /edit Errors eingefügt|| In PWN gemacht

    2 Mal editiert, zuletzt von [CR]xAdy ()

  • 8729: new string[128];
    9730: if(IsPlayerNPC(playerid))
    9831: {
    8732: SpawnPlayer(playerid);
    8733: return 1;
    8734: }
    8735: if(gPlayerAccount[playerid] == 1 && gPlayerLogged[playerid] == 0)
    8736: {
    8737: ShowPlayerDialog(playerid,DIALOG_LOGIN,DIALOG_STYLE_INPUT,"Login","Bitte logge dich in deinen Account ein!","Login","Abbrechen");
    8738: }
    8739: else if(gPlayerAccount[playerid] == 0 && gPlayerLogged[playerid] == 0)
    8740: {
    8741: ShowPlayerDialog(playerid,DIALOG_REG,DIALOG_STYLE_MSGBOX,"Account","Du benötigst einen Account, um auf diesem Server zu spielen!","Erstellen","Abbrechen");
    8742: }
    8743:
    8744: PlayerPlaySound(playerid, 1176, 0.0, 0.0, 0.0);
    PlayerInfo[playerid][pModel] = Peds[classid][0];
    8746: if (classid == 1)
    {
    format(string, sizeof(string), "~y~> ~p~Polizeichef ~y~< ~n~nur Leader!");
    GameTextForPlayer(playerid,string,3500,6);
    }
    8751: else if (classid == 2)
    8756: else if (classid == 3)
    8761: else if (classid == 4)
    8766: else if (classid == 5)
    8771: else if (classid == 6)
    8776: else if (classid == 7)
    8781: else if (classid == 8)
    8786: else if (classid == 9)
    8791: else if (classid == 10)
    8796: else if (classid == 11)
    8801: else if (classid == 12 )
    8806: else if (classid == 13 )
    8811: else if (classid == 14)
    8816: else if (classid == 14)
    8821: else
    8828: return 1;
    MfG xAdy

  • {
    format(string, sizeof(string), "~y~> ~p~Polizeichef ~y~< ~n~nur Leader!");
    GameTextForPlayer(playerid,string,3500,6);
    }
    else if (classid == 2)
    {
    format(string, sizeof(string), "~y~> ~p~FBI Leader ~y~< ~n~nur Leader!");
    GameTextForPlayer(playerid,string,3500,6);
    }
    else if (classid == 3)
    {
    format(string, sizeof(string), "~y~> ~p~Bundeswehr ~y~< ~n~nur Leader!");
    GameTextForPlayer(playerid,string,3500,6);
    }
    else if (classid == 4)
    {
    format(string, sizeof(string), "~y~> ~p~Krankenhaus Leitung ~y~< ~n~nur Leader!");
    GameTextForPlayer(playerid,string,3500,6);
    }
    else if (classid == 5)
    {
    format(string, sizeof(string), "~y~> ~p~LCN Boss ~y~< ~n~nur Leader!");
    GameTextForPlayer(playerid,string,3500,6);
    }
    else if (classid == 6)
    {
    format(string, sizeof(string), "~y~> ~p~Yakuza Boss ~y~< ~n~nur Leader!");
    GameTextForPlayer(playerid,string,3500,6);
    }
    else if (classid == 7)
    {
    format(string, sizeof(string), "~y~> ~p~Praesident ~y~< ~n~nur Leader!");
    GameTextForPlayer(playerid,string,3500,6);
    }
    else if (classid == 8)
    {
    format(string, sizeof(string), "~y~> ~p~Hitman Leitung ~y~< ~n~nur Leader");
    GameTextForPlayer(playerid,string,3500,6);
    }
    else if (classid == 9)
    {
    format(string, sizeof(string), "~y~> ~p~CNN Leitung ~y~< ~n~nur Leader");
    GameTextForPlayer(playerid,string,3500,6);
    }
    else if (classid == 10)
    {
    format(string, sizeof(string), "~y~> ~p~Taxi Firma Chef~y~< ~n~nur Leader!");
    GameTextForPlayer(playerid,string,3500,6);
    }
    else if (classid == 11)
    {
    format(string, sizeof(string), "~y~> ~p~Fahrlehrer Chef~y~< ~n~nur Leader!");
    GameTextForPlayer(playerid,string,3500,6);
    }
    else if (classid == 12 )
    {
    format(string, sizeof(string), "~y~> ~p~Secret Service Chef ~y~< ~n~nur Leader!");
    GameTextForPlayer(playerid,string,3500,6);
    }
    else if (classid == 13)
    {
    format(string, sizeof(string), "~y~> ~p~Terroristen Chef ~y~< ~n~nur Leader!");
    GameTextForPlayer(playerid,string,3500,6);
    }
    else if (classid == 14)
    {
    format(string, sizeof(string), "~y~> ~p~Ordnungsamt Chef ~y~< ~n~nur Leader!");
    GameTextForPlayer(playerid,string,3500,6);
    }
    else if (classid == 16)
    {
    format(string, sizeof(string), "~y~> ~p~Grove Street Boss ~y~< ~n~nur Leader!");
    GameTextForPlayer(playerid,string,3500,6);
    }
    else
    {
    format(string, sizeof(string), "~y~> ~g~Zivilisten ~y~<");
    GameTextForPlayer(playerid,string,3500,6);
    }
    Muss ich das else Weg machen?
    Die Klammern sind ja da.
    MfG xAdy
    /edit

    Einmal editiert, zuletzt von [CR]xAdy ()