// 4CGS-Crosshair [v0.07.02] // ► ◄ █ ▄ ■ ▲ ▼ © ▓ ░ ─ ↑ ↓ ▲ ▼ ✔ ✘ • ♫ « » integer fire = FALSE; integer snd = FALSE; integer dead = FALSE; float armlength = 0.6; float weaponlength = 96.0; integer regchan = -1; // Wird für Systemmeldungen benötigt integer enabled = TRUE; string VER = "0.07.02"; string DATE = "13.06.2020"; string MSG_VER = "Version:"; string MSG_SIMLAG = "Das Fadenkreuz wird kurz angehalten, da die Region etwas laggt."; string MSG_ATTACH = "Du musst das Fadenkreuz als HUD an der Position 'HUD Mitte 1' oder 'HUD Mitte 2' anlegen"; string MSG_ATT = "BITTE ALS HUD IN\nDER MITTE ANLEGEN!"; string MSG_DEFEAT = "wurde von {0} getroffen und besiegt."; string MSG_HIT = "wurde von {0} getroffen und erhielt {1} Trefferpunkte."; string MSG_DEFEATBY = "Du wurdest im Kampf von {0} besiegt."; string MSG_NOSCAN = "KEIN SCAN"; string MSG_HEALTH = "Gesundheit"; string MSG_DISABLED = "4CGS DEAKTIVIERT"; list m_dataUserStore = []; list m_dataStore = []; getregionchannel() { list lstParcelDetails = llGetParcelDetails(llGetPos(), [PARCEL_DETAILS_ID, PARCEL_DETAILS_AREA]); regchan = (integer)("0x" + llGetSubString(llList2String(lstParcelDetails, 0), 0, 7)); if(regchan > 0) regchan = -regchan; } list getDataListFromDataStorage(string _storage) { return llCSV2List(osGetDataValue(_storage)); } integer checkDataEntryInDataList(list _dataList, string _key) { integer _inListPosition = llListFindList(_dataList, [_key]); if(_inListPosition == -1) return FALSE; return TRUE; } string getDataEntryFromDataList(list _dataList, string _key) { integer _inListPosition = llListFindList(_dataList, [_key]); if(_inListPosition == -1) return ""; return llList2String(_dataList, _inListPosition + 1); } stopall() { list anim = llGetAnimationList(llGetOwner()); integer x; for (x = 0; x < llGetListLength(anim); x++) llStopAnimation(llList2Key(anim, x)); } default { state_entry() { getregionchannel(); llReleaseControls(); llSensorRemove(); vector avsize = llGetAgentSize(llGetOwner()); armlength = avsize.z * 0.33; if(llGetAttached() != 31 && llGetAttached() != 35) { llSetLinkPrimitiveParamsFast(LINK_SET, [PRIM_TEXT, MSG_ATT, <1,0,0>, 1, PRIM_COLOR, ALL_SIDES, <1,1,1>, 1, PRIM_SIZE, <0.1, 0.1, 0.1>]); llRegionSayTo(llGetOwner(), 0, MSG_ATTACH); llPreloadSound("male Cry 1"); llPreloadSound("male Cry 2"); llPreloadSound("female Cry 1"); llPreloadSound("female Cry 2"); llRequestPermissions(llGetOwner(), PERMISSION_ATTACH); } else { llSetText("", <0,0,0>, 0); llSensorRepeat("+++nothing+++", NULL_KEY, AGENT, 0.01, PI, 0.01); llRequestPermissions(llGetOwner(), PERMISSION_TRACK_CAMERA | PERMISSION_TAKE_CONTROLS); llSetLinkPrimitiveParamsFast(LINK_SET, [PRIM_TEXT, " ", <0,0,0>, 0, PRIM_COLOR, ALL_SIDES, <0,0,0>, 0, PRIM_SIZE, <0.1, 0.1, 0.1>]); } } attach(key id) { if(id == llGetOwner()) llResetScript(); } on_rez(integer num) { llResetScript(); } control(key id, integer level, integer edge) { integer start = level & edge; integer end = ~level & edge; integer held = level & ~edge; integer untouched = ~(level | edge); if(start & CONTROL_ML_LBUTTON) fire = TRUE; if(held & CONTROL_ML_LBUTTON) fire = TRUE; if(end & CONTROL_ML_LBUTTON) fire = FALSE; } run_time_permissions(integer perm) { if (perm & PERMISSION_TRACK_CAMERA | PERMISSION_TAKE_CONTROLS) { llTakeControls(CONTROL_ML_LBUTTON, TRUE, FALSE); llSensorRepeat("+++nothing+++", NULL_KEY, AGENT, 0.01, PI, 0.05); } if(perm & PERMISSION_ATTACH) { llSetLinkPrimitiveParamsFast(LINK_SET, [PRIM_COLOR, ALL_SIDES, <0,0,0>, 1, PRIM_SIZE, <0.1, 0.1, 0.1>]); llDetachFromAvatar(); } } no_sensor() { if (llGetAgentInfo(llGetOwner()) & AGENT_MOUSELOOK) { if(enabled == FALSE) { llSetLinkPrimitiveParamsFast(LINK_SET, [PRIM_TEXT, MSG_DISABLED, <1,0.6,0>, 1, PRIM_COLOR, ALL_SIDES, <1,1,1>, 1, PRIM_SIZE, <0.1, 0.1, 0.1>]); return; } rotation rot = llGetCameraRot(); vector start = llGetPos() + * rot; vector end = start + * rot; list found = llCastRay(start, end, [RC_DETECT_PHANTOM, FALSE, RC_REJECT_TYPES, RC_REJECT_LAND, RC_DATA_FLAGS, RC_GET_ROOT_KEY, RC_MAX_HITS , 1]); if (llList2Integer(found, 2) < 0 ) { llSensorRepeat("+++nothing+++", NULL_KEY, AGENT, 0.01, PI, 5); llOwnerSay(MSG_SIMLAG); } key id = llList2Key(found, 0); vector pos = llList2Vector(found, 1); string dist = llGetSubString((string)llVecDist(pos, llGetPos()), 0, 3); vector size = llGetAgentSize(id); string desc = llList2String(llGetObjectDetails(id, [OBJECT_NAME]), 0); string name = osReplaceString(desc, "4CGS_TARGET_", "", -1, 0); string nameold = llGetObjectName(); if (id != NULL_KEY & (size.z > 0 || llGetSubString(desc, 0, 10) == "4CGS_TARGET")) { // if(size.z > 0) // name = llList2String(llParseString2List(llList2String(llGetObjectDetails(id, [OBJECT_OWNER]), 0), [" "], []), 0); integer h = 100; integer chan = -1; if(size.z > 0) { // h = (integer)osGetHealth(id); m_dataStore = getDataListFromDataStorage("game.hud"); m_dataUserStore = getDataListFromDataStorage("game.hud.player." + id); h = (integer)getDataEntryFromDataList(m_dataUserStore, "stats.hp"); chan = (integer)getDataEntryFromDataList(m_dataUserStore, "channel"); llSetLinkPrimitiveParamsFast(LINK_SET, [PRIM_TEXT, "[" + name + "]\n▲ " + dist + "m ▲\n" + MSG_HEALTH + ": " + (string)h + "%", <1,0.6,0>, 1, PRIM_COLOR, ALL_SIDES, <1,0.2,0>, 1, PRIM_SIZE, <0.1, 0.1, 0.1>]); } else { // h = getobjectdesc llSetLinkPrimitiveParamsFast(LINK_SET, [PRIM_TEXT, "[" + name + "]\n▲ " + dist + "m ▲\n" + MSG_HEALTH + ": " + (string)h + "%", <0.3,0.3,1>, 1, PRIM_COLOR, ALL_SIDES, <1,0.2,0>, 1, PRIM_SIZE, <0.1, 0.1, 0.1>]); } if(fire == TRUE && llGetTime() >= 0.25) { fire = FALSE; llSetLinkPrimitiveParamsFast(LINK_SET, [PRIM_TEXT, "[" + name + "]\n▲ " + dist + "m ▲\n" + MSG_HEALTH + ": " + (string)h + "%", <1, 0.0, 0>, 1, PRIM_COLOR, ALL_SIDES, <1,0.0,0>, 1, PRIM_SIZE, <0.1, 0.1, 0.1>]); //llSetObjectName(llList2String(llParseString2List(name, [" "], []), 0)); // llRegionSay(chan, "gamecommand;reload"); integer damage = (5 + (integer)llFrand(5)); if(size.z > 0) { osMessageAttachments(id, "4CGS-DAMAGE:" + (string)damage, [31, 32, 33, 34, 35, 36, 37, 38], 0); llSleep(0.1); string sound = osGetGender(id) + " Cry " + (string)snd; snd = !snd; llTriggerSoundLimited(sound, 1, pos + <100, 100, 100>, pos - <100, 100, 100>); llSetLinkPrimitiveParamsFast(LINK_SET, [PRIM_TEXT, "[" + name + "]\n▲ " + dist + "m ▲\n" + MSG_HEALTH + ": " + (string)h + "%", <1,0.7,0>, 1, PRIM_COLOR, ALL_SIDES, <1,0.2,0>, 1, PRIM_SIZE, <0.1, 0.1, 0.1>]); llSetObjectName(llList2String(llParseString2List(llKey2Name(llGetOwnerKey(id)), [" "], []), 0)); llShout(0, "/me " + osFormatString(MSG_HIT, [llList2String(llParseString2List(llKey2Name(llGetOwner()), [" "], []), 0), (string)damage])); llSetObjectName(nameold); llResetTime(); } } } else llSetLinkPrimitiveParamsFast(LINK_SET, [PRIM_TEXT, "► " + MSG_NOSCAN + " ◄", <0,1,0>, 0, PRIM_COLOR, ALL_SIDES, <1,1,1>, 1, PRIM_SIZE, <0.1, 0.1, 0.1>]); } else llSetLinkPrimitiveParamsFast(LINK_THIS, [PRIM_COLOR, ALL_SIDES, <1,1,1>, 0, PRIM_TEXT, " ", <0,1,0>, 0, PRIM_SIZE, <0.001, 0.001, 0.001>]); } dataserver(key uuid, string msg) { //llOwnerSay(llKey2Name(uuid)); // llOwnerSay(msg); if(msg == "4CGS-SHOWVER") llOwnerSay(MSG_VER + " " + VER + " [" + DATE + "]"); if(msg == "4CGS-DISABLE") enabled = FALSE; if(msg == "4CGS-ENABLE") enabled = TRUE; if(msg == "4CGS-DIE") { dead = TRUE; llSetLinkPrimitiveParamsFast(LINK_THIS, [PRIM_COLOR, ALL_SIDES, <0,0,0>, 0, PRIM_TEXT, " ", <1,0,0>, 0, PRIM_SIZE, <0.1, 0.1, 0.1>]); string nameold = llGetObjectName(); llSetObjectName(llList2String(llParseString2List(llKey2Name(llGetOwner()), [" "], []), 0)); llShout(0, "/me " + osFormatString(MSG_DEFEAT, [llList2String(llParseString2List(llKey2Name(llGetOwnerKey(uuid)), [" "], []), 0)])); // llRegionSayTo(llGetOwner(), 0, osFormatString(MSG_DEFEATBY, [llList2String(llParseString2List(llKey2Name(llGetOwnerKey(uuid)), [" "], []), 0)])); llSetObjectName(nameold); state dead; } } changed(integer change) { if(change & (CHANGED_REGION | CHANGED_OWNER | CHANGED_INVENTORY)) llResetScript(); } } state dead { state_entry() { llReleaseControls(); osSetSpeed(llGetOwner(), 0); llRequestPermissions(llGetOwner(), PERMISSION_TAKE_CONTROLS | PERMISSION_TRIGGER_ANIMATION); osAvatarPlayAnimation(llGetOwner(), "dead"); llSensorRemove(); llSetLinkPrimitiveParamsFast(LINK_THIS, [PRIM_COLOR, ALL_SIDES, <0,0,0>, 0, PRIM_TEXT, " ", <0,0,0>, 0, PRIM_SIZE, <0.01, 0.01, 0.01>]); llSetTimerEvent(10); } run_time_permissions(integer perm) { if(PERMISSION_TRIGGER_ANIMATION & perm) stopall(); if(PERMISSION_TAKE_CONTROLS & perm) { 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, FALSE); } } control(key id, integer level, integer edge) { } timer() { llSetTimerEvent(0); llReleaseControls(); stopall(); osAvatarStopAnimation(llGetOwner(), "dead"); osAvatarPlayAnimation(llGetOwner(), "stand"); dead = FALSE; osSetHealth(llGetOwner(), 100); osSetSpeed(llGetOwner(), 1); llResetScript(); } changed(integer change) { if(change & (CHANGED_REGION | CHANGED_OWNER | CHANGED_INVENTORY)) llResetScript(); } }