Themabewertung:
  • 0 Bewertung(en) - 0 im Durchschnitt
  • 1
  • 2
  • 3
  • 4
  • 5
Follow me Script
#1
Hallo ich habe hier ein FollowMe Script...

Code:
default
{
    state_entry()
    {
        vector pos = llGetPos();
        llSetStatus(STATUS_ROTATE_X | STATUS_ROTATE_Y, FALSE);
        llSetStatus(STATUS_PHYSICS, TRUE);
        llSleep(0.1);
        llMoveToTarget(pos,0.1);
        key id = llGetOwner();
        llSensorRepeat("",id,AGENT,20,2*PI,.4);
        llOwnerSay(" i will Follow you ...");
    }
     on_rez(integer bla)
    {
        vector pos = llGetPos();
        llSetStatus(STATUS_ROTATE_X | STATUS_ROTATE_Y, FALSE);
        llSetStatus(STATUS_PHYSICS, TRUE);
        llSleep(0.1);
        llMoveToTarget(pos,0.1);
        key id = llGetOwner();
        llSensorRepeat("",id,AGENT,20,2*PI,.4);
        llOwnerSay(" i will Follow you ...");
    }

    sensor(integer total_number)
    {
        //llOwnerSay("Move to you...");
        vector pos = llDetectedPos(0);
        vector offset =<-1,1,-.8>;
        pos+=offset;
        llMoveToTarget(pos,.3);        
    }
}

Aber es folgt mir nicht....
Vlt ist es wieder ein Bug ( Es ist aus der 0.8.x Zeit) oder ich muss da was in der OpenSim.ini Aktivieren...
Zitieren
#2
Das Problem liegt im Befehl llSetStatus(STATUS_ROTATE_X | STATUS_ROTATE_Y, FALSE). Ich habe mal kurz auf Metropolis unter Linux mit OpenSim 0.8.3 mit Bulletsim und ODE getestet.

Unter ODE funktioniert das Script mit llSetStatus(STATUS_ROTATE_X | STATUS_ROTATE_Y, FALSE), aber unter Bulletsim funktioniert es nicht. Mit OpenSim 0.9.x oder mit ubODE habe ich nicht getestet. Aus meiner Sicht handelt es sich um einen Bug.

Hinweis um meine Aussage zu verifizieren: Das setzen des Status im Objekt ist permanent. Entweder du erstellst ein neues Objekt mit einem Script das den Befehl nicht enthält, oder du änderst FALSE auf TRUE.
Code:
llSetStatus(STATUS_ROTATE_X | STATUS_ROTATE_Y, TRUE);

Der Befehl bewirkt in seiner ursprünglichen Form, dass sich das Objekt nur um die Z-Achse drehen kann.

Unter ODE finde ich das Verhalten des Scripts aber extrem ruckelnd. Ganz allgemein würde ich nach einer Methode suchen, die weniger Lag verursacht. Es kommt natürlich darauf an, was du genau machen willst.
Zitieren
#3
(26.11.2018, 11:48)Pius Noel schrieb: Das Problem liegt im Befehl llSetStatus(STATUS_ROTATE_X | STATUS_ROTATE_Y, FALSE). Ich habe mal kurz auf Metropolis unter Linux mit OpenSim 0.8.3 mit Bulletsim und ODE getestet.

Unter ODE funktioniert das Script mit llSetStatus(STATUS_ROTATE_X | STATUS_ROTATE_Y, FALSE), aber unter Bulletsim funktioniert es nicht. Mit OpenSim 0.9.x oder mit ubODE habe ich nicht getestet. Aus meiner Sicht handelt es sich um einen Bug.

Hinweis um meine Aussage zu verifizieren: Das setzen des Status im Objekt ist permanent. Entweder du erstellst ein neues Objekt mit einem Script das den Befehl nicht enthält, oder du änderst FALSE auf TRUE.
Code:
llSetStatus(STATUS_ROTATE_X | STATUS_ROTATE_Y, TRUE);

Der Befehl bewirkt in seiner ursprünglichen Form, dass sich das Objekt nur um die Z-Achse drehen kann.

Unter ODE finde ich das Verhalten des Scripts aber extrem ruckelnd. Ganz allgemein würde ich nach einer Methode suchen, die weniger Lag verursacht. Es kommt natürlich darauf an, was du genau machen willst.

Also mit llSetStatus(STATUS_ROTATE_X | STATUS_ROTATE_Y, TRUE) folgt mir das Prim.... ob es ruckelt oder nicht ist ja erst mal egal.. aber kommt wohl auch auf den Server an oder Simbelastung...

Dies sollen Dekorative Follow Fees werden oder mal Fliegende Herzen die einem folgen ... :-)

Aber ich weiss das das mit FALSE damals auch ging ! Wieder mal ein Bug mehr :-)
lg
Zitieren
#4
Code:
// :CATEGORY:OpenSim NPC
// :NAME: NPC_Follower.lsl
// :AUTHOR:Ferd Frederix
// :REV:1.0
// :WORLD:OpenSim
// :DESCRIPTION:
//  This is a NPC follower.
// License: http://creativecommons.org/licenses/by-nc
// :CODE:  
    
// tunables
float max_distance = 70; //distance for sensoring a real avatar
string fName = "Max";
string lName = "Muster";

