[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
  • Hallo, ich lese mit MySQL -> While meine Tabelle aus.
    Nun will ich sie formatieren: format(info,sizeof(info),"%s",dest[0]);
    Doch er zeigt mir nur das letzt Ergebniss an, wie mache ich es dass alle Ergebnisse in dieses Format gespeichert werden?

  • ich habe ein Problem.


    Normalerweiße
    soll er ein Checkpoint am BSN machen und wenn man am BSN ist soll erst
    ein Text kommen das man zur Bank fahren soll.


    Wenn ich aber den Job beginne wird schon der Checkpoint zur Bank gesetzt & der Text vom BSN kommt.


    Das sollte passieren wenn man in den Checkpoint vom BSN fährt.




    if(testjob[playerid] == 1)
    {
    DisablePlayerCheckpoint(playerid);
    testjob[playerid] = 2;
    SetPlayerCheckpoint(playerid,1465.9991,-1016.5866,25.7718,10);
    new string[100];


    format(string,sizeof(string),"[Burger Shot] Hallo %s, bringe bitte
    unsere Geldkasseten in die Zentralbank.",PlayerName(playerid));
    SendClientMessage(playerid,GELB,string);
    return 1;
    }


    Wenn
    ich meinen Job beginne kommt aber schon der Text und der Checkpoint vom
    BSBN (SetPlayerCheckpoint(playerid,1191.5402,-923.7773,43.1096,10);)
    wird garnicht gesetzt sondern der Checkpoint von oben.


    Jemand 'ne Idee?


    Hier nochmal der komplette Code:


    if(jobangenommen[playerid]==1)
    {
    SendClientMessage(playerid,ROT,"Du hast Deinen Punkt erreicht.!");
    GeldTransportAuto[playerid] = CreateVehicle(428,1246.1964,-2055.7898,59.8090,270.6992,0,0,-1);
    SetPlayerPos(playerid,1246.1964,-2055.7898,59.8090);
    SetVehiclePos(GeldTransportAuto[playerid],1246.1964,-2055.7898,59.8090);
    PutPlayerInVehicle(playerid,GeldTransportAuto[playerid],0);


    SendClientMessage(playerid,BLAU,"Du hast nun Dein Dienstfahrzeug
    erhalten, wähle nun Deine Route aus die Du fahren möchtest.");
    new rdm = random(2);
    {
    if(rdm == 1)
    {
    SetPlayerCheckpoint(playerid,1191.5402,-923.7773,43.1096,10);
    jobangenommen[playerid]=0;
    Job[playerid]=1;
    testjob[playerid] = 1;
    }
    rdm;
    }



    }

    if(testjob[playerid] == 1)
    {
    DisablePlayerCheckpoint(playerid);
    testjob[playerid] = 2;
    SetPlayerCheckpoint(playerid,1465.9991,-1016.5866,25.7718,10);
    new string[100];


    format(string,sizeof(string),"[Burger Shot] Hallo %s, bringe bitte
    unsere Geldkasseten in die Zentralbank.",PlayerName(playerid));
    SendClientMessage(playerid,GELB,string);
    return 1;
    }
    if(testjob[playerid] == 2)
    {
    DisablePlayerCheckpoint(playerid);
    DestroyVehicle(GeldTransportAuto[playerid]);
    repair[playerid]=0;
    new string[100];
    format(string,sizeof(string),"%s (ID: %d) hat den Geldtransport erfolgreich abgeliefert.",PlayerName(playerid),playerid);
    SendClientMessageToAll(GRÜN,string);
    injob[playerid]=0;
    Job[playerid]=0;
    testjob[playerid]=0;
    SetPVarInt(playerid,"Geldtransporte", GetPVarInt (playerid, "Geldtransporte") + 1);
    new geld = random(20000);//definiert Zufallsgeld als random von 1000
    GivePlayerMoney(playerid,geld);//gibt dem spieler ein zufallsbetrag mit der maximalen höhe von 1000$
    new score = random(40);//definiert Zufallsgeld als random von 1000
    SetPlayerScore(playerid,(GetPlayerScore(playerid)+score));
    new stringz[128];
    format(stringz,sizeof(stringz),"Du hast %d$ und %d Score verdient!",geld,score);
    SendClientMessage(playerid,GELB,stringz);
    return 1;

  • Hat mal wer ne pawn Funktion für mich, die eine "zufällige" 16 Cells Zeichenkette erzeugt?
    Oder weiß jemand, obs ne Funktion gibt, mit der man eine Zahl (Decimal) in ein Zeichen umwandeln kann ? (A là ASCII)


    http://www.asciitable.com/


    0+48 = '0'
    1+48 = '1'
    2+48 = '2'
    3+48 = '3'
    ...
    9+48 = '9'


    die Zahl + 48 ergibt den ASCII wert!


    Funktion ? ganz einfach gesehen geht es auch so:
    format(string, sizeof(string), "%d", 1746254); // 1746254 in Zeichenkette einfügen (ASCII Werte dann)

  • Hat mal wer ne pawn Funktion für mich, die eine "zufällige" 16 Cells Zeichenkette erzeugt?
    Oder weiß jemand, obs ne Funktion gibt, mit der man eine Zahl (Decimal) in ein Zeichen umwandeln kann ? (A là ASCII)


    Du könntest hier ein bisschen tricksen und folgendes tun:


    Das generiert dir zufällige Buchstaben (alles großgeschrieben):


    new buffer[16];
    for(new i; i<16; i++) {
    buffer[i] = random(25)+65;
    }
    printf("%s",buffer);
    Wichtig ist das du es unten mit %s ausgibst bzw umwandelst ;)


    mfg. :thumbup:

    ast2ufdyxkb1.png


    Leute, lernt scripten und versucht mal lieber etwas selber zu schreiben, als es aus einem GF zu kopieren. :S

  • Hab mir mal was kleines gebastelt, konnte es aber noch nicht testen.


    forward getSaltString(string[]);
    public getSaltString(string[])
    {
    new len = sizeof(string); // 11659
    new salt[len]; // 11660
    for(new i = 0;i<len;i++)
    {
    do
    {
    new rand = 48+random(75); // minimum 48 | maximum 122
    new ch[1];
    format(ch,1,"%s",rand);
    strcat(salt,ch);
    }
    while(rand > 57 && rand < 65 || rand > 90 && rand < 97);
    }
    format(string,sizeof(string),"%s",salt);
    print(string);
    }


    Ich würde damit gerne die Cell Größe von String begrenzen. Allerdings möchte der compiler gerne eine konstante dafür haben. Jemand ne Idee?


    Zitat

    M:\samp03x_Mafia-Police\gamemodes\Mafia-Policev9X_1.pwn(11659) : warning 224: indeterminate array size in "sizeof" expression (symbol "")
    M:\samp03x_Mafia-Police\gamemodes\Mafia-Policev9X_1.pwn(11660) : error 008: must be a constant expression; assumed zero
    M:\samp03x_Mafia-Police\gamemodes\Mafia-Policev9X_1.pwn(11660) : error 009: invalid array size (negative, zero or out of bounds)
    M:\samp03x_Mafia-Police\gamemodes\Mafia-Policev9X_1.pwn(11660) : error 036: empty statement
    M:\samp03x_Mafia-Police\gamemodes\Mafia-Policev9X_1.pwn(11660) : fatal error 107: too many error messages on one line


    edit: Hab die Funktion noch schnell mal überarbeitet, damit man nur einen Parameter hat.

  • Okai bleibt nach wie vor das Problem, dass der Compiler für das Array eine Konstante verlangt.



    forward getSaltString(string[],len = sizeof(string)); // 11656
    public getSaltString(string[],len = sizeof(string)) // 11657
    {
    new salt[len]; // 11659
    for(new i = 0;i<len;i++)
    {
    do
    {
    new rand = 48+random(75); // minimum 48 | maximum 122
    new ch[1];
    format(ch,1,"%s",rand);
    strcat(salt,ch);
    }
    while(rand > 57 && rand < 65 || rand > 90 && rand < 97);
    }
    format(string,sizeof(string),"%s",salt);
    print(string);
    }


    M:\samp03x_Mafia-Police\gamemodes\Mafia-Policev9X_1.pwn(11656) : error 059: function argument may not have a default value (variable "len")
    M:\samp03x_Mafia-Police\gamemodes\Mafia-Policev9X_1.pwn(11657) : error 059: function argument may not have a default value (variable "len")
    M:\samp03x_Mafia-Police\gamemodes\Mafia-Policev9X_1.pwn(11659) : error 008: must be a constant expression; assumed zero
    M:\samp03x_Mafia-Police\gamemodes\Mafia-Policev9X_1.pwn(11659) : error 009: invalid array size (negative, zero or out of bounds)
    M:\samp03x_Mafia-Police\gamemodes\Mafia-Policev9X_1.pwn(11659) : error 036: empty statement
    M:\samp03x_Mafia-Police\gamemodes\Mafia-Policev9X_1.pwn(11659) : fatal error 107: too many error messages on one line

  • forward getSaltString(string[],len); // 11656
    public getSaltString(string[],len) // 11657
    {
    new salt[len]; // 11659
    for(new i = 0;i<len;i++)
    {
    do
    {
    new rand = 48+random(75); // minimum 48 | maximum 122
    new ch[1];
    format(ch,1,"%s",rand);
    strcat(salt,ch);
    }
    while(rand > 57 && rand < 65 || rand > 90 && rand < 97);
    }
    format(string,len,"%s",salt);
    print(string);
    }

  • Okai bleibt nach wie vor das Problem, dass der Compiler für das Array eine Konstante verlangt.


    Du kannst es auch einfach so machen:


    forward getSaltString(string[]);
    public getSaltString(string[]) {
    new salt[32];
    for(new i,len=strlen(string); i<len; i++) salt[i] = 48+random(75);
    return format(string,32,"%s",salt),print(string);
    }


    mfg. :thumbup:

    ast2ufdyxkb1.png


    Leute, lernt scripten und versucht mal lieber etwas selber zu schreiben, als es aus einem GF zu kopieren. :S


  • Damit bleibt leider noch das Problem, dass der Compiler gerne eine Konstante für salt hätte.





    Jo klar das ginge. Ich würde aber gerne mit der Funktion verschiedene Längen von Salt Strings erzeugen können. Und zwar immer so lang wie die zu verwendende Variable

  • kannst entweder eine Max. Lenge für den Salt String nehmen, also wenn du sagst länger als 100 wird er nicht kannst du 100 nehmen.
    Oder du gibst ne weitere string variable und länge mit.

  • kannst entweder eine Max. Lenge für den Salt String nehmen, also wenn du sagst länger als 100 wird er nicht kannst du 100 nehmen.Oder du gibst ne weitere string variable und länge mit.


    Jo klar das ginge. Ich würde aber gerne mit der Funktion verschiedene Längen von Salt Strings erzeugen können. Und zwar immer so lang wie die zu verwendende Variable


    Oder man verwendet die String-Variable:


    forward getSaltString(string[]);
    public getSaltString(string[]) {
    for(new i,len=strlen(string); i<len; i++) string[i] = 48+random(75);
    return print(string);
    }


    mfg. :thumbup:

    ast2ufdyxkb1.png


    Leute, lernt scripten und versucht mal lieber etwas selber zu schreiben, als es aus einem GF zu kopieren. :S

  • Jo gute Idee. Kann den String ja einfach überschreiben.


    forward getSaltString(string[],len);
    public getSaltString(string[],len)
    {
    for(new i = 0;i<len;i++)
    {
    new rand;
    do
    {
    rand = 48+random(75); // minimum 48 | maximum 122
    format(string,len,"%s%c",string,rand);
    }
    while(rand > 57 && rand < 65 || rand > 90 && rand < 97);
    }
    print(string);
    }


    Keine Errors mehr und es funktioniert auch. Jedoch ist noch der Wurm drin. Er nimmt auch die Zeichen zwischen 57 und 65 sowie 90 und 97. Sieht jemand den Fehler in der while loop?


    Hier mal zwei erzeugte Strings. Eigentlich sollten da nur Zahlen und Buchstaben (groß und klein) drin stehen.


    [11:53:40] _fUmS6t?vPMkR9q // 16 cells
    [11:53:40] Lyu5w6Ak5:JoFDK1cCh:rh[EhIYN[?N // 32 cells

    edit: okai hat sich erledigt. Sequenzdiagramm lässt grüßen


    forward getSaltString(string[],len);
    public getSaltString(string[],len)
    {
    for(new i = 0;i<len;i++)
    {
    new rand;
    do
    {
    rand = 48+random(75); // minimum 48 | maximum 122
    }
    while(rand > 57 && rand < 65 || rand > 90 && rand < 97);
    format(string,len,"%s%c",string,rand);
    }
    print(string);
    }

  • Hier, probier mal das aus:


    forward getSaltString(string[],len);
    public getSaltString(string[],len)
    {
    if(strlen(string) < len) return print("Invalid memory access!"); //Wichtig...
    else strdel(string,len,strlen(string)); //Wichtig...
    for(new i; i<len; i++)
    {
    new rand;
    for(;;) {
    rand = 48+random(75);
    if(rand > 57 && rand < 65 || rand > 90 && rand < 97) continue;
    break;
    }
    string[i] = rand;
    }
    return print(string);
    }


    //Edit: Mach das mal ohne die do/While schleife und mach es so.


    mfg. :thumbup:

    ast2ufdyxkb1.png


    Leute, lernt scripten und versucht mal lieber etwas selber zu schreiben, als es aus einem GF zu kopieren. :S

    Einmal editiert, zuletzt von Kaliber ()