[SAMMELTHREAD] Kleine Scripting Fragen

Dein Problem konnte durch einen User gelöst werden? Bedank dich bei ihm indem du seinen Beitrag als Hilfreich markierst sowie einen Daumen oben dalässt
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
  • Gibt es eine Möglichkeit mein stock kürzer bzw besser zu schreiben?


    stock GetRangName(playerid)


    stock GetRangName(playerid)
    {
    new str[35];
    if(SpielerInfo[playerid][pFraktion] == 1)
    {
    switch(SpielerInfo[playerid][pRang])
    {
    case 0: str = "SAPD Rang 0";
    case 1: str = "SAPD Rang 1";
    case 2: str = "SAPD Rang 2";
    case 3: str = "SAPD Rang 3";
    case 4: str = "SAPD Rang 4";
    case 5: str = "SAPD Rang 5";
    case 6: str = "SAPD Rang 6";
    case 7: str = "SAPD Rang 7";
    case 8: str = "SAPD Rang 8";
    case 9: str = "SAPD Rang 9";
    case 10: str = "SAPD Rang 10";
    case 11: str = "SAPD Rang 11";
    case 12: str = "SAPD Rang 12";
    }
    }
    if(SpielerInfo[playerid][pFraktion] == 2)
    {
    switch(SpielerInfo[playerid][pRang])
    {
    case 0: str = "BKA Rang 0";
    case 1: str = "BKA Rang 1";
    case 2: str = "BKA Rang 2";
    case 3: str = "BKA Rang 3";
    case 4: str = "BKA Rang 4";
    case 5: str = "BKA Rang 5";
    case 6: str = "BKA Rang 6";
    case 7: str = "BKA Rang 7";
    case 8: str = "BKA Rang 8";
    case 9: str = "BKA Rang 9";
    case 10: str = "BKA Rang 10";
    case 11: str = "BKA Rang 11";
    case 12: str = "BKA Rang 12";
    }
    }
    if(SpielerInfo[playerid][pFraktion] == 3)
    {
    switch(SpielerInfo[playerid][pRang])
    {
    case 0: str = "BW Rang 0";
    case 1: str = "BW Rang 1";
    case 2: str = "BW Rang 2";
    case 3: str = "BW Rang 3";
    case 4: str = "BW Rang 4";
    case 5: str = "BW Rang 5";
    case 6: str = "BW Rang 6";
    case 7: str = "BW Rang 7";
    case 8: str = "BW Rang 8";
    case 9: str = "BW Rang 9";
    case 10: str = "BW Rang 10";
    case 11: str = "BW Rang 11";
    case 12: str = "BW Rang 12";
    }
    }
    else if(SpielerInfo[playerid][pFraktion] == 0)
    {
    switch(SpielerInfo[playerid][pRang])
    {
    case 0: str = "Rang-Fehler";
    }
    }
    return str;
    }

  • stock GetRangName(playerid)
    {
    new str[35];
    switch(SpielerInfo[playerid][pFraktion])
    {
    case 1: format(str, sizeof(str), "SAPD Rang %d", SpielerInfo[playerid][pRang]);
    case 2: format(str, sizeof(str), "BKA Rang %d", SpielerInfo[playerid][pRang]);
    case 3: format(str, sizeof(str), "BW Rang %d", SpielerInfo[playerid][pRang]);
    default: str = "Rang-Fehler";
    }
    return str;
    }

  • Hat jemand irgend 'ne Möglichkeit abzufragen, ob die Selektion eines Textdraws durch die ESC Taste abgebrochen wurde? Dieser Abbruch durch die ESC Taste ist leider von SAMP aus und ich würde gerne mit diesem Abbruch auch das zu selektierende Textdraw schließen. OnPlayerKeyStateChange() bringt nichts, da es, je nachdem ob das Callback seine Tage hat, entweder für die Taste ESC eine 0 zurückgibt oder den Keycode für die Alt Taste.


    Danke im Voraus.

  • Könnt ihr mir ein Beispiel zu beidem machen?
    Einmal mit dem normalen Teleportieren und einmal mit dem Schleudern.


    Habe keine Ahnung wie ich das anfangen soll, Wiki hat mir auch nicht wirklich geholfen bzw. ich habe es nicht wirklich verstanden.


    Mit freundlichen Grüßen
    JustMe.77 8)

  • Hi, fange gerade mit Checkpoints an


    public OnPlayerSpawn(playerid)
    {
    SetPlayerCheckpoint(playerid, 1982.6150, -220.6680, -0.2432, 3.0);
    return 1;
    }

    public OnPlayerEnterCheckpoint(playerid)
    {
    CreateVehicle(520, 1982.6150, -221.0145, -0.2432, 82.2873, -1, -1, 60000);
    DisablePlayerCheckpoint(playerid);
    return 1;
    }


    Wie kann ich es jetzt machen, dass beim Betreten des Checkpoints ein 2 erstellt wird usw.. ?



    Und noch eine kleine Frage:
    Wenn ich wie hier eine Globale Variable erstelle:
    new tank[MAX_VEHICLES];
    MAX_VEHICLES ist ja 2000 also
    new tank[2000];


    Jetzt wenn ich das aber so mache:
    ocmd:test(playerid,params[])
    {
    new tank[2000];
    return 1;
    }

    Dann steht es ja für einen String mit einem Array von 2000


    Und bei der globalen werden 2000 mal tank erstellt oder?
    Also tank[0] tank[1] tank[2] usw..



    Liege ich da richtig ?

  • Und bei der globalen werden 2000 mal tank erstellt oder?
    Also tank[0] tank[1] tank[2] usw..


    Es gibt in PAWN eigentlich keine Strings. Das sind auch nur Arrays, die du mit Zeichen füllst.


    d.h du erstellst keinen String, sondern eigentlich ein Array; in beiden Fällen.


    new string[6] = "Hello";
    oder
    new string[6] = {'H','e','l','l','o'};
    new string[6];
    string[0] = "H";
    string[1] = "E";
    ..

    Ist also das selbe.


    /edit: Es kommt lediglich darauf an, wie du dann mit dem Array umgehst.
    new Tank[4];// Array, wie du es vermutlich meinst.
    Tank[0] = CreateObject...
    oder eben
    new Tank[4] = {'H','e','y'}; // "Stringarray"

  • @Mencent:
    Manniac:
    Danke, funktioniert prima (musste zwar noch etwas tricksen, weil INVALID_TEXT_DRAW keinen Text:Tag hat, aber jetzt funktioniert es.


    _____________________________



    Wie kann ich es jetzt machen, dass beim Betreten des Checkpoints ein 2 erstellt wird usw.. ?


    Mach einfach ein globales Array:
    enum CHECKPOINT_ARRAY_INFO{
    Float:_x,
    Float:_y,
    Float:_z
    };
    new currentCheckpoint[MAX_PLAYERS] [CHECKPOINT_ARRAY_INFO];


    Da speicherst du dann immer bei einem CreateCheckpoint() die Positionen (mach dir am Besten eine Funktion dafür, dann geht es einfacher).
    Beispiel:
    currentCheckpoint[playerid][_x] = x;


    Unter OnPlayerEnterCheckpoint() dann einfach:


    if(IsPlayerInRangeOfPoint(playerid, 5, currentCheckpoint[playerid][_x], currentCheckpoint[playerid][_y], currentCheckpoint[playerid][_z])){
    //Neuen Checkpoint erstellen
    }

    Dann steht es ja für einen String mit einem Array von 2000


    :thumbup:
    Ein String ist nichts Anderes als ein Array.
    Es steht genaugenommen also nicht für ein Array, sondern es ist ein Array.


    Also tank[0] tank[1] tank[2] usw..


    :thumbup:
    Du könntest in deinem Beispiel die Indizes von 0 bis 1999 verwenden.



  • Wenn ich jetzt
    tank[0]={'H','a',...}
    tank[1]=
    .
    .
    .
    mache, wie groß ist das "Stringarray" dann dafür? 1 Zeichen?