[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
  • Ok, so ganz hab ich das nicht verstanden.
    Ich habe auch ein Problem mit meinem Enum. Es ist ja 2dimensional und ich weiß nicht was ich in die 2 Spalte eintragen soll ^^
    enum cfrakEnum{
    f_name[128],
    f_catergorie,
    f_enterpoint_x,
    f_enterpoint_y,
    f_enterpoint_z,
    f_spawnpoint_x,
    f_spawnpoint_y,
    f_spawnpoint_z,
    f_dutypoint_x,
    f_dutypoint_y,
    f_dutypoint_z,
    f_equippoint_x,
    f_equippoint_y,
    f_equippoint_z,
    f_arrestpoint_x,
    f_arrestpoint_y,
    f_arrestpoint_z,
    f_exitpoint_x,
    f_exitpoint_y,
    f_exitpoint_z,
    f_interior,
    f_world
    }
    new cfrak_info[25][cfrakEnum];


    Vielleicht kannst du mir anhand meines Enums eine bessere Beschreibung deiner Lösung geben.

  • Das schon ok so.


    Es bedeutet ja quasi, dass du 25 Fraktionen erstellen kannst auf dem Server.


    Um die jeweilige Fraktionsid rauszubekommen musst du einfach ermitteln, welche frei ist, z.B. so:



    stock GetFreeFrakID()
    {
    for(new i; i<sizeof(cfrak_info); i++)
    {
    if(cfrak_info[i][f_name][0] == EOS) return i;
    }
    return -1;
    }


    //Wichtig dass du beim löschen einer Fraktion folgendes machst:
    strdel(cfrak_info[i][f_name],0,128);


    //Und dann kann dein Befehl so aussehen:
    format(string,sizeof(string),"%s",inputtext);
    new i = GetFreeFrakID();
    if(i == -1) return SendClientMessage(playerid,-1,"* Es wurden bereits 25 Fraktionen erstellt!");
    format(cfrak_info[i][f_name],128, string);
    format(string,sizeof(string),"Sie erstellen die Fraktion {FF7700}%s{FFFFFF}", cfrak_info[i][f_name]);
    SCM(playerid,COLOR_YELLOW,string);

    ast2ufdyxkb1.png


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

  • Danke dafür das hat mir geholfen. Ich erstelle bloß gerade ein Fraktionscreate System per Dialog.
    Soll ich dann immer das:
    new i = GetFreeFrakID()if(i == -1) return SendClientMessage(playerid,-1,"* Es wurden bereits 25 Fraktionen erstellt!");
    Einfügen? Kommt dann auch immer die Selbe ID. Oder hast du vielleicht eine andere Idee.



    //e @Kaliber


    Ich habe das Problem, das er einfach die Id´s weiterzählt.
    Das soll er ja nicht er soll ja eine Fraktion mit einer ID ausstatten.


    Bisheriger Code:


    new i = GetFreeFrakID();
    if(i == -1) return SendClientMessage(playerid,-1,"* Es wurden bereits 25 Fraktionen erstellt!");
    if(dialogid==DIALOG_CREATEFRACTION)
    {
    if(response)
    {
    ShowPlayerDialog(playerid, DIALOG_CREATEFRACTION_NAME, DIALOG_STYLE_INPUT, "Fraktionserstellsystem by {FF7700}Ryan_Walton{FFFFFF}", "Sie können nun den Namen für die Fraktion festlegen.", "Weiter","Abbrechen");
    }
    else
    {
    SCM(playerid,COLOR_GREY,"Abgebrochen");
    }
    return 1;
    }
    //STEP 2
    if(dialogid==DIALOG_CREATEFRACTION_NAME)
    {
    new string[256];
    if(response)
    {
    format(string,sizeof(string),"%s",inputtext);
    format(cfrak_info[i][f_name],128, string);
    cfrak_info[i][f_id] = i;
    format(string,sizeof(string),"Sie erstellen die Fraktion: {FF7700}%s(ID: %d){FFFFFF}", cfrak_info[i][f_name],cfrak_info[i][f_id]);
    SCM(playerid,COLOR_YELLOW,string);
    ShowPlayerDialog(playerid, DIALOG_CREATEFRACTION_CATERGORIE, DIALOG_STYLE_LIST, "Fraktionserstellsystem by {FF7700}Ryan_Walton{FFFFFF}", "Behörde\nNeutrale Fraktion\nGang/Mafia", "Weiter","Abbrechen");
    }
    else
    {
    ShowPlayerDialog(playerid, DIALOG_CREATEFRACTION_NAME, DIALOG_STYLE_INPUT, "Fraktionserstellsystem by {FF7700}Ryan_Walton{FFFFFF}", "Sie können nun einen Namen für die Fraktion auswählen", "Weiter","Abbrechen");
    }
    }


    Keine Warnings ETC.

    Einmal editiert, zuletzt von The Sensei ()

  • Die funktion darfst du nur in dem Bereich vom


    • if(dialogid==DIALOG_CREATEFRACTION_NAME)
    • {
    • new string[256];
    • if(response)
    • {
    • //Hier rein muss das mit dem i=...

    ast2ufdyxkb1.png


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

  • @Kaliber

    Die funktion darfst du nur in dem Bereich vom


    • if(dialogid==DIALOG_CREATEFRACTION_NAME)
    • {
    • new string[256];
    • if(response)
    • {
    • //Hier rein muss das mit dem i=...

    Da war sie ja auch aber beim zweiten Step wird eine andere ID gepickt.

    // STEP 1
    if(dialogid==DIALOG_CREATEFRACTION)
    {
    if(response)
    {
    ShowPlayerDialog(playerid, DIALOG_CREATEFRACTION_NAME, DIALOG_STYLE_INPUT, "Fraktionserstellsystem by {FF7700}Ryan_Walton{FFFFFF}", "Sie können nun den Namen für die Fraktion festlegen.", "Weiter","Abbrechen");
    }
    else
    {
    SCM(playerid,COLOR_GREY,"Abgebrochen");
    }
    return 1;
    }
    //STEP 2
    if(dialogid==DIALOG_CREATEFRACTION_NAME)
    {
    new string[256];
    if(response)
    {
    new i = GetFreeFrakID();
    if(i == -1) return SendClientMessage(playerid,-1,"* Es wurden bereits 25 Fraktionen erstellt!");
    format(string,sizeof(string),"%s",inputtext);
    format(cfrak_info[i][f_name],128, string);
    cfrak_info[i][f_id] = i;
    format(string,sizeof(string),"Sie erstellen die Fraktion: {FF7700}%s(ID: %d){FFFFFF}", cfrak_info[i][f_name],cfrak_info[i][f_id]);
    SCM(playerid,COLOR_YELLOW,string);
    ShowPlayerDialog(playerid, DIALOG_CREATEFRACTION_CATERGORIE, DIALOG_STYLE_LIST, "Fraktionserstellsystem by {FF7700}Ryan_Walton{FFFFFF}", "Behörde\nNeutrale Fraktion\nGang/Mafia", "Weiter","Abbrechen");
    }
    else
    {
    ShowPlayerDialog(playerid, DIALOG_CREATEFRACTION_NAME, DIALOG_STYLE_INPUT, "Fraktionserstellsystem by {FF7700}Ryan_Walton{FFFFFF}", "Sie können nun einen Namen für die Fraktion auswählen", "Weiter","Abbrechen");
    }
    }
    //STEP 3
    if(dialogid==DIALOG_CREATEFRACTION_CATERGORIE)
    {
    new string[128];
    if(response)
    {
    new i = GetFreeFrakID();
    if(i == -1) return SendClientMessage(playerid,-1,"* Es wurden bereits 25 Fraktionen erstellt!");
    format(string,sizeof(string),"Die Fraktion wird eine {FF7700}%s(ID: %d){FFFFFF}", inputtext,i);
    SCM(playerid,COLOR_YELLOW,string);
    switch(listitem)
    {
    case 0: { cfrak_info[i][f_catergorie] = 1; }
    case 1: { cfrak_info[i][f_catergorie] = 0; }
    case 2: { cfrak_info[i][f_catergorie] = 2; }
    }
    printf("%d", cfrak_info[i][f_catergorie]);
    ShowPlayerDialog(playerid, DIALOG_CREATEFRACTION_ENTER, DIALOG_STYLE_MSGBOX, "Fraktionserstellsystem by {FF7700}Ryan_Walton{FFFFFF}", "Sie können nun den Eingangspunkt des Interiors wählen\nGehen Sie dazu an die Position und geben Sie {FF7700}/saveintpos{FFFFFF} ein\n{04B404}Es geht weiter sobald Sie dies getan haben{FFFFFF}.", "Weiter","Abbruch");
    }
    else
    {
    ShowPlayerDialog(playerid, DIALOG_CREATEFRACTION_CATERGORIE, DIALOG_STYLE_LIST, "Fraktionserstellsystem by {FF7700}Ryan_Walton{FFFFFF}", "Behörde\nNeutrale Fraktion\nGang/Mafia", "Weiter","Abbrechen");
    }
    }
    //STEP 4
    if(dialogid==DIALOG_CREATEFRACTION_ENTEREND)
    {
    new string[128];
    if(response)
    {
    format(string,sizeof(string),"Der Eingangspunkt ist: {FF7700}X%f Y%f Z%f{FFFFFF}", GetPVarFloat(playerid,"EingangInterior_Y"),GetPVarFloat(playerid,"EingangInterior_X"),GetPVarFloat(playerid,"EingangInterior_Z"));
    SCM(playerid,COLOR_YELLOW,string);
    ShowPlayerDialog(playerid, DIALOG_CREATEFRACTION_SPAWN, DIALOG_STYLE_MSGBOX, "Fraktionserstellsystem by {FF7700}Ryan_Walton{FFFFFF}", "Sie können den Spawnpunkt der Fraktion wählen\nGehen Sie dazu an die Position und geben Sie {FF7700}/savespawnpos{FFFFFF} ein\n{04B404}Es geht weiter sobald Sie dies getan haben{FFFFFF}.", "Weiter","Abbruch");
    }
    else
    {
    ShowPlayerDialog(playerid, DIALOG_CREATEFRACTION_ENTER, DIALOG_STYLE_MSGBOX, "Fraktionserstellsystem by {FF7700}Ryan_Walton{FFFFFF}", "Sie können nun den Eingangspunkt des Interiors wählen\nGehen Sie dazu an die Position und geben Sie {FF7700}/saveintpos{FFFFFF} ein\n{04B404}Es geht weiter sobald Sie dies getan haben{FFFFFF}.", "Weiter","Abbruch");
    }
    }
    if(dialogid==DIALOG_CREATEFRACTION_SPAWNEND)
    {
    new string[128];
    if(response)
    {
    format(string,sizeof(string),"Der Spawnpunkt ist: {FF7700}X%f Y%f Z%f{FFFFFF}", GetPVarFloat(playerid,"Spawnpunkt_X"),GetPVarFloat(playerid,"Spawnpunkt_Y"),GetPVarFloat(playerid,"Spawnpunkt_Z"));
    SCM(playerid,COLOR_YELLOW,string);
    ShowPlayerDialog(playerid, DIALOG_CREATEFRACTION_DUTY, DIALOG_STYLE_MSGBOX, "Fraktionserstellsystem by {FF7700}Ryan_Walton{FFFFFF}", "Sie können den Spawnpunkt der Fraktion wählen\nGehen Sie dazu an die Position und geben Sie {FF7700}/savespawnpos{FFFFFF} ein\n{04B404}Es geht weiter sobald Sie dies getan haben{FFFFFF}.", "Weiter","Abbruch");
    }
    else
    {
    ShowPlayerDialog(playerid, DIALOG_CREATEFRACTION_SPAWN, DIALOG_STYLE_MSGBOX, "Fraktionserstellsystem by {FF7700}Ryan_Walton{FFFFFF}", "Sie können den Spawnpunkt der Fraktion wählen\nGehen Sie dazu an die Position und geben Sie {FF7700}/savespawnpos{FFFFFF} ein\n{04B404}Es geht weiter sobalt Sie dies getan haben{FFFFFF}.", "Weiter","Abbruch");
    }
    }


    Hier hast du mal alles bis jetzt vielleicht kannst du dann besser helfen

    Einmal editiert, zuletzt von The Sensei ()

  • Hallo flexgun, ich bin mal so lieb:

    Code
    2293.7693,-2285.1165,12.93872295.9402,-2282.8777,12.94642299.5908,-2279.1147,12.94302302.1587,-2276.4678,12.93762305.1133,-2273.4216,12.93642309.3398,-2269.0654,12.93532312.5469,-2265.7593,12.93552315.8242,-2262.3813,12.93482319.1646,-2258.9385,12.93492321.8533,-2256.1650,12.93542324.9602,-2252.9636,12.93612328.3774,-2249.4397,12.93572332.7646,-2244.9170,12.93862337.2559,-2240.2864,12.93602339.4722,-2238.0020,12.93922342.4260,-2234.9568,12.93522345.7764,-2231.5017,12.93602349.7153,-2227.4409,12.93872354.1377,-2222.8823,12.9379

    Spoiler anzeigen

    Anzahl: 21; alle in LS :)
    E: ok, nicht ganz 21

  • Hi, habe ein kleines Problem.


    Habe ein Befehl womit man Spieler - Namen ändern kann, der funktioniert soweit auch ganz gut und der Spielername wird richtig gesetzt.
    Doch wenn sich der Spieler, dessen Name geändert wurde vom Server trennt, wird sein Name ganz anders gespeichert, immer als eine Zahl oder so (z.B. 75)


    Befehl schaut so aus:



    CMD:changename(playerid, params[]) {
    new playerID, cQuery[95], newName[24];



    if(pData[playerid][P_Admin] < 6) return
    SendClientMessage(playerid, COLOR_RED, LV_Fail);



    if(sscanf(params,"us[24]", playerID, newName)) return
    SendClientMessage(playerid, COLOR_RED, "Use: /changename <player> <name>");



    if(!IsPlayerConnected(playerID)) return
    SendClientMessage(playerid, COLOR_RED, ID_Fail);



    if(!(4 < strlen(params[1]) < MAX_PLAYER_NAME)) return
    SendClientMessage(playerid, COLOR_RED, "The name must be min 4 chars and max 23 chars!");



    format(cQuery, sizeof(cQuery), "SELECT * FROM `players` WHERE Name = '%s'", newName);
    mysql_query(MySQL, cQuery);
    mysql_store_result();



    if(mysql_num_rows() == 0) {
    format(cQuery, sizeof(cQuery), "UPDATE `players` SET Name = '%s' WHERE Name = '%s'", newName, GetName(playerID));
    mysql_query(MySQL, cQuery);
    SaveAccount(playerID);



    format(cQuery, sizeof(cQuery), "Admin %s changed %s name to %s", GetName(playerid), GetName(playerID), newName);
    writeLog("Logs/General.txt", cQuery);



    SetPlayerName(playerID, newName);



    new Update[128];
    format(Update, sizeof(Update), "UPDATE `players` SET Name = %d WHERE Name = '%s'", newName, GetName(playerID));
    mysql_query(MySQL, Update);



    if(IsSilent[playerid] == false) {
    format(cQuery, sizeof(cQuery), "Your name has been changed to %s by %s", newName, GetName(playerid));
    SendClientMessage(playerID, COLOR_RED, cQuery);
    }
    } else {
    SendClientMessage(playerid, COLOR_RED, "This name is already in use.");
    }
    return 1;
    }


    Mit freundlichen Grüßen
    JustMe.77 8)

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


    ich habe kurze Frage , ich versuche gerade das Geld aus der Datenbank dem Spieler zu splitten.
    Das Geld wird geladen, aber was ich jetzt nicht verstehe wenn ich das printen lasse bekomme ich keinen Error.
    Sobald ich das in GivePlayerMoney einsetze erhalte ich einen Error...


    Code:

    Code
    new geld[2][2];
    split(PlayerInfo[playerid][pGeld], geld, '.');
    printf("%i.%i", geld[0], geld[1]);
    GivePlayerMoney(playerid, geld[0], geld[1]);

    Fehlermeldung:
    error 035: argument type mismatch (argument 2)



    ( Nutze den Include "Cent System" )
    Kann mir einer weiterhelfen? Ist bestimmt ein Denkfehler...

  • Wenn du ein Cent system hast kannst du kein GivePlayerMoney nutzen, da es keine Float´s unterstützt...
    Ausserdem hat GivePlayerMoney() nur 2 Parameter und du willst 3 setzen...


    Du musst den Betrag dann als Textdraw über die Geldanzeige der HUD legen...

  • Wenn du ein Cent system hast kannst du kein GivePlayerMoney nutzen, da es keine Float´s unterstützt...
    Ausserdem hat GivePlayerMoney() nur 2 Parameter und du willst 3 setzen...


    Du musst den Betrag dann als Textdraw über die Geldanzeige der HUD legen...

    Textdrawanzeige ist jetzt nicht das Problem, dass habe ich ja schon fertig.
    Aber das nützt mir nichts wenn das Geld nicht ausgezahlt wird...
    Beim Centsystem gibt es folgende Parameter:

    Code
    GivePlayerMoney(playerid, dollars, cents=0)
    ResetPlayerMoney(playerid)
    GetPlayerCents(playerid)


    Ich habe das schon getestet wenn ich z.B. 10,5$ haben möchte klappt das so:
    GivePlayerMoney(playerid, 10, 5);.


    So ich möchte aber das Geld was in der Datenbank steht gesplittet haben und so dem Spieler das Geld auszahlen.
    Könnte es nicht am Array liegen?

  • Poste mal bitte das Include+Split Funktion... Wird am Array liegen, du definierst eine Dimension mehr als du benötigst/verwendest...
    Ich kenne die Split Funktion leider nicht, müsste wissen wie die, die Variablen ausgibt...

  • Poste mal bitte das Include+Split Funktion... Wird am Array liegen, du definierst eine Dimension mehr als du benötigst/verwendest...
    Ich kenne die Split Funktion leider nicht, müsste wissen wie die, die Variablen ausgibt...

    Das ist der Centsystem Include ( klick hier )


    So versuche ich das zu splitten...

    Code
    new geld[2][2];
    split(PlayerInfo[playerid][pGeld], geld, '.');
    printf("%i.%i", geld[0], geld[1]);
    GivePlayerMoney(playerid, geld[0], geld[1]);


    Split Funktion:

  • Das ist der Centsystem Include ( klick hier )
    So versuche ich das zu splitten...

    Code
    new geld[2][2];
    split(PlayerInfo[playerid][pGeld], geld, '.');
    printf("%i.%i", geld[0], geld[1]);
    GivePlayerMoney(playerid, geld[0], geld[1]);

    Split Funktion:

    Ma ganz ehrlich, spar dir dieses Filterscript... So toll ist das nicht... Wenn du die Geld Variable im Spieler Enum + Datenbank als Float definierst und damit Arbeitest, hast du da wesentlich mehr von, finde ich jetzt^^... Zu deinem Problem:


    Wird Playerinfo[playerid][pGeld] richtig geladen? Hast du es vorher schonmal ausgegeben, zb. in der Konsole oder per Format() im Chat?


    oder was mir noch auffällt...


    Mach mal das split(PlayerInfo[playerid][pGeld], geld, ' . '); zu split(PlayerInfo[playerid][pGeld], geld, '.');
    Fail... Das wird nur so angezeigt vom Forum aus^^

  • Gibt es eine existierende Liste für die Tuning-Komponennten und den dazugehörigen Preisen?


    Ich weiß von der offiziellen Liste der Komponennten, wobei dort jedoch keine Preise angegeben sind. Diese sind jedoch sehr wichtig für mich.

  • Wird Playerinfo[playerid][pGeld] richtig geladen? Hast du es vorher schonmal ausgegeben, zb. in der Konsole oder per Format() im Chat?


    das Geld wird folgendesmaßen gespeichert im Format: %i.%i.
    Wenn ich das Printe mit dem Split oben wird mir in der Konsole richtig anzeigt, jedoch nicht ausgezahlt.
    Ich hab ne Idee, ich teste es kurz wenn das funktioniert poste ich es hier gleich rein :)

  • Es gibt etwa 200 Komponennten. Viele Fahrzeuge teilen sich die selben Komponenten, aber nun nicht alle.
    Ich müsste für jedes Fahrzeug die Komponennten alle durchgehen und die Preise rausschreiben.


    Ist an sich kein Problem, jedoch würde das warscheinlich ewig dauern.


    Daher die Frage, ob es eine preisliste gibt.


    Ich muss leider für jede Komponennte den Preis wissen, da das Geld vom Server anders verwaltet wird. Ich muss also den Betrag, der abgezogen wird beim Tuning, anders verwalten.
    Am einfachsten ist das, wenn die Preise vorab bekannt sind.