Beiträge von Hagi

    Es kann sein, dass das Object MAX_WEAPONS schon existiert, vom Script her


    Wenn es oben unter den includes steht mach einfach das



    #undef MAX_WEAPONS
    #define MAX_WEAPONS 14

    Du könntest das LSPD Interior nehmen, den Duchgang zu den Zellen mit einer schönen Tür versperren.


    Dann hast du besprechungsraum, Umkleide und Eingangsschalter


    Ich hab das auch mal als Einsatzleitstelle "missbraucht" benutzt

    Hab den Parameter Rotation vergessen


    new Float:x,Float:y,Float:z,Float:rot;
    GetPlayerPos(playerid,x,y,z);
    GetPlayerFacingAngle(playerid,rot);
    CreateVehicle(model,x+1,y+1,z+1,rot,farbe1,farbe2,respawndelay);


    Übrigens hier zum nachlesen


    Klick

    Also wenn du nur die Verschiebung der Koordinaten haben willst, dann mach es so


    new Float:x,Float:y,Float:z;
    GetPlayerPos(playerid,x,y,z);
    CreateVehicle(model,x+1,y+1,z+1,farbe1,farbe2,respawndelay);


    Das erstellt das Auto auf allen Achsen um 1 verschoben.
    Dadurch zerquetscht dich das Auto nicht

    /Save wo er sein soll


    dann


    SetPlayerCheckpoint(playerid,x,y,z,5.0); // x,y,z holst du dir aus savedpositions wo du /save gemacht hast


    Und unter OnPlayerEnterCheckpoint


    DisablePlayerCheckpoint(playerid);

    Ich möchte das gerne haben, da meine BAdwordsliste ja unendlich groß werden kann, sprich ich muss im script das static maxbadwords sehr hoch halten, damit immer alle badwords geladen werden.
    Doch ein großes static bedeutet doch immer einen großen specherverlust bzw ressourcenverbrauch.


    Daher würde ich gerne in der Datei wo die badwords stehen direkt reinschreiben wie viele wörter es sind, diese INformation geladen werden und als maximale arraygröße geladen werden.

    Das heißt, man müsste eine non-static variable nehmen, doch das funktioniert ja nicht.


    Und man kann dann ja theoretisch nur den define verändern ?
    Was aber auch nicht funktioniert, da man ja kein define mit einer variable machen kann
    #define maxbadwords hierdievariable

    Das heißt also, dass auf oben bezogen, ich nicht bestimmen kann wie groß die Variable


    const maxbadwords = 30;


    entgültig sein soll, damit nicht zu viel Speicher verbraucht werden kann.
    Denn es soll natürlich nur maximal so groß sein, wie auch wörter vorhanden sind.


    Ich hab es so probiert
    maxbadwords = dini_Int(file,"maxbadwords");
    mit dem Fehler

    Zitat

    (798) : error 022: must be lvalue (non-constant)

    const heißt also, dass egal wie groß ich die variable mache er immer auf den kleinstmöglichen wert geht ?


    Andere Frage:
    Habe ne Abfrage gemacht ob in einem String ein Badwort drin ist.


    Sollte ein BAdwort drin sein, bekommen das die anderen nicht zu sehen, denn dann wird ***** Beleidigung ***** returnt.
    Nur wenn kein badWord drin ist, bekomm ich den Fehler


    stock badwordscheck(playerid,text[])
    {
    for(new i = 0;i<maxbadwords;i++)
    {
    if(strfind(text,badwords[i],true) != -1)
    {
    new string[128],pname[MAX_PLAYER_NAME];
    GetPlayerName(playerid,pname,sizeof(pname));
    format(string,sizeof(string),"%s wurde wegen einer Beleidigung gekickt",pname);
    SendClientMessageToAll(lila,string);
    Kick(playerid);
    new bstring[32];
    format(bstring,32,"***** Beleidigung *****");
    return bstring;
    }
    }
    new ntext[256];
    format(ntext,sizeof(ntext),"%s",text);
    return ntext; // hier der error zeile 7398
    }


    Bekomme den Error hier


    Zitat

    (7398) : error 047: array sizes do not match, or destination array is too small

    Nein, das sollte es nicht.


    funktioniert theoretisch beides


    @dit:


    Jetzt nochmal hierauf zurück


    new const maxbadwords = 30;
    new badwords[maxbadwords][16]; //zeile 287

    Zitat

    (287) : error 008: must be a constant expression; assumed zero

    ICh wollt das mit dem zurücksetzten machen


    Aber wenn ich das so machen, kommt das gleiche Ergebnis wie oben



    strins(badwords[i],dini_Get(file,string),0);
    format(string,sizeof(string),"\0");
    printf("Insertet: %s",badwords[i]);


    badwords zurückzusetzen wäre doch irgentwie unlogisch, weil dann würd ich das eben reinkopierte wort doch direkt wieder löschen


    @dit: Das hats gebracht XD :thumbup:


    new badwords[maxbadwords][16];
    Einfach hier nen String rausgemacht


    @dit:
    Noch ne andere Frage wenn ich anstatt des #define maxbadwords 30
    das hier mache
    new const maxbadwords = 30;
    new badwords[maxbadwords][16]; //zeile 287
    Kommt der Error

    Zitat

    (287) : error 008: must be a constant expression; assumed zero

    K Das sieht jetzt so aus


    #define maxbadwords 4
    new badwords[maxbadwords];
    new file[128];
    format(file,sizeof(file),"/serverfiles/badwords.txd");
    if(dini_Exists(file))
    {
    for(new i = 0;i<maxbadwords;i++)
    {
    new string[128];
    format(string,sizeof(string),"word[%d]",i);
    if(dini_Isset(file,string))
    {
    strins(badwords[i],dini_Get(file,string),0);
    printf("Insertet: %s",badwords[i]);
    }
    }
    }


    Nur das Ergebnis sieht dann so aus, als ob er die Schleife nicht hochzählen würde


    Zitat

    [17:57:28] Insertet: huso
    [17:57:28] Insertet: wixxeruso
    [17:57:28] Insertet: spastixxeruso
    [17:57:28] Insertet: hurensohnpastixxeruso
    [17:57:28] urensohnpastixxeruso

    iname ist 64 (byte bit ?) groß.


    aber in der Datei name[0] ist grade mal 4 zeichen groß.


    Hab iname auch schon auf 128 gesetzt, immer noch zu klein


    Wenn ich das Printe,siehts so aus


    printf("%s",dini_Get(file,string));
    In der Serverlog steht dann das erste Wort von der Liste:

    Zitat

    "huso"


    Wie meinst du das mit dem entgültigen Wert ermitteln

    Wie meinst du das ?


    Willst du einen weiteren Automaten hinstellen ?


    ----------------------------------------- Eigenes Problem -----------------------------------
    Hab das mit dem Badwords aus DAtei auslesen mal probiert nur gibts einen Error, pls help


    Datei badwords.txd existiert und sieht so aus


    Zitat

    maxbadwords=4
    word[0]=huso
    word[1]=wixxer
    word[2]=spast
    word[3]=hurensohn


    Dann im Script zum auslesen hab ich das


    Unter den defines
    enum badwordsinfo
    {
    iname[32],
    };


    new maxbadwords = 30;
    new badwords[][badwordsinfo];


    OnGameModeInit


    new file[128];
    format(file,sizeof(file),"/serverfiles/badwords.txd");
    if(dini_Exists(file))
    {
    maxbadwords = dini_Int(file,"maxbadwords");
    new string[128];
    for(new i = 0;i<sizeof(maxbadwords);i++)
    {
    format(string,sizeof(string),"word[%d]",i);
    if(dini_Isset(file,string))
    {
    badwords[i][iname] = dini_Get(file,string);
    }
    }
    }

    testword();


    testword(); ist zum testen und bezieht sich herrauf


    testword()
    {
    printf("%d",maxbadwords);
    for(new i = 0;i<sizeof(maxbadwords);i++)
    {
    printf("Word[%d]: %s",i,badwords[i][iname]);
    }

    }


    Der Error ist folgender (329) : error 047: array sizes do not match, or destination array is too small
    und bezieht sich auf diese Zeile
    badwords[i][iname] = dini_Get(file,string);


    Weiß jemand ne Lösung ?