• Bitte schaltet eure Ad Blocker aus. SLinfo kann nur betrieben werden, wenn es durch Werbung Einnahmen erzielt. Vielen Dank!!
  • Wir freuen uns, wenn du dich in unserem Forum anmeldest. Bitte beachte, dass die Freigabe per Hand durchgeführt wird (Schutz vor Spammer). Damit kann die Freigabe bis zu 24 Stunden dauern.
  • Wir verwenden Cookies, um Inhalte und Anzeigen zu personalisieren, Funktionen für soziale Medien anbieten zu können und die Zugriffe auf unsere Website zu analysieren. Sie geben Einwilligung zu unseren Cookies, wenn Sie unsere Webseite weiterhin nutzen.

Kollisionen mit Regionen ohne Zutritt erkennen

Jenna Felton

Superstar
Hallo, ich habe da eine Frage. Keine Ahnung wie simple die Antwort ist. Das Problem. Ich erprobe gerade ein Flugobjekt. Das besteht im Grunde aus einer Sphere von 2m Durchmesser (soll ein Kraftfeld darstellen), mit mir in der Mitte. Die Sphere ist während des Fluges physikalisch, zum ein/aussteigen phantom.

In den Wolken macht es damit weniger Spass, in der Bodennähe gibt es aber diese roten Zäune und Regionen wo ich unerwünscht bin, warum auch immer. Bei letzteren bekomme ich bloß eine Meldung 'Cant cross banned region' oder so ännlich. Bei den ersteren kommt es aber vor, dass die Sphere halb im Zaun hängen bleibt, weil er ja nur mich aufgehalten hat und nicht mein Kraftfeldprim, und ich mich dann nirgends mehr bewegen kann. Zumindest interpretiere ich das so. Ich muss dann aus- und wieder einsteigen um weiter zu fleigen.

Meine Frage. Kann ich solche Situationen skriptmäßig automatisch erkennen um die Sphere wenigstens auf phantom zu setzen, und evtl. auf die Position von vor 1s. zu verschieben, oder gibt es sogar eine andere Möglichkeit mich (den Piloten) vor solchen Regionen zu warnen?

Danke und LG
Jenna
 
Hast du schon ausprobiert ob eine der Collison Funktionen oder Events auf diese Bannzäune "reagieren"? Ich weiß es leider nicht.

Bei diversen herumlaufenden Flohzirkussen sind Kollisionsmelder eingebaut.
Das heißt, der Hund generiert periodisch ein unsichtbares Objekt, das in Laufrichtung losgeschickt wird. Ohne Kollision löscht sich dieses Objekt nach einer vorgegebenen Zeit.
Bei Kollision mit Objekten/Avataren schickt es eine Meldung zurück, die dann ausgewertet werden kann.

Guten Flug
Carlos
 
Danke Carlos, werde ich testen. Eine Sonde vorfliegen zu lassen ist mir nicht eingefallen, die Idee ist wirklich gut. 8)
 
Hallo Carlos

Ok, die Frage kann ich beantworten, auf den Roten Zaun reagieren die Objekte nicht, zumindest nicht mit den drei collision Ereignissen, und auch nicht mit changed. Wobei das changed Ereignis wenigstens den Regionwechsel mitbekommt, das reicht aber nicht.

Außerdem wird das collision Ereignis geworfen, wenn ein anderer Objekt in das meine reinfährt, nicht wenn mein Objekt in etwas hineinrast.

Ich habe das Steckenbleiben jedenfals dadurch gelöst dass ich die Sphere anklicken kann um sie Phantom zu setzen. Ein Warnsystem wäre da natürlich schöner. Mal sehen.

Schöenen Morgen dann von
Janna
 
Hey Jenna,

ich segel ganz gerne und mag die ban-lines auch gar nicht.
Irgendwo in meinem inventory hatte ich mal ein radar fuer ban-lines. Das konnte die flaechen mit ban-lines irgendwie anzeigen.
Da es nur "irgendwo im inventory" ist und ich noch immer segle, wars wohl nich so toll, aber zumindest ist die ban-line abfragbar.

Wenns dir wichtig ist such ichs (kann dann aber etwas dauern) und sag dir den creator.

Ciao
DilSpi
 
Hallo und danke für den Post DS

Das hört sich gut an, so lebensnotwendig ist das aber auch nicht. Zwei mal klicken und ist man frei. Außerdem lernt man so besser der Straße oder dem Fluss zu folgen (ist echt nicht einfach :) )

Wenn Du es aber irgendwann findest, würde ich mich darauf freuen :)

LG,
JF
 
Jenna Felton schrieb:
Außerdem wird das collision Ereignis geworfen, wenn ein anderer Objekt in das meine reinfährt, nicht wenn mein Objekt in etwas hineinrast.
Doch, der collision_start reagiert, egal wer die Kollision auslöst.

Hm, Frühwarnsystem. Ich habe mich das auch schon bei der ähnlichen Fragestellung gefragt, wie ich Noscript-Zonen erkennen kann. Für eure Vehicle sind die nicht tragisch, weil deren Scripte da funktionieren.

Zum Frühwarnsystem wurde der Vorschlag gemacht, Objekte in Flugbahn zu rezzen und deren Rückmeldung oder fehlende Rückmeldung auszuwerten. Dabei ist mir eingefallen, dass es einfacher geht.

Via llGetParcelFlags auf der zukünftigen wahrscheinlichen Flugbahn abfragen, welche Rechte das Parcel hat.

Die Flags:

PARCEL_FLAG_USE_ACCESS_LIST
PARCEL_FLAG_ALLOW_ALL_OBJECT_ENTRY

und ggf. noch
PARCEL_FLAG_ALLOW_SCRIPTS

sollten einem darüber Auskunft geben, ob der Weg passierbar ist ...
 
Hallo Ezian

Ezian Ecksol schrieb:
Jenna Felton schrieb:
Außerdem wird das collision Ereignis geworfen, wenn ein anderer Objekt in das meine reinfährt, nicht wenn mein Objekt in etwas hineinrast.

Doch, der collision_start reagiert, egal wer die Kollision auslöst...

Das habe ich so der Wiki entnommen:

http://wiki.slinfo.de/wakka.php?wakka=HomePage/Ereignis/collision schrieb:
collision(integer num_detected)

Zusammenstöße lösen diesen Event aus, wenn ein Objekt oder ein Avatar mit dem Objekt zusammenstößt, dem das Script hinzugefügt ist.

Analog steht für die Start- und endEreignisse. Zuvor hatte ich das aber geprüft, mit diesem Skript:

Code:
debug(string text) {
	llOwnerSay("DEBUG : " + text);
}

string isTrue(integer arg){
	if (arg) return "TRUE";
	return "FALSE";
}

default {
	
	state_entry() {
		debug("default:state_entry()");
	}

	touch_start(integer total_number){
		debug("touch_start("+(string)total_number+")");
	}

	changed(integer change)	{
		debug("changed("+(string)change+")");
		debug(" -> change & CHANGED_INVENTORY    = "
							+isTrue(change & CHANGED_INVENTORY));
		debug(" -> change & CHANGED_COLOR        = "
							+isTrue(change & CHANGED_COLOR));
		debug(" -> change & CHANGED_SHAPE        = "
							+isTrue(change & CHANGED_SHAPE));
		debug(" -> change & CHANGED_SCALE        = "
							+isTrue(change & CHANGED_SCALE));
		debug(" -> change & CHANGED_TEXTURE      = "
							+isTrue(change & CHANGED_TEXTURE));
		debug(" -> change & CHANGED_LINK         = "
							+isTrue(change & CHANGED_LINK));
		debug(" -> change & CHANGED_ALLOWED_DROP = "
							+isTrue(change & CHANGED_ALLOWED_DROP));
		debug(" -> change & CHANGED_OWNER        = "
							+isTrue(change & CHANGED_OWNER));
		debug(" -> change & CHANGED_REGION       = "
							+isTrue(change & CHANGED_REGION));
		debug(" => change & CHANGED_TELEPORT     = "
							+isTrue(change & CHANGED_TELEPORT));
	}

	collision(integer total_number)	{
		debug("collision("+(string)total_number+")");
	}

	collision_start(integer total_number) {
		debug("collision_start("+(string)total_number+")");
	}

	collision_end(integer total_number) {
		debug("collision_end("+(string)total_number+")");
	}

}

Ich habe den Prim dann in der Gegend rumgeschoben, durch den Zaun und in den Boden. Mittels Pfeile im Bearbeitungsmodus. Dabei hat er nur dem Regionwechsel angezegt. Über Kollision hat er nur dann angefangen zu meckern, wenn ich persönnlich in diesen hineingelaufen bil oder daran getrampelt habe.

Habe ich mir da irgendwas zu einfach gemacht? Ich werde es nochmals prüfen und auch Deinen Vorschlag, llGetParcelFlags zu bemühen. Die Doku ist da vielversprechend, keine Ahnung wie ich den Befehl übersehen habe.

Danke und Grüsse
Jenna
 
Ich hab in einem Attachement collision_start drin, um zu prüfen, wer mich mit irgendwas beschießt. Da musste ich dann ziemlich sieben, bis nur noch das übrig blieb, weil unfiltert auch immer alles durchkam, wo ich gegen renne. Einschließlich Primboden, auf dem ich gehe.

Ja, die Parcelflags sind vielversprechend. Werd ich auch mal ausprobieren, um NoScript-Zonen festzustellen für so ein Haustierchen, was über die Sim läuft. Das blöde ist da ja immer, wenn es in einer Noscript-Zone steckt, steht das Script und nichts geht mehr.
 
Wenn du ganz allgemein wissen möchtest, ob gefahr besteht für ein Script:
llScriptDanger(Vector) ist allerdings ungenauer, da man nur TRUE oder FALSE zurückerhält, und nicht genau weiß was das Problem an der Koordinate ist.

MfG
Hannibal
 
Hallo wieder

Sorry für die Schweigewoche, ich bin in einem anderen Projekt stecken geblieben, was ich evtl. hier noch ausformullieren werde.

Also ich habe den Vorschlag ausprobiert, bin auf Terminous/110/ 200/96/ einen roten Zaun gefunden und davor diesen Test gemacht. Der Code ist dann etwas geändert:

Code:
integer SECTORS   = 12;
float   RADIUS    = 10;

float   delta;

debug(string text) {
	llOwnerSay("DEBUG : " + text);
}

string appendBFConst(string toStr, string cnstName, integer append) {
	if (!append) return toStr;
	if (toStr != "") toStr = toStr + "|";
	return toStr + cnstName;
}

init() {
	delta = 2*PI/SECTORS;
}

showParcelFlags(vector position){
	integer flags = llGetParcelFlags(position);
	string  rs    = "";

	rs = appendBFConst(rs, "PARCEL_FLAG_ALLOW_FLY",
			flags & PARCEL_FLAG_ALLOW_FLY);
	rs = appendBFConst(rs, "PARCEL_FLAG_ALLOW_SCRIPTS",
			flags & PARCEL_FLAG_ALLOW_SCRIPTS);
	rs = appendBFConst(rs, "PARCEL_FLAG_ALLOW_LANDMARK",
			flags & PARCEL_FLAG_ALLOW_LANDMARK);
	rs = appendBFConst(rs, "PARCEL_FLAG_ALLOW_TERRAFORM",
			flags & PARCEL_FLAG_ALLOW_TERRAFORM);
	rs = appendBFConst(rs, "PARCEL_FLAG_ALLOW_DAMAGE",
			flags & PARCEL_FLAG_ALLOW_DAMAGE);
	rs = appendBFConst(rs, "PARCEL_FLAG_ALLOW_CREATE_OBJECTS",
			flags & PARCEL_FLAG_ALLOW_CREATE_OBJECTS);
	rs = appendBFConst(rs, "PARCEL_FLAG_USE_ACCESS_GROUP",
			flags & PARCEL_FLAG_USE_ACCESS_GROUP);
	rs = appendBFConst(rs, "PARCEL_FLAG_USE_ACCESS_LIST",
			flags & PARCEL_FLAG_USE_ACCESS_LIST);
	rs = appendBFConst(rs, "PARCEL_FLAG_USE_BAN_LIST",
			flags & PARCEL_FLAG_USE_BAN_LIST);
	rs = appendBFConst(rs, "PARCEL_FLAG_USE_LAND_PASS_LIST",
			flags & PARCEL_FLAG_USE_LAND_PASS_LIST);
	rs = appendBFConst(rs, "PARCEL_FLAG_LOCAL_SOUND_ONLY",
			flags & PARCEL_FLAG_LOCAL_SOUND_ONLY);
	rs = appendBFConst(rs, "PARCEL_FLAG_RESTRICT_PUSHOBJECT",
			flags & PARCEL_FLAG_RESTRICT_PUSHOBJECT);
	rs = appendBFConst(rs, "PARCEL_FLAG_ALLOW_ALL_OBJECT_ENTRY",
			flags & PARCEL_FLAG_ALLOW_ALL_OBJECT_ENTRY);
	rs = appendBFConst(rs, "PARCEL_FLAG_ALLOW_GROUP_OBJECT_ENTRY",
			flags & PARCEL_FLAG_ALLOW_GROUP_OBJECT_ENTRY);

	if (rs == "") rs = "NONE";
	debug("-> Parcel flags = "+rs);
}

