Beiträge von Mann im Mond

    Ja das würde diesen Fehler beheben, allerdings wird "OnPlayerDisconnect" nicht zwangsweise aufgerufen für alle Spieler. Bei Logout/Kick/Ban oder Crash wird es zwar aufgerufen, allerdings gibt es noch andere Fälle, wie z.B. einen Internetausfall, was bei Wlan und Samp gerne vorkommt (Zu sehen an "Lost Connection to Server...").

    So sollte es gehen, allerdings rate ich dir hierzu nicht, wenn du den ganzen Aufwand nur wegen 2 Befehlen machst. Wenn du diesen Timer abr bereits in deinem Script hast bzw. einen Timer, der jede Minute durchläuft brauchst, kannst du es verwenden...
    KeksOfDeath: Ich denke du solltest bedenken, dass es durchaus Leute gibt, die sich nach dem Befehl ausloggen und andere Spieler dann dessen ID einnehmen...
    // ganz oben
    forward CheckTime();
    new
    CmdTime[MAX_PLAYERS];

    // in OnPlayerConnect
    CmdTime[playerid] = -1;


    // in OnGameModeInit
    SetTimer("CheckTime",60000,1); // globaler Timer der jede Minute aufgerufen wird


    // in dem Befehl, der nur nach einer bestimmten Zeit gehen sollen
    CmdTime[playerid] = 60; // 60 für 1 Stunde usw.


    // Die Überprüfung, z.B. in dem Befehl
    new
    string[64];
    if(CmdTime[playerid] > 0)
    {
    format(string,sizeof(string),"Du kannst den Befehl in %d wieder benutzen", CmdTime[playerid]);
    SendClientMessage(playerid,COLOR,string);
    return 1;
    }


    // Der public


    public CheckTime()
    {
    for(new i = 0; i < GetMaxPlayers(); i++)
    {
    if(IsPlayerConnected(i))
    {
    if(CmdTime[i] > 0)
    {
    CmdTime[i]--;
    }
    if(CmdTime[i] == 0)
    {
    CmdTime[i] = -1;
    }
    }
    }
    }

    Nein du kannst nur zwischen Race Checkpoints (einige verschiedenen Varianten wie z.B. Flugcheckponts, Zielflagge oder normale) und den normalen Checkpoints ohne Pfeil wechseln.
    Wenn du jeden Spieler ne andere Farbe zuweisen willst und die Position der Spieler/des Spielers auf der Karte sichbar sein soll, solltest du nach Markern suchen:
    Je nachdem, was du machen willst entweder
    SetPlayerMarkerForPlayer oder ShowPlayerMarkers und SetPlayerColor

    Wenn die Autos nur manchmal unsichtbar sind und nach einem relogg wieder auftauchen, kann ich dir den Fehler sagen. Wenn Sie dauerhaft unsichtbar sind, du aber einen Schatten des Autos siehst, handelt es sich um das Problem mit "LinkVehicleToInterior". Wenn du die Atuos gar nicht siehst und zwar dauerhaft sollte es sich um eine andere virtuelle Welt handeln: Autos sind nur in der Virtual World "0" sichtbar, in allen anderen kannst du die, genauso wie zb Pikcups o.ä. nicht sehen.
    Wenn keins von oben zutrifft, kann ich dir auf die Schnelle auch nciht weiterhelfen

    Hi, ich habe nun mal eine kleine Frage zu Rcons und zwar:
    Wir besitzen einen Testserver, sowie einen normalen Server. Die beiden haben die selbe IP, lediglich der Port ist anders. Wenn ich selbstgemacht Rcons auf dem Testserver mache, funktionieren die, wenn ich die gleichen allerdings auf dem richtigen mache, gehen sie nicht. Woran kann das liegen?

    Wenn die Koordinaten im PlayerToPoint die des Wettbüros sind, sollte es so gehen
    if(strcmp(cmd, "/lotto", true) == 0)
    {
    if(IsPlayerConnected(playerid))
    {
    if(PlayerToPoint(3.0, playerid, 822.0106,2.1108,1004.17979) || PlayerToPoint(3.0, playerid, 830.7314,-0.2550,1004.1797) || PlayerToPoint(3.0, playerid, 833.4749,3.1363,1004.17970))
    {
    if(PlayerInfo[playerid][pLottoNr] > 0)
    {
    SendClientMessage(playerid, COLOR_GREY, " You already have a Lottery Ticket !");
    return 1;
    }
    if(GetPlayerMoney(playerid) < 1500)
    {
    SendClientMessage(playerid, COLOR_GREY, " You need $1500 for a Lottery Ticket !");
    return 1;
    }
    tmp = strtok(cmdtext, idx);
    if(tmp[0] == 0)
    {
    SendClientMessage(playerid, COLOR_WHITE,"BENUTZE: /lotto [number]");
    return 1;
    }
    new lottonr = strval(tmp);
    if(lottonr < 1 || lottonr > 80) { SendClientMessage(playerid, COLOR_GREY, " Lottery Number not below 1 or above 80 !"); return 1; }
    format(string, sizeof(string), "* You bought a Lottery Ticket with number: %d.", lottonr);
    SendClientMessage(playerid, COLOR_LIGHTBLUE, string);
    GivePlayerMoney(playerid, - 1500);
    PlayerInfo[playerid][pLottoNr] = lottonr;
    }
    else
    {
    SendClientMessage(playerid, COLOR_GREY, "Du bist nicht im Wettbüro / Du bist an keine Lotto Automaten !");
    return 1;
    }
    }
    return 1;
    }

    Was du dazu benötigst ist
    SetPlayerCheckpoint(playerid,Float:x,Float:y,Float:z,Float:size); /* Normaler roter Checkpoint */
    oder
    SetPlayerRaceCheckpoint(playerid, type, Float:x, Float:y, Float:z, Float:nextx, Float:nexty, Float:nextz, Float:size); /* Renncheckpoint mit Pfeil zum nächsten Checkpoint */
    im "/start" Befehl sowie im Callback "OnPlayerEnterCheckpoint(playerid)"
    Um beim reinfahren einen neuen Chckpoint anzeigen zu lassen benötigst du zum Beispiel eine Variable dir hochgezählt wird (Eine PlayerToPoint Variante würd auch funktionieren, würde ich aber nicht empfehlen)
    /* Ganz oben */


    new RaceCheckpoint[MAX_PLAYERS];


    /* in OnPlayerConnect(playerid) */


    RaceCheckpoint[playerid] = 0;


    /* Im /start Befehl */


    SetPlayerCheckpoint(...); //Dein erster Checkpoint
    RaceCheckpoint[playerid] = 1; // Variable auf 1 setzen - zum späteren überprüfen


    /* in OnPlayerEnterCheckpoint(playerid) */
    if(RaceCheckpoint[playerid] > 0)
    {
    switch(RaceCheckpoint[playerid])
    {
    case 1:
    {
    SetPlayerCheckpoint(...); // Dein zweiter Checkpoint
    }
    case 2:
    {
    SetPlayerCheckpoint(...); // Dein dritter Checkpoint
    }
    // [...]
    case 10: /* Je nachdem wie viele Checkpoints du willst - in diesem Fall ist der 11. (10+1) der Letze*/
    {
    DisablePlayerCheckpoint(playerid);
    // Der Rest deines Codes am Ende
    RaceCheckpoint[playerid] = 0; // Variable zurücksetzen
    return 1; // hochzählen überspringen
    }


    }
    RaceCheckpoint[playerid]++;
    }


    So sollte es funktionieren, hab es nicht getestet und auf die Schnelle geschrieben. Was du mit Highscore meinst, versteh ich nicht richtig...

    Was du suchst ist ein "Autosystem" oder "Carownership". Entweder du läds dir ein vorgefertiges runter und fügst es in deiner Gamemode ein (Suchfunktion hier oder im offiziellen SAMP Forum) oder du erstellst dir eins selber. Wenn du nur einen /park Befehl willst, rate ich dir dazu eines selbst zu erstellen. Wenn du nicht genau weißt wie du anfangen musst, schau entweder in dem Code der breits erstellten nach der Laden und Speicherfunktion oder schau auf Samp Wiki nach einer Anleitung zu Files (http://wiki.sa-mp.com/wiki/File_Functions)

    So wird es nicht gehen. Dein Code ist schlecht eingerückt und somit kaum lesbar und außerdem stimt irgendetwas mit den Klammern nicht. "playerid" ist außerdem nicht definiert, weil es nicht übergeben wird.
    for(new i = 0; i < GetMaxPlayers(); i++);
    {
    if(IsPlayerConnected(i))
    {
    if(godmode[i] == true)
    {
    new
    carid = GetPlayerVehicleID(i);
    SetVehicleHealth(carid,1000);
    SetPlayerHealth(i, 9999);
    }
    }
    }

    Mit dem #pragma kann man dies unterdrücken, aber nicht beheben. Deshalb rate ich dir davon ab.
    Es liegt an der Größe der Strings, d.h. einfach ausgedrückt bedeutet es, dass du mehr Ressourcen benutzt, als dir zur Verfügung stehen (Stichwort: "Stap/heap size")
    http://forum.sa-mp.com/index.p…78026.msg507347#msg507347


    Zusammengefasst kann man sagen, dass eine Stringgröße von 256 niemals erreicht werden kann, da der maximale Input sowie Output nur 128 Zeichen lang sein können. Dein Script kann dadurch schneller laufen.
    Allerdings solltest du für eine Nachricht wie "Hallo %s wie gehts dir?" niemald 128 große strings erstellen - 40 würden in diesem Falle ausreichen.

    http://wiki.sa-mp.com/wiki/Main_Page
    Da finden sich unter "Scripting Functions" alle möglichen Funktionen. Unter anderem auch:
    SetPlayerCheckpoint (playerid,Float:x,Float:y,Float:z,Float:size);
    Sogar mit Beisspielen: http://wiki.sa-mp.com/wiki/SetPlayerCheckpoint
    Um einen Text anzeigen zu lassen sobald ein Spieler in einen solchen Checkpoint geht, musst du den
    public OnPlayerEnterCheckpoint(playerid)
    verwenden und in diesem überprüfen, welcher Checkpoint es ist.
    Dazu musst du in dem Befehl oder was auch immer, bei dem du SetPlayerCheckpoint benutzt eine globale (!) Variable einen anderen Wert zuweisen und diesen bei OnPlayerEnterCheckpoint überprüfen und zurücksetzen


    //
    // Oben in deinem Script
    //


    new Checkpoint[MAX_PLAYERS]; // globale Variable erstellen


    //
    // In dem Befehl, in welchem du SetPlayerCheckpoint benutzt
    //


    SetPlayerCheckpoint(...);
    Checkpoint[playerid] = 1; // Variable setzen


    //
    // In OnPlayerEnterCheckpoint
    //


    if(Checkpoint[playerid] == 1) // Variable überprüfen
    {
    SendClientMessage(playerid, FARBE, "Dein Text");
    Checkpoint[playerid] = 0; // Variable zurücksetzen
    }

    Wie schon gesagt, du kannst einem Spieler nicht das "wechseln" verbieten. Du könntest zwar dem Spieler einfach die Waffe 0 geben (= Faust, wenn ich mich nicht irre) mit
    GivePlayerWeapon(playerid,weapon);
    und der Spieler würde dann als aktuelle Waffe ne Faust haben, könnte aber jederzwit zu den anderen Waffen zurückwechseln. Die einzige Methode das zu verhindern ist die oben beschriebene. Entweder alle Waffe wegnehmen mit
    ResetPlayerWeapons(playerid);
    und danach die Waffe "Faust" geben oder die anderen Waffen mithilfe einer Schleife zwischenspeichern und dann erst alle Waffen wegnehmen und die "Faust" geben.

    Waffen wechseln durch das Script (wie z.B. durch das Mausrad) ist nicht möglich. Was du machen könntest wäre entweder alle Waffen wegnehmen (somit hättest du eine Faust, aber sonst nicht mehr) oder mithilfe einer Schleife alle deine Waffen, die der Spieler gerade auf der Hand hat zwischenzuspeichern und alle Waffen wegnehmen, sobald er ein solches Gebiet betreten hat. Wenn er das Gebiet wieder verlassen hat kannst du ihm die zwischengespeicherten Waffen wiedergeben...

    Es sollte ausreichen, wenn du die z Koordinate ein wenig nach oben verschiebst (bei den Autos und beim Spieler). Sollte der Spieler dann trotzdem noch durch die Objekte fallen, kannst du ihn nach
    SetPlayerPos(playerid,...);
    freezen und einen Timer stllen für wenige Sekunden
    SetTimerEx(...);
    der ihn dann wieder unfreezt.

    Befehle dir du hierfür brauchst sind:
    GetVehicleModel(vehicleid); /* Kontrollierenm ob man in dem LKW sitzt */
    IsTrailerAttachedToVehicle(vehicleid); /* Kontrollieren ob ein Anhänger hinten am Truck hängt */
    GetVehicleTrailer(vehilceid); /* gibt die Trailerid aus */
    /* überprüfen ob der Trailer der richtige ist: */
    if(GetVehicleTrailer(vehicleid) == DIETRAILERID)

    Wie speicherst du die Daten in deinem Script? In Mysql oder in Dateien(z.B. ".ini")?
    Ich bin mir nicht sicher, ob es bereits ein UCP zum Downloaden gibt (möglicherweise auf forum.sa-mp.com), aber selbst wenn müsstest du dieses bearbeiten und an deinen Server anpassen. D.h. du solltest so oder so über PHP/MySQL Kentnisse verfügen...