Fahrzeuge parken

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
  • Guten Tag.


    Mir ist jetzt mein Befehl um Fahrzeuge zu parken



    Enum:
    enum autoEnum{
    id_x,
    model,
    besitzer[MAX_PLAYER_NAME],
    Float:c_x,
    Float:c_y,
    Float:c_z,
    Float:c_r,
    db_id
    }


    new aInfo[50][autoEnum];



    Befehl um die Fahrzeuge zu parken:


    ocmd:autoparken(playerid, params[])
    {
    new vID = GetPlayerVehicleID(playerid);
    if(!IsPlayerInAnyVehicle(playerid))return SendClientMessage(playerid, hellgrün, "Du bist in kein Auto!");
    for (new i = 0; i < sizeof(aInfo); i++)
    {
    if(vID == aInfo[i] [autoEnum])
    {
    if(!strcmp(aInfo[i][besitzer], SpielerName(playerid)))
    {
    new query[128];
    GetVehiclePos(vID, aInfo[i][c_x],aInfo[i][c_y],aInfo[i][c_z]);
    GetVehicleZAngle(vID,aInfo[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' ",aInfo[i] [c_x],aInfo[i] [c_y],aInfo[i] [c_z],aInfo[i] [c_r],aInfo[i] [db_id]);
    mysql_function_query(dbhandle,query,false," "," ");
    SendClientMessage(playerid, hellgrün, "Du hast dein Auto geparkt.");
    return 1;
    }
    break;
    }
    }
    return SendClientMessage(playerid, hellgrün, "Du sitzt nicht in deinem Auto!");
    }




    Fehler:


    samplernen.p(895) : error 032: array index out of bounds (variable "aInfo")
    samplernen.p(943) : error 032: array index out of bounds (variable "aInfo")
    samplernen.p(951) : error 032: array index out of bounds (variable "aInfo")



    Es hängt aber auch noch mit:


    createPlayerCar(playerid,modelid,Float:x,Float:y,Float:z,Float:r)
    {
    for(new i=0; i<sizeof(aInfo); i++)
    {
    if(aInfo[i][id_x]!=0)continue;
    aInfo[i][besitzer]=sInfo[playerid][db_id];
    aInfo[i][c_x] =x;
    aInfo[i][c_y] =y;
    aInfo[i][c_z] =z;
    aInfo[i][c_r] =r;
    aInfo[i][model] =modelid;
    aInfo[i][id_x] = CreateVehicle(modelid,x,y,z,r,-1,-1,-1);
    new string[128];
    format(string,sizeof(string),"Das Auto aInfo[%i]wurde erstellt",i);
    SendClientMessageToAll(duneklhelblau,string);
    saveCarToDB(playerid,i);
    return 1;
    }
    return 1;
    }


    in verbindung also wird es glaub ich schwer die sache zu beheben



    public carSavedToDB(carid)
    {
    aInfo[carid][db_id]=cache_insert_id(dbhandle);
    return 1;
    }


    saveCarToDB(playerid,carid)
    {
    new query[128];
    format(query,sizeof(query),"INSERT INTO autos(besitzer,model,x,y,z,r) VALUES('%i','%i','%f','%f','%f','%f')",sInfo[playerid][db_id],aInfo[carid][model],aInfo[carid][c_x],aInfo[carid][c_y],aInfo[carid][c_z],aInfo[carid][c_r]);
    mysql_function_query(dbhandle,query,true,"carSavedToDB","i",carid);
    return 1;
    }

  • jetzt taucht bei:


    ocmd:autoentfernen(playerid, params[])
    {
    new vID = GetPlayerVehicleID(playerid);
    if(!IsPlayerInAnyVehicle(playerid))return SendClientMessage(playerid, hellgrün, "Du bist in kein Auto!");
    for (new i = 0; i < sizeof(aInfo); i++)
    {
    if(vID == aInfo[i] [id_x])
    {
    if(!strcmp(aInfo[i][besitzer], SpielerName(playerid)))
    {
    new query[128];
    format(query, sizeof(query), "DELETE FROM autos WHERE id='%i'",aInfo[i][db_id]);
    mysql_function_query(dbhandle,query,false," "," ");
    DestroyVehicle(aInfo[i][besitzer]);
    aInfo[i][autoEnum] = 0;
    SendClientMessage(playerid, hellgrün, "Du hast dein Auto entfernt.");
    return 1;
    }
    break;
    }
    }
    return SendClientMessage(playerid, hellgrün, "Du sitzt nicht in deinem Auto!");
    }


    Fehler:
    samplernen.p(992) : error 032: array index out of bounds (variable "aInfo")

    auf

  • aInfo[i][autoEnum] = 0;
    zu:
    aInfo[i][id_x] = 0;


    Es wäre hilfreich, wenn du die Zeilen mit den Errors in Zukunft markierst, oder die Zeilenangabe des PWN-Codes nutzt, dann muss man nicht immer ewig suchen.

    Code
    [pwn=STARTZEILE][/pwn]
  • Autoparken:
    ocmd:autoparken(playerid, params[])
    {
    new vID = GetPlayerVehicleID(playerid);
    if(!IsPlayerInAnyVehicle(playerid))return SendClientMessage(playerid, hellgrün, "Du bist in kein Auto!");
    for (new i = 0; i < sizeof(aInfo); i++)
    {
    if(vID == aInfo[i] [id_x])
    {
    if(!strcmp(aInfo[i][besitzer], SpielerName(playerid)))
    {
    new query[128];
    GetVehiclePos(vID, aInfo[i][c_x],aInfo[i][c_y],aInfo[i][c_z]);
    GetVehicleZAngle(vID,aInfo[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' ",aInfo[i] [c_x],aInfo[i] [c_y],aInfo[i] [c_z],aInfo[i] [c_r],aInfo[i] [db_id]);
    mysql_function_query(dbhandle,query,false," "," ");
    SendClientMessage(playerid, hellgrün, "Du hast dein Auto geparkt.");
    return 1;
    }
    break;
    }
    }
    return SendClientMessage(playerid, hellgrün, "Du sitzt nicht in deinem Auto!");
    }



    ich glaube du meinst das hier:


    public OnPlayerEnterVehicle(playerid, vehicleid, ispassenger)
    {
    return 1;
    }

  • Was steht so im Log?
    ocmd:autoparken(playerid, params[])
    {
    new vID = GetPlayerVehicleID(playerid);
    if(!IsPlayerInAnyVehicle(playerid))return SendClientMessage(playerid, hellgrün, "Du bist in kein Auto!");
    for (new i = 0; i < sizeof(aInfo); i++)
    {
    printf("i: %d | vID: %d | idx: %d", i, vID, aInfo[i][id_x]);
    if(vID == aInfo[i] [id_x])
    {
    printf("besitzer: %s | SpielerName: %s", aInfo[i][besitzer], SpielerName(playerid));
    if(!strcmp(aInfo[i][besitzer], SpielerName(playerid)))
    {
    printf("Passt.");
    new query[256];
    GetVehiclePos(vID, aInfo[i][c_x],aInfo[i][c_y],aInfo[i][c_z]);
    GetVehicleZAngle(vID,aInfo[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'",aInfo[i] [c_x],aInfo[i] [c_y],aInfo[i] [c_z],aInfo[i] [c_r],aInfo[i] [db_id]);
    mysql_function_query(dbhandle,query,false," "," ");
    SendClientMessage(playerid, hellgrün, "Du hast dein Auto geparkt.");
    return 1;
    }
    break;
    }
    }
    return SendClientMessage(playerid, hellgrün, "Du sitzt nicht in deinem Auto!");
    }

    3HZXdYd.png

    Einmal editiert, zuletzt von Jeffry ()

  • Server.log:

    ----------
    Loaded log file: "server_log.txt".
    ----------


    SA-MP Dedicated Server
    ----------------------
    v0.3.7, (C)2005-2015 SA-MP Team


    [20:49:01] filterscripts = "" (string)
    [20:49:01]
    [20:49:01] Server Plugins
    [20:49:01] --------------
    [20:49:01] Loading plugin: mysql
    [20:49:01] >> plugin.mysql: R39 successfully loaded.
    [20:49:01] Loaded.
    [20:49:01] Loading plugin: sscanf
    [20:49:01]


    [20:49:01] ===============================


    [20:49:01] sscanf plugin loaded.


    [20:49:01] (c) 2009 Alex "Y_Less" Cole


    [20:49:01] 0.3d-R2 500 Players "dnee"


    [20:49:01] ===============================


    [20:49:01] Loaded.
    [20:49:01] Loaded 2 plugins.


    [20:49:01]
    [20:49:01] Ban list
    [20:49:01] --------
    [20:49:01] Loaded: samp.ban
    [20:49:01]
    [20:49:01]
    [20:49:01] Filterscripts
    [20:49:01] ---------------
    [20:49:01] Loaded 0 filterscripts.


    [20:49:01] Mysql wurde verbunden!
    [20:49:01]
    ----------------------------------
    [20:49:01] Exilium Reallife Version 1.0
    [20:49:01] ----------------------------------


    [20:49:01] Number of vehicle models: 6
    [20:49:33] [connection] 127.0.0.1:59366 requests connection cookie.
    [20:49:34] Incoming connection: 127.0.0.1:59366 id: 0
    [20:49:34] [join] Blackshadowscript has joined the server (0:127.0.0.1)
    [20:50:14] i: 0 | vID: 7 | idx: 7
    [20:50:14] besitzer: ÿlackshadowscript | SpielerName:

  • enum autoEnum{
    id_x,
    model,
    besitzer[MAX_PLAYER_NAME],
    Float:c_x,
    Float:c_y,
    Float:c_z,
    Float:c_r,
    db_id
    }


    new aInfo[50][autoEnum];



    ocmd:autoparken(playerid, params[])
    {
    new vID = GetPlayerVehicleID(playerid);
    if(!IsPlayerInAnyVehicle(playerid))return SendClientMessage(playerid, hellgrün, "Du bist in kein Auto!");
    for (new i = 0; i < sizeof(aInfo); i++)
    {
    printf("i: %d | vID: %d | idx: %d", i, vID, aInfo[i][id_x]);
    if(vID == aInfo[i] [id_x])
    {
    printf("besitzer: %s | SpielerName: %s", strcmp(aInfo[i][besitzer], SpielerName(playerid)));
    if(!strcmp(aInfo[i][besitzer], SpielerName(playerid)))
    {
    printf("Passt.");
    new query[256];
    GetVehiclePos(vID, aInfo[i][c_x],aInfo[i][c_y],aInfo[i][c_z]);
    GetVehicleZAngle(vID,aInfo[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'",aInfo[i] [c_x],aInfo[i] [c_y],aInfo[i] [c_z],aInfo[i] [c_r],aInfo[i] [db_id]);
    mysql_function_query(dbhandle,query,false," "," ");
    SendClientMessage(playerid, hellgrün, "Du hast dein Auto geparkt.");
    return 1;
    }
    break;
    }
    }
    return SendClientMessage(playerid, hellgrün, "Du sitzt nicht in deinem Auto!");
    }


    stock SpielerName(playerid)
    {
    new name[MAX_PLAYER_NAME];
    GetPlayerName(playerid,name,MAX_PLAYER_NAME);
    return name;
    }

  • ocmd:autoparken(playerid, params[])
    {
    new vID = GetPlayerVehicleID(playerid);
    if(!IsPlayerInAnyVehicle(playerid))return SendClientMessage(playerid, hellgrün, "Du bist in kein Auto!");
    for (new i = 0; i < sizeof(aInfo); i++)
    {
    printf("i: %d | vID: %d | idx: %d", i, vID, aInfo[i][id_x]);
    if(vID == aInfo[i] [id_x])
    {
    printf("besitzer: %s | SpielerName: %s", aInfo[i][besitzer], SpielerName(playerid));
    if(!strcmp(aInfo[i][besitzer], SpielerName(playerid)))
    {
    printf("Passt.");
    new query[256];
    GetVehiclePos(vID, aInfo[i][c_x],aInfo[i][c_y],aInfo[i][c_z]);
    GetVehicleZAngle(vID,aInfo[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'",aInfo[i] [c_x],aInfo[i] [c_y],aInfo[i] [c_z],aInfo[i] [c_r],aInfo[i] [db_id]);
    mysql_function_query(dbhandle,query,false," "," ");
    SendClientMessage(playerid, hellgrün, "Du hast dein Auto geparkt.");
    return 1;
    }
    break;
    }
    }
    return SendClientMessage(playerid, hellgrün, "Du sitzt nicht in deinem Auto!");
    }
    Was steht so im Log?


    Bei dem was du gepostet hast fehlt, wie du den Besitzer speicherst, also in die Variable schreibst.

  • server.log:


    Zeile 47 oder 48 steht da vID7 idx 7

  • aus der Server.log datei:



    Befehl an sich:
    ocmd:autoparken(playerid, params[])
    {
    new vID = GetPlayerVehicleID(playerid);
    if(!IsPlayerInAnyVehicle(playerid))return SendClientMessage(playerid, hellgrün, "Du bist in kein Auto!");
    for (new i = 0; i < sizeof(aInfo); i++)
    {
    printf("i: %d | vID: %d | idx: %d", i, vID, aInfo[i][id_x]);
    if(vID == aInfo[i] [id_x])
    {
    printf("besitzer: %s | SpielerName: %s", aInfo[i][besitzer], SpielerName(playerid));
    if(!strcmp(aInfo[i][besitzer], SpielerName(playerid)))
    {
    printf("Passt.");
    new query[256];
    GetVehiclePos(vID, aInfo[i][c_x],aInfo[i][c_y],aInfo[i][c_z]);
    GetVehicleZAngle(vID,aInfo[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'",aInfo[i] [c_x],aInfo[i] [c_y],aInfo[i] [c_z],aInfo[i] [c_r],aInfo[i] [db_id]);
    mysql_function_query(dbhandle,query,false," "," ");
    SendClientMessage(playerid, hellgrün, "Du hast dein Auto geparkt.");
    return 1;
    }
    break;
    }
    }
    return SendClientMessage(playerid, hellgrün, "Du sitzt nicht in deinem Auto!");
    }




    Zeile 52 im text wo:
    [21:57:20] i: 0 | vID: 7 | idx: 7 steht ist der print vom autoparken befehl

  • Ja, das kann ich lesen. Darum geht es aber gar nicht, sondern um die Zeile drunter.
    Ich frage nun zum letzten mal: Wie weist du der Variable Besitzer von aInfo den Wert zu? Poste dazu gegebenfalls das Laden der Fahrzeuge.

  • Ich hoffe damit kannst du was anfangen Jeffry :


    getFreeCarID()
    {
    for(new i=0; i<sizeof(aInfo); i++)
    {
    if(aInfo[i][id_x] ==0)return i;


    }
    return 0;
    }
    public OnPlayerCarsLoad(playerid)
    {
    new num_fields,num_rows;
    cache_get_data(num_rows,num_fields,dbhandle);
    if(!num_rows)return 1;
    for(new i=0; i<num_rows; i++)
    {
    new id=getFreeCarID();
    aInfo[id][model]=cache_get_field_content_int(i,"model",dbhandle);
    aInfo[id][besitzer]=cache_get_field_content_int(i,"besitzer",dbhandle);
    aInfo[id][c_x]=cache_get_field_content_float(i,"x",dbhandle);
    aInfo[id][c_y]=cache_get_field_content_float(i,"y",dbhandle);
    aInfo[id][c_z]=cache_get_field_content_float(i,"z",dbhandle);
    aInfo[id][c_r]=cache_get_field_content_float(i,"r",dbhandle);
    aInfo[id][db_id]=cache_get_field_content_int(i,"id",dbhandle);
    aInfo[id][id_x]=CreateVehicle(aInfo[id][model],aInfo[id][c_x],aInfo[id][c_y],aInfo[id][c_z],aInfo[id][c_r],-1,-1,-1);


    }
    return 1;
    }
    loadPlayerCars(playerid)
    {
    new query[128];
    format(query,sizeof(query),"SELECT * FROM autos WHERE besitzer= '%i' ",sInfo[playerid][db_id]);
    mysql_function_query(dbhandle,query,true,"OnPlayerCarsLoad","I",playerid);
    return 1;
    }