[H5] Erfahrung geben bei betreten eines Bereichs.

  • Also, ich habe auf einer Map einen Bereich, in dem der Held EP bekommen soll, wenn er dort rein geht. Aber nur, wenn er bisher maximal auf Stufe 5 ist. Ich hab noc nie im Editor irgendwas mit Scripts zu tun gehabt, habe aber in einer Dokumentation den Befehl "GiveEXP" gesehen, den gibt es aber nicht (ToTE). Die Region hab ich schon erstellt.


    edit: Das ganze soll nicht nur einmal gehen, sondern mit jedem Helden, der in den Bereich gelangt. Wie gesagt, er darf halt maximal Level 5 sein. Alternativ ginge es auch, den Helden direkt auf ein best. Level an zu heben, anstatt ihm EP zu geben.


    edit2: Außerdem habe ich Probleme damit, ein Script zum laufen zu kriegen, dass jedem Spieler zu Beginn seines Zugs Gold gibt... Also jede Runde.


    Ich hoffe, das ericht an Infos, wenn ihr noch genaueres wissen wollt erklär ichs gerne genauer.

  • Erstmal: "...jedem Spieler..."? Falls du versuchst, für eine Multiplayerkarte ein Skript zu machen, muss ich dich ernüchtern: Das geht nicht. Auf jeder Multiplayerkarte sind Scripts grundsätzlich und irreversibel deaktiviert. Scripten kannst du nur in Szenario-Karten.


    Zu deinem Problem:
    Generell solltest du mit if then else arbeiten.
    Pseudocode:


    if *Held Level < 5*
    then{
    GiveExp(heroname, exp);
    }
    else{
    Nachricht zeigen "Level zu hoch"
    }


    würde auch bei jedem Helden funktionieren und zwar genau solange, bis er Level 5 erreicht hat.
    Problematisch wirds, wenn du willst, dass es zwar für jeden Helden geht, aber nur einmal pro Held. Dann müsstest du zusätzlich irgendwie gewährleisten, dass das Spiel jedem Helden, der da drin war, eine Eigenschaft zuweist, die es dann abfragen kann, wenn der Held das Gebiet wieder betritt (geht jetzt zml weit, das würde verhindern, dass ein Held, der von Level 2 auf 3 angehoben wird, einfach immer wieder reinlaufen kann, bis er Level 5 ist).
    Das übersteigt dann aber auch meine Fähigkeiten, zumindest in lua (in Java wär's ja kein Problem... :P ).

  • Muss gestehen das ich dieses Gerücht das es seit ToE gehen soll selbst nach wie vor nicht beweisen könnte. Allerdings hab ich um ehrlich zu sein seit den verkappten Versuchen vor Monaten den Editor bisher nicht wieder angeworfen. Es geht das Gerücht das es (zumindest Teilweise) gehen soll mit ToE aber bei mir wollen die Scripte ja nicht mal auf ner Singleplayer Map.......
    Dao oder MP haben damals behauptet es würde gehen.

    Die Sense gehört zwar nicht zu den wichtigsten und bedeutsamsten Kriegswaffen, aber wer sich auf der falschen Seite einer Bauernrevolte befindet macht rasch die Erfahrung daß sie in geübten Händen eine Menge Unheil anrichten kann.


  • Da der Held sowieso so viel EP bekommen soll, dass er über Stufe 5 ist danach, sollte das kein problem sein. Und ja, es handelt sich um eine Multiplayerkarte. Den Teil, den du geschrieben hast hätte ich vermutlich so in etwa selbst hinbekommen, trotzdem danke. Mein Problem ist eher: Wo muss das ganze hin und wie frage ich genau ab, welche Stufe der Held hat? Ich will es ja triggern, wenn man einen Bereich betritt. Ich habe gewisse Grundkenntnisse im Programmieren, was auch besser so ist, da ich demnächst eine Ausbildung als Fachinformatiker(Anwendungsentwicklung) anfange ;) Nur für Heroes 5 habe ich noh nie etwas gescriptet und kenne mich deshalb nur bedingt mit den Befehlen und der Syntax aus. Vor allem letztere ist das Problem.


    Also, es gibt ja den Befehl "GetHeroLevel" oder so, nur wie kann ich mit dem dann das Level des Helden rausbekommen, der den Bereich betritt und dann abrfagen, welche Stufe er hat? Und aus irgendeinem Grund wurde mir bisher bei "GiveExp" bei all meinen Versuchen angezeigt, dass der Befehl nicht existieren würde. Wie gesagt, ich verwende TotE.

  • Zur Syntax kann ich dir so viel sagen: leichter als Assembler, schwerer als C. Syntaxstellung is ne mittelschwere Katastrophe beim Editor, vor allem wen man dazu noch in Betracht zieht das einige Befehle und Funktionen nicht so funktionieren wie sie es laut der Liste sollten.
    Ich wills nicht beschreien aber braucht die getexp Funktion nicht als Returnwert den Namen des Helden der die EP bekommen soll?

    Die Sense gehört zwar nicht zu den wichtigsten und bedeutsamsten Kriegswaffen, aber wer sich auf der falschen Seite einer Bauernrevolte befindet macht rasch die Erfahrung daß sie in geübten Händen eine Menge Unheil anrichten kann.

  • Der Trick ist einfach.
    Entweder, du weist den Wert einer Variablen zu.
    Dann wäre

    Code
    x = GetHeroLevel;
    if x < 5 then...


    dein Code.
    Alternativ dazu kannst du dir den einen Schritt auch sparen und direkt abfragen:

    Code
    if GetHeroLevel < 5 then...


    Da gibt's irgendwo im Editor Practical Guide ein Codefragment für nen Bereichstrigger, das kannst du eig nehmen und so weit anpassen, dass es so klappt, wie du's willst ;)

  • Laut Dokumentation gibt es kein "GiveExp", auch wenn es ziemlich eindeutig im practial Guide erwähnt wird. Wird wohl in TotE ersetzt worden sein, damit Zehir in der Kampagne auch schön Stufen wieder verlieren kann. Dafür sollte nun ChangeHeroStat(heroName, statID, delta) machen was Du suchst.


    Kanns grad nicht testen, aber irgendwie so müsste das dann aussehen. Wobei <area> natürlich durch den Namen Deiner Region ersetzt werden muss.


    Code
    function StufenFlatrate(heroname)
    if GetHeroStat(heroname, STAT_EXPERIENCE) < 6200 then
    ChangeHeroStat(heroname, STAT_EXPERIENCE, 6200)
    end;
    end;
    
    
    Trigger( REGION_ENTER_AND_STOP_TRIGGER, "<area>", "StufenFlatrate" );



    Und für jeden Tag Geld sollte so aussehen:


    Code
    function TagesKohle()
    SetPlayerResource(PLAYER_1, GOLD, GetPlayerResource(PLAYER_1, GOLD) + 1000);
    end;
    
    
    Trigger(NEW_DAY_TRIGGER, "TagesKohle" );


    Gegebenenfalls für die anderen Spieler halt auch so eine Zeile jeweils erstellen.


    EDIT: Beim zweiten Code eins der beiden end; entfernt und heroname aus der Argumentenliste.

  • @Sebastihan: Danke, das hilft mir bei der Syntax sehr weiter, daran bin ich nämlich gescheitert ;)


    Geirroed: Danke danke, probier ich doch glatt mal aus. Melde mich dann wieder.


    Also, ich habs im Hot Seat getestet, beides funktioniert nicht. wenn ich im Editor auf "Check" klicke kommt auch "function StufenFlatrate not defined" und das selbe auch für "TagesKohle." Muss ich die beiden noch irgendwo definieren oder so?

    Und bald wird Inferno regieren!! Giahahaha :D

    3 Mal editiert, zuletzt von patta ()

  • Nachdem ich das geändert habe scheint nun beides zu funktionieren. Nur noch ein bisschen anpassen das ganze, dann sollte es OK sein. Vielen Dank.

  • Forum

    Hat das Thema geschlossen.