Beiträge von Alex_Steward

    Speicher nach den ganzen Abfragen (RegistrationStep[playerid] = 3) in eine Variable (Tutorial[playerid] = 1 oder so), dass er das Tutorial absolviert hat und speichere diese Variable anschließend in seine Accountdatei.


    Füg nun bei OnPlayerSpawn die Abfrage, ob "Tutorial[playerid] == 1" ist, ansonsten bekommt er das Tutorial.


    Wenn es schon so der Fall ist, hab ichs wohl übersehen, bin nur kurz drüber geflogen.

    Ganz unten im Script:


    stock SetVehicleParamsForAll(carid, doors)
    {
    for(new i = 0; i<MAX_PLAYERS; i++)
    {
    if(IsPlayerConnected(i))
    {
    SetVehicleParamsForPlayer(carid, i, 0, doors);
    }
    }
    return true;
    }


    Unter "OnVehicleStreamIn" (falls vorhanden, ansonsten das Callback selbst erstellen):


    for(new v=0; v<sizeof(rentcar); v++)
    {
    if(vehicleid== rentcar[v])
    {
    SetVehicleParamsForAll(vehicleid, OPTION); // <-- 0 = Offen, 1 = Zu
    }
    }

    Hey Leute,


    nach langem rumtrödeln, muss ich euch jetzt mal fragen.


    Warum funktioniert in diesem Public das "fremove(string)" nicht ? Ich hab den String in SendClientMessage mal gesetzt, um zu sehen, ob der String auch richtige Zeichenwerte ausgibt, und ja, das passt alles (string gibt "ABCD.ini" aus):


    public DeleteOldAccounts(playerid)
    {
    new idx;
    new string[256];
    new Data[MAX_PLAYER_NAME], val[256], key[256];
    new year, month, day;
    getdate(year, month, day);
    new File: cFile = fopen("NewAccounts.cfg", io_read);
    if(cFile)
    {
    while(fread(cFile, Data, sizeof(Data)))
    {
    StripNewLine(Data);
    format(string, sizeof(string), "%s.ini", Data);
    SCM(playerid, COLOR_YELLOW, string);
    if(fexist(string))
    {
    new savedyear, savedmonth;
    new File: hFile = fopen(string, io_read);
    if(hFile)
    {
    while(fread(hFile, Data, sizeof(Data)))
    {
    key = ini_GetKey(Data);
    if(strcmp(key, "MemberYear", true) == 0) { val = ini_GetValue(Data); savedyear = strval(val); }
    if(strcmp(key, "MemberMonth", true) == 0) { val = ini_GetValue(Data); savedmonth = strval(val); }
    }
    fclose(hFile);
    }
    if(savedyear == year)
    {
    if((month - savedmonth) >= 6)
    {
    fremove(string);
    idx ++;
    SCM(playerid, COLOR_GREY, "1. Löschvorgang");
    }
    }
    else if(savedyear == 0)
    {
    fremove(string);
    idx ++;
    }
    else
    {
    if(((12 - savedmonth) + month) >= 6)
    {
    fremove(string);
    idx ++;
    }
    }
    }
    }
    fclose(cFile);
    }
    format(string, sizeof(string), "** AdmCmd: %s hat %d alte Accounts gelöscht, die ihren letzten Login vor länger als 6 Monaten hatten.", ReturnPlayerName(playerid), idx);
    SCMToAll(COLOR_LIGHTRED, string);
    return true;
    }


    Wenn ich aber diesen Public ausführe, wird die .ini Datei nicht gelöscht. Ich kanns mir nicht erklären ?(

    Hmm, schade, gibt es überhaupt keine einzige Möglichkeit ?


    Ich meine ich hätte mal so eine Art rangeban für die IP gesehen, dort wurde auch die IP gebannt, und nachher ausgelesen, dabei wurden die letzten Zahlen, die sich nach dem Routerneustart ja ändern, nicht beachtet. Dachte daher, dass es vielleicht auch so möglich wäre, den Namen vor .ini nicht zu beachten und die Datei zu öffnen, egal wie sie heißt, hauptsache der Teil .ini ist drinne. Also komplett unmöglich ?

    Hey,


    also ich kenn dein Script nicht, daher rate ich dir, dir den Public anzuschauen, der diese Zeilen in die Datei speichert. Dort wirst du ja Variable für Variable einzeln sehen, welche zu welcher Zahl in der Datei gehört. Verstehst du es ?

    Hey Leute,


    kann mir einer erklären, wie ich eine Schleife erstelle, in der das System alle Dateien mit einer bestimmten Endung (hier .ini) löscht ?


    Ich will mir eine Funktion erstellen, womit ich per Befehl alle Accountfiles öffne, auslese und lösche, sofern sie älter als 6 Monate sind. Das Alter der Datei entnehme ich einer variable in der Datei, die den letzten Monat notiert, indem sich der Spieler einloggte.


    Wäre echt geil, wenn mir das einer erklären könnte. :thumbup:

    Hey Leute,


    ich hab versucht eine kleine Funktion zu erstellen, damit man durch Cheatprogramme sich nicht selbst unfreezen kann:


    stock New_TogglePlayerControllable(playerid, toggle)
    {
    Freezed[playerid] = toggle;
    return TogglePlayerControllable(playerid, toggle);
    }


    Wenn ich dann alle TogglePlayerControllable mit dem neuen ersetze, geht das compilen gut. Jedoch schon beim Spawnen im Server, da ein TogglePlayerControllable dort benutzt wird, crasht der Server bzw. wird der Rest des Publics nicht mehr ausgeführt. Könnt ihr mir sagen, wie ich das richtige mache, bzw. ob das möglich ist es so zu machen, wie ich das vorhabe ?


    Danke im Vorraus.

    //Edit: Hat sich erledigt.


    Für alle die es wissen wollen, es fehlt die Definition oben im Script:


    #define TogglePlayerControllable New_TogglePlayerControllable

    Hey Leute,


    ich hab schon seit langem das Problem (Keine Ahnung was ich mal gemacht hatte), das ich beim Starten der Samp-Server.exe ein Piepston vom Rechner aus höre.


    Wenn ich die alten Samp-Server.exe starte, kommt so ein Ton nicht. Weiß einer wie man das ausschaltet ?? Ich dreh bald durch, beim jeden Neustart "PIIIIIIIEEEEP" ... Zum Kotzen :D


    Schonmal danke im Vorraus. ^^

    Überschneiden sich deine Filterscript Befehle miteinander ? 2 gleiche Befehle in 2 verschiedenen Filterscripts bzw. Gamemode und Filterscript ?

    Für alle, die genauso ein Problem mal haben. So hab ich es gelöst:


    public CheckLine(playerid, filename[], inputtext[])
    {
    if(IsPlayerConnected(playerid))
    {
    new Data[256];
    new File: hFile = fopen(filename, io_read);
    if( hFile )
    {
    while( fread( hFile, Data, sizeof(Data)))
    {
    if(strcmp(Data, inputtext, true) == 0) // die suche hab ich hier auf genauigkeit spezifiziert
    {
    LineThere[playerid] = 1;
    return 1; //<--- das return hatte ich vergessen
    }
    else
    {
    LineThere[playerid] = 0;
    }
    }
    fclose( hFile );
    }
    }
    return 1;
    }

    Hey Community,


    1. ich speichere ein Wert, hier "Hallo", in einer Datei ab.
    2. ich frage ab, ob ein Eintrag namens "Hallo" schon in der Datei vorhanden ist:


    public CheckLine(playerid, filename[], inputtext[])
    {
    if(IsPlayerConnected(playerid))
    {
    new Data[256];
    new File: hFile = fopen(filename, io_read);
    if( hFile )
    {
    while( fread( hFile, Data, sizeof(Data)))
    {
    StripNewLine( Data );
    if(strfind(Data, inputtext, true) == 0)
    {
    LineThere[playerid] = 1;
    }
    else
    {
    LineThere[playerid] = 0;
    }
    }
    fclose( hFile );
    }
    }
    return 1;
    }


    Wenn der Eintrag vorhanden ist, wird LineThere[playerid] auf 1 gesetzt. Wenn nicht, dann auf 0.


    Das Problem ist aber jetzt, dass ich 10 Einträge habe, die in der Datei so aussehen:
    Hallo
    Hallo1
    Hallo2
    Hallo
    Hallo1
    Hallo2
    Hallo
    Hallo1
    Hallo2
    Hallo


    Mein Problem ist jetzt, das NUR die letzte Zeile ausgelesen und verglichen wird.


    Das heißt, wenn ich abfragen will ob "inputtext" dem Wort in der Datei "Hallo" entspricht und in der Datei als LETZTE Zeile "Hallo" steht, klappt es und mir wird gesagt, dass der Eintrag vorhanden ist.


    ABER, wenn ich jetzt "Hallo1" in die Datei ergänze und dann abfrage, ob der Eintrag "Hallo" bereits in der Datei vorhanden ist, wird mir geschrieben, dass sich so ein Eintrag in der Datei NICHT befindet, obwohl er über dem Eintrag "Hallo1" als vorletzte Zeile steht.


    Meine Frage nun, was mache ich falsch ? Ich habs nach dem wiki Code gescriptet, jedoch klappt es nicht.