ID 0 Bug beim Tanksystem

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


    ich habe das Tanksystem vom Godfatherscript etwas umgebaut und für 0.3c angepasst.
    Aber 2 if-Abfragen in der public CheckGas() werden nur mit ID 0 ausgeführt.
    Hier die public:


    public CheckGas()
    {
    for(new i=0;i<MAX_PLAYERS;i++)
    {
    for(new v=0;v<MAX_VEHICLES;v++)
    {
    if(Gas[v] >= 1)
    {
    new engine, lights, alarm, doors, bonnet, boot, objective;
    GetVehicleParamsEx(v, engine, lights, alarm, doors, bonnet, boot, objective);
    if(engine == 1)
    {
    if(Gas[v] <= 10) { if(IsPlayerInVehicle(i, v) && GetPlayerState(i) == PLAYER_STATE_DRIVER) { PlayerPlaySound(i, 1085, 0.0, 0.0, 0.0); } } // <--- Abfrage 1, die nur für ID 0 funktioniert
    if(IsAPlane(v) || IsABoat(v)) { Gas[v]++; }
    Gas[v]--;
    }
    }
    else
    {
    new engine,lights,alarm,doors,bonnet,boot,objective;
    GetVehicleParamsEx(v,engine,lights,alarm,doors,bonnet,boot,objective);
    SetVehicleParamsEx(v,VEHICLE_PARAMS_OFF,lights,alarm,doors,bonnet,boot,objective);
    if(IsPlayerInVehicle(i, v) && GetPlayerState(i) == PLAYER_STATE_DRIVER) // <--- Abfrage 2, die nur für ID 0 funktioniert
    {
    NoFuel[i] = 1;
    GameTextForPlayer(i,"~w~~n~~n~~n~~n~~n~~n~~n~~n~Tank leer",1500,3);
    }
    }
    }
    }
    return 1;
    }
    Ich habe schon 2 for-Schleifen drin, aber scheint trotzdem nur für ID 0 zu funktionieren.


    Ich hoffe auf schnelle Antwort.


    MfG

  • probi es so:
    public CheckGas(playerid)
    {
    new string[256];
    for(new i=0;i<MAX_PLAYERS;i++)
    {
    if(IsPlayerConnected(i))
    {
    if(GetPlayerState(i) == PLAYER_STATE_DRIVER)
    {
    new vehicle = GetPlayerVehicleID(i);
    new Model = GetVehicleModel(GetPlayerVehicleID(i));
    if(Gas[vehicle] >= 1)
    {
    if(Gas[vehicle] <= 10) { PlayerPlaySound(i, 1085, 0.0, 0.0, 0.0); }
    if(gGas[i] == 1) {
    format(string, sizeof(string), "~r~~n~~n~~n~~n~~n~~n~~n~~n~~n~Benzin:~w~ %d%",Gas[vehicle]);
    GameTextForPlayer(i,string,15500,3); }
    if(IsAPlane(vehicle) || IsABoat(vehicle) || Model == 462 || Model == 481) { Gas[vehicle]++; }
    Gas[vehicle]--;
    }
    else
    {
    new vID = GetPlayerVehicleID(playerid);
    NoFuel[vID] = 1;
    new vid = GetPlayerVehicleID(playerid);
    new engine,lights,alarm,doors,bonnet,boot,objective;
    GetVehicleParamsEx(vid,engine,lights,alarm,doors,bonnet,boot,objective);
    SetVehicleParamsEx(vid,VEHICLE_PARAMS_OFF,lights,alarm,doors,bonnet,boot,objective);
    motor[vid] = false;
    GameTextForPlayer(i,"~w~~n~~n~~n~~n~~n~~n~~n~~n~Kein Benzin mehr~n~Dein motor geht aus",3000,3);
    }
    if(Gas[vehicle] > GetGasMax(GetVehicleModel(vehicle)))
    {
    Gas[vehicle] = GetGasMax(GetVehicleModel(vehicle));
    }
    }
    }
    }
    return 1;
    }



    Mach bei public fillup:
    new vID = GetPlayerVehicleID(playerid);
    NoFuel[vID] = 0;
    und bei /motor an wenn du das hast:
    new vID = GetPlayerVehicleID(playerid);
    if(NoFuel[vID] == 1)
    {
    SendClientMessage(playerid, COLOR_RED, "Du hast keinen tank mehr du kannst den motor nicht starten!");
    return 1;
    }
    //edit

    Das Originale SOR ( Street´s of Reallife ) seit 03.10.2009

  • Ist es normal, dass du bei der Zeile wo das nur für die ID 0 funktioniert, ein ";" fehlt?


    Hier ist's so:


    if(IsPlayerInVehicle(i, v) && GetPlayerState(i) == PLAYER_STATE_DRIVER)


    // Edit, Dummheit gehört bestraft. XD ich lag falsch. ;S

  • probir:
    if(!IsPlayerInVehicle(i, v)) // <--- Abfrage 2, die nur für ID 0 funktioniert
    {
    NoFuel[i] = 1;
    GameTextForPlayer(i,"~w~~n~~n~~n~~n~~n~~n~~n~~n~Tank leer",1500,3);
    }


    Das Originale SOR ( Street´s of Reallife ) seit 03.10.2009

  • So ist's falsch, da wird abgefragt ob ich in keinem Auto sitze und wenn ja, wird mir die Meldung angezeigt die eigentlich kommen soll, wenn ich der Fahrer eines Fahrzeuges bin und der Tank leer ist.

  • Probire das:
    if(IsPlayerInVehicle(i, v) && GetPlayerState(i) != PLAYER_STATE_DRIVER) // <--- Abfrage 2, die nur für ID 0 funktioniert
    {
    NoFuel[i] = 1;
    GameTextForPlayer(i,"~w~~n~~n~~n~~n~~n~~n~~n~~n~Tank leer",1500,3);
    }


    Das Originale SOR ( Street´s of Reallife ) seit 03.10.2009

  • Also, das Ausrufezeichen (!) steht für nicht.
    Also würde man damit jetzt abfragen, ob der Spieler in einem Fahrzeug ist und nicht der Fahrer ist.
    Ich will das ja so, dass man im Fahrzeug sein muss und der Fahrer sein muss.

  • Also bei mir z.B ist es bei motor an/aus so:
    if(GetPlayerState(playerid) != PLAYER_STATE_DRIVER)
    {
    SendClientMessage(playerid, COLOR_RED, "Du bist nicht der Fahrer!");
    return 1;
    }
    wenn ich es so habe dan kann es nur der fahrer machen und wenn ich es so mache:
    if(GetPlayerState(playerid) == PLAYER_STATE_DRIVER)
    {
    SendClientMessage(playerid, COLOR_RED, "Du bist nicht der Fahrer!");
    return 1;
    }
    kann es der beifahrer usw machen nur der fahre nicht

    Das Originale SOR ( Street´s of Reallife ) seit 03.10.2009

  • @ an eli:
    Wenn man keine Ahnung hat, einfach mal nichts schreiben.
    Lass es, bevor du noch 10x schreibst. Und die Antwort falsch ist.


    Sean Mahoney,


    kann es sein, dass du vielleicht irgendeine Klammer falsch gesetzt habe?
    Du hast im Script:


    Gas[v]--;
    }
    }
    else
    {


    stehen.
    Ich habe:


    Gas[vehicle]--;
    }
    else
    {


    Vielleicht daran?

  • probire es mal so:
    public CheckGas(playerid)
    {
    for(new i=0;i<MAX_PLAYERS;i++)
    {
    for(new v=0;v<MAX_VEHICLES;v++)
    {
    if(Gas[v] >= 1)
    {
    new engine, lights, alarm, doors, bonnet, boot, objective;
    GetVehicleParamsEx(v, engine, lights, alarm, doors, bonnet, boot, objective);
    if(engine == 1)
    {
    if(GetPlayerState(playerid) != PLAYER_STATE_DRIVER)
    {
    if(Gas[vehicle] <= 10) { PlayerPlaySound(i, 1085, 0.0, 0.0, 0.0); }
    }
    if(IsAPlane(v) || IsABoat(v)) { Gas[v]++; }
    Gas[v]--;
    }
    }
    else
    {
    new engine,lights,alarm,doors,bonnet,boot,objective;
    GetVehicleParamsEx(v,engine,lights,alarm,doors,bonnet,boot,objective);
    SetVehicleParamsEx(v,VEHICLE_PARAMS_OFF,lights,alarm,doors,bonnet,boot,objective);
    if(GetPlayerState(playerid) != PLAYER_STATE_DRIVER)
    {
    NoFuel[i] = 1;
    GameTextForPlayer(i,"~w~~n~~n~~n~~n~~n~~n~~n~~n~Tank leer",1500,3);
    }
    }
    }
    return 1;
    }

    Das Originale SOR ( Street´s of Reallife ) seit 03.10.2009

  • So mit den Klammern hatte ich es auch probiert, aber geht ja nicht :/
    Und die Ausrufezeichen gehören da nicht hin, bei GetPlayerState, weil wie gesagt, Ausrufezeichen bedeuten Verneinung

  • die ! können manchmal helfen! probir es doch mal...
    ich habe früher auch immer nach gefragt und dan haben die meisten gesagt mach != dan funktionirt es
    Ich probire es jetzt mal selbst

    Das Originale SOR ( Street´s of Reallife ) seit 03.10.2009

  • die ! können manchmal helfen! probir es doch mal...
    ich habe früher auch immer nach gefragt und dan haben die meisten gesagt mach != dan funktionirt es
    Ich probire es jetzt mal selbst

    1. Probier
    Hast immer wieder probir.


    2. Es kann sein, dass es hilft.
    Jedoch kommt es auch auf die Art an.