Themabewertung:
  • 0 Bewertung(en) - 0 im Durchschnitt
  • 1
  • 2
  • 3
  • 4
  • 5
Nachrichten Box
#1
Und noch ein Script.

Dieses mal eine Messagebox.
Hier können Leute diverse Dinge herein legen oder eine Nachricht hinterlassen.

Entweder zieht man ein Objekt in die Box rein oder man klickt sie an und bekommt per Messagebox (Textbox oben rechts im Viewer) die Möglichkeit eine Nachricht einzutippen. Diese Nachricht wird dann in einer Notecard in der Box gespeichert.

Das Script braucht die os-Funktion osMakeNotecard.
Einzustellen und einzuschrenken ist die Funktion in der opensim.ini:

Code:
[XEngine]
    ...
    Allow_osMakeNotecard = "PARCEL_OWNER, ESTATE_OWNER"

Die Box in der das Script liegt muss das Root Prim in einem Linkset aus insgesamt 3 Prims sein. Die beiden Child Prims MÜSSEN die Namen

".TEXT"
und
".TEXT2"

OHNE Anführungszeichen, mit Punkt und in Großbuchstaben, haben.

Und hier das Script:

PHP-Code:
string OwnerName "";
integer MessageHandle;
integer ListenTimeout = -1;

integer StartSecondsOfDay 0;
integer StartUnix 0;
string DateString "";


integer FindLinkedPrim(string Name)
{
    
integer i;
    for (
0llGetNumberOfPrims() + 3; ++i)
    {
        list 
Params llGetLinkPrimitiveParams(i, [PRIM_NAME]);
        if (
llList2String(Params0) == Name)
         {return 
i;}
    }
    return -
1;
}

SetText(string Textvector Colorfloat Alpha)
 {
llSetLinkPrimitiveParamsFast(FindLinkedPrim(".TEXT"), [PRIM_TEXTTextColorAlpha]);}

SetText2(string Textvector Colorfloat Alpha)
 {
llSetLinkPrimitiveParamsFast(FindLinkedPrim(".TEXT2"), [PRIM_TEXTTextColorAlpha]);}

string CalcTime()
{
    
float SecondsDone llGetUnixTime() - StartUnix StartSecondsOfDay;
    while (
SecondsDone >= 86400)
     {
SecondsDone SecondsDone 86400;}

    
float HoursDone = (float)SecondsDone 3600.0;
    
SecondsDone SecondsDone llFloor(HoursDone) * 3600;
    
float MinutesDone = (float)SecondsDone 60.0;
    
SecondsDone SecondsDone llFloor(MinutesDone) * 60;

    return 
DateString " " + (string)llFloor(HoursDone) + ":" + (string)llFloor(MinutesDone) + ":" + (string)llFloor(SecondsDone);
}

integer DayOver()
{
    
float SecondsDone llGetUnixTime() - StartUnix StartSecondsOfDay;
    
float HoursDone = (float)SecondsDone 3600.0;
    
SecondsDone SecondsDone llFloor(HoursDone) * 3600;
    
float MinutesDone = (float)SecondsDone 60.0;
    
SecondsDone SecondsDone llFloor(MinutesDone) * 60;

    return (
HoursDone >= 23.0 && MinutesDone >= 59.0 && SecondsDone >= 59.0);
}


default
{
    
state_entry()
    {
        
OwnerName llList2String(llParseString2List(llKey2Name(llGetOwner()), [" "], []), 0);
        
llAllowInventoryDrop(TRUE);
        
SetText(OwnerName "'s Mailbox\n---\nZiehe mit gedrückter Strg-Taste etwas hier rein\n-ODER-\nKlicke mich", <111>, 1);
        
SetText2((string)(llGetInventoryNumber(INVENTORY_ALL) - 1), <110>, 1);
        
state Work;
    }
}


state Work
{
    
state_entry()
    {
        
llSetTimerEvent(1);
    }
    
changed(integer What)
    {
        if (
What CHANGED_INVENTORY)
        {
            list 
RemoveInventoryItems;
            
integer i;
            for (
0llGetInventoryNumber(INVENTORY_ALL); ++i)
            {
                if (
llGetInventoryName(INVENTORY_ALLi) != llGetScriptName() &&
                    
llGetInventoryType(llGetInventoryName(INVENTORY_ALLi)) == INVENTORY_SCRIPT)
                {
                    
RemoveInventoryItems RemoveInventoryItems + [llGetInventoryName(INVENTORY_ALLi)];
                    
llSay(0"Du kannst keine Scripte in den Briefkasten legen.");
                }
            }
            for (
0llGetListLength(RemoveInventoryItems); ++i)
             {
llRemoveInventory(llList2String(RemoveInventoryItemsi));}
        }
        
llSay(0"Deine Nachricht wurde gespeichert. Danke.");
        
SetText2((string)(llGetInventoryNumber(INVENTORY_ALL) - 1), <110>, 1);
    }
    
touch_start(integer Dummy)
    {
        
llListenRemove(MessageHandle);
        
integer Chan = -llRound(llFrand(500) + 100);
        
MessageHandle llListen(Chan""llDetectedKey(0), "");
        
ListenTimeout llGetUnixTime();
        
llTextBox(llDetectedKey(0), "Bitte gib eine Nachricht für " OwnerName " ein:"Chan);
    }
    
timer()
    {
        if (
ListenTimeout != -&& ListenTimeout 120 llGetUnixTime())
        {
            
llListenRemove(MessageHandle);
            
llSay(0"Du hast keine Nachricht eingegeben.");
            
ListenTimeout = -1;
        }
        if (
StartUnix 3600 llGetUnixTime() || DayOver())
        {
            
state GetTime;
        }
    }
    
listen(integer Chanstring Namekey IDstring Msg)
    {
        
llListenRemove(MessageHandle);
        
osMakeNotecard(CalcTime(), CalcTime() + "\n" "Nachricht von " Name ":\n---\n" Msg);
    }
}


state GetTime
{
    
http_response(key Dummyinteger Status, list Metastring Body)
    {
        if (
Status == 200)
        {
            list 
Temp llParseString2List(Body, ["\n"], []);
            
DateString llList2String(Temp0);
            
StartSecondsOfDay llList2Integer(Temp1);
            
StartUnix llGetUnixTime();
            
state Work;
        }
    }
    
state_entry()
    {
        
StartUnix llGetUnixTime();
        
llHTTPRequest("http://os.kubwa.de/date.php", [HTTP_METHOD"GET"], "");
    }

Zitieren }


Gehe zu:


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