1. Bitte schaltet eure Ad Blocker aus. SLinfo kann nur betrieben werden, wenn es durch Werbung Einnahmen erzielt. Vielen Dank!!
    Information ausblenden
  2. 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.
    Information ausblenden
  3. 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.
    Information ausblenden

Kollisionen mit Regionen ohne Zutritt erkennen

Dieses Thema im Forum "Fragen zu Scripting" wurde erstellt von Jenna Felton, 5. Juni 2008.

  1. Jenna Felton

    Jenna Felton Superstar

    Beiträge:
    2.001
    Zustimmungen:
    64
    Punkte für Erfolge:
    64
    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
     
  2. Carlos Philbin

    Carlos Philbin Freund/in des Forums

    Beiträge:
    614
    Zustimmungen:
    0
    Punkte für Erfolge:
    0
    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
     
  3. Jenna Felton

    Jenna Felton Superstar

    Beiträge:
    2.001
    Zustimmungen:
    64
    Punkte für Erfolge:
    64
    Danke Carlos, werde ich testen. Eine Sonde vorfliegen zu lassen ist mir nicht eingefallen, die Idee ist wirklich gut. 8)
     
  4. Jenna Felton

    Jenna Felton Superstar

    Beiträge:
    2.001
    Zustimmungen:
    64
    Punkte für Erfolge:
    64
    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
     
  5. Carlos Philbin

    Carlos Philbin Freund/in des Forums

    Beiträge:
    614
    Zustimmungen:
    0
    Punkte für Erfolge:
    0
    Danke für die Rückmeldung und weiterhin guten Flug!

    Carlos
     
  6. Dil Spitz

    Dil Spitz Nutzer

    Beiträge:
    57
    Zustimmungen:
    0
    Punkte für Erfolge:
    0
    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
     
  7. Jenna Felton

    Jenna Felton Superstar

    Beiträge:
    2.001
    Zustimmungen:
    64
    Punkte für Erfolge:
    64
    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
     
  8. Ezian Ecksol

    Ezian Ecksol Guest

    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 ...
     
  9. Jenna Felton

    Jenna Felton Superstar

    Beiträge:
    2.001
    Zustimmungen:
    64
    Punkte für Erfolge:
    64
    Hallo Ezian

    Das habe ich so der Wiki entnommen:

    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
     
  10. Ezian Ecksol

    Ezian Ecksol Guest

    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.
     
  11. Hannibal Hudson

    Hannibal Hudson Superstar

    Beiträge:
    1.566
    Zustimmungen:
    0
    Punkte für Erfolge:
    46
    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
     
  12. Ezian Ecksol

    Ezian Ecksol Guest

    Thx, aber llScriptDanger ist depreciated, wie man so schön sagt. Aus dem Wiki:


     
  13. Jenna Felton

    Jenna Felton Superstar

    Beiträge:
    2.001
    Zustimmungen:
    64
    Punkte für Erfolge:
    64
    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.
     
  14. Ezian Ecksol

    Ezian Ecksol Guest

    llGetRegionName()


    Nein, meines Wissens nicht. Man muss halt schauen, dass man nicht so viel von Parcels gebannt wird :lol:
     

Diese Seite empfehlen

  1. Diese Seite verwendet Cookies, um Inhalte zu personalisieren, diese deiner Erfahrung anzupassen und dich nach der Registrierung angemeldet zu halten.
    Wenn du dich weiterhin auf dieser Seite aufhältst, akzeptierst du unseren Einsatz von Cookies.
    Information ausblenden