Beiträge von Kaliber

    Ne das habe ich schon Probiert aber ändert sich nichts

    Kannst es einfach so machen:


    C
    Persoskin[playerid] = CreatePlayerTextDraw(playerid, 147.999984, 137.303588, "LD_SPAC:white");
    PlayerTextDrawLetterSize(playerid, Persoskin[playerid], -0.184333, -8.885335);
    PlayerTextDrawTextSize(playerid, Persoskin[playerid], 100.000167, 172.977813);
    PlayerTextDrawBackgroundColor(playerid, Persoskin[playerid], 0x00000000);
    PlayerTextDrawFont(playerid, Persoskin[playerid], 5);
    PlayerTextDrawSetPreviewModel(playerid, Persoskin[playerid], 5);

    Vllt hat Kaliber ja einen Tipp.

    Also grundsätzlich sei gesagt, dass du das mit NPCs nicht hinbekommst. Diese können nicht dynamisch agieren, dort kannst du nur feste Aufnahmen machen und diese laufen die dann ab :) Da kannst du keine Teleportieren o.ä.


    FCNPC ist natürlich etwas anderes, da geht das alles, wie bereits schon erwähnt.


    In der neuen SA:MP Version ist es jetzt auch endlich möglich die Angle ohne Respawn vom Actor zu ändern, dadurch ist natürlich viel mehr jetzt möglich. Ich könnte da mal ein Include für Actors rausbringen, habe da aber aktuell leider keine Zeit für.


    Dennoch kannst du die Actor teleportieren, das mit dem Schießen ist eine Sache für sich, da gibt es leider keine native Funktion zu, allerdings kannst du dir ja mal meinen Alien Server anschauen ([SA:MP] Missionen Server [V. 4]), dort hab ich das mal implementiert gehabt, dass die schießen. Ist natürlich nicht perfekt, aber erfüllt seinen Zweck :)
    Also demnach kannst du mit Actoren mehr anfangen als mit NPCs denke ich mal oder du nutzt FCNPC :)

    Metin 2 good old times :D


    Wäre auch dabei...aber ab der Pferdemedallie auf m normal machts kein Spaß mehr und auf m P-Server biste in 5 Tagen durch hahaha xD


    Aber sonst, echt gut :D

    1. Du solltest das einfach mit format machen:


    format(Flastdriver[vehicleid],MAX_PLAYER_NAME, GetName(playerid));


    2. Das kannst du doch abfragen:



    C
    if(Flastdriver[vehicleid][0] == EOS)
    {
        //Hier ist noch niemand damit gefahren
    }
    else
    {
        //Hier ist bereits jemand damit gefahren
    }

    PS: Nur um das anzumerken (evtl spielt es ja keine Rolle), aber wenn der Spieler fährt und sich beispielsweise ausloggt/crasht oder geportet wird, dann wird der Callback nicht aufgerufen, sondern nur [wiki]OnPlayerStateChange[/wiki] :)

    Warum wird das Fahrzeug beim gemappten boden abgekoppelt wen ich das Fahrzeug beim Normalen standart boden abschleppe funktioniert das...

    Mit dem Boden hat das nichts zu tun?!


    Der Code sieht schäußlich aus...das kann man doch schöner schreiben :/



    PlayerText

    Du deklarierst die Variable als PlayerText verwendest dann aber eine normale TextDraw Funktion. Du musst [wiki]PlayerTextDrawHide[/wiki] verwenden :)


    Und wie mein Hündchen schon sagte, das i da macht keinen Sinn.

    Bekomme immernoch die id 0 zurück.

    Okay, kannst du mal aus Spaß zeigen was die Werte von:


    VehicleTowedSpawn[0][TowedSpawnMinX] , VehicleTowedSpawn[0][TowedSpawnMinY], VehicleTowedSpawn[0][TowedSpawnMaxX], VehicleTowedSpawn[0][TowedSpawnMaxY]


    und


    VehicleTowedSpawn[0][TowedSpawnX],VehicleTowedSpawn[0][TowedSpawnY],VehicleTowedSpawn[0][TowedSpawnZ]


    sind :)

    Also setzen wir mal voraus, dass die Koordinaten stimmen, dann gibt es einige Logik Fehler in deinem Code.


    Ich versuche dir das mal zu erklären, was deine 2 größten sind.


    • Du startest die vehicleids ab 0. Allerdings starten diese bei 1, somit steht das 1. Fahrzeug natürlich nie, an einem Parkplatz, da es nicht existiert. Dann prüfst du, ob es da steht, natürlich nicht und schwupp scheint es so als sei Parkplatz 0 frei.
    • Hier solltest du den 2. Logikfehler gesehen haben, du musst erst durch alle Fahrzeuge durchloopen um zu schauen, ob ein Parkplatz frei ist oder nicht.

    Also hier mal anders:



    Und schreib die andere Funktion mal so, das ist eleganter und schneller:



    C
    stock IsVehicleInArea(vehicleid, Float:MinX, Float:MinY, Float:MaxX, Float:MaxY)
    {
        new Float:X, Float:Y, Float:Z;
        GetVehiclePos(vehicleid, X, Y, Z);
        return (X >= MinX && X <= MaxX && Y >= MinY && Y <= MaxY);
    }

    Uff, du machst da ein ziemliches doppel gemoppel.


    Du könntest auch einfach die vehicleid als index für dein Array nehmen, anstatt nach einem freien Platz zu suchen.


    Schließlich soll das ja auch wieder überschrieben werden, aber so wird dein Array immer größer..und gelöschte Autos bleiben da stehen (es sei denn du resettest diese manuell).


    Wie dem auch sei, du denkst du hättest den index gemappt, aber in deinem Fall ist fV != vehicleid wie es eigentlich sein sollte.


    Also du hast 2 Möglichkeiten, entweder du passt das an und änderst das oder du schreibst eine Funktion wie:


    C
    stock getFV(vehicleid)
    {
        for(new v; v<sizeof(Vehicle); v++)
        {
            if(Vehicle[v][vehID] == vehicleid) return v;
        }
        return INVALID_VEHICLE_ID;
    }


    Und dann deine Funktion so: