Brauche hilfe zu NPCs&Random

Wichtiger Hinweis: Bitte ändert nicht manuell die Schriftfarbe auf schwarz sondern belasst es bei der Standardeinstellung. Somit tragt ihr dazu bei dass euer Text auch bei Verwendung unseren dunklen Forenstils noch lesbar ist!

Tipp: Ihr wollt längere Codeausschnitte oder Logfiles bereitstellen? Benutzt unseren eigenen PasteBin-Dienst Link
  • Hallo Brotfische..
    Ich brauche ein bisschen hilfe:


    - Als erstes müsst ich wissen wie ich einen NPC erstelle der einfach nur steht..Also er ist rein zu Deko da


    - Und dann möchte ich noch wissen wie ich die Fahrzeuge die ich gesetzt habe Random spawnen lassen kann?


    AddStaticVehicle(405,1761.9731,-1045.6183,23.8359,359.3851,40,1);AddStaticVehicle(404,2147.8108,-1143.2487,24.7029,268.2522,109,100);AddStaticVehicle(402,2161.8760,-1192.3782,23.6519,89.9787,39,39);


    Ich bin mir sicher einer von euch kann mir helfen ;)


    //Edit: Brauche noch eine Antwort auf die letzte frage!

    Einmal editiert, zuletzt von Jadeclon ()

  • Mein Problem ist nur ist mach das mit ca. 100 Checkpoints deswegen muss ich das doch irgendwie mit diesem "case" machen oder ?
    Kannst du mir da weiter helfen?


    501.legion


    Ich meine es sollen von ungefähr 100 60 oder 50 Spawnen..


    Edit: Brauche immer noch hilfe

    Einmal editiert, zuletzt von Jadeclon ()

  • Willst du bei jeden Checkpoint einen Bot erstellen oder was willst du genau machen?
    Zu den Spawns: Wenn zufällig eine Anzahl von Fahrzeugen spawnen soll, solltest du erst die Koordinaten der Fahrzeuge in ein Array oder anderswo speichern und dann mit der random-Funktion die zu spawnende Anzahl von Fahrzeugen festlegen. Mit einer einfachen Schleife kannst du dann die Fahrzeuge der Reihenfolge nach spawnen lassen

  • Okay ich habe das jetzt so gemacht:


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


    new Vehicles[3][VehCheck] =
    {
    {411,1796.4109,-1889.7345,13.1836},
    {402,1797.4174,-1894.3096,13.2549},
    {541,1797.7924,-1899.7286,13.0675}
    };


    if (strcmp("/vehcheck", cmdtext, true) == 0)
    {
    new Veh = random(sizeof(Vehicles));
    CreateVehicle(Vehicles[Veh][carid],Vehicles[Veh][x],Vehicles[Veh][y],Vehicles[Veh][z],Vehicles[Veh][farbe1],Vehicles[Veh][farbe2]);
    return 1;
    }


    Bekomme aber immernoch diese Warnings:


    warning 202: number of arguments does not match definition
    warning 202: number of arguments does not match definition

  • Zudem noch das, was Beavis gesagt hat. Da hatte ich nicht drauf geachtet.


    So sollte es sein:
    new Vehicles[3][VehCheck] =
    {
    {411,1796.4109,-1889.7345,13.1836,6,6}, //Gelb
    {402,1797.4174,-1894.3096,13.2549,0,0}, //Schwarz
    {541,1797.7924,-1899.7286,13.0675,1,1} //Weiß
    };


    Die Farben fehlten im Array.

  • Also ich habe es bis jetzt so:


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


    new Vehicles[3][VehCheck] =
    {
    {411,1796.4109,-1889.7345,13.1836,6,6}, //Gelb
    {402,1797.4174,-1894.3096,13.2549,0,0}, //Schwarz
    {541,1797.7924,-1899.7286,13.0675,1,1} //Weiß
    };


    if (strcmp("/vehcheck", cmdtext, true) == 0)
    {
    new Veh = random(sizeof(Vehicles));
    CreateVehicle(Vehicles[Veh][carid],Vehicles[Veh][x],Vehicles[Veh][y],Vehicles[Veh][z],Vehicles[Veh][farbe1],Vehicles[Veh][farbe2],30);
    return 1;
    }


    Und bekomme immer noch diesen Warning:


    warning 202: number of arguments does not match definition // Das ist in der Zeile: CreateVehicle...

  • Na klar, man redet immer von ressourcenschonend Scripten und dann macht man ne Aufnahmen für stehende NPC's?
    Einfach n halbwegs leeren npcmode compilen, in dem eben keine recordings vorkommen.
    Dann kannst du mit dem NPC noch dazu machen was du willst. Du kannst ihn an jede Position porten usw...


    Achja, in meinem npc-mode steht genau so viel drin:

    Code
    #include <a_npc>
    main(){}
  • 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.)


  • 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.)


    Also ich habe es jetzt so:


    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;
    }


    Wenn ich jedoch /vehcheck eingebe spawnen z.B. an dem Infernus Spawn 2 Infernuse übereinander und wo anderes garnichts.

  • 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}
    };


    Bitte sehr