NPC und kein Ende

* Questions, answers and templates about scripting
* Fragen, Antworten und Beispiele zum Scripting

NPC und kein Ende

Beitragvon Monster Brandi » Do 3. Mai 2012, 19:07

Translate to English translate to German Translate to French Translate to Italian Translate to Spanish Translate to Portuguese Translate to Czech Перевести на русский язык 翻译成中国

Hallo an Alle,
da ich ein paar Tage Urlaub mache und nicht weiß wie dort die Internetverbindung ist, hier meine Urlaubslage.
nachdem Zak ja schon diese schöne Script hier eingestellt hatte und ich etwas dran rumgefummelt habe lief es aber bei mir nicht zufriedenstellend. Nun habe ich meine Region mal auf die neuste Metro-Version gebracht und noch einmal das Script etwas angepasst.
Die Befehle funktionieren jetzt so wie Zak es geschrieben hatte, also kill und start. Der NPC wird beim Regionsstart generiert. Ich habe aber den kompletten NPC in "appearance" gespeichert, also der Owener wird in der NC komplett mit allem was er dran hat abgespeichert und beim Start wird er aus dieser NC reproduziert.
Hier das Script.
Code: Alles auswählen
// NPC Persistance Example created by Marcus Llewellyn.
// This script is in the Public Domain.

key npc = NULL_KEY;
string vorname = "Prototype";
string nachname = "Heller";
integer dead = FALSE;

default
{
    state_entry() {
        // Setup and rez the NPC.
        llSetTimerEvent(10);
        osAgentSaveAppearance(llGetOwner(), "appearance");
        key temp = (key)llGetObjectDesc();
        if (llKey2Name(temp) != "") {
            // An NPC matching the UUID stored in the object description
            // already exists, so just retrieve the UUID.
            npc = temp;
        } else if (dead == FALSE) {
            // Create a new instance of the NPC, record the UUID in the
            // object's description, and set starting rotation. NPC
            // rotation and location are inherited from the controlling
            // object with an offset.
            npc = osNpcCreate(vorname, nachname, llGetPos() + <10.0,0.0,0.0>, "appearance");
            llSetObjectDesc((string)npc);
            osNpcSetRot(npc, llGetRot() * (llEuler2Rot(<0, 0, 180> * DEG_TO_RAD)));
        }
        // Have the NPC say a greeting, and set up persistance timer and
        // listen for commands.
        osNpcSay(npc, vorname + " " + nachname + ", oh man, hier will och keener tot uebern Zaun haengen!");
       
        llListen(0, "", NULL_KEY, "");

    }

    timer() {
        // Our NPC UUID stored in the object description should match the
        // UUID of our existing NPC. If it does not, we presume an untimely
        // demise, and initiate resurrection by simply reseting our script.
        key temp = (key)llGetObjectDesc();
        if (llKey2Name(temp) == "" && dead == FALSE) {
            llResetScript();
        }         
    }

    listen(integer channel, string name, key id, string msg) {
        if (llToLower(msg) == "kill") {
            // Kill the NPC, set a flag so it stays dead, and misquote
            // John Donne.
            osNpcSay(npc, "Schnauze, ick hau ab!");
            osNpcRemove(npc);
            dead = TRUE;
        } else if (llToLower(msg) == "start" && dead == TRUE) {
            // Create a new instance of our NPC, and set flag for
            // persistance checks.
            npc = osNpcCreate(vorname, nachname, llGetPos() + <1.0,0.0,0.0>, "appearance");
            llSetObjectDesc((string)npc);
            osNpcSetRot(npc, llGetRot() * (llEuler2Rot(<0, 0, 90> * DEG_TO_RAD)));
            osNpcSay(npc, vorname + " " + nachname + ", oh man, hier will och keener tot uebern Zaun haengen!");
            dead = FALSE;
        } else if (llToLower(msg) == "start" && dead == FALSE) {
            // Don't do anything significant if the NPC is still incarnate.
            osNpcSay(npc, "Hey Nase, kannst nich kieken?");
        }
    }
}


