diff --git a/4CGS-Crosshair v0.07.02 b/4CGS-Crosshair v0.07.02 new file mode 100644 index 0000000..6fe25cf --- /dev/null +++ b/4CGS-Crosshair v0.07.02 @@ -0,0 +1,294 @@ +// 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(); + } +} + \ No newline at end of file