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);
    }
}