Als nächstes habe ich einen einfachen Besucherempfänger gebastelt. Als erstes muß ein Landepunkt auf Eurem Land festgelegt werden. Dort platziert ihr den Prim mit dem Script und was ihr sonst noch drinn haben wollt, Sound und Animation. Der Besucher wird nun von einem NPC empfangen, der so aussieht wie er selbst. :lol:
Gut für unseren Freund den Jack.
Ausprobieren könnt Ihr das ja mal auf Prototype.
Code: Alles auswählen
// Dieses Script erzeugt einen NPC,den eigenen AVA, wenn der Prim von einem AVA oder NPC berührt wird. Beim Verlassen des Prim werden alle NPC der //Region gelöscht.
// Dies Läßt sich hervorragend als Begrüßer einsetzen, mit persönlichem Kontakt.LOL
// Die NPC sollten ausserhalb des Prim erscheinen, denn sonst erzeugt jeder NPC wieder einen NPC. So bekommt man andererseits seine Region recht // voll. HaHa.
// Begrüßungstexte kann jeder selbst einfügen, dazu einfach den bestehenden Text überschreiben.
// den Prim nicht Phantom setzen das wird vom Script selbst gemacht.

key npc = NULL_KEY;
string vorname = "Proto"; // Der Vorname des NPC
string nachname = "Type"; // Der Nachname des NPC
float X = 132; //Die Koordinaten wo der NPC auftauchen soll. Am besten in der Nähe des Prim, in dem das Script ist.
float Y = 140; //Also Koordinaten aus dem Prim nehmen und etwas versetzen
float Z = 50; //Jetzt kommt der NPC von oben.HiHi
string sound = "wolf"; // Dies ist nur eine Spielerei, da wird beim Betreten und verlassen ein Sound abgespielt.
string sound1 = "Bumm";
string animation = "Kopf";//Hier kann man den NPC eine Animation abspielen lassen.


default
{
    state_entry()
    {
       
        llVolumeDetect(TRUE);
       
    }
       collision_start(integer num_detected)
           
            {
            llSetAlpha(1.0,ALL_SIDES);    // macht den Prim sichtbar
            llSetColor(<0,255,0>,ALL_SIDES); // setzt die farbe vom Prim   
            llSleep(2.0);   
            llPlaySound(sound,1.0); // spielt den Sound ab   
            vector npcPos = < X, Y, Z >;
            npc = osNpcCreate(vorname, nachname, npcPos, llDetectedKey(0));
           
            osNpcSetRot(npc, llGetRot() * (llEuler2Rot(<0, 0, 270> * DEG_TO_RAD)));// Hier kann die Drehung des NPC eingestellt werden.
       
       
            osNpcSay(npc, "Tach " + llDetectedName(0) + "! Oh man, hier will abba och keener tot uebern Zaun haengen!");
           
            llSleep(5.0);
           
            osNpcMoveToTarget(npc, llGetPos() + <0,5,0>,OS_NPC_NO_FLY);// bewegt den NPC zum Besucher.
           
            llSleep(5.0);
           
            osAvatarPlayAnimation(npc, "Kopf"); // spielt die Animation ab.
             
            }
           
       collision_end (integer num_detected)
            {
                llSetAlpha(0.0,ALL_SIDES);
                llSleep(1.0);
                llPlaySound(sound1,1.0);
// Beim verlassen des Prim werden alle NPC der Region entfernt.           
        list avies = osGetAvatarList();
        integer n;
        for(n=0;n<llGetListLength(avies);n=n+3)
        {
            osNpcSay(npc, "Na " + llDetectedName(0) + "! Dann werden wir mal die Wüste verlassen!");
            osNpcRemove((key)llList2Key(avies,n));
             
            }
        }   


}       
     


Beim Verlassen des Prim werden alle NPC der Region gelöscht, welches aber kein Problem darstellt, da mit dem ersten Script ein NPC automatisch neu hervorgezaubert wird.

Nun viel Spass
Monster
Benutzeravatar
Monster Brandi
 
Beiträge: 605
Registriert: Mo 22. Mär 2010, 09:05

Re: NPC und kein Ende

Beitragvon Monster Brandi » Fr 4. Mai 2012, 10:49

Translate to English translate to German Translate to French Translate to Italian Translate to Spanish Translate to Portuguese Translate to Czech Перевести на русский язык 翻译成中国

Wer möchte das sein Besucher von sich selbst begrüßt wird, also der NPC ist ein komplettes Abbild des Besuchers, auch der Name. der nimmt das Script.
Code: Alles auswählen
// Dieses Script erzeugt einen NPC,den eigenen AVA, wenn der Prim von einem AVA oder NPC berührt wird. Beim Verlassen des Prim werden alle NPC der Region gelöscht.
// Dies Läßt sich hervorragend als Begrüßer einsetzen, mit persönlichem Kontakt.LOL
// Die NPC sollten ausserhalb des Prim erscheinen, denn sonst erzeugt jeder NPC wieder einen NPC. So bekommt man andererseits seine Region recht // voll. HaHa.
// Begrüßungstexte kann jeder selbst einfügen, dazu einfach den bestehenden Text überschreiben.
// den Prim nicht Phantom setzen das wird vom Script selbst gemacht.

