Beiträge von Simon

    klar, aber nur in einer variablel.
    du kannst ihm keine spielerid zuweisen, das kommt drauf an wie sie connecten, wozu auch?

    Das ist meine rede Simon genau das meine ich nur leute wie Gredsoft denken die andere variante ist "ressourcen schonender"


    Ich möchte seine Aussage nicht verurteilen, mag richtig sein was er sagt, nur ich kann mir das kaum vorstellen.
    Dies ist jedoch hier nicht das Thema, sollte man in einem anderen Thema ausdiskutieren.


    Ich habe mal mit einigen Aimbots getestet ob man wirklich 1000 Schlagringe hat, leider negativ. Eventuell habe ich auch das Prinzip des detectens welches hier gemeint ist falsch verstanden. Ich bleibe dabei das sowas unnötig ist und man lieber ein richtiges Aimbot-detect-script macht wo halt alle überprüft werden, weil wenn ich weiß das dieser aimbot detected wird, nehme ich halt nen anderen :)

    Wenn es nur bei diesem einem aimbot ist, ist es doch eh unnötig.
    Dann lieber richtig aimbot detect scripten und der greift bei allen.


    Ich habe so oder so einen globalen Sekundentimer weil er so manches halt jede Sekunde abfragen muss. und in diesen sekundentimer haue ich einfach eine for schleife für jeden spieler rein und frage dort sämtliches ab.
    Ich schätze sowas ist sonnvoller als eh zu meinem existierenden sekundentimer nochmal für jeden anderen spieler nen sekunden timer zu machen. dann laufen ja satt an timern die jedesmal ein public aufrufen und den code durchgehen.
    Kann mir kaum vorstellen das sowas besser ist, aber lass mich gerne belehren.


    Damit ist aber im text noch das ! enthalten, also in der Nachricht


    Na eben nicht. strfind returned wenn es nicht vorhanden ist "-1". Wenn es vorhanden ist, returned er die Anzahl der zeichen vor dem gesuchtem!
    Sprich: wenn es am anfang stehen soll MUSS er "0" retunen, steht es aber mitten im Text, returned er einen höheren Wert.


    Das ist aber eh überflüssig weil mit text[0] ist es viel einfacher und besser. er muss dann aber dennoch "!" ausschneiden damit das nicht mitgesendet wird.

    Zitat

    [Sat Apr 27 16:42:32 2013] Function: mysql_real_esacpe_string executed: "Jules" with result: "Jules".
    [Sat Apr 27 16:42:32 2013] Function: mysql_query executed: "SELECT * FROM `accounts` WHERE `Nickname` = 'Jules'" with result: "0".
    [Sat Apr 27 16:42:32 2013] Function: mysql_store_result executed with result: "1"
    [Sat Apr 27 16:42:32 2013] Function: mysql_fetch_row executed with result: "6|Jules|a384b6463fc216a5f8ecb6670f86456a|27.4.2013|230|-1|0|0|0|1000|14000|0|1|-1|0|0|-1|100|0|0|0|0|0|0|0|-1|-1|-1|2000|1|1|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|NULL|NULL|NULL|0|1|0|NULL|NULL|0|0|0|0|0|Unbekannt|Unbekannt|0|0|-1|01732045316".


    Alles was auf NULL ist, sind Strings


    //edit: Fehler behoben, Strings dürfen auch nicht "NULL" sein.


    Danke für eure Hilfe :)

    Zitat

    [Sat Apr 27 16:33:52 2013] Function: mysql_real_esacpe_string executed: "Jules" with result: "Jules".
    [Sat Apr 27 16:33:52 2013] Function: mysql_query executed: "SELECT * FROM `accounts` WHERE `Nickname` = 'Jules'" with result: "0".
    [Sat Apr 27 16:33:52 2013] Function: mysql_store_result executed with result: "1"
    [Sat Apr 27 16:33:52 2013] Function: mysql_fetch_row executed with result: "5|Jules|a384b6463fc216a5f8ecb6670f86456a|27.4.2013|79|-1|0|0|0|1000|14000|0|1|-1|0|0|-1|100|0|NULL|NULL|NULL|NULL|0|0|NULL|NULL|NULL|NULL|NULL|NULL|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|NULL|NULL|NULL|0|1|0|NULL|NULL|0|0|0|0|0|Unbekannt|Unbekannt|0|0|-1|01752045313".


    Kann das an den Wert "NULL" liegen?

    Wollte ich gerade sagen, habe auch gerade gesehen das das nur für BlueG ist.


    Ich benutze das StrickenKid.


    //edit:


    Ich habe es nun folgendermaßen:

    new Query[512];
    print("Test 1");
    mysql_real_escape_string(pName[playerid], pName[playerid]);
    print("Test 2");
    format(Query,sizeof(Query),"SELECT * FROM `accounts` WHERE `Nickname` = '%s'", pName[playerid]);
    print("Test 3");
    mysql_query(Query);
    print("Test 4");
    mysql_store_result();
    print("Test 5");
    mysql_fetch_row(Query, "|");

    print("Test 6");

    sscanf(Query, "p<|>{is[30]s[35]}s[15]iiiiliiiiiliiffffffiiiiiiii{iiiiiiiiiiiiiiiiiiiiiiiiii}lls[100]s[20]s[20]iils[20]s[15]iiiiis[75]s[30]iiis[15]",
    Spieler[playerid][RegDate], Spieler[playerid][Zivilskin], Spieler[playerid][Fraktionsskin], Spieler[playerid][Duty], Spieler[playerid][Adminlvl], Spieler[playerid][Leaderverwaltung], Spieler[playerid][Bargeld], Spieler[playerid][Bankgeld], Spieler[playerid][Konto],
    Spieler[playerid][Level], Spieler[playerid][Fraktion], Spieler[playerid][Leader], Spieler[playerid][Rang], Spieler[playerid][Spawnchange], Spieler[playerid][Leben], Spieler[playerid][Armour], Spieler[playerid][LastX], Spieler[playerid][LastY],
    Spieler[playerid][LastZ], Spieler[playerid][LastA], Spieler[playerid][LastInt], Spieler[playerid][LastVirt], Spieler[playerid][LastHour], Spieler[playerid][LastMinute], Spieler[playerid][LastSecond], Spieler[playerid][LastYear], Spieler[playerid][LastMonth],
    Spieler[playerid][LastDay], Spieler[playerid][ban], Spieler[playerid][tban], Spieler[playerid][bangrund], Spieler[playerid][tbantime], Spieler[playerid][tbandate], Spieler[playerid][warns], Spieler[playerid][Tutorial], Spieler[playerid][Perso],
    Spieler[playerid][Geschlecht], Spieler[playerid][GebDate], Spieler[playerid][Mute], Spieler[playerid][OOCMute], Spieler[playerid][Wanteds], Spieler[playerid][Wantedpoints], Spieler[playerid][Susptime],Spieler[playerid][Verbrechen], Spieler[playerid][Klaeger],
    Spieler[playerid][Drogen], Spieler[playerid][Mats], Spieler[playerid][Handy], Spieler[playerid][Handynummer]);


    print("Test 7");
    mysql_free_result();
    print("Test 8");
    Laut den Test-Prints bleibt der Server bei der Funktion mysql_fetch_row stehen.

    Zitat

    [15:49:44] Test 1
    [15:49:44] Test 2
    [15:49:44] Test 3
    [15:49:44] Test 4
    [15:49:44] Test 5

    Ah Okay.. Ich bin vorher immer alles mit ner While Schleife durchgegangen.


    Also kann nun lieber die schleifen mit dieser Funktion ersetzen.


    //edit: Er gibt mir folgenden Error:

    Zitat

    "File or function is not found"
    [15:28:59] [debug] mysql_fetch_row_format

    Das vorgehen verstehe ich nicht ganz. Man muss doch mit mysql_query erstmal eine Query ausführen, welche dann das ergebnis der Query mit mysql_store_result speichert und mit mysql_free_result wieder freigibt. mithilfe der whileschleife arbeite ich dann einfach mit dem ergebnis.

    Ich habe es mal getestet, es könnte sein das dies der Fehler mit dem crashdetect war.


    Der server kackt genau dann ab, wenn er das aus der Datenbank in die variablen schreibt mithilfe von sscanf, also bei der while Schleife.
    Ich weiß nun noch ob die größe immernoch zu klein ist, ich hatte sie auf 750 Zeichen gesetzt, da es aber ziemlich große Tabelle ist, könnte das immernoch zu klein sein, was ich mir aber fast nicht vorstellen kann.

    Ich dachte mir so: Das einzige wo überhaupt ein Array so eine größe hat die überschritten werden kann, sind die Strings.
    Habe alle größen mal verglichen in der enum und in der Datenbank und alle angepasst und nun scheint es zu laufen, ich teste es jedoch noch, zumindest gibt er mir kein solchen fehler mehr um log, was genauso schei*e ist weil der server sich nun komplett beim connecten aufhängt, könnte auch daran liegen das durch diesen fehler ein fehler in der Datenbank folgt. Ich werde es nochmal testen.


    //edit:

    Query ist viel zu klein?
    new Query[520];


    Was mir gerade eingefallen ist: könntest doch recht haben, da das ergebnis doch in der Query dann gespeichert ist oder?

    Nö kein stück zu klein!


    So wie die Zeichenfolge da steht, hat sie knapp 50 Zeichen. Max_Player_Name hat knapp 25 Zeichen, macht gerundet 75. Ich habe 100 angegeben immer noch ausreichend, um auf nummer sicher zu gehen.


    Ich habe den Fehler anscheinend behoben bekommen aber nun passiert folgendes: Der Server schmiert ab sobald dieser scriptabschnitt abgearbeitet werden soll. Ohne jegliche Fehlermeldung in der log.

    Guten Tag


    Crahsdetect gibt mir den Fehler wieder, der verursacht wird, weil ich ein Array überschreite (oder unterschreite?). Nur weiß ich nicht genau an welcher stelle dies Geschieht.
    Ich weiß das es in diesem Abschnitt passieren muss:
    new Query[100];
    format(Query,sizeof(Query),"SELECT * FROM `accounts` WHERE `Nickname` = '%s'", pName[playerid]);
    mysql_query(Query);
    mysql_store_result();
    while(mysql_fetch_row(Query, "|"))
    {
    sscanf(Query, "p<|>{is[30]s[35]}s[15]iiiiliiiiiliiffffffiiiiiiii{iiiiiiiiiiiiiiiiiiiiiiiiii}lls[100]s[20]s[20]iils[20]s[15]iiiiis[75]s[30]iiis[15]",
    Spieler[playerid][RegDate], Spieler[playerid][Zivilskin], Spieler[playerid][Fraktionsskin], Spieler[playerid][Duty], Spieler[playerid][Adminlvl], Spieler[playerid][Leaderverwaltung], Spieler[playerid][Bargeld], Spieler[playerid][Bankgeld], Spieler[playerid][Konto],
    Spieler[playerid][Level], Spieler[playerid][Fraktion], Spieler[playerid][Leader], Spieler[playerid][Rang], Spieler[playerid][Spawnchange], Spieler[playerid][Leben], Spieler[playerid][Armour], Spieler[playerid][LastX], Spieler[playerid][LastY],
    Spieler[playerid][LastZ], Spieler[playerid][LastA], Spieler[playerid][LastInt], Spieler[playerid][LastVirt], Spieler[playerid][LastHour], Spieler[playerid][LastMinute], Spieler[playerid][LastSecond], Spieler[playerid][LastYear], Spieler[playerid][LastMonth],
    Spieler[playerid][LastDay], Spieler[playerid][ban], Spieler[playerid][tban], Spieler[playerid][bangrund], Spieler[playerid][tbantime], Spieler[playerid][tbandate], Spieler[playerid][warns], Spieler[playerid][Tutorial], Spieler[playerid][Perso],
    Spieler[playerid][Geschlecht], Spieler[playerid][GebDate], Spieler[playerid][Mute], Spieler[playerid][OOCMute], Spieler[playerid][Wanteds], Spieler[playerid][Wantedpoints], Spieler[playerid][Susptime],Spieler[playerid][Verbrechen], Spieler[playerid][Klaeger],
    Spieler[playerid][Drogen], Spieler[playerid][Mats], Spieler[playerid][Handy], Spieler[playerid][Handynummer]);
    }
    mysql_free_result();


    Dies ist der fehler:

    Zitat

    [debug] Run time error 4: "Array index out of bounds"
    [13:51:03] [debug] Accessing element at index 49 past array upper bound 29
    [13:51:03] [debug] AMX backtrace:
    [13:51:03] [debug] #0 001015bc in ?? () from Server.amx
    [13:51:03] [debug] #1 00000035 in public OnDialogResponse () from Server.amx


    Und um die Variablen richtig zu kontrollieren, hier meine enum:
    enum AccountInfo //Allgemeine Account Info
    {
    Passwort[35],
    RegDate[15],
    Zivilskin,
    Fraktionsskin,
    Duty,
    Adminlvl,
    bool:Leaderverwaltung,
    Bargeld,
    Bankgeld,
    Konto,
    Level,
    Fraktion,
    bool:Leader,
    Rang,
    Spawnchange,
    Float:Leben,
    Float:Armour,
    Float:LastX,
    Float:LastY,
    Float:LastZ,
    Float:LastA,
    LastInt,
    LastVirt,
    LastHour,
    LastMinute,
    LastSecond,
    LastDay,
    LastMonth,
    LastYear,
    bool:ban,
    bool:tban,
    bangrund[100],
    tbantime[15],
    tbandate[15],
    warns,
    Tutorial,
    bool:Perso,
    Geschlecht[20],
    GebDate[15],
    Mute,
    OOCMute,
    Wanteds,
    Wantedpoints,
    Verbrechen[75],
    Klaeger[MAX_PLAYER_NAME],
    Susptime,
    Kanister,
    Mats,
    Drogen,
    Handy,
    Handynummer[15],
    pWaffe[13],
    pAmmo[13],
    }
    new Spieler[MAX_PLAYERS][AccountInfo];


    Wäre gut wenn jemand den Fehler weiter eingrenzen könnte.



    Liebe Grüße