integer timercount = 0; vector defaultscale = <0.5,0.5,0.5>; list spark = []; list fire = []; list smoke = []; initStatus() { //最初の火花 spark = [ //インベントリにあるパーティクルの画像ファイル名、またはパーティクルのキー(string) PSYS_SRC_TEXTURE , "explode" ,PSYS_PART_START_ALPHA ,1.0 //パーティクル開始時の透明度(floatで0から1) ,PSYS_PART_END_ALPHA , 1.0 //パーティクル消滅時の透明度 ,PSYS_PART_START_COLOR ,<1,1,0.8> //パーティクル生成時の色(vectorで) ,PSYS_PART_END_COLOR ,<1,0,0> //パーティクル消滅時の色 //パーティクル開始時のサイズ(vectorでメートル。3センチ強から4メートルまで。 //それ未満のサイズにしたいときは、画像の真中に小さく書く) ,PSYS_PART_START_SCALE ,<0.05,1.0,1.0> ,PSYS_PART_END_SCALE ,<0.05,0.2,1.0> //パーティクル開始時のサイズ ,PSYS_PART_MAX_AGE ,3.0 //パーティクルの寿命(float。最大30) //オブジェクトが視界に入ってからのパーティクル生成時間(例えば爆発なら短くする) ,PSYS_SRC_MAX_AGE,0.0 ,PSYS_SRC_ACCEL ,<0,0,-3> //パーティクルの加速度 ,PSYS_SRC_PATTERN , PSYS_SRC_PATTERN_ANGLE_CONE //コーン状 //パーティクルの開始角度。これより小さい角度には生成されない(floatでradian値) ,PSYS_SRC_ANGLE_BEGIN , 1.0 //パーティクルの終了角度。これより大きい角度には生成されない ,PSYS_SRC_ANGLE_END , PI_BY_TWO //1回の爆発あたりのパーティクル生成数(integer) ,PSYS_SRC_BURST_PART_COUNT , 10 //パーティクル生成地点の、中心からの距離(floatでメートル。 //PSYS_PART_FOLLOW_SRC_MASKをセットしないときのみ有効) ,PSYS_SRC_BURST_RADIUS , 0.0 ,PSYS_SRC_BURST_RATE , 0.2 //爆発の間隔(floatで秒。最小は0) ,PSYS_SRC_BURST_SPEED_MIN , 5.0 //パーティクルの最小速度 ,PSYS_SRC_BURST_SPEED_MAX , 10.0 //パーティクルの最大速度 ,PSYS_PART_FLAGS , (0 //ターゲットのZ=0の高さでバウンドする(オブジェクトを地面に置けば地面にバウンドする) | PSYS_PART_BOUNCE_MASK //パーティクル自身が光るか?(オブジェクトで言う「明るさを最大に」に相当) | PSYS_PART_EMISSIVE_MASK | PSYS_PART_FOLLOW_VELOCITY_MASK //移動方向に向けて回転する | PSYS_PART_INTERP_COLOR_MASK //スムーズに色を変える | PSYS_PART_INTERP_SCALE_MASK //スムーズにサイズを変える ) ]; //炎 fire = [ //インベントリにあるパーティクルの画像ファイル名、またはパーティクルのキー(string) PSYS_SRC_TEXTURE , "explode" ,PSYS_PART_START_ALPHA ,1.0 //パーティクル開始時の透明度 ,PSYS_PART_END_ALPHA , 0.0 //パーティクル消滅時の透明度 ,PSYS_PART_START_COLOR ,<1,0.8,0.2> //パーティクル生成時の色 ,PSYS_PART_END_COLOR ,<0.5,0,0> //パーティクル消滅時の色 ,PSYS_PART_START_SCALE ,<2.0,2.0,2.0> //パーティクル開始時のサイズ ,PSYS_PART_END_SCALE ,<5.0,5.0,5.0> //パーティクル開始時のサイズ ,PSYS_PART_MAX_AGE ,0.5 //パーティクルの寿命(float。最大30) ,PSYS_SRC_MAX_AGE,0.0 //視界に入ってからのパーティクル生成時間 ,PSYS_SRC_ACCEL ,<0,0,-0.5> //パーティクルの加速度 ,PSYS_SRC_PATTERN , PSYS_SRC_PATTERN_ANGLE_CONE //コーン状 ,PSYS_SRC_ANGLE_BEGIN , 0.0 //パーティクルの開始角度 ,PSYS_SRC_ANGLE_END , PI_BY_TWO //パーティクルの終了角度 ,PSYS_SRC_BURST_PART_COUNT , 10 //1回の爆発あたりのパーティクル生成数 ,PSYS_SRC_BURST_RADIUS , 0.0 //パーティクル生成地点の中心からの距離 ,PSYS_SRC_BURST_RATE , 0.1 //爆発の間隔(floatで秒。最小は0) ,PSYS_SRC_BURST_SPEED_MIN , 3.0 //パーティクルの最小速度 ,PSYS_SRC_BURST_SPEED_MAX , 5.0 //パーティクルの最大速度 ,PSYS_PART_FLAGS , (0 | PSYS_PART_EMISSIVE_MASK //パーティクル自身が光る | PSYS_PART_FOLLOW_VELOCITY_MASK //移動方向に向けて回転する | PSYS_PART_INTERP_COLOR_MASK //スムーズに色を変える | PSYS_PART_INTERP_SCALE_MASK //スムーズにサイズを変える ) ]; //煙 smoke = [ //インベントリにあるパーティクルの画像ファイル名、またはパーティクルのキー(string) PSYS_SRC_TEXTURE , "explode" ,PSYS_PART_START_ALPHA ,1.0 //パーティクル開始時の透明度 ,PSYS_PART_END_ALPHA , 0.0 //パーティクル消滅時の透明度 ,PSYS_PART_START_COLOR ,<1,0.9,0.9> //パーティクル生成時の色 ,PSYS_PART_END_COLOR ,<0,0,0> //パーティクル消滅時の色 ,PSYS_PART_START_SCALE ,<2.0,2.0,2.0> //パーティクル開始時のサイズ ,PSYS_PART_END_SCALE ,<5.0,5.0,5.0> //パーティクル開始時のサイズ ,PSYS_PART_MAX_AGE ,3.0 //パーティクルの寿命 ,PSYS_SRC_MAX_AGE,0.0 //視界に入ってからのパーティクル生成時間 ,PSYS_SRC_PATTERN , PSYS_SRC_PATTERN_ANGLE_CONE //コーン状 ,PSYS_SRC_ANGLE_BEGIN , 0.0 //パーティクルの開始角度 ,PSYS_SRC_ANGLE_END , 0.0 //パーティクルの終了角度 ,PSYS_SRC_OMEGA , <0,0,1> //バーストの間のローテーション ,PSYS_SRC_BURST_PART_COUNT , 1 //1回の爆発あたりのパーティクル生成数 ,PSYS_SRC_BURST_RATE , 0.3 //爆発の間隔 ,PSYS_SRC_BURST_SPEED_MIN , 3.0 ,PSYS_SRC_BURST_SPEED_MAX , 3.0 ,PSYS_PART_FLAGS , (0 | PSYS_PART_INTERP_COLOR_MASK //スムーズに色を変える | PSYS_PART_INTERP_SCALE_MASK //スムーズにサイズを変える | PSYS_PART_WIND_MASK //パーティクルを風になびかせる ) ]; } setParticles(list ps) { llParticleSystem(ps); } resetPrim() { //llSetColor(<1.0,1.0,1.0> , ALL_SIDES); //llSetAlpha(1.0 , ALL_SIDES); } default { state_entry() { llParticleSystem([]); resetPrim(); initStatus(); } on_rez(integer int) { llResetScript(); } link_message(integer shader, integer switch, string command, key id) { if (switch==4) { timercount = 0; llSetTimerEvent(0.1); } } timer() { timercount ++; if(timercount==1) { setParticles(spark); llSetColor(<1.0,0.0,0.0>,ALL_SIDES); llSetAlpha(0.8,ALL_SIDES); } else if (timercount==2) { setParticles(fire); llSetColor(<0.5,0.2,0>,ALL_SIDES); llSetAlpha(0.0,ALL_SIDES); } } }