Auto von außen Abschließen? Mein Ansatz!

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 Leute,


    ich möchte das man in meinem Script auch Autos von außen (sprich man muss nicht im Auo sitzen) abschließen kann.


    Dafür habe ich diesen Ansatz:


    ocmd:olock(playerid,params[])
    {
    new Float:cX,Float:cY,Float:cZ,fahrzeug;
    new vID = GetPlayerVehicleID(playerid);
    fahrzeug = GetNearestVehicle(playerid, 10);
    GetVehiclePos(fahrzeug,cX,cY,cZ);
    if(IsPlayerInRangeOfPoint(playerid,10.0,cX,cY,cZ))
    {
    if(FahrzeugInfo[fahrzeug][fz_ID] == vID)
    {
    switch(FahrzeugInfo[fahrzeug][fz_Typ])
    {
    case 0:
    {
    if(pInfo[playerid][pFraktion] == FahrzeugInfo[fahrzeug][fz_Besitzer])
    {
    switch(FahrzeugInfo[fahrzeug][fz_Lock])
    {
    case 0:
    {
    FahrzeugInfo[fahrzeug][fz_Lock] = 1;
    new engine, lights, alarm, doors, bonnet, boot, objective;
    GetVehicleParamsEx(vID, engine, lights, alarm, doors, bonnet, boot, objective);
    SetVehicleParamsEx(vID, engine, lights, alarm, 1, bonnet, boot, objective);
    TextDrawSetString(TachoTueren[playerid], "~r~Abgeschlossen");
    return 1;
    }
    case 1:
    {
    FahrzeugInfo[fahrzeug][fz_Lock] = 0;
    new engine, lights, alarm, doors, bonnet, boot, objective;
    GetVehicleParamsEx(vID, engine, lights, alarm, doors, bonnet, boot, objective);
    SetVehicleParamsEx(vID, engine, lights, alarm, 0, bonnet, boot, objective);
    TextDrawSetString(TachoTueren[playerid], "~g~Aufgeschlossen");
    return 1;
    }
    }
    }
    else
    {
    SCM(playerid,ROT,"Du hast keine Schlüssel!");
    return 1;
    }
    }
    case 1:
    {
    if(playerid == FahrzeugInfo[fahrzeug][fz_Besitzer])
    {
    switch(FahrzeugInfo[fahrzeug][fz_Lock])
    {
    case 0:
    {
    FahrzeugInfo[fahrzeug][fz_Lock] = 1;
    new engine, lights, alarm, doors, bonnet, boot, objective;
    GetVehicleParamsEx(vID, engine, lights, alarm, doors, bonnet, boot, objective);
    SetVehicleParamsEx(vID, engine, lights, alarm, 1, bonnet, boot, objective);
    TextDrawSetString(TachoTueren[playerid], "~r~Abgeschlossen");
    return 1;
    }
    case 1:
    {
    FahrzeugInfo[fahrzeug][fz_Lock] = 0;
    new engine, lights, alarm, doors, bonnet, boot, objective;
    GetVehicleParamsEx(vID, engine, lights, alarm, doors, bonnet, boot, objective);
    SetVehicleParamsEx(vID, engine, lights, alarm, 0, bonnet, boot, objective);
    TextDrawSetString(TachoTueren[playerid], "~g~Aufgeschlossen");
    return 1;
    }
    }
    }
    else
    {
    SCM(playerid,ROT,"Du hast keine Schlüssel!");
    return 1;
    }
    }
    default:
    {
    switch(FahrzeugInfo[fahrzeug][fz_Lock])
    {
    case 0:
    {
    FahrzeugInfo[fahrzeug][fz_Lock] = 1;
    new engine, lights, alarm, doors, bonnet, boot, objective;
    GetVehicleParamsEx(vID, engine, lights, alarm, doors, bonnet, boot, objective);
    SetVehicleParamsEx(vID, engine, lights, alarm, 1, bonnet, boot, objective);
    TextDrawSetString(TachoTueren[playerid], "~r~Abgeschlossen");
    return 1;
    }
    case 1:
    {
    FahrzeugInfo[fahrzeug][fz_Lock] = 0;
    new engine, lights, alarm, doors, bonnet, boot, objective;
    GetVehicleParamsEx(vID, engine, lights, alarm, doors, bonnet, boot, objective);
    SetVehicleParamsEx(vID, engine, lights, alarm, 0, bonnet, boot, objective);
    TextDrawSetString(TachoTueren[playerid], "~g~Aufgeschlossen");
    return 1;
    }
    }
    }
    }
    }
    }
    SCM(playerid,ROT,"Es ist kein Fahrzeug in deiner Nähe, was dir gehört!");
    return 1;
    }#



    Der Stock:


    stock GetNearestVehicle(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);
    if(Distance <= range && Distance <= PretendentDistance)
    {
    Pretendent = vehicleid;
    PretendentDistance = Distance;
    }
    }
    return Pretendent;
    }



    Ich denke, dass irgendwas mit dem Srock nicht stimmt bzw. meine ganze Konstruktion irgendwie nicht aufgeht! :o


    Habt ihr eine Idee? :pinch:

    Meine Werke

  • Du kannst dir meist am besten selbst helfen indem du einfach debugst.
    Bau dir einfach einen Befehl der nur den stock ausführt und dir das ergebnis ingame ausliefert.
    Dann siehst du schon mal ob der Stock das tut was du von ihm erwartest.


    So gehst du dann auch mit deinem olock um, bei jeder Entscheidung (if) eine Debug nachricht rein und du siehst genau wo es dann scheitert.