Warning: ob_start(): function 'compress_handler' not found or invalid function name in /www/htdocs/xfmantis/core.php on line 18
0001450: Neuer Rangeeffekt: Scriptevent - Mantis

SYSTEM WARNING: Creating default object from empty value

SYSTEM WARNING: Creating default object from empty value

SYSTEM WARNING: Creating default object from empty value

SYSTEM WARNING: Creating default object from empty value

Mantis - X-Force
Viewing Issue Advanced Details
1450 Bodeneinsatz feature N/A 23.06.06 23:06 22.03.09 03:00
DirkF  
Natter  
normal  
closed  
fixed  
none    
none V0.915a05  
0001450: Neuer Rangeeffekt: Scriptevent
Es sollte möglich sein als Rangeeffekt ein Skriptevent zu erzeugen, wodurch dann im Bodeneinsatz entsprechende Skripte ausgelöst werden.

Ziel ist dabei primär der "Rangeeffekt bei Zerstörung", der dann auch für Objekte und Wände im Bodeneinsatz gelten sollte.
Auf diese Weise kann man auf die Vernichtung wichtiger Gegenstände direkt per Skript reagieren - oder einfach nur die vernichteten Wände zählen, um dem Spieler anschließend nach dem Bodeneinsatz per Skript die zivilen Schadensersatzforderungen zu präsentieren (bzw. die Einrichtungen der Basis so zu beschädigen wie man das im Verteidigungseinsatz gezählt hat).
Das man mit den passenden Skriptbefehlen dann natürlich auch dem Rangeeffekt bei Treffer eine beliebige Wirkung zuordnen kann ist ein nützlicher Nebeneffekt, aber primär geht es um die Möglichkeit auf Zerstörungen im Bodeneinsatz passend reagieren zu können.
related to 0001481new  X-Force Tools Tileeigenschaft "Rangeeffekt bei Zerstörung" 
related to 0001449new  X-Force Neue Gegenstandsklasse: Skriptauslöser 

Notes
(0003711)
Natter   
20.02.09 01:51   
Wie genau soll das aussehen? Ein SpecialEvent wäre vermutlich ziemlich einfach umzusetzen, aber es ist fraglich, ob man damit im Skript allzuviel anfangen kann. Bei einem normalen Event wäre die Frage zu welchem Objekt man das sinnvoll zuordnen kann. Denkbar wäre vielleicht auch, ein neues Skript zu starten (welches man im RangedEffect angibt).
(0003713)
DirkF   
20.02.09 07:34   
Das ist ein ziemlich altes Ticket, und die Idee sollte damals mehrere Punkte auf einmal erledigen. Jetzt binich mir nicht mehr sicher, ob man dies tatsächlich so machen sollte. Es sollte folgendermaßen ablaufen:

1)
Irgendwann müssen die Objekte im Bodeneinsatz einen Rangeeffekt bei Zerstörung kriegen - schon alleine damit Maschinen bei Zerstörung explodieren können etc.
An dieser Stelle sollte dieses Skriptevent ebenfalls ansetzen, damit bei Spezialmissionen die Zerstörung von Schlüsselobjekten den jeweils nächsten Missionsschritt triggern kann.

Hier muss entweder das zerstörte Bodeneinsatzobjekt/Kartenfeld übergeben werden, oder aber als Spezialevent ein vorab definierter Name (z.B. des Objekttiles), um die Events einer Spezialmission unterscheiden zu können.
Ein Skriptstart mit dem zerstörten Tile/Kartenfeld als übergebenem Missionswert wäre aber auch eine Option.

Es gibt aber das früher nicht sauber bedachte Problem, das diese Angaben ja in den Tiles zugeordnet sein müssten - entweder braucht man Skriptbefehle die dies nachträglich für allgemeine Tiles erledigen, oder aber man müsste diese speziellen Tiles im Spielsatz speichern.

2)
Die zweite Anwendung wäre dagegen der Rangeeffekt bei Treffer gewesen. Zusammen mit anderen Zugriffen könnte man dies nutzen, um spezielle Waffeneffekte zu realisieren (z.B. eine Pistole die bei Treffer auch andere Werte der TGamefigure verändert, oder eine Nahkampfwaffe mit 0 Schaden die per Skript heilt und "Medikit" genannt wird, oder einfach speziell erzeugte Explosionen)
Hier wäre wohl ein neuer Skriptaufruf mit dem getroffenen Objekt (TUnit, Tile oder Kartenfeld) die einfachste Lösung, da ja sowohl die auslösende Waffe alsauch das Skript ein Teil des Spielsatzes und unabhängig von der Karte wären.
(0003714)
DirkF   
21.02.09 15:18   
Ich glaube es ist wahrscheinlich einfacher, wenn wir das unterschiedlich handhaben.

Einmal einen "Rangeeffekt bei Treffer", der jeweils die getroffene TGameFigure als MissionObjekt bei einem externen Skriptaufruf benutzt.

Dann einen "Rangeffekt bei Zerstörung", der jeweils das gerade zerstörte TItem als MissionsObjekt übergibt.

Diese Unterscheidung sollte man intern treffen können, d.h. im Editor kann man die Eingabe bei den Gegenständen identisch aussehen lassen.

Bei den Bodenobjekten sollte dagegen ein Flag eingeführt werden, das im Falle einer Zerstörung ein neues Event erzeugt mit einem Namen und der Kartenposition des zerstörten Objektes. Das Flag ist dafür da, damit nicht jedes Tile eine solche Meldung absetzt sondern nur die für Missionszwecke vorgesehenen (man kann dann auch zwei Tiles mit identischer Grafik aber nur eines mit gesetztem Flag machen, dann muss der Spieler das richtige suchen)

Es ist dann eine Sache des Spielers Skripte zu starten die auf dieses neue Event reagieren - und wenn ich das richtig mitbekommen habe muss das noch nicht einmal im Bodeneinsatz selber sein, wenn die Auswirkungen nicht für den Bodeneinsatz da sind (z.B. zähler wieviele Zivilgebäude zerstört wurden für monatliche Ersatzzahlungen)

Auf diese Weise reduzieren wir die Problematik der Spielsatzgekoppelten Kartenobjekte auf echte Spezialmissionen.
(0003715)
Natter   
21.02.09 21:43   
Es gibt jetzt einen neuen RangeEffect 'Skript'. Bei Treffer ruft er ein Skript mit der zuletzt getroffenen Einheit als Missionsobjekt auf (bei meinem ersten Test mit RangeEffectInstantKill ist mein Soldat an Stelle des Aliens gestorben - es war dann doch etwas komplizierter die getroffene Einheit zu ermitteln als ursprünglich gedacht, aber jetzt sollte es klappen). Wird keine Einheit sondern z.B. eine Wand getroffen, wird die Mission mit NIL gestartet.

Wenn man den neuen RangeEffect für Zerstörung nimmt, sollte das Skript ebenfalls mit NIL aufgerufen werden (hab ich aber noch nicht getestet). Dann weiß man zwar noch nicht, wo das Ereignis auftrat, aber man könnte immerhin auf die Zerstörung bestimmter Items reagieren. Es wäre natürlich denkbar gewesen, TISOItem als Missionsobjekt zu übergeben. Ich sehe da aber eine Reihe Probleme, weswegen das zu einem späteren Zeitpunkt entschieden werden sollte.
Zum einen ist TISOItem in X-Skript (noch) nicht bekannt. Zum anderen leitet sich TISOItem glaube auch nicht von TObject ab - ich bin mir nicht sicher, ob das als Missionsobjekt überhaupt funktionieren würde.