PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Kleiner Portalersatz



Dalai Zoll
07.06.2011, 17:35
Ich musste in einer Höhle abfragen, ob der Hero drin oder draussen ist. Eigentlich war ich zu faul ein Portal zu bauen. Ich versuchte das mit 2 Triggern zu lösen, die in den Höhleneingang gebaut sind und die so viel Zwischenraum haben müssen, dass der Hero nicht beide Trigger gleichzeitig berühren kann.

Das sieht dann so aus .....



func void cave_in () // Trigger 1 der innere
{
hero_in_drin = 1;

if (hero_in == 0)
{
if ((hero_in_drin == 1)
&& (hero_out_drin == 1))
{
hero_in = 1; // er ist drinnen
PrintScreen (" TEST + Hero ist innen + TEST", -1, YPOS_LOGENTRY, FONT_Screen, 2);
}
else
{
//Damit wird die unnötige/nicht erwünschte "Er ist drinnen" Meldung verhindert, wenn man rausgeht
};
};
};

func void cave_out () // Trigger 2 der äussere
{
hero_out_drin = 1;

if (hero_in == 1)
{
if ((hero_in_drin == 1)
&& (hero_out_drin == 1))
{
hero_in = 0; // er ist draussen
PrintScreen (" TEST + Hero ist aussen + TEST", -1, YPOS_LOGENTRY, FONT_Screen, 2);
}
else
{
//Damit wird die unnötige/nicht erwünschte "Er ist draussen" Meldung verhindert, wenn man rausgegangen ist und wieder reingeht
};
};
};
Genügt für meine Zwecke vollkommen. Kann jetzt mit hero_in = 0/1; alles machen was ich will.

Nachteile ?


Vielleicht kann das ja mal jemand brauchen, der kein Portal hat oder machen kann. Vielleicht haben das auch schon hunderte so gemacht ...?

Kurzer
07.06.2011, 18:54
Warum fragst du nicht einfach in einer Triggerschleife die Distanz zu einigen WPs in der Höhle ab? Wenn er zu min. einem z.b. die Distanz von 300 und weniger hat, dann ist der Held drin. So mache ich das bei Gebieten ohnePortale eig. immer und das funzt super. Mit mejreren Triggern und so... das is immer so ne Sache und auf jeden Fall auf aufwendiger.

Dalai Zoll
07.06.2011, 19:23
Weil das an jeder Stelle der Höhle funktionieren muss und nicht nur zu einer Distanz von irgend etwas. Die Distanz, ist ja immer ein Kreis, die Höhle aber ein Schlauch. Wenn ich jetzt die Schlauchlänge als Distanz genommen hätte, wären Gebiete ausserhalb ebenfalls betroffen in der Abfrage, da ja die Länge nicht gleich der Breite ist und selbst da wären die Ecken, beispielsweise beim Quadrat nicht erfasst.
Da es nur einen Ausgang gibt, habe ich auf jeden Fall die korrekte Meldung, dass er drin ist. Das wäre mit der Distanzabfrage Methode nicht gewährleistet.

Lehona
07.06.2011, 19:27
Brauchst bloß einfach 2 WPs, dann geht das auch über WPs.

Dalai Zoll
07.06.2011, 19:40
Ich mach das eben über den Eingang und nen Trigger. Wenn das nicht passend ist, dass ich das so reingestellt habe, dann schreibt es mir doch ... bitte klar und deutlich ... dann nehme ich das wieder raus!

Ich habe eine Höhle die grösser ist als die Hallen von Irdorath und wenn ich da alles über Distanzen mit WPs abfrage und dann ausrechnen soll, ob auch alles abgedeckt ist und nichts übersteht, weil daneben auch noch Höhlen sind, dann erscheint mir eher eure Methode umständlich. Mein Konstrukt deckt jeden mm² dieser Höhle ab ganz einfach mit zwei Triggern und 15 Zeilen Script .... sorry!

