[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 hatte bisher ein Script auf dini basierend gebastelt und sammel nun meine ersten Erfahrungen mit MySQL. Wie muss ich die Syntax umgestalten um einen Eintrag in der Datenbank zu ändern, wie z.B. den Userlevel? Ich habe bisher das:


    ocmd:setlevel(playerid,params[]){ new pid,level,sname[MAX_PLAYER_NAME]; pInfo[playerid][pLevel] = mysql_GetInt("spieler", "Level", "Name", pInfo[playerid][pName]); if(pInfo[playerid][pLevel] > 2) { if(sscanf(params,"ii",pid,level)) return SendClientMessage(playerid,COLOR_RED,"[Fehler]: Benutze /setlevel [ID][Level]"); { GetPlayerName(pid,sname,sizeof(sname)); mysql_SetInt("spieler", "Level", pInfo[playerid][pLevel], "Name", pInfo[playerid][pName]); } } return 1;}

    "Dem wird befohlen, der sich nicht selbst gehorchen kann" - Friedrich Nietzsche

  • Nun, wie wahrscheinlich ist es, dass die bindip eingetragen ist? Wenn man jetzt mal so von gesponsorten/gemieteten Servern ausgeht, oder ggf von Server auf dem eigenen vServer. Ist die standardmäßig eingetragen oder nur, wenn man selbst "Lust darauf hat"?


    Mein CS:GO Server: 62.75.168.39:27016


    Ich bin so hungrig, dass ich vor lauter Durst nicht weiß, was ich rauchen soll - so müde bin ich!
    Freedom is just another word for 'Nothing left to lose'

  • Da BlackAce der Waschlappen schon weg ist, muss mir irgendnen anderer Script-Guru mal kurz behilflich sein:
    Gibt es eine Funktion von PAWN um die SERVER IP + Port auszugeben, auf der das besagte Filter-Script gerade läuft?


    / Edit: Achja und gegebenfalls vielleicht noch den Servernamen? ;)


    Um den Hostname zu bekommen:
    new hname[64];
    GetServerVarAsString("hostname",hname,sizeof hname);
    printf("Hostname: %s",hname);
    Das mit der IP ist schon kniffliger, es geht glaube ich nur, wenn in der server.cfg beim "bind" eine IP angegeben ist:
    static sIP[16];
    GetServerVarAsString("bind",sIP,sizeof sIP);
    printf("IP: %s",sIP);
    Wie gesagt, funktioniert nur, wenn in der server.cfg unter "bind" die zu bindende IP angegeben ist, andernfalls geht das ganze glaube ich nicht.
    Edit: Nein soweit ich weiß, geht das ganze anders nicht, als die Lösung mit bind, und nein, die ist standardmäßig nicht angegeben.


    LG

    Main: CPU: Intel Core i5-4440 @ 3,10 GHz | CPU-Cooling: Matterhorn -PURE- | RAM: 16GB Crucial Ballistix Sport DDR3-1600 DIMM CL9-9-9-24 |
    Motherboard: ASRock B85M Pro4 | GPU: Sapphire Radeon R9 390X Nitro 8GB GDDR5 |

    SSD: Samsung SSD 840 Evo 500GB | Power Supply: 550 Watt Corsair CS Series Modular 80+ Gold | Case: beQuiet! Silent Base 800


    As I walk through the valley of the shadow of death
    I take a look at my life and realize there's nothin' left.

  • Hab auch grad festgestellt, die IP krieg ich auf anderem Wege heraus, Servername reicht also und der sollte ja normalerweise in der Config vorhanden sein, denke ich, oder? ^^


    Mein CS:GO Server: 62.75.168.39:27016


    Ich bin so hungrig, dass ich vor lauter Durst nicht weiß, was ich rauchen soll - so müde bin ich!
    Freedom is just another word for 'Nothing left to lose'

  • Hab auch grad festgestellt, die IP krieg ich auf anderem Wege heraus, Servername reicht also und der sollte ja normalerweise in der Config vorhanden sein, denke ich, oder?


    Naja wenn du einen anderen Weg gefunden hast, die Server-IP zu bekommen, könntest du uns diesen ja mal zeigen ;)
    Ja der hostname wird ja, falls er im Script zur Laufzeit verändert wird mit dem "SendRconCommand" auch in der Server.CFG angepasst, also geht das schon so mit dem Hostname.


    LG


    Edit: Anscheinend spinnt die Zitieren Funktion ein bissl

    Main: CPU: Intel Core i5-4440 @ 3,10 GHz | CPU-Cooling: Matterhorn -PURE- | RAM: 16GB Crucial Ballistix Sport DDR3-1600 DIMM CL9-9-9-24 |
    Motherboard: ASRock B85M Pro4 | GPU: Sapphire Radeon R9 390X Nitro 8GB GDDR5 |

    SSD: Samsung SSD 840 Evo 500GB | Power Supply: 550 Watt Corsair CS Series Modular 80+ Gold | Case: beQuiet! Silent Base 800


    As I walk through the valley of the shadow of death
    I take a look at my life and realize there's nothin' left.

  • Naja wenn du einen anderen Weg gefunden hast, die Server-IP zu bekommen, könntest du uns diesen ja mal zeigen ;)

    Hole ich mir mittels PHP während des HTTP Requests ;p Der Port muss, soweit ich mich entsinne ja auch zwangsläufig in der Cfg stehen, richtig?


    Mein CS:GO Server: 62.75.168.39:27016


    Ich bin so hungrig, dass ich vor lauter Durst nicht weiß, was ich rauchen soll - so müde bin ich!
    Freedom is just another word for 'Nothing left to lose'

  • Hole ich mir mittels PHP während des HTTP Requests ;p Der Port muss, soweit ich mich entsinne ja auch zwangsläufig in der Cfg stehen, richtig?


    Ja der Port steht auch in der Server.cfg unter "port".


    LG

    Main: CPU: Intel Core i5-4440 @ 3,10 GHz | CPU-Cooling: Matterhorn -PURE- | RAM: 16GB Crucial Ballistix Sport DDR3-1600 DIMM CL9-9-9-24 |
    Motherboard: ASRock B85M Pro4 | GPU: Sapphire Radeon R9 390X Nitro 8GB GDDR5 |

    SSD: Samsung SSD 840 Evo 500GB | Power Supply: 550 Watt Corsair CS Series Modular 80+ Gold | Case: beQuiet! Silent Base 800


    As I walk through the valley of the shadow of death
    I take a look at my life and realize there's nothin' left.

  • weiss einer ob die Funktion auch für Rcon geht sonst könnzlten Fitersctopts sehr gefährlich werden
    Wenn man nichz einen sehr einfachen Code kennt


    Bitte was, ich versteht nicht ganz was du meinst ?

    Main: CPU: Intel Core i5-4440 @ 3,10 GHz | CPU-Cooling: Matterhorn -PURE- | RAM: 16GB Crucial Ballistix Sport DDR3-1600 DIMM CL9-9-9-24 |
    Motherboard: ASRock B85M Pro4 | GPU: Sapphire Radeon R9 390X Nitro 8GB GDDR5 |

    SSD: Samsung SSD 840 Evo 500GB | Power Supply: 550 Watt Corsair CS Series Modular 80+ Gold | Case: beQuiet! Silent Base 800


    As I walk through the valley of the shadow of death
    I take a look at my life and realize there's nothin' left.

  • Ah alles klar, danke. Jetzt hab ich nur noch eine klitzekleine Frage *rumnerv* :D


    Wie kann ich noch gleich mit strcmp Parameter bei der Eingabe abfragen? Es war irgendwie mit strtok oder so, glaub ich. (Bevor das vorgeschlagen wird, nein ich möchte nicht auf scanff zurückgreifen, mein FilterScript soll und muss include-unabhängig laufen :p)


    Mein CS:GO Server: 62.75.168.39:27016


    Ich bin so hungrig, dass ich vor lauter Durst nicht weiß, was ich rauchen soll - so müde bin ich!
    Freedom is just another word for 'Nothing left to lose'

  • Du musst den Text splitten:


    if(strcmp(cmdtext,"/kick",true,5)==0) // die 5 bedeutet, dass nur die ersten 5 Zeichen überprüft werden
    [
    new string[5];
    strmid(string,cmdtext,6,strlen(cmdtext)); // Speichern des Parameters in "string"
    new id=strval(string); // String wird zu einem Integer
    Kick(id); // Kick ihn
    }


    //edit: Strtok funktioniert folgendermaßen:


    new cmdtext[128]="/veh 411 0 0"; // Das ist unser cmdtext
    new cmd[128];
    new idx; // Die zwei Variablen brauchen wir für strtok
    cmd = strtok(cmdtext, idx); // Das erste Wort wird in "cmd" gespeichert


    if(strcmp(cmd,"/veh",true)==0)
    {
    new model[32];
    model=strtok(cmdtext,idx); // Zweiter Parameter wird in "model" gespeichert
    new color[2][32];
    color[0]=strtok(cmdtext,idx); // Dritter Parameter wird in "color[0]" gespeichert
    color[1]=strtok(cmdtext,idx); // Vierter Parameter wird in "color[1]" gespeichert
    new Float:x,Float:y,Float:z;
    GetPlayerPos(playerid,x,y,z);
    CreateVehicle(strval(model),x,y,z,0,strval(color[0]),strval(color[1]));
    return 1;
    }


    Hier strtok:


    strtok(const string[], &index)
    {
    new length = strlen(string);
    while ((index < length) && (string[index] <= ' '))
    {
    index++;
    }


    new offset = index;
    new result[20];
    while ((index < length) && (string[index] > ' ') && ((index - offset) < (sizeof(result) - 1)))
    {
    result[index - offset] = string[index];
    index++;
    }
    result[index - offset] = EOS;
    return result;
    }

    Einmal editiert, zuletzt von Pille ()

  • Ah alles klar, danke. Jetzt hab ich nur noch eine klitzekleine Frage *rumnerv* :D


    Wie kann ich noch gleich mit strcmp Parameter bei der Eingabe abfragen? Es war irgendwie mit strtok oder so, glaub ich. (Bevor das vorgeschlagen wird, nein ich möchte nicht auf scanff zurückgreifen, mein FilterScript soll und muss include-unabhängig laufen :p)


    du willst also Commands ohne a_samp Includes benutzen?
    Viel glück :thumbup:


    Zum Problem: schreib dir ein eigenes Splitt Verfahren hier im Forum gibts genug Beispiele

  • Wie kann ich noch gleich mit strcmp Parameter bei der Eingabe abfragen? Es war irgendwie mit strtok oder so, glaub ich. (Bevor das vorgeschlagen wird, nein ich möchte nicht auf scanff zurückgreifen, mein FilterScript soll und muss include-unabhängig laufen :p)


    Ich habe eine Sscanf Funktion geschrieben gehabt, mit der kannst du das machen und auch ohne Include und die ist sogar schneller als die von Y_LESS ;)


    Hier: http://forum.sa-mp.de/san-andr…eschnipsel-45#post1448534


    mfg. :thumbup:

    ast2ufdyxkb1.png


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


  • new string[4075];


    Höher gehts nicht ;)


    Doch da geht mehr es ist abhängig davon wie viel Memory zur verfügung steht normal macht er lokal definierten variabeln bei 4096 Zellen dicht / 16KB. Dann bekommt man auch die nette Fehlermeldung erstmal vom kompiler sollte man dies nicht beachten so kommt es zum
    crash vom server mit der Meldung
    Run time error 3: "Stack/heap collision (insufficient stack size)"
    Man kann jedoch auch den Memory via #pragma dynamic oder auch #emit erhöhen.
    Dieser Wert bezieht sich auf einen anderen (stack/heap)Memory Block als global definierte variabeln. Diese werden
    in der .amx gespeichert.


    Zu dem kannst du ja gerne mal nach limit suchen in der Pawn_Language_Guide.pdf
    http://www.compuphase.com/pawn/Pawn_Language_Guide.pdf

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