Beiträge von Jeffry

    Wand 1 bis 3 würde so aussehen:
    SetObjectMaterial(CreateObject(19362, 1320.5771, -878.0583, 40.3257, 0.0000, 0.0000, 0.0000), 0, 4570, "stolenbuild03", "sl_dtbuild2wall1", 0xFFFFFFFF);
    SetObjectMaterial(CreateObject(19362, 1320.5771, -881.2683, 40.3257, 0.0000, 0.0000, 0.0000), 0, 4570, "stolenbuild03", "sl_dtbuild2wall1", 0xFFFFFFFF);
    SetObjectMaterial(CreateObject(19362, 1320.5771, -884.4783, 40.3257, 0.0000, 0.0000, 0.0000), 0, 4570, "stolenbuild03", "sl_dtbuild2wall1", 0xFFFFFFFF);


    Das CreateObject gibt ja die ObjectID zurück. Anstatt diese in einer Variable zwischen zu speichern, wird sie direkt an SetObjectMaterial übergeben.

    Wir die Nachricht nicht angezeigt, oder nur der Grund und der Admin nicht?
    Poste bitte dazu einen Screenshot aus der Datenbank, auf dem man den Grund und den Admin sieht, sowie das zu pInfo gehörende enum.

    Wenn du die Variable nie wieder brauchst, dann kannst du es so machen:
    Ohne:
    SetObjectMaterial(CreateObject(19362, 1327.0876, -876.3626, 40.3257, 0.0000, 0.0000, 90.0000), 0, 4570, "stolenbuild03", "sl_dtbuild2wall1", 0xFFFFFFFF);
    //...



    oder nur einmal deklarieren:
    new tmp;
    tmp = CreateObject(19362, 1327.0876, -876.3626, 40.3257, 0.0000, 0.0000, 90.0000);
    SetObjectMaterial(tmp, 0, 4570, "stolenbuild03", "sl_dtbuild2wall1", 0xFFFFFFFF);
    //...
    tmp = CreateObject(19362, 1327.0876, -876.3626, 40.3257, 0.0000, 0.0000, 90.0000);
    SetObjectMaterial(tmp, 0, 4570, "stolenbuild03", "sl_dtbuild2wall1", 0xFFFFFFFF);



    Die Koordinaten musst du ohnehin irgendwo einfügen, sonst weiß der Code ja nicht wo er die Objekte erstellen soll.

    Die Nachricht kommt aber schon, oder?
    format(Banstring, sizeof(Banstring), "%s schreiben Sie ein Entbannantrag im Forum "FORUMNAME"\nDie Daten des Bannes\nDauer: Permanent\nGrund: %s\nVon: %s",Banstring,pBanGrund,pBanAdmin);
    Zu
    format(Banstring, sizeof(Banstring), "%s schreiben Sie ein Entbannantrag im Forum "FORUMNAME"\nDie Daten des Bannes\nDauer: Permanent\nGrund: %s\nVon: %s",Banstring,pInfo[playerid][pBanGrund],pInfo[playerid][pBanAdmin] );


    Da hättest du eigentlich auch zwei Warnungen bekommen sollen.
    Versuche es mal so.

    format(SpielerInfo[playerid][pBanGrund], 32, mysql_GetString("accounts", "pBanGrund", "Name", SpielerName(playerid)));
    format(SpielerInfo[playerid][pBanAdmin], MAX_PLAYER_NAME, mysql_GetString("accounts", "pBanAdmin", "Name", SpielerName(playerid)));
    Das müsste so aussehen.

    Sorry für die späte Antwort, ich bin gestern Abend nicht mehr dazu gekommen, dir noch zu antworten.
    Ich verstehe dein Vorhaben zwar noch immer nicht komplett, aber ich gebe dir jetzt mal einen Befehl, mit dem du die Häuser erstellen kannst. Wenn das nicht das ist, was du dir gedacht hast, dann kannst du es vielleicht auch selbst anpassen, ansonsten musst du nochmal erklären was du gerne haben willst.


    So würde der Befehl, den ich vorschlage, aussehen:
    ocmd:hauserstellen(playerid,params[])
    {
    new interior;
    if(sscanf(params, "d", interior)) return SendClientMessage(playerid, 0xFF0000FF, "Nutze: /hauserstellen [Interior]");
    if(interior < 1 || interior > 19) return SendClientMessage(playerid, 0xFF0000FF, "Error: Nur Interiors zwischen 1 und 19 möglich.");
    for(new i = 0; i < MAX_PLAYER_HAUS; i++)
    {
    if(Hauser[i][IntID] != 0) continue;
    Hauser[i][IntID] = interior;
    GetPlayerPos(playerid, Hauser[i][H_X], Hauser[i][H_Y], Hauser[i][H_Z]);
    GetPlayerFacingAngle(playerid, Hauser[i][H_R]);
    Hauser[i][ID] = CreatePickup(1273,1,Hauser[i][H_X],Hauser[i][H_Y],Hauser[i][H_Z],0);
    new query[256];
    format(query, sizeof(query), "INSERT INTO Hauser (IntID, H_X, H_Y, H_Z, H_R) VALUES ('%d', '%f', '%f', '%f', '%f')", Hauser[i][IntID], Hauser[i][H_X], Hauser[i][H_Y], Hauser[i][H_Z], Hauser[i][H_R]);
    mysql_pquery(handle, query);
    return 1;
    }
    return SendClientMessage(playerid, 0xFF0000FF, "Error: Es ist kein Platz mehr für ein weiteres Haus.");
    }


    Dort kannst du dann die Interior ID direkt eingeben, gegebenenfalls auch noch andere Dinge, falls gewünscht, die musst du dann eben hinzufügen.


    Schau mal ob du so damit klar kommst.

    GiftBox[i][e_oID] = CreateDynamicObject(19054, GiftBox[i][e_x], GiftBox[i][e_y], GiftBox[i][e_z]+0.25, 0.0, 0.0, GiftBox[i][e_a]);
    zu:
    GiftBox[i][e_modelID] = dini_Int(path, "modelID");
    GiftBox[i][e_oID] = CreateDynamicObject(GiftBox[i][e_modelID], GiftBox[i][e_x], GiftBox[i][e_y], GiftBox[i][e_z]+0.25, 0.0, 0.0, GiftBox[i][e_a]);


    So.


    Das e_modelID musst du im enum zu GiftBox einfügen.


    Vergesse beim Speichern das dini_IntSet von "modelID" mit GiftBox[i][e_modelID] nicht.
    dini_IntSet(pfad, "modelID", GiftBox[i][e_modelID]);

    ocmd:ban(playerid,params[])
    {
    if(!isPlayerAnAdmin(playerid,2))return SCM(playerid,TESTFARBE,"Du hast nicht die benötigten Rechte!");
    {
    new pID, reason[128],string[128], query[144];
    if(sscanf(params,"us",pID,reason))return SendClientMessage(playerid,ROT,"{FFD200}Benutze:{FEFEFE}/Ban [ID] [Grund]");
    if(!IsPlayerConnected(pID))return SendClientMessage(playerid,COLOR_RED,"Diese Spieler ist nicht online");
    if(IsPlayerNPC(pID))return SendClientMessage(playerid,COLOR_RED,"Du kannst keinen Bot Bannen !");
    format(string,sizeof(string),"[BANNED]: %s wurde von %s gebannt. Grund: %s",SpielerName(pID),SpielerName(playerid),reason);
    SendClientMessageToAll(0x9B0000FF,string);
    mysql_SetString("accounts", "pBanGrund", reason, "Name", SpielerName(pID));
    mysql_SetString("accounts", "pBanAdmin", SpielerName(playerid), "Name", SpielerName(pID));
    format(string,sizeof(string),"~r~Du wurdest gebannt !~n~Grund: %s",reason);
    GameTextForPlayer(pID, string, 30000, 4);
    TogglePlayerControllable(pID,0);
    GetPlayerName(pID, string, MAX_PLAYER_NAME); //Hinzugefügt
    format(query,sizeof(query),"UPDATE accounts SET Baned=1 WHERE Name='%s'",string);
    mysql_query(query);
    pInfo[pID][pBaned] = 1;
    format(SpielerInfo[pID][pBanGrund], 32, reason);
    format(SpielerInfo[pID][pBanAdmin], MAX_PLAYER_NAME, SpielerName(playerid));
    s_Kick(pID);
    }
    return 1;
    }


    Außerdem musst du das so auch beim Login des Users so in die Variablen eintragen lassen, bzw. dort wo geprüft wird, ob der Spieler gebannt wird, irgendwo vor der Nachricht, falls die nicht durch das s_Kick erzeugt wird.

    Das kannst du dann relativ einfach so machen:
    CMD:giftcreate(playerid, params[])
    {
    if(isnull(params)) return SendClientMessage(playerid,RED, "/giftboxcreate [1-5]");
    new item = strval(params);
    if(item < 1 || item > 5) return SendClientMessage(playerid,RED, "/giftboxcreate [1-5]");
    if(!CheckAdminName(playerid)) return SendClientMessage(playerid, RED, "{FF1717}ERROR:{FFFFFF} You have no acces to use this command.");
    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)
    {
    switch(item)
    {
    case 1: GiftBox[i][e_modelID] = 19054;
    case 2: GiftBox[i][e_modelID] = 19055;
    //...
    }
    //Daten werden übergeben
    new Float:x, Float:y, Float:z, Float:a;
    new pID;
    GetPlayerPos(playerid, x, y, z);
    GetPlayerFacingAngle(playerid, a);
    GiftBox[i][e_x] = x;
    GiftBox[i][e_y] = y;
    GiftBox[i][e_z] = z - 0.4;
    GiftBox[i][e_a] = a;
    GiftBox[i][e_oID] = CreateDynamicObject(GiftBox[i][e_modelID],x, y, z+0.05 - 0.4, 0.0, 0.0,a);
    GiftBox[i][e_label] = CreateDynamic3DTextLabel("/takegift",0x10F441AA,GiftBox[i][e_x], GiftBox[i][e_y], GiftBox[i][e_z]+0.25,8.0);
    GetPlayerPos(pID, x,y,z);
    SetPlayerPos(pID, x, y, z+2);
    //Zuletzt wird die Datei angelegt und das Giftbox gespeichert.
    new path[64];
    format(path, sizeof(path), "/GiftBoxes/%d.ini", i);
    dini_Create(path);
    SaveGiftBoxCheck(i);
    new string[100];
    format(string, sizeof(string), "{00FFFF}Giftbox {FFFF00}(%i) {00FF00}created.",i);
    return SendClientMessage(playerid,WHITE, string);

    }
    }
    return SendClientMessage(playerid, WHITE, "{FF1717}ERROR:{FFFFFF} You reached the Limit of the GiftBoxes");
    }


    Im Enum zu den GiftBox'es musst du dann noch e_modelID, einfügen, und das auch beim Laden und Speichern einbauen, damit die richtige Objekt Model ID geladen wird.

    Die bleibt bestehen, da ja kein Timer gestartet wird, die mit der Spieler ID verbunden ist. Das geht ja nicht, denn wenn der Spieler offline ist, dann besteht da ja keine Verbindung mehr, oder wenn der Server neu gestartet wird.
    An sich kann man sich das auch zum Vorteil machen, indem man zum Beispiel dort auch Statistiken über die Geschenke speichert, zum Beispiel wie viele Geschenke der User aufgenommen hat, und wie viel Geld er damit verdient hat. Muss man aber nicht.

    pBanGrund,
    pBanAdmin,
    zu:
    pBanGrund[32],
    pBanAdmin[MAX_PLAYER_NAME],


    Und dann:
    new Banstring[512];
    format(Banstring, sizeof(Banstring), "Ihr Spieler-Account wurde gesperrt!\n\nAufgrund eines Regelverstoßes wurde ihr Spieleraccount gesperrt!\nSollte dies ein Fehlban sein,");
    format(Banstring, sizeof(Banstring), "%s schreiben Sie ein Entbannantrag im Forum "FORUMNAME"\nDie Daten des Bannes\nDauer: Immer\nGrund: %s\nVon: %s",Banstring,SpielerInfo[playerid][pBanGrund],SpielerInfo[playerid][pBanAdmin]);
    ShowPlayerDialog(playerid,DIALOG_BANG,DIALOG_STYLE_MSGBOX,"Sie wurden Gesperrt",Banstring,"EXIT","");