Spieler an Pickup definieren

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 eine Frage bezüglich des "Spieler an einem Pickup definieren".
    Undzwar, habe ich ein System entwickelt, wo man Pickups erstellen kann.
    Jedoch möchte ich, wenn man den Server verlässt, (der, der die Pickups erstellt hat)
    auch die Pickups destroyt werden.


    Leider weiß ich nicht, wie ich das umsetzen kann/sollte.
    Bisheriger CreatePickup-Code:


    new healpickup[MAX_PLAYERS];


    if(dialogid == DIALOG_HEAL)
    {
    if(response)
    {
    if(!IsNumeric(inputtext))return ShowPlayerDialog(playerid, DIALOG_HEAL, DIALOG_STYLE_INPUT, "Healpickup", "Bitte gebe eine Zahl von 1 - 100 ein!", "Auswählen", "Abbrechen");
    if(strval(inputtext) >=1 || strval(inputtext) <=100)
    {
    new Float:x, Float:y, Float:z;
    GetPlayerPos(playerid, x, y, z);
    new interior = GetPlayerInterior(playerid);
    healpickup[playerid] = CreatePickup(1274,1,x, y, z);
    return 1;
    }else{
    ShowPlayerDialog(playerid, DIALOG_HEAL, DIALOG_STYLE_INPUT, "Healpickup", "Bitte gebe eine Zahl von 1 - 100 ein!", "Auswählen", "Abbrechen");
    return 1;
    }
    return 1;
    }
    return 1;
    }


    Danke <3


    @Jeffry

  • new healpickup[MAX_PLAYERS];
    zu:
    new healpickup[MAX_PLAYERS]; = {-1,...};
    So werden alle IDs auf -1 instanziiert, damit man sie von der ID 0 unterscheiden kann.


    Und dann dort, wo das Pickup gelöscht werden soll:
    if(healpickup[playerid] != -1) DestroyPickup(healpickup[playerid]);
    healpickup[playerid] = -1;

  • Vielen Dank! @Jeffry
    Jedoch, falls es dir nichts ausmacht, habe ich eine weitere Frage:
    Kann man den "inputtext" den ich bei "DIALOG_HEAL" eingegeben habe. (bzw. die Zahl)
    irgendwie speichern & z.B in "OnPlayerPickUpPickup" aufrufen?


    z.B "SetPlayerHealth(playerid, dialogheal);" ?
    Ich erstelle ein Pickup mit dem Inputtext "50".
    Ein anderer Spieler läuft in diesem Pickup rein, und
    bekommt "50" HP.

  • new healamount[MAX_PICKUPS];


    Nach CreatePickup:
    healamount[healpickup[playerid]] = strval(inputtext);


    Und dann bei OnPlayerPickUpPickup:
    new Float:health;
    GetPlayerHealth(playerid, health);
    SetPlayerHealth(playerid, health + healamount[pickupid]);

  • Nochmal danke,
    Jedoch habe ich komischerweise ein Problem.
    Wenn ich z.B 50 in die MSGBOX eintrage, steht da:
    "Ich habe ein Pickup mit dem man 914301212 HP bekommt".
    Und wenn man das Pickup begeht, ebenfalls.


    Außerdem wenn ich "0" oder "1500" eingebe, wird trotzdem
    ein Pickup erstellt.


    Code:if(strval(inputtext) >=0 || strval(inputtext) <=100)
    {
    new Float:x, Float:y, Float:z;
    GetPlayerPos(playerid, x, y, z);
    healpickup[playerid] = CreatePickup(1274,1,x, y, z);
    healamount[healpickup[playerid]] = strval(inputtext);
    SendClientMessage(playerid, 0xEBFF00FF, "Du hast ein Pickup erstellt, womit man %d HP kriegt.", strval(inputtext));
    return 1;
    }else{
    ShowPlayerDialog(playerid, DIALOG_HEAL, DIALOG_STYLE_INPUT, "Healpickup", "Bitte gebe eine Zahl von 1 - 100 ein!", "Auswählen", "Abbrechen");
    return 1;
    }

  • SendClientMessage(playerid, 0xEBFF00FF, "Du hast ein Pickup erstellt, womit man %d HP kriegt.", strval(inputtext));
    zu:
    new str[145];
    format(str, sizeof(str), "Du hast ein Pickup erstellt, womit man %d HP kriegt.", strval(inputtext));
    SendClientMessage(playerid, 0xEBFF00FF, str);

  • Oh man, sorry, dass ich so viele Fragen habe. @Jeffry
    Aber, ich habe mal wieder ein Problem: Ich habe ein zweites
    Dialog erstellt, (....).


    Nun möchte ich wieder abfragen, wie viel Leben man bekommt.
    Jedoch steht da jedes mal "0". Habe vieles ausprobiert.


    Code:


    if(dialogid == DIALOG_HEAL)
    {
    if(response)
    {
    if(!IsNumeric(inputtext))return ShowPlayerDialog(playerid, DIALOG_HEAL, DIALOG_STYLE_INPUT, "Healpickup", "Bitte gebe eine Zahl von 1 - 100 ein!", "Auswählen", "Abbrechen");
    if(strval(inputtext) >0 && strval(inputtext) <=100)
    {
    ShowPlayerDialog(playerid, DIALOG_HEAL2, DIALOG_STYLE_MSGBOX, "Healpickup", "Soll der Pickup dauerhaft Sichtbar bleiben?\nOder soll es nach dem betreten, für eine gewisse Zeit unsichtbar bleiben?", "Sichtbar", "Unsichtbar");
    healamount[healpickup[playerid]] = strval(inputtext);
    return 1;
    }else{
    ShowPlayerDialog(playerid, DIALOG_HEAL, DIALOG_STYLE_INPUT, "Healpickup", "Bitte gebe eine Zahl von 1 - 100 ein!", "Auswählen", "Abbrechen");
    return 1;
    }
    return 1;
    }
    return 1;
    }



    if(dialogid == DIALOG_HEAL2)
    {
    if(response)
    {
    SendClientMessage(playerid,0xBEBEBEFF, "Okay, also soll es permanent Sichtbar bleiben...");
    new Float:x, Float:y, Float:z;
    GetPlayerPos(playerid, x, y, z);
    healpickup[playerid] = CreatePickup(1274,1,x, y, z);
    SetPlayerPos(playerid, x+2, y, z);
    new str[145];
    format(str, sizeof(str), "Dein Pickup wurde erfolgreich erstellt.\nBeim betreten des Pickups erhält man %d HP.", healamount[healpickup[playerid]]);
    SendClientMessage(playerid, 0xBEBEBEFF, str);
    return 1;
    }else{
    SendClientMessage(playerid,0xBEBEBEFF, "Okay, also soll es nach dem betreten unsichtbar bleiben... (für eine gewisse Zeit)");
    new Float:x, Float:y, Float:z;
    GetPlayerPos(playerid, x, y, z);
    healpickup[playerid] = CreatePickup(1274,2,x, y, z);
    SetPlayerPos(playerid, x+2, y, z);
    new str[145];
    format(str, sizeof(str), "Dein Pickup wurde erfolgreich erstellt.\nBeim betreten des Pickups erhält man %d HP.", healamount[healpickup[playerid]]);
    SendClientMessage(playerid, 0xBEBEBEFF, str);
    return 1;
    }
    return 1;
    }

  • Ändere dann überall
    healamount[healpickup[playerid]]
    zu:
    healamount[playerid]


    Und
    new healamount[MAX_PICKUPS];
    zu:
    new healamount[MAX_PLAYERS];



    Außerdem darf bei SendClientMessage kein \n im Format stehen, das kann im Chat nicht als Zeilenumbruch angezeigt werden.