// 4CGS - Meter [v0.7.0] // ► ◄ █ ▄ ■ ▲ ▼ © ▓ ░ ─ ↑ ↓ ▲ ▼ ✔ ✘ • ♫ « » string PRGNAME = "4CGS - Meter"; string VERSION = "0.7.0"; string name = ""; integer hp = 0; integer level = 0; integer regchan = -1; integer show_meter = TRUE; integer meter_delay = 10; // Zeit, wie lange der Text sichtbar ist. string MSG_DROPPED = "Du hast Dein 4cGS Meter auf der Region an Position {0} fallen lassen. Es wird in 15 Minuten automatisch gelöscht."; string MSG_WRONGATTACH = "Du musst das Meter an den Kopf Deines Avatars anlegen, damit es korrekt funktionieren kann."; string MSG_LEVELUP = "{0} hat level {1} erreicht."; default { state_entry() { getregionchannel(); name = llList2String(llParseString2List(llKey2Name(llGetOwner()), [" "], []), 0); llSetAlpha(1, ALL_SIDES); check(); llParticleSystem([]); llPreloadSound("Level_Up"); llResetTime(); llSetTimerEvent(5); } timer() { if(llGetTime() > meter_delay) { llSetText("", <0,0,0>, 0); llResetTime(); } } attach(key id) { if(id != llGetOwner()) check(); } on_rez(integer x) { llResetScript(); } changed(integer change) { if(change & (CHANGED_REGION | CHANGED_OWNER)) llResetScript(); } dataserver(key id, string msg) { if(llSubStringIndex(llKey2Name(id), "4CGS") == 0) { if(msg == "HIDE") { llSetText("", <0,0,0>, 0); return; } if(llSubStringIndex(msg, "NAME:") == 0 && llStringLength(msg) > 5) name = llGetSubString(msg, 5, -1); if(llSubStringIndex(msg, "LEVEL:") == 0 && llStringLength(msg) > 6) { level = (integer)llGetSubString(msg, 6, -1); if(level > (integer)llGetObjectDesc()) { llSetObjectDesc((string)level); if(llGetTime() > meter_delay) state level_up; } else if (level < (integer)llGetObjectDesc()) level = (integer)llGetObjectDesc(); } if(llSubStringIndex(msg, "HP:") == 0 && llStringLength(msg) > 3) { set_hud_text(); hp = (integer)llGetSubString(msg, 3, -1); if(hp < 0) hp = 0; } } } } state inworld { state_entry() { llOwnerSay(osFormatString(MSG_WRONGATTACH, [(string)llGetPos()])); llSetAlpha(1, ALL_SIDES); llSetTimerEvent(900); } timer() { llDie(); } } state level_up { state_entry() { string n = llGetObjectName(); llSetObjectName(name); llRegionSay(regchan, osFormatString(MSG_LEVELUP, [name, (string)level])); llSetObjectName(n); llSetTimerEvent(12); llSetText("► LEVEL UP! ◄", <1,1,0>, 1); osAvatarPlayAnimation(llGetOwner(), "level_up"); llPlaySound("Level_Up", 1); } timer() { llSetTimerEvent(0); llStopSound(); llParticleSystem([]); osAvatarStopAnimation(llGetOwner(), "level_up"); llSetText("", <0,0,0>, 0); state default; } } set_hud_text() { if(show_meter == TRUE) { vector color = <0, 1, 0>; if(hp == 0) color = <0,0,0>; if (hp > 0) color = <0.8,0,0>; if (hp > 24) color = <1,1,0>; if (hp > 49) color = <0,1,0>; llSetText("4CGS [v" + VERSION + "]\n────────────────────\n• " + name + " •\nLevel: " + level + "\n" + bar((float)hp, 100.0, 15), color, 1); } else llSetText("", <0,0,0>,0); } check() { if(llGetAttached() == 0) state inworld; if(llGetAttached() != 2) { llOwnerSay(MSG_WRONGATTACH); osForceDetachFromAvatar(); } else llSetAlpha(0, ALL_SIDES); } string bar(float val, float max, integer len) { integer pro = llFloor((len / max) * val); integer y; string txt = ""; for(y = 0; y < len; y++) txt += "░"; txt = osReplaceString(txt, "░", "█", pro, 0); return txt; } particle_level_up() { //float prims = llRound(((float)llGetParcelPrimCount(llGetPos(), PARCEL_COUNT_TOTAL, TRUE) / 500) / 10) * 10; //llOwnerSay((string)prims); llParticleSystem([ PSYS_PART_FLAGS,( 0 |PSYS_PART_INTERP_COLOR_MASK |PSYS_PART_INTERP_SCALE_MASK |PSYS_PART_FOLLOW_SRC_MASK |PSYS_PART_FOLLOW_VELOCITY_MASK |PSYS_PART_EMISSIVE_MASK ), PSYS_SRC_PATTERN, PSYS_SRC_PATTERN_EXPLODE , PSYS_PART_START_ALPHA,1, PSYS_PART_END_ALPHA,0.3, PSYS_PART_START_COLOR,<1.0, 0.95, 0.3> , PSYS_PART_END_COLOR ,<1.0, 0.2, 0.5> , PSYS_PART_START_SCALE,<0.2, 0.2, 0>, PSYS_PART_END_SCALE,<1, 1, 0>, PSYS_PART_MAX_AGE,3, PSYS_SRC_MAX_AGE,8.5, PSYS_SRC_ACCEL,<0,0,-0.3>, PSYS_SRC_BURST_PART_COUNT, 5, //(integer)prims, PSYS_SRC_BURST_RADIUS, 10, PSYS_SRC_BURST_RATE,0.05, PSYS_SRC_BURST_SPEED_MIN,0.1, PSYS_SRC_BURST_SPEED_MAX,0.7, PSYS_SRC_ANGLE_BEGIN,1.5625, PSYS_SRC_ANGLE_END,1.5625, PSYS_SRC_OMEGA,<0,0,0>, PSYS_SRC_TEXTURE, "star", PSYS_SRC_TARGET_KEY, (key)llGetOwner() ]); } 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; }