[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
  • @LeonMrBonnie


    Habe das ganze mal Versucht nur mit "IsPlayerConnected" abzufragen, bleibt das gleiche, habe die Vermutung das es an diesem Stock liegt. (?)



    Aktueller Befehl:
    CMD:admins(playerid, params[])
    {
    if(!PlayerInfo[playerid][LoggedIn])return NO_CONYOURSELF

    new rows, strDialog[512], strArt[64] = "{FFFFFF}Name:\tRang[Level]\tStatus\n";
    new Cache:result = mysql_query(Handle, "SELECT `Name`, `Adminrang`, `LastOnline` FROM `PLAYERS` WHERE `Adminrang` > 0 ORDER BY `Adminrang` DESC LIMIT 0, 15");
    cache_get_row_count(rows);

    if(rows)
    {
    new admName[25], admRang, LastOnline[30];


    for(new i; i < rows; i++){
    cache_get_value_name(i, "Name", admName, 25);
    cache_get_value_name(i, "LastOnline", LastOnline, 30);
    cache_get_value_name_int(i, "Adminrang", admRang);

    new isOnline = GetID(admName);

    if(IsPlayerConnected(isOnline)){
    format(strDialog, sizeof(strDialog), "%s{FFFFFF}%s\t%s[%d]\t{00CC00}• {FFFFFF}Online", strDialog, admName, GetPlayerAdminRang(isOnline), admRang);
    }else{
    format(strDialog, sizeof(strDialog), "%s{FFFFFF}%s\t%s[%d]\t%s", strDialog, admName, GetPlayerAdminRang(isOnline), admRang, LastOnline);
    }
    strcat(strArt, strDialog);
    printf("DEBUG - String:\n%s", strDialog);
    }
    cache_delete(result);

    ShowPlayerDialog(playerid, DIA_ERROR, DIALOG_STYLE_TABLIST_HEADERS, "{CC6600}"#SERVER_NAME" {FFFFFF}- Teammitglieder", strDialog, "Schließen", "");
    }
    return 1;
    }



    stock "GetID"
    GetID(name[])
    {
    for(new i, j = GetPlayerPoolSize(); i <= j; i++)
    {
    new playeRname[MAX_PLAYER_NAME+1];
    GetPlayerName(i, playeRname, sizeof(playeRname));


    if(!strcmp(PlayerInfo[i][Name], name, true)) return i;
    }
    return INVALID_PLAYER_ID;
    }

    Bestes Zitat des Jahres von Max Jackson!
    Vertrauen kann man mir auch, ich bin hier auf Breadfish schon sehr lange Aktiv und das sollte schon auf einer gewissen Weise, eine Vertrauensbasis schaffen. Ich meine, meine schlimmste Verwarnung war lediglich eine Morddrohung - Is ja nix.

  • Leider auch ohne Erfolg, die Funktion schaut nun so aus, Fehler bleibt leider ebenfalls der gleiche.



    GetID(name[])
    {
    new playeRname[MAX_PLAYER_NAME+1];
    for(new i=GetPlayerPoolSize(); i!=-1; i--){
    if(IsPlayerConnected(i)){
    GetPlayerName(i, playeRname, sizeof(playeRname));
    if(!strcmp(PlayerInfo[i][Name], name, true))return i;
    }
    }
    return INVALID_PLAYER_ID;
    }

    Bestes Zitat des Jahres von Max Jackson!
    Vertrauen kann man mir auch, ich bin hier auf Breadfish schon sehr lange Aktiv und das sollte schon auf einer gewissen Weise, eine Vertrauensbasis schaffen. Ich meine, meine schlimmste Verwarnung war lediglich eine Morddrohung - Is ja nix.

  • Erkennt einer von euch den Fehler und kann mir diesen Fehler ebenfalls auch erklären?

    Also eigentlich ganz einfach: Du ersetzt deinen Code erstmal mit folgendem:



    GetID(name[]) {
    new playerid = INVALID_PLAYER_ID, playeRname[MAX_PLAYER_NAME+1];
    for(new i=GetPlayerPoolSize(); i!=-1; i--) {
    if(!IsPlayerConnected(i)) continue;
    GetPlayerName(i, playeRname, sizeof(playeRname));
    if(!strcmp(PlayerInfo[i][Name], name, true)) {
    playerid = i;
    break;
    }
    }
    return playerid;
    }
    //ungetestet, dürfte aber funktionieren; bin eher der Fan davon, wenn man auch Schleifen richtig mit break beendet und dann erst die value returnt... :p

    Bevor du diese Funktion verwendest, musst du abfragen, ob GetID("name") != INVALID_PLAYER_ID und der Spieler auch connected ist!
    Wenn das der Fall ist, funktioniert der Code auch.


    Dein Problem ist hierbei, dass du auf denen Spieler-Array zugreifst mit einer ID, die über der maximal deklarierten Grenze liegt. INVALID_PLAYER_ID ist nämlich größer als MAX_PLAYERS. Damit ist dein Array auch zu klein. ^^

  • C
    format(string_tmp1, sizeof(string_tmp1), "(%s) %d", getMonat(Month), Year);
        	AHVehTypes1[FahrzeugID][AHVbaujahr] = string_tmp1;

    Die Variable wird als String gesetzt AHVbaujahr[20]




    C
    PCar[playerid][d][P_Baujahr] = AHVehTypes1[i][AHVbaujahr];

    Jetzt will ich den String übertragen auf eine andere Variable P_Baujahr[20]


    Die erste Variable zeigt mir nur 1 Zeichen an "(" und die 2. Variable zeigt mir alles richtig an.
    Woran liegt das?

    wm2c6p1.png
    Ich weiß, dass ich weiß, dass ich nichts weiß.

  • Strings weist du einer Variable am besten immer per:



    Code
    //FORMAT
    
    
    format(PCar[playerid][d][P_Baujahr], LÄNGE, AHVehTypes1[i][AHVbaujahr]);


    zu.


    Sollte so funktionieren, wenn du die LÄNGE dazuschreibst :D

    MfG. Adrian

  • Also eigentlich ganz einfach: Du ersetzt deinen Code erstmal mit folgendem:
    GetID(name[]) { new playerid = INVALID_PLAYER_ID, playeRname[MAX_PLAYER_NAME+1]; for(new i=GetPlayerPoolSize(); i!=-1; i--) { if(!IsPlayerConnected(i)) continue; GetPlayerName(i, playeRname, sizeof(playeRname)); if(!strcmp(PlayerInfo[i][Name], name, true)) { playerid = i; break; } } return playerid;}//ungetestet, dürfte aber funktionieren; bin eher der Fan davon, wenn man auch Schleifen richtig mit break beendet und dann erst die value returnt... :p
    Bevor du diese Funktion verwendest, musst du abfragen, ob GetID("name") != INVALID_PLAYER_ID und der Spieler auch connected ist!
    Wenn das der Fall ist, funktioniert der Code auch.


    Dein Problem ist hierbei, dass du auf denen Spieler-Array zugreifst mit einer ID, die über der maximal deklarierten Grenze liegt. INVALID_PLAYER_ID ist nämlich größer als MAX_PLAYERS. Damit ist dein Array auch zu klein. ^^

    Ich danke dir für die Antwort, habe es mitlerweile so gelöst, was komischerweise bisher Problemlos Funktioniert.


    Sollte ich dennoch lieber etwas am Code ändern oder kann ich es bedenkenslos so lassen?

    Der Befehl:
    CMD:admins(playerid, params[])
    {
    if(!PlayerInfo[playerid][LoggedIn])return NO_CONYOURSELF

    new rows, Cache:result = mysql_query(Handle, "SELECT `Name`, `Adminrang`, `LastOnline` FROM `PLAYERS` WHERE `Adminrang` > 0 ORDER BY `Adminrang` DESC");
    cache_get_row_count(rows);

    if(rows){
    new strDialog[512], admName[MAX_PLAYER_NAME], admLastOnline[32], OnlineString[64], admRang;

    for(new i; i < rows; i++){
    cache_get_value_name(i, "Name", admName, MAX_PLAYER_NAME);
    cache_get_value_name(i, "LastOnline", admLastOnline, 32);
    cache_get_value_name_int(i, "Adminrang", admRang);


    new isOnline = GetID(admName);
    if(IsPlayerConnected(isOnline)){
    format(OnlineString, sizeof(OnlineString), "{00CC00}• {FFFFFF}Online {00CC00}•");
    }else{format(OnlineString, sizeof(OnlineString), "{B32D00}• {FFFFFF}%s {B32D00}•", admLastOnline);}
    format(strDialog, sizeof(strDialog), "{FFFFFF}%s%s\t{CC6600}%s\t{FFFFFF}%s\n", strDialog, admName, admin_rang[admRang], OnlineString);
    }
    format(strDialog, sizeof(strDialog), "{FFFFFF}Name:\t{FFFFFF}Rang:\t{FFFFFF}Status:\n%s", strDialog);
    ShowPlayerDialog(playerid, DIA_ERROR, DIALOG_STYLE_TABLIST_HEADERS, "{CC6600}"#SERVER_NAME" {FFFFFF}Teammitgliederg", strDialog, "Schließen", "");
    }
    cache_delete(result);
    return 1;
    }


    stock GetID(name[])
    {
    for(new i=GetPlayerPoolSize(); i!=-1; i--){
    if(IsPlayerConnected(i)){
    new playeRname[MAX_PLAYER_NAME+1];
    GetPlayerName(i, playeRname, sizeof(playeRname));
    if(!strcmp(name, playeRname, true))return i;
    }
    }
    return INVALID_PLAYER_ID;
    }


    Mit freundlichen Grüßen,

    Bestes Zitat des Jahres von Max Jackson!
    Vertrauen kann man mir auch, ich bin hier auf Breadfish schon sehr lange Aktiv und das sollte schon auf einer gewissen Weise, eine Vertrauensbasis schaffen. Ich meine, meine schlimmste Verwarnung war lediglich eine Morddrohung - Is ja nix.

  • Beitrag von FutureStunt ()

    Dieser Beitrag wurde vom Autor aus folgendem Grund gelöscht: selbst gefixxt ().
  • do.de - Domain-Offensive - Domains für alle und zu super Preisen
  • habs grad selber hingekriegt, hab hinter where ein komma zu viel gesetzt

  • *** Streamer Plugin: Include file version (0x294) does not match plugin version (0x291) (script might need to be recompiled with the correct include file).


    Kann mir einer sagen warum?


    Habe die akuellen Streamer + Plugins hinzugefügt und neu compeliert.

  • *** Streamer Plugin: Include file version (0x294) does not match plugin version (0x291) (script might need to be recompiled with the correct include file).


    Kann mir einer sagen warum?


    Habe die akuellen Streamer + Plugins hinzugefügt und neu compeliert.

    Anscheinend ja nicht.


    Include version ist neuer als die version vom plugin.

  • Ja, habe die 2 Plugins aus diesen ordner genommen und in den Plugin ordner reingezogen und ersetzt.


    Das Plugin also die dll, und so wurde zuletzt geändert 24.10.2018 um 11:07 - die dll und die so um 11:25
    die in diesen ordner sich befindet.


    E:


    siehe Server LOG


  • [30/06/2019 15:50:32] *** Streamer Plugin: Include file version (0x293) does not match plugin version (0x291) (script might need to be recompiled with the correct include file)

    Include und Plugin passen immer noch nicht zusammen, hast du die .inc Datei auch in den Pawno Include Ordner gepackt bzw. das richtige Plugin in den Plugin Ordner?

  • Natürlich, wüsste sonst nicht wohin man das packen sollte weil das ja ein include ist und die maps ja per gm undso laden kannst.


    Habe so ein fehler nie gehabt habe immer perfect akualisiert ohne probleme aber ich versuche die ganze zeit das ganze neu zu ersetzen klappt trd nicht.

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