[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
  • Hab den Fehler gefunden...
    das mit den "accounts" war schon richtig aber ich hatte darunter den nächsten Query was noch in eine andere Tabelle den Spieler einfügen soll, dieses bin ich grad am umlegen.


    Dank dir @Jeffry, ich dachte anfangs das ich bei der MySQL Struktur etwas falsches gemacht habe :)



    Habe noch eine Frage, vielleicht könntest dabei kurz helfen.
    Ich möchte die IP adresse des Users splitten... ( bin noch neu was der Funktion split angeht...)


    Würde das folgendermaßen funktionieren?

    Code
    stock SplitIP(playerid)
    {
    	new SplitIP[3], ip[16];
    	GetPlayerIp(playerid, ip, sizeof(ip));
    	if(strval(SplitIP[1] && SplitIP[2] == ip))
    	return //was würde er returnen?
    }

    oder wäre das mit sscanf besser?


  • stock LoadGlobals()
    {
    new strVersion[64], strGameMode[32];
    format(strVersion, sizeof(strVersion), "hostname %s", Servername());
    format(strGameMode, sizeof(strGameMode), "%s %s", GameModeName(), Version());





    SendRconCommand(strVersion);
    SetGameModeText(strGameMode);
    }



    stock Version()
    {
    new str[50];
    format(str, sizeof str, "%s", mysql_GetString("server", "version", "id", "1"));

    mysql_format(handle, str, sizeof(str), "SELECT id FROM server WHERE version = '%e'", PlayerInfo[playerid][pName]);


    return str;
    }



    stock Servername()
    {
    new str[50];
    format(str, sizeof str, "%s", mysql_GetString("server", "name", "id", "1"));
    return str;
    }


    wie würde man dies in R39 auslesen?

  • Wäre das dann so?

    Code
    new ip[16], ergebnis[10];
    GetPlayerIp(playerid, ip, sizeof(ip));
    sscanf(".", "ip<i>[3]", ergebnis);




    @Mystogan warum erstellst du nicht einfach paar defines?
    Wäre das eventuell nicht einfacher? z.B. könntest du Version einfacher ändern und musst nicht in der Datenbank umändern...


    Ja hast ja recht haha
    ich will aber ingesamt 32 varchars/Strings auslesen, und das waren einfach irgendwelche die ich als beispiel dar legte ..

  • wie würde man dies in R39 auslesen?

    Je nach dem wie genau es aussehen soll, eventuell so:
    mysql_pquery(handle, "SELECT name, version FROM server WHERE id = 1;", "OnServer");


    Und dann in einem extra Public:
    forward OnServer();
    public OnServer()
    {
    if(cache_get_row_count() == 0) return 1;


    new strVersion[64], strGameMode[32];
    cache_get_field_content(0, "name", strGameMode, handle);
    cache_get_field_content(0, "version", strGameMode, handle);
    format(strGameMode, sizeof(strGameMode), "%s %s", strGameMode, strVersion);
    SetGameModeText(strGameMode);
    format(strVersion, sizeof(strVersion), "hostname %s", strGameMode);
    SendRconCommand(strVersion);
    return 1;
    }

    Wäre das dann so?

    Warum willst du die IP eigentlich splitten?

  • Warum willst du die IP eigentlich splitten?

    Weil ich die IP's aus er Datenbank vergleichen möchte und die letzten 3 Ziffern ja meist anders sind.
    Deshalb möchte ich bis zum 3. Punkt gesplittet haben und aus der Datenbankvergleichen.
    Nur ich habe bis jetzt nicht viele Funktion von split gescriptet, deshalb bräuchte ich da etwas hilfe ^^


    Kurzes beispiel:
    IP-registriert: 127.0.0.1
    er connected neu aber mit ner anderen ip: 127.0.0.2



    bis zur rot markierten Zahl möchte ich aus der Datenbank vergleichen...



  • Ok.
    Splitte die IP so:
    new zahl[4];sscanf(ip, "p<.>iiii", zahl[0], zahl[1], zahl[2], zahl[3]);


    Dann hast du dort die einzelnen Zahlen drin stehen und kannst die vergleichen.


    Bei vielen ändern sich übrigens die hinteren beiden Ranges der IP.


    muss ich vorher format verwenden?
    Wenn ich es printe werden nur "." angezeigt.


    Code
    new query[56], zahl[4], ip[16];
    GetPlayerIp(playerid, ip, sizeof(ip));
    sscanf(ip, "p<.>iiii", zahl[0], zahl[1], zahl[2], zahl[3]);
    format(query, sizeof(query), "SELECT * FROM tabelle WHERE IP = '%s.%s.%s'", zahl[0], zahl[1], zahl[2]);
    mysql_function_query(dbhandle, query, true, "CheckTabelle", "i", playerid);


    oder vergleiche ich den split grad komplett falsch? ?(:whistling:


    //Edit:
    verbessert von:
    format(query, sizeof(query), "SELECT * FROM accounts WHERE IP = '%s.%s.%s'", zahl[0], zahl[1], zahl[2]);


    zu:
    format(query, sizeof(query), "SELECT * FROM accounts WHERE IP = '%i.%i.%i'", zahl[0], zahl[1], zahl[2]);


    jedoch wird nun folgendes geprintet:


    SQL
    SELECT * FROM tabelle WHERE IP = '0.0.0'
  • Hey! Habe mal wieder eine Frage und zwar: Ich möchte z.B /kick 0000000000000000 <- diese ganzen 0 verweigern bzw. umwandeln in eine 0 nicht mehrere.
    Hoffe man versteht mich.


    Mit freundlichen Grüßen
    Ukthi

  • Lass dir die IP mal per print ausgeben. Ist dort eventuell auch alles 0?

    Ja habe es geprintet, es wird aber nicht 0 angezeigt.
    Folgendes habe ich gemacht:


    Code
    stock SpielerIP(playerid)
    {
    	new getip[16];
    	GetPlayerIp(playerid,getip,sizeof(getip));
    	return getip;
    }


    Code
    new query[56], zahl[4];
    sscanf(SpielerIP(playerid), "p<.>iiii", zahl[0], zahl[1], zahl[2], zahl[3]);
    printf("Zahl 1: %i", zahl[0]);
    printf("Zahl 2: %i", zahl[1]);
    printf("Zahl 3: %i", zahl[2]);
    printf("Zahl 4: %i", zahl[3]);
    format(query, sizeof(query), "SELECT * FROM tabelle WHERE IP = '%i.%i.%i.'", zahl[0], zahl[1], zahl[2]);
    printf(query);
    mysql_function_query(dbhandle, query, true, "NextStep", "i", playerid);


    So habe ich es versucht, auch die Zahlen printen lassen aber es ist immer nur 0...



    //Edit:


    Habe mal was versucht, ich weiß sscanf wäre besser aber hier bekomme ich Werte und nicht ständig 0,

    Code
    new query[56], zahl[4][16];
    split(SpielerIP(playerid), zahl, '.');
    printf("Zahl 1: %i", zahl[0]);
    printf("Zahl 2: %i", zahl[1]);
    printf("Zahl 3: %i", zahl[2]);
    printf("Zahl 4: %i", zahl[3]);
    format(query, sizeof(query), "SELECT * FROM tabelle WHERE IP = '%i.%i.%i.'", zahl[0], zahl[1], zahl[2]);
    printf(query);
    mysql_function_query(dbhandle, query, true, "NextStep", "i", playerid);

    Hier wird mir folgendes geprintet:

    Code
    [11:54:46] Zahl 1: 49
    [11:54:46] Zahl 2: 48
    [11:54:46] Zahl 3: 48
    [11:54:46] Zahl 4: 49
    [11:54:46] SELECT * FROM accounts WHERE IP = '49.48.48.'
  • Als String prüft er doch auch komplett die IP also auch die letzten Zahlen.

    ja wenn du aber die IP "manipulierst" oder router neustartest verändert sich meist die letzten 3 Zahlen.
    So da bringt dann der stringvergleich nichts denn der würde ja prüfen ob die jetztige IP exakt mit der registrierten IP übereinstimmt. Der würde dann bei den letzten Range IP nicht mehr weiterprüfen...
    Deshalb möchte ich die IP gesplittet haben und dann bis auf die letzte Range prüfen ...


    Nur beim splitten komme ich nicht weiter...

  • So habe ich es versucht, auch die Zahlen printen lassen aber es ist immer nur 0...

    Nutzt du das Plugin?



    Habe mal was versucht, ich weiß sscanf wäre besser aber hier bekomme ich Werte und nicht ständig 0,

    format(query, sizeof(query), "SELECT * FROM tabelle WHERE IP = '%i.%i.%i.'", zahl[0], zahl[1], zahl[2]);
    zu:
    format(query, sizeof(query), "SELECT * FROM tabelle WHERE IP = '%i.%i.%i.'", strval(zahl[0]), strval(zahl[1]), strval(zahl[2]));
    Da die Zahlen hier Strings sind (split-bedingt). Oder %i zu %s.

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