problem mit größe der string

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
  • Hey ich bins mal wieder, habe ein problem mit der größe des 'gesamtstrings' oder so, weiß ich nicht genau.
    aufjedenfall kompliliert er schon sofort mit ner komischen meldung, irgendwas von byte größen


    naja wenn ich ingame /stats mache kommt unknown command, die variablen braucht ihr euch eig nicht angucken da ich alles getestet habe und an den liegt es nicht..
    wenn man die letzten beiden den gesamtstring auf ca 1000 macht und format(string5...) ausklammert geht es..



    ShowStats(playerid,targetid)
    {
    new sex[30],spawn[30],nextlevelcost,nextlevel;
    if(sInfo[playerid][gender] == 1) sex = "männlich";
    else if(sInfo[playerid][gender] == 2) sex = "weiblich";
    if(sInfo[playerid][spawnpoint] == SPAWN_LS) spawn="LS";
    else if(sInfo[playerid][spawnpoint] == SPAWN_SF) spawn="SF";
    nextlevel = sInfo[playerid][level]*4+8;
    nextlevelcost = sInfo[playerid][level]*25000;
    new ddays=0,dhours=0,dminutes=0,idays=0,ihours=0,iminutes=0;
    if(sInfo[playerid][donatortime] > 0)
    {
    new timenow=gettime();
    new dresttime=sInfo[playerid][donatortime]-timenow;
    ddays = dresttime/86400;
    dhours = (dresttime-ddays*86400)/3600;
    dminutes = (dresttime-(ddays*86400+dhours*3600))/60;
    }
    if(sInfo[playerid][invitesperre] > 0)
    {
    new timenow=gettime();
    new iresttime=sInfo[playerid][invitesperre]-timenow;
    idays = iresttime/86400;
    ihours = (iresttime-idays*86400)/3600;
    iminutes = (iresttime-(idays*86400+ihours*3600))/60;
    }
    new orgname[256];
    format(orgname,sizeof(orgname),"Keine Organisation");
    for(new i=0;i<sizeof(orgInfo);i++)
    {
    if(sInfo[playerid][orgid] != orgInfo[i][org_id]) continue;
    orgname = orgInfo[i][org_name];
    }
    new caption[50],string1[256],string2[256],string3[256],string4[256],string5[256],savestrings[2000],fID=sInfo[playerid][fraktion];
    format(caption,sizeof(caption),"Statistiken von %s",getPlayerName(playerid));
    format(string1,sizeof(string1),"Level:[%i] Geschlecht:[%s] Alter:[%i] Spawnenergie:[%i] Geld:[$%s($+%s)] Tel.:[%i]",sInfo[playerid][level],sex,sInfo[playerid][older],sInfo[playerid][spawnhealth],GetPoint(sInfo[playerid][money]),GetPoint(sInfo[playerid][bank]),sInfo[playerid][number]);
    format(string2,sizeof(string2),"Accounttyp:[%s] Ehe:[%s] Spielzeit:[%s] Spawn:[%s] Respekt:[%i/%i] NextLevel:[%s$] Eventitems:[%i]",GetAccountTypeName(playerid),sInfo[playerid][ehe],GetPoint(sInfo[playerid][spielstunden]),spawn,sInfo[playerid][respekt],nextlevel,GetPoint(nextlevelcost),sInfo[playerid][eventitems]);
    if(sInfo[playerid][donator] == 1 && sInfo[playerid][invitesperre] > 0) format(string3,sizeof(string3),"Verwarnungen:[%i/3] Donator-Restzeit:[%i Tage, %i Stunden %i Minuten] Invitesperre:[%i Tage, %i Stunden %i Minuten] Minuten seit Payday:[%i]",sInfo[playerid][warns],ddays,dhours,dminutes,idays,ihours,iminutes,sInfo[playerid][paydaytime]);
    else if(sInfo[playerid][donator] == 0 && sInfo[playerid][invitesperre] == 0) format(string3,sizeof(string3),"Verwarnungen:[%i/3] Invitesperre:[Keine Invitesperre] Minuten seit Payday:[%d]",sInfo[playerid][warns],sInfo[playerid][paydaytime]);
    else if(sInfo[playerid][donator] == 1 && sInfo[playerid][invitesperre] == 0) format(string3,sizeof(string3),"Verwarnungen:[%i/3] Donator-Restzeit:[%i Tage, %i Stunden %i Minuten] Invitesperre:[Keine Invitesperre] Minuten seit Payday:[%i]",sInfo[playerid][warns],ddays,dhours,dminutes,sInfo[playerid][paydaytime]);
    else if(sInfo[playerid][donator] == 0 && sInfo[playerid][invitesperre] > 0) format(string3,sizeof(string3),"Verwarnungen:[%i/3] Invitesperre:[%i Tage, %i Stunden %i Minuten] Minuten seit Payday:[%i]",sInfo[playerid][warns],idays,ihours,iminutes,sInfo[playerid][paydaytime]);
    format(string4,sizeof(string4),"Team:[%s] Organisation:[%s] Rank:[%s] Job:[%s]",fInfo[fID][f_name],orgname,GetPlayerRankName(playerid),GetPlayerJobName(playerid));
    format(string5, sizeof(string5),"Materialien:[%i(+%i)] Drogen:[%ig(+%ig)] HackingCodes:[%i(+%i)/100] illegale Fische:[%i(+%i)]",sInfo[playerid][mats],sInfo[playerid][savemats],sInfo[playerid][drogen],sInfo[playerid][savedrogen],sInfo[playerid][codes],sInfo[playerid][savecodes],sInfo[playerid][fische],sInfo[playerid][savefische]);
    format(savestrings,sizeof(savestrings),"[Account]\n%s\n%s\n%s\n\n[Beruf]\n%s\n\n[Besitz]\n%s",string1,string2,string3,string4,string5);
    ShowPlayerDialog(targetid,DIALOG_STATS,DIALOG_STYLE_MSGBOX,caption,savestrings,"Schließen","");
    return 1;
    }

  • Versuche es so:
    ShowStats(playerid,targetid)
    {
    new sex[30],spawn[30],nextlevelcost,nextlevel;
    if(sInfo[playerid][gender] == 1) sex = "männlich";
    else if(sInfo[playerid][gender] == 2) sex = "weiblich";
    if(sInfo[playerid][spawnpoint] == SPAWN_LS) spawn="LS";
    else if(sInfo[playerid][spawnpoint] == SPAWN_SF) spawn="SF";
    nextlevel = sInfo[playerid][level]*4+8;
    nextlevelcost = sInfo[playerid][level]*25000;
    new ddays=0,dhours=0,dminutes=0,idays=0,ihours=0,iminutes=0;
    if(sInfo[playerid][donatortime] > 0)
    {
    new timenow=gettime();
    new dresttime=sInfo[playerid][donatortime]-timenow;
    ddays = dresttime/86400;
    dhours = (dresttime-ddays*86400)/3600;
    dminutes = (dresttime-(ddays*86400+dhours*3600))/60;
    }
    if(sInfo[playerid][invitesperre] > 0)
    {
    new timenow=gettime();
    new iresttime=sInfo[playerid][invitesperre]-timenow;
    idays = iresttime/86400;
    ihours = (iresttime-idays*86400)/3600;
    iminutes = (iresttime-(idays*86400+ihours*3600))/60;
    }
    new orgname[64];
    format(orgname,sizeof(orgname),"Keine Organisation");
    for(new i=0;i<sizeof(orgInfo);i++)
    {
    if(sInfo[playerid][orgid] != orgInfo[i][org_id]) continue;
    orgname = orgInfo[i][org_name];
    }
    new caption[50],string[1024],fID=sInfo[playerid][fraktion];
    format(caption,sizeof(caption),"Statistiken von %s",getPlayerName(playerid));
    format(string,sizeof(string),"[Account]\nLevel:[%i] Geschlecht:[%s] Alter:[%i] Spawnenergie:[%i] Geld:[$%s($+%s)] Tel.:[%i]",sInfo[playerid][level],sex,sInfo[playerid][older],sInfo[playerid][spawnhealth],GetPoint(sInfo[playerid][money]),GetPoint(sInfo[playerid][bank]),sInfo[playerid][number]);
    format(string,sizeof(string),"%s\nAccounttyp:[%s] Ehe:[%s] Spielzeit:[%s] Spawn:[%s] Respekt:[%i/%i] NextLevel:[%s$] Eventitems:[%i]",string,GetAccountTypeName(playerid),sInfo[playerid][ehe],GetPoint(sInfo[playerid][spielstunden]),spawn,sInfo[playerid][respekt],nextlevel,GetPoint(nextlevelcost),sInfo[playerid][eventitems]);
    if(sInfo[playerid][donator] == 1 && sInfo[playerid][invitesperre] > 0) format(string,sizeof(string),"%s\nVerwarnungen:[%i/3] Donator-Restzeit:[%i Tage, %i Stunden %i Minuten] Invitesperre:[%i Tage, %i Stunden %i Minuten] Minuten seit Payday:[%i]",string,sInfo[playerid][warns],ddays,dhours,dminutes,idays,ihours,iminutes,sInfo[playerid][paydaytime]);
    else if(sInfo[playerid][donator] == 0 && sInfo[playerid][invitesperre] == 0) format(string,sizeof(string),"%s\nVerwarnungen:[%i/3] Invitesperre:[Keine Invitesperre] Minuten seit Payday:[%d]",string,sInfo[playerid][warns],sInfo[playerid][paydaytime]);
    else if(sInfo[playerid][donator] == 1 && sInfo[playerid][invitesperre] == 0) format(string,sizeof(string),"%s\nVerwarnungen:[%i/3] Donator-Restzeit:[%i Tage, %i Stunden %i Minuten] Invitesperre:[Keine Invitesperre] Minuten seit Payday:[%i]",string,sInfo[playerid][warns],ddays,dhours,dminutes,sInfo[playerid][paydaytime]);
    else if(sInfo[playerid][donator] == 0 && sInfo[playerid][invitesperre] > 0) format(string,sizeof(string),"%s\nVerwarnungen:[%i/3] Invitesperre:[%i Tage, %i Stunden %i Minuten] Minuten seit Payday:[%i]",string,sInfo[playerid][warns],idays,ihours,iminutes,sInfo[playerid][paydaytime]);
    format(string,sizeof(string),"%s\n\n[Beruf]Team:[%s] Organisation:[%s] Rank:[%s] Job:[%s]",string,fInfo[fID][f_name],orgname,GetPlayerRankName(playerid),GetPlayerJobName(playerid));
    format(string, sizeof(string),"%s\n\n[Besitz]Materialien:[%i(+%i)] Drogen:[%ig(+%ig)] HackingCodes:[%i(+%i)/100] illegale Fische:[%i(+%i)]",string,sInfo[playerid][mats],sInfo[playerid][savemats],sInfo[playerid][drogen],sInfo[playerid][savedrogen],sInfo[playerid][codes],sInfo[playerid][savecodes],sInfo[playerid][fische],sInfo[playerid][savefische]);
    ShowPlayerDialog(targetid,DIALOG_STATS,DIALOG_STYLE_MSGBOX,caption,string,"Schließen","");
    return 1;
    }


    Nutze diese Art von String-Verkettung auch in Zukunft, anstatt mehrere kleine Strings zu einem großen String zusammenzufügen.

  • Okay so funktioniert es, aber kann ich den string denn dann auch unendlich groß machen? Weil ab einer größe von 1405 bekam ich bei kompilieren vorhin so eine komische meldung mit der ich nichts anfangen konnte

  • Unendlich groß geht nicht, da der Compiler den Speicher reservieren muss, und du hast ja keine unendlichen Ressourcen zur Verfügung.
    Wenn du diese Nachricht bekommen solltest, dann schaue wo du Speicher einsparen kannst, und/oder setze das hier unter den Includes hin:
    #pragma dynamic 10000


    Die Zahl kannst du auch größer machen, aber unendlich geht da auch nicht, auch dort ist irgendwann Schluss, also nicht übertreiben und für einen String der maximal 10 Zeichen lang wird 500 Zeichen reservieren.