Beiträge von RG_

    Soll die Länge des Strings also zwischen 1 und 64 liegen? Dann machs so:
    if(strlen(reason) > 1 && strlen(reason) < 64)
    //oder
    new len = strlen(reason);
    if(len >1 && len < 64)

    Achso, wenn also dieses Callback so aussieht:

    public OnPlayerUpdate(playerid)
    {
    return 1;
    }

    Erwartest du also, dass es ggf. mal wenn es grade will 0 ausgibt?
    Hier mal mein altes AFK Sys, vllt kann mans ja gebrauchen:

    #include a_samp
    #undef MAX_PLAYERS
    #define MAX_PLAYERS 32
    new playertimer, playeractive[MAX_PLAYERS], playerafktime[MAX_PLAYERS], str[50];
    forward afkcheck();


    public OnFilterScriptInit(){
    playertimer = SetTimer("afkcheck",1000,1);
    }


    public OnFilterScriptExit(){
    KillTimer(playertimer);
    }


    public afkcheck(){
    for(new i=0;i<MAX_PLAYERS;i++){
    if(!IsPlayerConnected(i)) continue;
    if(!playeractive[i]){
    playerafktime[i]++;
    if(playerafktime[i] >= 4)
    {
    format(str,50,"Desktop/Menü [%d sek]", playerafktime[i]);
    SetPlayerChatBubble(i, str, 0xFFFFFFFF, 50.0, 1000);
    }
    }
    else playerafktime[i] = 0;
    playeractive[i] = 0;
    }
    }



    public OnPlayerUpdate(playerid){
    playeractive[playerid] = 1;
    return 1;
    }


    Nein Kaliber, so wird das nicht funktionieren X(
    Was willst du denn damit bezwecken, dass du das unter Umständen leere Callback "OnPlayerUpdate" aufrufst?
    Du musst via Timer eine Variable immer auf 0 setzen und in OnPlayerUpdate auf 1.
    Dann kannst du an der gewünschten Stelle abfragen, ob die Var den Wert 0 (Inaktiv, Menü/Desktop), oder 1 (Aktiv im Spiel) hat.

    Du frägst einfach ab, ob pID der playerid entspricht
    dcmd_fesselnweg(playerid,params[])
    {
    new pID;
    if(sscanf(params,"u",pID))return SendClientMessage(playerid,COLOR_RED,"Befehl: /fesseln [playerid]");
    if(pID == playerid) return SendClientMessage(playerid,COLOR_RED,"Du kannst dich nicht selbst befreien!");
    if(SInfo[playerid][pLeader] == 4 || SInfo[playerid][pMember] == 4 || SInfo[playerid][pLeader] == 1 || SInfo[playerid][pMember] == 1 || SInfo[playerid][pLeader] == 2 || SInfo[playerid][pMember] == 2)
    {
    new string[300];
    new enname[MAX_PLAYERS];
    GetPlayerName(pID, pname, sizeof(pname));
    GetPlayerName(playerid, enname, sizeof(enname));
    format(string, sizeof(string), "* %s hat es geschafft %s zu entfesseln!", enname, pname);
    ProxDetector(20.0, playerid, string, COLOR_PURPLE,COLOR_PURPLE,COLOR_PURPLE,COLOR_PURPLE,COLOR_PURPLE);
    SInfo[pID][pFesseln] = 0;
    }
    else
    {
    SendClientMessage(playerid,COLOR_RED,"Du bist in keiner Gang/Mafia!");
    }
    return 1;
    }

    So schönen Abend,


    Ich habe mich die letzten Tage mal an ein KalkulationsSystem gewagt, mit dem es möglich ist, "komplexe" Rechenaufgaben, wie z.B. "1+(10-20)*-10*-1+200*((10+9)*-8 )*-1" zu berechnen.
    Zu Anfang gab es noch Probleme mit der Klammernauflösung, dann mit den Minuszahlen. Aber jetzt funktionierten bisher alle meine Testrechenaufgaben.
    Das System ist insgesamt nicht sauber gecodet und wird von mir mit Sicherheit in der nächsten Zeit neu geschrieben. Nur bisher erfüllt es seine Testzwecke gut und ich bin insgesamt zufrieden mit dieser Arbeit.
    Es werden alle Rechenregeln befolgt, d.h. Klammern vor Punkt, Punkt vor Strich.
    Zudem sind Klammern in der Klammer auch kein Problem. Sollte es noch weitere Fehler geben bitte ich euch, dass ihr sie mir in diesem Thread, oder per PM mitteilt :)


    Die Anwendung:
    Die Anwendung ist so simpel, wie bei einem handelsüblichem Taschenrechner. Ihr gebt der Methode "Calc" eine Rechnung an, und sie gibt das Ergebnis im Typ int zurück

    #include Calculator
    public OnFilterScriptInit(){
    printf("ERGEBNIS: %d",Calc("1+(10-20)*-10*-1+200*((10+9)*-8)*-1")); // Ergibt 30301
    return 1;
    }


    Geplant sind noch Funktionen, wie Hoch, Wurzel, Tangenz, Sinus & Kosinus. Allerdings werde ich mir dafür noch zeit lassen, bis das System effizienter und schöner neu geschrieben wurde :)
    Download:
    PasteBin

    Dann such mal schön ;)


    24.01.2012 SA-MP.com:
    http://forum.sa-mp.com/showpost.php?p=1626554&postcount=3

    Nenn mal xPos in Q um...
    Dann haste das selbe.


    Zitat


    Ehm...nicht wirklich ocmd hat gerade mal 40 Zeilen und da sagt keiner
    dass das ein Script Schnipsel ist, aber bei über 100 Zeilen ist es dann
    ein Script Schnipsel ahja :huh:

    40 Zeilen voll durchdachtem Code, der die Handhabung der Cmds deutlicht vereinfacht.
    Deine über 100 Zeilen sind dagegen beiweitem nicht so hilfreich, wie ein solches System.

    Die Bewertungen hier kann ich wiedereinmal absolut nicht nachvollziehen...
    Die Methode "GetVehicleSpeed" findet man 100% identisch in vielen anderen Beiträgen & Foren, noch dazu ist "IsPlayerAtTanke" auch nicht sonderlich schön gelöst. Ein Array wäre dafür viel geschickter, da einerseits die Methode selbst nicht so vollgestopft ist, und es noch dazu viel leichter fällt, neue Tankstellen zu adden (sei es über ein dynamisches System, oder einfach durch bloßes Einfügen der Zeile).
    Zusätzlich ist die Tatsache, dass man nur tanken kann, wenn das Auto über 50% Sprit hat, komplett sinnbefreit. Ich meine, in echt kann ich auch 0.1 Liter tanken, wenn ich Lust und Laune hab...
    Zuguterletzt ist zu sagen, dass das keine Include, sondern eher ein zusammengeschusteter Scriptschnipsel ohne nennenswerte Besonderheiten ist. Der Sprit kostet ja nichtmal was und es gibt auch keinerlei Anzeigen, die es für den Spieler ersichtlich machen, wieviel Sprit er denn noch in seinem Auto hat. Hierbei wäre ein von dir erstellter Textdraw vielleicht doch noch sehr wünschenswert gewesen.

    Wo erstellst du denn den String cmd? Ich sehe darin auch keine Zuweisung... Denn wenn cmd leer ist, dann gleicht strcmp einen leeren String mit dem String "/licht" ab, dabei returnt strcmp immer null, falls einer der beiden Strings leer ist.
    Die Zuweisung sieht in der Regel (GF) so aus:

    public OnPlayerCommandText(cmdtext[])
    {
    new idx,cmd[64]; //Da bei dir anscheinend cmd global definiert ist, kannst/musst du das "cmd" hier dann auch weglassen, oder die globale Definition löschen
    cmd = strtok(cmdtext, idx);
    }

    format(string, sizeof(string), "Admin: %s Grund: %s Zeitpunkt des Bans: (%d-%d-%d)", sendername, (result),month,day,year);
    SendClientMessage(playerid,COLOR_LIGHTRED, string);
    ---------------------------^
    ---------------------------|
    Hier muss der Spieler hin, der die Nachricht erhalten soll (playerid?)


    Mach doch:
    new pos = strfind(str,"$$",true);
    while(pos != -1){
    strdel(str,pos,pos);
    pos = strfind(str,"$$",true);
    }


    if(newstate == PLAYER_STATE_DRIVER)
    {
    new Vehicle = GetPlayerVehicleID(playerid);
    if(Vehicle == rentroller3 ||vehicle == rentroller2 || vehicle == rentroller2)
    {
    SendClientMessage(playerid,Gelb,"Mit /rentroller kannst du diesen Roller mieten, wenn du nicht möchtest, dann /exit.");
    TogglePlayerControllable(playerid,0);
    return 1;
    }
    }
    }


    public OnPlayerExitVehicle(playerid, vehicleid)
    {
    new Vehicle = GetPlayerVehicleID(playerid);
    if(Vehicle == rentroller3 ||vehicle == rentroller2 || vehicle == rentroller2)
    {
    SetVehicleToRespawn(GetPlayerVehicleID(playerid)); //Respawnt den Rentroller
    }
    return 1;
    }

    @byBSE
    Oder:
    mysql_SetString("accounts","Verwarnungen","Verwarnungen + 1","Name",SpielerInfo[pID][pName]);


    Oder alternativ einfach den Query manuell erstellen:

    new str[64];
    format(str,sizeof str, "UPDATE accounts SET Verwarnungen = Verwarnungen + '1' WHERE Name = '%s'",SpielerInfo[pID][pName]);
    mysql_query(str);

    Das mit dem \n ist ganz einfach:
    ocmd:test(playerid,params[])
    {
    new File:BusiBank = fopen("Startup.txt",io_read);
    new read[128],str[256];//Größen sollten je nach Inhalt der TXT angepasst werden
    while(fread(BusiBank,read))
    {
    format(str,sizeof str, "%s\n%s",str,read);//Mit jeder neu gelesenen Zeile adden wir einfach manuel ein \n
    }
    ShowPlayerDialog(playerid,DIALOG_BANLIST,DIALOG_STYLE_MSGBOX,"{33AA33}Bannliste",str,"Okay","");
    return 1;
    }
    //edit, es sollte dann auch str und nicht read ausgegeben werden...