Beiträge von Jeffry

    Kurze und präzise Antwort von mir: Nein, es lohnt sich nicht. Solange dein Server keine 10.000 registrierte Nutzer hat, von denen mindestens immer 20+ gleichzeitig online sind wirst du zu dini keinen Unterschied merken.


    Um das noch etwas auszubauen:
    Ich habe mir ein eigenes Filesystem geschrieben, natürlich wesentlich komfortabler und schneller als dini und alles vergleichbare. Gleichzeitig lasse ich die Spielerstatistiken noch in eine Datenbank sichern, jetzt rate mal was weniger ressourcen benötigt und daher den Server weniger belastet? Richtig, mein Filesystem (Die Datenbank liegt lokal auf dem Server).



    Noch kürzere Antwort: Nein.

    CreateObject(14869,posXvorS,posYvorS,z,0.0,0.0,a+90.0);
    oder
    CreateObject(14869,posXvorS,posYvorS,z,0.0,0.0,a-90.0);


    Dann müsste es passen. Frag mich nicht in welche Richtung das jetzt richtig ist, aber eins davon dürfte passen.

    CreateObject(14869,posXvorS,posYvorS,z,0.0,0.0,a);


    Wobei ich mir da nicht sicher bin ob das so funktioniert, probier es mal aus. Ich bin schon öfters aus Probleme mit Rotationen von Objekten gestoßen. Probiers einfach mal. ^^

    if(GetVehicleDriver(v) == INVALID_PLAYER_ID)


    Falls es immer noch nicht tut, poste Bitte die Quelle der GetVehicleDriver Funktion.

    Also bei mir tut der Code einwandfrei. Das ist genau der Code von dem was du gepostet hast. Es hat immer zwei verschiedene Autos gespawnt.


    enum VehCheck
    {
    carid,
    Float:x,
    Float:y,
    Float:z,
    Float:r,
    farbe1,
    farbe2
    };


    new Vehicles[4][VehCheck] =
    {
    {411,1796.4109,-1889.7345,13.1836,96.1796,6,6}, //Gelb
    {402,1797.4174,-1894.3096,13.2549,93.8564,0,0}, //Schwarz
    {541,1797.7924,-1899.7286,13.0675,88.8833,1,1}, //Weiß
    {451,1797.3541,-1905.7574,13.1055,89.7308,36,36}
    };


    public OnPlayerCommandText(playerid, cmdtext[])
    {


    if (strcmp("/vehcheck", cmdtext, true) == 0)
    {
    new tmp[sizeof(Vehicles)], ex;
    for(new i=0; i < 2; i++)
    {
    new Veh = random(sizeof(Vehicles));
    while(tmp[Veh] == 1)
    {
    Veh++;
    if(Veh >= sizeof(Vehicles)) Veh = 0;
    ex++;
    if(ex > 10000) return SendClientMessage(playerid, 0xFF0000FF, "Error"); //Falls jedes Auto gespawnt ist.
    }
    tmp[Veh] = 1;
    CreateVehicle(Vehicles[Veh][carid],Vehicles[Veh][x],Vehicles[Veh][y],Vehicles[Veh][z],Vehicles[Veh][r],Vehicles[Veh][farbe1],Vehicles[Veh][farbe2],0);
    }
    return 1;
    }
    return 0;
    }


    Füg den Code mal so ein und teste es. Wenn immernoch Fehler sind, dann mache ein Bild von dem was passiert wenn du den Command eingibst, bzw. ein Video.

    Kann ich mir grade nicht erklären, bin allerdings auch nur am Handy und kann nicht durchtesten.


    Kannst du mal das enum und das Array so Posten wiedu es hast, dann schau ich es mir morgen abend an wenn ich zu Hause bin.

    Auf Anfrage in PM:


    if (strcmp("/vehcheck", cmdtext, true) == 0)
    {
    new tmp[sizeof(Vehicles)], ex;
    for(new i=0; i < WIE_VIELE_AUTOS; i++)
    {
    new Veh = random(sizeof(Vehicles));
    while(tmp[Veh] == 1)
    {
    Veh++;
    if(Veh >= sizeof(Vehicles)) Veh = 0;
    ex++;
    if(ex > 10000) return SendClientMessage(playerid, 0xFF0000FF, "Error"); //Falls jedes Auto gespawnt ist.
    }
    tmp[Veh] = 1;
    CreateVehicle(/*Variablen hier...*/);
    }
    return 1;
    }


    WIE_VIELE_AUTOS musst du mit der Zahl ersetzen, entsprechend der Anzahl der zufällig gespawnten Autos.


    Was macht der Code?
    Sucht sich ein zufälliges Auto, falls schon gespawnt (tmp[Veh] = 1) schaut er ob das nächste noch nicht gespawnt ist (usw.). Wird eins gefunden, das noch nicht gespawnt wurde, spawnt es, wird nach 10.000 Versuchen keins gefunden, dann stoppt es (kannst auch weniger machen, eigentlich reicht es, wenn die die Anzahl der Autos in deinem Array + 1 dort setzt, dann haste alle durch.)

    Vorteil ist, man muss nicht immer das Plugin updaten:p
    Außerdem kann man so Fehler vermeiden, die von sscanf aus kommen


    Endlich jemand der meine Meinung teilt!


    Und man hat schlichtweg mehr scripttechnische Freiheiten, die sscanf einem wegnimmt. Wer wirklich scripten will, der nutzt sscanf nicht, das hätte er/sie gar nicht nötig.



    (Auch wenn das etwas Off-Topic ist, aber das musste gesagt werden.)

    Nein. Warum? Nur weil es etwas mehr Code ist? Das hat damit nichts zu tun, das ist Ansichtssache. Ich persönlich bevorzuge die strtok Methode, da ich da mehr Freiheiten habe, außerdem weiß ich da was mein Code macht.


    Wie gesagt: Ansichtssache.

    Nach dieser Zeile:
    health = strvalEx(tmp);


    Das da einfügen:
    if(health < 1 || health > 299) return SendClientMessage(playerid, 0xFF0000FF,"Skin muss zwischen 1 und 299 sein!");


    Warum auch immer die variable hier health genannt worden ist...

    GetPlayerPos(playerid,x,y,z);
    GetPlayerFacingAngle(playerid, a);
    posXvorS = x + (ABSTAND_VOM_SPIELER * floatsin(-a, degrees));
    posYvorS = y + (ABSTAND_VOM_SPIELER * floatcos(-a, degrees));


    Alle Variablen sind als "Float:" definiert. (degrees ist keine Variable!)



    CreatePlayerObject(playerid,2691,posXvorS,posYvorS,z,0.0,0.0,0.0);

    @FleX_GuN:
    format(infostring, 256, "Du hast dir die Waffe %s gekauft mit %d Munition. Preis: $%d (20%s Rabatt).",gunid,ammo,Rabatt, "%%");


    Das tut so.



    PS: 256 in SendClientMessage ist sinnlos, es kann maximal 144 Zeichen ausgeben, versuchst du mehr auszugeben, zeigt es gar nichts an.

    public ILS(playerid)
    {
    PlayerTextDrawShow(playerid,ILS1[playerid]);
    PlayerTextDrawShow(playerid,ILS2[playerid]);
    PlayerTextDrawShow(playerid,ILS3[playerid]);
    PlayerTextDrawShow(playerid,ILS4[playerid]);
    PlayerTextDrawShow(playerid,ILS5[playerid]);
    new Float:ilsX,Float:ilsY,Float:ilsZ;
    GetPlayerPos(playerid,ilsX,ilsY,ilsZ);
    if(ilsZ < 30.8203)
    {
    PlayerTextDrawColor(playerid, ILS5[playerid], COLOR_RED);
    PlayerTextDrawColor(playerid, ILS4[playerid], COLOR_WHITE);
    return 1;
    }
    else if(ilsZ < 20.8203)
    {
    PlayerTextDrawColor(playerid, ILS5[playerid], COLOR_WHITE);
    PlayerTextDrawColor(playerid, ILS4[playerid], COLOR_RED);
    PlayerTextDrawColor(playerid, ILS3[playerid], COLOR_WHITE);
    return 1;
    }
    else if(ilsZ < 10.8203)
    {
    PlayerTextDrawColor(playerid, ILS4[playerid], COLOR_WHITE);
    PlayerTextDrawColor(playerid, ILS3[playerid], COLOR_RED);
    PlayerTextDrawColor(playerid, ILS2[playerid], COLOR_WHITE);
    return 1;
    }
    else if(ilsZ > 9.8203)
    {
    PlayerTextDrawColor(playerid, ILS3[playerid], COLOR_WHITE);
    PlayerTextDrawColor(playerid, ILS2[playerid], COLOR_RED);
    PlayerTextDrawColor(playerid, ILS1[playerid], COLOR_WHITE);
    return 1;
    }
    else if(ilsZ > 8.8203)
    {
    PlayerTextDrawColor(playerid, ILS2[playerid], COLOR_WHITE);
    PlayerTextDrawColor(playerid, ILS1[playerid], COLOR_RED);
    return 1;
    }
    return 1;
    }


    Hast du es überhaupt probiert...?