Beiträge von Stylerboy

    Hey Breadfisher,


    ich hab ein Problem, dass ich komischerweise einfach nicht beseitigen kann.


    Wenn ich ein Befehl mit Timer benutze, dann bekommt immer die falsche ID im Server die Informationen.


    Z.B. wenn man /robbank eingibt. Der Spieler bekommt 5 Wanteds, und ein Timer ( SetTimer("Bankraub", 300000, 0); ) wird gesetzt. Nachdem die Zeit abgelaufen ist, wird ja der Public abgerufen. Und genau hier ist das Problem. Der Spieler, der die Bank ausraubt, bekommt keine Meldung darüber, dass die 5 Min vorbei sind und er die Bank ausgeraubt hat. Dafür bekommt diese Meldung entweder keiner, oder ein anderen Spieler ingame. Hier ist der Public, vielleicht könnt ihr mir sagen, was daran falsch ist:



    public RobBank()
    {
    for(new i = 0; i<MAX_PLAYERS; i++)
    {
    if(IsPlayerConnected(i))
    {
    if(BankRobberID[i] == i)
    {
    if(IsPlayerInRangeOfPoint(i, 17.0, 2309.1926,-8.5856,26.7422))
    {
    new string[256];
    new price = 10000 + random(49999);
    new sendername[MAX_PLAYER_NAME];
    GetPlayerName(i, sendername, sizeof(sendername));
    format(string, sizeof(string), "* %s hat es geschafft die Bank auszurauben. Geklaut wurden %d €!",sendername,price);
    SendClientMessageToAll(COLOR_LIGHTBLUE, string);
    PayLog(string);
    SendClientMessage(i, COLOR_YELLOW, "Du hast die Bank erfolgreich ausgeraubt!");
    format(string, sizeof(string), "~w~ Bank ausgeraubt ~n~ ~b~+ %d EUR",price);
    GameTextForPlayer(i, string, 5000, 1);
    DD_GivePlayerMoney(i, price);
    BankRobber = 999;
    BankRobberID[i] = 999;
    return 1;
    }
    }
    }
    }
    return 0;
    }

    Hey, danke für deine Antwort !


    Ich habe schon gelesen, dass dini leichter ist.


    Ich bevorzuge aber meine Variante, weil ich sie übersichtlicher finde.


    Ich würde gerne die Lösung für mein Problem finden und nicht eher das Problem umgehen.


    Wenn mir jemand sagen könnte, was an meinem Befehl falsch ist, würde mir das vieles Erklären.

    Du kannst die Koordinaten der Fahrzeuge in eine Datei schreiben, damit diese unter OnGameModeInit gelesen werden. So kannst du die Fahrzeuge parken.


    Ich mache mal ein Beispiel für 1 Fahrzeug:


    oben im Script:

    enum cInfo
    {
    cCarid,
    cTyp,
    Float:cX,
    Float:cY,
    Float:cZ,
    Float:cRotation,
    }
    new LSPDInfo[cInfo];


    darunter:

    forward SaveCarInfo();
    forward LoadCarInfo();


    unter OnGameModeInit:

    LoadCarInfo();
    LSPDInfo[cCarid] = CreateVehicle(LSPDInfo[cTyp], LSPDInfo[cX], LSPDInfo[cY], LSPDInfo[cZ], LSPDInfo[cRotation], 0, 1, 600);


    unter OnPlayerCommandText:

    if(strcmp(cmd, "/apark", true)==0)
    {
    if(IsPlayerConnected(playerid))
    {
    new car = GetPlayerVehicleID(playerid);
    if(car == LSPDInfo[cCarid])
    {
    GetVehiclePos(LSPDInfo[cCarid], LSPDInfo[cX], LSPDInfo[cY], LSPDInfo[cZ]);
    GetVehicleZAngel(LSPDInfo[cCarid], LSPDInfo[cRotation]);
    SaveCarInfo();
    return 1;
    }
    }
    }


    unten im Script:

    public SaveCarInfo()
    {
    new var[256];
    new File: hFile = fopen("LSDPCars.cfg", io_write);
    if( hFile)
    {
    format(var, 256, "Carid = %d\r\n", LSPDInfo[cTyp]); fwrite(hFile, var);
    format(var, 256, "CarX = %f\r\n", LSPDInfo[cX]); fwrite(hFile, var);
    format(var, 256, "CarY = %f\r\n", LSPDInfo[cY]); fwrite(hFile, var);
    format(var, 256, "CarRot = %f\r\n", LSPDInfo[cRotation]); fwrite(hFile, var);
    fclose(hFile);
    }
    return 1;
    }


    und da drunter:

    public LoadCarInfo()
    {
    new val[256], key[256], Data[256];
    new File: hFile = fopen("LSPDCars.cfg", io_read);
    if( hFile)
    {
    while( fread( hFile, Data, sizeof( Data ) ) )
    {
    key = ini_GetKey(Data);
    if(strcmp(key, "Carid", true) == 0) { val = ini_GetValue(Data); LSPDInfo[cTyp] = strval( val );
    if(strcmp(key, "CarX", true) == 0) { val = ini_GetValue(Data); LSPDInfo[cX] = floatstr( val );
    if(strcmp(key, "CarY", true) == 0) { val = ini_GetValue(Data); LSPDInfo[cY] = floatstr( val );
    if(strcmp(key, "CarZ", true) == 0) { val = ini_GetValue(Data); LSPDInfo[cZ] = floatstr( val );
    if(strcmp(key, "CarRot", true) == 0) { val = ini_GetValue(Data); LSPDInfo[cRotation] = floatstr( val );
    }
    fclose( hFile );
    }
    return 1;
    }


    So geht es. Du musst die ersten Koordinaten in der Datei selber einfügen und auch das Model des Wagens, damit es erstellt wird beim Anmachen des Servers.


    Die Datei "LSPDCars.cfg" musst du vorher erstellen.


    mfg


    Stylerboy

    Hey Leute,


    ich habe ein kleines Problem. Und zwar gehts um folgendes:


    Wenn ich jemanden mit /makeleader ID zum Leader mache, wird sein Name in eine Datei geschrieben.


    Aufbau:

    enum gInfo
    {
    leader1[MAX_PLAYER_NAME],
    leader2[MAX_PLAYER_NAME],
    ...
    }
    new FraktionInfo[gInfo];


    /makeleader Command

    ....
    if(level == 1)
    {
    new giveplayer[MAX_PLAYER_NAME];
    GetPlayerName(para1, giveplayer, sizeof(giveplayer));
    strmid(FraktionInfo[leader1], giveplayer, 0, strlen(giveplayer), 255);
    SaveLeader();
    }
    ...



    public SaveLeader()
    {
    new var[256];
    new File: hFile = fopen("Leaderlist.cfg", io_write);
    if( hFile )
    {
    format(var, 256, "FRAKTION_1 = %s\r\n", FraktionInfo[leader1]); fwrite(hFile, var);
    format(var, 256, "FRAKTION_2 = %s\r\n", FraktionInfo[leader2]); fwrite(hFile, var);
    fclose( hFile );
    }
    return 1;
    }


    Nun zeigt er mir das in der Datei an:



    FRAKTION_1 = [XXX]YYYYYYFRAKTION_2 =


    Also der vermischt die zusammen. Wenn ich einen kürzeren Namen verwende, geht es:



    FRAKTION_1 = [XXX]YYYYYYY
    FRAKTION_2 =


    Warum ist das so? bei " leader1 " ist doch [MAX_PLAYER_NAME], oder muss ich was anderes verwenden ???


    Bitte dringend um Hilfe ?(

    Kann es vielleicht daran liegen, dass das Script zu viele Ressourcen ge- / verbraucht ?


    Wenn ja, was könnte ich im Script so ändern, um Ressourcen zu sparen. Denke, dass ich schon viele Ressourcen vebrauche, weil ich mal jemandem hier im Forum helfen wollte und ein fortgeschrittener Scripter meinte, dass meine Methode ressourcenfressend wäre. ^^

    Nein habe keine Mods drinne und eine Neuinstallation brachte auch nichts.


    Alle anderen Spieler die joinen und die Werkstätte benutzen, crashen die sampserver.exe ebenfalls.


    Ich kann mir das nicht erklären, weil ich auch alle VehicleComponente eingefügt habe.


    Gibt es da ein paar Grundzeilen, in denen ich nach dem Fehler suchen muss ? Oder hab ich wortwörtlich "pech" gehabt ? :huh:

    Hey Breadfisher,


    ich habe ein komisches und für mich unerklärliches Problem. Auf meinem Homeserver kann ich jedes Fahrzeug ( natürlich außer Motorräder, Copcars etc. ) in allen Tuningwerkstätten tunen. Wenn ich aber auf meinem Linuxserver mit egal welchem Fahrzeug eine Tuningwerkstatt betrete und etwas tune, sei es die Farbe oder Hydraulik, wird die Sampserver.exe gecrasht.


    Hat jemand schon mal so ein Problem gehabt ?


    Weiß jemand einen Rat ?


    Bin langsam echt verzweifelt ?(


    Schon mal Danke für die Antworten!

    Im Moment fällt mir keine besser Variante ein.



    if(strcmp(cmd, "/respawncopcars", true)==0)
    {
    if(IsPlayerConnected(playerid))
    {
    for(new i = 0; i<MAX_PLAYERS; i++)
    {
    if(!IsPlayerInVehicle(i, Cop[0]))
    {
    DestroyVehicle(Cop[0]);
    Cop[0] = AddStaticVehicleEx(596,1558.392000,-1710.859000,5.466783,1.0, -1, -1, 60000);/*CopCruiser*/
    }
    if(!IsPlayerInVehicle(i, Cop[1]))
    {
    DestroyVehicle(Cop[1]);
    COP[1] = AddStaticVehicleEx(596,1569.639000,-1710.859000,5.466783,1.0, -1, -1, 60000);/*CopCruiser*/
    }
    ...
    else
    {
    }
    }
    }
    }

    So wäre es so, wie ich dich verstehe. :whistling:


    if(strcmp(cmdtext, "/info",true)==0)
    {
    if(IsPlayerConnected(playerid))
    {
    SendClientMessage(playerid, FARBE, "TEXT");
    }
    }
    Ist nicht ganz übersichtlich, aber [pwn] funktioniert bei mir nicht richtig.

    So ne stumpfe Frage mal : Hast du "BUS" mit der Fahrzeug-ID des Busses ausgetauscht ?
    Der Befehl geht dann nur wenn du in einem bestimmten Bus sitzt, es sei denn, du hast dich bei der Fahrzeug-ID auf das Fahrzeug-Model bezogen. Wenn du in dem Wagen nicht sitzt, das du dort angegeben hast, passiert nichts.
    Ansonsten müsste ein Text oben links in einer rosanen Farbe erscheinen.