Machtl
07.06.2011, 20:20
Tut mir Leid wenn ich mich irre, aber wäre es nicht völlig ausreichend beim äußeren Trigger eine Varible auf 0 zu setzen und beim inneren Trigger selbige Variable auf 1? An dieser einen Variable kann man nun ablesen ob der Held drinnen ist oder draussen, ohne irgendwelche zusätzlichen Abfragen. Natürlich müsste man noch so spezielle Fälle wie Teleportation berücksichtigen.

Mfg
Machtl

Lehona
07.06.2011, 20:20
Genauso reichen doch halt auch zwei WPs am Eingang...
Wollte ja bloß eine alternative Vorschlagen, du musst nicht alles gleich als (destruktive?) Kritik dir gegenüber sehen.

Machtl
07.06.2011, 20:29
Genauso reichen doch halt auch zwei WPs am Eingang...
Wollte ja bloß eine alternative Vorschlagen, du musst nicht alles gleich als (destruktive?) Kritik dir gegenüber sehen.

Das setzt aber doch vorraus, dass die Position des Helden non-stop währen der Laufzeit überprüft bzw. die Distanzen abgefragt werden? Die Trigger werden jedoch nur einmalig betätigt und belasten das System nicht weiter. (Wenn auch die Last durch WP-Abfragen wohl nur äußerst gering ist, es sei denn natürlich die Abfrage ob sich der Held in einem Trigger befindet verursacht eine größere Last. Das müsste man abwägen)
Aber ich bin nur ein Leihe, wirklich Ahnung vom Gothic-Scripting habe ich nicht :D

Ken Suyoko
07.06.2011, 20:31
zu den nachteilen wenn du kein portal hast :

eindeutig die performance.. sachen die nur gerendert werden wenn se gebraucht werden sind immer gut.

Desweiteren die Ästhethik.. Ohne portal ists in deiner Höhle viel zu hell.. da kommt keine atmosphäre und keine stimmung auf. In der höhle ist es Taghell -> nichtmal beleuchtung wird gebraucht, bzw lässt sich sinnvoll setzen.

Wenn die höhle einen besitzer haben soll, kann man ihn so nun doch beklauen.. außer du erweiterst deine trigger-skripte auf einen kompletten check des inventars...

so far.. wenn du die punkte vernachlässigen willst, spricht nichts gegen ein "trigger-portal"

Zaphod Beeblebrox
07.06.2011, 20:44
zu den nachteilen wenn du kein portal hast :

eindeutig die performance.. sachen die nur gerendert werden wenn se gebraucht werden sind immer gut.

Desweiteren die Ästhethik.. Ohne portal ists in deiner Höhle viel zu hell.. da kommt keine atmosphäre und keine stimmung auf. In der höhle ist es Taghell -> nichtmal beleuchtung wird gebraucht, bzw lässt sich sinnvoll setzen.

Wenn die höhle einen besitzer haben soll, kann man ihn so nun doch beklauen.. außer du erweiterst deine trigger-skripte auf einen kompletten check des inventars...

so far.. wenn du die punkte vernachlässigen willst, spricht nichts gegen ein "trigger-portal"

Die Höhle habe ich gebastelt und das Problem sind die sehr großen Übergänge innerhalb der Höhle. Portale müssen ja planar sein, denke ich doch, und dann ist es eben schwer. Die anderen Portal Vorteile sind an dieser Stelle im Spiel egal.

Da es Indoor compiliert wird, ist es dort ohne Licht stockfinster. In sofern reicht hier eine Triggerabfrage aus.

Sektenspinner
07.06.2011, 20:54
Nachteile sind Teleport, Cheats und die Unmöglichkeit mit Bögen durch Trigger mit Kollision zu schießen.

Waypointabfragen halte ich für die robustere Lösung.

