/lock befehl

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
  • Hey liebes Forum,


    Ich bastle nun an einem /lock Befehl um die Privat autos abzuschließen.


    Befehl:

    Spoiler anzeigen

    ocmd:lock(playerid,params[])
    {

    new vID, tmp_engine, tmp_lights, tmp_alarm, tmp_doors, tmp_bonnet, tmp_boot, tmp_objective;

    if(IsPlayerInAnyVehicle(playerid))// Falls der Spieler in einem Fahrzeug sitzt
    {
    vID = GetPlayerVehicleID(playerid);
    }
    else if(GetClosestVehicle(playerid, 20) != 0)// Falls ein Fahrzeug in der Nähe des Spielers ist
    {
    vID = GetClosestVehicle(playerid, 20);
    }
    else
    {
    vID = -1;
    }
    printf("vID:%i",vID);
    printf("car_besitzer:%i", cInfo[vID][besitzer]);
    printf("besitzer_dbid:%i", sInfo[playerid][db_id]);
    if(cInfo[vID][besitzer] == sInfo[playerid][db_id])
    {
    GetVehicleParamsEx(vID, tmp_engine, tmp_lights, tmp_alarm, tmp_doors, tmp_bonnet, tmp_boot, tmp_objective);
    if(tmp_doors==1){
    tmp_doors = 0;
    GameTextForPlayer(playerid, "~w~Fahrzeug ~g~offen", 2000, 3);// Eine Meldung wird eingeblendet
    PlayerPlaySound(playerid, 1145, 0.0, 0.0, 0.0);
    }else{
    tmp_doors = 1;
    GameTextForPlayer(playerid, "~w~Fahrzeug ~r~verschlossen", 2000, 3);// Eine Meldung wird eingeblendet
    PlayerPlaySound(playerid, 1145, 0.0, 0.0, 0.0);
    }
    SetVehicleParamsEx(vID, tmp_engine, tmp_lights, tmp_alarm, tmp_doors, tmp_bonnet, tmp_boot, tmp_objective);
    }
    return 1;
    }


    So weit so gut...


    Nur es funktioniert nicht also habe ich mal die variablen printen lassen wobei das rauskommt:

    Spoiler anzeigen

    [16:24:33] vID:52 <- richtig
    [16:24:33] car_besitzer:1627389952 <- falsch
    [16:24:33] besitzer_dbid:1 <- richtig


    Eigentlich sollte es funktionieren EIGENTLICH


    Ich kann den Fehler einfach nicht finden.


    Wenn ihr mehr Infos braucht einfach fragen :D


    mfg. Around.

  • Kannst du mir mal verraten, wieso du den "Besitzer" nach Integer speichern lässt. ?
    Ist ziemlich schwachsinnig, wenn sich da jemand was kauft, wird 1-unendlich gesetzt ? Woher möchtest du dann wissen, wenn einer ein Problem mit seinem Auto hat, welches das ist ? Kannst ja dann nicht alle löschen ?



    MFG.

  • Ach Leute! Er fragt die Datenbank ID ab, und die ist nunmal ein Integer. Er muss nichts als String speichern.
    if(cInfo[vID][besitzer] == sInfo[playerid][db_id])



    Zeige doch mal den Teil des Codes bei dem du sInfo[playerid][db_id] einen Wert zuweist.

  • Das ist die Funktion in der das Auto erstellt wird:


    Spoiler anzeigen

    createPlayerCar(playerid,modelid,Float:x,Float:y,Float:z,Float:r)
    {
    for(new i=0; i<sizeof(cInfo); i++)
    {
    if(cInfo[i][id_x]!=0)continue;
    new name[24];GetPlayerName(playerid,name,24);
    format(cInfo[i][besitzer_name],24,"%s",name);
    cInfo[i][besitzer]=sInfo[playerid][db_id];
    cInfo[i][c_x]=x;
    cInfo[i][c_y]=y;
    cInfo[i][c_z]=z;
    cInfo[i][c_r]=r;
    cInfo[i][model]=modelid;
    cInfo[i][farbe1]=farbe1;
    cInfo[i][farbe2]=farbe2;
    cInfo[i][id_x] = CreateVehicle(modelid,x,y,z,r,farbe1,farbe2,-1);
    CarTank[cInfo[i][id_x]]=MaxTank[modelid-400];
    SetVehicleNumberPlate(cInfo[i][id_x],cInfo[i][besitzer_name]);
    SetVehicleToRespawn(cInfo[i][id_x]);
    saveCarToDB(playerid,i);
    return 1;
    }
    return 1;
    }


    Und wenn es mal erstellt wurde lädt er es hier raus:


    Spoiler anzeigen

    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(),zname[24];
    cInfo[id][model]=cache_get_field_content_int(i,"model",dbhandle);
    cInfo[id][besitzer]=cache_get_field_content_int(i,"besitzer",dbhandle);
    cache_get_field_content(i,"besitzer_name",zname,dbhandle);
    format(cInfo[id][besitzer_name],24,"%s",zname);
    cInfo[id][c_x]=cache_get_field_content_float(i,"x",dbhandle);
    cInfo[id][c_y]=cache_get_field_content_float(i,"y",dbhandle);
    cInfo[id][c_z]=cache_get_field_content_float(i,"z",dbhandle);
    cInfo[id][c_r]=cache_get_field_content_float(i,"r",dbhandle);
    cInfo[id][farbe1]=cache_get_field_content_int(i,"farbe1",dbhandle);
    cInfo[id][farbe2]=cache_get_field_content_int(i,"farbe2",dbhandle);
    cInfo[id][abgeschleppt]=!!cache_get_field_content_int(i,"abgeschleppt",dbhandle);
    cInfo[id][db_id]=cache_get_field_content_int(i,"id",dbhandle); //suchehier
    cInfo[id][id_x]=CreateVehicle(cInfo[id][model],cInfo[id][c_x],cInfo[id][c_y],cInfo[id][c_z],cInfo[id][c_r],cInfo[id][farbe1],cInfo[id][farbe2],-1);
    printf("%s",cInfo[id][besitzer_name]);
    SetVehicleNumberPlate(cInfo[id][id_x],cInfo[id][besitzer_name]);
    SetVehicleToRespawn(cInfo[id][id_x]);
    CarTank[cInfo[id][id_x]]=cache_get_field_content_int(i, "tank", dbhandle);
    }
    return 1;
    }

  • Was gibt er denn aus, wenn du unter:
    cInfo[id][besitzer]=cache_get_field_content_int(i,"besitzer",dbhandle);


    das hier einfügst:
    printf("Vehicle %d: Besitzer %d", id, cInfo[id][besitzer]);



    Prüfe auch mal, ob
    new id=getFreeCarID()
    und
    vID = GetClosestVehicle(playerid, 20);
    beim selben Auto die selben Werte haben, das müssen sie nämlich, sonst macht alles keinen Sinn.

  • dein printf wird nichteinmal geprintet warum auch immer ich nehme an da ist der Fehler.


    [18:24:27] vID:699 <- wenn ich nicht im auto sitze (also GetClosestVehicle)
    [18:24:27] car_besitzer:
    [18:24:27] besitzer_dbid:1


    [18:24:32] vID:52 <- wenn ich im auto sitze (also GetPlayerVehicleID)
    [18:24:32] car_besitzer:
    [18:24:32] besitzer_dbid:1


    GetClosestVehicle:

    Spoiler anzeigen

    stock GetClosestVehicle(playerid, Float:range)
    {
    new Float:p_X;
    new Float:p_Y;
    new Float:p_Z;

    Spoiler anzeigen
    new Float:Distance;
    new Float:PretendentDistance = range +1;
    new Pretendent;

    Spoiler anzeigen
    GetPlayerPos(playerid, p_X, p_Y, p_Z);

    Spoiler anzeigen
    for(new vehicleid=1; vehicleid < MAX_VEHICLES; vehicleid++)
    {
    Distance = GetVehicleDistanceFromPoint(vehicleid, p_X, p_Y, p_Z);

    Spoiler anzeigen
    if(Distance <= range && Distance <= PretendentDistance)
    {
    Pretendent = vehicleid;
    PretendentDistance = Distance;
    }
    }

    Spoiler anzeigen
    return Pretendent;
    }

  • stock GetClosestVehicle(playerid, Float:range)
    {
    new Float:p_X;
    new Float:p_Y;
    new Float:p_Z;


    new Float:Distance;
    new Float:PretendentDistance = range +1;
    new Pretendent;


    GetPlayerPos(playerid, p_X, p_Y, p_Z);


    for(new vehicleid=1; vehicleid < MAX_VEHICLES; vehicleid++)
    {
    Distance = GetVehicleDistanceFromPoint(vehicleid, p_X, p_Y, p_Z);
    printf("Vehicleid: %d -> %0.2f", vehicleid, Distance);
    if(Distance <= range && Distance <= PretendentDistance)
    {
    printf("%0.2f <= %0.2f => vehicleid = %d", Distance, PretendentDistance, vehicleid);
    Pretendent = vehicleid;
    PretendentDistance = Distance;
    }
    }


    return Pretendent;
    }


    Dann poste was passiert, wenn du nahe dem Auto bist (ID 52). Die 52 ist ja richtig, die muss auch bei der Funktion ausgegeben werden. Solange sie das nicht tut, brauchen wir gar nicht weiter zu machen.

  • do.de - Domain-Offensive - Domains für alle und zu super Preisen
  • Also es zählt von 1 bis 699 hoch wenn du es unbeding sehen willst hier:

    Spoiler anzeigen

    [13:36:58] Vehicleid: 1 -> 1649.39
    [13:36:58] Vehicleid: 2 -> 1086.94
    [13:36:58] Vehicleid: 3 -> 1085.17
    [13:36:58] Vehicleid: 4 -> 1086.35
    [13:36:58] Vehicleid: 5 -> 1084.67
    [13:36:58] Vehicleid: 6 -> 1085.80
    [13:36:58] Vehicleid: 7 -> 1084.68
    [13:36:58] Vehicleid: 8 -> 1083.99
    [13:36:58] Vehicleid: 9 -> 1084.10
    [13:36:58] Vehicleid: 10 -> 1083.18
    [13:36:58] Vehicleid: 11 -> 1082.56
    [13:36:58] Vehicleid: 12 -> 1065.81
    [13:36:58] Vehicleid: 13 -> 1067.42
    [13:36:58] Vehicleid: 14 -> 1066.46
    [13:36:58] Vehicleid: 15 -> 1068.29
    [13:36:58] Vehicleid: 16 -> 1068.76
    [13:36:58] Vehicleid: 17 -> 1070.28
    [13:36:58] Vehicleid: 18 -> 1067.97
    [13:36:58] Vehicleid: 19 -> 1069.69
    [13:36:58] Vehicleid: 20 -> 1067.62
    [13:36:58] Vehicleid: 21 -> 1068.92
    [13:36:58] Vehicleid: 22 -> 3603.71
    [13:36:58] Vehicleid: 23 -> 3602.22
    [13:36:58] Vehicleid: 24 -> 3581.96
    [13:36:58] Vehicleid: 25 -> 3578.06
    [13:36:58] Vehicleid: 26 -> 3597.87
    [13:36:58] Vehicleid: 27 -> 3582.68
    [13:36:58] Vehicleid: 28 -> 3605.04
    [13:36:58] Vehicleid: 29 -> 3603.18
    [13:36:58] Vehicleid: 30 -> 3596.40
    [13:36:58] Vehicleid: 31 -> 1106.21
    [13:36:58] Vehicleid: 32 -> 1108.49
    [13:36:58] Vehicleid: 33 -> 1110.41
    [13:36:58] Vehicleid: 34 -> 1093.82
    [13:36:58] Vehicleid: 35 -> 1095.91
    [13:36:58] Vehicleid: 36 -> 1098.13
    [13:36:58] Vehicleid: 37 -> 1100.42
    [13:36:58] Vehicleid: 38 -> 1102.78
    [13:36:58] Vehicleid: 39 -> 1105.00
    [13:36:58] Vehicleid: 40 -> 1107.29
    [13:36:58] Vehicleid: 41 -> 761.99
    [13:36:58] Vehicleid: 42 -> 759.64
    [13:36:58] Vehicleid: 43 -> 756.55
    [13:36:58] Vehicleid: 44 -> 753.91
    [13:36:58] Vehicleid: 45 -> 751.59
    [13:36:58] Vehicleid: 46 -> 749.05
    [13:36:58] Vehicleid: 47 -> 746.29
    [13:36:58] Vehicleid: 48 -> 743.45
    [13:36:58] Vehicleid: 49 -> 740.37
    [13:36:58] Vehicleid: 50 -> 825.09
    [13:36:58] Vehicleid: 51 -> 821.60
    [13:36:58] Vehicleid: 52 -> 2.84
    [13:36:58] 2.84 <= 21.00 => vehicleid = 52
    [13:36:58] Vehicleid: 53 -> 24.43
    [13:36:58] Vehicleid: 54 -> 0.00
    [13:36:58] 0.00 <= 2.84 => vehicleid = 54
    [13:36:58] Vehicleid: 55 -> 0.00
    [13:36:58] 0.00 <= 0.00 => vehicleid = 55
    [13:36:58] Vehicleid: 56 -> 0.00
    [13:36:58] 0.00 <= 0.00 => vehicleid = 56
    [13:36:58] Vehicleid: 57 -> 0.00
    [13:36:58] 0.00 <= 0.00 => vehicleid = 57

    Spoiler anzeigen
    [13:36:58] Vehicleid: 695 -> 0.00
    [13:36:58] 0.00 <= 0.00 => vehicleid = 695
    [13:36:58] Vehicleid: 696 -> 0.00
    [13:36:58] 0.00 <= 0.00 => vehicleid = 696
    [13:36:58] Vehicleid: 697 -> 0.00
    [13:36:58] 0.00 <= 0.00 => vehicleid = 697
    [13:36:58] Vehicleid: 698 -> 0.00
    [13:36:58] 0.00 <= 0.00 => vehicleid = 698
    [13:36:58] Vehicleid: 699 -> 0.00
    [13:36:58] 0.00 <= 0.00 => vehicleid = 699
    [13:36:58] Vehicleid: 1 -> 1649.39
    [13:36:58] Vehicleid: 2 -> 1086.94
    [13:36:58] Vehicleid: 3 -> 1085.17
    [13:36:58] Vehicleid: 4 -> 1086.35
    [13:36:58] Vehicleid: 5 -> 1084.67
    [13:36:58] Vehicleid: 6 -> 1085.80
    [13:36:58] Vehicleid: 7 -> 1084.68
    [13:36:58] Vehicleid: 8 -> 1083.99
    [13:36:58] Vehicleid: 9 -> 1084.10
    [13:36:58] Vehicleid: 10 -> 1083.18
    [13:36:58] Vehicleid: 11 -> 1082.56
    [13:36:58] Vehicleid: 12 -> 1065.81
    [13:36:58] Vehicleid: 13 -> 1067.42
    [13:36:58] Vehicleid: 14 -> 1066.46
    [13:36:58] Vehicleid: 15 -> 1068.29
    [13:36:58] Vehicleid: 16 -> 1068.76
    [13:36:58] Vehicleid: 17 -> 1070.28
    [13:36:58] Vehicleid: 18 -> 1067.97
    [13:36:58] Vehicleid: 19 -> 1069.69
    [13:36:58] Vehicleid: 20 -> 1067.62
    [13:36:58] Vehicleid: 21 -> 1068.92
    [13:36:58] Vehicleid: 22 -> 3603.71
    [13:36:58] Vehicleid: 23 -> 3602.22
    [13:36:58] Vehicleid: 24 -> 3581.96
    [13:36:58] Vehicleid: 25 -> 3578.06
    [13:36:58] Vehicleid: 26 -> 3597.87
    [13:36:58] Vehicleid: 27 -> 3582.68
    [13:36:58] Vehicleid: 28 -> 3605.04
    [13:36:58] Vehicleid: 29 -> 3603.18
    [13:36:58] Vehicleid: 30 -> 3596.40
    [13:36:58] Vehicleid: 31 -> 1106.21
    [13:36:58] Vehicleid: 32 -> 1108.49
    [13:36:58] Vehicleid: 33 -> 1110.41
    [13:36:58] Vehicleid: 34 -> 1093.82
    [13:36:58] Vehicleid: 35 -> 1095.91
    [13:36:58] Vehicleid: 36 -> 1098.13
    [13:36:58] Vehicleid: 37 -> 1100.42
    [13:36:58] Vehicleid: 38 -> 1102.78
    [13:36:58] Vehicleid: 39 -> 1105.00
    [13:36:58] Vehicleid: 40 -> 1107.29
    [13:36:58] Vehicleid: 41 -> 761.99
    [13:36:58] Vehicleid: 42 -> 759.64
    [13:36:58] Vehicleid: 43 -> 756.55
    [13:36:58] Vehicleid: 44 -> 753.91
    [13:36:58] Vehicleid: 45 -> 751.59
    [13:36:58] Vehicleid: 46 -> 749.05
    [13:36:58] Vehicleid: 47 -> 746.29
    [13:36:58] Vehicleid: 48 -> 743.45
    [13:36:58] Vehicleid: 49 -> 740.37
    [13:36:58] Vehicleid: 50 -> 825.09
    [13:36:58] Vehicleid: 51 -> 821.60
    [13:36:58] Vehicleid: 52 -> 2.84
    [13:36:58] 2.84 <= 21.00 => vehicleid = 52
    [13:36:58] Vehicleid: 53 -> 24.43
    [13:36:58] Vehicleid: 54 -> 0.00


    Mir sagt das jetzt nicht wirklich viel :D

  • Aber Hallo! So eine Ausgabe ist Gold wert.


    Ändere
    if(Distance <= range && Distance <= PretendentDistance)


    Zu
    if(Distance <= range && Distance <= PretendentDistance && Distance != 0.0)


    Dann dürfte beides mal die 52 zurückgeben werden.



    Schildere dann, falls bestehend, das nächste Problem.

  • [16:41:39] vID:52
    [16:41:39] car_besitzer:1627389952 <- Besteht immernoch
    [16:41:39] besitzer_dbid:1


    somit funktioniert der lock befehl immernochnicht :S


    Aber danke schonmal für die Hilfe mit dem getClosestVehicle


    //Edit:
    Privatfahrzeuge wenn sie geladen werden:
    [16:46:34] Vehicle 0: Besitzer 1
    [16:46:34] Vehicle 1: Besitzer 1


    sprich die id wird richtig ausgelesen

  • nein wie du siehst leider noch nicht aber ich denke uns wird bald einer helfen in der Zeit wo ich hier unterwegs bin ist mir aufgefallen das die User sehr hilfsbereit sind auch wenn man (so wie ich ab und zu) sich zu blöd anstellt etwas zu verstehen :)

  • stock GetCarID(vID)
    {
    printf("vID-GetCarID:%i",vID);
    for(new i=0; i<MAX_PRIV_CARS; i++) if(cInfo[i][id_x] == vID) return i;
    return -1;
    }


    MAX_PRIV_CARS=> Das was du bei "new cInfo[HIER][...]" hast.


    Und dann beim /lock:
    printf("vID:%i",vID);
    printf("car_besitzer:%i", cInfo[vID][besitzer]);
    printf("besitzer_dbid:%i", sInfo[playerid][db_id]);


    zu:
    vID = GetCarID(vID);
    if(vID == -1) return SendClientMessage(playerid, 0xFF000FF", "ERROR: Auto ist kein mit MySQL erstelltes Auto.");
    printf("vID:%i",vID);
    printf("car_besitzer:%i", cInfo[vID][besitzer]);
    printf("besitzer_dbid:%i", sInfo[playerid][db_id]);


    Was wird geprintet?

  • Nein.


    Du sollst in diesem Code:
    stock GetCarID(vID)
    {
    printf("vID-GetCarID:%i",vID);
    for(new i=0; i<MAX_PRIV_CARS; i++) if(cInfo[i][id_x] == vID) return i;
    return -1;
    }
    MAX_PRIV_CARS ersetzen, und zwar mit dem was bei dir im Code dort steht, wo ich "HIER" geschrieben habe.
    Wenn du es immer noch nicht verstehst, poste bitte die Zeile
    new cInfo....

  • do.de - Domain-Offensive - Domains für alle und zu super Preisen