/*--------------------------------------------------------------------- かんたん文スクリプト「あやりりす」 Ver.0.01 ---------------------------------------------------------------------*/ //*************************************************************************************************** /*--------------------------------------------------------------------- コア ---------------------------------------------------------------------*/ GetEvalTalkArray { _m = GETTIME[1] _d = GETTIME[2] _ms = GetMonthSlot _dayofweek = GetDOWSlot _season = GetSeasonSlot _time = GetTimeSlotList _slots = IARRAY //一般的なおおざっぱなもの if _argc == 0 || _argv[0] == 0 { //朝,昼,夕,夜,深夜etc... _slots ,= _time //春,夏,秋,冬 _slots ,= _season //「春の朝」 _slots ,= "%(_season)の%(_time)" //「朝食時」「昼食時」「夕食時」 _slots ,= GetMesiSlot //?月 _slots ,= "%(_m)月" //?月上旬,中旬,下旬 _slots ,= "%(_m)月%(GetDaySlot)" //日曜,月曜... _slots ,= "%(_dayofweek)曜" //第?週日曜,月曜... _slots ,= "第%(((_d - 1) / 7) + 1)週%(_dayofweek)曜" //行事 _slots ,= "%(_ms)" //行事?曜 _slots ,= "%(_ms)%(_dayofweek)曜" } //特定の日付処理は特別 if _argc == 0 || _argv[0] == 1 { //?月?日 _slots ,= "%(_m)月%(_d)日" //?月第?週日曜,月曜... _slots ,= "%(_m)月第%(((_d - 1) / 7) + 1)週%(_dayofweek)曜" } _slots } TalkEval { //処理用!さわるな!! if ISFUNC(_argv[0]) { EVAL(_argv[0]) } else { IARRAY } } GetBootSharedScript { _name = '起動共通スクリプト' if ISFUNC(_name) { _script = EVAL(_name) if STRLEN(_script) { _script return } } '' return } //*************************************************************************************************** /*--------------------------------------------------------------------- ランダムトーク処理 元あったRandomTalkは消すこと ---------------------------------------------------------------------*/ /*=====かきかたの例============================ ランダムトーク3月 : array { 'ごにょごにょ' } 1.かならず最後に : array とつけること! 2.' 'でトークをかこむこと! " " じゃないよ! =============================================*/ RandomTalk { //高速ランダムトーク処理用 TOSTR(EVAL(CHR(0x22)+RandomTalkEx()+CHR(0x22))) } GetSeasonSlot { //3-5,6-8,9-11,12-2……でいいよね? _m = month if _m >= 3 && _m <= 5 { '春' } elseif _m >= 6 && _m <= 8 { '夏' } elseif _m >= 9 && _m <= 11 { '秋' } else { '冬' } } GetDaySlot { //10日,20日で区切りにしてみた _d = day if _d <= 10 { '上旬' } elseif _d <= 20 { '中旬' } else { '下旬' } } GetTimeSlotList { //おおざっぱに時間判定 //このへんは適当に書き換えるとよい。12時のところは「昼飯」にするとか。 switch hour { '深夜' //0時 '深夜' //1時 '深夜' //2時 '深夜' //3時 '深夜' //4時 '朝' //5時 '朝' //6時 '朝' //7時 '朝' //8時 '昼' //9時 '昼' //10時 '昼' //11時 '昼' //12時 '昼' //13時 '昼' //14時 '昼' //15時 '夕' //16時 '夕' //17時 '夕' //18時 '夜' //19時 '夜' //20時 '夜' //21時 '夜' //22時 '深夜' //23時 } } GetMesiSlot { _h = hour if _h == 7 || _h == 8 { '朝食時' } elseif _h == 12 { '昼食時' } elseif _h == 18 || _h == 19 { '夕食時' } else { IARRAY } } GetDOWSlot { //曜日 switch GETTIME[3] { '日' '月' '火' '水' '木' '金' '土' } } GetMonthSlot { //月をおおざっぱに _月 = GETTIME[1] _日 = GETTIME[2] //_曜日 = GetDOWSlot //_第n週 = ((_日 - 1) / 7) + 1 if _月 == 8 { //8月 '夏休み' return } if _月 == 3 && _日 >= 15 { //3/15以降くらい? '春休み' return } if _月 == 12 && _日 >= 24 { //12/24以降くらい? '冬休み' return } if _月 == 1 && _日 <= 3 { //正月は特別 '正月' return } if _月 == 1 && _日 < 10 { //1/10以前くらい? '冬休み' return } //標準は学校 '学校' } RandomTalkEx : nonoverlap { _talk = IARRAY //カスタム _talk ,= TalkEval('ランダムトークカスタム') //季節その他 _earray = GetEvalTalkArray _n = ARRAYSIZE(_earray) for _i = 0 ; _i < _n ; _i++ { _talk ,= TalkEval('ランダムトーク' + _earray[_i]) } //そしてこれがふつう _talk ,= TalkEval('ランダムトーク通常') parallel _talk } //*************************************************************************************************** /*---------------------------------------------------------------------------------- ゴースト変更編 ----------------------------------------------------------------------------------*/ /*=================================================================================== 記述方法 関数名の例は以下の通りです。 (名前)から変更 (名前)へ変更 (名前)を呼び出し (名前)を呼び出し完了 (名前)から呼び出される (名前)が終了した (名前)の部分にはゴーストのSakura(メイン、\0)側名、またはフルネームが入ります。 さくらや黒姉などSakura名だけで識別できない場合はフルネームを使ってください。 +や-、"や'や(など、AYAのシステムで使われる文字はすべて _ に置換されます。 記述例。 スクリプトは " " でかこってください。 Emilyへ変更 { "\u\s[10]\h\s[5]Emilyへ交代〜。" } ===================================================================================*/ TranslateSystemChar { _text = TOSTR(_argv[0]) _text = RE_REPLACE(_text,"[ !%(CHR(0x22))%(CHR(0x25))#$&()*+,-/:;<=>?@\[\]`{|}~]","_") _text } CallChangeFunc { //フルネームで探索 if reference2 && STRLEN(TOSTR(reference2)) { _ghostname = TranslateSystemChar(reference2) _funcname = _ghostname + _argv[0] if ISFUNC(_funcname) { _script = TOSTR(EVAL(_funcname)) if STRLEN(_script) { _script return } } } //Sakura名で探索 _ghostname = TranslateSystemChar(reference0) _funcname = _ghostname + _argv[0] if ISFUNC(_funcname) { _script = TOSTR(EVAL(_funcname)) if STRLEN(_script) { _script return } } //汎用切り替え _funcname = '他のゴースト' + _argv[0] if ISFUNC(_funcname) { _script = TOSTR(EVAL(_funcname)) if STRLEN(_script) { _script return } } //それでもない場合 if _argc >= 2 { REPLACE(TOSTR(EVAL(_argv[1])),'\-','') return } } OnGhostChanging { CallChangeFunc('へ変更','OnClose') } OnGhostChanged { GetBootSharedScript -- CallChangeFunc('から変更','OnBoot') } OnGhostCalling { CallChangeFunc('を呼び出し') } OnGhostCalled { GetBootSharedScript -- CallChangeFunc('から呼び出される','OnBoot') } OnGhostCallComplete { CallChangeFunc('を呼び出し完了') } OnOtherGhostClosed { CallChangeFunc('が終了した') } //*************************************************************************************************** /*---------------------------------------------------------------------------------- 起動編 ----------------------------------------------------------------------------------*/ /*=====かきかたの例================================================================== 春の朝に起動 : array { "ごにょごにょ" } 1.かならず最後に : array とつけること 2.' 'でトークをかこむこと 3.AYAの制限上、「7月5日に起動」というふうな数字ではじまる関数はつくれないので こういう場合は「起動7月5日」と書くこと ===================================================================================*/ OnBoot { GetBootSharedScript -- //高速処理用 TOSTR(EVAL(CHR(0x22)+BootEx()+CHR(0x22))) } BootEx { _talk = IARRAY //特殊な日付トーク _earray = GetEvalTalkArray(1) _n = ARRAYSIZE(_earray) for _i = 0 ; _i < _n ; _i++ { _talk = TalkEval('起動' + _earray[_i]) if ARRAYSIZE(_talk) { parallel _talk return } } //カスタム _talk = IARRAY _talk ,= TalkEval('起動カスタム') //季節その他 _earray = GetEvalTalkArray(0) _n = ARRAYSIZE(_earray) for _i = 0 ; _i < _n ; _i++ { if RE_SEARCH(_earray[_i],'^\d') == 0 { _talk ,= TalkEval(_earray[_i] + 'に起動') } _talk ,= TalkEval('起動' + _earray[_i]) } //そしてこれがふつう //時間帯別がないときのみ追加 if ARRAYSIZE(_talk) == 0 { _talk ,= TalkEval('起動') } parallel _talk }