Was man auch machen kann, je nach Raum, ist andere Umgebungen zu betrachten als Kugeln.
Etwa kann man auch fordern, dass für zwei Wegpunkte w1, w2 und einen Radius r > |w1 - w2| gilt:
|hero - w1| + |hero - w2| < r
Hierbei beschreibt |.| die Abstandsfunktion (nutze Pythagoras). Dadurch erhält man einen Ellipsoid der umso schmaler ist, je näher r an |w1 - w2| herankommt.

Wenn man Ikarus benutzt und WPs konsistent benennt, kann man auch prüfen ob der dem hero nächstgelegene WP ein bestimmtes Präfix im Namen trägt (z.B. "WP_MEINEHOEHLE_").
Aber das ist Fehleranfällig, weil man dann vielleicht doch mal einen WP mit falschem Namen setzt (je nach Größe der Höhle).

Oder man baut halt doch ein Portal... (Zaphod hat gesprochen)


Das setzt aber doch vorraus, dass die Position des Helden non-stop währen der Laufzeit überprüft bzw. die Distanzen abgefragt werden? Die Trigger werden jedoch nur einmalig betätigt und belasten das System nicht weiter. (Wenn auch die Last durch WP-Abfragen wohl nur äußerst gering ist, es sei denn natürlich die Abfrage ob sich der Held in einem Trigger befindet verursacht eine größere Last.Distanzabfragen sind eine absolut vertretbare Belastung und werden auch in großer Zahl keine merkliche Rechenzeit in Anspruch nehmen.

Lehona
07.06.2011, 20:58
Das setzt aber doch vorraus, dass die Position des Helden non-stop währen der Laufzeit überprüft bzw. die Distanzen abgefragt werden? Die Trigger werden jedoch nur einmalig betätigt und belasten das System nicht weiter. (Wenn auch die Last durch WP-Abfragen wohl nur äußerst gering ist, es sei denn natürlich die Abfrage ob sich der Held in einem Trigger befindet verursacht eine größere Last. Das müsste man abwägen)
Aber ich bin nur ein Leihe, wirklich Ahnung vom Gothic-Scripting habe ich nicht :D
Solch eine Last ist sowieso zu vernachlässigen, da man ja keine hochfrequenten Abfragen braucht. Zudem wird es wenig Unterschied geben.

Edit: Hör auf zu editieren, Sekti!

Klabautermann
07.06.2011, 21:28
Portale müssen ja planar sein, denke ich doch, und dann ist es eben schwer.

Portale müssen nich planar sein.
Zumindest nicht normale. Kann mir eigentlich nicht vorstellen, dass die Dinger Indoor anders funktionieren.
Die Sachen, die im Wiki stehen, basieren denke ich mal auf einer älteren Engine-Version. Man liest oft etwas von "derzeit" und "noch".
Auch weiß ich nicht, in wie weit sich das ganze bei G2 geändert hat.
Was von den ganzen Bedingungen für Indoorlevel nun wirklich stimmt, kann denke ich keiner so recht sagen.

Dalai Zoll
07.06.2011, 22:51
Tut mir Leid wenn ich mich irre, aber wäre es nicht völlig ausreichend beim äußeren Trigger eine Varible auf 0 zu setzen und beim inneren Trigger selbige Variable auf 1? An dieser einen Variable kann man nun ablesen ob der Held drinnen ist oder draussen, ohne irgendwelche zusätzlichen Abfragen. Natürlich müsste man noch so spezielle Fälle wie Teleportation berücksichtigen.

Mfg
Machtl

Es würde mir nicht reichen, denn wen du den inneren Trigger auslösest, dann wird eine Funktion ausgelöst und wenn du die Höhle wieder verlässt, wird diese Funktion noch einmal ausgelöst, was unerwünscht ist und zu Bugs führt. Es hilft auch nicht, den Trigger einzustellen dass er nur einmal auslöst, denn wenn man rausgeht und wieder rein, dann meldet er nicht mehr, dass der Hero drin ist.
Auserdem habe ich noch eine Sonderfunktion, dafür brauche ich die Wechselseitige Auslösung mit der doppelten Variablen.



@all
Das mit dem Licht ist für mich kein Argument, denn das ist ein reiner Indoor Level.

Bogenschiessen .. kann man trotzdem, die Trigger sind grossflächig, dass man nicht drüberspringen kann und flach.

Teleport ... gibt es nicht in der Höhle.

Cheats? warum sollte man beim modden Rücksicht auf Cheater nehmen die sich bequemerweise zu Waypoints teleportieren?

Wichtig ist für mich, dass man abfragen kann ob der Hero drin ist und das funktioniert ausgezeichnet.

Und schön, dass es ja doch noch eine Diskussion gab, mit anderen Argumenten, als dass diese Art und Weise umständlich sei. Denn eigentlich hatte ich ja nach den Nachteilen gefragt und nicht wie andere das machen und dass ich ein Umstandskrämer sei.. Der Konstrukt hat schon seinen Grund, ausser dass wir da kein Portal haben.

Der Ahnungslose
07.06.2011, 23:28
[...]
Cheats? warum sollte man beim modden Rücksicht auf Cheater nehmen die sich bequemerweise zu Waypoints teleportieren?
[...]


Wie recht Du hast. Richtig so!

Zu Deiner Herangehensweise: Ich sah mich auch gezwungen in "Die Zeit der Prophezeiung" den einen oder anderen BoundingBox-Trigger mit sehr netten und interessanten Sonderbefehlen und Prüfroutinen einzubauen. Funktioniert alles schon mehrere Monate geschmeidig und fehlerfrei. Die Frage nach Nachteilen oder Sinnhaftigkeit kam mir deshalb nie in den Sinn. Meinen Segen hast Du.

NicoDE
08.06.2011, 10:16
Cheats? warum sollte man beim modden Rücksicht auf Cheater nehmen die sich bequemerweise zu Waypoints teleportieren?Mod-Entwickler sind die besten Cheater :)

