Key wird nicht abgefragt?

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
  • Hi,


    ich habe mir folgendes Script zusammengebastelt:
    public erzabgeben(playerid, vehicleid)
    {
    new str[128];
    new rnd = random(Load[vehicleid]);
    format(str,sizeof str,"Du hast %skg Gestein abgeliefert!\nIn diesem Gestein befanden sich {009BFF}%skg Eisenerz {FFFFFF}.\n\nDafür erhälst du %s€!",inspoints(Load[vehicleid]),inspoints(rnd),inspoints(rnd+1000));
    pInfo[playerid][pMoney] += rnd+1000;
    JobInfo[EisenKG] += rnd;
    PlayerTextDrawHide(playerid, JobInfo0[playerid]);
    TextDrawHideForPlayer(playerid, JobInfo1);
    PlayerTextDrawHide(playerid, JobInfo2[playerid]);
    ErzjobCP[playerid] = 0;
    JobInfo[Erzbergstadium] += 1;
    SaveJobInfo();
    ShowPlayerDialog(playerid,DLG_ERZ,DIALOG_STYLE_MSGBOX,"Job :: Erzarbeiter",str,"Schliessen","");
    return 1;
    }


    public OnPlayerKeyStateChange(playerid, newkeys, oldkeys)
    {
    if(IsPlayerInAnyVehicle(playerid) && GetPlayerVehicleSeat(playerid) == 0) {
    if(Erzabgeben[playerid] == 1) {
    if(GetPlayerVehicleID(playerid) == 406) {
    if(HOLDING(KEY_ANALOG_DOWN)) {
    if(IsCoordBehindVehicle(GetPlayerVehicleID(playerid),680.9702,824.3072,-26.7051)) {
    erztimer[playerid]=SetTimerEx("erzabgeben",7000,0,"dd",playerid,GetPlayerVehicleID(playerid));
    kadpressed[playerid] = 1;
    } else {
    SendClientMessage(playerid,COLOR_LIGHTRED,"Dein Fahrzeug befindet sich nicht mit der Ladefläche zum Gesteinsfilter!");
    }
    }
    if(RELEASED(KEY_ANALOG_DOWN)) {
    if(kadpressed[playerid] == 1) { KillTimer(erztimer[playerid]); }
    }
    }
    }
    }
    return 1;
    }
    Doch leider wird der "erzabgeben"-Callback nie aufgerufen 8|
    Woran liegt es?


    lg

  • Sicher das du if(GetPlayerVehicleID(playerid) == 406)
    meinst und nicht GetVehicleModel(GetPlayerVehicleID(playerid)) == 406?


    Ja, das wars, ist schon spät am Abend :D


    Nun habe ich hier mit noch ein Problem:
    stock IsCoordBehindVehicle(veh,Float:x,Float:y,Float:z)
    {
    new Float:size[3]; GetVehicleModelInfo(GetVehicleModel(veh), VEHICLE_MODEL_INFO_SIZE, size[0],size[1],size[2]);
    new Float:vangle; GetVehicleZAngle(veh,vangle);
    x = floatadd(x,(-size[0]* floatsin(-vangle,degrees)));
    y = floatadd(y,(-size[1]* floatcos(-vangle,degrees)));
    if(IsVehicleInRangeOfPoint(veh,7,x,y,z)) return 1;
    return 0;
    }
    Das ist nicht, ob das Vehikel mit dem hinteren Teil zur Koordinate steht, sondern mit der Front, wie muss ich das umschreiben? Jeffry:

  • stock IsCoordBehindVehicle(veh,Float:x,Float:y,Float:z)
    {
    new Float:size[3]; GetVehicleModelInfo(GetVehicleModel(veh), VEHICLE_MODEL_INFO_SIZE, size[0],size[1],size[2]);
    new Float:vangle; GetVehicleZAngle(veh,vangle);
    x = floatadd(x,(size[0]* floatsin(-vangle,degrees)));
    y = floatadd(y,(size[1]* floatcos(-vangle,degrees)));
    if(IsVehicleInRangeOfPoint(veh,7,x,y,z)) return 1;
    return 0;
    }
    Ohne die Minuse vor size in der Berechnung. Das dreht das ganze praktisch um.