Skinchange System

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
  • Hallo liebe Community,


    hier mal ein kleines Tutorial von mir, wie man die Skinauswahl an verschiedene Fraktionen anpasst.
    Die Schnipsel wurden von mir selbst erstellt und sind nicht kopiert worden oder ähnliches.
    Ich hoffe ich kann einigen von euch mit meinem Tutorial helfen.


    Das Tutorial ist hoffentlich für jeden Neuling nachzuvollziehen.


    Fangen wir im Kopf des Scriptes an.
    Zuerst definieren wir eine Variable, mit der wir später überprüfen können, ob die Fraktion, die von einem Spieler (deshalb MAX_PLAYERS, damit jeder seine eigene Auswahl treffen kann) ausgewählt wurde und die, in der der Spieler sich tatsächlich befindet, übereinstimmen.



    new SkinFrak[MAX_PLAYERS];


    Der nächste Schritt definiert alle verfügbaren Skins, die es geben soll.
    Hierzu nutzen wir die Funktion AddPlayerClass, welche ihren Einsatzort unter OnGameModeInit findet.


    Für mein Beispiel nutze ich folgende Skins:



    AddPlayerClass(0, 1958.3783, 1343.1572, 15.3746, 269.1425, 0, 0, 0, 0, 0, 0);// Für die spätere Verwendung ist es gut, wenn man die Skins durchnummeriert. Skin 1
    AddPlayerClass(1, 1958.3783, 1343.1572, 15.3746, 269.1425, 0, 0, 0, 0, 0, 0); // Skin 2
    AddPlayerClass(2, 1958.3783, 1343.1572, 15.3746, 269.1425, 0, 0, 0, 0, 0, 0); // Skin 3


    //Copskins
    AddPlayerClass(60, 1958.3783, 1343.1572, 15.3746, 269.1425, 0, 0, 0, 0, 0, 0);// Skin 4
    AddPlayerClass(211, 1958.3783, 1343.1572, 15.3746, 269.1425, 0, 0, 0, 0, 0, 0);// Skin 5


    //Medics
    AddPlayerClass(274, 1958.3783, 1343.1572, 15.3746, 269.1425, 0, 0, 0, 0, 0, 0);// Skin 6
    AddPlayerClass(70, 1958.3783, 1343.1572, 15.3746, 269.1425, 0, 0, 0, 0, 0, 0);// Skin 7


    So hier sehen wir drei Zivilisten Skins 1,2,3 und zwei Fraktionen mit jeweils zwei Skins.
    Jetzt sind die Skins verfügbar, jedoch gibt es keine Einschränkung füür die Personen, die sie nehmen wollen.



    Weiter geht es mit dem dritten Schritt unter OnPlayerRequestClass. Dieser Public wird aufgerufen, wenn der Spieler durch das drücken von F4 in die Skin-Auswahl kommt.


    Damit es schöner aussieht, setze ich als erstes den Spieler in einen Skin-Shop. Dies verleiht einen kleiner Roleplay Faktor.



    SetPlayerInterior(playerid,18);
    SetPlayerPos(playerid,171.24632263184, -73.915016174316, 1001.453918457); // Position des Spielers
    SetPlayerFacingAngle(playerid, 120); // Die Drehung des Spielers
    SetPlayerCameraPos(playerid,166.05848693848, -78.074783325195, 1004.5797729492); // Wie im Film, wo soll die Spieler filmende Kamera stehen?
    SetPlayerCameraLookAt(playerid,171.24632263184, -73.915016174316, 1001.453918457); // Und wohin soll die Kamera gerichtet sein?


    Damit wir wissen, in welcher Fraktion der Spieler ist, packen wir diese Information direkt in eine Variable.



    new frak;
    frak = SpielerInfo[playerid][pFraktion]; // Dieser Teil MUSS an euer Script angepasst werden, so dass die Fraktions-ID wiedergespiegelt wird!


    Jetzt greifen wir auf die definierten Klassen zu, die unter OnGameModeInit stehen.
    Ich hab es auch so gemacht, dass ich lediglich die Skins, die auch zu Fraktionen gehören, weiter eingeschränkt hab und die anderen unter "default" gepackt habe.


    Damit wir nicht immer die einzelnen Skins abfragen müssen, "switchen" wir direkt zwischen den aufgelisteten, dafür die Nummerierung hinter den Skins.



    switch(classid) // Classid wird direkt durch das public mitgeliefert und muss nicht weiter definiert werden!
    {


    Wie unsere Auflistung zeigt, gehört zu den Copskins die ID's 4 und 5. Also wie folgt



    case 4,5:
    {


    Damit es optisch dargestellt werden kann, ob der Spieler auch in der Fraktion ist, brauchen wir jetzt die Variable vom Anfang.



    SkinFrak[playerid] = 1; // Die 1 hierbei ist die Fraktions-ID und ist ebenfalls in eurem Script anzupassen!


    Dann fragen wir ab, ob der Spieler in der zuvor definierten Fraktion ist und stellen dies durch einen grünen, für ja, und roten, für nein, GameText dar.



    if(SkinFrak[playerid] != frak)
    {
    GameTextForPlayer(playerid,"~r~Cops",3000,6); // Wenn die Fraktion des Spielers ungleich der Zugehörigkeit des ausgewählten Skin ist
    }
    else
    {
    GameTextForPlayer(playerid,"~g~LS Police Department",3000,6);
    }


    Das selbe passiert anschließend mit der anderen Fraktion.



    case 6,7:
    {
    SkinFrak[playerid] = 2;
    if(SkiNFrak[playerid] != frak)
    {
    GameTextForPlayer(playerid,"~r~Medic",3000,6);
    }
    else
    {
    GameTextForPlayer(playerid,"~g~Medic",3000,6);
    }
    }


    Wie bereits erwähnt folgen nur noch die Zivilisten Skins, die als alle anderen definiert sind!



    default: // Alle anderen Skins
    {
    SkinFrak[playerid] = 0; // Skins der Zivilisten
    if(SkinFrak[playerid] != frak)
    {
    GameTextForPlayer(playerid,"~r~Zivilisten",3000,6);
    }
    else
    {
    GameTextForPlayer(playerid,"~g~Zivilisten",3000,6);
    }
    }


    Somit ist zu mindest schon einmal die optische Auswahl erstellt und bedingt durch die Fraktionsabfrage.
    Nun kommt der wichtigste Schritt, der den Spieler zurückweist, sollte er nicht zur Fraktion gehören!


    Da wir uns in einem neuen Public befinden, fragen wir zuerst wieder die Fraktion des Spielers ab.

    new fraktion;
    fraktion = SpielerInfo[playerid][pFraktion];


    Und erneut fragen wir ab, ob die Fraktion des Spielers mit der Zugehörigkeit des Skins übereinstimmt.
    Hierzu brauchen wir wieder die Variable vom Anfang.



    if(SkinFrak[playerid] != fraktion )
    {
    SendClientMessage(playerid, FARBE, "Du bist nicht in der ausgewählten Fraktion!");
    return 0;
    }


    Sollte diese Abfrage eintreten, wird durch das return 0; das Spawnen abgebrochen.


    Zu guter letzt returnen wir hinter dem letzten Code einfach mit "1" und der Spieler spawnt in seinem neuen Skin!



    return 1;


    Das war's auch schon mit meinem kleinen Tutorial. Ich hoffe natürlich ich konnte so Manchem helfen.
    Es folgen natürlich weitere Hilfen.


    Support-Anfragen bitte nur in diesem Thread und keine privaten Nachrichten!




    Mit freundlichen Grüßen




    Scripts4Cash!

  • case 4,5:
    {
    Schlechte Lösung. Mal daran gedacht, die classid über AddPlayerClass zu beziehen und dann diesen Wert für OnPlayerRequestClass zu benutzen ? Das würde nämlich nicht funktionieren, ohne das ich "meine" Klassen verschieben oder dein Script anpasse.