[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
  • @Whice.


    Danke dir, es funktioniert gut nur ein kleines Problem. Es wird kein Zeilenumbruch gemacht und der Inhalt der Log schaut so aus:


    [CMD LOG]: << JustMe.77 used /test121 >> [CMD LOG]: << JustMe.77 used /hallo123 >> etc


    Aktueller Code



    public OnPlayerCommandText(playerid, cmdtext[])
    {




    new File:log = fopen("command_log.txt", io_append);
    new playername[24], logstring[256];
    GetPlayerName(playerid, playername, 24);
    format(logstring, sizeof(logstring), "[CMD LOG]: << %s used %s >>", playername, cmdtext);
    fwrite(log, logstring);
    fwrite(log, "\n");
    fclose(log);
    }




    Mit freundlichen Grüßen
    JustMe.77 8)

  • @Whice.


    Danke dir, es funktioniert gut nur ein kleines Problem. Es wird kein Zeilenumbruch gemacht und der Inhalt der Log schaut so aus:


    [CMD LOG]: << JustMe.77 used /test121 >> [CMD LOG]: << JustMe.77 used /hallo123 >> etc

    Setz das \n doch direkt in deinen String
    format(logstring, sizeof(logstring), "[CMD LOG]: << %s used %s >>\n", playername, cmdtext);
    da sparst du dir eine Zeile und einen weiteren Funtionsaufruf.


    Mit welchem Editor öffnest du die datei? der Standard Notepad von Windows hat da so seine schwierigkeiten. Notepad++ hingegen stellt es richtig dar. So jedenfalls meine Erfahrung

  • @[LnD]JustMe.77 Das würd ich so nicht sagen, damals als ich mein GF noch auf ini Basis hatte, war das auch so. Da konnte man keinen Account öffnen ohne das nicht alles in einer reihe angezeigt wurde.
    Im Notepad++ hat er alles untereinander angezeigt, halt da wo Zeilenumbrüche waren. Seit dem vertrau ich eigentlich nur noch auf Notepad++. Vor allem weil er auch syntax Highlighting usw kann.


    Versuchs einfach mal: https://notepad-plus-plus.org/download/v6.9.1.html

    • Offizieller Beitrag

    @[LnD]JustMe.77 hier ist mal ein Beispiel



    new File:log = fopen("command_log.txt", io_append);
    new playername[24], logstring[256], hour, minute, second, day, month, year;
    GetPlayerName(playerid, playername, 24);
    getdate(year, month, day);
    gettime(hour, minute, second);
    format(logstring, sizeof(logstring), "[%02d.%02d.%d, %d:%d:%d] [CMD LOG]: << %s used %s >>\n", day, month, year, hour, minute, second, playername, cmdtext);
    fwrite(log, logstring);
    fclose(log);

  • Hey ich weiß nicht aber irgendwas stimmt mit meinem /f befehl nicht. Ich bekomme keine Errors o.Ä.
    ocmd:f(playerid,params[])
    {
    new text[144],name[MAX_PLAYER_NAME];
    if(!isPlayerNotZivi(playerid))return SendClientMessage(playerid,-1,""#error_farbe"Keine Berechtigung");
    if(sscanf(params,"s",text))return SendClientMessage(playerid,-1,"Tippe: /f [text]");
    GetPlayerName(playerid,name,MAX_PLAYER_NAME);
    format(text,144,""#fchat_farbe"*%s %s: %s",f_rang[PlayerInfo[playerid][pFrank]-1],name,params);
    for(new i=0; i<MAX_PLAYERS; i++)
    {
    if(IsPlayerConnected(i) && isPlayerInSameFrak(playerid, i)){
    SendClientMessage(i, -1, text);
    } else {
    printf("%s %s: %s",f_rang[PlayerInfo[playerid][pFrank]-1],name,params);
    }
    }
    return 1;
    }

  • ocmd:f(playerid,params[])
    {
    new text[144],name[MAX_PLAYER_NAME], msg[144];
    if(!isPlayerNotZivi(playerid))return SendClientMessage(playerid,-1,""#error_farbe"Keine Berechtigung");
    if(sscanf(params,"s",text))return SendClientMessage(playerid,-1,"Tippe: /f [text]");
    GetPlayerName(playerid,name,MAX_PLAYER_NAME);
    format(msg,144,""#fchat_farbe"*%s %s: %s",f_rang[PlayerInfo[playerid][pFrank]-1],name,text);
    for(new i=0; i<MAX_PLAYERS; i++)
    {
    if(IsPlayerConnected(i) && isPlayerInSameFrak(playerid, i)){
    SendClientMessage(i, -1, msg);
    } else {
    printf("%s %s: %s",f_rang[PlayerInfo[playerid][pFrank]-1],name,text);
    }
    }
    return 1;
    }

  • ocmd:f(playerid,params[])
    {
    new text[144],name[MAX_PLAYER_NAME], msg[144];
    if(!isPlayerNotZivi(playerid))return SendClientMessage(playerid,-1,""#error_farbe"Keine Berechtigung");
    if(sscanf(params,"s",text))return SendClientMessage(playerid,-1,"Tippe: /f [text]");
    GetPlayerName(playerid,name,MAX_PLAYER_NAME);
    print("Debug - 1");
    printf("%s - %s - %s", name,f_rang[PlayerInfo[playerid][pFrank]-1], text);
    format(msg,144,""#fchat_farbe"*%s %s: %s",f_rang[PlayerInfo[playerid][pFrank]-1],name,text);
    for(new i=0; i<MAX_PLAYERS; i++)
    {
    if(IsPlayerConnected(i) && isPlayerInSameFrak(playerid, i)){
    SendClientMessage(i, -1, msg);
    } else {
    printf("%s %s: %s",f_rang[PlayerInfo[playerid][pFrank]-1],name,text);
    }
    }
    return 1;
    }
    Schreibs mal so und sag was er printet

  • ocmd:f(playerid,params[]){ new text[144],name[MAX_PLAYER_NAME], msg[144]; if(!isPlayerNotZivi(playerid))return SendClientMessage(playerid,-1,""#error_farbe"Keine Berechtigung"); if(sscanf(params,"s",text))return SendClientMessage(playerid,-1,"Tippe: /f [text]"); GetPlayerName(playerid,name,MAX_PLAYER_NAME); print("Debug - 1"); printf("%s - %s - %s", name,f_rang[PlayerInfo[playerid][pFrank]-1], text); format(msg,144,""#fchat_farbe"*%s %s: %s",f_rang[PlayerInfo[playerid][pFrank]-1],name,text); for(new i=0; i<MAX_PLAYERS; i++) { if(IsPlayerConnected(i) && isPlayerInSameFrak(playerid, i)){ SendClientMessage(i, -1, msg); } else { printf("%s %s: %s",f_rang[PlayerInfo[playerid][pFrank]-1],name,text); } } return 1;}
    Schreibs mal so und sag was er printet

    @SynonymousZ er macht das Debug - 1 das darunter nicht mehr


    Er zeigt mir das an:

    Code
    [17:44:59] sscanf warning: Strings without a length are deprecated, please add a destination size.
    [17:44:59] Debug - 1
    [17:44:59] [debug] Run time error 4: "Array index out of bounds"
    [17:44:59] [debug]  Accessing element at index 9 past array upper bound 1
    [17:44:59] [debug] AMX backtrace:
    [17:44:59] [debug] #0 00008fb4 in public ocmd_f (0, 265096) from Hightech_Reallife.amx
    [17:44:59] [debug] #1 native CallLocalFunction () from samp-server.exe
    [17:44:59] [debug] #2 00000264 in public OnPlayerCommandText (0, 265068) from Hightech_Reallife.amx
  • Dann mach das ganze mal so:
    ocmd:f(playerid,params[])
    {
    new text[144],name[MAX_PLAYER_NAME], msg[144];
    if(!isPlayerNotZivi(playerid))return SendClientMessage(playerid,-1,""#error_farbe"Keine Berechtigung");
    if(sscanf(params,"s",text))return SendClientMessage(playerid,-1,"Tippe: /f [text]");
    GetPlayerName(playerid,name,MAX_PLAYER_NAME);
    new p_frank;
    if(PlayerInfo[playerid][pFrank] < 1)p_frank = 1;
    else p_frank = f_rang[PlayerInfo[playerid][pFrank]-1];
    format(msg,144,""#fchat_farbe"*%s %s: %s", p_frank,name,text);
    for(new i=0; i<MAX_PLAYERS; i++)
    {
    if(IsPlayerConnected(i) && isPlayerInSameFrak(playerid, i)){
    SendClientMessage(i, -1, msg);
    } else {
    printf("%s %s: %s",f_rang[PlayerInfo[playerid][pFrank]-1],name,text);
    }
    }
    return 1;
    }

  • Ich musste das umstellen, da mein f_rang aufgebaut ist wie eine Tabelle.
    static const f_rang[][][] = {
    {"Trainee","Police Officer","Detective","Sergeant","Lieutenant","Captain","Commander","Deputy Chief of Police","Assistant Chief of Police","Chief of Police"}, //SAPD
    {"Trainee","Police Officer I","Police Officer II","Sergeant","Lieutenant","Captain","Deputy Chief","Assistant Sheriff","Undersheriff","Sheriff"} //LVPD
    //{"Ersthelfer","Sanitätshelfer","Sanitäter","Rettungshelfer","Rettungssanitäter","Rettungsassistent","Kinderarzt","Notarzt","Leitender Notarzt","Stellv. Chefarzt","Chefarzt"}, //SAMD
    //{"Praktikant","Lehrling","Geselle","Abschlepper","Assistant Kontrolleur","Kontrolleur","Ausbilder","Ordnungshüter","Oberrat","Vize Direktor","Direktor"}, //OAMT
    //{"Praktikant","-","-","-","-","Chefjournalist","Chefredakteur","Redaktionsleitung","Eventsleitung","Stellv. Geschäftsführung","Leitende Geschäftsführung"} //NEWS
    };


    mein Code sieht nun so aus:
    ocmd:f(playerid,params[])
    {
    new text[144],name[MAX_PLAYER_NAME], msg[144];
    if(!isPlayerNotZivi(playerid))return SendClientMessage(playerid,-1,""#error_farbe"Keine Berechtigung");
    if(sscanf(params,"s",text))return SendClientMessage(playerid,-1,"Tippe: /f [text]");
    GetPlayerName(playerid,name,MAX_PLAYER_NAME);
    new p_frank;
    if(PlayerInfo[playerid][pFrank] < 1)p_frank = 1;
    else p_frank = f_rang[PlayerInfo[playerid][pFraction]][PlayerInfo[playerid][pFrank]-1]; //Diese Zeile
    format(msg,144,""#fchat_farbe"*%s %s: %s", p_frank,name,text);
    for(new i=0; i<MAX_PLAYERS; i++)
    {
    if(IsPlayerConnected(i) && isPlayerInSameFrak(playerid, i)){
    SendClientMessage(i, -1, msg);
    } else {
    printf("%s %s: %s",f_rang[PlayerInfo[playerid][pFrank]-1],name,text);
    }
    }
    return 1;
    }


    es kommt dieser Error:
    C:\Users\Patrick\Desktop\San Andreas\gamemodes\Hightech_Reallife.pwn(332) : error 006: must be assigned to an array
    C:\Users\Patrick\Desktop\San Andreas\gamemodes\Hightech_Reallife.pwn(726) : warning 203: symbol is never used: "f_skins"
    Pawn compiler 3.2.3664 Copyright (c) 1997-2006, ITB CompuPhase



    1 Error.


    Hoffe du kannst damit was anfangen und mir das vielleicht erklären warum ich nach f_rang drei "[]" machen muss bei zwei "[]" zeigt er mir den falschen Rank namen an.