key npc = NULL_KEY;
float X = 132; //Die Koordinaten wo der NPC auftauchen soll. Am besten in der Nähe des Prim, in dem das Script ist.
float Y = 140; //Also Koordinaten aus dem Prim nehmen und etwas versetzen
float Z = 50; //Jetzt kommt der NPC von oben.HiHi
string sound = "wolf"; // Dies ist nur eine Spielerei, da wird beim Betreten und verlassen ein Sound abgespielt.
string sound1 = "Bumm";
string animation = "Chickenstomp";//Hier kann man den NPC eine Animation abspielen lassen.







default
{
    state_entry()
    {

        llVolumeDetect(TRUE);
       
    }

       collision_start(integer num_detected)
           
            {
            llSetAlpha(1.0,ALL_SIDES);    // macht den Prim sichtbar
            llSetColor(<0,255,0>,ALL_SIDES); // setzt die farbe vom Prim   
            llSleep(2.0);   
            llPlaySound(sound,1.0); // spielt den Sound ab   
            vector npcPos = < X, Y, Z >;
            npc = osNpcCreate(llKey2Name(llDetectedKey(0)), "", npcPos, llDetectedKey(0));
           
            osNpcSetRot(npc, llGetRot() * (llEuler2Rot(<0, 0, 270> * DEG_TO_RAD)));// Hier kann die Drehung des NPC eingestellt werden.
           
            llSleep(3.0);
           
            osNpcMoveToTarget(npc, llGetPos() + <0,5,0>,OS_NPC_NO_FLY);// bewegt den NPC zum Besucher.
           
            llSleep(2.0);
           
            osNpcSay(npc, "Tach " + llDetectedName(0) + "! Oh man, hier will abba och keener tot uebern Zaun haengen!");
           
            llSleep(5.0);
           
            osAvatarPlayAnimation(npc, animation); // spielt die Animation ab.
             
            }
           
       collision_end (integer num_detected)
            {
                llSetAlpha(0.0,ALL_SIDES);
               
                llPlaySound(sound1,1.0);
               
                osNpcSay(npc, "Na " + llDetectedName(0) + "! Dann werden wir mal die Wüste verlassen!");
// Beim verlassen des Prim werden alle NPC der Region entfernt.           
        list avies = osGetAvatarList();
        integer n;
        for(n=0;n<llGetListLength(avies);n=n+3)
        {
           
            llSleep(1.0);
            osNpcRemove((key)llList2Key(avies,n));
             
        }
        }
        }       
     


Monster
Benutzeravatar
Monster Brandi
 
Beiträge: 605
Registriert: Mo 22. Mär 2010, 09:05

Re: NPC und kein Ende

Beitragvon Lena Vanilli » Fr 4. Mai 2012, 11:28

Translate to English translate to German Translate to French Translate to Italian Translate to Spanish Translate to Portuguese Translate to Czech Перевести на русский язык 翻译成中国

Huhu Monster,

vielen Dank für die NPC-Scripte! :)

Du wirst ja richtig zum NPC-Guru! :D

Also, ich kenne mich ja damit noch garnicht aus, deswegen mal meine naive Frage:

Wie sieht das eigentlich mit der Performance aus, wenn man einen (oder mehrere) NPC zeitgesteuert animiert? Also das ein NPC zu bestimmten Zeiten irgendwas macht. Z. B. ne Kanonenkugel abschießen, oder sowas. Oder tagsüber im Freebee-Shop steht und abends nach Hause geht und sich hinlegt. :lol: :lol: :lol:

Wäre sowas denkbar und machbar?

Viele Grüße
Lena
Alles wird gut!
Benutzeravatar
Lena Vanilli
Administrator
 
Beiträge: 3127
Registriert: Mi 1. Apr 2009, 11:23
Wohnort: Konstanz

Re: NPC und kein Ende

Beitragvon Diabolus Svenska » Fr 4. Mai 2012, 11:53

Translate to English translate to German Translate to French Translate to Italian Translate to Spanish Translate to Portuguese Translate to Czech Перевести на русский язык 翻译成中国

Ich kann nur sagen ... das funktioniert prächtig das script usw. Ich hab mich echt erschrocken mein Ebenbild bei ihr plötzlich rumrennen zu sehen. *g
Benutzeravatar
Diabolus Svenska
 
Beiträge: 128
Registriert: Sa 4. Apr 2009, 18:29
Wohnort: Wuppertal

Re: NPC und kein Ende

Beitragvon Monster Brandi » Fr 4. Mai 2012, 12:35

