Combat 2.0

  • Search existing ideas before submitting- Use support.secondlife.com for customer support issues- Keep posts on-topic Thank you for your ideas!
Combat Respawn Proposal Instead of One Region Respawn (Combat 2.0)
After some testing the combat communities in SL have noticed that having only one spawn in every sim that people automatically teleport to on death is not very ideal for most use cases. Our collective feedback to improve Combat Respawns is this: We can currently "Set Home" coordinates where allowed. Then on death, we get teleported to that typically. But instead, we could have a separate "Set Respawn" function that allows us to set a second set of coordinates if the parcel allows it, which would set the coordinates to wherever the owner of that parcel wants you to respawn. This should also allow the parcel owner to set multiple respawn points on the same parcel, and when you "Set Respawn", your Combat Respawn would be set to the nearest one to your avatar. It would be up to the sim owner to place signage to let players know where these are. This would allow us to set multiple respawn points in one sim and also in one parcel. This new Set Respawn function should not require the user to join a group. Then if a sim has Combat Respawns enabled on death, the player would teleport to their currently active Combat Respawn in whatever sim and parcel it is set to anywhere in SL. This way, players could "Set Respawn" in Lexington or Concord and always teleport back to that location on death in any of the sims. No Mans Land would not have Set Respawn coordinates set, but still have Combat Respawn on death enabled, so you still teleport to your Combat Respawn in Lexington or Concord on death. If there is any concern about having to add new buttons to each viewer to set this new Set Respawn function, you could also have an LSL function that allows avatars to set their Combat Respawn by clicking an object in world. In addition, you could leave the public auto respawn, but the Set Respawn would override it. For instance, No Mans Land could have the free for all style auto respawn enabled, but have a players Combat Respawn point override it if they have one set and Combat Respawn is enabled in the sim. I believe that would make Combat Respawns much more flexible and precise for any use case. This way people can keep their home points set to whatever skybox or linden home they own, auto respawns can still be a thing, and their Combat Respawn would be set separate from that which would override the auto respawn if the sim allows it. If you need any clarification, I'm always available. Contact me (Grave Resident) in world or at Gravefromsl on Discord.
3
·

complete

Combat Log — Faster response times during low activity and/or high priority on messages containing DEATH
Currently the combat log collects some logs up to a second before system-generated messages are sent, however for high priority messages like on avatar death this causes issues around response time. The sim should and/or: 1) only start collecting depending on activity in the COMBAT_CHANNEL. Like have it's own threshold to follow where collecting logs becomes more efficient. I think you can figure this out somewhat mathematically or re-use the threshold mechanism. E.g. after 6 logs per second or something. I think most messages only fit 2–3 events at most due to all the UUID keys causing it to hit close to the 1024-byte chat message limit. So holding back messages to only add one extra after up to a whole second after a high priority DEATH message was generated is a bit much. 2) (Recommended) send out any message containing a DEATH event immediately. -- The issues I'm faced with is a experienced-based single script respawn teleporter system. This teleporter relies on the death_action to be set to No Action on the region settings. With the intention to avoid double-teleports and re-engage people back into combat at ideal locations of the game designers/developers choosing. There are very noticeable delays when agents die and before they can be teleported out of combat. I wanted to opensource this system because otherwise, honestly it is great, it is incredibly simple and efficient. It is non-invasive and event-based (only waiting for and parsing DEATH messages via substring pre-checks). The simplicity means that one can focus on important things, like game design, where should people respawn and why. However the delays of receiving DEATH message mean an alternative is required, such as a complex management system of temp-on-attach scripted attachments that can receive on_death events instead, which are known to be instantenous. The problem is that people can detach these to cheat or just don't understand what it might be for. The script complexity also sky rockets, now you have to poll llGetAgentList at a high frequency to make sure you don't miss out on new arrivals and also poll to check whether any of the temp-on-attach attachments were detached (temp-on-attach just dies, so can just check if it still exists) and to force a re-attach (meaning to rez another one, tell it to temp-on-attach via scripted communications, …). If the checks are done too slowly then someone could easily cheat in combat, detach -> jump into combat -> giving them up to several seconds of complete immunity before the system notices and re-attaches.
5
·

complete

invulnerability_time does not stop outgoing damage (RC BlueSteel 2024-07-11.9900005687)
invulnerability_time is documented as a mechanism that stops both incoming and outgoing damage from a resident who recently died from reaching 0 health. However, in my testing of this setting, I found that outgoing damage is not blocked, regardless of estate manager status. Here is a script that demonstrates the issue: // This script tests the effect of invulnerability_time on incoming and outgoing damage. // Set invulnerability_time to 4 seconds or more. You and a volunteer set home on non-safe land. // Displaying seconds in your local chat timestamps is recommended. key volunteer = "1b3f651d-4e24-53c5-805d-3932540e283e"; // enter the key of someone in the region integer timerNum; integer messageNum; default { state_entry() { llListen(COMBAT_CHANNEL, "", COMBAT_LOG_ID, ""); } touch_start(integer n) { if (llDetectedKey(0) != llGetOwner()) return; float invTime = (float)llGetEnv("invulnerability_time"); llOwnerSay("invulnerability_time is set to " + (string)invTime + " seconds"); if (invTime < 4) { llOwnerSay("invulnerability_time is too short to test!"); return; } else if (llKey2Name(volunteer) == "") { llOwnerSay("Volunteer is not present or not defined in script!"); } timerNum = 0; messageNum = 0; llSetTimerEvent(1); } listen(integer channel, string name, key id, string text) { integer n; string eventJson; while ((eventJson = llJsonGetValue(text, [n++])) != JSON_INVALID) { key source = (key)llJsonGetValue(eventJson, ["source"]); if (source == llGetKey()) { string type = llJsonGetValue(eventJson, ["event"]); string targetName = llKey2Name((key)llJsonGetValue(eventJson, ["target"])); if (type == "DEATH") // this fires before DAMAGE, as expected { llOwnerSay((string)(++messageNum) + ": " + targetName + " was killed"); } else if (type == "DAMAGE") { integer amount = (integer)llJsonGetValue(eventJson, ["initial"]); llOwnerSay((string)(++messageNum) + ": Caused " + (string)amount + " damage to " + targetName); } } } } timer() { timerNum++; if (timerNum == 1) { llOwnerSay((string)(++messageNum) + ": Sending 100 damage to you to start your invulnerability timer"); llDamage(llGetOwner(), 100, 14); } else if (timerNum == 2) { llOwnerSay((string)(++messageNum) + ": Sending 11 damage to you, and 12 to " + llKey2Name(volunteer)); llDamage(llGetOwner(), 11, 14); llDamage(volunteer, 12, 14); } else if (timerNum == 3) { llOwnerSay((string)(++messageNum) + ": Sending 13 damage to you, and 14 to " + llKey2Name(volunteer)); llDamage(llGetOwner(), 13, 14); llDamage(volunteer, 14, 14); } else if (timerNum == 4) { llSetTimerEvent(0); llOwnerSay("Test complete"); } } } I feel I should point out that invulnerability_time , if it functioned as documented, would be a trade-off. For instance, a grenade thrown or a trap deployed before the owner's death would be incapable of dealing damage if detonated during the seconds of invulnerability given, making it very difficult to plan for in organized combat regions.
2
·

complete

Load More