Jump to content

JJValero Writer

Resident
  • Content Count

    56
  • Joined

  • Last visited

Community Reputation

6 Neutral

About JJValero Writer

  • Rank
    Advanced Member

Recent Profile Visitors

The recent visitors block is disabled and is not being shown to other users.

  1. My doubt is a bit difficult to formulate. First I need to explain which point of the GDPR is the one that confuses me. GDPR is a European law that prohibits having personal data of users if it is not strictly necessary to maintain this data and requires that they have a strong security so that they do not fall into the wrong hands. Also, there has to be a mechanism whereby any user can request from the company that maintains the database what they know about him. This law not only affects European companies but also companies from outside Europe that have European users. It seems that they are a bit strict and consider personal data such things as IP address and user names. Initially if a script, for example a voting system or a visitor counter stores names within that script, it would not be breaking that law because the data never comes out of SecondLife. I remember that a few years ago there was a freebie visit counter that used an external database to remind visitors when was the last visit. I also remember external Name2Key databases to get the UUID of a secondlife user from their name. There are also collective ban systems in such a way that if a user is banned from an island it is also banned from all other islands that use that system. There were also avatars lists to avoid content theft through xploits. For example when anyone wear a stolen copy of QHUD it shouts "This HUD is stolen" and the name of avatar is added in a database. Those type of external database could be breaching the GDPR, although not necessarily, because it maintains a database with personal data. Apart from that, they should implement a mechanism in such a way that a user can request their personal data and even their deletion. My question is if instead of storing user names, I do a digest using an algorithm such as MD5 or SHA256 could be enough to avoid falling into illegality. Algorithms such as MD256 create a summary of the data provided. and it is not possible to retrieve the data provided from that summary. According to that, the database would be anonymous so it would be complying with the law. However, in the event that the database is stolen by a hacker, anyone knowing a name could apply the same algorithm and retrieve private data from a user. This is the reason for my doubt. Is SHA256 enough?
  2. I have confused forum, deleted. No delete option found.
  3. Resi, nothing of two. Only will report anyone sitted on a NPV with more of 1000 prims. Overfillers usually are NPV (Non Physical Vehicle) that can have a land impact above 20.000 Land Impact. A very popular one have exactly 100.000 LI and there are others of several millions. Usually overfillers are used in big sandboxes. Many times as a defence in order to avoid grieffers attacks, but a grieffer can use too an overfiller to disable the region for hours and hours. That is, it is a double-edged knife. Overfillers are like the sprays that were invented to prevent women being raped. But the rapists used them too. And they were removed from the market. ampliation Of course, if you are the owner of a sandbox you can use scripts using "llGetParcelPrimOwners()"
  4. Perhaps anytime, while you working in a sandbox you detected that are you unable to rez prims due anyone is overfilling the sandbox. This script shows who is overfilling the region. Create a prim with size <0.01000, 0.05000, 0.05000>, put the script inside and wear it as a HUD. If anyone overfill the sandbox HUD will become red color and send a message saying the name. This do not detect the conventional fillers or overfillers that do not need to sit on it. list g_lFillers; integer isOverFilled(vector vPos) { integer bResult = FALSE; integer iMaxPrimsT = llGetParcelMaxPrims(vPos, TRUE); integer iTotalRe = llGetParcelPrimCount(vPos, PARCEL_COUNT_TOTAL, TRUE); if (iTotalRe > iMaxPrimsT) { bResult = TRUE; } return bResult; } whoFilling(vector vPos) { integer iMaxPrims = llGetParcelMaxPrims(vPos, TRUE); list lAgents = llGetAgentList(AGENT_LIST_REGION, []); integer iMax = llGetListLength(lAgents); integer iCount; for (iCount = 0; iCount < iMax; iCount++) { key kAgent = llList2Key(lAgents, iCount); integer iAgentInfo = llGetAgentInfo(kAgent); list lDetails = llGetObjectDetails(kAgent, [OBJECT_ROOT, OBJECT_NAME]); key kObject = llList2Key(lDetails, 0); string sAvatar = llList2String(lDetails, 1); if (iAgentInfo & AGENT_ON_OBJECT) { if (kAgent != kObject) { list lObjDetails = llGetObjectDetails( kObject, [OBJECT_NAME, OBJECT_PRIM_EQUIVALENCE]); string sObjName = llList2String(lObjDetails, 0); integer iNPrims = llList2Integer(lObjDetails, 1); if (iNPrims > iMaxPrims) { if (llListFindList(g_lFillers, [ kAgent ]) == -1) { g_lFillers = g_lFillers + [ kAgent ]; llOwnerSay(sAvatar + " is overfilling the parcel."); } } else { integer iPos = llListFindList(g_lFillers, [ kAgent ]); if (iPos >= 0) { g_lFillers = llDeleteSubList(g_lFillers, iPos, iPos); llOwnerSay(sAvatar + " stopped overfill the parcel."); } } } } } } default { state_entry() { g_lFillers = []; llSetTimerEvent(2.0); } on_rez(integer start_param) { g_lFillers = []; } timer() { vector vPos = llGetPos(); if (isOverFilled(llGetPos()) == TRUE) { llSetColor(<1.0, 0.0, 0.0>, ALL_SIDES); whoFilling(vPos); } else { llSetColor(<0.0, 1.0, 0.0>, ALL_SIDES); if (llGetListLength(g_lFillers) > 0) { whoFilling(vPos); } } } changed(integer change) { if ((change & CHANGED_REGION) == CHANGED_REGION) { g_lFillers = []; } } }
  5. Hello, i trying to convert various linksets to mesh using the tool mesh studio. But it stop working for me. I tryed many diferent objects and from diferent simulators, same result. [13:52:58] Object: Mesh creation started It is as if the server were stopped Please, anyone with that tool can test if still working?
  6. Just what tittle says. This only work with food that dissapear when it is over. // Do not deed with group this script or you will not be able to make it work. // Unless if you remove owner detection in touch events. // Modify this constants as your needs. float TIME_TO_CHECK = 10.0; // Every how many seconds check if there are food. vector RELATIVE_POS = <0.0, 0.0, 0.25>; // Position relative to rezzer. integer WARNING_IF_LESS = 2; // Send IM to owner if there are less items in inventory. //----------------------------------------------------------------------------- // Do not modify below this line. Unless you know what are you doing. integer PARAM = 0; // Param to pass to the object to rezz. key gFoodRezzed; rezzFood() { llRezObject( llGetInventoryName(INVENTORY_OBJECT, 0), llGetPos() + RELATIVE_POS, ZERO_VECTOR, ZERO_ROTATION, PARAM); } // rezzFood default { state_entry() { gFoodRezzed = NULL_KEY; if (llGetInventoryNumber(INVENTORY_OBJECT) == 0) { llOwnerSay("No food in inventory. Please, put food in inventory and clickme."); state stopped; } else { state working; } // if } // state_entry } // default state stopped { state_entry() { } // state_entry on_rez(integer start_param) { llResetScript(); } // on_rez touch_start(integer total_number) { if (llDetectedKey(0) != llGetOwner()) { return; } // if if (llGetInventoryNumber(INVENTORY_OBJECT) == 0) { llOwnerSay("Please, put food in inventory and clickme again."); } else { state working; } // if } // touch_start // Bug around. This is needed. touch_end(integer total_number) { } // touch_end } // stopped state working { state_entry() { if (gFoodRezzed == NULL_KEY) { rezzFood(); } else { llSetTimerEvent(TIME_TO_CHECK); } // if } // state_entry state_exit() { llSetTimerEvent(0.0); } // state_exit on_rez(integer start_param) { llResetScript(); } // on_rez object_rez(key id) { gFoodRezzed = id; if (llGetInventoryNumber(INVENTORY_OBJECT) < WARNING_IF_LESS) { llInstantMessage(llGetOwner(), "Food is scarce."); } // if llSetTimerEvent(TIME_TO_CHECK); } // object_rez timer() { list lDetails = llGetObjectDetails(gFoodRezzed, [ OBJECT_POS ]); if (llGetListLength(lDetails) == 0) { llSetTimerEvent(0.0); if (llGetInventoryNumber(INVENTORY_OBJECT) == 0) { llInstantMessage(llGetOwner(), "The food is over."); state stopped; } else { rezzFood(); } // if } // if } // timer touch_start(integer total_number) { if (llDetectedKey(0) != llGetOwner()) { return; } // if llOwnerSay("Stopping. Touch me again to make horses happy."); state stopped; } // touch_start // Bug around. This is needed. touch_end(integer total_number) { } // touch_end } // working
  7. Son ataques. Hay varios tipos de ataques que derriban el SIM. Algunos provocan un rollback desconectando a todos los avatares y el sim está no disponible durante algunos minutos. Esto puede provocar problemas con las cajas de pago de las tiendas de alquiler. Pagas dos semanas de tier y al día siguiente la caja te dice que se ha acabado tu rental. También hay ataques que dejan el sim definitivamente tumbado durante horas o días hasta que alguien abre un ticket de soporte. Y en casos raros he visto ataques que hace que todfos los objetos del SIM sean retornados.
  8. I do not know the number of JIRA, but since ago several months there are an annoying bug that is being used by grieffers. The symptoms are: Not possible to rez objects. But it is possible to create new objects. Scripts in HUDs and attachements do not work. Huge lag. And i amazing, what is the status of that bug? Greetings
  9. This script return shouters to their owners. The main use is for malls. If a tenant rezz a lucky chair or any other object configured to shout, is returned. This script know if any object is shouting if their distance is more of 20 m. They must be placed at strategic distances, for example 30 m above the mall. If you are using this script in a place subsceptible of be attacked by grieffers, I recommend remove the line that starts with "llInstantMessage" near of the end of code. The code is this: key gkOwner = NULL_KEY; float RADIUS = 20.0; integer g_iReturnedObjects; integer g_iErrors; default { state_entry() { llSetMemoryLimit(4096 * 3); gkOwner = llGetOwner(); list lDetails = llGetParcelDetails(llGetPos(), [ PARCEL_DETAILS_OWNER, PARCEL_DETAILS_GROUP]); key kParcelOwner = llList2Key(lDetails, 0); key kParcelGroup = llList2Key(lDetails, 1); if (kParcelOwner == gkOwner) { state GetPermissions; } else if (kParcelOwner == kParcelGroup) { llOwnerSay("Parcel is deeded to a group, you must deed this object in order to work."); } else { llOwnerSay("I can not work here, you are not the owner of this land."); } } on_rez(integer start_param) { llResetScript(); } changed(integer change) { if ((change & CHANGED_OWNER) == CHANGED_OWNER) { key kNewOwner = llGetOwner(); list lDetails = llGetParcelDetails(llGetPos(), [ PARCEL_DETAILS_OWNER, PARCEL_DETAILS_GROUP]); key kParcelOwner = llList2Key(lDetails, 0); key kParcelGroup = llList2Key(lDetails, 1); if (kNewOwner == kParcelGroup) { state GetPermissions; } else if (kNewOwner == kParcelOwner) { gkOwner = kNewOwner; state GetPermissions; } } } } state GetPermissions { state_entry() { llWhisper(0, "waiting for permissions."); llRequestPermissions(gkOwner, PERMISSION_RETURN_OBJECTS); } on_rez(integer start_param) { llResetScript(); } run_time_permissions(integer value) { if (value & PERMISSION_RETURN_OBJECTS) { state Running; } } } state Running { state_entry() { g_iReturnedObjects = 0; g_iErrors = 0; llWhisper(0, "Ok, permissions given"); llListen(0, "", NULL_KEY, ""); } on_rez(integer start_param) { llResetScript(); } changed(integer change) { if ((change & CHANGED_OWNER) == CHANGED_OWNER) { llResetScript(); } // if } listen(integer channel, string name, key id, string message) { if (llOverMyLand(id) == FALSE) { return; } list lResults = llGetObjectDetails(id, [ OBJECT_POS, OBJECT_OWNER, OBJECT_ROOT ]); vector vObjPos = llList2Vector(lResults, 0); key kObjOwner = llList2Key(lResults, 1); key kRoot = llList2Key(lResults, 2); if (id == kObjOwner) { return; // is an avatar. } key kObjToReturn = id; if (kRoot != id) { kObjToReturn = kRoot; } float fDistance = llVecMag(vObjPos - llGetPos()); if (fDistance > RADIUS) { llInstantMessage(gkOwner, "Returning object [" + name + "] from owner: " + (string) llGetOwnerKey(id)); integer result = llReturnObjectsByID( [ kObjToReturn ]); if (result == 1) { g_iReturnedObjects++; } else { g_iErrors++; llSay(DEBUG_CHANNEL, "Value returned: " + (string) result); } } llSetText("Returned : " + (string) g_iReturnedObjects + "\nErrors : " + (string) g_iErrors, <1.0, 1.0, 1.0>, 1.0); } }
  10. I detected a problem when teleport inside the same region. The client generates many keystrokes and causes activation of the turbo mode. It's like when you're sitting in a vehicle and edit an object. This is a version that minimizes the problem. //_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/integer MIN_SPEED = 500;integer MAX_SPEED = 32000;string DEFAULT_SOUND = "1adbd5fa-5b29-0827-473f-ec551e073548";float VOLUME = 1.0;float TIME_AFTER_TP = 10.0;//_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/integer g_iSpeed = MIN_SPEED;float g_fLastTime;integer turbo = FALSE;string g_sSound;integer g_bWorking;//_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/default { state_entry() { llSetMemoryLimit(4096 * 3); if (llGetAttached() != 0) { llRequestPermissions(llGetOwner(), PERMISSION_TAKE_CONTROLS); } // if if (llGetInventoryNumber(INVENTORY_SOUND) > 0) { g_sSound = llGetInventoryName(INVENTORY_SOUND, 0); } else { g_sSound = DEFAULT_SOUND; } // if } // state_entry attach(key id) { if (llGetAttached() != 0) { llRequestPermissions(id, PERMISSION_TAKE_CONTROLS); } // if } // attack run_time_permissions(integer perm) { if (perm & PERMISSION_TAKE_CONTROLS) { g_fLastTime = llGetWallclock(); llTakeControls( CONTROL_FWD | CONTROL_BACK | CONTROL_LEFT | CONTROL_RIGHT | CONTROL_ROT_LEFT | CONTROL_ROT_RIGHT | CONTROL_UP | CONTROL_DOWN | CONTROL_LBUTTON | CONTROL_ML_LBUTTON , TRUE, TRUE); llOwnerSay("Turbo mode ready!"); llOwnerSay("(UP + BACK) or (DOWN + BACK) or (FWD + BACK) activates turbo"); llOwnerSay("ROT_RIGHT + ROT_LEFT increment speed."); llOwnerSay("ROT_LEFT + ROT_RIGHT decrement speed."); llOwnerSay("Current speed is: " + (string) g_iSpeed); g_bWorking = TRUE; } // if } // run_time_permissions control(key id, integer level, integer edge) { if (g_bWorking == FALSE) { return; } // if vector vMove = ZERO_VECTOR; if ((level == (CONTROL_FWD | CONTROL_BACK)) || (level == (CONTROL_UP | CONTROL_BACK)) || (level == (CONTROL_DOWN | CONTROL_BACK))) { if (turbo == FALSE) { llTriggerSound(g_sSound, VOLUME); } // if turbo = TRUE; } else if (((~level & CONTROL_FWD) && (edge & CONTROL_FWD)) || ((~level & CONTROL_UP) && (edge & CONTROL_UP)) || ((~level & CONTROL_DOWN) && (edge & CONTROL_DOWN))) { turbo = FALSE; } // if if (turbo) { if (level & CONTROL_FWD) { vMove = llRot2Fwd(llGetRot()); vMove = llVecNorm(vMove); } else if (level & CONTROL_UP) { vMove = <0.0, 0.0, 1.0>; } else if (level & CONTROL_DOWN) { vMove = <0.0, 0.0, -1.0>; } // if } // if if ((level & CONTROL_ROT_LEFT) && (edge & CONTROL_ROT_RIGHT)) { if (llFabs(llGetWallclock() - g_fLastTime) >= 1.0) { if (g_iSpeed > MIN_SPEED) { g_iSpeed /= 2; } llOwnerSay("Speed changed to: " + (string) g_iSpeed); g_fLastTime = llGetWallclock(); } } else if ((level & CONTROL_ROT_RIGHT) && (edge & CONTROL_ROT_LEFT)) { if (llFabs(llGetWallclock() - g_fLastTime) >= 1.0) { if (g_iSpeed < MAX_SPEED) { g_iSpeed *= 2; } llOwnerSay("Speed changed to: " + (string) g_iSpeed); g_fLastTime = llGetWallclock(); } } vMove *= g_iSpeed; llSetForce(vMove, FALSE); } // control changed(integer change) { if (change & CHANGED_TELEPORT) { g_bWorking = FALSE; llSetForce(ZERO_VECTOR, FALSE); llSetTimerEvent(TIME_AFTER_TP); } } // changed timer() { g_bWorking = TRUE; llSetTimerEvent(TIME_AFTER_TP); } // timer} // default
  11. Do not use near of sim crossing, or you will end three or four simulators away. Put script inside of a non visible sphere of size=<0.5, 0.5, 0.5>. Wear object in any site of your body or free hud position. While you walking or flying press back key to boost. this work too when you up or down. Press Left + Right or right + Left to increase or decrease the speed. This script can be added too in a existing HUD. //_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/ integer MIN_SPEED = 500; integer MAX_SPEED = 32000; string DEFAULT_SOUND = "1adbd5fa-5b29-0827-473f-ec551e073548"; float VOLUME = 1.0; //_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/ integer g_iSpeed = MIN_SPEED; float g_fLastTime; integer turbo = FALSE; string g_sSound; //_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/ default { state_entry() { llSetMemoryLimit(4096 * 2); if (llGetAttached() != 0) { llRequestPermissions(llGetOwner(), PERMISSION_TAKE_CONTROLS); } // if if (llGetInventoryNumber(INVENTORY_SOUND) > 0) { g_sSound = llGetInventoryName(INVENTORY_SOUND, 0); } else { g_sSound = DEFAULT_SOUND; } // if } // state_entry attach(key id) { if (llGetAttached() != 0) { llRequestPermissions(id, PERMISSION_TAKE_CONTROLS); } // if } // attack run_time_permissions(integer perm) { if (perm & PERMISSION_TAKE_CONTROLS) { g_fLastTime = llGetWallclock(); llTakeControls( CONTROL_FWD | CONTROL_BACK | CONTROL_LEFT | CONTROL_RIGHT | CONTROL_ROT_LEFT | CONTROL_ROT_RIGHT | CONTROL_UP | CONTROL_DOWN | CONTROL_LBUTTON | CONTROL_ML_LBUTTON , TRUE, TRUE); llOwnerSay("Turbo mode ready!"); llOwnerSay("(UP + BACK) or (DOWN + BACK) or (FWD + BACK) activates turbo"); llOwnerSay("ROT_RIGHT + ROT_LEFT increment speed."); llOwnerSay("ROT_LEFT + ROT_RIGHT decrement speed."); llOwnerSay("Current speed is: " + (string) g_iSpeed); } // if } // run_time_permissions control(key id, integer level, integer edge) { vector vMove = ZERO_VECTOR; if ((level == (CONTROL_FWD | CONTROL_BACK)) || (level == (CONTROL_UP | CONTROL_BACK)) || (level == (CONTROL_DOWN | CONTROL_BACK))) { if (turbo == FALSE) { llTriggerSound(g_sSound, VOLUME); } // if turbo = TRUE; } else if (((~level & CONTROL_FWD) && (edge & CONTROL_FWD)) || ((~level & CONTROL_UP) && (edge & CONTROL_UP)) || ((~level & CONTROL_DOWN) && (edge & CONTROL_DOWN))) { turbo = FALSE; } // if if (turbo) { if (level & CONTROL_FWD) { vMove = llRot2Fwd(llGetRot()); vMove = llVecNorm(vMove); } else if (level & CONTROL_UP) { vMove = <0.0, 0.0, 1.0>; } else if (level & CONTROL_DOWN) { vMove = <0.0, 0.0, -1.0>; } // if } // if if ((level & CONTROL_ROT_LEFT) && (edge & CONTROL_ROT_RIGHT)) { if (llFabs(llGetWallclock() - g_fLastTime) >= 1.0) { if (g_iSpeed > MIN_SPEED) { g_iSpeed /= 2; } llOwnerSay("Speed changed to: " + (string) g_iSpeed); g_fLastTime = llGetWallclock(); } } else if ((level & CONTROL_ROT_RIGHT) && (edge & CONTROL_ROT_LEFT)) { if (llFabs(llGetWallclock() - g_fLastTime) >= 1.0) { if (g_iSpeed < MAX_SPEED) { g_iSpeed *= 2; } llOwnerSay("Speed changed to: " + (string) g_iSpeed); g_fLastTime = llGetWallclock(); } } vMove *= g_iSpeed; llSetForce(vMove, FALSE); } // control } // default
  12. This script just show where are sitted all avatars in region. list g_lAgents = []; default { state_entry() { llSetText("", <1.0, 1.0, 1.0>, 1.0); llSetTimerEvent(1.0); } on_rez(integer start_param) { llResetScript(); } timer() { g_lAgents = llGetAgentList(AGENT_LIST_REGION, []); integer iMax = llGetListLength(g_lAgents); integer iCount; string sOut = ""; for (iCount = 0; iCount < iMax; iCount++){ key kAgent = llList2Key(g_lAgents, iCount); integer iAgentInfo = llGetAgentInfo(kAgent); list lDetails = llGetObjectDetails(kAgent, [OBJECT_ROOT, OBJECT_NAME]); key kObject = llList2Key(lDetails, 0); string sAvatar = llList2String(lDetails, 1); if (iAgentInfo & AGENT_ON_OBJECT) { if (kAgent != kObject) { list lObjDetails = llGetObjectDetails( kObject, [OBJECT_NAME, OBJECT_PHYSICS, OBJECT_RUNNING_SCRIPT_COUNT]); string sObjName = llList2String(lObjDetails, 0); integer bPhys = llList2Integer(lObjDetails, 1); integer iNScrips = llList2Integer(lObjDetails, 2); sOut += sAvatar + " on '" + sObjName + "'"; if ((bPhys == TRUE) && (iNScrips > 0)) { sOut += " (Vehicle)"; } else if ((bPhys == TRUE) && (iNScrips == 0)) { sOut += " (Physical)"; } else if ((bPhys == FALSE) && (iNScrips > 0)) { sOut += " (NPV)"; } else if ((bPhys == FALSE) && (iNScrips == 0)) { sOut += " (Object)"; } sOut += "\n"; } } else if (iAgentInfo & AGENT_SITTING) { sOut += sAvatar + " on Ground.\n"; } else { //sOut += sAvatar + " is not sitted.\n"; } } llSetText(sOut, <1.0, 1.0, 1.0>, 1.0); } }
  13. I no remember why i put this line, but probably is a bug or error. On the other hand, I do not have the habits to redefine input parameters, It is almost certain that it is a mistake. In OpenSim, the UUID of the sculpties and textures are not correct, but you can find the sculties on my freebie site. Greetings
  14. I've seen a rare bug the past two weeks, but do not know if it's a known bug. The symptoms are: * It is not possible to rezz objects. * Scripted objects can not rezz other objects. * However, it is possible to create objects. * Scripts within attachements do not work. * Large amount of lag. * If you try to rezz no copy objects, they disappear from inventory. This happened the saturday 22 and Yesterday in Venufalat region. greetings
  15. Script for search physical objects. key TEXTURE_KEY = "75a05371-e8bb-5b16-fbbe-2ea82a03731f"; string SOUND = "bfd75b28-d5e2-d3f6-ed8b-1ad42d591391"; float TIME = 0.5; key g_kLastDetected; particle_start(key kTexture, key kDestiny, vector vEndEscale, vector vAcel) { llParticleSystem( [ PSYS_SRC_TEXTURE, kTexture, PSYS_PART_START_SCALE, <0.1, 0.1, 0>, PSYS_PART_END_SCALE, vEndEscale, PSYS_PART_START_COLOR, <1.0,1.0,1.0>, PSYS_PART_END_COLOR, <1.0,1.0,1.0>, PSYS_PART_START_ALPHA, 0.0, PSYS_PART_END_ALPHA, 1.0, PSYS_SRC_BURST_PART_COUNT, 1, PSYS_SRC_BURST_RATE, 0.9, PSYS_PART_MAX_AGE, 4.0, PSYS_SRC_MAX_AGE, 0.0, PSYS_SRC_PATTERN, 1, // 1=DROP, 2=EXPLODE, 4=ANGLE, 8=ANGLE_CONE, PSYS_SRC_ACCEL, vAcel, PSYS_SRC_BURST_RADIUS, 0.0, PSYS_SRC_BURST_SPEED_MIN, 0.0, PSYS_SRC_BURST_SPEED_MAX, 0.0, PSYS_SRC_ANGLE_BEGIN, 0*DEG_TO_RAD, PSYS_SRC_ANGLE_END, 90*DEG_TO_RAD, PSYS_SRC_OMEGA, <1,0,0>, PSYS_SRC_TARGET_KEY, kDestiny, PSYS_PART_FLAGS, ( 0 | PSYS_PART_INTERP_COLOR_MASK | PSYS_PART_INTERP_SCALE_MASK // | PSYS_PART_EMISSIVE_MASK // | PSYS_PART_FOLLOW_VELOCITY_MASK // | PSYS_PART_WIND_MASK // | PSYS_PART_BOUNCE_MASK | PSYS_PART_FOLLOW_SRC_MASK | PSYS_PART_TARGET_POS_MASK // | PSYS_PART_TARGET_LINEAR_MASK ) ] ); } // particle_start particle_stop() { llParticleSystem([ ]); } // particle_stop default { state_entry() { llSetMemoryLimit(4096 * 4); llSetLinkPrimitiveParamsFast( LINK_THIS, [ PRIM_NAME, "Physical Locator (v0.2.0)", PRIM_TYPE, PRIM_TYPE_SPHERE, PRIM_HOLE_DEFAULT, <0.0, 1.0, 0.0>, 0.0, <0.0, 0.0, 0.0>, <0.0, 1.0, 0.0>, PRIM_MATERIAL, PRIM_MATERIAL_GLASS, PRIM_SIZE, <0.5, 0.5, 0.5>, PRIM_TEXTURE, ALL_SIDES, "20298eb3-1240-791a-b7e3-0274d644895d", <3.0, 3.0, 0.0>, <0.0, 0.0, 0.0>, 0.0, PRIM_BUMP_SHINY, ALL_SIDES, PRIM_SHINY_HIGH, PRIM_BUMP_NONE, PRIM_FULLBRIGHT, ALL_SIDES, TRUE ]); state off; } // state_entry } // default state off { state_entry() { llSetTextureAnim (FALSE, ALL_SIDES, 0, 0, 0, 0, 0.0); llSetText("Phys Locator: OFF\n", <0.0, 1.0, 1.0>, 1.0); particle_stop(); } // state_entry on_rez(integer start_param) { llResetScript(); } // on_rez touch_start(integer num_detected) { integer iCount; for (iCount = 0; iCount < num_detected; iCount++) { if (llDetectedKey(iCount) == llGetOwner()) { state on; } // if } // for } // touch_start touch_end(integer num_detected) { } // touch_end } // state off state on { state_entry() { g_kLastDetected = NULL_KEY; llSetTextureAnim (ANIM_ON | LOOP | SMOOTH, ALL_SIDES, 1, 1, 0, 0, 0.05); llSetText("Phys Locator: ON\n", <0.0, 1.0, 1.0>, 1.0); llSetTimerEvent(TIME); } // state_entry state_exit() { llSetTimerEvent(0.0); } // state_exit on_rez(integer start_param) { llResetScript(); } // on_rez touch_start(integer num_detected) { integer iCount; for (iCount = 0; iCount < num_detected; iCount++) { if (llDetectedKey(iCount) == llGetOwner()) { state off; } // if } // for } // touch_start touch_end(integer num_detected) { } // touch_end timer() { llSensor("", NULL_KEY, ACTIVE | PASSIVE, 96.0, PI); } // timer sensor(integer num_detected) { integer bDetected = FALSE; integer iCount; for (iCount = 0; iCount < num_detected; iCount++) { key kObject = llDetectedKey(iCount); list lResults = llGetObjectDetails( kObject, [ OBJECT_PHYSICS, OBJECT_PHYSICS_COST, OBJECT_SCRIPT_TIME, OBJECT_OWNER, OBJECT_NAME ]); integer bIsPhysical = llList2Integer(lResults, 0); if (bIsPhysical == TRUE) { if (kObject != g_kLastDetected) { llPlaySound(SOUND, 1.0); g_kLastDetected = kObject; } // if bDetected = TRUE; float fPhysCost = llList2Float(lResults, 1); float fScriptTime = llList2Float(lResults, 2); string sOwner = llList2String(lResults, 3); string sName = llList2String(lResults, 4); string sMsg = "Phys Locator: ON\n"; sMsg += "Phys Cost: " + (string) fPhysCost + "\n"; sMsg += "Script Time: " + (string) fScriptTime + "\n"; sMsg += "Owner: " + sOwner + "\n"; sMsg += "Name; " + sName + "\n"; llSetText(sMsg, <0.0, 1.0, 1.0>, 1.0); particle_start(TEXTURE_KEY, kObject, <2.0, 2.0, 0.0>, ZERO_VECTOR); iCount = num_detected; // Break } } // for if (bDetected == FALSE) { llSetText("Phys Locator: ON\nNo physical objects detected.", <0.0, 1.0, 1.0>, 1.0); particle_stop(); g_kLastDetected = NULL_KEY; } } // sensor no_sensor() { llSetText("Phys Locator: ON\nNothing detected.", <0.0, 1.0, 1.0>, 1.0); particle_stop(); g_kLastDetected = NULL_KEY; } } // state on
×
×
  • Create New...