Translate to English translate to German Translate to French Translate to Italian Translate to Spanish Translate to Portuguese Translate to Czech Перевести на русский язык 翻译成中国

Hallo Lena und Dia,
erstmal Danke Euch beiden.

@Lena ich bin ja auch nicht der große Scripter, meist schaue ich mir Scripte an, ändere sie oder verwende daraus etwas. Also mit Zeitsteuerung ist das so eine Sache, Timer brauchen Performance, genau wie Sensoren oder Listener, da sie ständig aktiv sind.
Natürlich kann man den NPC animieren, das habe ich bei meinen Scripten oben auch gemacht. Da kommt der NPC auf den Besucher zugelaufen und tanzt. Das habe ich aber über Sleep gesteuert, da der NPC ja verschwindet wenn der Besucher den Prim verlässt, es gibt also keine Wiederholung.
Soviel ich weiß kann man alles auch über die Tageszeiten steuern, dazu muß das Script abber immer aktiv sein, naja den Rest kannst Du dir sicherlich vorstellen. Hast du dann mehrere NPC, die ja auch Performance benötigen, und jeder soll was anderes machen, sind die NPC auf der Region sicherlich unter sich.Hihi.

Monster
Benutzeravatar
Monster Brandi
 
Beiträge: 605
Registriert: Mo 22. Mär 2010, 09:05

Re: NPC und kein Ende

Beitragvon Hans Nerido » So 6. Mai 2012, 15:56

Translate to English translate to German Translate to French Translate to Italian Translate to Spanish Translate to Portuguese Translate to Czech Перевести на русский язык 翻译成中国

Moin Moin,

die Tageszeitsteuerung sollte funzen wenn man die Befehle von einem Environment Script
in einem NPC Script einfügen kann.

Gruß
Hans
Benutzeravatar
Hans Nerido
 
Beiträge: 232
Registriert: Do 15. Dez 2011, 15:17

Re: NPC und kein Ende

Beitragvon Monster Brandi » Mi 9. Mai 2012, 23:47

Translate to English translate to German Translate to French Translate to Italian Translate to Spanish Translate to Portuguese Translate to Czech Перевести на русский язык 翻译成中国

Es sollte zwar über Environment Scripte funktionieren, aber da bei diesen meist der Sonnenstand abgefragt wird und zwar über einen Timer, ist das Script natürlich ständig aktiv.
Bei stark belasteten Regionen ist dies sicherlich nicht vorteilhaft.
Benutzeravatar
Monster Brandi
 
Beiträge: 605
Registriert: Mo 22. Mär 2010, 09:05

Re: NPC und kein Ende

Beitragvon Monster Brandi » Fr 7. Sep 2012, 09:54

Translate to English translate to German Translate to French Translate to Italian Translate to Spanish Translate to Portuguese Translate to Czech Перевести на русский язык 翻译成中国

Hallo Mal wieder,
wer nicht genug von NPC bekommen kann, hier mal ein kleines Script um Euren NPC etwas zu steuern, auch als Begleiter.

Code: Alles auswählen
// NPC-Begleiter mit Dialogbox-einfach anklicken.
// Dieses Script erzeugt einen NPC aus einer NC.Mit "Hallo NPC".
// Dies Läßt sich hervorragend als Begleiter einsetzen, mit persönlichem Kontakt.LOL
// Die NPC erscheint an den Koordinaten x,y,z.
// Texte kann jeder selbst einfügen, dazu einfach den bestehenden Text überschreiben.
// Beim Befehl "Komm her" geht der NPC zum Prim in dem das Script ist.
// Beim Befehl "Komm mit" kommt der NPC zu Eurem AVA und begleitet Euch.
// Alles andere erklärt sich selbst.
// Das Script wurde alles in einen Prim gelegt und auf den Owner zugelassen, da dadurch die Befehle SIM-Weit übertragen werden.

key nob = NULL_KEY;
string vorname = "Ver"; // Der Vorname des NPC
string nachname = "Folger"; // Der Nachname des NPC
float X = 132; //Die Koordinaten wo der NPC auftauchen soll. Am besten in der Nähe des Prim, in dem das Script ist.
float Y = 140; //Also Koordinaten aus dem Prim nehmen und etwas versetzen
float Z = 50; //Jetzt kommt der NPC von oben.HiHi
string sound1 = "Bumm"; // Dies ist nur eine Spielerei, da wird beim Betreten und verlassen ein Sound abgespielt.
string animation = "Kopf";//Hier kann man den NPC eine Animation abspielen lassen.


