GridTalk.de

Normale Version: Script: Objekt rezzen auf Befehl
Du siehst gerade eine vereinfachte Darstellung unserer Inhalte. Normale Ansicht mit richtiger Formatierung.
Hallo!
Ich möchte eine Kiste bauen, die auf einen gesprochenen Befehl hin jeweils ein Objekt herausgibt.
Das Objekt sollte anhand seines konkreten Namens im Script gerezzt werden.

1. Beispiel:

Befehl: "hamburger"
--> Die Kiste rezzt ein Objekt mit Namen "hamburger", das in ihrem Inventar vorliegt.

Dies sollte jedoch mit mehreren Befehlen funktionieren.
Beispiel:

Befehl: "hamburger!"
oder: "Hamburger." usw.

----------------------------------------------------------------------------------------------------------
Außerdem sollte mit einem anderen Befehl ein anderes Objekt gerezzt werden.

2. Beispiel:

Befehl: "cheeseburger"
--> Die Kiste rezzt ein Objekt mit Namen "cheeseburger", das ebenfalls in ihrem Inventar vorliegt.

Dies sollte ebenfalls mit verschiedenen Befehlen möglich sein.
Beispiel:
Befehl: "Cheeseburger!" usw.

--------------------------------------------------------------------------------------------------

Ich habe die üblichen Rezz-auf-Befehl-Scripts verwendet.
Unten habe ich ein solches Script eingefügt.

Es gibt jedoch folgende Probleme:

1. Das zu rezzende Objekt muss im Inventar "INVENTORY_OBJECT" heißen,
damit es gerezzt wird.
Hat es einen anderen Namen, z. B. "hamburger", wird es nicht gerezzt.

2. Es kann nur ein Objekt gerezzt werden.
Wenn man ein Script für ein zweites Objekt im Inventar hinzufügt,
z. B. für das Objekt "cheeseburger", funktioniert dieses Script nicht.
Nur das erste Script funktioniert.

3. Es gelingt mir ebenfalls nicht,
ein Objekt mit verschiedenen Befehlen zu rezzen.
Beispiel:
Befehl "hamburger" funktioniert.

Wenn ich ein zweites solches Script mit dem
Befehl "Hamburger!" zu der Kiste hinzufüge, funktioniert dieses zweite Script nicht.
----------------------------------------------------------------------------------------------------------

Beispiel-Rezz-Object-Script:
(Dieses Script funktioniert für ein Objekt, wenn das Objekt in der Kiste "INVENTORY_OBJECT" genannt ist: )
-----------------------------------------------------------------------------------------------------------------------------------------------------------------------

// This script was auto-generated by Ann Enigma's script autogenerator
// available at http://www.3greeneggs.com/autoscript/
// Note: After you copy this script into your creation, you will also need to copy in the object to rez


default
{

state_entry() {
llListen(0,"", NULL_KEY, "");
}

listen(integer channel, string name, key id, string message) {
if (message == "hamburger") {

// This line will pick the first object out of the container and rez it
llRezObject(llGetInventoryName(INVENTORY_OBJECT,0), llGetPos()+<-1,0,1>,ZERO_VECTOR,ZERO_ROTATION,0);

}
}

}

-----------------------------------------------------------------------------------------------------------------------------------------------------------------------

Hat jemand vielleicht eine Idee?
Vielen Dank! Rolleyes
also da hast du eine ganze Menge falsch verstanden ...
1.) INVENTORY_OBJECT ist eine Konstante und hat den Wert 6
(siehe hier : http://wiki.secondlife.com/wiki/INVENTORY_OBJECT)
2.) llGetInventoryName(INVENTORY_OBJECT,0) gibt den Namen des (alphabetisch) ersten Objekts zurück.
(siehe hier : http://wiki.secondlife.com/wiki/LlGetInventoryName)
- wenn es also einen "hamburger" und einen "cheeseburger" gibt, gibt das script einen "cheeseburger" aus

soweit das ... und dann ist da noch:

llListen(0,"", NULL_KEY, "");

KANN man machen, ist aber keine gute Idee!
Zur Erklärung: http://wiki.secondlife.com/wiki/LlListen
Zitat:Avoid channel zero (PUBLIC_CHANNEL) and set name or id where possible to avoid lag. llListen(0, "", NULL_KEY,"") can be laggy as it listens to all chat from everyone in chat range and so should be avoided.
So, ich habe es jetzt hinbekommen, ungefähr.

Auf den Befehl "cheeseburger" bzw. "hamburger" hin gibt die Kiste einen Cheeseburger (INVENTORY_OBJECT,0)
oder Hamburger (INVENTORY_OBJECT,1)

heraus und sagt noch einen Satz im Chat und auch als Sound ("Bitte sehr.")


Falls es jemanden interessiert, unten folgt das Script.

Wer noch Anmerkungen / Verbesserungsvorschläge hat, darf sie gerne nennen.

Vielen Dank noch einmal! Smile

----------------------------------------------------------------------------------------------------------
Code:
default
{

    state_entry() {
        llListen(2,"", NULL_KEY, "");
    }

    listen(integer channel, string name, key id, string message) {

  
if (message == "cheeseburger"){
            llRezObject(llGetInventoryName(INVENTORY_OBJECT,0), llGetPos()+<0,1,0>,ZERO_VECTOR,ZERO_ROTATION,0);
            llSay(0,"Bitte sehr.");
            llPlaySound(("bitte_sehr"),1);
        }    

if (message == "hamburger"){
            llRezObject(llGetInventoryName(INVENTORY_OBJECT,1), llGetPos()+<0,1,0>,ZERO_VECTOR,ZERO_ROTATION,0);
            llSay(0,"Bitte sehr.");
            llPlaySound(("bitte_sehr"),1);
        }


    }

}
So habs mal in einen Code zu besseren Lesbarkeit eingefügt ;D
Das script hier ist auch intressant:
https://www.outworldz.com/cgi/freescripts.plx?ID=160

oder einfach alle herunterladen:
https://github.com/Outworldz/LSL-Scripts