Professor Layton: Und das Tankproblem

In 10 Minuten startet der nächtliche Backupvorgang! Es kann währenddessen (ca. 10 Minuten) zu Einschränkungen bei der Nutzung des Forums kommen
Weitere Infos findet ihr im Thema Backup des Forums
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
  • So also wer das hier löst, dem küsse ich die Füße, ausserdem habe ich noch einen XBox360-HALO:REACH-20€-Amazon-Gutschein zu verschenken für den der mir bei diesem Problem hilft.
    Das Problem habe schon länger und habe es schon auf locker 20 Wegen versucht zu lösen.


    Mein Problem ist folgendes:


    Der Wagen ist jetzt nur Zufall, aber Fakt ist: die Tanks werden nicht aufs Maximum gesetzt so wie es da eigentlich steht, obwohl ich unter OnGameModeInit (aber auch schon an anderen Stellen versucht) stehen hab:


    for(new i=0; i<MAX_VEHICLES; i++)
    {
    gTank[i] = floatround(AutoInfo[GetVehicleModel(i)][TankMax]); //Tank auf Maximum setzen
    }
    Wenn ich statt "floatround(AutoInfo[GetVehicleModel(i)][TankMax])" jetzt z.B. 100 eingebe, geht es dummerweise, und ich hab keinen Plan warum.


    So also ich warte jetzt auf DAS Genie, dass dieses "Rätsel" für mich lösen kann, ich hab nach 120h versuchen und rumprobieren aufgegeben.
    Ich bin auch offen für jeden der mir eine elegante Alternativlösung bieten kann.

    HILFE

    mit freundlichen Grüßen,
    Rici



  • gibt doch viele andere systeme wiez.b dt dynamic cars der funktioniert super :)

  • @TheDoctor, jo nur bin ich gerade an einem Selfmade und will den so rein wie möglich halten, und so schwer kann das nicht sein wenn das auch andere hinbekommen ;)



    L4mbo: danke für den Hinweis, muss gestehen das da "-400" bei dem Model fehlte (falsch abgetippt) habe jetzt:
    for(new i=0; i<MAX_VEHICLES; i++)
    {
    new vmodel = GetVehicleModel(i);
    gTank[i] = AutoInfo[vmodel-400][TankMax];
    }geht leider weiterhin nicht (gTank der autos ist wieder bei 0.0)


    Haxler: ja Sekunde...
    enum Infos
    {
    Name[128],
    Preis,
    Leistung,
    Speed,
    Klasse[128],
    TankMax,
    Float:TankVerbrauch,
    };
    new AutoInfo[2][Infos] =
    {
    {"Landstalker", 26749, 130, 110, "Auto B", 45, 0.25},
    {"Bravura", 25555, 56, 89, "Auto A", 37, 0.24}
    };es ist erstmal nur mit 2 Autos gemacht (ich hatte es schon mit mehreren, aber dann geändert usw.)


    ja und im Landstalker sitzend habe ich: 0.0L/45L und
    im Bravura 0.0L/37L (also eigentlich fast korrekt).



    //Edit: Korrekturen

    mit freundlichen Grüßen,
    Rici



    Einmal editiert, zuletzt von Rici ()

  • Ist gTank eig auch ein Float?
    Weil wenn nicht wird das wohl der Grund sein.


    Warum ziehst du eig 400 von der modelid ab? Wenn er 400 aus liest und du 400 wieder abziehst dann kommst du bei 0 raus und 0 ist keine modelid


    //Edit: Mach ma aus
    TankMax
    Float:TankMax


    Dann sollte es eig gehen

    "Bevor ich mir Informationen aus der "Bild" hole,
    werde ich anfangen, Wahlergebnisse danach vorauszusagen,
    neben welchen Busch unsere Katze gepinkelt hat."

    Margarete Stokowski

  • gTank ist eine Float:
    new Float:gTank[MAX_VEHICLES];



    Ich ziehe 400 ab, weil die Zählung im Multi-Array ab 0 beginnt und die Modelid's aber bei 400 (400=Landstalker, usw) d.h. wenn ich 400 von der Modelid abziehe habe ich den 1. (0.) Wert in dem Array, und das ist folglich:
    new AutoInfo[2][Infos] =
    {
    {"Landstalker", 26749, 130, 110, "Auto B", 45.0, 0.25}, //<<<<< der hier
    {"Bravura", 25555, 56, 89, "Auto A", 37.0, 0.24}
    };


    //Edit: Ich versuch das mit den Floats mal...
    //Edit2: Geht leider nicht, aber jetzt wird 1110032912L als maximum angezeigt (aber nicht gefüllt) liegt aber daran das ich im Textdraw noch %d statt %.1f stehen habe....
    man irgendwie kotzt das X(

    mit freundlichen Grüßen,
    Rici



    Einmal editiert, zuletzt von Rici ()

  • höhö lesen undso ;)

    Zitat

    liegt aber daran das ich im Textdraw noch %d statt %.1f stehen habe....

    Mich würde trotzdem mal interessieren ob es hier jemanden gibt der das lösen kann, oder mir ne elegante Alternative nennen kann.^^

    mit freundlichen Grüßen,
    Rici



  • do.de - Domain-Offensive - Domains für alle und zu super Preisen
  • Nein %f reicht nicht aus für keine Nachkommasstelle, er gibt dann soviele aus wie er ausgeben kann, bei Pawn sind das glaub ich 10.


    Zeig ma den Code von textdraw vielleicht liegt da der Fehler, denn ich finde da keinen

    "Bevor ich mir Informationen aus der "Bild" hole,
    werde ich anfangen, Wahlergebnisse danach vorauszusagen,
    neben welchen Busch unsere Katze gepinkelt hat."

    Margarete Stokowski

  • for(new i=0; i<MAX_VEHICLES; i++)
    {
    new vmodel = GetVehicleModel(i);
    gTank[i] = AutoInfo[vmodel-400][TankMax];
    }
    Das ist schon das richtige...



    Debugge den Code doch einfach mal,
    dann wirst du die Fehlerquelle schnell haben,
    wodurch sich die Lösung offenbaren sollte.


    //edit:
    Die Vorposter haben keine Ahnung

    Einmal editiert, zuletzt von Trooper[Y] ()

  • Achso perhand jo gut alles klar ich werde es mal probieren, danke für die Info.


    //EDIT: Ok also ich habe es gelöst bekommen ich habe einen Timer erstellt der den Tank solange um 1 erhöht bis er nichtmehr kleiner ist als das Maximum:
    public AllesTanken(vid)
    {
    if(gTank[vid] < AutoInfo[GetVehicleModel(vid)-400][TankMax])
    {
    gTank[vid]++;
    SetTimerEx("AllesTanken", 1, 0, "%d",vid);
    }
    return true;
    }
    Und ich habe den Fehler gefunden warum es nicht geht, man kann anscheinend mit Arrays nur vergleichen und nicht setzen, ansonstne habe ich da was falsch gemacht, weil jetzt lässt sich mit dem Array (AutoInfo[vmodel-400][TankVerbrauch]) der Tank pro Minute nicht verringern.

    mit freundlichen Grüßen,
    Rici



    Einmal editiert, zuletzt von Rici ()

  • Jo aber andersrum wird irgendwie kein Schuh draus,


    Array[x] = wert; //geht
    new wert = Array[x]; //geht irgendwie nicht


    Ich gehe ja der Annahme das des Array noch mit irgendwas als str/float/int gekennzeichnet werden muss also bspw. mit strval(Array[x]), weil irgendwie scheint er den wert in Arrays nur vergleichen zu können, ist irgendwie dumm :pinch:


    Oder es liegt daran das ich noch auf 0.3b und nicht 0.3c scripte (was aber eigentlich Quatsch wäre). Aber bei Windows weiß man nie ;)





    //EDIT: Habe es hinbekommen, klappt prima! ;) Es hat wohl etwas mit ner For-Schleife im Timer nicht hingehauen, einfach mal überscripten und schon gings :) Ich danke trotzdem allen die mir geholfen haben, oder wenigstens helfen wollten! -Thema erledigt-

    mit freundlichen Grüßen,
    Rici



    Einmal editiert, zuletzt von Rici ()