Beiträge von UncleSub

    Du musst erstmal bei OnDialogResponse noch:


    SetPVarString(playerid, "maskname", inputtext);


    einfügen.


    Dann bei OnPlayerUpdate:

    public OnPlayerUpdate(playerid)
    {
    if(Maske[playerid] == 1)
    {
    new string[128], Float:health, Float:armour, mname[MAX_PLAYER_NAME];
    GetPlayerHealth(playerid, health);
    GetPlayerArmour(playerid, armour);
    new rhealth = floatround(health, floatround_round);
    new rarmour = floatround(armour, floatround_round);
    GetPVarString(playerid, "maskname", mname, MAX_PLAYER_NAME);
    format(string, 128, "{FFFFFF}%s \n{FF2800}H: %i | A: %i", mname, rhealth, rarmour);
    Update3DTextLabelText(maskenlabel[playerid], 0xFFFFFFFF, string);
    }
    }


    Ist mal wieder nicht getestet, aber so sollts gehn.


    Mfg,
    UncleSub

    Zu deinen Fragen:



    //iwo oben
    new Text3D:maskenlabel[MAX_PLAYERS];
    //Ondialogresponse
    if(dialogid == DIALOG_DEINE_DIALOG_ID)
    {
    if(response)
    {
    if(strlen(inputtext) < 3)
    {
    return SendClientMessage(playerid, COLOR_DEINE_COLOR, "Ungültiger Name");
    }
    new string[128], Float:health, Float:armour;
    GetPlayerHealth(playerid, health);
    GetPlayerArmour(playerid, armour);
    new rhealth = floatround(health, floatround_round);
    new rarmour = floatround(armour, floatround_round);
    format(string, 128, "{FFFFFF}%s \n{FF2800}H: %i | A: %i", inputtext, rhealth, rarmour);
    maskenlabel[playerid] = Create3DTextLabel(string, 0xFFFFFFFF, 0.0, 0.0, 0.0, 35.0, 0, 1);
    Attach3DTextLabelToPlayer(maskenlabel[playerid], playerid, 0.0, 0.0, 0.6);
    GameTextForPlayer(playerid,"~w~Du setzt deine Maske auf.",100,0);
    Maske[playerid] = 1;
    SetPlayerAttachedObject(playerid,1,19036,2,0.107,0.035,0.0,90,90,0);
    for(new i=0; i<MAX_PLAYERS; i++)
    {
    ShowPlayerNameTagForPlayer(i,playerid,false);
    }
    }
    }


    Falls du etwas editieren möchtest am TextLabel, oder es ganz löschen willst, musst du als Labelid "maskenlabel[playerid]" nehmen.


    Das ganze ist ungetestet, sollte dir aber trotzdem einen groben Überblick verschaffen, wie es geht.


    Mfg,
    UncleSub

    Du hast eigentlich alle Komponenten aufgelistet. Mische alles zusammen und das wars!


    Falls du trotzdem noch Hilfe brauchst:


    1. Dialog zeigen
    (1.5. Abfragen ob der Spieler einen Namen eingegeben hat. -> Hier)
    2. 3dTextLabel erstellen (Hier) mit formatiertem Text:
    format(string,128,"%s\nL:%.0f R:%.0f", inputtext,health,armour);
    inputtext ist der Text, der bei Dialogen zurückgeben wird, wenn du DIALOG_STYLE_INPUT nutzt.
    3. 3dTextLabel an Spieler "Attachen" -> Hier
    4. Bei OnPlayerTakeDamage das 3dTextLabel Updaten -> Hier
    5. Wenn der Spieler erneut /maske eingibt muss das 3dTextLabel zerstört werden -> Hier
    6. Freuen und Spaß haben!


    Das wars auch schon. Du musst nur noch darauf achten, dass du die ID des 3dTextLabels zwischenspeicherst. Sonst kannst du es nicht Updaten/Löschen. (z.B. new Text3D:label[MAX_PLAYERS])


    Mfg,
    UncleSub

    isPlayerAnAdmin(...) gibts nicht. Anfänger können somit damit nichts anfangen.
    Außerdem kann man auch ab und zu Sachen erklären. Nicht jeder wurde von Gott mit einer Hyperscriptinggabe erschaffen.


    Mfg

    Solange kein Patent darauf ist, darf man jedes Script benutzen (Gibt soweit ich weiß kein Gesetz dagegen). Deswegen verschicke NIE deine .pwn Datei, sonst existiert dein Script auf 2 Servern. (.pwn auch nicht auf deinen Server laden.)


    Mfg,
    UncleSub

    Entweder du machst:




    if(PlayerInfo[playerid][pAdmin] < 4) return SendClientMessage(.....);


    Oder:


    if(PlayerInfo[playerid][pAdmin] >= 4)



    Liegt bei dir.


    Mfg,
    UncleSub


    //Edit: Housefrau war mal wieder schneller. ^^ Das Problem ist grade halt bei dir, dass der Befehl nur Ausgeführt wird, wenn du Adminlevel kleiner 4 bist..

    if(PlayerInfo[playerid][pAdmin] < 4)
    Ist schon richtig..


    Du hast anscheinend irgendwo eine Funktion, die ebenfalls SetVehicleHealth heißt (??).


    Nutze stattdessen RepairVehicle, ist eh für deinen Befehl besser.


    Mfg,
    UncleSub

    1. Was kommen für Errors?
    2. Zum Reparieren ist RepairVehicle besser geeignet. (Sehbarer Schaden wir dadurch auch repariert)
    3. Der Befehl heißt bei dir /fixveh nicht /afixveh (Ist der Error, dass du Ingame /afixveh eingeben willst und nix passiert?)
    4. Warum am Anfang abfragen, ob der Spieler Connected ist? Wenn er den Befehl eingibt, ist er auch Connected...


    Mfg,
    UncleSub

    Das ist auch totaler Unsinn!


    Bei OnPlayerStateChange wird NUR eine playerid übergeben (wie bei eig. allen Funktionen...). Du hast jetzt abgefragt, ob der Spieler Passenger ist und dann direkt danach, ob der selbe Spieler Driver ist!
    Du musst dann eine Schleife machen:

    new userid;
    for(new i; i < MAX_PLAYERS; i++)
    {
    if(IsPlayerInVehicle(i, GetPlayerVehicleID(playerid)) && GetPlayerState(i) == PLAYER_STATE_DRIVER)
    {
    userid = i;
    break;
    }
    }

    Dadurch hast du dann schonmal die playerid des Fahrers.
    Außerdem macht es sowieso keinen Sinn, weil wenn der Spieler in eimem Fahrzeug Passenger ist und er einen Wheelman gerufen hat, wird das ausgeführt. Sprich er kann in jede x beliebe Karre einsteigen.


    Mfg,
    UncleSub

    Du erstellst eine globale Variable (eine Variable irgendwo oben, aufjedenfall in keinem Stock/Public/Befehl etc.), z.B. new aondgeg[MAX_PLAYERS];.

    Dann bei /aond setzt du die Variable auf 1 und startest einen Timer, der nach 10 Minuten ausläuft (= SetTimerEx("aondgeg", 600000, 0, "i", playerid); ).

    In diesem Timer setzt du die Variable wieder auf 0 zurück. Bei /aond musst du dann nurnoch abfragen, ob die Variable aondgeg[playerid] == 1 ist.


    Mfg,

    UncleSub