default
{
    state_entry()
    {
            llResetScript();
            llListen(-555,"",llGetOwner(),"");
    }       
    touch(integer num_detected)
    {
            llDialog(llGetOwner(),"NPC Follower",["Komm mit","Bleib hier","Hau ab","Hallo NPC","Komm her"],-555);

       
    }

           
            listen( integer channel,string name,key id,string msg)
           
            {
        if (msg != "")
        {
            if (msg == "Hau ab")

            {
             osNpcSay(nob, "Schade !");
              llSleep(1.0);
             osNpcRemove(nob);
            }
               else if (msg == "Komm her")
            {
                osNpcMoveToTarget(nob, llGetPos() + <0,2,0>,OS_NPC_NO_FLY);
                llSleep(15.0);
                osNpcSay(nob, "Da bin ich !");
            }   
           
             else if (msg == "Komm mit")
            {
                 osNpcSay(nob, "Gerne !");
                 key gast = llDetectedKey(0);
                 llSensorRepeat("",gast,AGENT,120,TWO_PI,1);
            }
           
             else if (msg == "Hallo NPC")
            {
                llPlaySound(sound1,1.0); // spielt den Sound ab   
                vector npcPos = < X, Y, Z >;
                nob = osNpcCreate(vorname, nachname, npcPos, "appearance wolf");
            }
           
             else if (msg == "Bleib hier")
            {
                osNpcSay(nob, "Ist Gut !");
                llSensorRemove();
            }
        }
    }
             sensor(integer num_detected) 
            {
   
            osNpcSetRot(nob,llGetRot() * (llEuler2Rot(<0, 0, 0> * DEG_TO_RAD)));
 
            vector gast = llDetectedPos(0);
            osNpcMoveToTarget(nob, gast + <0,2,0>,OS_NPC_NO_FLY);// bewegt den NPC zum Besucher.
       
           
         
            }

}       
     


Die NC für euren NPC solltet ihr schon haben. Für den Sound könnt ihr einen Eigene nehmen oder weglassen.
Das Script ist nur als Spielerei gedacht, da ja die Region durch Sensor und Listener belastet wird.
Benutzeravatar
Monster Brandi
 
Beiträge: 605
Registriert: Mo 22. Mär 2010, 09:05

Re: NPC und kein Ende

Beitragvon MingNoi » Mi 6. Mär 2013, 10:36

Translate to English translate to German Translate to French Translate to Italian Translate to Spanish Translate to Portuguese Translate to Czech Перевести на русский язык 翻译成中国

Klasse, muss ich alles ausprobieren ;)

Hab ja schon nen klassischen bei mir, der raus hopt und auf klick wieder verschwindet, aber das is es dann auch.

Mit Anis ist es ja toll, wenn's nicht zu viele rumhat davon, ist ja logo das die kosten alle.
Naja, Spass macht's auf jedenfall.

Danke Monster ! :D
trust your feelings - lasst uns träumen
Benutzeravatar
MingNoi
 
Beiträge: 9
Registriert: Fr 22. Feb 2013, 23:57

Re: NPC und kein Ende

Beitragvon Xenos Yifu » Mi 6. Mär 2013, 13:42

Translate to English translate to German Translate to French Translate to Italian Translate to Spanish Translate to Portuguese Translate to Czech Перевести на русский язык 翻译成中国

Habe das Prim erstellt, das Script rein gepackt, die Koordinaten angepasst.
Der NPC (ich) erscheint, spielt sogar meine Stand-AO´s ab :D
Aber man kann in nicht anklicken, sondern nur das Prim.
Tue ich das erscheint auch das Menü "Komm her, Bleib ... etc".
Aber leider tut sich nichts. Nur ein Scriptfehler wird über dem Prim angezeigt.
Ich verwende hier das zuletzt gepostete Script.

Achja, ich habe keine NC. Was hat es mit der auf sich?
Und wenn ich die brauche, braucht die dann auch nicht jeder Besucher?

Fragen über Fragen :)


Aber auf jeden Fall eine super Sache :)
Schon komisches Gefühl wenn man sich selber gegenüber steht ^^.
Gruß Xenos

Regionen: Japanberg,Klangwald,Traumsee,XenosDeepSea (geöffnet vom Aufstehen bis zum Schlafen)
Benutzeravatar
Xenos Yifu
 
Beiträge: 385
Registriert: Mo 8. Mär 2010, 17:24
Wohnort: Japanberg,Klangwald,Traumsee

Nächste

Zurück zu Scripting

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 1 Gast



Powered by phpBB

Deutsche Übersetzung durch phpBB.de
.

Style designed by Artodia.