Beiträge von HandsUpFreak

    Ein string kann noch weit aus mehr unterstützen. Das Problem ist hier(hab ich beobachtet), dass nach 2048 erstmal Sense ist, zumindest hab ich so dass Gefühl.
    Bei sscanf kann man auch mittels p| trennen, da das pX(p für Trenner und X für den Delimiter) anzeigt, wo getrennt werden soll.
    So kann man aus dem String
    1|0|abc|1|2
    mit sscanf auslesen:
    sscanf(string, "ddsdd", int1, int2, string1, int3, int4);

    Ja, stimmt schon, ist aber weit aus sicherer falls mal ein Root-Absturz passiert.
    Mir ging es auch eigentlich einfach nur darum, zu wissen, ob SAMP mit zuvielen großen Strings nicht klarkommt. Ich habe nämlich auch mal ein Test gemacht und 8 Strings á 256 Länge befüllt und diese anschließend in einen großen String mit 2048 Länge per format reingequetscht. Danach hat der Server das gleiche Phänomen gezeigt und nichts mehr gemacht.

    Sowas kommt nicht in Server-Hilfe sondern in Scripting Base.
    Wenn es kein Selfmade ist was ist es dann?
    Und außerdem:

    Nur da fehlt autohaus ich habe alles die pwn datei und die amx datei kanne iner mit helfen das zu einfügen im script :(


    Bitte

    Was erhoffst du dir jetzt?
    Das wir das gesamte Script(Was du uns nicht gegeben hast) inkl. fertig eingebautem Autohaus liefern?
    Ein paar mehr Informationen wären schon gut.

    Naja, der DB-Server liegt auf einem anderen als der Gameserver. Daher möchte ich nicht soviele ausführen da es auch irgendwo müll ist soviele Querys hintereinander auszuführen. Der Server ist zwar ordentlich eingestellt und auch leistungsstark aber wenn da in der Stunde (nehmen wir mal den extremfall)100 Leute connecten und disconnecten dann sind das schon 14 Querys(Connect+Disconnect)*100 das sind dann 1400 Querys in der Stunde, nicht gerade gesund.

    Naja, ich denke mal meine Query würde hier beim posten den Rahmen sprengen. Ach egal, ich poste es einfach mal rein, aufpassen :)

    new selectUserData[512], leftJoinData[512];
    format(selectUserData, sizeof(selectUserData), "userv.playedtimeH, userv.playedtimeM, userv.kills, userv.death, rllicense.id_card, rluserv.id_card_id, rllicense.car_license, rllicense.scooter_license, rllicense.bike_license, rllicense.boat_license, rllicense.heli_license, rllicense.plane_license, rluserv.wanted_level, rluserv.handy, rluserv.handyName, groupusers.groupID, groupusers.groupRankID, groupranks.groupRankName, jail.jailActive, jail.jailTime, jail.jailReason, jail.jailerID");
    format(leftJoinData, sizeof(leftJoinData), "LEFT JOIN rl_uservalues rluserv ON (rluserv.userID = user.id) LEFT JOIN rl_licenses rllicense ON (rllicense.userID = user.id) LEFT JOIN rl_group_users groupusers ON (groupusers.userID = user.id) LEFT JOIN rl_group_ranks groupranks ON (groupranks.groupRankID = groupusers.groupRankID AND groupranks.groupID = groupusers.groupID) LEFT JOIN rl_jail jail ON (jail.userID = user.id)");
    format(sqlbig, sizeof(sqlbig),
    "SELECT user.id, user.isAnAdmin, user.banned, user.banned_reason, user.password_md5, user.email, user.last_login_ip, language.languageid, %s FROM samp_user user LEFT JOIN samp_uservalues userv ON (userv.userID = user.id) LEFT JOIN samp_languages language ON (language.userID = user.id) %s WHERE user.playername = '%s'",
    selectUserData,
    leftJoinData,
    GetPlayerName(playerid));
    mysql_query(sqlbig);
    mysql_store_result();
    if(mysql_num_rows() == 1) {
    PlayerStatus[playerid][getAccount] = 1;
    PlayerStatus[playerid][ipAdress] = GetPlayerIp(playerid);
    while(mysql_fetch_row(sqlbig)) {
    sscanf(sqlbig, "p|dddssssdddddddddddddddsdddddsd",
    PlayerInfo[playerid][userID],
    AdminInfo[playerid][isAnAdmin],
    PlayerStatus[playerid][banned],
    PlayerStatus[playerid][bannedReason],
    PlayerInfo[playerid][password_md5],
    PlayerInfo[playerid][email],
    PlayerInfo[playerid][last_login_ip],
    PlayerInfo[playerid][playtimeH],
    PlayerInfo[playerid][playtimeM],
    PlayerInfo[playerid][kills],
    PlayerInfo[playerid][deaths],
    PlayerInfo[playerid][language],
    RlInfo[playerid][ID_card],
    RlInfo[playerid][ID_card_id],
    RlInfo[playerid][Car_license],
    RlInfo[playerid][Scooter_license],
    RlInfo[playerid][MBike_license],
    RlInfo[playerid][Boat_license],
    RlInfo[playerid][Heli_license],
    RlInfo[playerid][Plane_license],
    RlInfo[playerid][Wanted_level],
    RlInfo[playerid][Handy],
    RlInfo[playerid][HandyName],
    GroupInfo[playerid][groupID],
    GroupInfo[playerid][groupRankID],
    GroupInfo[playerid][groupRank],
    JailInfo[playerid][jailed],
    JailInfo[playerid][jailTime],
    JailInfo[playerid][jailReason],
    JailInfo[playerid][jailerID]);
    }
    print("");
    print("==== userConnectData erfolgreich ! ================");
    printf("...Spieler %s wurde in der Datenbank gefunden !");
    printf("...UserID: %d - Banned: %d - E-Mail: %s - Admin: %d", PlayerInfo[playerid][userID], PlayerStatus[playerid][banned], PlayerInfo[playerid][email], AdminInfo[playerid][isAnAdmin]);
    if(PlayerStatus[playerid][banned]) printf("Banreason: %s", PlayerStatus[playerid][bannedReason]);
    if(!PlayerStatus[playerid][banned]) printf("GroupID: %d - GroupRankID: %d - GroupRank: %s", GroupInfo[playerid][groupID], GroupInfo[playerid][groupRankID], GroupInfo[playerid][groupRank]);
    print("");
    mysql_free_result();
    userEditor("adminLogin", playerid);
    return 1;
    }
    mysql_free_result();

    Die hier auszuführende Query(Ja, ich musste sie leider aufteilen^^) lautet:

    SQL
    SELECT user.id, user.isAnAdmin, user.banned, user.banned_reason, user.password_md5, user.email, user.last_login_ip, language.languageid, userv.playedtimeH, userv.playedtimeM, userv.kills, userv.death, rllicense.id_card, rluserv.id_card_id, rllicense.car_license, rllicense.scooter_license, rllicense.bike_license, rllicense.boat_license, rllicense.heli_license, rllicense.plane_license, rluserv.wanted_level, rluserv.handy, rluserv.handyName, groupusers.groupID, groupusers.groupRankID, groupranks.groupRankName, jail.jailActive, jail.jailTime, jail.jailReason, jail.jailerID FROM samp_user user LEFT JOIN samp_uservalues userv ON (userv.userID = user.id) LEFT JOIN samp_languages language ON (language.userID = user.id) LEFT JOIN rl_uservalues rluserv ON (rluserv.userID = user.id) LEFT JOIN rl_licenses rllicense ON (rllicense.userID = user.id) LEFT JOIN rl_group_users groupusers ON (groupusers.userID = user.id) LEFT JOIN rl_group_ranks groupranks ON (groupranks.groupRankID = groupusers.groupRankID AND groupranks.groupID = groupusers.groupID) LEFT JOIN rl_jail jail ON (jail.userID = user.id) WHERE user.playername = 'HandsUpFreak'


    und das hochscrollen nicht vergesssen :)

    Hallo,
    ich habe eine riesige SQL-Query mit ca. 1300 Zeichen im String geschrieben, die es mir ermöglicht mittels LEFT JOIN's aus verschiedenen MySQL-Tabellen die Userdaten zu beziehen. Das klappt auch aber danach ist Ende. SAMP ist anscheinend vollgespeichert und führt nichts mehr aus, der Server bleibt zwar an aber z.B. einfache Commands wie:

    printf("GroupID: %d - GroupRankID: %d - GroupRank: %s", GroupInfo[playerid][groupID], GroupInfo[playerid][groupRankID], GroupInfo[playerid][groupRank]);

    werden einfach abgekürzt. Danach wird ein weiterer Befehl der unten drunter steht auch nicht mehr ausgeführt. Woran kann das liegen, dass der String wegen der großen Query evtl. so definiert wird:
    new sqlbig[1536];
    Ich weiß nicht woran es liegt und würde mich über eine Antwort freuen.


    Mfg

    Hast du überhaupt die Grundsätze von PAWN verstanden?

    public OnPlayerRequestClass(playerid, classid) {
    SpawnPlayer(playerid)
    return 1; /463
    }

    Da sind schon 2 Fehler drin.
    Ein Kommentar wird so geschrieben // und hinter jeder Zeile muss ein ; stehen. Damit sagst du erst, dass damit der Befehl bzw. die Zeile zuende ist :)
    Richtig aussehen müsste es also:

    public OnPlayerRequestClass(playerid, classid) {
    SpawnPlayer(playerid);
    return 1; //463 }

    Du könntest z.B. mit Timestamps arbeiten. Ich weiß ja nicht, ob du mit MySQL arbeitest oder nicht. Mit MySQL kannst du halt in der MySQL-DB abspeichern, wann er gebannt wurde. Wenn ohne MySQL, dann halt eine Uservariable die er in der file abspeichert. Zum Timestamp dann einfach die gewünschte Sekundenzahl hinzufügen, wann er wieder entbannt werden soll und dann einfach abchecken ob der Timestamp älter ist als der aktuelle, dann ist er wieder entbannt.

    Hallo,
    ich suche den Delimiter von der MySQL-Query. Standart in PHP oder PhpMyAdmin ist ja das ; aber das nimmt SA-MP nicht an, daher schreibt er dies in die MySQL-Log:

    Code
    [11:20:18] CMySQLHandler::Query(SELECT id FROM samp_user WHERE playername = 'HandsUpFreak'; SELECT banned FROM samp_user WHERE playername = 'HandsUpFreak';) - An error has occured. (Error ID: 1064, You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'SELECT banned FROM samp_user WHERE playername = 'HandsUpFreak'' at line 1)


    Würde ich jetzt genau diese Query in PhpMyAdmin ausführe:

    SQL
    SELECT id FROM samp_user WHERE playername = 'HandsUpFreak'; SELECT banned FROM samp_user WHERE playername = 'HandsUpFreak';


    Zeigt er mir die Werte an. Diese Query würde natürlich 0 Sinn machen, dass ist mir schon klar da der eine SELECT den anderen überschreibt. Es ist einfach nur zum zeigen, dass der Delimiter mit ; nicht funktioniert. Kann jemand dabei helfen?


    Mfg