Manchmal ist es hilfreich seine eigene Modifikation testen zu können, ohne den ganzen offiziellen Spielzyklus zu durchlaufen.

Der Ahnungslose
08.06.2011, 18:15
Mod-Entwickler sind die besten Cheater :)

Manchmal ist es hilfreich seine eigene Modifikation testen zu können, ohne den ganzen offiziellen Spielzyklus zu durchlaufen.

Auch hier passt:


Wie recht Du hast. Richtig so!

Aber das ist eine andere Geschichte. Ich gebe mal ein sehr beliebtes Beispiel aus Gothic I, an dem sich scheinbar jeder stört, aber das auch ganz gut dazu geeignet ist, zu zeigen, was ein Mod-Ersteller m. M. nach nicht berücksichtigen muss: Die Tatsache, dass man in die Burg gelangt, wenn man mit gezogener Waffe einfach durchrennt! Das lässt sich, wie auch schon die eine oder andere Mod gezeigt hat, fixen. Der eifrige Cheater kommt aber trotzdem rein: Entweder mit "goto waypoint <WP_NAME>" oder er stellt sich an die Burgmauer und drückt die Taste "k" oder er schlüpft mit "o" in einen anderen NPC und läuft einfach geschmeidig in die Burg oder ... oder... Das alles abzufangen geht definitiv zu weit. Wer cheaten will, der darf das gerne tun, darf aber meiner Meinung nach nicht erwarten, dass dies keine Auswirkungen auf das Gameplay hat.

Der Modder sollte immer den Anspruch haben, dem Spieler seiner Mod, ein reibungsloses Spielvergnügen, d.h. ohne auf Cheats zurückgreifen zu müssen, zu ermöglichen. Was man so liest, klafft hier bedauerlicherweise oftmals zwischen Realität und Anspruch eine mehr oder weniger große Lücke.

Um zum Ende hin nochmals die Kurve zu kriegen; Dalai sollte gedankenlos seinen BoundingBox-Trigger verwenden dürfen. Wer zu faul ist zum Laufen und stattdessen lieber "goto waypoint" feuert, hat Pech gehabt und verdirbt sich das Gameplay. Selbst schuld.