217 lines
5.8 KiB
Plaintext
217 lines
5.8 KiB
Plaintext
|
// 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;
|
||
|
}
|