string PRODUCT="THERP";
string VERSION="1.37";
string SECRET;
integer DC;
integer MC;
integer PC=55;
string mode="rp";
integer melee_mode;
key owner;
key creator;
string playername;
string playerrole;
string playertitle;
vector textcolor=<1,1,0>;
float textalpha=1.0;
integer showstats=1;
integer hea=100;
integer con=100;
integer hun=100;
integer thi=100;
integer damage_rate=4;
integer heal_rate=2;
string anim;
list stats;
integer t0;
integer t1;
integer t2;
integer t3;
restore(){
stats=getlink(2,[PRIM_NAME])+getlink(2,[PRIM_DESC]);
}
backup(){
setlink(2,[PRIM_NAME,""]);
setlink(2,[PRIM_DESC,""]);
/*
playername=
playertitle=
playerrole=
textcolor=
stats=
hea=
con=
hun=
thi=
*/
}
update2(){
string _stats;
if(showstats==1){
_stats="\nHEALTH: "+(string)hea+"%\nSTAMINA: "+(string)con+"%\nHUNGER: "+(string)hun+"%\nTHIRST: "+(string)thi+"%";
}else{
_stats="";
}
settext(
PRODUCT+" "+VERSION+
"\n"+playername+
"\n("+anim+")"+
"\n----\n.\n"+_stats
,textcolor,textalpha);
}
update(){
anim=getanim(owner);
t0++;
if(t0>9){ //every ten sec
t0=0;
t1++;
con+=((llFloor(llFrand(heal_rate))+1));
hea+=llFloor(llFrand(heal_rate));
if(anim=="Running"){
con-=damage_rate;
}
}
if(t1>5){ //every min
t1=0;
t2++;
}
if(t2>4){ // every 5 min
t2=0;
t3++;
}
if(t3>19){ //every hour
t3=0;
thi-=llFloor(llFrand(10));
hun-=llFloor(llFrand(10));
}
if(hea<0)hea=0;
if(hea>100)hea=100;
if(con<0)con=0;
if(con>100)con=100;
if(hun<0)hun=0;
if(hun>100)hun=100;
if(thi<0)thi=0;
if(thi>100)thi=100;
update2();
}
do_detach(){
llSetTimerEvent(1); //temp!
llListen(PC,"",owner,""); //!!!!!
}
do_attach(){
llSetTimerEvent(1);
llListen(PC,"",owner,"");
}
init(){
restore();
hea=100;
con=100;
hun=100;
thi=100;
owner=llGetOwner();
creator=llGetCreator();
playername=k2dn(owner);
if(!llGetAttached())do_detach();
else do_attach();
}
list s2l(string a,list b,list c){return llParseString2List(a,b,c);}
list l2l(list a,integer b,integer c){return llList2List(a,b,c);}
list dsl(list a,integer b,integer c){return llDeleteSubList(a,b,c);}
string l2s(list a,integer b){return llList2String(a,b);}
integer gll(list a){return llGetListLength(a);}
integer ssi(string a,string b){return llSubStringIndex(a,b);}
integer lfl(list a,list b){return llListFindList(a,b);}
integer sl(string a){return llStringLength(a);}
string gss(string a,integer b,integer c){return llGetSubString(a,b,c);}
string dss(string a,integer b,integer c){return llDeleteSubString(a,b,c);}
string s2b(string a){return llStringToBase64(a);}
string b2s(string a){return llBase64ToString(a);}
key genkey(){return llGenerateKey();}
list getlink(integer a,list b){return llGetLinkPrimitiveParams(a,b);}
setlink(integer a,list b){llSetLinkPrimitiveParamsFast(a,b);}
settext(string a,vector b,float c){setlink(3,[26,a,b,c]);}
string k2n(key a){return llKey2Name(a);}
string k2un(key a){return llGetUsername(a);}
string k2dn(key a){return llGetDisplayName(a);}
string k2u(key a){return "secondlife:///app/agent/"+(string)a+"/about";}
integer k2c(key a,integer b,integer c){return (integer)("0x"+gss((string)a,b,c));}
string getanim(key a){return llGetAnimation(a);}
default{
on_rez(integer i){
//state rez;
init();
}
attach(key i){
init();
}
state_entry(){
init();
}
listen(integer c,string n,key i,string m){
llOwnerSay(m);
if(c==MC){}
if(c==DC){}
if(c==PC){
if(m=="ooc"){}
if(m=="rp"){}
if(m=="arena"){}
if(m=="afk"){}
if(m=="stats off")showstats=0;
if(m=="stats on")showstats=1;
if(m=="settings"){}
if(m=="menu"){}
if(m=="help"){}
list l=s2l(m,[" "],[]);
if(l2s(l,0)=="color")textcolor=(vector)l2s(l,1);
if(l2s(l,0)=="name")playername=(string)dsl(l,0,0);
}
backup();
update();
}
timer(){
update();
}
sensor(integer i){
}
no_sensor(){
}
collision_start(integer i){
}
}
state rez{
state_entry(){
settext(
"disabled"
,textcolor,textalpha);
}
}