• Bitte schaltet eure Ad Blocker aus. SLinfo kann nur betrieben werden, wenn es durch Werbung Einnahmen erzielt. Vielen Dank!!
  • Wir freuen uns, wenn du dich in unserem Forum anmeldest. Bitte beachte, dass die Freigabe per Hand durchgeführt wird (Schutz vor Spammer). Damit kann die Freigabe bis zu 24 Stunden dauern.
  • Wir verwenden Cookies, um Inhalte und Anzeigen zu personalisieren, Funktionen für soziale Medien anbieten zu können und die Zugriffe auf unsere Website zu analysieren. Sie geben Einwilligung zu unseren Cookies, wenn Sie unsere Webseite weiterhin nutzen.

Visitor Counter auf Collisionsbasis ( Vorhang unsichtbar)

Raffaello Liotta

Aktiver Nutzer
hallo
da ich gerade mal 2 scripting stunden hinter mir habe .....(zeitmangel)
habe ich ein Problem,wo ich leider nicht alleine fertig werde, darf in ner mall folgendes script nicht verwenden ,
da es scannt... ich würde das gerne auf Collision umschreiben aber klappt alleine nicht so ganz :((
evtl kann mir jemand dabei helfen Danke!Nehm Gern auch was ähnliches fertiges Danke !



Code:
// Visitor-Detector 0.66
// (c) Ezian Ecksol. Use, modify, steal or sale as you like. Keep credits.

// modify these values: /////
float ignore_time = 20.; // avatars visiting the parcel less than this time in seconds will be ignored
integer print_method = 1; // 0=llSay, 1=llOwnerSay, 2=llInstantMessage
float loop_time = 2.; // scanner checks every <loop_time> seconds
//////////////////////////////////

vector parcel0; vector parcel1;
vector parcel_center; vector parcel_size;
float detect_range = 96.;
key owner;
string parcel;
list visitors_long;
list visitors_short;
integer active;

string getparcelname(vector p) {
    return llList2String(llGetParcelDetails(p, [PARCEL_DETAILS_NAME]),0);
}

getparcelbounds() {
    vector pos = llGetPos();
    vector rpos;
    pos = <llRound(pos.x), llRound(pos.y), 0.>;
    string name = getparcelname(pos);
   
    rpos = pos;
    do { rpos.x -= 1.; } while ((getparcelname(rpos) == name) && (rpos.x>=0.));   
    parcel0.x = rpos.x + 1.;
   
    rpos = pos;
    do { rpos.y -= 1.; } while ((getparcelname(rpos) == name) && (rpos.y>=0.));   
    parcel0.y = rpos.y + 1.;
   
    rpos = pos;
    do { rpos.x += 1.; } while ((getparcelname(rpos) == name) && (rpos.x<256.));   
    parcel1.x = rpos.x;
   
    rpos = pos;
    do { rpos.y += 1.; } while ((getparcelname(rpos) == name) && (rpos.y<256.));   
    parcel1.y = rpos.y;
   
    parcel_center = (parcel1 + parcel0) / 2.;
    parcel_size = parcel1 - parcel0;
    float c = llPow(parcel_size.x/2.,2.)+llPow(parcel_size.y/2.,2.);
    float d = detect_range*detect_range;
    if (c > d)
        llOwnerSay("Your parcel is to large to be covered by a 96-m-scanner. Place the detector in the middle of the parcel at ground, but the corners are not covered."); 
    else {
        vector dest = <parcel_center.x, parcel_center.y, llGround(parcel_center-llGetPos())+llSqrt(d-c)>;
        llOwnerSay("For optimal scanning range at ground, set position of object to: "+Vector2String(dest));
    }
}


string format_2dig(integer i) {
    if (i<10)
        return "0"+(string)i;
    else
        return (string)i;   
}

string format_timestamp(string ts) {
    return parcel+", "+llGetSubString(ts, 0, 9)+", "+llGetSubString(ts, 11,18)+" GMT";
}

string format_seconds(integer s) {   
    integer m = s / 60;
    s %= 60;
   
    integer h = m / 60;
    m %= 60;
   
    return format_2dig(h)+":"+format_2dig(m)+":"+format_2dig(s);
}

console(string txt) {
    if (print_method == 0)
        llSay(0, txt);
       
    else if (print_method == 1)
        llOwnerSay(txt);
       
    else
        llInstantMessage(owner, txt);
}

visitors_left(list v) {
    integer j = llGetListLength(v);
    if (j) {
        integer i;
        integer tu = llGetUnixTime();
        for (i=0; i<j; i+=3)
            console("<< "+llList2String(v, i)+" left "+parcel+" after "+format_seconds(tu-llList2Integer(v, i+1)));
    }
   
}

string Float2String(float num) {
    list s = llParseString2List((string)(llRound(num*10.)/10.), ["."], []);
    return llList2String(s, 0)+"."+llGetSubString(llList2String(s, 1), 0, 0);
}

string Vector2String(vector v) {
    return "<"+Float2String(v.x)+", "+Float2String(v.y)+", "+Float2String(v.z)+">";
}

activate(integer a) {
    active = a;
    if (a) {
        llOwnerSay("Scans every "+Float2String(loop_time)+"s. Ignores visitors staying less than "+Float2String(ignore_time)+"s.");
        llOwnerSay("Activated: "+format_timestamp(llGetTimestamp()));
        llSensorRepeat("", NULL_KEY, AGENT, detect_range, PI, loop_time);
   
    } else {
        llOwnerSay("Deactived.");
        llSensorRemove();   
    }
}

default {

    state_entry() {
        owner = llGetOwner();
        parcel = "\""+llList2String(llGetParcelDetails(llGetPos(), [PARCEL_DETAILS_NAME]),0)+"\""; // +" in "+llGetRegionName();
       
        activate(TRUE);
        llOwnerSay("Touch to stop or start.");
       
        getparcelbounds();   
    }
   
    touch_start(integer n) {
        if (llDetectedKey(0) == owner)
            activate(!active);
    }
   
    on_rez(integer p) {
        llResetScript();
    }
   
    changed(integer c) {
        if (c & CHANGED_OWNER) llResetScript();   
    }

    sensor(integer n) {
        integer i; integer j;
        integer tu = llGetUnixTime();
        string ts = llGetTimestamp();
        string dname;
        list temp;
        list temp_short = visitors_short;
        list temp_long = visitors_long;
        visitors_short = [];
        visitors_long = [];

        for (i=0; i<n; ++i) {
           
            if (llOverMyLand(llDetectedKey(i))) {
            //vector dpos = llDetectedPos(i);
            //if ((dpos.x >= parcel0.x) && (dpos.x < parcel1.x) && (dpos.y >= parcel0.y) && (dpos.y < parcel1.y)) {
                dname = llDetectedName(i);
           
                j = llListFindList(temp_long, [dname]);     
                if (j != -1) {
                    visitors_long += llList2List(temp_long, j, j+2);
                    temp_long = llDeleteSubList(temp_long, j, j+2);
   
                } else {
                    j = llListFindList(temp_short, [dname]);
                     
                    if (j != -1) {
                        temp = llList2List(temp_short, j, j+2);
                       
                        if ((tu-llList2Integer(temp, 1)) >= ignore_time) {
                            visitors_long += temp;
                            console(">> "+llList2String(temp, 0)+" entered "+format_timestamp(llList2String(temp, 2)));

                        } else {
                            visitors_short += temp;
                        }
                       
                    } else {
                        visitors_short += [dname, tu, ts];
                    }
                }
            }
        }   
        visitors_left(temp_long);   
    }
   
    no_sensor() {
        visitors_left(visitors_long);
        visitors_short = [];
        visitors_long = [];   
    }

}

Desweiteren wäre evtl möglich Mail und IM getrennt ein/ausschaltbar zu machen ?

danke mal für eure Hilfe
würds ja gern selber tun aber die dummen errors und syntax fehler ....sind immer da irgendwie lach
Gruss Raffa
 
E

Ezian Ecksol

Guest
Hi,

Sensor zeigt einen Avatar jedesmal, wenn er im zu scannenden Bereich ist, No_sensor zeigt, dass er da nicht mehr ist.

collision_start sagt nur einmal, dass jemand den Bereich betritt, und collision_end nur einmal, dass er wieder rausgeht.

Wegen der unterschiedlichen Natur der Events lässt sich das Script nicht einfach so darauf anpassen, da müsste ein komplett geänderter Algorithmus her.

Da lohnt es sich dann eher, einfach ein neues Script zu schreiben. Da ihr für eine Mall kommerzielle Interessen verfolgt, kauft doch einfach irgendwo so ein Script.
 

Raffaello Liotta

Aktiver Nutzer
hallo ezian
ja das musst ich mittlerweile auch merken,dachte erst da kann man nur ne kleinigkeit ändern aber das ist doch fast das ganze script :p leider :(
Ich bin leider nicht der mall besitzer, nur ein armer shop pächter, ich würde ja auch eins kaufen, aber die ich bisher gefunden habe naja ......
würde gern auch hier jemand nen auftrag geben ... wenn jemand Interesse hat mir das gegen bezahlung zu scripten, dann einfach IM ingame oder hier !

LG
raffa

ANMERKUNG MOD: Swapps Swenson
Zeit: 17.09.2008 - 19:36:48

Thread verschoben!
VON (Alt): Scriptingfragen -> Suche

Vielen Dank und Viel Erfolg!

Swapps Swenson
 

Raffaello Liotta

Aktiver Nutzer
Unglaublich

Unglaublich
dafür das ich hier in nem forum was fragte bekamm ich eine Sehr sehr Nette IM, Nur weil ich nicht auf ne kommerzielles angebot von ihm eingegangen bin !



xxxxx xxxxxx
Betreff: Nachricht von Ihrem Profil
Inhalt: Inhalt und Absender durch Mod. gelöscht (Erklärung siehe unten)!

wird man als schmarotzer abgestempelt ...
geile communitie hier ( natürlich nicht alle)

lg raffa
PS: soll jeder selbst für sich bewerten !


Edit Mod - Trebron Zenovka 17.09.08 - 19:10 Uhr

Inhalt der veröffentlichten PM gelöscht, da dies nach unseren Communityregeln nicht erlaubt ist!

http://www.slinfo.de/index.php?option=com_content&task=view&id=104&Itemid=86

siehe dort Abschnitt: Private Texte!
 

Aktive User in diesem Thread

Oben Unten