[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
  • Es wirkt so, als müsstest du den zweiten Part deiner Abfrage in Zeile 9 negativieren. Rein von der Formulierung würde ich nämlich behaupten, dass du genau das Gegenteil abfragen möchtest, nämlich:

    • fV gleich -1 oder
    • fV ungleich -1 und vehFraktion ungleich pFraktion

    Edit: Nach dem die Funktion gepostet wurde solltest du -1 durch INVALID_PLAYER_ID ersetzen

  • Stellvertretend für @_Max

    Versucht es so:
    if(SpielerDaten[playerid][pFunkgeraet] == 0 || fv != -1 && fVehicle[fv][vehFraktion] == SpielerDaten[playerid][pFraktion])return SendClientMessage(playerid, GRAU, "Du hast kein Funkgerät mit oder sitzt in keinem Fraktionsfahrzeug!");
    zu:
    if(SpielerDaten[playerid][pFunkgeraet] == 0 && (fv == INVALID_VEHICLE_ID || fVehicle[fv][vehFraktion] != SpielerDaten[playerid][pFraktion]))return SendClientMessage(playerid, GRAU, "Du hast kein Funkgerät mit oder sitzt in keinem Fraktionsfahrzeug!");

  • Beitrag von Jeffry ()

    Dieser Beitrag wurde vom Autor aus folgendem Grund gelöscht: Erledigt, Debug nicht mehr notwendig, siehe Edit obiger Post. ().
  • @Jeffry


    Dein Vorschlag klappt leider nicht.


    //edit: War n Fail, klappt doch danke
    //edit: Selbiges bei /d?


    ocmd@2:d,dept(playerid,params[]){ #pragma unused params if(Eingeloggt[playerid] == 0)return SendClientMessage(playerid, GRAU, "Du bist nicht eingeloggt!"); if(SpielerDaten[playerid][pCuffed] == 1)return SendClientMessage(playerid,GRAU,"Du bist gefesselt."); if(SpielerDaten[playerid][pTot] == 1)return SendClientMessage(playerid,GRAU,"Du bist verletzt."); new text[96], string[128], string2[128], fv = IsAFraktionsVeh(playerid); if(sscanf(params, "s[96]", text))return SendClientMessage(playerid, GRAU, "Benutze: (/d)department [Nachricht]"); if(SpielerDaten[playerid][pFunkgeraet] == 0 || fv != -1 && fVehicle[fv][vehFraktion] == SpielerDaten[playerid][pFraktion])return SendClientMessage(playerid, GRAU, "Du hast kein Funkgerät mit oder sitzt in keinem Fraktionsfahrzeug!"); if(!(SpielerDaten[playerid][pFraktion] == 1 || SpielerDaten[playerid][pFraktion] == 2))return SendClientMessage(playerid, GRAU, "Diesen Befehl kannst du nicht nutzen!"); format(string, sizeof(string), "[Staatsfunk] %s [%s]: %s", GetRoleplayName(playerid), GetFrakAbkuerzung(playerid), text); format(string2, sizeof(string2), "[Walki Talki] %s [%s]: %s", GetRoleplayName(playerid), GetRankName(SpielerDaten[playerid][pFraktion], SpielerDaten[playerid][pRank]), text); for(new i=0;i<GetMaxPlayers();i++) { if(Eingeloggt[i] == 1) { if(SpielerDaten[i][pFraktion] == 1 || SpielerDaten[i][pFraktion] == 2) { if(SpielerDaten[playerid][pFunkgeraet] == 0 || fv != -1 && fVehicle[fv][vehFraktion] == SpielerDaten[playerid][pFraktion])return SendClientMessage(playerid, GRAU, "Du hast kein Funkgerät mit oder sitzt in keinem Fraktionsfahrzeug!"); { SendClientMessage(i, HELLBLAU, string); } } else if(SpielerDaten[i][pFraktion] == 3) { SendClientMessage(i, HELLBLAU, string2); } } } return 1;}
    .
    //edit: /d funktioniert jetzt auch, war zu schnell mit posten :)
    Jedoch kann die Polizei den /f also den internen Chat der Medics lesen und anders rum, woran kann das liegen?


    MfG

  • ocmd:suse(playerid,params[])
    {
    if(gPlayerLogged[playerid] == 0)
    {
    SendClientMessage(playerid, COLOR_GREY, " Du bist noch nicht Eingeloggt !");
    return 1;
    }
    if(IsACop(playerid))
    {
    new pid,wid,reason[64];
    if(sscanf(params,"uis[256]",pid,wid,reason))return SendClientMessage(playerid, COLOR_GRAD2, "BENUTZUNG: (/su)spect [playerid/Name] [Verbrechen]");
    if(IsPlayerConnected(playerid))
    {
    if(OnDuty[playerid] != 1 && PlayerInfo[playerid][pMember] == 1)
    {
    SendClientMessage(playerid, COLOR_GREY, " Du bist nicht im Dienst !");
    return 1;
    }
    if(IsACop(pid)) return SendClientMessage(playerid,-1,"Du kannst keinen Polizisten anklagen!");
    if(!IsPlayerConnected(playerid)) return SendClientMessage(playerid,-1,"Der Spieler ist nicht Online!");
    if(gPlayerLogged[pid] == 0)
    {
    SendClientMessage(pid, COLOR_GREY, " Der Spieler ist noch nicht Eingeloggt !");
    return 1;
    }
    if(wid < 1 || wid > 99) return SendClientMessage(playerid,-1,"Du kannst nicht unter 1 oder höher als 99 Wanteds vergeben!");
    if(WantedLevel[pid] > 99) return SendClientMessage(playerid,-1,"Du kannst keinem Spieler über 99 Wanteds geben!");
    WantedLevel[pid] = WantedLevel[pid]+wid;
    SetPlayerCriminal(pid,playerid, reason);
    SetPVarInt(playerid,"Vergabe",wid);
    return 1;
    // PlayerInfo[playerid][pWantedPoints]=PlayerInfo[playerid][pWantedPoints]+wid;
    }
    }
    return 1;
    }


    public SetPlayerCriminal(playerid,declare,reason[])
    {
    if(IsPlayerConnected(playerid))
    {
    PlayerInfo[playerid][pCrimes] += 1;
    new vergabes = GetPVarInt(playerid,"Vergabe");
    new turned[MAX_PLAYER_NAME];
    new turner[MAX_PLAYER_NAME];
    new turnmes[128];
    new wantedmes[128];
    strmid(PlayerCrime[playerid][pAccusedof], reason, 0, strlen(reason), 255);
    GetPlayerName(playerid, turned, sizeof(turned));
    if (declare == 255)
    {
    format(turner, sizeof(turner), "Unbekannt");
    strmid(PlayerCrime[playerid][pVictim], turner, 0, strlen(turner), 255);
    }
    else
    {
    if(IsPlayerConnected(declare))
    {
    GetPlayerName(declare, turner, sizeof(turner));
    strmid(PlayerCrime[playerid][pVictim], turner, 0, strlen(turner), 255);
    strmid(PlayerCrime[declare][pBplayer], turned, 0, strlen(turned), 255);
    strmid(PlayerCrime[declare][pAccusing], reason, 0, strlen(reason), 255);
    }
    }
    format(turnmes, sizeof(turnmes), "Du hast ein Verbrechen begangen ( %s ). Reporter: %s.",reason,turner);
    SendClientMessage(playerid, COLOR_LIGHTRED, turnmes);
    format(wantedmes, sizeof(wantedmes), "Momentanes Wantedlevel: %d", WantedLevel[playerid]);
    SendClientMessage(playerid, COLOR_YELLOW, wantedmes);
    format(wantedmes, sizeof(wantedmes), "Momentanes Wantedleveld: %d", WantedLevel[playerid]);
    SendClientMessage(playerid, COLOR_YELLOW, wantedmes);
    for(new i = 0; i < MAX_PLAYERS; i++)
    {
    if(IsPlayerConnected(i))
    {
    if(IsACop(i))
    {
    format(cbjstore, sizeof(turnmes), "HQ: Alle Einheiten: Reporter: %s",turner);
    SendClientMessage(i, TEAM_BLUE_COLOR, cbjstore);
    format(cbjstore, sizeof(turnmes), "HQ: Verbrechen: %s, Gesuchter: %s",reason,turned);
    SendClientMessage(i, TEAM_BLUE_COLOR, cbjstore);
    format(cbjstore, sizeof(turnmes), "HQ: Vergebene Wanteds: %d, Aktulles Wantedlevel: %d",vergabes,WantedLevel[playerid]);
    SendClientMessage(i, TEAM_BLUE_COLOR, cbjstore);
    }
    }
    }
    //


    }//not connected vergabes
    }


    Ich gebe beispielsweise jemandem 50 Wanteds, nach einem serverneustart hat dieser aber einfach 200 Wanteds?


    Weiß da nicht genau wo ich suchen soll, hab bereits einiges ausprobiert wie
    if(sscanf(params,"uis[",pid,wid,reason))return SendClientMessage(playerid, COLOR_GRAD2, "BENUTZUNG: (/su)spect [playerid/Name] [Verbrechen]");


    auf


    if(sscanf(params,"uis[256]",pid,wid,reason))return SendClientMessage(playerid, COLOR_GRAD2, "BENUTZUNG: (/su)spect [playerid/Name] [Verbrechen]");



    zu ändern, hat schonmal die sscanf warnings "sscanf warning: Strings without a length are deprecated, please add a destination size."



    gefixt aber das andere nicht. Wenn die Wantedanzahl über die 1000 geht, verdoppelt sich die anzahl auch manchmal einfach obwohl nur 50 vergeben wurde (von 1000 auf 2000)

  • Wird es denn schon falsch in die Datenbank/Datei gespeichert, oder was steht dort drin, wenn du den Server beendet hast (ohne ihn zu starten)?

    Genau wenn der Server neustartet, habe gerade geguckt genau beim gmx serverneustart gehts von 400 auf 800 wtds.



    EDIT: Wenn ich den server beende passiert nix wantedzahl bleibt gleich nur beim neustart anscheinend verdoppelt


    Ist übrigens eine Datei.

  • do.de - Domain-Offensive - Domains für alle und zu super Preisen
  • Dann liegt die Vermutung nahe, dass an dieser Stelle der Wert nochmal aufaddiert wird.
    Prüfe, wo du überall in die Variable schreibst, setze gegebenenfalls Prints hin, und prüfe dabei, an welcher Stelle sich der Wert verdoppelt.
    Anhand dessen, weißt du dann, woran es liegt und kannst den Code entsprechend anpassen, oder hier posten.

  • Dann liegt die Vermutung nahe, dass an dieser Stelle der Wert nochmal aufaddiert wird.
    Prüfe, wo du überall in die Variable schreibst, setze gegebenenfalls Prints hin, und prüfe dabei, an welcher Stelle sich der Wert verdoppelt.
    Anhand dessen, weißt du dann, woran es liegt und kannst den Code entsprechend anpassen, oder hier posten.


    Okay also in der Datei steht


    WantedLevel=204800


    Bei /Wanted und Aktulles Wantedlevel steht jedoch was anderes (zur gleichen zeit)


    https://www.pic-upload.de/view-35816136/wtds.png.html
    Es wurden immer 50 wtds vergeben.


    Wie genau kann ich diese Befehle beispielsweise WantedLevel[pid] = WantedLevel[pid]+wid;


    denn loggen per printf(geschrieben)

  • Der Unterschied zwischen Datei und Server kann sich natürlich dadurch erklären, dass der Wert noch nicht fort geschrieben wurde. Da ich den Code nicht kenne, kann ich das aber nicht genau sagen.


    Printf nutzt du so:
    printf("Wanted Level: %d", WantedLevel[pid]);

  • Der Unterschied zwischen Datei und Server kann sich natürlich dadurch erklären, dass der Wert noch nicht fort geschrieben wurde. Da ich den Code nicht kenne, kann ich das aber nicht genau sagen.


    Printf nutzt du so:
    printf("Wanted Level: %d", WantedLevel[pid]);

    Ah okay danke
    Das ist jetzt aus der log.


    Wanted Level bei aktuelles Wantedlevel: 1140850719
    Wanted Level su: 1140850719



    Würde es dir was ausmachen wenn ich dir das script schicken würde?


    Ist nur ein bisschen edtiertes loh script

  • Was genau hat das jetzt zu bedeuten? Ich erkenne daran nichts.


    Kannst du machen, ich weiß allerdings nicht, ob ich heute noch dazu komme, mir es anzuschauen.

    Ich auch nicht wirklich, ist halt die Wantedanzahl die bei "aktuelles wantedlevel" angezeigt wird wenn man den befehl /su ausführt & der andere einfach nur um die aktuelle wantedanzahl per format anzeigen zu lassen.

  • Moin :)


    Habe die Stats neu formatiert, sieht auch erstmal super aus, alles gut.
    Habe aber nun das Problem, das wenn man die /fontsize ändert (auf 0 ist alles richtig),
    sowas dabei raus kommt:



    AddStats("Fische:\t\t\t\t\t\t%d, größter %d LBs", fishes, bigfish);
    AddStats("Materialien:\t\t\t\t\t%d / %d", mats, SaveMats);
    AddStats("Hacking Codes:\t\t\t\t\t%d(+%d) / 100", Codes,SaveCodes);
    AddStats("Drogen:\t\t\t\t\t%d / %d", Drugs, SaveDrugs);
    AddStats("Kondome:\t\t\t\t\t%d", Condom[targetid]);
    AddStats("Donuts:\t\t\t\t\t\t%d", HaveDonuts[targetid]);


    Kann man da was machen?


    Gruß

  • Guten Tag.


    Ich wollte mal ein Admin Befehl machen wo angezeigt wird welche Admins Online sind.
    Leider habe ich lange nicht mehr mit Pawn gearbeitet.


    Ich bräuchte einen denk anstoss.


    Wenn ich alleine auf dem Server bin werde ich nur angezeigt.
    Sobald 2 oder mehr Online sind, wird mich 2 oder mehr angezeigt.


    Wo ist der Fehler ? :S


    Code:



    CMD:admins(playerid)
    {
    if(!Spieler[playerid][pLoggedIn]) return 1;
    new string[64],count;
    SendClientMessage(playerid,Gruen,"Admins Online:");
    for(new i=0;i<GetMaxPlayers();i++)
    {
    if(Spieler[i][pLoggedIn])
    {
    switch(Spieler[i][pAdminlevel])
    {
    case 6: { format(string,sizeof(string),"Projektleiter: %s",Spieler[i][pName]); count++; }
    case 5: { format(string,sizeof(string),"Head Admin: %s",Spieler[i][pName]); count++;}
    case 4: { format(string,sizeof(string),"Admin: %s",Spieler[i][pName]); count++; }
    case 3: { format(string,sizeof(string),"Moderator: %s",Spieler[i][pName]); count++; }
    case 2: { format(string,sizeof(string),"Supporter: %s",Spieler[i][pName]); count++; }
    case 1: { format(string,sizeof(string),"Communityhelfer: %s",Spieler[i][pName]); count++; }
    }
    if(count == 0) return SendClientMessage(playerid,Grau,"Zurzeit ist kein Teammitglied online.");
    SendClientMessage(playerid,Grau,string);
    }
    }
    return 1;
    }




    Ich hoffe es kann mir einer helfen.

  • Ich hoffe es kann mir einer helfen.

    Hier mal etwas schöner:



    Dein Fehler war, dass du das SendClientMessage nicht in die Schleife gesetzt hattest :)

    ast2ufdyxkb1.png


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

  • Hi,
    habe ein wenig am Register und Login Dialog rum gespielt und wollte es hashen, jedoch kommt jetzt gar kein Dialog mehr. XD
    if(dialogid==DIALOG_LOGIN){if(!response)return Kick(playerid);new query[80];new whirlpoolHash[129];WP_Hash(whirlpoolHash, sizeof(whirlpoolHash), inputtext);mysql_format(dbhandle, query, sizeof(query), "SELECT `password` FROM `user` WHERE `username`='%e';", SpielerName(playerid));//mysql_format(dbhandle, query, sizeof(query), "SELECT COUNT(*) AS `count` FROM `accounts` WHERE `username` = '%s' AND `password` = '%e'",SpielerName(playerid), whirlpoolHash);new Cache:result = mysql_query(dbhandle, query);cache_set_active(result);cache_get_value_name(0, "password", query, sizeof(query));if(!isnull(inputtext) && strlen(inputtext) > 4){if(!strcmp(inputtext, query))//SetTimerEx("LoadAccount", 1, false, "d", playerid); // test+SetTimerEx("LoadAccount", 750, false, "d", playerid);else{//SendClientMessage(playerid, COLOR_RED, "Das eingegebene Passwort ist falsch.");ShowPlayerDialog(playerid, DIALOG_LOGIN, DIALOG_STYLE_PASSWORD, "Login", "{FF0000}Das eingegebene Passwort ist falsch!\n\n{FFFFFF}Bitte gebe dein Passwort ein:", "Login", "Abbrechen");}}else{//SendClientMessage(playerid, COLOR_RED, "Bitte gib dein Passwort ein!");ShowPlayerDialog(playerid, DIALOG_LOGIN, DIALOG_STYLE_PASSWORD, "Login", "{FF0000}Das eingegebene Passwort ist falsch!\n\n{FFFFFF}Bitte gebe dein Passwort ein!", "Login", "Abbrechen");}cache_unset_active();cache_delete(result);return 1;}if(dialogid==DIALOG_REGISTER){if(!response)return Kick(playerid);if(!isnull(inputtext) && strlen(inputtext) > 4){new query[128];new whirlpoolHash[129];WP_Hash(whirlpoolHash, sizeof(whirlpoolHash), inputtext);mysql_format(dbhandle, query, sizeof(query), "INSERT INTO user (username, password) VALUES ('%s', '%s')", SpielerName(playerid), inputtext);//mysql_format(dbhandle, query, sizeof(query), "INSERT INTO user (username, password) VALUES ('%s', '%s')", SpielerName(playerid), whirlpoolHash);mysql_query(dbhandle, query);SetTimerEx("LoadAccount", 1500, false, "d", playerid);}else{ShowPlayerDialog(playerid, DIALOG_REGISTER, DIALOG_STYLE_INPUT, "Registrierung", "{FF0000}Dein Passwort muss mindestens 4 Zeichen lang sein!\n\n{FFFFFF}Herzlich Willkommen auf ...!\nEs scheint so, als hättest du noch keinen Account.\nBitte gebe jetzt dein gewünschtes Passwort ein.", "Registrieren", "Abbrechen");}}


    //Edit: Komischerweise steht jetzt auch folgendes im Log:
    [14:53:03] Script[gamemodes/script.amx]: Run time error 19: "File or function is not found"

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