[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
  • Mal ne kleine Frage meiner Seits.


    Es gibt ja diesen Stock ReturnUser(Parameter);


    Wie kann man den User im strval returnen? (Ja ich hab im Wiki geschaut, bin aber noch nicht ganz hinter gekommen)


    MFG :)


    Engelsflügel am Astonkühler, als Schutz vor dem Teufel!

  • Erklär mal etwas näher, ich versteh das nämlich nicht ^^


    Also dieser Stock ReturnUser(PARAMETER); Kann ja in einem Dialog, den eingegeben Text zurückgeben und in einen Namen umwandeln.


    Kleines Beispiel:

    SpielerID = strval(inputtext); // -> Hier wird die ID, die eingegeben wurde zurück gegeben
    SpielerID = ReturnUser(inputtext); // -> Hier wird der Name, der eingegeben wurde zurück gegeben.


    Lässt sich der Name statt mit ReturnUser auch mit strval(PARAMETER); zurückgeben?



    //Stock ReturnUser
    stock ReturnUser(text[], playerid = INVALID_PLAYER_ID)
    {
    new pos = 0;
    while (text[pos] < 0x21) // Strip out leading spaces
    {
    if (text[pos] == 0) return INVALID_PLAYER_ID; // No passed text
    pos++;
    }
    new userid = INVALID_PLAYER_ID;
    if (IsNumeric(text[pos])) // Check whole passed string
    {
    // If they have a numeric name you have a problem (although names are checked on id failure)
    userid = strval(text[pos]);
    if (userid >=0 && userid < MAX_PLAYERS)
    {
    if(!IsPlayerConnected(userid))
    {
    userid = INVALID_PLAYER_ID;
    }
    else
    {
    return userid; // A player was found
    }
    }
    }
    // They entered [part of] a name or the id search failed (check names just incase)
    new len = strlen(text[pos]);
    new count = 0;
    new name[MAX_PLAYER_NAME];
    for (new i = 0; i < MAX_PLAYERS; i++)
    {
    if (IsPlayerConnected(i))
    {
    GetPlayerName(i, name, sizeof (name));
    if (strcmp(name, text[pos], true, len) == 0) // Check segment of name
    {
    if (len == strlen(name)) // Exact match
    {
    return i; // Return the exact player on an exact match
    }
    else // Partial match
    {
    count++;
    userid = i;
    }
    }
    }
    }
    if (count != 1)
    {
    if (playerid != INVALID_PLAYER_ID)
    {
    if (count)
    {
    SendClientMessage(playerid, 0xFF0000AA, "Multiple users found, please narrow search.");
    }
    else
    {
    SendClientMessage(playerid, 0xFF0000AA, "No matching user found.");
    }
    }
    userid = INVALID_PLAYER_ID;
    }
    return userid; // INVALID_PLAYER_ID for bad return
    }
    //Funktion-Is Numeric
    IsNumeric(const string[])
    {
    for (new i = 0, j = strlen(string); i < j; i++)
    {
    if (string[i] > '9' || string[i] < '0') return 0;
    }
    return 1;
    }


    //Edit: Stock & Funktion hinzugefügt
    //Edit²: Der Stock ist aus dem englischen SA-MP Forum.
    MFG


    Engelsflügel am Astonkühler, als Schutz vor dem Teufel!

  • Eh nein, da strval aus einem String einen Integer macht (sofern möglich). Also kannst du damit keinen Namen in eine ID verwandeln.
    Du kannst aber alle Spieler mit einer for durchlaufen, von jedem den Namen auslesen und mit inputtext vergleichen (strcmp).

  • Ja, du fragst einfach ab, ob der eingegebene Text ausschließlich aus Zahlen besteht,
    dann machst du strval, andernfalls ReturnUser.


    Nein, ich möchte eben nicht, dass SpielerID = ReturnUser(inputtext); ist.


    Sondern ob man Beispielsweise auch:


    SpielerID = strval(SpielerName(playerid));


    nutzen kann?


    Hagi: Die ID soll ja auch in den Namen verwandelt werden und nicht andersrum :)


    MFG


    Engelsflügel am Astonkühler, als Schutz vor dem Teufel!

  • Ne, das geht nicht, denn:


    strval konvertiert einen string (Zeichnkette) in einen Integer (Ganzzahl).
    Das bedeutet:


    new string[100]="239";
    new nummer;
    nummer = strval(string); // nummer hat jetzt den Wert 239


    ABER:
    new string[100]="Hallo";
    new nummer;
    nummer = strval(string); // nummer hat jetzt wsl. den Wert 0 (weil 'Hallo' nichts ist was er in eine Zahl konvertieren kann)

  • Gut danke euch beiden, also weiterhin ReturnUser benutzen?


    Wollte mein Script aufräumen und wissen obs dafür ne kürzere Funktion gibt.


    Man soll ja in den Dialog Namen & ID eingeben können, Also Name von ID 1: = Test, Wenn Test eingeladen wurde, kriegt dieser Spieler (Test) die Anfrage, und bei ID 1 ebenfalls.


    MFG


    Engelsflügel am Astonkühler, als Schutz vor dem Teufel!

  • do.de - Domain-Offensive - Domains für alle und zu super Preisen
  • Du kannst dir ja eine eigene Funktion basteln.


    Außerdem ist es glaube ich mit ReturnUser möglich sowohl eine Nummer als auch einen Namen einzugeben.


    Joa, das geht ja auch soweit.


    Wollt ja nur das Script etwas kürzen. (Scheint aber nicht möglich zu sein, ohne eigene Funktion zu schreiben)


    Naja hat sich denn wohl erledigt, werds erst mal so lassen.


    Danke euch beiden. :)


    MFG


    Engelsflügel am Astonkühler, als Schutz vor dem Teufel!

  • Naja das geht schon:



    getPlayerIDFromString(idorname[])
    {
    if(strlen(idorname) == 0) return -1;
    new id = -1;
    if(isNumeric(idorname))
    {
    if(!IsPlayerConnected(strval(idorname))) return -1;
    id = strval(idorname);
    }
    else
    {
    for(new i = 0;i<MAX_PLAYERS;i++)
    {
    if(!IsPlayerConnected(i)) continue;
    new pname[24];
    GetPlayerName(i,pname,sizeof(pname));
    if(strcmp(pname,idorname,true) == 0)
    {
    id = i;
    break;
    }
    }
    }
    return id;
    }


  • Gehen tuts zwar, aber wenn würd ich denn doch meine eigene Funktion dazu schreiben, lasse das vorerst so.


    Danke euch dennoch.


    Mit freundlichen grüßen. :)


    Engelsflügel am Astonkühler, als Schutz vor dem Teufel!

  • Wie speicher ich GetTickCount korrekt in einer Datei?


    new Platzi[100];
    new timeMs = ( GetTickCount() - racestart );
    new minuten = (timeMs/60000);
    timeMs -= (minuten * 60000);
    new sekunden = (timeMs/1000);
    format(Platzi,sizeof(Platzi),"/Accounts/Platzierung.txt");
    if(dini_Exists(Platzi) == 0) // Also sie ist nicht da
    {
    dini_Create(Platzi); // Erstellt die Datei
    }
    dini_IntSet(Platzi,"Zeit",???);


    Ich habe jetzt soviel ausprobiert, hat alles nichts genützt immer wurden falsche Zahlen angegeben.
    Ich möchte das Minuten sowie Sekunden gespeichert werden. Muss ich sie einzelnt speichern oder geht das auch nebeneinander?
    Ich hatte das schon einmal richtig, aber ich musste es entfernen und weiß nicht mehr wie's korrekt war.

    KleineHilfe 2.0

  • Wenn ich jemanden mein Perso zeige steht bei beidem mein name!


    dcmd_showlic(playerid,params[])
    {
    new pID, name[MAX_PLAYER_NAME], Oname[MAX_PLAYER_NAME], str1[64], str2[64];
    GetPlayerName(playerid,name,sizeof(name));
    GetPlayerName(pID,Oname,sizeof(Oname));
    if(sscanf(params,"u",pID))return SendClientMessage(playerid,Gelb,"Benutze:/showlic [id]");
    format(str1,sizeof(str1),"Du zeigst %s deine Lizenzen",Oname);
    format(str2,sizeof(str2),"%s zeigt dir seine Lizenzen",name);//3319
    SendClientMessage(playerid,Grün,str1);
    SendClientMessage(pID,Grün,str2);
    ShowLicense(playerid,pID);
    return 1;
    }

    ↓Das ist der Youtube Channel von mir und meinen Kollegen↓



    Sa-Mp Server [Im Aufbau/Beta]
    128.65.216.200:7777


  • new pID... // pID = 0 weil neu definiert
    GetPlayerName(pID,Oname,sizeof(Oname)); //pID ist immer noch 0, da noch kein anderer wert gesetzt wurde
    if(sscanf(params,"u",pID))return SendClientMessage(playerid,Gelb,"Benutze:/showlic [id]"); //pID wird gesetzt
    verstanden ? Es wird immer der Name von ID 0 angezeigt