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);
        
    }
}
[Bild: attachment.php?aid=2586]


[-] The following 2 users say Thank You to Manfred Aabye for this post:
  • Anachron, Pius Noel
Zitieren


Möglicherweise verwandte Themen...
Thema Verfasser Antworten Ansichten Letzter Beitrag
  HG Teleporting Script funktioniert nicht mehr Pharcide 15 4.625 13.07.2018, 19:09
Letzter Beitrag: Anachron
  Vector Script Kater 12 1.247 21.06.2018, 21:14
Letzter Beitrag: Kater
  Suche Script Gruppe Titoss 3 660 29.05.2018, 07:06
Letzter Beitrag: GamaTotchi Yoshikawa
  Suche Tür Script LadyContessa Barbosa 6 2.191 14.12.2017, 15:41
Letzter Beitrag: LadyContessa Barbosa
  Script: Objekt rezzen auf Befehl georgm76 4 2.371 27.08.2017, 03:46
Letzter Beitrag: Manfred Aabye

Gehe zu:


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