3D-Text & Pickups

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.
    Ich habe ein paar Probleme bzgl. 3D-Texten und Pickups.
    Undzwar möchte ich, sobald ein Spieler stirbt, dass ander Todes-Position ein Pickup erscheint, bis ein Admin den Spieler spawnt, ein Medic den Spieler wiederbelebt oder man die Zeit abwartet. Nur manchmal sind die 3DTexte komischerweise nicht vorhanden o.ä
    Deswegen wollte ich mal fragen, wann muss man 3Dtexte/pickups erstellen, wann löschen, wann die variablen zurücksetzen usw.


    Danke. :/

  • ich denke mal bei dir verschieben sich die pickup/3dtextlabel ids is bei mir auch so leider :/ suche den auslöser für die verscheibung schon seit wochen -.-

  • ich denke mal bei dir verschieben sich die pickup/3dtextlabel ids is bei mir auch so leider :/ suche den auslöser für die verscheibung schon seit wochen -.-

    hast du die koordinaten in eine variable oder ein float eingespeichert? bei floats ist es ganz genau und bei normalen variablen nur bis zum komma. deshalb kann es sich auch ein bisschen verschieben.

  • versuch das mal so
    ist jetzt so aus den Kopf raus enstanden
    in den wiederbeleben command packst du den wert:
    Kill[playerid]=0;
    den in den command rein
    Wie man nen Pickup oder nen label löscht wisst ihr ja
    new Float:Y[MAX_PLAYERS],Float:Y[MAX_PLAYERS],Float:Z[MAX_PLAYERS],Kill[MAX_PLAYERS],Label[MAX_PLAYERS],Pickup[MAX_PLAYERS];//Ganz oben
    public OnPlayerDeath(playerid, killerid, reason)
    {
    GetPlayerPos(playerid,X[playerid],Y[playerid],Z[playerid]);
    Pickup[playerid]=CreatePickup(1254,1,X[playerid],Y[playerid],Z[playerid],0);
    Label[playerid]=Create3DTextLabel("I am Rip",0xCDCDCDFF,X[playerid],Y[playerid],Z[playerid],10.0,0,1);
    Kill[playerid]=1;
    return 1;
    }
    public OnPlayerSpawn(playerid)
    {
    if(Kill[playerid]==1)
    {
    SetPlayerPos(playerid,X[playerid],Y[playerid],Z[playerid]);
    TogglePlayerControllable(playerid,0);
    ApplyAnimation(playerid, "CRACK", "crckdeth2", 4.0, 1, 0, 0, 0, 0);
    }
    return 1;
    }

  • Genauso haben wir es ja.
    Wir haben sogar versucht die Death-Labels auf Dynamic zu stellen, sprich mit Streamer... Ich send gleich mal alles was ich mit diesem Totenkopf Zeug habe...


    //Edit
    Hier mal die Dinge wo ich erstelle, etc.:

    enum SpielerDaten
    {
    //andere vars..
    pTotPickup,
    Text3D:pTot3D
    }
    new Spieler[MAX_PLAYERS][SpielerDaten];


    //OnPlayerDisconnect
    if(Spieler[playerid][pTot] == 1)
    {
    DestroyDynamicPickup(Spieler[playerid][pTotPickup]);
    DestroyDynamic3DTextLabel(Spieler[playerid][pTot3D]);
    }


    //Der Timer wenn man im Krankenhaus ist
    public OnPlayerTot(playerid)
    {
    if(IsPlayerConnected(playerid) && gPlayerLogged[playerid] == 1)
    {
    if(Spieler[playerid][pTot] == 1)
    {
    if(Spieler[playerid][pTotTime] > 0)
    {
    Spieler[playerid][pTotTime] -= 1;
    new zahl[50];
    format(zahl, sizeof(zahl), "~y~Krankenhaus: ~w~%d Sek.", Spieler[playerid][pTotTime]);
    TextDrawSetString(TotMessage[playerid], zahl);
    }
    else
    {
    DestroyDynamicPickup(Spieler[playerid][pTotPickup]);
    DestroyDynamic3DTextLabel(Spieler[playerid][pTot3D]);
    Spieler[playerid][pTotTime] = 0;
    Spieler[playerid][pTot] = 0;
    SpawnPlayerEx(playerid);
    KillTimer(totwait[playerid]);
    TextDrawHideForPlayer(playerid, TotMessage[playerid]);
    }
    }
    }
    return 1;
    }
    //OnPlayerDeath
    public OnPlayerDeath(playerid, killerid, reason)
    {
    Delete3DTextLabel(Spieler[playerid][pWantedLabel]);
    new string[128], Float:x, Float:y, Float:z, caller;
    GetPlayerPos(playerid, x, y, z);
    Spieler[playerid][pTot] = 1;
    Spieler[playerid][pTotTime] = 240;
    Spieler[playerid][pTotX] = x;
    Spieler[playerid][pTotY] = y;
    Spieler[playerid][pTotZ] = z;
    caller = CurrentPhone[playerid];
    if(caller != 999)
    {
    if(caller < 999)
    {
    SendClientMessage(caller, COLOR_GREY, "Die Leitung ist tot...");
    CurrentPhone[caller] = 999;
    }
    CurrentPhone[playerid] = 999;
    }
    if(Spieler[playerid][pJailed] == 1)
    {
    Spieler[playerid][pTot] = 0;
    Spieler[playerid][pTotTime] = 0;
    return 1;
    }
    if(killerid != INVALID_PLAYER_ID)
    {
    if(Spieler[playerid][pFraktion] == 3)
    {
    format(string, sizeof(string), "Sanitäter %s wurde von %s getötet.", GetName(playerid), GetName(killerid));
    SaniDeathLog(string);
    }
    if(Spieler[playerid][pFraktion] == 4)
    {
    format(string, sizeof(string), "Reporter %s wurde von %s getötet.", GetName(playerid), GetName(killerid));
    NewsDeathLog(string);
    }
    if(Spieler[playerid][pFraktion] == 5)
    {
    format(string, sizeof(string), "O-Beamter %s wurde von %s getötet.", GetName(playerid), GetName(killerid));
    OAmtDeathLog(string);
    }
    if(Spieler[killerid][pFraktion] == 1 || Spieler[killerid][pFraktion] == 2)
    {
    if(Spieler[playerid][pWanteds] > 0)
    {
    Spieler[playerid][pTot] = 0;
    Spieler[playerid][pTotX] = 0.0;
    Spieler[playerid][pTotY] = 0.0;
    Spieler[playerid][pTotZ] = 0.0;
    Spieler[playerid][pTotTime] = 0;
    new pGehalt = (400*Spieler[playerid][pWanteds]);
    Spieler[killerid][pPayCheck] += pGehalt;
    format(string, sizeof(string), "~w~Gesuchten ~g~getoetet~n~+$%d", pGehalt);
    GameTextForPlayer(killerid, string, 3000, 6);
    GivePlayerCash(playerid, -pGehalt);
    if(Spieler[killerid][pFraktion] == 1){format(string, sizeof(string), ">> Polizist %s hat den Verbrecher %s getötet. <<", GetName(killerid), GetName(playerid));}
    else if(Spieler[killerid][pFraktion] == 2){format(string, sizeof(string), ">> Agent %s hat den Verbrecher %s getötet. <<", GetName(killerid), GetName(playerid));}
    SendClientMessageToAll(COLOR_DARKRED, string);
    Spieler[playerid][pJailed] = 1;
    Spieler[playerid][pJailTime] = 120*Spieler[playerid][pWanteds];
    Spieler[playerid][pWanteds] = 0;
    Spieler[playerid][pWantedDeaths] ++;
    return 1;
    }
    }
    if(!(Spieler[killerid][pFraktion] == 1 || Spieler[killerid][pFraktion] == 2))
    {
    if(Spieler[killerid][pWanteds] < 1)
    {
    Spieler[killerid][pWantedLabel] = Create3DTextLabel("Gesucht", COLOR_RED, 0.0, 0.0, 0.0, 15, 0);
    Attach3DTextLabelToPlayer(Spieler[killerid][pWantedLabel], killerid, 0.0, 0.0, 0.85);
    }
    Spieler[killerid][pWanteds] += 2;
    SendClientMessage(killerid, COLOR_DARKRED,"Du hast ein Verbrechen begangen. (Mord) Reporter: Anonym");
    format(string, sizeof(string), "Dein Aktuelles Wanted Level: %d", Spieler[killerid][pWanteds]);
    SendClientMessage(killerid, COLOR_YELLOW, string);
    format(string, sizeof(string), "HQ: %s (ID: %d) hat ein Verbrechen begangen. (Mord) Reporter: Anonym", GetName(killerid), killerid);
    SendFraktionMessage(1, COLOR_LIGHTRED, string);
    return 1;
    }
    }
    Spieler[playerid][pTot3D] = CreateDynamic3DTextLabel(string, COLOR_WHITE, x, y, z, 10, GetPlayerVirtualWorld(playerid), 0);
    Spieler[playerid][pTotPickup] = CreateDynamicPickup(1254, 0, x, y, z, GetPlayerVirtualWorld(playerid));
    return 1;
    }


    //Admin-Spawn Befehl
    CMD:spawn(playerid, params[])
    {
    new pID;
    if(Spieler[playerid][pAdmin] < 1)return SendClientMessage(playerid, COLOR_GREY, "Du besitzt nicht die benötigten Rechte.");
    if(sscanf(params, "u", pID))return SendClientMessage(playerid, COLOR_GREY, "* Benutze /spawn [SpielerID/Name] [Grund]");
    if(!IsPlayerConnected(playerid))return SendClientMessage(playerid, COLOR_GREY, "Der Spieler ist nicht online.");
    if(Spieler[pID][pTot] == 1)
    {
    Spieler[pID][pTot] = 0;
    Spieler[pID][pTotTime] = 0;
    DestroyDynamicPickup(Spieler[playerid][pTotPickup]);
    DestroyDynamic3DTextLabel(Spieler[playerid][pTot3D]);
    }
    SpawnPlayerEx(pID);
    SendClientMessage(pID, COLOR_LIGHTGREY, "Du wurdest gespawnt.");
    TextDrawHideForPlayer(pID, TotMessage[pID]);
    return 1;
    }


    //Wiederbeleben Befehl
    CMD:wiederbeleben(playerid, params[])
    {
    new pID, string[128];
    if(!(Spieler[playerid][pFraktion] == 3))return SendClientMessage(playerid, COLOR_GREY, "Du bist kein Sanitäter.");
    if(sscanf(params, "u", pID))return SendClientMessage(playerid, COLOR_GREY, "* Benutze /wiederbeleben [SpielerID/Name]");
    if(!IsPlayerConnected(pID))return SendClientMessage(playerid, COLOR_GREY, "Der Spieler ist nicht online.");
    if(Spieler[pID][pTot] == 0)return SendClientMessage(playerid, COLOR_GREY, "Der Spieler ist nicht tot.");
    if(IsPlayerInRangeOfPoint(playerid, 10.0, Spieler[pID][pTotX], Spieler[pID][pTotY], Spieler[pID][pTotZ]))
    {
    Spieler[pID][pTot] = 0;
    Spieler[pID][pTotX] = 0.0;
    Spieler[pID][pTotY] = 0.0;
    Spieler[pID][pTotZ] = 0.0;
    DestroyDynamicPickup(Spieler[playerid][pTotPickup]);
    DestroyDynamic3DTextLabel(Spieler[playerid][pTot3D]);
    TextDrawHideForPlayer(pID, TotMessage[playerid]);
    GivePlayerCash(playerid, 500);
    format(string, sizeof(string), "* Du hast %s wiederbelebt. (+$500)", GetName(pID));
    SendClientMessage(playerid, COLOR_GREEN, string);
    format(string, sizeof(string), "* Du wurdest von Sanitäter %s wiederbelebt.", GetName(playerid));
    SendClientMessage(pID, COLOR_GREEN, string);
    format(string, sizeof(string), "* Sanitäter %s hat den Verletzten %s wiederbelebt.", GetName(playerid), GetName(pID));
    SendFraktionMessage(3, COLOR_YELLOW, string);
    SpawnPlayerEx(pID);
    DisablePlayerCheckpointEx(playerid);
    TextDrawHideForPlayer(pID, TotMessage[pID]);
    }
    return 1;
    }



    Ich hoffe, es kann jemand helfen. :(

  • Ich kann dir sagen wiso der Label und der Pickup nicht verschwindet
    Du fragst ab ob PID tot ist das ist richtig aber wiso löscht du nicht den label von PID?
    bei den Pickup das selbe
    du löscht nur den von playerid sprich der der den cmd eingegeben hat

  • hast du die koordinaten in eine variable oder ein float eingespeichert? bei floats ist es ganz genau und bei normalen variablen nur bis zum komma. deshalb kann es sich auch ein bisschen verschieben.

    xD das weiß ich auch :D ich meine keine Verschiebung wo sich die Textlabels nicht an den genauen Koordianten befinden sondern eine die die Textlabel ids verschiebt :/