[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
  • 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);
  • 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:

  • CreateDynamicObject(2901,0,0,-1000,0,0,0,100);

    Du solltest dir mal die Parameter angucken von CreateDynamicObject.
    Der letzte Parameter den du dort angibst ist deine WorldID nicht die Drawdistance, wie bei CreateObject.


    Du solltest das mal so probieren
    CreateDynamicObject(2901,0,0,-1000,0,0,0, .drawdistance = 100);

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

    Margarete Stokowski

  • Hey mal eine frage wie kann ich die Höchste ID herrausfinden ? Steht gerade aufm Schlauch :D
    z.b wenn ich dort 5 werte habe dass ich die ID vom 5 bekomme so würde ich ja den ersten Treffer bekommen wo es zustimmt

    Code
    for(new i = 0; i<sizeof(hbf[]); i++)
    		{
    		    if(hbf[playerid][i] != 0) continue;
  • Hi.


    Man sollte in verschiedene World's keine Befehle eingeben können.
    Inwiefern sollte es gehen?