Spezielle Koordinaten in ein Textdokument speichern

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
  • Das alleine reicht allerdings für die korrekte Funktionalität nicht aus.


    Der Befehl muss so aussehen:
    CMD:deletegift(playerid,params[])
    {
    new i;
    if(sscanf(params, "i", i)) return SendClientMessage(playerid, 0xFF0000FF, "{FF1717}ERROR:{FFFFFF} /deletegift [ID]");
    if(i < 0 || i >= sizeof(GiftBox)) return SendClientMessage(playerid, 0xFF0000FF, "{FF1717}ERROR:{FFFFFF} Dieses Geschenk existiert nicht.");
    if(GiftBox[i][e_x] == 0.0 && GiftBox[i][e_y] == 0.0 && GiftBox[i][e_z] == 0.0) return SendClientMessage(playerid, 0xFF0000FF, "{FF1717}ERROR:{FFFFFF} Dieses Geschenk existiert nicht.");

    DestroyDynamicObject(GiftBox[i][e_oID]);
    GiftBox[i][e_oID] = -1;

    new path[64];
    format(path, sizeof(path), "/GiftBoxs/%d.ini", i);
    if(fexist(path)) fremove(path);

    GiftBox[i][e_x] = 0.0;
    GiftBox[i][e_y] = 0.0;
    GiftBox[i][e_z] = 0.0;
    return 1;
    }


    Ansonsten können einige Fehler auftreten.

  • Beitrag von JustMe.77 ()

    Dieser Beitrag wurde vom Autor gelöscht ().
  • Du meinst das hier?



    GiftBox[i][e_GiftID] = CreateDynamic3DTextLabel("ID: %i.",0xFF0000FF, GiftBox[i][e_x], GiftBox[i][e_y], GiftBox[i][e_z]+1.10,8.0);



    Das zu:
    new str[16];
    format(str, sizeof(str), "ID: %i.", i);
    GiftBox[i][e_GiftID] = CreateDynamic3DTextLabel(str,0xFF0000FF, GiftBox[i][e_x], GiftBox[i][e_y], GiftBox[i][e_z]+1.10,8.0);


    Außerdem müsstest du die Labels natürlich auch beim Delete-Befehl löschen, das darfst du nicht vergessen.

  • Wenn es dir um das löschen geht, kannst du alternativ auch einfach so eine Funktion machen:


    Dann löschst du automatisch das Geschenk, welches dir am nähsten ist (vorausgesetzt es ist mind. 15m in deiner Nähe).



    stock getClosestGift(playerid)
    {
    new id = -1;
    for(new i,Float:tmp,Float:max=15.0; i<MaxGifts; i++)
    {
    tmp = GetPlayerDistanceFromPoint(playerid, GiftBox[i][e_x], GiftBox[i][e_y], GiftBox[i][e_z]);
    if(tmp < max) max=tmp,id=i;
    }
    return i;
    }


    //Benutzung:
    new i = getClosestGift(playerid);
    if(i == -1 || !GiftBox[i][e_x]) return SendClientMessage(playerid,-1,"Kein Geschenk in deiner Nähe!");
    DestroyDynamicObject(GiftBox[i][e_GiftID]);
    //Und dann halt der Rest

    ast2ufdyxkb1.png


    Leute, lernt scripten und versucht mal lieber etwas selber zu schreiben, als es aus einem GF zu kopieren. :S

  • Beitrag von JustMe.77 ()

    Dieser Beitrag wurde vom Autor gelöscht ().
  • Die Funktion ist falsch (id muss returnt werden), sie muss so aussehen:
    stock getClosestGift(playerid)
    {
    new id = -1, Float:tmp, Float:dist=15.0;
    for(new i = 0; i<MaxGifts; i++)
    {
    tmp = GetPlayerDistanceFromPoint(playerid, GiftBox[i][e_x], GiftBox[i][e_y], GiftBox[i][e_z]);
    if(tmp < dist)
    {
    dist = tmp;
    id = i;
    }
    }
    return id;
    }
    Ich habe das "max" mit "dist" ersetzt, da du es bereits definiert hattest.


    Und der Befehl müsste so aussehen:
    CMD:dclosestgift(playerid,params[])
    {
    new string[100];
    new i;
    if(sscanf(params, "i", i))
    {
    i = getClosestGift(playerid);
    if(i == -1) return SendClientMessage(playerid,-1,"Kein Geschenk in deiner Nähe!");
    }
    if(i < 0 || i >= sizeof(GiftBox)) return SendClientMessage(playerid,WHITE, "{FF1717}ERROR:{FFFFFF} Dieses Geschenk existiert nicht.");
    if(GiftBox[i][e_x] == 0.0 && GiftBox[i][e_y] == 0.0 && GiftBox[i][e_z] == 0.0) return SendClientMessage(playerid,WHITE, "{FF1717}ERROR:{FFFFFF} Dieses Geschenk existiert nicht.");


    DestroyDynamicObject(GiftBox[i][e_oID]);
    DestroyDynamic3DTextLabel (GiftBox[i][e_label] );
    format(string, sizeof(string), "{00FFFF}Giftbox {FFFF00}(%i) {FF0000}deleted.",i);
    SendClientMessage(playerid,WHITE, string);
    GiftBox[i][e_oID] = -1;


    new path[64];
    format(path, sizeof(path), "/GiftBoxs/%d.ini", i);
    if(fexist(path)) fremove(path);


    GiftBox[i][e_x] = 0.0;
    GiftBox[i][e_y] = 0.0;
    GiftBox[i][e_z] = 0.0;
    return 1;
    }
    Dann wird, wenn du keine ID eingibst, die nächste ID genommen.

  • Beitrag von JustMe.77 ()

    Dieser Beitrag wurde vom Autor gelöscht ().
  • CMD:giftlist(playerid,params[])
    {
    new str[512];
    for(new i=0; i<MaxGifts; i++)
    {
    if(GiftBox[i][e_x] == 0.0 && GiftBox[i][e_y] == 0.0 && GiftBox[i][e_z] == 0.0) continue;
    format(str, sizeof(str), "%sGiftbox (ID: %i)\n", str, i);
    }
    if(strlen(str)) ShowPlayerDialog(playerid, DIALOG_GIFTLIST, DIALOG_STYLE_MSGBOX, "Gift List", str, "Ok", "");
    else SendClientMessage(playerid, 0xFF0000FF, "Error: Es wurde kein Geschenk erstellt.");
    return 1;
    }

  • Beitrag von JustMe.77 ()

    Dieser Beitrag wurde vom Autor gelöscht ().
  • do.de - Domain-Offensive - Domains für alle und zu super Preisen
  • Beitrag von JustMe.77 ()

    Dieser Beitrag wurde vom Autor gelöscht ().
  • Dann dürfte es so eigentlich klappen:
    CMD:giftlist(playerid,params[])
    {
    new str[MaxGifts*20];
    for(new i=0; i<MaxGifts; i++)
    {
    if(GiftBox[i][e_x] == 0.0 && GiftBox[i][e_y] == 0.0 && GiftBox[i][e_z] == 0.0) continue;
    format(str, sizeof(str), "%sGiftbox (ID: %i)\n", str, i);
    }
    if(strlen(str)) ShowPlayerDialog(playerid, DIALOG_GIFTLIST, DIALOG_STYLE_LIST, "Gift List", str, "Ok", "");
    else SendClientMessage(playerid, 0xFF0000FF, "Error: Es wurde kein Geschenk erstellt.");
    return 1;
    }

  • Beitrag von JustMe.77 ()

    Dieser Beitrag wurde vom Autor gelöscht ().
  • Beitrag von JustMe.77 ()

    Dieser Beitrag wurde vom Autor gelöscht ().
  • CMD:takegift(playerid)
    {
    for(new i = 0; i < MaxGifts; i++)
    {
    if(GiftBox[i][e_x] == 0.0 && GiftBox[i][e_y] == 0.0 && GiftBox[i][e_z] == 0.0) continue;
    if(IsPlayerInRangeOfPoint(playerid, 5.0, giftPos[i][e_x], giftPos[i][e_y], giftPos[i][e_z]))
    {
    RandomGift(playerid);
    return 1;
    }
    }
    return 1;
    }


    Und:
    new randomgift = random(MaxGifts) + 1;
    zu:
    new randomgift = random(3) + 1;

  • Beitrag von JustMe.77 ()

    Dieser Beitrag wurde vom Autor gelöscht ().
  • Beitrag von JustMe.77 ()

    Dieser Beitrag wurde vom Autor gelöscht ().
  • do.de - Domain-Offensive - Domains für alle und zu super Preisen