[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
  • @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?

  • wenn ich tank[4] habe


    tank[0]
    tank[1]
    tank[2]
    tank[3]


    Wie groß ist dann dass Array für jeden tank? 1 oder ? das meine ich




    Und @Jack_Bauer:
    Wie soll dass dann funktionieren wenn man mehr als 2 Checkpoints erstellen will?
    public OnPlayerEnterCheckpoint(playerid)
    {
    if(IsPlayerInRangeOfPoint(playerid, 5, currentCheckpoint[playerid][_x], currentCheckpoint[playerid][_y], currentCheckpoint[playerid][_z]))
    {
    CreateCheckpoint(playerid,1142.9468,1352.1031,10.8203,4);
    }
    return 1;
    }
    Das kann ja so dann eigentlich nicht funktionieren für mehr als 2 Checkpoints

  • ja, jetzt will ich aber wenn der 2 Checkpoint den ich hier erstellt habe:
    public OnPlayerEnterCheckpoint(playerid)
    {
    if(IsPlayerInRangeOfPoint(playerid, 5, currentCheckpoint[playerid][_x], currentCheckpoint[playerid][_y], currentCheckpoint[playerid][_z]))
    {
    CreateCheckpoint(playerid,1142.9468,1352.1031,10.8203,4);
    }
    return 1;
    }
    betreten wird wieder einen neuen setzen. Für die Fahrschule.
    Sowie das jetzt ist würde er mir ja immer diesen Checkpoint erstellen CreateCheckpoint(playerid,1142.9468,1352.1031,10.8203,4);

  • Ja, hab jetzt bisschen kompliziert gedacht.


    Kann ich ja ganz einfach so machen
    public OnPlayerEnterCheckpoint(playerid)
    {
    if(IsPlayerInRangeOfPoint(playerid, 5, 1117.3337,1353.7876,10.8203))
    {
    DisablePlayerCheckpoint(playerid);
    SetPlayerCheckpoint(playerid,1142.9468,1352.1031,10.8203,4);
    }
    if...
    .
    .
    .
    return 1;
    }

  • Wie entferne ich diese Passwort Verschlüsselung, möchte da einige Sachen austesten:



    //Credits to Y_Less, Dracoblue and Kush.


    #include <a_samp>
    #include <YSI\y_ini>


    #define DIALOG_REGISTER 1
    #define DIALOG_LOGIN 2
    #define DIALOG_SUCCESS_1 3
    #define DIALOG_SUCCESS_2 4


    #define PATH "/Users/%s.ini"


    #define COL_WHITE "{FFFFFF}"
    #define COL_RED "{F81414}"
    #define COL_GREEN "{00FF22}"
    #define COL_LIGHTBLUE "{00CED1}"


    enum pInfo
    {
    pPass,
    pCash,
    pAdmin,
    pKills,
    pDeaths
    }
    new PlayerInfo[MAX_PLAYERS][pInfo];


    forward LoadUser_data(playerid,name[],value[]);
    public LoadUser_data(playerid,name[],value[])
    {
    INI_Int("Password",PlayerInfo[playerid][pPass]);
    INI_Int("Cash",PlayerInfo[playerid][pCash]);
    INI_Int("Admin",PlayerInfo[playerid][pAdmin]);
    INI_Int("Kills",PlayerInfo[playerid][pKills]);
    INI_Int("Deaths",PlayerInfo[playerid][pDeaths]);
    return 1;
    }


    stock UserPath(playerid)
    {
    new string[128],playername[MAX_PLAYER_NAME];
    GetPlayerName(playerid,playername,sizeof(playername));
    format(string,sizeof(string),PATH,playername);
    return string;
    }


    /*Credits to Dracoblue*/
    stock udb_hash(buf[]) {
    new length=strlen(buf);
    new s1 = 1;
    new s2 = 0;
    new n;
    for (n=0; n<length; n++)
    {
    s1 = (s1 + buf[n]) % 65521;
    s2 = (s2 + s1) % 65521;
    }
    return (s2 << 16) + s1;
    }


    main()
    {


    }


    public OnFilterScriptInit()
    {


    }




    public OnPlayerRequestClass(playerid, classid)
    {
    return 1;
    }


    public OnPlayerConnect(playerid)
    {
    if(fexist(UserPath(playerid)))
    {
    INI_ParseFile(UserPath(playerid), "LoadUser_%s", .bExtra = true, .extra = playerid);
    ShowPlayerDialog(playerid, DIALOG_LOGIN, DIALOG_STYLE_INPUT,""COL_WHITE"Login",""COL_WHITE"Type your password below to login.","Login","Quit");
    }
    else
    {
    ShowPlayerDialog(playerid, DIALOG_REGISTER, DIALOG_STYLE_INPUT,""COL_WHITE"Registering...",""COL_WHITE"Type your password below to register a new account.","Register","Quit");
    }
    return 1;
    }



    Ich weiß da muss das udb_hash raus doch ich kriege immer Errors..


    Mit freundlichen Grüßen
    JustMe.77 8)

  • Danke Jeffry. Aber später sollen dort Namen und nicht die Rang Zahl hin kommen.
    Rang Zahlen hab ich vorerst so geschrieben.


    z.b Rang 1 = Recruit
    Rang 2 = Sniperboy


    Ist zwar schon etwas her, aber mMn am sinnvollsten wäre es die ganzen Rangnamen in eine MySQL Tabelle zu verlagern und sich das mit einem einfachen Query zu holen, falls man lieber Datein hat, kann man das auch in mehrere Datein auslagern und dann bequem auslesen

    "Bevor ich mir Informationen aus der "Bild" hole,
    werde ich anfangen, Wahlergebnisse danach vorauszusagen,
    neben welchen Busch unsere Katze gepinkelt hat."

    Margarete Stokowski

  • Bei INI_Load verstehe ich das aber nicht, sieht zurzeit so aus:



    INI_("Password",PlayerInfo[playerid][pPass]);
    INI_Int("Cash",PlayerInfo[playerid][pCash]);
    INI_Int("Admin",PlayerInfo[playerid][pAdmin]);
    INI_Int("Kills",PlayerInfo[playerid][pKills]);
    INI_Int("Deaths",PlayerInfo[playerid][pDeaths]);
    return 1;


    Da weiß ich nicht was ich bei der Zeile von Passwort hinter INI_ machen soll.


    Und hier sieht es so aus:


    Spoiler anzeigen

    public OnDialogResponse(playerid, dialogid, response, listitem, inputtext[])
    {
    switch( dialogid )
    {
    case DIALOG_REGISTER:
    {
    if (!response) return Kick(playerid);
    if(response)
    {
    if(!strlen(inputtext)) return ShowPlayerDialog(playerid, DIALOG_REGISTER, DIALOG_STYLE_INPUT, ""COL_WHITE"Registering...",""COL_RED"You have entered an invalid password.\n"COL_WHITE"Type your password below to register a new account.","Register","Quit");
    new INI:File = INI_Open(UserPath(playerid));
    INI_SetTag(File,"data");
    INI_WriteString(File,"Password");
    INI_WriteInt(File,"Cash",0);
    INI_WriteInt(File,"Admin",0);
    INI_WriteInt(File,"Kills",0);
    INI_WriteInt(File,"Deaths",0);
    INI_Close(File);

    Spoiler anzeigen
    SetSpawnInfo(playerid, 0, 0, 1958.33, 1343.12, 15.36, 269.15, 0, 0, 0, 0, 0, 0);
    SpawnPlayer(playerid);
    ShowPlayerDialog(playerid, DIALOG_SUCCESS_1, DIALOG_STYLE_MSGBOX,""COL_WHITE"Success!",""COL_GREEN"Great! Your Y_INI system works perfectly. Relog to save your stats!","Ok","");
    }
    }

    Spoiler anzeigen
    case DIALOG_LOGIN:
    {
    if ( !response ) return Kick ( playerid );
    if( response )
    {

    {
    INI_ParseFile(UserPath(playerid), "LoadUser_%s", .bExtra = true, .extra = playerid);
    GivePlayerMoney(playerid, PlayerInfo[playerid][pCash]);
    ShowPlayerDialog(playerid, DIALOG_SUCCESS_2, DIALOG_STYLE_MSGBOX,""COL_WHITE"Success!",""COL_GREEN"You have successfully logged in!","Ok","");
    }
    else
    {
    ShowPlayerDialog(playerid, DIALOG_LOGIN, DIALOG_STYLE_INPUT,""COL_WHITE"Login",""COL_RED"You have entered an incorrect password.\n"COL_WHITE"Type your password below to login.","Login","Quit");
    }
    return 1;
    }
    }
    }
    return 1;
    }


    Mit freundlichen Grüßen
    JustMe.77 8)

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