Beiträge von Rafelder

    Da kann ich The_OTTO nur Recht geben.
    Ein dynamisches Vehiclesystem zu scripten, dass ohne Bugs einwandfrei bei bis zu 500 Spielern läuft ist nicht gerade leicht.
    Du brauchst erstmal ein Konzept, sprich du denkst dir aus "Was soll das System können" und fängst dann an.
    Wenn du nicht mal weißt wie du anfangen sollst, dann am besten garnicht.
    Ohne Erfahrung bei enum, Arrays, Schleifen, dini usw. hast du keine Chance.
    Also lass dich lieber auf was Leichtereres ein ;)

    Ich seh dein Problem nicht. Du hast doch alles definiert:

    // clickedplayerid ist der Spieler der angeklickt wurde
    new ClickedPlayer[MAX_PLAYERS]; // nur ein Beispiel, am besten baust dus in PlayerInfo mit ein ;D


    public OnPlayerClickPlayer(playerid, clickedplayerid, source)
    {
    ClickedPlayer[playerid] = clickedplayerid;
    return 1;
    }
    Also speicherst du einfach die ID vom amgeklickten Spieler in einer Variable von dem Spieler, der ihn angeklickt hat, und rufst diese dann beim Sms Dialog wieder auf
    PlayerInfo[ClickedPlayer[playerid]][pPnumber] // Das ist die Nummer

    Zacharias:


    Wieso prüfst du ob der Spieler online ist der gerade den Befehl eingibt ?
    Dein Fehler war, dass du eine folgende Schleife erstellt hast:
    for(new car=91; car>=90; car++)
    // Wird so durchgerechnet:
    // Schleife fängt bei 91 an und addiert jedes mal 1 (wegen car++) bis "car" nicht meht mit der zweiten Anweisung übereinstimmt (car>=90)
    // Und da es unendlich viele Zahlen über 90 gibt hört die Schleife nie auf..
    So funktionierts:
    if((!strcmp(cmd, "/deleteallcars", true)) || (!strcmp(cmd, "/dac", true)))
    {
    if(PlayerInfo[playerid][Level] >= 4)
    {
    new bool:unwanted[MAX_VEHICLES];
    for(new player=0; player<MAX_PLAYERS; player++)
    {
    if(IsPlayerInAnyVehicle(player)) unwanted[GetPlayerVehicleID(player)] = true;
    }
    for(new car=91; car<MAX_VEHICLES; car++)
    {
    if(!unwanted[car]) DestroyVehicle(car);
    }
    new pname[MAX_PLAYER_NAME];
    GetPlayerName(playerid, pname, MAX_PLAYER_NAME);
    format(string, sizeof(string), "SERVER: All unused cars deleted by %s.", pname);
    SendClientMessageToAll(COLOR_WHITE,string);
    }
    else
    {
    SendClientMessage(playerid, red, "you are not authorized to use this command!");
    }
    return 1;
    }

    Nur dass es in nem normalen Timer weder playerid noch weaponid gibt..
    Du musst ganz einfach bei OnPlayerUpdate das hier machen: (Woher soll denn dein Scipt wissen welche Waffe du willst ??)

    public OnPlayerUpdate(playerid)
    {
    UpdateTextdraws(playerid, GetPlayerWeapon(playerid));
    return 1;
    }

    Zwei Funktionen, die zwar nich wirklich aufwendig sind, aber nützlich..
    Man spar lediglich ein paar Zeichen, die man nicht wirklich braucht ;D

    stock strfindex(source[], string[]) // Um zu prüfen ob source[] string[] beinhaltet
    {
    if(strfind(source, string, true, 0) != -1) return true;
    return false;
    }


    stock strcmpex(source[], comp[]) // Um zwei Strings zu vergleichen
    {
    if(!strcmp(source, comp, true)) return true;
    return false;
    }

    Also ich hab mich eben ma hingesetzt und n bisschen was zusammen geschrieben (Sorry |-|auke, deins war echt total verbuggt & hätte nicht funktioniert), was eigentlich funktioneren müsste.
    Ich konnte es nich testen da ich ja grad ma keine Leute auf ienen Server hab also wird auch nichts angezeigt.
    Einen neuen Admin usw. kannst du in OnGameModeInit erstellen (einfach mal nachschauen)
    #include <a_samp>


    #define ServerOwner 0
    #define Administrator 1
    #define SuperModerator 2
    #define Moderator 3


    #define GroupID 1337
    #define groupsize 10


    new a_name[MAX_PLAYER_NAME];


    enum a_admins
    {
    name[MAX_PLAYER_NAME],
    bool:online
    }


    // Gruppe / Anzahl / Stringsize
    new Admins[4][groupsize][a_admins];


    new Groups[4][20] = {"-> Server Owner", "-> Adminstrator", "-> Supermoderator", "-> Moderator"};


    public OnGameModeInit()
    {
    format(Admins[ServerOwner][0][name], MAX_PLAYER_NAME, "YourName"); // ServerOwner 1
    format(Admins[ServerOwner][1][name], MAX_PLAYER_NAME, "YourName"); // ServerOwner 2
    format(Admins[Administrator][0][name], MAX_PLAYER_NAME, "YourName"); // Admin 1
    format(Admins[Administrator][1][name], MAX_PLAYER_NAME, "YourName"); // Admin 2
    format(Admins[SuperModerator][0][name], MAX_PLAYER_NAME, "YourName"); // SuperMod 1
    format(Admins[SuperModerator][1][name], MAX_PLAYER_NAME, "YourName"); // SuperMod 2
    format(Admins[Moderator][0][name], MAX_PLAYER_NAME, "YourName"); // Mod 1
    format(Admins[Moderator][1][name], MAX_PLAYER_NAME, "YourName"); // Mod 2
    // Also Admins[ Gruppe ][ 0-9 ][ name (stehen lassen) ]
    return 1;
    }


    public OnPlayerConnect(playerid)
    {
    for(new a=0; a<4; a++)
    {
    for(new i=0; i<groupsize; i++)
    {
    if(!strcmp(PlayerName(playerid), Admins[a][i][name], true))
    {
    Admins[a][i][online] = true;
    }
    break;
    }
    }
    return 1;
    }


    public OnPlayerDisconnect(playerid, reason)
    {
    for(new a=0; a<4; a++)
    {
    for(new i=0; i<groupsize; i++)
    {
    if(!strcmp(PlayerName(playerid), Admins[a][i][name], true))
    {
    Admins[a][i][online] = false;
    }
    break;
    }
    }
    return 1;
    }



    public OnPlayerCommandText(playerid, cmdtext[])
    {
    if(!strcmp(cmdtext, "/admins", true))
    {
    new b_string[256];
    for(new i=0; i<4; i++)
    {
    format(b_string, sizeof(b_string), "%s\n", Groups[i]);
    for(new a=0; a<groupsize; a++)
    {
    if(Admins[i][a][online] == true)
    {
    format(b_string, sizeof(b_string), "%s%s\n", b_string, Admins[i][a][name]);
    }
    }
    }
    ShowPlayerDialog(playerid, GroupID, DIALOG_STYLE_MSGBOX, "Admins", b_string, "Ok", "Cancel");
    //ShowPlayerDialog(playerid, GroupID, DIALOG_STYLE_LISTBOX, "Admins", b_string, "Ok", "Cancel");
    return 1;
    }
    return 0;
    }


    stock PlayerName(playerid)
    {
    GetPlayerName(playerid, a_name, MAX_PLAYER_NAME);
    return a_name;
    }

    Innenräume erstellen is kamm sogut wie jeder Anfänger :D
    Du gehst in MTA -> Objecte -> Buildings , und scrollst dann ganz nach unten . Dort siehst du einige Innenräume . Du setzt einen hoch in die Luft , und schon hast du einen :D Wenn du ihn z.B. als Fraktionsspawn haben willst , dann empfehle ich dir Modsobeit :P . Da man in MTA kein /save machen kann , gehst du in MTA in den Innenraum mit "Test" und schreibst dir die Koordianten auf , die rechts unten im Modsobeit Fenster stehen :P
    Oder du googelst : "GTA Innenräume". Dann werden auch verschiedene Innenräume angezeigt :P


    mfg


    Oder man macht es sich nicht ganz so schwer & setzt einfach z.B. ein Pickup in den Raum & ließt die Koordinaten aus der Datei aus..



    Er wollte aber doch genau das Gegenteil: Nicht die Farbe die er dem Spieler gegeben hat & außerdem fehlt der Name..



    public OnPlayerText(playerid, text[])
    {
    new string[256], name[MAX_PLAYER_NAME];
    GetPlayerName(playerid, name, MAX_PLAYER_NAME);
    format(string, sizeof(string), "%s: %s", name, text);
    SendClientMessageToAll(0x/*DeineFarbe*/,string);
    return 0;
    }

    ups, stimmt xD


    Hmm, aber dann sollte doch trotzdem alles richtig sein oO Aber es kommen immernoch die errors/warns ?(
    Ich überleg nochma n bissl :D


    MFG, Robdeflop®


    Meines Wissens nach kannst du doch nich eine Länge eines unbekannten Strings abfragen..
    Auch wenn du du dann einen String zuweißt klappt das nicht, genau so wenig wie du ein Array mit einer Größe einer Variable (damit meine ich nicht Definitionen!) erstellst
    new bla[GetPlayerVehicleID(1)]; // Error!
    Also nimm als Länge einfach eine festgelegte Größe ;D


    Seit wann gibt es keinen Unterschied mehr zwischen "y" und "i" ?
    Und so ganz nebenbei würde dann da stehen: "Polizist Name: /polizei Mein Text" ..
    Drüber nachdenken & nochmal ;D


    new ran = random(4); // eine zahl von 0-3 wird zufällig gewählt & bei case einzeln abgerufen
    switch(ran)
    {
    case 0: { // Strecke 1
    }
    case 1: { // Strecke 2
    }
    case 2: { // Strecke 3
    }
    case 4: { // Strecke 4
    }
    }
    // Geht auch kürzer & anders aber ich denk ma das ist für dich am leichtesten verständlich & für alles anzuwenden ;)
    // Wenns nur um Variablen geht, die eine zufällige Zahl wollen, dann so : z.B. mit deinem auftrag[playerid]:
    auftrag1[playerid] = random(4);

    Schön dass wir die Zeilen von den Errors wissen.. leider stehn die auch nur in den Errors..
    Ich würd ma sagen du hast in ieinem Array die Größe des Arrays überschritten => Zeile => Zählen


    Auf Non-Pawn: Wenn Autoleben mehr als 1000 dann auf 1000 setzen ?
    Was hat das mit repair zu tun ?
    Außerdem ein Fehler drin ;D
    new Float:vhealth, ID;
    ID = GetPlayerVehicleID(playerid);
    GetVehicleHealth(ID, vhealth);
    if(vhealth <= 200) SetVehicleHealth(ID, 1000);