[SAMMELTHREAD] Kleine Scripting Fragen

Dein Problem konnte durch einen User gelöst werden? Bedank dich bei ihm indem du seinen Beitrag als Hilfreich markierst sowie einen Daumen oben dalässt
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
  • Hey^^


    Wie kann ich farbige Dialoge machen?


    ich habe es so , so wird der Dialog aber nicht angezeigt!



    new pfad[64];
    format(pfad,sizeof(pfad),"/Tickets/Allgemein/%s.txt",PlayerName(playerid));
    if(!dini_Exists(pfad))
    {
    dini_Create(pfad);
    dini_Set(pfad,"Name",PlayerName(playerid));
    dini_Set(pfad,"Beschreibung",inputtext);
    new string[400];
    format(string,sizeof(string),"{D10000}Beschreibung: {FFFFFF}%s\n\nWenn das Ticket okay ist , drücke auf '{D10000}Absenden'{FFFFFF} , sonst auf '{D10000}Abbrechen'{FFFFFF}!",inputtext);
    ShowPlayerDialog(playerid,Dialog_TicketBestaetigen,DIALOG_STYLE_MSGBOX,"Ticket bestätigen",string,"Absenden","Abbrechen");
    }


    Wenn ich vor die Farbcodes ein # mache , wird der Dialog angezeigt , jedoch anstatt den Text zu färben wird es mit geschrieben , also{FFFFFF}%s\n\nWenn das Ticket okay ist , drücke auf '{D10000}Absenden'{FFFFFF} , sonst auf '{D10000}Abbrechen'{FFFFFF}! steht so im dialog ^^

  • Hallo zusammen,


    ich stehe gerade tierisch auf dem Schlauch und bräuchte mal einen kleinen Denkanstoß, bzw. die Lösung für mein Problem.


    Kleine Situationsbeschreibung:
    Ich möchte aus einer SQLite Datenbank Coordinaten für Pickups laden, das funktioniert auch soweit (sieht zumindest fehlerfrei im Spiel aus).
    Dann soll eine kleine Abfrage gestartet werden, wenn der Spieler einen dieser Pickups betritt, soll (erstmal, testweise) eine Nachricht ausgegeben werden.
    Aber genau da ist auch der Haken.
    Die ersten beiden Pickups aus der Datenbank (insgesamt sind es bisher 3) funktionieren (wie gesagt, augenscheinlich) gut, die Nachricht wird ausgegeben.
    Aber beim letzten Pickup passiert nichts.


    Woran kann das liegen?


    Hier noch der gesamte Scriptkram:


    //HEADBEREICH
    #undef MAX_PICKUPS
    #define MAX_PICKUPS 50


    enum epickupInfo {
    Float: pick_X,
    Float: pick_Y,
    Float: pick_Z,
    pick_Text[30]
    };
    new pickInfo[MAX_PICKUPS][epickupInfo];
    new bankPickups[MAX_PICKUPS];
    new Text3D:bankLabel[MAX_PICKUPS];


    //OnGameModeInit
    new output[30], tmp_maxid;
    format(query, 128, "SELECT max(id) FROM `bank_pickups`");
    result = db_query(database, query);
    db_get_field(result, 0, output, 20);
    tmp_maxid = strval(output);
    db_free_result(result);
    for(new i = 0; i <= tmp_maxid; i++) {
    format(query, 128, "SELECT * FROM `bank_pickups` WHERE `id`='%i'", i);
    result = db_query(database, query);
    db_get_field_assoc(result, "x", output, 30);
    pickInfo[i][pick_X] = floatstr(output);
    db_get_field_assoc(result, "y", output, 30);
    pickInfo[i][pick_Y] = floatstr(output);
    db_get_field_assoc(result, "z", output, 30);
    pickInfo[i][pick_Z] = floatstr(output);
    db_get_field_assoc(result, "text", output, 30);
    pickInfo[i][pick_Text] = output;
    bankPickups[i] = AddStaticPickup(1274, 1, pickInfo[i][pick_X], pickInfo[i][pick_Y], pickInfo[i][pick_Z]);
    bankLabel[i] = Create3DTextLabel(pickInfo[i][pick_Text], COLOR_DARKGREEN, pickInfo[i][pick_X], pickInfo[i][pick_Y], pickInfo[i][pick_Z], 25.0, 0, 0);
    db_free_result(result);
    }


    //OnPlayerPickUpPickup
    for(new i = 0; i <= MAX_PICKUPS; i++) {
    printf("%i", i);
    if(pickupid == bankPickups[i]) {
    printf("PickupID: %i", pickupid);
    return SendClientMessage(playerid, 0xAA3333AA, "Testnachricht");
    }
    }


    Die Datenbank schaut so aus:


    Ich danke schonmal für eure Hilfe.


    Gruß,
    Maxx

  • Mich hat das Thema HIER sehr interessiert, da ich jetzt eine Idee habe wollte ich mal fragen ob man das so machen kann.
    Jemand stirbt und lässt seine ganzen Items fallen, Waffen, Geld .. kann man es so gestalten das man dann einen Dialog erhält wie ein Inventar und man sich nach und nach auswählen kann was man nimmt? ^^

    [tabmenu][tab=Signatur,'http://bit.ly/1i4RY3v']

    Wie poste ich richtig?
    Nachdem du Google, die FAQ und die Suchfunktion erfolgreich ignoriert hast, erstellst du 2 bis 5 neue Themen in den falschen Unterforen mit lustigem Titel,
    zu vielen Ausrufezeichen und undeutlichem Text, unter dem sich jeder etwas anders vorstellen kann.



    Mr.Dubstep | GFX | Scripting | Hackerplace
    If Mr.DubStep don't have it, you don't need it.

    [tab=Spieler bei,'http://bit.ly/1db2jaf'][subtab=Hackerplace,'http://bit.ly/1bswN2T']


    Welch wunderschöner Hack ist heute vollzogen worden, könntest Du mir es denn sagen? Ein wunderschönes Browsergame, auch für Kleinigkeiten unterwegs. Erschaffe deinen eigenen Computer, nutze ihn um anderen das Geld zu rauben, schließe dich einem Clan an oder gründe selbst einen. Bleibe allein oder mit vielen Freunden.

  • Also muss ich definitiv nur die Waffen von dem toten Spieler auslesen und in ein listitem packen.. oder wie. :o

    [tabmenu][tab=Signatur,'http://bit.ly/1i4RY3v']

    Wie poste ich richtig?
    Nachdem du Google, die FAQ und die Suchfunktion erfolgreich ignoriert hast, erstellst du 2 bis 5 neue Themen in den falschen Unterforen mit lustigem Titel,
    zu vielen Ausrufezeichen und undeutlichem Text, unter dem sich jeder etwas anders vorstellen kann.



    Mr.Dubstep | GFX | Scripting | Hackerplace
    If Mr.DubStep don't have it, you don't need it.

    [tab=Spieler bei,'http://bit.ly/1db2jaf'][subtab=Hackerplace,'http://bit.ly/1bswN2T']


    Welch wunderschöner Hack ist heute vollzogen worden, könntest Du mir es denn sagen? Ein wunderschönes Browsergame, auch für Kleinigkeiten unterwegs. Erschaffe deinen eigenen Computer, nutze ihn um anderen das Geld zu rauben, schließe dich einem Clan an oder gründe selbst einen. Bleibe allein oder mit vielen Freunden.

  • Beim Spielertot die Waffen abfragen oder Sie speichern sobald er Sie bekommt.
    Dann ein Objekt an die Todesposition setzen und festlegen was passiert wenn man in den Objekt reinläuft.
    Also das die Waffe mit der munition gegeben wird und das Objekt wieder verschwindet.
    ---------------------------------------------------------------------------------------------------------------------------------------------
    Ist es möglich die Skin Auswahl die automatisch über Request Class aufgerufen wird erneut aufzurufen ?
    Also die 2 Pfeile und das "Spawn".


    Danke im Voraus.


    lg
    Felix

  • @ Maxx


    Also in deiner PickUp schleife ist ein kleiner Fehler


    for(new i = 0; i <= MAX_PICKUPS; i++) // du gehst hier von 0 - 50 dein Array ist aber nur von 0 - 49 Groß


    Ansonsten kannst du dir ja mal die Pickupid beim erstellen ausgeben lassen und vergleichst sie dann mit der pickupid in OnPlayerPickUpPickup,
    möglicherweise wird die ID nicht oder nur Fehlerhaft gespeichert bzw zurückgegeben.

    "Bevor ich mir Informationen aus der "Bild" hole,
    werde ich anfangen, Wahlergebnisse danach vorauszusagen,
    neben welchen Busch unsere Katze gepinkelt hat."

    Margarete Stokowski

  • Hm, ich versteh zwar nicht wirklich wie ich das mit den Waffen im Listdialog machen soll aber hm..
    Bin momentan bei OnPlayerDeath so weit:


    new Float:X,Float:Y,Float:Z;
    new rand = random(5000);
    GivePlayerMoney(killerid,rand);
    GivePlayerMoney(playerid,-rand);
    GetPlayerPos(playerid,X,Y,Z);
    death = CreatePickup(373,8,X,Y,Z,0);
    GetPlayerWeapon(playerid);


    - Position abfragen
    - Random fürs Geld
    - Geld dem Killer geben
    - Geld dem Toten abziehen
    - Position vom Toten herausfinden
    - Pickup erstellen
    - Waffen vom Toten nehmen


    Das mit dem Dialog verstehe ich nicht.. ? :huh:

    [tabmenu][tab=Signatur,'http://bit.ly/1i4RY3v']

    Wie poste ich richtig?
    Nachdem du Google, die FAQ und die Suchfunktion erfolgreich ignoriert hast, erstellst du 2 bis 5 neue Themen in den falschen Unterforen mit lustigem Titel,
    zu vielen Ausrufezeichen und undeutlichem Text, unter dem sich jeder etwas anders vorstellen kann.



    Mr.Dubstep | GFX | Scripting | Hackerplace
    If Mr.DubStep don't have it, you don't need it.

    [tab=Spieler bei,'http://bit.ly/1db2jaf'][subtab=Hackerplace,'http://bit.ly/1bswN2T']


    Welch wunderschöner Hack ist heute vollzogen worden, könntest Du mir es denn sagen? Ein wunderschönes Browsergame, auch für Kleinigkeiten unterwegs. Erschaffe deinen eigenen Computer, nutze ihn um anderen das Geld zu rauben, schließe dich einem Clan an oder gründe selbst einen. Bleibe allein oder mit vielen Freunden.

  • Du kannst es drehen wie du es willst. in C++ funktioniert dieser Code nicht und das wird der Grund sein warum das auch hier nicht geht.. die Server.exe arbeitet mit C++


    Bei Pickups ist eh die Regel, dass die hälfte nicht funktioniert ;]


    Der geht und leider nur der:


    public OnPlayerPickUpPickup(playerid,pickupid)
    {
    if(pickupid == bankPickups[0])
    {
    return SendClientMessage(playerid, 0xAA3333AA, "Testnachricht1");
    }
    else if(pickupid == bankPickups[1])
    {
    return SendClientMessage(playerid, 0xAA3333AA, "Testnachricht2");
    }
    else if(pickupid == bankPickups[2])
    {
    return SendClientMessage(playerid, 0xAA3333AA, "Testnachricht3");
    }
    return 1;
    }


    Gruss: Sonic

    I didn't hit you. I high fived your face.

  • do.de - Domain-Offensive - Domains für alle und zu super Preisen
  • Hey^^


    Wie kann ich farbige Dialoge machen?


    ich habe es so , so wird der Dialog aber nicht angezeigt!



    new pfad[64];
    format(pfad,sizeof(pfad),"/Tickets/Allgemein/%s.txt",PlayerName(playerid));
    if(!dini_Exists(pfad))
    {
    dini_Create(pfad);
    dini_Set(pfad,"Name",PlayerName(playerid));
    dini_Set(pfad,"Beschreibung",inputtext);
    new string[400];
    format(string,sizeof(string),"{D10000}Beschreibung: {FFFFFF}%s\n\nWenn das Ticket okay ist , drücke auf '{D10000}Absenden'{FFFFFF} , sonst auf '{D10000}Abbrechen'{FFFFFF}!",inputtext);
    ShowPlayerDialog(playerid,Dialog_TicketBestaetigen,DIALOG_STYLE_MSGBOX,"Ticket bestätigen",string,"Absenden","Abbrechen");
    }


    Wenn ich vor die Farbcodes ein # mache , wird der Dialog angezeigt , jedoch anstatt den Text zu färben wird es mit geschrieben , also{FFFFFF}%s\n\nWenn das Ticket okay ist , drücke auf '{D10000}Absenden'{FFFFFF} , sonst auf '{D10000}Abbrechen'{FFFFFF}! steht so im dialog ^^

  • @ Maxx
    Also in deiner PickUp schleife ist ein kleiner Fehler


    .. danke, Fehler behoben.
    Aber es klappt immernoch nicht.
    Was mir aufgefallen ist:
    public OnPlayerPickUpPickup(playerid, pickupid)
    {
    for(new i = 0; i < MAX_PICKUPS; i++) {
    printf("%i", i);
    if(pickupid == bankPickups[i]) {
    printf("PickupID: %i", pickupid);
    return SendClientMessage(playerid, 0xAA3333AA, "Testnachricht");
    }
    }
    return 1;
    }


    Hierbei bekomme ich eine Interessante Ausgabe in der Console:


    Wenn ich also den ersten Pickup (ID 0 - Bank LS) betrete, zählt die Schleife von 0 bis 3 (einmal auch nur bis 2) und "erkennt" offensichtlich erst dann, dass der Pickup die ID 0 hat und gibt "PickupID: 0" aus.
    Und wenn ich den letzten Pickup (ID 2 - Bank LV) betrete, erkennt er die PickupID garnicht und zählt die Schleife einmal komplett durch.
    Beim zweiten Pickup (ID 1 - Bank SF) klappt ales auf Anhieb?


    sonic:


    Das ist nicht dein Ernst, oder?
    Ich habe keine Lust jetzt hier 500 if Abfragen zu starten.. :o


    Gibt es keine Lösung dafür?


    Gruß,
    Maxx

    Einmal editiert, zuletzt von Maxx ()

  • Wenn ich dir mal die Ausgabe demonstrieren dürfte...


    Die ID's werden zwischen den Pickups wie hin und her geschmissen.


    Dies ist eben der Fail in C++ welche die Server.exe nicht packt und diesen mist generiert.


    Gruss: Sonic

    I didn't hit you. I high fived your face.

  • switch case würde nur dann gehen, wenn du genau weißt, welche ID das ist, sprich es muss ein konstanterwert sein

    "Bevor ich mir Informationen aus der "Bild" hole,
    werde ich anfangen, Wahlergebnisse danach vorauszusagen,
    neben welchen Busch unsere Katze gepinkelt hat."

    Margarete Stokowski

  • Ich brauch mal eure Hilfe


    wenn ich ein car erstelle dann lässt es sich nicht mehr Parken
    so erstell ich das:
    ocmd:newfcar(playerid,params[])
    {
    new vehid,c1,c2,frakid,query[512],str[10];
    new Float:vehx,Float:vehy,Float:vehz,Float:veha;
    if(PlayerInfo[playerid][pAdmin]>=5)
    {
    if(sscanf(params,"iiii",vehid,c1,c2,frakid))return SendClientMessage(playerid, cRed,"/newfcar [CAR-ID] [COLOR11] [COLOR-2] [FRAKTIONSID]");
    if(vehid < 400 || vehid > 610 ) return SendClientMessage(playerid,cRed,"Bitte wähle ein Fahrzeug zwischen 400 und 610");
    if(frakid < 1 || frakid > 6 ) return SendClientMessage(playerid,cRed,"Bitte wähle eine Fraktionsid zwischen 1 und 6");
    if(frakid==1)//LSPD
    {
    GetPlayerPos(playerid,vehx,vehy,vehz);
    GetPlayerFacingAngle(playerid,veha);
    idx++;
    LSPD[idx][lspdDBID]=CreateVehicle(vehid,vehx,vehy,vehz,veha,c1,c2,-1);
    format(str, sizeof(str),"LSPD%d",idx);
    SetVehicleNumberPlate(LSPD[idx][lspdDBID],str);
    PutPlayerInVehicle(playerid, LSPD[idx][lspdDBID], 0);
    format(query, sizeof(query), "INSERT INTO LSPD (id, VehID, Farbe1, Farbe2, X, Y, Z, A, Numplate) VALUES ('%d', '%d', '%d', '%d', '%f', '%f', '%f', '%f', '%s')", idx, vehid, c1, c2, vehx, vehy, vehz, veha, str);
    mysql_query(query);
    mysql_free_result();
    SendClientMessage(playerid,cGreen,"Du hast ein neues Fraktionscar in die Datenbank eingetragen mit /fpark kannst du die autos umparken");
    }
    }
    return 1;
    }
    und zum parken so:
    ocmd:fpark(playerid,params[])
    {
    new query[128];
    if(PlayerInfo[playerid][pAdmin]>=5)
    {
    if(GetPlayerState(playerid)==PLAYER_STATE_DRIVER)
    {
    for(new i;i<idx;i++)
    {
    if(GetPlayerVehicleID(playerid)==LSPD[i][lspdDBID])
    {
    new Float:vehx,Float:vehy,Float:vehz,Float:veha;
    new carid = GetPlayerVehicleID(playerid);
    GetVehiclePos(carid,vehx,vehy,vehz);
    GetVehicleZAngle(carid,veha);
    format(query, 128, "UPDATE LSPD SET X = '%f' WHERE id = '%d'", vehx, LSPD[i][lspdDBID]);
    mysql_query(query);
    format(query, 128, "UPDATE LSPD SET Y = '%f' WHERE id = '%d'", vehy, LSPD[i][lspdDBID]);
    mysql_query(query);
    format(query, 128, "UPDATE LSPD SET Z = '%f' WHERE id = '%d'", vehz, LSPD[i][lspdDBID]);
    mysql_query(query);
    format(query, 128, "UPDATE LSPD SET A = '%f' WHERE id = '%d'", veha, LSPD[i][lspdDBID]);
    mysql_query(query);
    mysql_free_result();
    format(query, 128, "Du hast das Car mit der ID: %d umgeparkt", LSPD[i][lspdDBID]);
    SendClientMessage(playerid,cGreen,query);
    }
    }
    }
    }
    else
    {
    SendClientMessage(playerid,cRed,"Um diesen Befehl Nutzen zu können brauchst du den Adminrank Admin.");
    }
    return 1;
    }
    wenn ich den Server restarte geht es wieder nur ich weiß nicht wiso
    den idx wert gebe ich beim erstellen ein höher also alles wird richtig eingetragen etc.
    Ich hoffe, das ihr mir helfen könnt

    Mit freundlichen Grüßen


    Perry_Cox



  • Also muss ich definitiv nur die Waffen von dem toten Spieler auslesen und in ein listitem packen.. oder wie. :o


    Kommt auf die Umsetzung an.Ich würde es aber nicht so machen. Zumal es doch nervig sein kann,wenn direkt ein Dialog-Menu aufpoppt sobald man einen Spieler tötet.
    Da würde ich eher eine Art Paket anlegen, in denen alle Items des Verstorbenen Spielers vorhanden sind. Erst beim durchlaufen des Pakets ( Irgendein Pickup oder Checkpoint ) wird dann ein Dialog mit den vorhanden Items angezeigt. Ist das Paket leer,verschwindet es.

  • do.de - Domain-Offensive - Domains für alle und zu super Preisen