integer charge = 0; integer chargelvl = 1; default { on_rez(integer start_param) { llResetScript(); } state_entry() { llListen(7,"",NULL_KEY,""); llRequestPermissions(llGetOwner(),PERMISSION_TRIGGER_ANIMATION); } listen(integer channel, string name, key id, string msg) { if((msg == "shoot" && id == llGetOwner()) || msg == (string)llGetOwner()+"x buster shoot") { rotation rot = llGetRot(); vector fwd = llRot2Fwd(rot); vector up = llRot2Up(rot); llStartAnimation("X Buster Shoot 3"); llParticleSystem([]); if(chargelvl <= 1) { llRezObject("X Buster Shot",llGetPos()+(0.7*up)+(fwd),fwd*50,llGetRot(),2); if(charge > 1) { llStopSound(); } llPlaySound("X Buster Fire",1.0); } else if(chargelvl == 2) { llRezObject("X Buster Medium Charge Shot",llGetPos()+(0.6*up)+(0.6*fwd),fwd*60,llGetRot(),2); llStopSound(); llPlaySound("X Buster Mid Charge Fire",1.0); } else if(chargelvl == 3) { llRezObject("X Buster Full Charge Shot",llGetPos()+(0.6*up)+(0.8*fwd),fwd*70,llGetRot(),2); llStopSound(); llPlaySound("X Buster Full Charge Fire",1.0); } else if(chargelvl == 4) { llRezObject("X Buster Max Charge Shot",llGetPos()+(1.05*up)+(1.25*fwd),fwd*50,llGetRot(),2); llStopSound(); llPlaySound("X Buster Full Charge Fire",1.0); } llStopAnimation("X Buster Shoot 3"); llSetTimerEvent(0.0); charge = 0; chargelvl = 1; } if(msg == (string)llGetOwner()+"x buster charge" && charge <= 1) { llStartAnimation("X Buster Shoot 3"); llParticleSystem([PSYS_SRC_PATTERN,PSYS_SRC_PATTERN_EXPLODE, PSYS_PART_MAX_AGE, 1.1, PSYS_SRC_BURST_PART_COUNT, 18, PSYS_PART_FLAGS,PSYS_PART_EMISSIVE_MASK | PSYS_PART_INTERP_COLOR_MASK | PSYS_PART_INTERP_SCALE_MASK | PSYS_PART_TARGET_POS_MASK | PSYS_PART_FOLLOW_VELOCITY_MASK, PSYS_PART_START_ALPHA, .6, PSYS_PART_END_ALPHA, .5, PSYS_PART_START_COLOR, <0,0.3,1>, PSYS_PART_END_COLOR, <.5,.8,1>, PSYS_SRC_TARGET_KEY, llGetKey(), PSYS_SRC_ACCEL, <0,0,0>, PSYS_PART_START_SCALE, <.7,.7,2>, PSYS_PART_END_SCALE, <.3,.3,.7>, PSYS_SRC_BURST_SPEED_MIN, -3.0, PSYS_SRC_BURST_SPEED_MAX, 1.0, PSYS_SRC_BURST_RADIUS, 2.4, PSYS_SRC_BURST_RATE, 0.1 ]); llSetTimerEvent(0.1); llPlaySound("X Buster Charge Start",1.0); chargelvl = 2; } } timer() { if(charge > 13 && chargelvl < 3) { chargelvl = 3; llParticleSystem([PSYS_SRC_PATTERN,PSYS_SRC_PATTERN_EXPLODE, PSYS_PART_MAX_AGE, .8, PSYS_SRC_BURST_PART_COUNT, 25, PSYS_PART_FLAGS,PSYS_PART_EMISSIVE_MASK | PSYS_PART_INTERP_COLOR_MASK | PSYS_PART_INTERP_SCALE_MASK | PSYS_PART_TARGET_POS_MASK, PSYS_PART_START_ALPHA, .6, PSYS_PART_END_ALPHA, .5, PSYS_PART_START_COLOR, <.9,.9,.7>, PSYS_PART_END_COLOR, <1,1,.8>, PSYS_SRC_TARGET_KEY, llGetKey(), PSYS_SRC_ACCEL, <0,0,0>, PSYS_PART_START_SCALE, <.9,.9,.9>, PSYS_PART_END_SCALE, <.3,.3,.3>, PSYS_SRC_BURST_SPEED_MIN, -3.0, PSYS_SRC_BURST_SPEED_MAX, 1.0, PSYS_SRC_BURST_RADIUS, 2.5, PSYS_SRC_BURST_RATE, 0.1 ]); } else if(charge > 35 && chargelvl < 4) { chargelvl = 4; llParticleSystem([PSYS_SRC_PATTERN,PSYS_SRC_PATTERN_EXPLODE, PSYS_PART_MAX_AGE, .6, PSYS_SRC_BURST_PART_COUNT, 30, PSYS_PART_FLAGS,PSYS_PART_EMISSIVE_MASK | PSYS_PART_INTERP_COLOR_MASK | PSYS_PART_INTERP_SCALE_MASK | PSYS_PART_TARGET_POS_MASK, PSYS_PART_START_ALPHA, .6, PSYS_PART_END_ALPHA, .5, PSYS_PART_START_COLOR, <1,.4,.55>, PSYS_PART_END_COLOR, <1,.95,1>, PSYS_SRC_TARGET_KEY, llGetKey(), PSYS_SRC_ACCEL, <0,0,0>, PSYS_PART_START_SCALE, <1.1,1.1,1.1>, PSYS_PART_END_SCALE, <.3,.3,.3>, PSYS_SRC_BURST_SPEED_MIN, -3.0, PSYS_SRC_BURST_SPEED_MAX, 1.0, PSYS_SRC_BURST_RADIUS, 2.7, PSYS_SRC_BURST_RATE, 0.1 ]); } charge += 1; if(charge > 90) { charge = 90; } } link_message(integer sender_num, integer num, string msg, key id) { if(msg == "x buster shoot") { rotation rot = llGetRot(); vector fwd = llRot2Fwd(rot); vector up = llRot2Up(rot); llStartAnimation("X Buster Shoot 3"); llParticleSystem([]); if(chargelvl <= 1) { llRezObject("X Buster Shot",llGetPos()+(0.7*up)+(fwd),fwd*50,llGetRot(),2); if(charge > 1) { llStopSound(); } llPlaySound("X Buster Fire",1.0); } if(chargelvl == 2) { llRezObject("X Buster Medium Charge Shot",llGetPos()+(0.6*up)+(0.6*fwd),fwd*60,llGetRot(),2); llStopSound(); llPlaySound("X Buster Mid Charge Fire",1.0); } if(chargelvl == 3) { llRezObject("X Buster Full Charge Shot",llGetPos()+(0.6*up)+(0.8*fwd),fwd*70,llGetRot(),2); llStopSound(); llPlaySound("X Buster Full Charge Fire",1.0); } else if(chargelvl == 4) { llRezObject("X Buster Max Charge Shot",llGetPos()+(1.05*up)+(1.25*fwd),fwd*40,llGetRot(),2); llStopSound(); llPlaySound("X Buster Full Charge Fire",1.0); } llStopAnimation("X Buster Shoot 3"); llSetTimerEvent(0.0); charge = 0; chargelvl = 1; } if(msg == "x buster charge" && charge <= 1) { llStartAnimation("X Buster Shoot 3"); llParticleSystem([PSYS_SRC_PATTERN,PSYS_SRC_PATTERN_EXPLODE, PSYS_PART_MAX_AGE, 1.1, PSYS_SRC_BURST_PART_COUNT, 18, PSYS_PART_FLAGS,PSYS_PART_EMISSIVE_MASK | PSYS_PART_INTERP_COLOR_MASK | PSYS_PART_INTERP_SCALE_MASK | PSYS_PART_TARGET_POS_MASK | PSYS_PART_FOLLOW_VELOCITY_MASK, PSYS_PART_START_ALPHA, .6, PSYS_PART_END_ALPHA, .5, PSYS_PART_START_COLOR, <0,0.3,1>, PSYS_PART_END_COLOR, <.5,.8,1>, PSYS_SRC_TARGET_KEY, llGetKey(), PSYS_SRC_ACCEL, <0,0,0>, PSYS_PART_START_SCALE, <.7,.7,2>, PSYS_PART_END_SCALE, <.3,.3,.7>, PSYS_SRC_BURST_SPEED_MIN, -3.0, PSYS_SRC_BURST_SPEED_MAX, 1.0, PSYS_SRC_BURST_RADIUS, 2.4, PSYS_SRC_BURST_RATE, 0.1 ]); llSetTimerEvent(0.1); llPlaySound("X Buster Charge Start",1.0); chargelvl = 2; } } }