4Creative_Sammel_und_Kampfs.../4CGS-Crosshair v0.07.02

294 lines
12 KiB
Plaintext

// 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() + <armlength, 0.0 ,1.0> * rot;
vector end = start + <weaponlength, 0.0 ,0.0> * 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();
}
}