Beiträge von Templer

    Keine Sorge, das beste ist einfach entweder im TextEditor in der pwn Datei die Dialog ID höher zu stellen bzw. ein leeres Script starten ^^. Wobei ich eher die Dialog Nummer vom TextEditor höher stellen würde wie auf z.B.: 5867 oder sowas ^^

    Wenn ein return vor diesem AddStaticVehicle ist, dann bitte unter das AddStaticVehicle schicken. Sollte es zu kompliziert sein, 3 Zeilen oberhalb und unterhalb von AddStaticVehicle posten.

    Eine bessere Variante wäre, damit der Spieler nicht im Nirgendwo spawnt, einfach bei OnPlayerDeath den Spawn mit SetSpawnInfo festsetzen und dann brauchst du kein SetPlayerPos in OnPlayerSpawn und hast einen sehr sauberen Spawn ohne Ports ^^

    So und jetzt kommt der böse Templer und sagt,dass jedes Selfmade was ein Bezug auf Reallife, Roleplay, Deathmatch, Stunt hat KEIN Selfmade ist ^^. Denn eigentlich wird heutzutage nur bei einem Selfmade das Konzept abkopiert und man macht Nichts selber. Die meisten denken halt, weil sie in Ihrem "Selfmade", was auf Reallife oder Roleplay sich bezieht, Dialoge oder sonstigen Kram besitzen, die es damals bei Samp 0.2 nicht gegeben hat, dass Ihr Script ein Selfmade ist. Ein richtiges Selfmade ist ein eigenes Konzept wie das von Trooper seinem Savandreas-Server, welches er selbst konzipiert hat. Also Noobtuber, mach dir nichts draus, wenn dich Leute beschimpfen oder kritisieren wenn du paar Sachen aus dem Godfather kopierst, denn dieses PWN-Scripten ist ja nicht deine Lebensaufgabe, sondern soll nur als Hobby dienen und du wirst dich auch später Fragen, warum und weshalb dies und das Funktioniert und schon wirst du Programmieren können ^^. Bedeutet soviel wie, schau dir die Grundstruktur vom Godfather an und versuche Sie mit eigenen Händen nachzumachen und du besitzt ein "Selfmade" (*hust*), was jeder andere Server auch hat ^^.


    //Edit: Kleine Korrekturen

    Du musst nichts ändern ^^


    Sollte jedoch der Compiler mit den neuen Includes meckern bei CreatePickup oder AddStaticPickup, dann einfach am ende ein -1 einfügen als "letzten" Parameter.


    CreatePickup(modelid, type, Float:X, Float:Y, Float:Z, -1); //-1 Steht dafür, dass es in jeder Virtuellen Welt sichtbar ist.


    Der Rest wird automatisch nicht mehr genutzt bzw. wird es beim Samp-Server in der Konsole wiedergegeben!

    Also was mich frägelt, obwohl dein Code total in Ordnung ist Chefe ^^, dieser folgende Auschnitt bei deinem ersten Post:

    else if(Engine[GetPlayerVehicleID(playerid)] == 1)


    Du meintest ja, dass er nicht mehr ausgeht. Man kann also davon ausgehen das die Variable Engine irgendwo wieder umgeändert wird auf eine andere Zahl und somit dein Code nicht ausgeführt werden kann ^^. Zum Testen probiere folgendes:


    if(newkeys & KEY_CROUCH)
    {
    if(GetPlayerState(playerid) != PLAYER_STATE_DRIVER)
    {
    SendClientMessage(playerid, COLOR_YELLOW, "Du musst der Fahrer des Wagens sein!");
    }
    else
    {
    if(Engine[GetPlayerVehicleID(playerid)] == 0)
    {
    TogglePlayerControllable(playerid, 1);
    Engine[GetPlayerVehicleID(playerid)] = 1;
    MinusBenzin = SetTimer("MinusFuel", 20000, 1);
    SendClientMessage(playerid, COLOR_YELLOW, "Der Motor läuft und du kannst fahren!");
    }
    else
    {
    TogglePlayerControllable(playerid, 0);
    Engine[GetPlayerVehicleID(playerid)] = 0;
    KillTimer(MinusBenzin);
    SCM(playerid, COLOR_YELLOW, "Der Motor ist aus und du kannst das Fahrzeug mit /exit verlassen");
    }
    }
    }


    Was mir jedoch noch auffällt, dass MinusBenzin Spieler spezifisch sein sollte, weil du ansonsten global den Timer ausschaltest ^^, also einfach


    new MinusBenzin[MAX_PLAYERS];


    die Funktion MinuesFuel sollte dann auch Spielerspezifisch sein, weil es einen totalen Schwachsinn auspuckt wenn mehrere Spieler auf den Server kommen!

    forward MinusFuel(playerid);
    public MinusFuel(playerid)
    {
    //Code...
    }


    und die richtige Verwendung wäre dann:


    if(newkeys & KEY_CROUCH)
    {
    if(GetPlayerState(playerid) != PLAYER_STATE_DRIVER)
    {
    SendClientMessage(playerid, COLOR_YELLOW, "Du musst der Fahrer des Wagens sein!");
    }
    else
    {
    if(Engine[GetPlayerVehicleID(playerid)] == 0)
    {
    TogglePlayerControllable(playerid, 1);
    Engine[GetPlayerVehicleID(playerid)] = 1;
    MinusBenzin[playerid] = SetTimerEx("MinusFuel", 20000, 1, "d", playerid);
    SendClientMessage(playerid, COLOR_YELLOW, "Der Motor läuft und du kannst fahren!");
    }
    else
    {
    TogglePlayerControllable(playerid, 0);
    Engine[GetPlayerVehicleID(playerid)] = 0;
    KillTimer(MinusBenzin[playerid]);
    SCM(playerid, COLOR_YELLOW, "Der Motor ist aus und du kannst das Fahrzeug mit /exit verlassen");
    }
    }
    }

    Bei weiteren Fragen einfach melden ^^


    #define PATOO_SEINER_SKIN (32) //Die SkinID die für PATOO sein soll ^^ In dem Fall 32


    public OnPlayerRequestClass(playerid,classid)
    {
    new spielername[MAX_PLAYER_NAME];
    GetPlayerName(playerid, spielername, sizeof(spielername));
    if(GetPlayerSkin(playerid) == PATOO_SEINER_SKIN && strcmp(spielername, "patoo", false))
    {
    SendClientMessage(playerid,COLOR_GREEN,"Dieser Skin ist nur für patoo erlaubt!");
    return 0; //Hindere Spieler am Spawnen mit diesem Skin!
    }
    return 1;
    }

    Super Ray und dann müsste er jedesmal den Cache neu leeren und kann eh sofort das fCarID löschen womit er dann wieder sich weiter verwirrt ^^. Es war auch seine Entscheidung ob er das Script CPU oder RAM freundlich macht.



    for(new i = 0;i<_cache_fahrzeug;i++)
    {
    //1.Teil: Zerstören und Resetten
    if(FDaten[i][fCarID] != vehicleid) continue;
    FDaten[i][fCarId] = -1; //Diese Zeile brauchst du nichtmal ^^
    DestroyVehicle(vehicleid);
    //2.Teil: Erschaffen mit neuer FCarID und Tuning
    Wenn Neue FCarID Verwahrt == 0
    {
    //SpawnNeuesFahrzeuge
    //Tuning

    //Du lässt halt einfach das Fahrzeug neu erstellen?
    FDaten[i][fCarID] = CreateVehicle(FDaten[i][fModelID],FDaten[i][fX],FDaten[i][fY],FDaten[i][fZ],FDaten[i][fA],FDaten[i][fFarbe1],FDaten[i][fFarbe2], -1);
    //Weitere Kommentare im Text unten ^^
    }
    else
    {
    //SpawnNeuesFahrzeuge
    //Tuning
    }
    }



    Lass dich nicht verwirren undbehalte dein Konzept im Auge. Ich habe dir schonmal gesagt du solltest die Finger noch davon lassen, aber du willst es ja unbedingt ^^. Deine Variable i, auch wenn sie mit MAX_VEHICLES definiert wurde und eigentlich fast sagen will das die vehicleid gemeint ist, bleibt statisch und ist nur eine Ordnungszahl in dem Fall! MAX_VEHICLES erklärt dem Array nur wieviele PRIVAT Fahrzeuge es maximal geben kann, weshalb sie auch NICHTS mit der vehicleid ab jetzt zu tun hat. Du hast es ja erfolgreich geschafft die PrivatCarID mit der eigentlichen vehicleid zu unterscheiden (Laden/Speichern/Parken/...). Wieso also nicht jetzt auch? ^^. Als kleine Hilfe könntest du zB das machen:


    #define MAX_PRIVATCAR_ID (2000)


    und ersetzt bei dem new FDaten das MAX_VEHICLES durch MAX_PRIVATCAR_ID. Capiche ? ^^

    Dann machst du einfach dort, wo sich der Spieler registriert folgendes hin:


    GivePlayerMoney(playerid, betrag); //Bei betrag den Wert eingeben wieviel er bekommt


    Bei Godfather wäre es unter OnPlayerRegister!


    Solltest du es mit dem Geld geben anders haben, so ersetze die Zeile GivePlayerMoney so wie du es sonst machst. Aber es muss dort sein wo sich der Spieler registriert.

    Gibt es überhaupt den Ordner test in den scriptfiles und im Ordner test den Unterordner Others?


    Edit:// Folgende Zeile abändern in:


    new File:onlinestatus = fopen(onlinestring, io_write);

    Ah ok GF, ne da ises ganz anders. Da wirds nur beim GMX richtig erstellt! Also such danach


    new h;
    for(h = 0; h < sizeof(BizzInfo); h++)
    {
    if(BizzInfo[h][bOwned] == 0)
    {
    AddStaticPickup(1272, 2, BizzInfo[h][bEntranceX], BizzInfo[h][bEntranceY], BizzInfo[h][bEntranceZ],-1);
    pickups++;
    }
    if(BizzInfo[h][bOwned] == 1)
    {
    AddStaticPickup(1239, 2, BizzInfo[h][bEntranceX], BizzInfo[h][bEntranceY], BizzInfo[h][bEntranceZ],-1);
    pickups++;
    }
    }
    //und ....
    for(h = 0; h < sizeof(SBizzInfo); h++)
    {
    if(SBizzInfo[h][sbOwned] == 0)
    {
    AddStaticPickup(1272, 2, SBizzInfo[h][sbEntranceX], SBizzInfo[h][sbEntranceY], SBizzInfo[h][sbEntranceZ],-1);
    pickups++;
    }
    if(SBizzInfo[h][sbOwned] == 1)
    {
    AddStaticPickup(1239, 2, SBizzInfo[h][sbEntranceX], SBizzInfo[h][sbEntranceY], SBizzInfo[h][sbEntranceZ],-1);
    pickups++;
    }
    }


    einfach weglöschen.


    Oben im Script bei den new folgendes hinzufügen:
    new gBizPickups[X]; //X durch die Anzahl der Bizes ersetzen.
    new gSBizPickups[X]; //X durch die Anzahl der SBizes ersetzen.


    ... danach suchst du nach public LoadBizz und in der WHILE-Schleife im public unten (also der Code muss noch IN der Schleife sein) fügst du das ein:
    new h = idx;
    if(BizzInfo[h][bOwned] == 0) gBizPickups[h] = CreatePickup(1272, 2, BizzInfo[h][bEntranceX], BizzInfo[h][bEntranceY], BizzInfo[h][bEntranceZ],-1);
    else gBizPickups[h] = CreatePickup(1239, 2, BizzInfo[h][bEntranceX], BizzInfo[h][bEntranceY], BizzInfo[h][bEntranceZ],-1);
    bei LoadSBizz fast das gleiche, in der WHILE-Schleife unten, dass einfügen:
    new h = idx;
    if(SBizzInfo[h][sbOwned] == 0) gSBizPickups[h] = CreatePickup(1272, 2, SBizzInfo[h][sbEntranceX], SBizzInfo[h][sbEntranceY], SBizzInfo[h][sbEntranceZ],-1);
    else gSBizPickups[h] = CreatePickup(1239, 2, SBizzInfo[h][sbEntranceX], SBizzInfo[h][sbEntranceY], SBizzInfo[h][sbEntranceZ],-1);


    So das war nun das konfigurieren und dann einfach bei public OnPlayerUpdate in der Schleife wo BizzInfo gezählt wird in der Schleife unter fwrite und oberhalb von idx++; folgendes einfügen:
    new h = idx;
    DestroyPickup(gBizPickups[h]);
    if(BizzInfo[h][bOwned] == 0) gBizPickups[h] = CreatePickup(1272, 2, BizzInfo[h][bEntranceX], BizzInfo[h][bEntranceY], BizzInfo[h][bEntranceZ],-1);
    else gBizPickups[h] = CreatePickup(1239, 2, BizzInfo[h][bEntranceX], BizzInfo[h][bEntranceY], BizzInfo[h][bEntranceZ],-1);
    und bissl weiter unten bei der SBizz Schleife das gleiche:
    new h = idx;
    DestroyPickup(gSBizPickups[h]);
    if(SBizzInfo[h][sbOwned] == 0) gSBizPickups[h] = CreatePickup(1272, 2, SBizzInfo[h][sbEntranceX], SBizzInfo[h][sbEntranceY], SBizzInfo[h][sbEntranceZ],-1);
    else gSBizPickups[h] = CreatePickup(1239, 2, SBizzInfo[h][sbEntranceX], SBizzInfo[h][sbEntranceY], SBizzInfo[h][sbEntranceZ],-1);