Beiträge von The Sensei

    Jau ich bin es schon wieder :P


    • Samsung 4k UHD LED TV ≈ 699€
    • L&M Red XXXL Box (Sonderposten) ≈ 10€
    • Vollgetankt ≈ 110€
    • Reifenwechsel mit Felgen ≈ Pro Reifen 700€
    • Wocheneinkauf ≈ 590€

    Joa das wars eigentlich.
    Mit freundlichen Grüßen,
    Genadj_Andrenov

    als was arbeitest du?!


    • 2x Kinokarten ES = 19,-€
    • 1x Medium Popcorn & 2x Sprite = 9,90€
    • DoEpicShit Hoodie = ca. 50,-€ mit Versandkosten
    • sonstiges Essen = 20,-€

    Beschreibung ist enthalten mit einem ==> am besten ließt du dir den post von Douq dazu auch nochmal durch.

    Ok, hab das von Douq nicht ganz verstanden aber mal versucht umzusetzen.
    ocmd:chouse(playerid, params[])
    {
    new price, interior, typ, i;
    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]");
    hInfo[i][house_id] = -1;
    for(i=0; i<MAX_HOUSE; i++)
    {
    if(hInfo[i][house_id] == -1){ break; } else {
    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;
    }


    Er erstellt jetzt garnichts mehr :(

    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;
    }

    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?

    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];

    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;
    }

    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;
    }

    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?

    @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]

    Gleiches Problem wie beim anderen Befehl:if(sscanf(params, "s[256]", string))return SCM(playerid, -1, "Tippe: /f [nachricht]");
    zu:
    if(sscanf(params, "s", string))return SCM(playerid, -1, "Tippe: /f [nachricht]");

    Immer noch das selbe problem Server: Unknown Command
    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);
    for(new i=0; i<MAX_PLAYERS; i++)
    {
    if(!IsPlayerConnected(i))continue;
    if(!isPlayerInFrakt(i, fID))continue;
    SCM(i, BABYBLAU, string);
    }
    return 1;
    }


    Hey,
    er speichert nur den ersten Buchstaben von pBan_admin.


    Das Enum:
    enum pDataEnum
    {
    p_id,
    bool:pLoggedIn,
    pName[MAX_PLAYER_NAME],
    pLevel,
    pMoney,
    pKills,
    pDeaths,
    pAdmin,
    pF_id,
    pF_rank,
    pSkin,
    pBanned,
    pBan_reason[255],
    pBan_admin[MAX_PLAYER_NAME],
    pBan_date[56],
    pPremium,
    pVIP
    }
    new PlayerInfo[MAX_PLAYERS][pDataEnum];


    Der Befehl:
    ocmd:ban(playerid, params[])
    {
    if(!isPlayerAnAdmin(playerid,2))return SCM(playerid, ERROR_FARBE, ERROR_ADMIN);
    new pID,grund[255],string[1028], query[256], datum[56], Hour, Minute, Second, Year, Month, Day;
    if(sscanf(params,"us",pID,grund))return SCM(playerid, ERROR_FARBE, "Tippe: /ban [spieler] [grund]");
    getdate(Year, Month, Day);
    gettime(Hour, Minute, Second);
    if(PlayerInfo[playerid][pAdmin] < PlayerInfo[pID][pAdmin])return SCM(playerid, ERROR_FARBE, ERROR_ADMIN_BAN);
    format(datum, sizeof(datum), "%02d.%02d.%d - %02d:%02d:%02d", Year, Month, Day, Hour, Minute, Second);
    format(query, sizeof(query), "INSERT INTO Userakte (User, Typ, Date, Reason, Name_From) VALUES ('%s', '%s', '%02d.%02d.%d - %02d:%02d:%02d','%s','%s')", PlayerInfo[pID][pName], TYP_PERM_BAN, Day, Month, Year, Hour, Minute, Second, grund, PlayerInfo[playerid][pName]);
    mysql_tquery(handle, query);
    format(string, sizeof(string), "%s wurde von %s vom Server gebannt. Grund: %s", PlayerInfo[pID][pName],PlayerInfo[playerid][pName],grund);
    SCMA(ERROR_FARBE, string);
    format(string, sizeof(string), "Du wurdest von %s vom Server gebannt. Grund: %s", PlayerInfo[playerid][pName], grund);
    SCM(pID, ERROR_FARBE, string);
    PlayerInfo[playerid][pBanned] = 1;
    PlayerInfo[playerid][pBan_reason] = grund;
    PlayerInfo[playerid][pBan_admin] = NamePlayer(playerid);
    PlayerInfo[playerid][pBan_date] = datum;
    SetTimerEx("DelayedKick", 500, false, "i", pID);
    return 1;
    }
    NamePlayer:
    stock NamePlayer(playerid)
    {
    new name[MAX_PLAYER_NAME];
    GetPlayerName(playerid,name,sizeof(name));
    return name;
    }
    Wo es angewand wird:
    forward OnUserLogin(playerid);
    public OnUserLogin(playerid)
    {
    //Query wurde ausgeführt und das Ergebnis im Cache gespeichert
    new rows, string[128];
    cache_get_row_count(rows);
    if(rows == 0)
    {
    //Der Spieler hat ein falsches Passwort eingegeben
    ShowPlayerDialog(playerid, DIALOG_LOGIN, DIALOG_STYLE_PASSWORD, SERVER_NAME"("SERVER_VERSION")", "Herzlich Willkommen zurück,\nbitte logge Dich nun ein:\n{FF0000}Falsches Passwort!", "Ok", "Abbrechen");
    }
    else
    {
    cache_get_value_name_int(0, "id", PlayerInfo[playerid][p_id]);
    cache_get_value_name_int(0, "level", PlayerInfo[playerid][pLevel]);
    cache_get_value_name_int(0, "money", PlayerInfo[playerid][pMoney]);
    cache_get_value_name_int(0, "kills", PlayerInfo[playerid][pKills]);
    cache_get_value_name_int(0, "deaths", PlayerInfo[playerid][pDeaths]);
    cache_get_value_name_int(0, "admin", PlayerInfo[playerid][pAdmin]);
    cache_get_value_name_int(0, "f_id", PlayerInfo[playerid][pF_id]);
    cache_get_value_name_int(0, "f_rank", PlayerInfo[playerid][pF_rank]);
    cache_get_value_name_int(0, "skin", PlayerInfo[playerid][pSkin]);
    cache_get_value_name_int(0, "banned", PlayerInfo[playerid][pBanned]);
    cache_get_value_name(0, "ban_reason", PlayerInfo[playerid][pBan_reason], 255);
    cache_get_value_name(0, "ban_admin", PlayerInfo[playerid][pBan_admin], 20);
    cache_get_value_name(0, "ban_date", PlayerInfo[playerid][pBan_date], 56);
    cache_get_value_name_int(0, "premium", PlayerInfo[playerid][pPremium]);
    cache_get_value_name_int(0, "vip", PlayerInfo[playerid][pVIP]);
    PlayerInfo[playerid][pLoggedIn] = true;
    if(PlayerInfo[playerid][pBanned] == 1)
    {
    new header[256], mid[512], Year, Month, Day, Hour, Minute, Second;
    getdate(Year, Month, Day);
    gettime(Hour, Minute, Second);
    format(header,sizeof(header), "Account(%s) Permanent Gesperrt", PlayerInfo[playerid][pName]);
    format(mid,sizeof(mid), "Guten Tag,\ndieser Account wurde gesperrt und kann nicht mehr verwendet werden.\nAusführender Admin: %s\nBandatum: %s\nGrund: %s", PlayerInfo[playerid][pBan_admin], PlayerInfo[playerid][pBan_date], PlayerInfo[playerid][pBan_reason]);
    SPD(playerid, DIALOG_BAN_MESSAGEBOX, DIALOG_STYLE_MSGBOX, header, mid,"Bestätigen","");
    SetTimerEx("Banned", 500, false, "i", playerid);
    return 1;
    }
    if(PlayerInfo[playerid][pPremium] == 1) { SCM(playerid, ORANGE, "Du besitzt Premium(Permanent)"); }
    else if(PlayerInfo[playerid][pPremium] == 1 && PlayerInfo[playerid][pVIP] == 1) { SCM(playerid, ORANGE, "Du besitzt V.I.P.(Permanent)"); }
    format(string, sizeof(string), "Willkommen %s", NamePlayer(playerid));
    SCM(playerid, 0x00FF00FF, string);
    GivePlayerMoney(playerid, PlayerInfo[playerid][pMoney]);
    SpawnPlayer(playerid);
    }
    return 1;
    }

    dbhandle zu handle

    Das geht nur, wenn du den Name ganz am Ende hin schreibst. Sonst weiß sscanf ja nicht, wann es zum nächsten Parameter gehen soll.

    Hast du nen Plan warum bei mir immer /f [nachricht] kommt?
    ocmd@2:f,familie(playerid,params[])
    {
    if(isPlayerInFrakt(playerid, 0))return SCM(playerid, ERROR_FARBE, ERROR_FRAKTION);
    new string[256];
    if(sscanf(params, "s[256]", 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);
    for(new i=0; i<MAX_PLAYERS; i++)
    {
    if(!IsPlayerConnected(i))continue;
    if(!isPlayerInFrakt(i, fID))continue;
    SCM(i, BABYBLAU, string);
    }
    return 1;
    }