[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
  • @The Sensei:
    Wird trotzdem eine Nachricht ausgesendet ?
    Funktioniert es wenn du nur mit ein Befehl machst ?
    Sprich

  • @The Sensei:
    Wird trotzdem eine Nachricht ausgesendet ?
    Funktioniert es wenn du nur mit ein Befehl machst ?
    Sprich

    Nein tut es nicht immer noch Server Unknown Command oder /f [nachricht]

  • Schau mal ob es was Printete und wenn ja wie weit

  • Ich gehe stark davon aus, dass rInfo[fID][fRang] den Fehler verursacht, dort könnte eventuell das Array gesprengt werden.
    Wie ist denn das rInfo deklariert?

    Hey hab das alles mal geändert.
    Das Enum:
    enum frakrangEnum{
    r_fid,
    r_frang,
    r_frang_name[128]
    }
    new rInfo[][frakrangEnum];


    der Befehl:
    ocmd@2:f,familie(playerid,params[])
    {
    if(isPlayerInFrakt(playerid, 0))return SCM(playerid, ERROR_FARBE, ERROR_FRAKTION);
    new string[256];
    if(sscanf(params, "s", string))return SCM(playerid, -1, "Tippe: /f [nachricht]");
    new fID = PlayerInfo[playerid][pF_id];
    new fRang = PlayerInfo[playerid][pF_rank];
    format(string,sizeof(string),"**((%s %s: %s ))**",rInfo[fID][fRang],NamePlayer(playerid), string);// 683
    for(new i=0; i<MAX_PLAYERS; i++)
    {
    if(!IsPlayerConnected(i))continue;
    if(!isPlayerInFrakt(i, fID))continue;
    SCM(i, BABYBLAU, string);
    }
    return 1;
    }


    forward LoadFractionsRangNames_Data();
    public LoadFractionsRangNames_Data()
    {
    new rows, i;
    rows = cache_num_rows();
    for(i=0; i < rows; i++)
    {
    cache_get_value_name_int(i, "fid", rInfo[i][r_fid]);
    cache_get_value_name_int(i, "f_rang", rInfo[i][r_frang]);
    cache_get_value_name(i, "f_rang_name", fInfo[i][r_frang_name], 128); //1066
    }
    printf("[FRAKTION-RANGS] %d/%d geladen.", i, rows);
    return 1;
    }


    leider bekomme ich zwei Warnings:
    C:\Users\Patrick\Desktop\Server\gamemodes\server.pwn(683) : warning 213: tag mismatch
    C:\Users\Patrick\Desktop\Server\gamemodes\server.pwn(1066) : warning 213: tag mismatch


    --
    Ich brauche doch zwei Werte für meine Abfrage einmal die Fraktion und einmal den Rang. hast du ne Idee?

  • Ich brauche doch zwei Werte für meine Abfrage einmal die Fraktion und einmal den Rang. hast du ne Idee?

    Das enum brauchst du nicht, mache es so:
    new rName[MAX_FRAKS][MAX_RANKS][32];


    Und dann der Zugriff so:
    rName[fID][fRang]


    Sprich beim Laden dann so:
    forward LoadFractionsRangNames_Data();
    public LoadFractionsRangNames_Data()
    {
    new rows, i, fID, fRang;
    rows = cache_num_rows();
    for(i=0; i < rows; i++)
    {
    cache_get_value_name_int(i, "fid", fID);
    cache_get_value_name_int(i, "f_rang", fRang);
    cache_get_value_name(i, "f_rang_name", rName[fID][fRang], 128); //1066
    }
    printf("[FRAKTION-RANGS] %d/%d geladen.", i, rows);
    return 1;
    }

    3HZXdYd.png

    Einmal editiert, zuletzt von Jeffry () aus folgendem Grund: fInfo -> rName

  • Das enum brauchst du nicht, mache es so:new rName[MAX_FRAKS][MAX_RANKS][32];


    Und dann der Zugriff so:
    rName[fID][fRang]


    Sprich beim Laden dann so:
    forward LoadFractionsRangNames_Data();public LoadFractionsRangNames_Data(){ new rows, i, fID, fRang; rows = cache_num_rows(); for(i=0; i < rows; i++) { cache_get_value_name_int(i, "fid", fID); cache_get_value_name_int(i, "f_rang", fRang); cache_get_value_name(i, "f_rang_name", fInfo[fID][fRang], 128); //1066 } printf("[FRAKTION-RANGS] %d/%d geladen.", i, rows); return 1;}

    Mein Compiler Stürzt ab. Ich habe anstatt des Enums das: new rName[MAX_FRAKS][MAX_RANKS][32];
    Der Befehl ist so:
    ocmd@2:f,familie(playerid,params[])
    {
    if(isPlayerInFrakt(playerid, 0))return SCM(playerid, ERROR_FARBE, ERROR_FRAKTION);
    new string[256];
    if(sscanf(params, "s", string))return SCM(playerid, -1, "Tippe: /f [nachricht]");
    new fID = PlayerInfo[playerid][pF_id];
    new fRang = PlayerInfo[playerid][pF_rank];
    format(string,sizeof(string),"**((%s %s: %s ))**",rName[fID][fRang],NamePlayer(playerid), string);
    for(new i=0; i<MAX_PLAYERS; i++)
    {
    if(!IsPlayerConnected(i))continue;
    if(!isPlayerInFrakt(i, fID))continue;
    SCM(i, BABYBLAU, string);
    }
    return 1;
    }



    und das laden so:
    forward LoadFractionsRangNames_Data();
    public LoadFractionsRangNames_Data()
    {
    new rows, i, fID, fRang;
    rows = cache_num_rows();
    for(i=0; i < rows; i++)
    {
    cache_get_value_name_int(i, "fid", fID);
    cache_get_value_name_int(i, "f_rang", fRang);
    cache_get_value_name(i, "f_rang_name", fInfo[fID][fRang], 128); //1066
    }
    printf("[FRAKTION-RANGS] %d/%d geladen.", i, rows);
    return 1;
    }

  • Hast du MAX_FRAKS und MAX_RANKS auch definiert?
    #define MAX_FRAKS 10#define MAX_RANKS 5


    10 und 5 natürlich an deine Werte anpassen.


    Hast du die rInfo Variable komplett entfernt?

    Ups, hab das #define unter der Anwendung gemacht. Jetzt gehts.
    Hatte ein Warning hab dann fInfo zu rName geändert und dann war der warning weg. War meine Handlung richtig?
    forward LoadFractionsRangNames_Data();
    public LoadFractionsRangNames_Data()
    {
    new rows, i, fID, fRang;
    rows = cache_num_rows();
    for(i=0; i < rows; i++)
    {
    cache_get_value_name_int(i, "fid", fID);
    cache_get_value_name_int(i, "f_rang", fRang);
    cache_get_value_name(i, "f_rang_name", rName[fID][fRang], 128); //rName war früher fInfo
    }
    printf("[FRAKTION-RANGS] %d/%d geladen.", i, rows);
    return 1;
    }

  • Wieso Funktioniert das Nicht ?



    Code
    new myobject = CreateDynamicObject(2901,0,0,-1000,0,0,0,100);
    		AttachDynamicObjectToVehicle(myobject, Veh, 0.074999,-1.425000,0.300000,0.000000,0.000000,0.000000);


    So Funktioniert es

    Code
    new myobject = CreateObject(2901,0,0,-1000,0,0,0,100);
    		AttachObjectToVehicle(myobject, Veh, 0.074999,-1.425000,0.300000,0.000000,0.000000,0.000000);
  • do.de - Domain-Offensive - Domains für alle und zu super Preisen
  • Hey warum funktioniert meine Abfrage nicht?
    stock isPlayerInStaatFrakt(playerid){
    if(fInfo[PlayerInfo[playerid][pF_id]][f_typ]==1)return 1;
    return 0;
    }
    Enum dazu:
    enum fraktEnum{
    fid,
    f_name[256],
    f_shortname[64],
    Float:f_x,
    Float:f_y,
    Float:f_z,
    Float:f_r,
    f_inter,
    f_world,
    f_typ,
    f_cop,
    f_leaderskin,
    f_kasse,
    f_mats,
    f_drogen,
    f_color[64]
    }
    new fInfo[MAX_FRAC][fraktEnum];

  • printe doch den wert von playerinfo und dann den von f_ftype :)


    Eventuell wurde da was nicht richtig zugewiesen :)

    stock isPlayerInStaatFrakt(playerid){
    printf("STAAT - %d / %d", PlayerInfo[playerid][pF_id], fInfo[PlayerInfo[playerid][pF_id]][f_typ]);
    if(fInfo[PlayerInfo[playerid][pF_id]][f_typ]==1)return 1;
    return 0;
    }

    Hab es so geprintet und es ist alles richtig?

  • Beitrag von The Sensei ()

    Dieser Beitrag wurde vom Autor aus folgendem Grund gelöscht: neue Frage ().
  • Hey, mein Haussystem spinnt. Es werden 200 Häuser erstellt(MAX_HOUSE Wert). Kann mir einer erklären warum?
    @Jeffry


    ocmd:chouse(playerid, params[])
    {
    new price, interior, typ;
    if(!isPlayerAnAdmin(playerid,4))return SCM(playerid, ERROR_FARBE, ERROR_ADMIN);
    if(sscanf(params,"ddd",price,interior,typ))return SCM(playerid, -1, "Tippe: /chouse [price] [interior] [typ]");
    for(new i=0; i<MAX_HOUSE; i++)
    {
    if(strval(hInfo[i][house_id])) continue;
    new Float:x, Float:y, Float:z, string[64], string2[MAX_PLAYER_NAME], query[512];
    GetPlayerPos(playerid, x, y, z);
    format(string,sizeof(string), "Zum verkauf");
    format(string2,sizeof(string2), "Niemand");
    hInfo[i][house_id] = i;
    hInfo[i][house_owner] = string2;
    hInfo[i][house_description] = string;
    hInfo[i][house_price] = price;
    hInfo[i][house_interior] = interior;
    hInfo[i][house_typ] = typ;
    hInfo[i][house_x] = x;
    hInfo[i][house_y] = y;
    hInfo[i][house_z] = z;
    format(query, sizeof(query), "INSERT INTO houses (id, owner, description, price, interior, posx, posy, posz, typ) VALUES ('%d', '%s', '%s', '%d', '%d', '%f', '%f', '%f', '%d')",
    i, hInfo[i][house_owner], hInfo[i][house_description], hInfo[i][house_price], hInfo[i][house_interior], hInfo[i][house_x], hInfo[i][house_y], hInfo[i][house_z], hInfo[i][house_typ]);
    mysql_tquery(handle, query);
    format(string,sizeof(string), "Du hast erfolgreich das Haus(ID: %d) erstellt.",i);
    printf("%s", query);
    SCM(playerid, BABYBLAU, string);
    }
    return 1;
    }

  • Wieso Funktioniert das Nicht ?



    Code
    new myobject = CreateDynamicObject(2901,0,0,-1000,0,0,0,100);
    		AttachDynamicObjectToVehicle(myobject, Veh, 0.074999,-1.425000,0.300000,0.000000,0.000000,0.000000);

    So Funktioniert es

    Code
    new myobject = CreateObject(2901,0,0,-1000,0,0,0,100);
    		AttachObjectToVehicle(myobject, Veh, 0.074999,-1.425000,0.300000,0.000000,0.000000,0.000000);

    weiß jemand warum ?
    @Jeffry:
    @Kaliber:

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