Zeitabhängige Eroberungen

  • Juhu, jetzt fange ich langsam mit komplizierterem Krams an:
    In meinem aktuellen Projekt errichtet sich der Spieler eine Stadt (die via "SetObjectPosition" einfach dahin geschoben wird, wo sie hinsoll), die er ausbauen muss.
    Ab einem gewissen Datum nach dem Bau der Stadt, sollen nun ein paar feindliche Helden ankommen, und die Stadt attackieren, ähnlich dem Szenario mit Braunmoor aus der Lebenskampagne, ich will allerdings keine Monolithen benutzen.


    Nun die Frage - wie klappt das?
    Ich habe mir schon überlegt, das ganze mit "GetDate" und NewDayTriggern abzuhandeln:



    Gedacht ist es so:
    Zu Beginn jedes neuen Tages wird die Variable "day" durch das aktuelle Datum ersetzt.
    Hat der Spieler die o.g. Stadt "gebaut", so fragt das Skript das aktuelle Datum ab, und ersetzt die Variblen "Angr1", "Angr2" und "Angr3" durch das entsprechende Datum plus einer bestimmten Zahl.
    Dann kommen verschiedene Funktionen (die in dem o.g. Skript noch von nichts ausgelöst werden, das kommt dann noch :rolleyes: ), die immer dann, wenn das aktuelle Datum den Wert von Angr1 bis Angr3 erreicht, einen feindlichen Helden spawnen und ihn auf die Stadt des Spielers hetzen.


    Problem: Schon beim Starten der Karte geht nichts, (normalerweise wird zu Beginn ein Textfeld angezeigt) was zeigt, dass das nicht ganz funktioniert.
    Ohne es zu wissen, sage ich, dass meine Variablen-Konstruktion sicher ziemlicher Mist ist, aber mein Verstand sagt mir, so müsste es funktionieren...


    Was sagt ihr dazu, wie kriegt ich mein Skript so hin, wie ich es will?


    €: Für die, die es nicht wissen: Trigger 0 ist NEW_DAY_TRIGGER, ich nutze da lieber die IDs, die sind kürzer :D

  • Wo der Fehler genau liegt, habe ich bis jetzt auch noch nicht herausgefunden, aber die Variablenkonstruktion funktioniert bei mir schon:



    In dem Fall musste ich die Variablen Angr1 und Angr2 natürlich schon vorher definieren, damit das NewDay-Script funktioniert.


    Hast du eigentlich die "SetAIHeroAttractor"-Funktion schon mal getestet? Bei mir hat die nämlich nie richtig funktioniert; ich habe deswegen immer versucht, das irgendwie mit "MoveHero" direkt zu steuern. Das hat aber den Nachteil, dass der Weg für den gegnerischen Held frei sein muss, sonst bewegt der sich überhaupt nicht. :-|

    Die kausale Unabhängigkeit der Quarks von unserer Rede ist kein Merkmal der Realität (im Sinne des Gegenteils der Welt des Scheins), sondern sie ist einfach ein unbezweifelter Bestandteil unseres Redens über Quarks.
    Richard Rorty

  • Hm, okay, ich hab jz bei mir schon so einiges probiert.
    Der Fehler im obigen Skript liegt darin, dass ich beim if-Befehl aus Versehen nur ein einfaches = benutzt hab (kein ==).
    Bin jetzt mittlerweile auch etwas weiter, aber funktioniert das Skript bei dir, Mentat?
    Wenn ich nämlich ein ähnliches Skript verwende, dann heult er bei mir (über die Console) rum, dass ich keine arithmetics (Rechenoperationen à la +, -, *, /) mit funcitons machen darf (in dem Fall ist damit wohl GetDate + 3 gemeint).
    Da du aber dasselbe machst...
    Außerdem kommt bei mir inner Console die ganze Zeit ne "ScriptWarning", dass einige Variablen namens "false"=nil wären... ist aber irrelevant, das Skript funkt trotzdem bis auf die Sache mit den Angriffen.


    Und ja, der AIAttractor geht bei mir prima... den hab ich schon in einem Szenario vorher benutzt (das wird ne Kampagne), da hat er nie Stress gemacht. Nur, wenn der feindliche Held eine Stadt erobert hat, und ich dann den Attractor auf eine andere gesetzt hab, dann kam er nicht wieder rausgekrochen... Ansonsten funkts.


    Habe auch schonmal mit "while 1 do" was probiert, aber da hat sich das Programm immer aufgehängt, auch wenn ich "sleep(100)" eingebaut hab... i-wie wollte er nicht.
    Auch "while day < Angr1 do" hat er nicht gefressen...


    Wie dem auch sei, mittlerweile motzt er bei mir hieran:


    Code
    function Stadtbau
    Angr1 = GetDate + 5;
    Angr2 = GetDate + 10;
    Angr3 = GetDate + 15;
    end;


    I-wie darf ich keine "Arithmetics" mit Funktionswerten benutzen??? ?(
    Also brauche ich jetzt nur i-ne Methode, mit der ich ihm sagen kann, dass nach einer bestimmten Zahl von Tagen ein Held eine bestimmte Stadt angreifen soll, und dabei zu beachten, dass der Angriff z.B. immer 5 Tage nach Eroberung der entsprechenden Stadt kommt (wäre ja doof, wenn der Angriff kommt, wenn ein langsamer Spieler noch gar nicht da ist!).


    =========================================================================
    €: Hier mal mein derzeitiges Skript:


    Die Variablen Angr1 bis Angr3 werden vorher nicht definiert, daran motzt er auch immer rum, aber ich glaube, das ist nicht wirklich wichtig... Und derzeit passiert an den gewünschten Daten einfach nichts. In der Console zeigt er halt das mit den arithmetics an, wenn der spieler die Stadt erobert (Die Funktion "Stadtbau" wird dann als Capture-Trigger gestartet).

  • Vielleicht hilfts doch, wenn du die Variablen vorher definierst? Ich habe das Script noch mal in leicht veränderter Form mit dem Capture-Trigger getestet und hatte keine Probleme; auch nicht mit der Addition. Die wird ja auch in den Szenarios ständig verwendet, sollte also auf jeden Fall funktionieren.





    Ich freue mich schon auf deine Kampagne (falls du sie ins Kartenarchiv stellst). ^^ In ca. 1 Woche werde ich auch endlich mit meiner Karte fertig sein, an der ich schon seit Juni bastle. Entsprechend ausführlich ist da auch das Script. :D

    Die kausale Unabhängigkeit der Quarks von unserer Rede ist kein Merkmal der Realität (im Sinne des Gegenteils der Welt des Scheins), sondern sie ist einfach ein unbezweifelter Bestandteil unseres Redens über Quarks.
    Richard Rorty

  • Okay, ich hab jetzt des Rätsels Lösung...


    Meine Abfrage unterschied sich von deiner nur in einem Punkt:

    Code
    GetDate(DAY);


    Aus irgendeinem komischen Grund hat das alles geändert, obwohl in den Script-Functions_A2 steht, dass die Abfrage "GetDate;" (ohne (DAY)) auch den Tag abfragt - aber i-wie scheint es da einen Unterschied zu geben.
    Jetzt habe ich auf jeden Fall meine "GetDate"s verändert und schon geht es. Die Variablen Angr1 bis Angr3 hab' ich jetzt auch definiert.
    Dafür schon mal viele Dank :thumbup:


    Das einzige, was jetzt noch Zicken macht, ist - wie von dir prophezeit - der AI-Attractor. Bei DeployedHeroes scheint der nämlich nicht zu funktionieren, die feindlichen Helden erledigen nämlich noch so einiges auf ihrem Weg zur Stadt, was sie eigentlich nicht tun sollten. Naja, dann werd ich das Ganze halt mit "MoveHero" lösen, wie du gesagt hast.


    Ansonsten funktionert jetzt alles prima. Die Firma dankt :)

  • So, ich mach jetzt hier mal nen Doppelpost, damit man weiß, dass ich was Neues geschrieben hab :D


    Also, bisher lief es eigentlich gut und die Helden spawnen jetzt zu den gewünschten Tagen an den gewünschten Orten.
    Einziges Problem: Sie tun nicht, was ich will!
    Der ursprüngliche Quellcode

    Code
    DeployReserveHero("Razzak", 69, 47, 0);
    SetAIHeroAttractor("Hauptstadt", "Razzak", 2);


    bewirkt nur ein Spawnen des Helden, auf die gewünschte Stadt geht er leider nicht los (okay, er ist bedeutend viel schwächer, aber trotzdem!). Ich habe spaßeshalber die Priorität schon auf 3 gesetzt, das führt aber nur zu nem Error.
    Wenn ich direkt nach dem Deploy... ein "EnableHeroAI("...", false); einsetze und es dann mit MoveHero versuche, passiert einfach gar nichts - der Held bleibt stehen, wo er ist, aber er fängt nicht an zu laufen. Stattdessen kommt in der Console nur ein "Error, Hero Razzak is not on map!" :thumbdown:


    Hat noch irgendjemand Ideen, wie ich meinen Helden dahin kriege, wo ich ihn haben will?

  • Ich schreib mal, wie das Script in meiner aktuellen Karte aussieht:


    Code
    function InvasionA() 
    DeployReserveHero( "Deleb", 50,173, GROUND); 
    sleep(2); 
    EnableHeroAI( "Deleb", nil ); 
    sleep(2); 
    MoveHero( "Deleb", 81, 106 ); 
    end;


    Die sleep-Funktionen habe ich eigentlich nur zur Sicherheit eingefügt, aber evtl. sind die auch wirklich nötig. Wenn sich der Held nicht bewegt hat, lag das bei mir immer daran, dass ein Held von mir die Strecke zum Zielpunkt blockiert hat. Ich habe das dann einfach so gelöst, dass ich den Weg ziemlich stark verbreitert habe.
    Die Meldung die du über die Console bekommst ist allerdings seltsam. :huh:

    Die kausale Unabhängigkeit der Quarks von unserer Rede ist kein Merkmal der Realität (im Sinne des Gegenteils der Welt des Scheins), sondern sie ist einfach ein unbezweifelter Bestandteil unseres Redens über Quarks.
    Richard Rorty

  • So, ich hab es jetzt gelöst.. SEHR unelegant, aber immerhin^^
    Habe die Helden einfach von Beginn an außer Sichtweite der Spieler plaziert (man hat bestimmte Regionen blockiert, die man erst nach den Angriffen betreten darf - glücklicherweise sollen die Helden von da kommen), die AI ausgeschaltet und sie dann einfach mit MoveHero in die Stadt geschickt - ging prima und jetzt greifen sie brav und ohne Umwege an.
    Ich gebe zu, in der Karte nicht immer 100% elegant gearbeitet zu haben (mache mir manchmal auch Ziele, die einfach nur bessere Trigger sind :rolleyes: ), aber immerhin läuft jetzt alles - morgen kommt dann vlt (wenn's die Weihnachtsplanung zulässt) der große Alpha-Test, denn grundsätzlich ist die Karte jetzt komplett fertig - hoffe nur, dass alles so läuft :D


    Aber das mit dem Sleep werde ich wahrsch. auch mal ausprobieren... vielleicht hat er einfach in der Schnelle noch keinen Helden gefunden, und die Daten, dass der jetzt "da" ist, werden erst 1 Segment später gesetzt, sodass er sie noch nicht findet, wenn er im selben Segment nach dem Helden sucht.

  • Forum

    Hat das Thema geschlossen.