start() {
	vector  pos = llGetPos();
	integer i;

	for (i = 0 ; i < SECTORS ; ++i) {
		float theta = delta*i;
		float x     = pos.x + RADIUS*llCos(theta);
		float y     = pos.y + RADIUS*llSin(theta);

		vector posAt = <x, y, pos.z>;
		
		debug("Locator position: "+(string)pos+"m, "+
			(string)llGetParcelDetails(pos, 
				[PARCEL_DETAILS_NAME]));
		debug("Sector "+(string)i+": Position: "+
			(string)posAt+"m");
		showParcelFlags(posAt);
	}
}


default {
	state_entry() {
		init();
	}

	touch_start(integer total_number){
		if (llDetectedKey(0) == llGetOwner()) start();
	}
}

Auf der Position, wo ich stehen kann, also vor dem Zaun ist die Ausgabe diese hier:

Code:
Locator position: <110.38898, 210.50911, 96.92715>m, K-Palace, Knowledge Navigation Nexus, Welcome Area  
Sector 0: Position: <120.38898, 210.50911, 96.92715>m
-> Parcel flags =
	PARCEL_FLAG_ALLOW_FLY|
	PARCEL_FLAG_ALLOW_SCRIPTS|
	PARCEL_FLAG_ALLOW_LANDMARK|
	PARCEL_FLAG_ALLOW_CREATE_OBJECTS|
	PARCEL_FLAG_USE_BAN_LIST|
	PARCEL_FLAG_LOCAL_SOUND_ONLY|
	PARCEL_FLAG_RESTRICT_PUSHOBJECT|
	PARCEL_FLAG_ALLOW_ALL_OBJECT_ENTRY|
	PARCEL_FLAG_ALLOW_GROUP_OBJECT_ENTRY

Hinter dem Zaun, wo ich nicht hin kann, ist die Liste anders.

Code:
Sector 9: Position: <110.38898, 200.50911, 96.92715>m
-> Parcel flags =
	PARCEL_FLAG_ALLOW_FLY|
	PARCEL_FLAG_ALLOW_LANDMARK|
	PARCEL_FLAG_USE_ACCESS_LIST|
	PARCEL_FLAG_USE_BAN_LIST|
	PARCEL_FLAG_LOCAL_SOUND_ONLY|
	PARCEL_FLAG_RESTRICT_PUSHOBJECT

Die Sim [libary:cbc3c380da]Abk. [Simulator] ist eine [Insel] oder größte zu kaufende [Landeinheit]. Eine [Sim] kostet ca. 1500 US-$ und monatl. Kosten von ca. 280 US-$[/libary:cbc3c380da] heißt Terminous. Ich glaube ich übersehe einiges in Wiki. Zum Beispiel wie bekomme ich den Simnamen anstele des Parzellnamen.

Was mich jetzt auch interessiert, kann ich irgendwie ermitteln, ob ich auf der Banliste oder Zugriffsliste für die Parzelle stehe. Weil der verbotene Bereich setzt tatsächlich PARCEL_FLAG_USE_ACCESS_LIST, aber dann würde der 'Locator' auch vor Zäunen warnen, die mich durchlassen würden. Falls ich es richtig verstanden habe.

Ansonsten ist der Tip gut und sehr brauchbar.

Vielen Dank an alle Beteiligten 8)

grüsst und sagt
Jenna

EDIT

Das Problem habe ich hier beschrieben: http://www.slinfo.de/phpbb/viewtopic.php?p=220654#220654

Ich wollte dem Fluchzeug zwei Rauchspuren rot und grün spendieren die tagsüber sichtbar sind und als Positionslichter dienen. Habe aber keine Ahnung von Partikelsystemen, also ein interaktiv anpassbarer Partikelgenerator, als Unterprojekt.
 
Jenna Felton schrieb:
wie bekomme ich den Simnamen anstele des Parzellnamen.

llGetRegionName()


Jenna Felton schrieb:
Was mich jetzt auch interessiert, kann ich irgendwie ermitteln, ob ich auf der Banliste oder Zugriffsliste für die Parzelle stehe. Weil der verbotene Bereich setzt tatsächlich PARCEL_FLAG_USE_ACCESS_LIST, aber dann würde der 'Locator' auch vor Zäunen warnen, die mich durchlassen würden. Falls ich es richtig verstanden habe..
Nein, meines Wissens nicht. Man muss halt schauen, dass man nicht so viel von Parcels gebannt wird :lol:
 

Users who are viewing this thread

Zurück
Oben Unten