float gTimer;
// stuff
integer iWaitCounter = 60;
integer channel; // dialog channel
integer listener; // holds the listener handle;
key npc;    // npc key
integer npc_on = FALSE;
vector Dest;
string lastAnim;
  
Play(string anima)
{
    if (anima == lastAnim)
        return;
  
    if (anima == "Stehen9" && llFrand(5) < 1)
    {
        anima = "Redeanimation";  
        gTimer = llFrand(5) + 4;
    }
    else
    {
        gTimer = llFrand(5) + 1;
    }
    
    osNpcPlayAnimation(npc,anima);
    osNpcStopAnimation(npc,lastAnim);
    lastAnim = anima;
}

Sound()
{
    if (llFrand(2) > 0.5)
        return;
        
    integer n = llGetInventoryNumber(INVENTORY_SOUND);
    integer n2 = llCeil(llFrand(n));

    string name = llGetInventoryName(INVENTORY_SOUND,n2);
    llTriggerSound(name,1.0);
}


walk_to_master(vector myPos)
{
    vector myVector = <randBetween(-2,2),randBetween(-2,2),myPos.z> ;
    myPos.z = 0;

    iWaitCounter = 60;
    Play("gehenauswaehlen");
    osNpcMoveToTarget(npc, myPos + myVector, OS_NPC_NO_FLY );
    llSetTimerEvent(0.5);
    Sound();
}

float randBetween(float min, float max)
{
    return llFrand(max - min) + min ;
}
dialog(key avi)
{
    channel = llCeil(llFrand(5000) + 5000);
    listener = llListen(channel,"","","");
    llDialog(avi, "Choose:",["Start","Entfernen","Aussehen"],channel);
}
Start()
{
    vector npcPos = llGetPos() + <1.0,1.0,1.0>;
    npc = osNpcCreate(fName,lName, npcPos, "Aussehen");
    llSetObjectDesc(npc);
    npc_on = TRUE;
    llSensor("", NULL_KEY, AGENT_BY_LEGACY_NAME, max_distance, PI);  
}

default
{
    
    state_entry()
    {
        llSay(0,"NPC Bereit");
        gTimer = llFrand(2) + 1;
        osNpcRemove(llGetObjectDesc());

    }
    
    changed (integer what)
    {
        if (what & CHANGED_REGION_START)
        {
            if (npc_on)
            {
                Start();
            }
        }
    }
    
    on_rez(integer p)
    {
        llResetScript();
    }
    
    touch_start(integer x)
    {
        //if (llDetectedKey(0) == llGetOwner())  {
            dialog(llDetectedKey(0));
        //}
    }
    
    listen(integer channel, string name, key id, string msg) {
        llListenRemove (listener);
        if (msg == "Start")
        {
            if( !npc_on ) {
               Start();
            } else {
                llOwnerSay("Bereits gestartet!");
            }
        } else if (msg == "Entfernen")  {
            npc_on = FALSE;
            osNpcRemove(llGetObjectDesc());
            llSetTimerEvent(0);
        } else if (msg ==  "Aussehen") {
            osAgentSaveAppearance(llGetOwner(), "Aussehen");
            llOwnerSay("Aussehen wurde gespeichert!");
        }
    
    }

    sensor(integer num)
    {
        Dest = llDetectedPos( 0 );
        walk_to_master(Dest);
    }
    
    no_sensor()
    {
         Play("Redeanimation");
         llSleep(10);
         llSensor("", NULL_KEY, AGENT_BY_LEGACY_NAME, max_distance, PI);
    }
  
    timer()
    {
        vector pos;
        if (--iWaitCounter)  {
          
            list Poses = llGetObjectDetails(npc,[OBJECT_POS]);
            pos = llList2Vector(Poses, 0);
            
            if (llVecDist(pos, Dest ) > 4) {
                return;
            }
        }
        
        if (llFrand(5) < 0.5) {
             if (llVecDist(pos, Dest ) <1) {
                Play("Victory");
                llTriggerSound("kitten4",1.0);
                llSleep(1.5);
            } else {
                Play("Redeanimation");
                llTriggerSound("kitten3",1.0);
                llSleep(1.5);
            }
            
            
        }
        
        Play("Stehen9");

        llSleep(gTimer);
        llSetTimerEvent(0);
        llSensor("", NULL_KEY, AGENT_BY_LEGACY_NAME, max_distance, PI);
        
    }
}
Ein Metaversum sind viele kleine Räume, die nahtlos aneinander passen,
sowie direkt sichtbar und begehbar sind, als wäre es aus einem Guss.



Zitieren


Möglicherweise verwandte Themen…
Thema Verfasser Antworten Ansichten Letzter Beitrag
Question Suche Garagentor script Kalkofe 4 1.362 20.07.2024, 12:06
Letzter Beitrag: Manfred Aabye
Question Tür script gesucht, Tür soll bei Eintritt ein paar meter vorher öffnen Kalkofe 9 1.788 11.10.2023, 05:37
Letzter Beitrag: Christoph Balhaus
  Rufknopf Script für Aufzug gesucht Xenos Yifu 4 2.490 03.04.2022, 19:09
Letzter Beitrag: Mareta Dagostino
  Geber/ Rezz Script Xenos Yifu 10 5.828 28.11.2020, 14:28
Letzter Beitrag: Kubwa
  Suche Script Gruppe Titoss 4 7.222 27.11.2020, 14:52
Letzter Beitrag: Dorena Verne

Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste