Kane_Red icon

Untitled

Kane_Red | PRO | 01/12/19 03:15:40 PM UTC | 0 ⭐ | 372 👁️ | Never ⏰ | []
text |

32.88 KB

|

None

|

0 👍

/

0 👎

float timefullhealth; // the time when the health will be full 
float timefullenergy; 
string OWNER; 
string KK; 
string KO; 
string KS; 
integer mychan = 0; 
string KF=""; 
integer status = 0; 
integer str = 10; 
integer sta = 20; 
integer agi = 10; 
integer int = 10; 
float armor_reduction = 1; 
integer maxhealth = 0; 
float regen_per_sec = 0.2; 
float dmg_per_sec = 0; 
float lastcall; 
integer settings=0; 
string label=""; 
float f_stun = 0; 
float f_bleed = 0; 
float f_bleed_dps; 
float f_poison = 0; 
float f_poison_dps; 
 updateLabel() { 
label = ""; 
if (settings & 8) label += "(S) "; 
if (settings & 2) label += "(Arena) "; 
if (settings & 4) label += "(AFK) "; 
if (settings & 32) label += "(OOC) "; 
 armor_reduction = 1; 
if ((settings & 448) == 448) { label += "(H)"; armor_reduction = 0.5;} else 
if ((settings & 192) == 192) { label += "(M)"; armor_reduction = 0.7;} else 
if (settings & 64) { label += "(L)"; armor_reduction = 0.8;} 
 if (label != "") label += "\n"; 
} 
saveSettings() { 
llHTTPRequest("http://66.103.230.111/sys/meter_savesettings.php",[HTTP_METHOD,"POST"],(string)llGetOwner() + "|" +(string)settings); 
} 
 integer getHealth() { 
float now = llGetTime(); 
timefullhealth += ((now - lastcall)*dmg_per_sec)/regen_per_sec; 
lastcall = now; 
 integer currentHealth = maxhealth - llRound((timefullhealth - now)*regen_per_sec); // calculates the current health, 
// if we know when it will be full then we know how much health is missing 
// couse there is 10 health missing per 2seconds 
if (currentHealth >maxhealth) currentHealth = maxhealth; 
if (currentHealth <0) currentHealth = 0; 
return currentHealth; 
} 
  integer getEnergy() { 
integer currentEnergy = 100 - llRound(timefullenergy - llGetTime()); // calculates the current health, 
// if we know when it will be full then we know how much health is missing 
// couse there is 10 health missing per 2seconds 
if (currentEnergy >100) currentEnergy = 100; 
if (currentEnergy <0) currentEnergy = 0; 
return currentEnergy; 
} 
   init() { 
OWNER = llKey2Name(llGetOwner()); 
llSetObjectName("["+llGetScriptName()+"] "+OWNER); 
mychan = -(integer)("0x"+llGetSubString(llMD5String(OWNER, 0), 0, 6)) - 37621; 
 llSetTimerEvent(2); 
KK = llUnescapeURL("%E2%96%93"); 
KO = llUnescapeURL("%E2%96%91"); 
KS = llUnescapeURL("%E2%98%BA"); 
KF = KK+KK+KK+KK+KK+KK+KK+KK+KK+KK+KK; 
llListen(mychan, "", NULL_KEY, ""); 
llRequestPermissions(llGetOwner(), PERMISSION_TRIGGER_ANIMATION); 
 lastcall = llGetTime(); 
 llMessageLinked(LINK_ALL_CHILDREN, 1, "", NULL_KEY); 
// download avatar attributes 
llHTTPRequest("http://66.103.230.111/sys/meter.php",[HTTP_METHOD,"POST"],(string)llGetOwner() + "|" + OWNER +"|"+llGetRegionName() +"|"+(string)llGetPos()+"|"+llGetScriptName()); 
} 
  default 
{ 
state_entry() 
{ 
 init(); 
} 
 attach(key who) { 
if (who != NULL_KEY) { 
llResetScript(); 
} else { 
integer currentHealth = getHealth(); 
if (currentHealth <70) llShout(0, "/me DETACHED METER!"); 
} 
} 
 run_time_permissions(integer perm) { // permissions dialog answered 
if (perm & PERMISSION_TAKE_CONTROLS) { // we got a yes 
llTakeControls(CONTROL_FWD | CONTROL_BACK | CONTROL_LEFT | CONTROL_RIGHT | CONTROL_UP | CONTROL_DOWN | CONTROL_LBUTTON |CONTROL_ML_LBUTTON, TRUE,FALSE); 
} 
} 
  http_response(key request_id, integer status, list metadata, string body) { 
list tmp = llParseString2List(body,["|"],[]); 
integer RCODE = llList2Integer(tmp,1); 
if (llStringLength(llList2String(tmp,0)) > 1) llOwnerSay(llList2String(tmp,0)); // pass message 
if (RCODE != 1) { 
if (RCODE == 10) { 
//settings saved we can Reset 
return; 
} 
 state off; 
} 
 str = llList2Integer(tmp,2); 
agi = llList2Integer(tmp,3); 
sta = llList2Integer(tmp,4); 
int = llList2Integer(tmp,5); 
settings = llList2Integer(tmp,6); 
 settings = ~((~settings) |448); // clear armor bits 
llWhisper(mychan-5,"p"); // pings the armor channel to see if there is any attached 
updateLabel(); 
 maxhealth = sta*5; 
regen_per_sec = 0.2; 
 llOwnerSay("Str:"+(string)str+" Agi:"+(string)agi+" Sta:"+(string)sta+" Int:"+(string)int); 
tmp = []; 
llWhisper(mychan-20,"3,"+(string)llGetTime()+","+(string)maxhealth); 
 settings = ~((~settings) |8); // clear shield bit 
llWhisper(mychan-1,"1"); // sheath all weapons 
llWhisper(mychan-10,"2"); // sheath shield 
} 
 timer() { 
float now = llGetTime(); 
  if (f_bleed != 0) if (f_bleed<now) { f_bleed=0; dmg_per_sec -= f_bleed_dps;} 
if (f_poison != 0) if (f_poison<now) { f_poison=0; dmg_per_sec -= f_poison_dps;} 
if (f_stun != 0) if (f_stun<now) { f_stun=0; llReleaseControls(); llStopAnimation("a_stun"); llStopAnimation("a_bash");} 
 integer currentHealth = getHealth(); 
integer currentEnergy = getEnergy(); 
 if ( (currentHealth > 0) && (status == 1)) { 
// get up no more down 
llReleaseControls(); 
llMessageLinked(LINK_ALL_CHILDREN, 1, "", NULL_KEY); 
status = 0; 
 if (settings & 2) { 
llShout(0,"/me is in arena mode and reseted automaticaly!"); 
timefullhealth = now; 
timefullenergy = now; 
currentHealth = maxhealth; 
currentEnergy = 100; 
} else { 
llShout(0,"/me rised up from the dirt"); 
} 
 llStopAnimation("a_dead"); 
    } 
  if ((currentHealth ==0) && (status != 1)) { 
status = 1; 
 if (settings & 2) { // arena 
timefullhealth = now + 500 + 5; 
timefullenergy = now + 100 + 5; 
} else { 
maxhealth = maxhealth; 
timefullhealth = now + 500 + 300; 
timefullenergy = now + 100 + 300; 
} 
  settings = ~((~settings) |8); // clear shield bit 
llMessageLinked(LINK_ALL_CHILDREN, 2, "", NULL_KEY); 
llWhisper(mychan-1,"1"); // sheath all weapons 
llWhisper(mychan-10,"2"); // sheath shield 
llRequestPermissions(llGetOwner(), PERMISSION_TAKE_CONTROLS | PERMISSION_TRIGGER_ANIMATION); 
llShout(0,"/me has been crushed"); 
llStartAnimation("a_dead"); 
} 
if (currentHealth ==0) { 
integer remainingsec = llRound(timefullhealth - llGetTime() -500); 
llSetText("knockout "+(string)remainingsec+"sec. remaining", <1,0.2,0>, 1); 
} else { 
   if ((timefullhealth > now) || (timefullenergy > now)) { 
 llWhisper(mychan-20,"1,"+(string)currentHealth+","+(string)currentEnergy); 
 integer points = llRound((float)currentEnergy/10); 
string ss=""; 
if (points != 0) ss = llGetSubString(KF,0,points); 
 float color = (float)currentHealth / 100; 
 llSetText(label+ss+"\nH:"+(string)currentHealth + "% E:"+(string)currentEnergy+"%", <1-color,color,0>, 1); 
 } else { 
llSetText(label+KS,<0.3,1,0.3>,1); 
} 
    } 
   } 
  listen(integer channel, string name, key id, string message) 
{ 
// float ds = llGetTime(); 
integer attack = (integer)message; 
 if (attack & 1073741824) { // settings 
 if ((attack & 2013265920) == 2013265920) {llStopAnimation("a_dead"); if (settings & 2) llShout(0,"/me reseted their meter in arena mode!"); else llShout(0,"/me RESETED THEIR METER!"); llResetScript(); } 
 integer bit = attack & 4294967295; // strips the system bits 
if (attack & 536870912) { // forcing the bit to 
if (attack & 268435456) // turn on 
settings = settings | bit; 
else // turn off 
settings = ~((~settings) | bit); 
} else { // switching the bit 
settings = settings ^ bit; 
} 
if (!(bit & 8) && !(bit & 448)) saveSettings(); // wont save if we just pull shield 
updateLabel(); 
return; 
} 
  float now = llGetTime(); 
 float reduction = ((attack&65535)>>9) *armor_reduction; // TODO: -str*0.2 the attack is blocked 
integer angle = attack&511; 
 if (status != 0) return; // our target is down or afk or ooc 
  if (((angle >-30) && (angle<=0)) || ((angle < 30) && (angle > 0))) reduction = reduction*2; 
 if ((angle < 180) && (angle > 50) && (settings&8)) { 
 llTriggerSound("7b805eda-4128-f21f-e91e-81dc6b2b0569",1); 
reduction -= 4 + str*0.5; 
if (reduction <0) reduction = 0; 
} else 
if (attack&65536) { // stun 
llOwnerSay("stunned"); 
llStartAnimation("a_stun"); 
llRequestPermissions(llGetOwner(), PERMISSION_TAKE_CONTROLS | PERMISSION_TRIGGER_ANIMATION); 
f_stun = now + (attack>>19); 
llWhisper(mychan-1, (string)(268435456 | (attack>>19))); 
 } else 
if (attack&131072) { // bleed 
if (f_bleed > now) return; // wont stack 
f_bleed = now + 15; 
f_bleed_dps = ((float)((attack&65535)>>9))/20; // dmg value / 20 per sec for 15 seconds 
dmg_per_sec += f_bleed_dps; 
 } else 
if (attack&262144) { // bash 
 float vec = PI* ((attack>>19) - 180) /180; 
llRequestPermissions(llGetOwner(), PERMISSION_TAKE_CONTROLS | PERMISSION_TRIGGER_ANIMATION); 
f_stun = now + 1; 
integer tmp = ((attack>>19) - 180); 
if ((tmp < 135) && (tmp >45)) llStartAnimation("a_bash_r"); 
if ((tmp >= 135) || (tmp <= -135))llStartAnimation("a_bash"); 
if ((tmp >= -45) && (tmp <= 45)) llStartAnimation("a_bash_b"); 
if ((tmp < -45) && (tmp >-135)) llStartAnimation("a_bash_l"); 
llMoveToTarget(llGetPos() + <llCos(vec), llSin(vec), 0>*7, 0.5); 
llSleep(0.1); 
llStopMoveToTarget(); 
} else 
if (attack&524288) { // disarm 
llOwnerSay("disarmed"); 
llWhisper(mychan-1, (string)(attack>>19)); 
} else 
if (attack&1048576) { // poison 
if (f_poison >now) return; // wont stack 
f_poison = now + 216000; // 1hour 
f_poison_dps = ((float)((attack&65535)>>9))/400; // dmg value / 40 per sec for 15 seconds 
dmg_per_sec += f_poison_dps; 
return; 
} else 
if (attack&2097152) { // lifesteal 
llOwnerSay("lifesteal"); 
} else 
if (attack&8388608) { // lifesteal 
llOwnerSay("maim"); 
} else 
if (attack&16777216) { // arrow 
llOwnerSay("arrow"); 
} else 
if (attack&33554432) { // perma poison 
llOwnerSay("perma poison"); 
 } else 
if (attack&67108864) { // heal 
timefullhealth -= 5*reduction; 
return; 
} else 
if (attack&134217728) { // cure 
f_bleed=0; 
f_poison=0; 
dmg_per_sec =0; 
return; 
} else 
if (attack&268435456) { 
llOwnerSay("energy dmg"+(string)((attack&65535)>>9)); 
if (timefullenergy <now) timefullenergy = now; 
timefullenergy += 2*((attack&65535)>>9); 
return; 
} 
   if (timefullhealth < now) timefullhealth = now; 
if (timefullenergy < now) timefullenergy = now; 
 integer currentEnergy = getEnergy(); 
 if (currentEnergy <5) { 
// full hit 
timefullhealth += 5*reduction; 
timefullenergy = now + 100; 
} else { 
// defended hit 
timefullhealth += 5*reduction/3; //15dmg / 3 = 5*5sec = 25sec 
timefullenergy += (2*reduction/3); // 15 2/3 = 10 
} 
 integer currentHealth = getHealth(); 
 if ((currentHealth <=0) && (status ==0)) { 
status = 1; 
 if (settings & 2) { // arena 
timefullhealth = now + 500 + 5; 
timefullenergy = now + 100 + 5; 
} else { 
maxhealth = maxhealth; 
timefullhealth = now + 500 + 300; 
timefullenergy = now + 100 + 300; 
} 
  settings = ~((~settings) |8); // clear shield bit 
llMessageLinked(LINK_ALL_CHILDREN, 2, "", NULL_KEY); 
llWhisper(mychan-1,"1"); // sheath all weapons 
llWhisper(mychan-10,"2"); // sheath shield 
llRequestPermissions(llGetOwner(), PERMISSION_TAKE_CONTROLS | PERMISSION_TRIGGER_ANIMATION); 
llShout(0,"/me has been crushed by "+name); 
llStartAnimation("a_dead"); 
 return; 
} 
llStopAnimation("a_hit"); 
llStartAnimation("a_hit"); 
if (settings & 1) llTriggerSound("1a77ee8c-4a38-5a46-f173-8ee81db79776",1); else llTriggerSound("575716be-37d3-dc33-5b75-fe99d78c03eb",1); 
 llShout(-(integer)("0x"+llGetSubString(llMD5String(name, 0), 0, 6)) - 37641,"2,"+OWNER+","+(string)((integer)(getHealth()/(maxhealth/100)))); 
 } 
 } 
 state off { 
state_entry() { 
llSetText("-"+KS+"-",<1,1,1>,1); 
} 
 attach(key who) { 
if (who == NULL_KEY) state default; 
} 
}
 SHIELD:
Code:
integer drawn=0;
string OWNER;
integer mychan;
draw() {
    if (drawn == 1) return;
    llSetLinkAlpha(LINK_SET,1,ALL_SIDES);
    llWhisper(mychan,(string)(1879048192 | 8));
    llWhisper(mychan-11,"1");
    drawn=1;
}
 sheath() {
    if (drawn == 0) return;
    llSetLinkAlpha(LINK_SET,0,ALL_SIDES);
    llWhisper(mychan,(string)(1610612736 | 8));    
    llWhisper(mychan-11,"2");   
    drawn=0;
}
   default
{
    state_entry()
    {
       OWNER = llKey2Name(llGetOwner());
       mychan =  -(integer)("0x"+llGetSubString(llMD5String(OWNER, 0), 0, 6)) - 37621;   
       llListen(mychan-10,"",NULL_KEY,"");
       drawn=1;
       sheath();
    }
     listen(integer chan, string name, key id, string msg) {
        if ((integer)msg == 1) draw();
        if ((integer)msg == 2) sheath();        
    }
     attach(key who) {
        llResetScript();
    }
}
 ARMOR:
Code:
string OWNER;
integer mychan;
integer armortype;
float run;
  default
{
    state_entry()
    {
       OWNER = llKey2Name(llGetOwner());
       mychan =  -(integer)("0x"+llGetSubString(llMD5String(OWNER, 0), 0, 6)) - 37621;
       list tmpvar = llCSV2List(llGetScriptName());
       if (llList2String(tmpvar,1) == "L") armortype = 64;
       if (llList2String(tmpvar,1) == "M") armortype = 192;
       if (llList2String(tmpvar,1) == "H") armortype = 448;
       tmpvar = [];
       llWhisper(mychan,(string)(1879048192 | armortype));
       llListen(mychan-5,"",NULL_KEY,"");
       llSetTimerEvent(2);
    }
     listen(integer chan, string name, key id, string msg) {
        llWhisper(mychan,(string)(1879048192 | armortype));
    }
     timer() {
        vector v = llGetVel();
        float norm = llFabs(llSqrt(v.x*v.x + v.y*v.y + v.z*v.z));
        norm -= 2;
        run += norm;
        if (run > 10) {
            if (armortype == 64) llWhisper(mychan, (string)(268435456 + (3<<9)));
            else if (armortype == 192) llWhisper(mychan, (string)(268435456 + (5<<9)));
            else if (armortype == 448) llWhisper(mychan, (string)(268435456 + (10<<9)));                        
            run=0;
        }
        if (run<-20) run = -20;
    }
    attach(key who) {
        if (who == NULL_KEY) {
            llWhisper(mychan,(string)(1610612736 | 448)); //takes off all armor settings
        } else {
            llResetScript();
        }
     }
}
 RANGED WEAPON (BOW):
Code:
// Era Of Gods Weapon Script
 // Server Variables
integer str; // Strength
integer agi; // Agility
float delay; // Delay Between hits
float range; // Range of weapon
float arc; // Arc of weapon
integer special1; 
integer chance1;
integer special2;
integer chance2;
integer damage;
integer energy1;
integer energy2;                      
    //LSL Variables
integer attacknum=0;
float holdbutton = 0; 
float nexthit=0;
string WeaponType = "bow";
integer mychan;
integer special_type;
integer sensortype=0;
string OWNER;
 on_attach() {
    // download avatar attributes and weapon stats
   // if (OWNER != llKey2Name(llGetOwner())) llResetScript(); // will kill all listeners of the previous AV
    OWNER = llKey2Name(llGetOwner());
    mychan =  -(integer)("0x"+llGetSubString(llMD5String(OWNER, 0), 0, 6)) - 37621;
}
   // --------------------------------------------------------------
default
{
    state_entry()
    {
         on_attach();
          llResetTime();
        llHTTPRequest("http://eraofgods.com/sys/weapons.php",[HTTP_METHOD,"POST"],(string)llGetOwner() + "|" + 
llKey2Name(llGetOwner()) +"|"+llGetRegionName() +"|"+(string)llGetPos()+"|"+llGetScriptName()+"|4");   // the last one is the weapon id in the database
    }
     http_response(key request_id, integer status, list metadata, string body) {
        list tmp = llParseString2List(body,["|"],[]);
         if (llList2Integer(tmp,1) != 1) {
            llOwnerSay(llList2String(tmp,0)); // pass message
            llOwnerSay("ERROR CODE:"+(string)llList2Integer(tmp,1));
            return;
            }
        str = llList2Integer(tmp,2);
        agi = llList2Integer(tmp,3);
        delay = llList2Float(tmp,4);
        range = llList2Float(tmp,5);
        arc = llList2Float(tmp,6);
        special1 = llList2Integer(tmp,7);        
        chance1 = llList2Integer(tmp,8);                
        special2 = llList2Integer(tmp,9);                
        chance2 = llList2Integer(tmp,10);
        damage = llList2Integer(tmp,11);
        energy1 = llList2Integer(tmp,12);
        energy2 = llList2Integer(tmp,13);                      
          tmp = [];
         state sheath;
    }
      attach(key okey) { if(okey != NULL_KEY) llResetScript(); }    // the weapon resets each 12 hours taking the stats from the server
 }
 // --------------------------------------------------------------
state drawn {
    state_entry() {
          llRequestPermissions(llGetOwner(),  PERMISSION_TRIGGER_ANIMATION | PERMISSION_TAKE_CONTROLS);
         llListen(mychan-1,"",NULL_KEY,"");
        llListen(1,"",llGetOwner(),"");
         llSetLinkAlpha(LINK_SET,1,ALL_SIDES);
        llTriggerSound("sound_draw",1);
         llTakeControls(CONTROL_DOWN | CONTROL_ML_LBUTTON | CONTROL_LBUTTON | CONTROL_BACK, TRUE, TRUE); 
        llStartAnimation("anim_draw");
         llSleep(1);
        llStartAnimation("hold_L_bow");
        llStartAnimation("bowholdfix");         
      }
     listen(integer chan, string name, key id, string msg)
    {
        if (chan != 1) {
            integer command = (integer)msg;
            if (command & 268435456) {                 // disarm
//                llOwnerSay("You are stunned for "+((string)(command & 256))+" seconds");
//                llSleep(command & 256);            
                  llSleep(2);
                } else 
            if (command & 134217728) {                 // slow    
                 }
         return;   
        } else {
            if(msg == llToLower("sheath "+WeaponType)) state sheath;
        }
    }    
      control(key id, integer down, integer change)
    {
        float now = llGetTime();
         if ( change & CONTROL_ML_LBUTTON ) {
            if (down & CONTROL_BACK) return;
            if (nexthit > now) return;
             rotation rot = llGetRot();
            vector fwd = llRot2Fwd(rot);
            vector pos = llGetPos();
            pos.z += 1.20;
            pos += fwd;    
            fwd = fwd * 60;
            vector vel = llGetVel();
            float shift = llSqrt(vel.x*vel.x + vel.y*vel.y + vel.z*vel.z);
            fwd = fwd + <llFrand(shift),llFrand(shift),llFrand(shift)>;
             llRezObject("arrow", pos, fwd, rot, 1);
            llTriggerSound("sound_shoot",1);
            llStartAnimation("shoot_L_bow");
            // llStopAnimation("h0");
           // llStartAnimation("a0");            
            nexthit = now + delay;
            }
     }
     attach(key okey) { if(okey != NULL_KEY) llResetScript(); }    // the weapon resets each 12 hours taking the stats from the server
}
 // --------------------------------------------------------------
state sheath {
    state_entry() {
        llListen(1,"",llGetOwner(),"");
         llRequestPermissions(llGetOwner(),  PERMISSION_TRIGGER_ANIMATION | PERMISSION_TAKE_CONTROLS);
        llReleaseControls();
         llSetLinkAlpha(LINK_SET,0,ALL_SIDES);
         llTriggerSound("sound_sheath",1);
        llStartAnimation("anim_sheath");
        llStopAnimation("hold_L_bow");
     }
     listen(integer chan, string name, key id, string msg) {
        if(msg == llToLower("reload")) state default;
        if(msg != llToLower("draw "+WeaponType)) return;
         state drawn;
     }
     attach(key okey) { if(okey != NULL_KEY) llResetScript(); }    // the weapon resets each 12 hours taking the stats from the server
}
 ARROW:
Code:
string  OWNER;
vector fwd;
float mass;
vector startpos;
 float VecMag(vector v) {
    return llSqrt(v.x*v.x + v.y*v.y + v.z*v.z);
}
 default
{
    state_entry()
    {
         llCollisionSound("d4eb4f5d-e93c-3800-579f-2beef5a6b476", 1);
        llCollisionSprite("");
        llSetStatus( STATUS_ROTATE_Y | STATUS_ROTATE_X | STATUS_ROTATE_Z, FALSE);
        llSetStatus( STATUS_DIE_AT_EDGE, TRUE);        
      }
     on_rez(integer rezzed)
    {
        if (rezzed) {
            startpos = llGetPos();
            llSetBuoyancy(0.30);
            OWNER = llKey2Name(llGetOwner());
            fwd = llGetVel();
            mass = llGetMass();
          //  llPlaySound("190acea2-0c1f-fb5a-5035-b108b25ae91f",1);
          //  llSetTimerEvent(20);
        } else {
            llSetStatus(STATUS_PHYSICS, FALSE);
            llSetStatus(STATUS_PHANTOM, TRUE);
        }
    }
     collision_start(integer detected)
    {
        llApplyImpulse(-mass*fwd,FALSE);
        llSetStatus(STATUS_PHANTOM, TRUE);
         if (VecMag(startpos - llGetPos()) < 5) {
            llSetStatus(STATUS_PHYSICS, FALSE); 
            llSleep(3);
            llDie();
            return;
            }
         if ((llDetectedType(0) & AGENT) && ((llDetectedKey(0) != llGetOwner()))) {
             vector myfwd = llRot2Fwd(llGetRot());
            vector targfwd = llRot2Fwd(llDetectedRot(0));
             float a1 = llAtan2(myfwd.y,myfwd.x);
            float a2 = llAtan2(targfwd.y, targfwd.x);
            float q;
             if ((a1 <0) && (a2>0)) q = -a1 + a2 - 2*PI;
            if ((a1 >0) && (a2>0)) q =  a2 - a1;
            if ((a1 >0) && (a2<0)) q =  a2 - a1;
            if ((a1 <0) && (a2<0)) q =  a2 - a1;
            if (q<PI) q = 2*PI + q;
            if (q>PI) q = q - 2*PI;
             integer angle =  llRound(180*q/PI);
            integer mydirection =  llRound(180*a1/PI);
             integer attack = (22<<9) + angle ; // numbers mean: stun, bleed, bash
            llSetObjectName(OWNER);
            llWhisper(-(integer)("0x"+llGetSubString(llMD5String(llDetectedName(0), 0), 0, 6)) -37621, (string)attack);
            llSetStatus(STATUS_PHYSICS, FALSE);                    
            llTriggerSound("f91d5919-0265-0a5d-bfae-657f578419c2",1);
             llSleep(3);
            llDie();
         } 
         llSensor("",NULL_KEY,AGENT,3.5,PI);   
        llSetStatus(STATUS_PHYSICS, FALSE);
     }
     land_collision_start(vector pos)
    {
     if (VecMag(startpos - llGetPos()) < 7) {
            llSetStatus(STATUS_PHYSICS, FALSE); 
            llSleep(3);
            llDie();
            return;
            }
     llApplyImpulse(-mass*fwd,FALSE);
    llSetStatus(STATUS_PHANTOM, TRUE);    
    llSensor("",NULL_KEY,AGENT,3.5,PI);
    llSetStatus(STATUS_PHYSICS, FALSE);
    }
     sensor(integer tnum)
    {
         vector myfwd = llRot2Fwd(llGetRot());
        vector targfwd = llRot2Fwd(llDetectedRot(0));
        vector d = llDetectedPos(0) - llGetPos();
        float a1 = llAtan2(myfwd.y,myfwd.x);
        float a2 = llAtan2(targfwd.y, targfwd.x);
        float q;
         if ((a1 <0) && (a2>0)) q = -a1 + a2 - 2*PI;
        if ((a1 >0) && (a2>0)) q =  a2 - a1;
        if ((a1 >0) && (a2<0)) q =  a2 - a1;
        if ((a1 <0) && (a2<0)) q =  a2 - a1;
        if (q<PI) q = 2*PI + q;
        if (q>PI) q = q - 2*PI;
         integer angle =  llRound(180*q/PI);
        integer mydirection =  llRound(180*a1/PI);
         integer attack = ((20 - 3*(integer)llSqrt(d.x*d.x + d.y*d.y +d.z*d.z))<<9) + angle ; // numbers mean: stun, bleed, bash
        llSetObjectName(OWNER);
        llWhisper(-(integer)("0x"+llGetSubString(llMD5String(llDetectedName(0), 0), 0, 6)) -37621, (string)attack);
         llTriggerSound("f91d5919-0265-0a5d-bfae-657f578419c2",1);
        llSleep(3);
        llDie();
    }
     no_sensor() {
        llTriggerSound("264dbd2f-c325-e291-52f7-9f1fb483a570",1);        
        //llRezObject("xxxtest",llGetPos(),<0,0,0>,<0,0,0,0>,1);
        llSleep(3);
        llDie();    
    }
    timer()
    {
        llDie();
    }
}
 MACE (MELEE):
Code:
// Era Of Gods Weapon Script
 // Server Variables
integer str; // Strength
integer agi; // Agility
float delay; // Delay Between hits
float range; // Range of weapon
float arc; // Arc of weapon
integer special1; 
integer chance1;
integer special2;
integer chance2;
integer damage;
integer energy1;
integer energy2;                      
    //LSL Variables
integer attacknum=0;
float holdbutton = 0; 
float nexthit=0;
string WeaponType = "";
integer mychan;
integer special_type;
integer sensortype=0;
integer settings=0;
string OWNER;
 on_attach() {
    // download avatar attributes and weapon stats
   // if (OWNER != llKey2Name(llGetOwner())) llResetScript(); // will kill all listeners of the previous AV
    OWNER = llKey2Name(llGetOwner());
    mychan =  -(integer)("0x"+llGetSubString(llMD5String(OWNER, 0), 0, 6)) - 37621;
}
   // --------------------------------------------------------------
default
{
    state_entry()
    {
         on_attach();
        list tmpvar = llCSV2List(llGetScriptName());
        WeaponType = llList2String(tmpvar,1);
        settings = llList2Integer(tmpvar,3);        
        llSetObjectName(OWNER);
        llResetTime();
        llHTTPRequest("http://eraofgods.net/sys/weapons.php",[HTTP_METHOD,"POST"],(string)llGetOwner() + "|" + 
llKey2Name(llGetOwner()) +"|"+llGetRegionName() +"|"+(string)llGetPos()+"|"+llGetScriptName()+"|"+llList2String(tmpvar,2)+"|"+llKey2Name(llGetCreator()));   // the last one is the weapon id in the database
        tmpvar = [];
    }
     http_response(key request_id, integer status, list metadata, string body) {
        list tmp = llParseString2List(body,["|"],[]);
         if (llList2Integer(tmp,1) != 1) {
            llOwnerSay(llList2String(tmp,0)); // pass message
            llOwnerSay("ERROR CODE:"+(string)llList2Integer(tmp,1));
            return;
            }
        str = llList2Integer(tmp,2);
        agi = llList2Integer(tmp,3);
        delay = llList2Float(tmp,4);
        range = llList2Float(tmp,5);
        arc = llList2Float(tmp,6);
        special1 = llList2Integer(tmp,7);        
        chance1 = llList2Integer(tmp,8);                
        special2 = llList2Integer(tmp,9);                
        chance2 = llList2Integer(tmp,10);
        damage = llList2Integer(tmp,11);
        energy1 = llList2Integer(tmp,12);
        energy2 = llList2Integer(tmp,13);                      
          tmp = [];
         state sheath;
    }
      attach(key okey) { if(okey != NULL_KEY) llResetScript(); }    // the weapon resets each 12 hours taking the stats from the server
 }
 // --------------------------------------------------------------
state drawn {
    state_entry() {
         if (settings & 1) llWhisper(mychan-10,(string)1); // draw shield if we have weapon that allows shield
        else llWhisper(mychan-10,(string)2); // sheath shield
         llWhisper(mychan-1, "1"); 
        llWhisper(mychan-2, "draw "+WeaponType);
         llRequestPermissions(llGetOwner(),  PERMISSION_TRIGGER_ANIMATION | PERMISSION_TAKE_CONTROLS);
         llListen(mychan-1,"",NULL_KEY,"");
        llListen(1,"",llGetOwner(),"");
         llSetLinkAlpha(LINK_SET,1,ALL_SIDES);
        llTriggerSound("sound_draw",1);
         llTakeControls(CONTROL_DOWN | CONTROL_ML_LBUTTON | CONTROL_LBUTTON, TRUE, TRUE); 
        llStartAnimation("anim_draw");
        llSleep(1);
        llStartAnimation("anim_stance");
     }
     listen(integer chan, string name, key id, string msg)
    {
        if (chan != 1) {
            integer command = (integer)msg;
            if (command & 268435456) {                 // disarm
//                llOwnerSay("You are stunned for "+((string)(command & 256))+" seconds");
//                llSleep(command & 256);            
                  llSleep(2);
                } else 
            if (command & 134217728) {                 // slow    
                 }
            if (command == 1) state sheath;                
            if (command == 2) settings = settings | 2;  // turn on friendly protection
            if (command == 3) settings = ~((~settings) | 2); // turn off friendly protection
         return;   
        } else {
            if ((msg == llToLower("sheath")) || (msg == llToLower("sheath "+WeaponType))) {
                 llWhisper(mychan-10, "2"); // sheath shield 
                 state sheath;
                }
        }
    }    
      control(key id, integer down, integer change)
    {
        float now = llGetTime();
       //  integer pressed = down & change;
      //  integer specialattack0 = CONTROL_FWD | CONTROL_BACK;
      //  integer specialattack1 = CONTROL_DOWN | CONTROL_BACK;
    //    integer specialattack2 = CONTROL_FWD | CONTROL_RIGHT;
    //    integer specialattack3 = CONTROL_BACK | CONTROL_LEFT;
        // Manually Triger Specials ONLY ONE TYPE SHOULD BE ACTIVE 
//        if ((pressed & specialattack0) == specialattack0) Bash();  
        //else if ((pressed & specialattack1) == specialattack1) Bleed(); 
        //else if ((pressed & specialattack2) == specialattack2) Cleve();
        //else if ((pressed & specialattack3) == specialattack3) Disarm();
        if ((down & change) & (CONTROL_DOWN)) { 
            sensortype =1;
            llSensor("",NULL_KEY,AGENT,20,0.1);
            }
         if ( (~down) & change & (CONTROL_ML_LBUTTON | CONTROL_LBUTTON) ) {
            if (nexthit > now) llSleep(nexthit - now);
            if (holdbutton == 0) holdbutton = now;
            llSensor("",NULL_KEY,AGENT,range,arc);
            llStopAnimation("h"+(string)attacknum);
            llStartAnimation("a"+(string)attacknum);            
            nexthit = llGetTime() + delay;
            }
         if ((down & change) & (CONTROL_ML_LBUTTON | CONTROL_LBUTTON)) {        
            holdbutton = now;
            attacknum = (integer)llFrand(3);
            llStartAnimation("h"+(string)attacknum);
            }
     }
     sensor(integer tnum)
    {
        integer who=-1;          
        if (settings & 2) { // if friendly fire on
            integer i=0;
            for (i=0;i<tnum;i++) {
                if (!llDetectedGroup(i)) who=i;
            }
            if (who ==-1) return;
        } else who =0;
         vector myfwd = llRot2Fwd(llGetRot());
        vector targfwd = llRot2Fwd(llDetectedRot(who));
         if (sensortype ==1) {
            sensortype =0;
             llMoveToTarget(llDetectedPos(who), 0.1);
            llSleep(0.2);
            llStopMoveToTarget();
            llWhisper(mychan, (string)(268435456 + (10<<9)));
            return;   
        }
        float a1 = llAtan2(myfwd.y,myfwd.x);
        float a2 = llAtan2(targfwd.y, targfwd.x);
        float q;
         if ((a1 <0) && (a2>0)) q = -a1 + a2 - 2*PI;
        if ((a1 >0) && (a2>0)) q =  a2 - a1;
        if ((a1 >0) && (a2<0)) q =  a2 - a1;
        if ((a1 <0) && (a2<0)) q =  a2 - a1;
        if (q<PI) q = 2*PI + q;
        if (q>PI) q = q - 2*PI;
         integer angle =  llRound(180*q/PI);
        integer mydirection =  180 + llRound(180*a1/PI);
         float heldtime = llGetTime() - holdbutton;
        if (heldtime>2) heldtime =2;
         integer attack = ((damage + llRound(3*heldtime))<<9) + angle ; // numbers mean: stun, bleed, bash
         if ((integer)llFrand(101) < chance1) attack = attack | special1;
        if ((integer)llFrand(101) < chance2) attack = attack | special2;
         if (attack & 262144) {
               attack += (mydirection<<19);
        }
         llWhisper(-(integer)("0x"+llGetSubString(llMD5String(llDetectedName(who), 0), 0, 6)) -37621, (string)attack);
        llTriggerSound("sound_hit",1);
    }
    no_sensor()
    {
        llTriggerSound("sound_miss",1);
    }
     attach(key okey) { if(okey != NULL_KEY) llResetScript(); }    // the weapon resets each 12 hours taking the stats from the server
}
 // --------------------------------------------------------------
state sheath {
    state_entry() {
        llListen(1,"",llGetOwner(),"");
         llWhisper(mychan-2, "sheath "+WeaponType);
          llRequestPermissions(llGetOwner(),  PERMISSION_TRIGGER_ANIMATION | PERMISSION_TAKE_CONTROLS);
        llReleaseControls();
         llSetLinkAlpha(LINK_SET,0,ALL_SIDES);
         llTriggerSound("sound_sheath",1);
        llStartAnimation("anim_sheath");
        llStopAnimation("anim_stance");
     }
     listen(integer chan, string name, key id, string msg) {
        if(msg == llToLower("reload")) state default;
        if(msg != llToLower("draw "+WeaponType)) return;
         state drawn;
     }
     attach(key okey) { if(okey != NULL_KEY) llResetScript(); }    // the weapon resets each 12 hours taking the stats from the server
}

Comments