GridTalk.de
Textur Switcher mit Buttons - Druckversion

+- GridTalk.de (https://www.gridtalk.de)
+-- Forum: Werkstatt (https://www.gridtalk.de/forumdisplay.php?fid=4)
+--- Forum: Scripting (https://www.gridtalk.de/forumdisplay.php?fid=23)
+--- Thema: Textur Switcher mit Buttons (/showthread.php?tid=198)

Seiten: 1 2


Textur Switcher mit Buttons - Leonardo Buechi - 09.11.2010

Hallo zusammen, hätte da wieder mal ne Frage ... Wink

wie baut man zwei Knöpfe für einen Texturswitcher vor & zurück.
Das script für den switcher ist Textbasierend, möchte aber zusätzlich manuell vor und zurück switchen

Code:
integer channel=0;
integer listen_handle;
string texture;


default
{
    state_entry()
    {
        llWhisper(0,"Touch me to begin");
    }

    listen( integer channel, string name, key id, string message)
    {
        listen_handle = llListen (channel, "", NULL_KEY , "");
        if (llGetInventoryType(message) == INVENTORY_TEXTURE)
        {
            llWhisper(0,"Changing texture");
            llSetLinkPrimitiveParamsFast(LINK_SET,[PRIM_TEXTURE,ALL_SIDES,message,<1,1,1>,<0,0,0>,0]);
        }
        else
        {
            llWhisper(0,message+" not found in inventory");
        }
    }
    
    touch_start(integer total_number)
    {
        list       result = [];
        integer    n = llGetInventoryNumber(INVENTORY_TEXTURE);
        string temp;
        llWhisper(0,"Say the name of the texture you want");

        while(n)
        {
            temp = llGetInventoryName(INVENTORY_TEXTURE, --n);
            llWhisper(0,temp);
            result =  temp + result;
        }

        listen_handle = llListen (channel, "", NULL_KEY , "");
        llSetTimerEvent(30);
    }
    
    timer()
    {
        llWhisper(0,"No longer listening, touch to change texture");
        llListenRemove(listen_handle);
         llSetTimerEvent(0);
    }
}



Wer kann mir einen vorwärts und rückwärts Button scripten dass man es mit dem obigen script verlinken kann ?



Re: Textur Switcher mit Buttons - cedra - 10.11.2010

(09.11.2010, 20:50)Leonardo Buechi link schrieb: Hallo zusammen, hätte da wieder mal ne Frage ... Wink

wie baut man zwei Knöpfe für einen Texturswitcher vor & zurück.
Das script für den switcher ist Textbasierend, möchte aber zusätzlich manuell vor und zurück switchen

Code:
integer channel=0;
integer listen_handle;
string texture;


default
{
    state_entry()
    {
        llWhisper(0,\"Touch me to begin\");
    }

    listen( integer channel, string name, key id, string message)
    {
        listen_handle = llListen (channel, \"\", NULL_KEY , \"\");
        if (llGetInventoryType(message) == INVENTORY_TEXTURE)
        {
            llWhisper(0,\"Changing texture\");
            llSetLinkPrimitiveParamsFast(LINK_SET,[PRIM_TEXTURE,ALL_SIDES,message,<1,1,1>,<0,0,0>,0]);
        }
        else
        {
            llWhisper(0,message+\" not found in inventory\");
        }
    }
    
    touch_start(integer total_number)
    {
        list       result = [];
        integer    n = llGetInventoryNumber(INVENTORY_TEXTURE);
        string temp;
        llWhisper(0,\"Say the name of the texture you want\");

        while(n)
        {
            temp = llGetInventoryName(INVENTORY_TEXTURE, --n);
            llWhisper(0,temp);
            result =  temp + result;
        }

        listen_handle = llListen (channel, \"\", NULL_KEY , \"\");
        llSetTimerEvent(30);
    }
    
    timer()
    {
        llWhisper(0,\"No longer listening, touch to change texture\");
        llListenRemove(listen_handle);
         llSetTimerEvent(0);
    }
}

Wie meinen "Textbasierend" ??? Also ich finde das ein ganz schreckliches Script verzeihe ...

Es giebt mehre Möglichkeiten ein "Button" in einem Automaten zu etablieren, oder mehre.

Erste währe via einem Listen wie Du da im Script hast und im Button ein Script was das auslösen bewierkt beim weiter Switchen...

Listen Event im Haupt-Script :
Code:
integer lampen_kanal=88;
default
{
    state_entry(){
    llListen(lampen_kanal,"",NULL_KEY,"");
    }
    
    listen( integer channel, string name, key id, string message ){
    if (message == "kill"){
    llDie();
    }
}

Say touch funktion im Script für den Button:
Code:
touch_start(integer irgendwas){
llWhisper(lampen_kanal,"kill");
}

ABER SO WAS NIMMT MAN NIEMALS FÜR EINEN AUTOMATEN !!! Sprich ein Automat ist für mich ein Object mit mehren Prims die verlinkt sind und 1 oder mehre Buttons, wie Funktionen in form von Scripts beinhaltet. Es giebt wenig fälle wo man auf diese "Komunikation" greiffen MUSS. Nämlich wen z.B. 2 Automaten die nicht verlinkt sind daten austauschen müssen. Dies funktioniert Region weit (also Sim weit).
Eine weitere Anwendung kann bei einem Reezer Vendor sein, den auch da sind die Automaten nicht verlinkt.

2te Möglichkeit ist via einem linkedMessage Event und in den Buttons ein script was eben dem Haupt Script eine weiter switschen mitteilt.

Im Haupt Script der Event :
Code:
link_message(integer sender_num, integer num, string str, key id){
    if(str=="forward"){++invLoopCount;++count_real;
    if (count_real > invCount){invLoopCount = 0;count_real = 1;}
    tex_name=llGetInventoryName(INVENTORY_TEXTURE, invLoopCount);
    llSetPrimitiveParam([PRIM_TEXTURE,2,tex_name,<1,1,0>,<0,0,0>,0,PRIM_TEXTURE,4,tex_name,<1,1,0>,<0,0,0>, 0]);
    llSetText("Free Stein Textures \n Textur-Name :"+ (string) tex_name + "\n Textur-Nummer :"+ (string) count_real +" of "+ (string) invCount,<1.0,1.0,1.0>, 1);}
}

Im Button das Script :
Code:
default
{
    touch_start(integer total_number)
    {
    llMessageLinked (LINK_ROOT, 0, "forward", NULL_KEY);
    }
}

So was kann man schon eher benutzen als Buttons bei einem Automaten. Mache ich aber eher nicht, sehr gut ist dieser Event übrigens um etwas zu "buffern" da dieser Event ein Speicher Volumen bis zu 64 hat. Als beispiel ich habe sehr genau Zeit Messungen die sehr schnell ein Auswertungs Script erreichen sollten und vor allem abgearbeitet werden müssen (beispiel eine High Score Zeit Messung) kann man über diesen Event eben solche eingänge, zum beispiel bei Lags, buffern. Oder wen ein Button seinen over Text z.B. ändern können muss, nutze ich diese Tech eben so.
(anderes beispiel, Sensor hat eine grösse von 16... bzw Listen)

3te und beste Möglichkeit aus meiner sicht ist das ganze in einem einzigem Haupt-Script zu integrieren in dem man analysiert Welcher Button am Automaten gedrückt wurde. Im Fach Chargon sagt man es wird analysiert welches Prim im LinkSet angeklickt wurde.

Ein Einziges Script für Automaten Button Steuerung :

Code:
integer button;
default{

touch_start(integer irgendwas){
button = llDetectedLinkNumber(0);
    if(button==1){
    llSay(0,"Root-Prim wurde angeklickt");
    }else if(button==2){
    llSay(0,"Prim 2 wurde angeklickt");
    }else{
    }
}
}

Kein extra Script für den Button sauber klein und schnell. Wen man nun nicht direkt bewust verlinkt hatte kann man einfach ermitteln welches Prim im Linkset welche nummer hat, in dem man eine weitere llSay(0,(string) button); nach dem button = llDetectedLinkNumber(0); integriert.


Re: Textur Switcher mit Buttons - Leonardo Buechi - 10.11.2010

Vielen Dank für die Hnweise Big Grin nun kapiere ich überhaupt nichts mehr, wollte nur eine Lösung mit evt. Beispiel.
Aber jetzt habe ich keine Ahnung wo un wie man das implementiert.
Auch wenn das script Mist ist !? es erfüllt meinen Zweck. Dies wird ein Lexikon welches man nach Stichworten absucht via chat, aber manchmal muss man eben eine Seite vor oder zurück gehen können, ohne den Text im Chat anzugeben.

Ist dies Verständlich ? Besten Dank für einen weiteren Tip :'(


Re: Textur Switcher mit Buttons - cedra - 10.11.2010

Hmm !? Also ein Lexikon.. Naj also wen ein Lexikon willst, den mach doch enfach HTNL on Prim und setz die Wikipedia drauf an .. ^^

Also du müsstest mir mal den ganzen funktion umfang dieses Lexikons erklären .. was soll das den genau können ?

Ähm !??' um da bei deinem Script ein vor wie Zurück Button einsetzen zu können, müssen ma erst mal die ganze anzahl auslesen von den Texturen. Den wie soll das script wissen , wo es hin soll, wens nicht mal weiss wo es ist !???

Ein anderes Problem, denke ich wird eben auch der stand mit sich bringen . Du lässt z.B. Textur erklärung-1A anzeigen ... wo aber ist die erklärung-1A ??? Ist es die 1ste die 3te oder die 15e Textur im Inventar des Lexikons !???

Darum ! Die 2 Techs die da verknüpfen willst pssen schlecht zusammen. Die kombination von einer seits Texct suche und den aber auch Buttons für vor und zurück im selben Autom,aten !? Kann schwierig werden ...


Problem ist folgendes :

Wen wir ein Vendor betrachten mit screen und 2 Buttons für vor und zurück , den geht das immer über die gesamt Zahl an Texturen die dieser anzeigen können soll. Wen man also bei einem solchem die Texturen rein tut und den das Script des Vendors zurücksetzt , zählt dieses die gesammt anzahl Texturen , setzt die Textur 0 (achtung ! 0 ist die erste Textur im Prim Inventar ned 1) und weiss somit seinen Stand. Textur stand 0 also in Klar text für die leute den 1...

Drum sieht man so oft bei Vendoren Produkt 1/5 .. das heisst Produkt 1 von insgesammt 5 wird angezeigt ...

Jetzt ! switchen ma mal vor ... : 2/5 ... 3/5 ... 4/5 ... 5/5 .... 1/5 ... !!!! AHA !!!

Der Vendor "weiss" anhander der gesamt Zahl und seines standes, aha ! letzte Textur ich setze die erste wieder . Das kann der nur wissen weil er die gesammt Zahl und seinen Stand weiss.

Jetzt bei deinem Lexikon, DU suchst erklärung-2B .. das im Lexikon die Textur 23 ... Das Lexikon zeigt dir diesen sehr wohl an ! Aber hat keine ahnung das es Textur 23 im Lexikon ist. Es kann somit auch nicht "wissen", dass wen du eine Seite Vor willst, es eben die Textur 24 nehmen müsste.

Es weiss nicht wo es ist , somit weiss es auch nicht wo es hin soll.

Grund Satz : "Wen man nicht weiss wo man ist , weiss man auch nicht wie man dahin kommt wo man hin will"...

Da liegt im moment der Hund begraben, Dein Lexikon muss dahingehend weiter ausgebaut werden und ob eine solche kombination : also Buttons und Chat-Text anzeige , sagen wir mal "gut" zu realisieren ist weiss ich ned.

Gut möglich das die einrichtung ziemlich "manuel" wird und jedes update vom Lexikon weitere nach besserungen braucht, damit es dieses dan beinhaltet und bearbeiten kann.

Ein weiteres Problem bei manueler einrichtung von Automaten ist die Fehler anfälligkeit, so lange DU der das Buch gebaut hat dieses einrichtet, geht dies ja noch , wehe aber es hat kein Handbuch/Beschreibung zum Buch und jemand anderes würde da gerne was erweitern.... ^^

Ich denke, möglich ist es ! möglich ist fast alles vorstellbare in World via Scripts, aber wie ist die Frage ... !??

ich denke das beste würde sein eine art Inhalts Verzeichnis des Lexikons via NoteCard, was zugleich ne art indexer ist fürs script. Der Note Card Inhalt muss einfach haar exact mit dem Inhalt von Texturen im Lexikon sein ! UND ZWAR ZEILEN GENAU !

Sagen wir erste Textur ist das Titel Blatt "Leonardos Lexikon" ...

die textur heisst : titel_textur

in der NoteCard auf der ersten Zeile steht auch : titel_textur

Wir suchen via Chat eingabe : titel_textur

Unser Script "höhrt" das nun, rasst also mit der Info los : ich brauche den eintrag :titel_textur...

geht via dataserver event in die notecard und sucht die zeilen ab... bei unserem beispiel findet es diese auf Zeile 1 .. das übrigens wie Textur inhalt für das Script Zeile 0 ...

ah ! es ist existent ! es ist Zeile 0 .. also zeigen wir Textur 0 an ....

jetzt weiss das lexikon .. titel_textur ist das erste Blatt.. also bin ich stand 1 ... (intern stand 0)

Button 1+ ergiebt stand 2 usw ...

Die Problematik im moment liegt einfach noch da, dass das Lexikon keine Ahnung hat wo es ist. Was aber für Buttons erheblich ist.

Smile


Das einrichten ist so auch eher Manueler natur , sprich es ist mühsam und fehler anfällig.. Der Vorteil andere seits ist das man schön mit den Namen der Texturen arbeiten kann und diese auch für anzeige zwecke verwenden.

Eine Grenze wird aber auch die anzahl Texturen im Lexikon sein, also mehr als 400 wird kaum gehn ...

Aber die Idee ist gut ! Ich wollte auch schon mal ein In World Buch erstellen , aber komplett blätter bar ectra ... Das ist gut "machbar" , aber ich wollte schon vieles gut machbares erstellen wo dan nichts draus wurde , da ich anderes zu tun hatte.

PS: Wir können ja hier im Forum mal ein Workaround starten ;O)


Re: Textur Switcher mit Buttons - Leonardo Buechi - 11.11.2010

Vielen Dank cedra für Deine Analyse des Problems,

da stellt sich mir die Frage:

kann man in der v. 0.7.2 bereits eine Webseite auf einem Prim anzeigen und aktiv Themen abrufen, oder geht das nur via Webbrowser ? ???


Re: Textur Switcher mit Buttons - cedra - 11.11.2010

Also mit der 0.7.2 er Geht das wunder Bar ! Aber das Problem wird eher der Viewer werden/sein. Das funktioniert im moment nur mit dem Beta Viewer von LL .

Dein Projekt gefählt mir sehr gut ! Und ich helfe dir gerne hier bei. Aber wir haben da mehre Probleme ! Das schlimmste Problem ist das es ca. 500 Seiten währen.

Ich habe mal in ein Bildwechsler 2800 Texturen schieben wollen, der Grid ist abgestürzt und bis ich den Wechsler endlich wieder löschen konnte war ein riesen Kampf... Es waren schon 2800 Bilder , aber sehr kleine eigentlich 15-17 KB ...

Es ist so , dass Prim Inhalt 400 nicht überschreiten sollte, alles darüber wird sehr kritisch !

Also erstes Problem ist die Menge .... Ich fürchte auch , dass Deine Texturen grösser sind als 17KB !??

Sagen wir auch .. WEN wir es schaffen könnten die 500 Texturen direkt ins Buch zu packen ... Was währe wen es 501 Seiten werdfen müssten , im nach hinein !? Vieleicht müssen wir ja auch auf einmal 650 Seiten haben im Lexikon ?


Die Lösung via Web Seite , währe dahingehend natürlich viel besser, aber wie gesagt liegt da das Problem, dass noch längst nicht jeder den Beta Viewer von LL installiert hat und diese "Technik" aber im moment nur via diesem Funktioniert.
Ein Anderer Vorteil ist halt aber schon die dynamik von Web . So eingebunden währe es so , dass Du quasy ein Online Lexikon , in Form einer Web seite Führst, und aber in-World so bald du was bei der Web-Seite neu eintragst , direkt automatisch genauso enthalten sein wird ...

Der In-World Stand währe immer so aktuell wie die HomePage.

Dynamisch heisst eigentlich, nichts weiter als : automatisch ... (aus meiner sicht)

Aber ein anderes Problem ist dahin gehend : Man braucht a: ein Web Server und Space , wie idealer weisse eine Daten-Bank.
und b: eine "schwäche" ist auch , wen der Web-Server nicht läuft , läuft es In-World auch ned mehr...

Es ist für mich z.B. immer wieder eine heraus vorderung, ein Automat so zu erstellen das er einzig und alleine auf der Basis Plattform von SL bzw OS selbst läuft ohne auf externe resourcen angewissen zu sein.

Das Problem ist dahingehend oben beschrieben ...


Lösung ist eine art Inworld "Einrichtung" , so was ähnliches habe ich in Form des Rational Bild Wechsler's mal erstellt. Dieser vermag ein absolutes Maximum von 160'000 Bilder zu verwalten und nach zufall prinzip an zu zeigen . Der beinhaltet im moment die besagten 2800 Bilder auf meiner Sim. Den kann ich in Millisekunden Kopieren und davon wiederum 1000 Davon aufstellen .. ohne das es besonders viel mehr resourcen kostet.

Dessen Prinzip funktioniert über die Key's und eine Key liste , bzw bei mir 16 NoteCards mit Keys drin . Die Texturen liegen in Meinem Inventar vom Ava und sind nicht im Inhalt eines Prims .. Funktionieren Tut das auf dem Gesamten Grid , wen man Hyper Jumpt funktioniert der wechsler , so lange ich auf dem selben Grid anwesend bin ...

Ich denke diese Tech in einem Verbund mit den von dir angestrebten Funktionen : Listen Text eingabe suche, vor Zurück Buttons .

Währe am ehsten geeignet für dein Lexikon ... mit 500 Seiten geht das ganze sehr gut ... es könnte sein , das diese Tech ab etwa 5000 Seiten bischen Zeit braucht , sprich eine Text Suche mit name ginge vieleicht 2-3 Sekunden !???? ^^




Re: Textur Switcher mit Buttons - Leonardo Buechi - 12.11.2010

Hi cedra,

ich verstehe die Problematik, ergo versuche ich eine Lösung ......

Ansatz 1:

Hier ein Bild des Lexikons ---

[Bild: Lexikon_001.png]

somit könnte man die Geschichte unterteilen um zu grosse Datenmengen zu beschränken ?!

Jede Rolle (rechts) beinhaltet einen Buchstaben Suchbegriff, diese wird bei anklicken vor den Bilschirm gerezzt !

Gruss Leonardo


Re: Textur Switcher mit Buttons - cedra - 12.11.2010

AH ja hmmm JAAA !!! Das sehr schön !


ähhh O.o .. JA das es quasy Kapitel hat , also Sectionen finde ich auch sehr gut .. a.b.c.... hmm Aber brauchst ned das ganze abc.. für die Kapitel ?

Würde ergeben 26 Sectionen , die wir sagen ma mal in 1zelne Notecards setzen. So wird das Hauptscript gerade in bezug text suche entlastet.

26X400 =10400 .. JAA so passt mir das .. Das ist die Theoretische rechnung , wiviel Seiten das Buch maximal verwalten können wird. Das ist nämlich wie folgt. Ich rechne Pro NoteCard 400 Key's , also 400 Texturen. Diese Limite beziehe ich aber weniger von der Notecard's als mehr von der Limite das Prim Inhaltes, weil : Wir werden ja nicht 400 Texturen und deren Key von Hand eintragen.
Meine eigentliche Entwicklung beim "Rational-Bild Wechsler" ist weniger der Wechsler selber , als dessen Tool , der "Rational Key Lister". Das ist ein Script was aus dem Inhalt wo es liegt sämtliche Texturen Key ausliest und dan in eine Notecard ablegt, ziemlich automatisch. Jetzt muss man dazu aber noch wissen das LSL gar nicht befähigt ist , eine NoteCard zu erstellen und zu beschreiben. Das kann nur OSSL und das kann eine OS nur wen der Threat Level auf High ist : http://opensimulator.org/wiki/Threat_level

Der Key Lister benutzt : osMakeNotecard

Deshalb die Limite 400 Key's pro Notecard, da man schlicht wie mehrfach erwähnt nicht mehr Texturen in ein Prim zu packen sind. Deshalb hat der Bildwechsler auch ein top Maximum von 160'000 .. nämlich 400 NoteCard's mit jehweils 400 Key's , also 400X400

Wen wir also das Lexikon nach ABC.. sortieren haben wir 26 Notecards ...deren inhalt max. 400 Keys sind als 10400 Smile

HIHI !!! Joooaaaa aaaalsssoo , da haben wir bischen "spatzich" ^^

Jetzt mal als erstes mal eine Frage , exestieren den diese 500 Seiten bereits als Texturen oder werden die erst langsam nach und nach erstellt ?

Wir sind nun beim Thema Strucktur angelangt, aber nicht die des scripts , erst mal geht es um die vorder Gründige Strucktur des Buches. Diese musst nun DU Leonardo eigentlich bestimmen. Ich denke da z.B. an die Namen der Texturen bzw Seiten.

Man muss dazu wissen, im Inventar eines Avatares wird alles im Standat nach Datum und Uhrzeit sortiert, im Inhalt eines Prims wird immer alles nach ABC... sortiert angezeigt. Mein Tip ist nun in bezug der Arbeiten am Buch das alles so im Inventar ein zu richten , wie es den im Buch sein soll. Man kann das Inventar im übrigen auch auf ABC.. sortierung umschalten was ich für die Texturen und deren Namens Vergabe machen würde.

Es fragt sich auch wegen den Namen. man kann den Index des Buches auch dahingehend Manipulieren in dem man den namen zuvor ihre "Position" in der Liste mit einträgt .. das den der Fall von 01A, 02A usw...

Also Konkret , erstelle mal das Buch bzw. dessen Index in dem den Texturen die Namen so vergiebst das sie den auch da liegen wo sie sein sollen. und das mit dem Threat Level abklären , auf welchem Level die OS am laufen ist. Diesen muss man ja auch nur für die Kurze Zeit des key's einlesen's erhöhen .. Einzelne Texturen lassen sich auch später noch nach tragen ohne Probleme .

Aber wir wollen ja ned von 100en Texturen die Key's 1zel übertragen. ^^

Ähm !??? Wen weniger nach ABC als mehr nach Kapitel Namen sortiert haben möchtest würde ich bei der Namens definition auf das oben beschrieben Shema zurück greiffen also mit 01A ...

Mach lieber 001A,002A also 4 stellige , damit haben ma in dem Bereich genug spatzig für den sort ...

mit 01A haben wir für "nur" 99 Key's platz ... und wir müssen das ganze Buch durchgehend das selbe sortier Format haben , damit wir den diese definitionen einfach "ausschneiden" können. Also einfach die ersten 4 Stellen eines Textur Namens werden nicht beachtet .

ähm !?? man könnte sich nun fragen ja wiso ned einfach via Zahlen und das komische A !??? Das ist ja den eben die Sortierung im Bereich Kapitel, so könnte man auch den stand sehr direkt auslesen vom Buch .. wegen den Buttons, aber das machen wir mit ner Zählung bei der auslesung der noteCard.

den noch schnell eine Priese llKEY2Name ... ein löffelchen if's oder else's ... ähm ein Button fürs Text Suchen müssten ma noch haben , das machen wir schon wie im uhrsprungs Script von dir genau gleich, den noch 2 Pfeil Buttons .. und dan kanns los gehn... Smile

Leonardo !?? Ist den dein Grid oder deine OS HyperGrid'et !?? Den wen komm ich mal vorbei , musst mir nur die Login Uri und Port mal mitteilen.

Aber Heute wird das wohl nichts mehr habe noch RL-Events und morgen habe ich in SL mit ner gaaanz süssen Neko abgemacht am abend , aber eventuel tags über ... Wink

ähm !?? Musst mir halt mal Berichten wens dir pässlich währe .


Knuddel Gruss an alle und 1 gaaanz dolles Weekend *wünsch*


Re: Textur Switcher mit Buttons - Leonardo Buechi - 13.11.2010

cedra habt Dir was zugesandt !!! danke ???


Re: Textur Switcher mit Buttons - cedra - 14.11.2010

JA ! Danke ich habs gesehn und bereits eingetragen. Funktioniert einwandfrei. Ein Sehr schöner Grid , glückwunsch Leonardo Smile

Ich werde heute abend um Wie meinst von 11 - 24 Uhr !?? Also den ganzen Tag ?? ... NA dan machen ab 20:00 Uhr ab ?

Zum mal erste Sachen angucken und besprechen. Wink