Beiträge von Jeffry

    Ändere die "vehicleid" die mit CarInfo zu tun haben in OnVehicleSpawn und OnVehicleMod alle zu:
    idx


    und füge das ganz unten im Gamemode ein:
    stock GetIdx(vehicleid)
    {
    if(vehicleid != 0)
    {
    for(new i=0; i<sizeof(CarInfo); i++)
    {
    if(CarInfo[i][cID] == vehicleid) return i;
    }
    }
    return -1;
    }


    Und füge jeweils am Anfang von OnVehicleSpawn / OnVehicleMod das ein:
    new idx = GetIdx(vehicleid);
    if(idx == -1) return 1;

    Du kannst nicht einfach Codes irgendwo raus kopieren und einfügen, das klappt nicht.


    Fehler 1:
    OnPlayerSpawn existiert in dem Code bereits.


    Fehler 2:
    hauscfg wurde nie deklariert und bekommt auch keinen Wert zugewiesen.


    Fehler 3:
    playerD existiert ebenfalls nicht.

    Hast du, bevor du die pawn.cfg erstellt hast, eine mehrzeilige Meldung mit vielen Zahlen im Compiler gehabt?
    Falls ja, füge mal das hier unter den Includes ein:
    #pragma dynamic 100000
    Erhöhe die Zahl etwas, falls die Meldung bleibt. Mit der pawn.cfg wird die Meldung immer bleiben, also versuche es ohne die pawn.cfg, verschiebe die solange auf den Desktop (pawno.exe neu starten).

    Willkommen auf Breadfish!


    Zitat

    [14:42:29] [join] Alucard has joined the server (3:X.X.X.X)
    [14:42:29] [debug] Run time error 4: "Array index out of bounds"
    [14:42:29] [debug] Accessing element at negative index -1231819799
    [14:42:29] [debug] AMX backtrace:
    [14:42:29] [debug] #0 00006094 in public OnPlayerConnect () from GBCL.amx


    Das wird der Fehler sein.


    Erstelle in deinem /pawno/ Ordner mal eine Datei "pawn.cfg" und schreibe dort "-d3" rein (ohne die Anführungszeichen). Dann öffne die pawno.exe und kompiliere deinen Code erneut.
    Anschließend starte den Server mit der neuen amx Datei neu und poste dann erneut was im Log steht, wenn der Fehler passiert. Es steht dann die Fehlerzeile im Code dabei, die kannst du dann auch gleich mit posten.

    Beim Laden
    CreateVehicle(CarInfo[i][cModel], CarInfo[i][cX], CarInfo[i][cY], CarInfo[i][cZ], CarInfo[i][cR],0, 0, -1);
    zu:
    CarInfo[i][cID] = CreateVehicle(CarInfo[i][cModel], CarInfo[i][cX], CarInfo[i][cY], CarInfo[i][cZ], CarInfo[i][cR],0, 0, -1);


    und:
    new vehicleid = i;
    zu:
    new vehicleid = CarInfo[i][cID];


    Und bei SpeicherFahrzeug:
    CarInfo[carid][cModel] = GetVehicleModel(carid);
    zu:
    CarInfo[carid][cModel] = GetVehicleModel(carid);
    if(CarInfo[carid][cModel] == 0) return 1;

    Das funktioniert nach dem gleichen Prinzip wie dein Parken Befehl:
    ocmd:autoentfernen(playerid, params[])
    {
    new vID = GetPlayerVehicleID(playerid);
    if(!IsPlayerInAnyVehicle(playerid))return SendClientMessage(playerid, dunkelgrün, "Du bist in kein Auto!");
    for (new i = 0; i < sizeof(AutoInfo); i++)
    {
    if(vID == AutoInfo[i] [Fahrzeugid])
    {
    if(!strcmp(AutoInfo[i][Besitzer], SpielerName(playerid)))
    {
    new query[128];
    format(query, sizeof(query), "DELETE FROM Autos WHERE id='%i'",AutoInfo[i][db_id]);
    mysql_function_query(dbhandle,query,false," "," ");
    DestroyVehicle(AutoInfo[i][Fahrzeugid]);
    AutoInfo[i][Fahrzeugid] = 0;
    SendClientMessage(playerid, dunkelgrün, "Du hast dein Auto entfernt.");
    return 1;
    }
    break;
    }
    }
    return SendClientMessage(playerid, dunkelgrün, "Du sitzt nicht in deinem Auto!");
    }

    Das solltest du aber aus Performance-Gründen so schreiben:
    ocmd:autoparken(playerid, params[])
    {
    new vID = GetPlayerVehicleID(playerid);
    if(!IsPlayerInAnyVehicle(playerid))return SendClientMessage(playerid, dunkelgrün, "Du bist in kein Auto!");
    for (new i = 0; i < sizeof(AutoInfo); i++)
    {
    if(vID == AutoInfo[i] [Fahrzeugid])
    {
    if(!strcmp(AutoInfo[i][Besitzer], SpielerName(playerid)))
    {
    new query[128];
    GetVehiclePos(vID, AutoInfo[i][c_x],AutoInfo[i][c_y],AutoInfo[i][c_z]);
    GetVehicleZAngle(vID,AutoInfo[i][c_r]);
    format(query, sizeof(query), "UPDATE Autos SET c_x='%f',c_y='%f',c_z='%f',c_r='%f' WHERE id='%i' ",AutoInfo[i] [c_x],AutoInfo[i] [c_y],AutoInfo[i] [c_z],AutoInfo[i] [c_r],AutoInfo[i] [db_id]);
    mysql_function_query(dbhandle,query,false," "," ");
    SendClientMessage(playerid, dunkelgrün, "Du hast dein Auto geparkt.");
    return 1;
    }
    break;
    }
    }
    return SendClientMessage(playerid, dunkelgrün, "Du sitzt nicht in deinem Auto!");
    }
    Sonst machst du einige Abfragen mehrmals und das macht keinen Sinn.

    Dann nimmst du dir den Timestamp zu Hilfe, und speicherst dort die Zeit rein, zu der der Spieler aus dem Knast kommt. In einem Timer der jede Sekunde alle Spieler prüft fragst du dann ab, ob die Spielervariable kleiner als gettime ist.


    pJailed[player1] = gettime()+time*60;


    Wenn es während man offline ist nicht weiterlaufen soll, dann musst du pJailed[playerid] - gettime() beim Logout speichern, und diesen Wert beim Login wieder plus gettime() in pJailed schreiben.

    Dann poste bitte den Code mit dem du die GangZonen erstellst, du hast ja nur den Code gepostet der sie anzeigt, aber nicht den Teil mit GangZoneCreate. Möglicherweise passt da etwas nicht.

    http://forum.sa-mp.com/showthread.php?p=3444259#post3444259
    http://forum.sa-mp.com/showthread.php?p=3444790#post3444790
    http://forum.sa-mp.com/showthread.php?p=3444828#post3444828


    Sowie:
    http://forum.sa-mp.com/showpost.php?p=3445299&postcount=51
    Die Funktion zum Laufen wurde entfernt, aus den von Kalcor genannten Gründen. Das ist wahrscheinlich der Grund, warum es nicht mehr geht. Kannst dir ja mal die entsprechende RC Version herunterladen und es damit testen, ob es da noch geht.

    Da hab ich gerad den Überblick verloren, wo steht denn da 50000?


    mysql_format(Handle, Query, sizeof(Query), "INSERT INTO `Spieler` (`Spielername`, `Passwort`, `IP`, `Admin`, `VIP`,`Morde`,`Tode`,`Level`, `Geld`) VALUES ('%e', '%s', '%s', 0, 0, 0, 0, 0, 50000)", Name[playerid], SpielerInfo[playerid][Passwort], IP[playerid]);
    Ganz am Ende.


    PS: STRG+F :klugs:

    Also, ich habe es jetzt mal getestet. Interessanterweise kompiliert es sogar ohne Fehler, ihn stört diese Zeile 18 nicht, wegen dem strcmp, das ist ja eine Funktion.
    Mache sie aber trotzdem weg.
    (!strlen(IP[playerid]) || strcmp(IP[playerid], NewIP, true));



    Bei OnAccountRegister fehlt:
    IstRegistriert[playerid] = 1;


    Beim SpielerSpeichern kommt dann wie erwartet:


    Also da:
    new Query[100];
    zu:
    new Query[256];



    Außerdem lädt es die Statistiken nicht.
    Ändere bei OnPlayerConnect:
    mysql_format(Handle, Query, sizeof(Query), "SELECT `IP`, `Passwort`, `ID` FROM `Spieler` WHERE `Spielername` = '%e' LIMIT 1", Name[playerid]);
    zu:
    mysql_format(Handle, Query, sizeof(Query), "SELECT * FROM `Spieler` WHERE `Spielername` = '%e' LIMIT 1", Name[playerid]);


    Und der Timer bei OnAccountCheck muss da nicht sein. Wenn jemand innerhalb der 3 Sekunden den Server verlässt hat er alle Statistiken verloren.
    SetTimerEx("OnAccountLoad", 3000, false, "i", playerid);
    zu:
    OnAccountLoad(playerid);


    Bei OnDialogResponse solltest du zur Sicherheit noch abfragen, ob die Eingabe leer ist.
    if(!strcmp(H_Pass, SpielerInfo[playerid][Passwort])) {
    zu:
    if(strlen(H_Pass) && !strcmp(H_Pass, SpielerInfo[playerid][Passwort])) {


    Beim Login überschreibst du die IP, somit wird nicht die aktuelle IP gespeichert.
    cache_get_field_content(0, "IP", IP[playerid], Handle, 16);
    new NewIP[16];
    GetPlayerIp(playerid, NewIP, 16);
    IstRegistriert[playerid] = 1;
    if(strlen(IP[playerid]) != 0 && !strcmp(IP[playerid], NewIP, true)) {
    zu:
    new oldIP[16];
    cache_get_field_content(0, "IP", oldIP, Handle, 16);
    IstRegistriert[playerid] = 1;
    if(strlen(IP[playerid]) != 0 && !strcmp(IP[playerid], oldIP, true)) {


    Und noch ein kleiner Fehler, du schreibst beim Registrieren 50000 an Geld in die Tabelle, gibst dem Spieler aber nur 10000. Das müsstest du ändern.


    Das war es soweit, der Rest hat funktioniert.

    Die Koordinaten sind falsch herum. Das jeweilige Minimum muss das jeweilige Maximum sein und andersherum.
    -1756 ist größer als -1880 und 1328 ist größer als 1255.


    In deinem LoadGangfight fehlt nach:
    cache_get_field_content(i, "Name", Gangfight[gangfightID][gGangfightName], myCon, 64);
    das:
    count++;