Beiträge von Jeffry

    Nein, aus
    if(IsPlayerInRangeOfPoint(playerid,radius,vcoord[0],vcoord[1],vcoord[2]))
    das hier:
    if(IsPlayerInRangeOfPoint(playerid,radius-0.1,vcoord[0],vcoord[1],vcoord[2]))


    Eventuell auch mehr als 0.1, ich weiß nicht, welche Werte da genau zurück gegeben werden, eventuell benötigt das kleine Anpassungen. Einfach mal ausprobieren, wann es passt.

    Jeffry, schon einmal dran gedacht skripten zu lehren? Damn...

    Mach ich doch hier seit Jahren schon :klugs:



    Wie lese ich die Zeile aus, wenn er z.B. 3 Autos hat und er das 2te verkaufen möchte?

    if(dialogid == DIALOG_SELLKEYS)
    {
    if(!response) return 1;
    new count = -1;
    for(loop=0;loop<sizeof(cInfo);loop++)
    {
    if(!cInfo[loop][id_x])continue;
    if(cInfo[loop][besitzer]!=pInfo[playerid][ID])continue;
    count++;
    if(count == listitem)
    {
    printf("Ausgewähltes Fahrzeug: %s", GetVehicleName(cInfo[loop][model]));
    return 1;
    }
    }
    return 1;
    }

    if(dialogid == DIALOG_CARKEY)
    {
    if(!response) return 1;
    new count = -1;
    for(new s = 0; s <= 4; s++)
    {
    for(new i = 0; i < sizeof(cInfo); i++)
    {
    if(cInfo[i][besitzer] == PlayerInfo[playerid][pMySQLID] && cInfo[i][slot] == s)
    {
    count++;
    if(count == listitem)
    {
    carKey[playerid] = cInfo[i][id_x];
    carKeyIdx[playerid] = i;
    SendClientMessage(playerid, 0xFFFF00FF, "Schlüssel ausgewählt.");
    return 1;
    }
    }
    }
    }
    return SendClientMessage(playerid, 0xFF0000FF, "Error: Kein Schlüssel im Slot.");
    }


    "carKey[playerid]" beinhaltet dann die vehicleid und "carKeyIdx[playerid]" den Index (i).


    Der Befehl:
    ocmd:carlock(playerid,params[])
    {
    new engine,lights,alarm,doors,bonnet,boot,objective;
    new vid = carKey[playerid];
    if(!IsANoMotorVehicle(vid))
    {
    if(locksvar[vid] == 0)
    {
    GetVehicleParamsEx(vid,engine,lights,alarm,doors,bonnet,boot,objective);
    SetVehicleParamsEx(vid,engine,lights,alarm,VEHICLE_PARAMS_ON,bonnet,boot,objective);
    GameTextForPlayer(playerid,"~r~Abgeschlossen",6000,5);
    locksvar[vid] = 1;
    }
    else
    {
    GetVehicleParamsEx(vid,engine,lights,alarm,doors,bonnet,boot,objective);
    SetVehicleParamsEx(vid,engine,lights,alarm,VEHICLE_PARAMS_OFF,bonnet,boot,objective);
    GameTextForPlayer(playerid,"~g~Aufgeschlossen",6000,5);
    locksvar[vid] = 0;
    }
    }
    return 1;
    }

    Wenn du die Schleife einmal ausführst, dann behält "loop" den Wert "sizeof(cInfo)", sprich es wird nie mehr kleiner als "sizeof(cInfo)" sein.
    Du musst die Variable entweder lokal im Schleifenkopf deklarieren, oder in im Schleifenkopf auf 0 setzen.

    Da seine Slots bei 0 anfangen, muss der Befehl so aussehen:
    ocmd:carkey(playerid,params[])
    {
    new string[512], bool:found, model;
    for(new s = 0; s <= 4; s++)
    {
    found = false;
    for(new i = 0; i < sizeof(cInfo); i++)
    {
    if(cInfo[i][besitzer] == PlayerInfo[playerid][pMySQLID] && cInfo[i][slot] == s)
    {
    found = true;
    model = cInfo[i][carmodel];
    if(model >= 400 && model <= 611) format(string,sizeof(string),"%s{FF0000}%d) %s\n",string, s, getVehicleName(model));
    else format(string,sizeof(string),"%s{00FF00}%d) -Schlüssel frei-\n",string, s);
    break;
    }
    }
    if(!found) format(string,sizeof(string),"%s{00FF00}%d) -Schlüssel frei-\n",string, s);
    }
    ShowPlayerDialog(playerid,DIALOG_CARKEY,DIALOG_STYLE_LIST,"Fahrzeuge",string,"Auswählen","Beenden");
    return 1;
    }


    Eventuell im format "s+1" machen, damit der User die Slots von 1 bis 5 angezeigt bekommt.

    Das dies ein Localhost Server ist und du nicht mit deiner IP auf dem Server bist, ist das Normal

    Nein, das stimmt nicht.

    Oh, das wusste ich aber auch noch nicht. Ich dachte bei localhost steht immer 127.0.0.1.

    Genau, das ist so.

    auch mal wieder was dazu gelernt

    Bitte schnell wieder vergessen!




    Der Grund warum in der IP 255.255.255.255 steht ist folgender:

    https://wiki.sa-mp.com/wiki/GetPlayerIp


    Du rufst dein SavePlayer unter OnPlayerDisconnect auf, daher stimmt die IP nicht mehr.


    Speichere die IP in eine Spielervariable in OnPlayerConnect und nutze diese dann.
    new pIP[MAX_PLAYERS][16];
    GetPlayerIp(playerid, pIP[playerid], 16);


    Überall dann einfach
    pIP[playerid]
    für das Auslesen der IP nutzen.

    Hat da jemand ne bessere Version?


    Die Funktion ist eigentlich korrekt so, da mit der Länge und der Breite des jeweiligen Fahrzeugs individuell gearbeitet wird.


    Du kannst höchstens mal versuchen in IsPlayerInRangeOfPoint dem radius minus 0.1 zu nehmen oder so, dann passt es vielleicht besser zur Seite hin.

    Was wird dir so im Server Log ausgegeben?
    ocmd:carkey(playerid,params[])
    {
    new string[512], bool:found, model;
    for(new s = 0; s <= 4; s++)
    {
    found = false;
    printf("Starte Slot %d", s);
    for(new i = 0; i < sizeof(cInfo); i++)
    {
    printf("i: %d -> Besitzer: %d == %d / Slot: %d", i, cInfo[i][besitzer], PlayerInfo[playerid][pMySQLID], cInfo[i][slot]);
    if(cInfo[i][besitzer] == PlayerInfo[playerid][pMySQLID] && cInfo[i][slot] == s)
    {
    found = true;
    model = cInfo[i][carmodel];
    printf("model: %d", model);
    if(model >= 400 && model <= 611) format(string,sizeof(string),"%s{FF0000}%d) %s\n",string, s, getVehicleName(model));
    else format(string,sizeof(string),"%s{00FF00}%d) -Schlüssel frei-\n",string, s);
    break;
    }
    }
    printf("found = false");
    if(!found) format(string,sizeof(string),"%s{00FF00}%d) -Schlüssel frei-\n",string, s);
    }
    ShowPlayerDialog(playerid,DIALOG_CARKEY,DIALOG_STYLE_LIST,"Fahrzeuge",string,"Auswählen","Beenden");
    return 1;
    }