Erweiterteres Maskensystem << Hilfe bei string + Text + Create3DTo Player+ Danke

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
    Wie ihr schon mitbekommen habt, ich habe ein maskensystem gescriptet und möchte es nun etwas Erweitern.
    D.h mit was coolen, Namen selbstschreibbar.


    Maskensystem bei mir
    ocmd:maske(playerid,params[])
    {
    if(IsPlayerInFrak(playerid,6))
    {
    if(Maske[playerid]==1)
    {
    GameTextForPlayer(playerid,"~r~Du setzt deine Maske ab.",100,0);
    Maske[playerid] = 0;
    RemovePlayerAttachedObject(playerid, 1);
    for(new i=0; i<MAX_PLAYERS; i++)
    {
    ShowPlayerNameTagForPlayer(i,playerid,true);
    }
    }
    else if(Maske[playerid]==0)
    {
    new Float:health, Float:armour, string[128];
    GetPlayerHealth(playerid,health);
    GetPlayerArmour(playerid,armour);
    floatround(health,floatround_tozero);
    floatround(armour,floatround_tozero);
    format(string,128,"Unbekannter\nL:%.0f R:%.0f",health,armour);
    SetPlayerChatBubble(playerid,string,rot,40.0,10000);
    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);
    }
    }
    }
    else
    {
    SendClientMessage(playerid,weiss,"Du bist kein Terrorist");
    }
    }

    Was willst du genau John_Kramer ?

    Ich möchte mein Maskensystem verändern.
    Ich möchte das wenn der Spieler den Befehl eingibt ein Dialog gezeigt wird,
    wo man was Eintragen kann. Genau gesagt ein INPUT Dialog, in den man nun sein Namen eintragen muss.
    Und den Namen den Man eingetragen hat soll nun über den Spieler erscheinen, wo nun Unbekannter steht.
    format(string,128,"Unbekannter\nL:%.0f R:%.0f",health,armour);
    Wenn ich die Maske nun wieder absetzte soll der Name weggehen und der richtige wieder erscheinen, wenn man die Maske wieder aufstetzt ist der Name wieder änderbar. Habt ihr alles verstanden ? Wenn nicht könnt ihr gerne die Screens im Anhang sehen.

    Was brauchst du deiner Meinung ?

    Ich brauche meiner meinung nach erstmal den Dialog...
    ShowPlayerDialog(playerid,DIALOG_TNAME,DIALOG_STYLE_INPUT,"Wie willst du heissen","Trage bitte unten dein gewünschten Namen ein","Ok","Abbruch");
    Dann unter ONDIALOGRESPONSE
    Das weiss ich leider nicht wie und was ich da machen soll
    Dann gehe ich zur Maske
    also zu den Befehl.
    new Float:health, Float:armour, string[128],text;
    format(string,128,"%s\nL:%.0f R:%.0f"text,health,armour);
    So sollte das eigentlich gehen habe ich Recht ?


    Dann muss ich noch hier nichts machen xD
    public OnPlayerStreamIn(playerid, forplayerid)
    {
    if(Maske[forplayerid]==1)
    {
    SetPlayerAttachedObject(forplayerid, 1, 19036, 2, 0.107, 0.035, 0.0, 90, 90, 0);//Object wird auf den Character gesetzt
    ShowPlayerNameTagForPlayer(playerid,forplayerid,false);//Der Name verschwindet
    }
    return 1;
    }
    Aber Unter OnPlayerUpdate
    public OnPlayerUpdate(playerid)
    {
    if(Maske[playerid] == 1)
    {
    new string[128], Float:hp, Float:am,text; //Wie brauchen diese Zeile, damit das HP ausgegeben und abgefragt werden kann!
    GetPlayerHealth(playerid,hp);//Hier fragen wir das Leben ab
    GetPlayerArmour(playerid,am);//Hier wird die Rüstung abgefragt
    floatround(hp,floatround_tozero);//Das ganze wird gerundet
    floatround(am,floatround_tozero);//Erneut gerundet
    format(string,sizeof(string),"{FFFFFF}%s\n{FF1400}L:%.0f R:%.0f",text,hp,am);//Der Name undbekannt wird gesetzt, Leben & Rüstung wird eingesetzt
    SetPlayerChatBubble(playerid,string,rot,40.0,10000);//Das ganze steht über dem Namen
    return 1;
    }
    So war das
    public OnPlayerUpdate(playerid)
    {
    if(Maske[playerid] == 1)
    {
    new string[128], Float:hp, Float:am; //Wie brauchen diese Zeile, damit das HP ausgegeben und abgefragt werden kann!
    GetPlayerHealth(playerid,hp);//Hier fragen wir das Leben ab
    GetPlayerArmour(playerid,am);//Hier wird die Rüstung abgefragt
    floatround(hp,floatround_tozero);//Das ganze wird gerundet
    floatround(am,floatround_tozero);//Erneut gerundet
    format(string,sizeof(string),"{FFFFFF}Unbekannter\n{FF1400}L:%.0f R:%.0f",hp,am);//Der Name undbekannt wird gesetzt, Leben & Rüstung wird eingesetzt
    SetPlayerChatBubble(playerid,string,rot,40.0,10000);//Das ganze steht über dem Namen
    return 1;
    }
    Dann wars das glaube ich.


    Wie könnt ihr mir helfen ?
    Ihr könnt mir über Skype helfen (pro_gamer38)
    Oder den Coder hier einfach als Antwort posten.
    Das Script gebe ich keinen weiter.


    Ich erwarte nun hilfreiche antworten.


    SREENS

  • 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

  • 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

  • Was muss bei OnPLayerUpdate hin ?
    Wenn da vorher das stand ?

    public OnPlayerUpdate(playerid)
    {
    if(Maske[playerid] == 1)
    {
    new string[128], Float:hp, Float:am; //Wie brauchen diese Zeile, damit das HP ausgegeben und abgefragt werden kann!
    GetPlayerHealth(playerid,hp);//Hier fragen wir das Leben ab
    GetPlayerArmour(playerid,am);//Hier wird die Rüstung abgefragt
    floatround(hp,floatround_tozero);//Das ganze wird gerundet
    floatround(am,floatround_tozero);//Erneut gerundet
    format(string,sizeof(string),"Unbekannter\n{FF1400}L:%.0f R:%.0f",hp,am);//Der Name undbekannt wird gesetzt, Leben & Rüstung wird eingesetzt
    SetPlayerChatBubble(playerid,string,rot,40.0,10000);//Das ganze steht über dem Namen
    return 1;
    }

  • 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