Jump to content

JJValero Writer

Resident
  • Posts

    61
  • Joined

  • Last visited

Reputation

9 Neutral

Recent Profile Visitors

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

  1. A nivel de tiendas hace unos 14 o 15 años había una región donde ofrecían ese servicio. Les enviabas una foto y te hacían el avatar con tu cara. Eso si, se trataba de avatares estilo clásico. Pero cerraron por falta de suficientes clientes. ¿Quién querría tener un avatar con su cara pudiendo ser guapo? 🙂 🙂 🙂 🙂
  2. Although I am aware that many users distrust this solution, I think it is the best possible one. My argument is that network vendors are not a product, they are a service. When you buy a networked vendor, be it from Casper or from any other creator, it is providing you with a free service. This free service is the maintenance of servers, backup, technical support, ... This service is not free for the creators who provide it, and I gather that a service that handles over a million transactions in a single day consumes a lot of bandwidth. Hosting is not exactly cheap. This is a fixed cost that must be paid month by month. At first, when there are few users, there are more benefits than costs that are covered by vendor sales. But if the number of users continues to grow and especially if the number of new buyers decreases, there may come a time when the benefits are significantly reduced and may even be lower than the costs. That is why in a short time the creators are forced to create new products and addons. HippoTech "got its fingers caught" and had to close down. But it is not the only one since there are other less well-known systems such as AeonVox or E2V that also "got their fingers caught". I don't know if CasperTech is above or below the line where it still makes a profit. But in the long term it is inevitable that this business model will be unviable. There are only two solutions, either a subscription system or the purchase of the system by LL. If the subscription system is adopted, many users will switch to other systems and the sword of damocles will continue to threaten to fall just as HippoTech did. That is why I say that the solution that has been adopted is better.
  3. Something has gone wrong in the latest updates/reboots. I see problems when crossing the sim and when trying to do a teleport Now i am in "Blake Sea - Cattewater". When I try to cross to another region it is hell. I lose control of the avatar until I lose connection with SL. When trying to reconnect I have to do several retries because my avatar remains in ghost mode for several minutes. I have had problems with various regions in the area, as well as various regions south of Barbarossa. Too i have lost several boats that for some reason have not been returned.
  4. In same sites like the region Barbarossa or same sandbox there are grieffers using Keyframe attacks. Those attacks are able to enter in "no entry" parcels. Due those attacks are not detected by the SL client or Firestorm i created this script. Create a little orb and put the script inside and add to your avatar. default { state_entry() { } attach(key id) { if (id == NULL_KEY) { if (llGetPermissions() & PERMISSION_TAKE_CONTROLS) { llReleaseControls(); llSetTimerEvent(0.0); } } else { llRequestPermissions(id, PERMISSION_TAKE_CONTROLS); } } run_time_permissions(integer perm) { if (perm & PERMISSION_TAKE_CONTROLS) { llTakeControls( CONTROL_ML_LBUTTON , TRUE, TRUE); } } control(key id, integer level, integer edge) { } collision_start(integer num) { integer cnt; for (cnt = 0; cnt < num; cnt++) { integer type = llDetectedType(cnt); string name = llDetectedName(cnt); string ownerId = llDetectedOwner(cnt); key kObject = llDetectedKey(cnt); list lResults = llGetObjectDetails(kObject, [ OBJECT_PHYSICS ]); if ((type & (ACTIVE | SCRIPTED) ) != 0) { integer bIsPhysical = llList2Integer(lResults, 0); if (bIsPhysical == FALSE) { float fVel = llVecMag(llDetectedVel(cnt)); // Can be a NPV, frame Orbiter, frame pusher, elevator, .... if (fVel > 30.0) { llOwnerSay("keyframe : '" + name + "' Speed: '" + (string) fVel + "' Owner: secondlife:///app/agent/" + ownerId + "/about"); } // if } } } } collision_end(integer num) { } }
  5. I use those two functions: string float2Str(float in) { return (string)((integer)in) + "." + (string)((integer)((in - (integer)in) * 100)); } string vector2Str(vector v) { return "<" + float2Str(v.x) + ", " + float2Str(v.y) + ", " + float2Str(v.z) + ">"; } default { state_entry() { } touch_start(integer total_number) { vector v = <215.7509, 235.845750, 4001.50356>; llOwnerSay((string) v + " ======= " + vector2Str(v)); } }
  6. 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?
  7. I have confused forum, deleted. No delete option found.
  8. 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()"
  9. 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 = []; } } }
  10. 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?
  11. 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
  12. 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.
  13. 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
  14. 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); } }
  15. 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
×
×
  • Create New...