/*--------------------------------------------------------------------- かんたん文スクリプト「あやりりす」 ---------------------------------------------------------------------*/ //*************************************************************************************************** OnSystemLoad.AYALILITH : void { stroke = (1,1,1) stroketimer = (1,1,1) strokeid = ('','','') half_menu_counter = 0 最終マウスイベント分 = systemuptime / 60 ゴースト起動時刻 = systemuptime 累積起動時間初期 = 累積起動時間 if ISVAR('半分メニュー無効') == 0 { 半分メニュー無効 = 0 } _a = GETFUNCLIST('ゴースト起動前の処理') foreach _a;_f { EVAL(_f) } if username == '' { username = 名前入力初期WRAP() } 着せ替え情報 = IARRAY 着せ替え有効パーツリストEX = IARRAY 着せ替え有効カテゴリリストEX = IARRAY モード = '' } OnSystemUnload.AYALILITH : void { ERASEVAR('累積起動時間初期') ERASEVAR('stroke','stroketimer','strokeid') ERASEVAR('half_menu_counter') ERASEVAR('最終マウスイベント分') ERASEVAR('ゴースト起動時刻') ERASEVAR('タグなしトーク') ERASEVAR('終了しない') ERASEVAR('installedplugin_name','installedplugin_id') ERASEVAR('情報_ゴースト名','情報_キャラ名','情報_シェル名','情報_バルーン名') ERASEVAR('情報_ユーザー名','情報_ユーザー誕生日') ERASEVAR('情報_モニタ色数','情報_モニタ幅','情報_モニタ高さ') ERASEVAR('スタンプ帳動作','スタンプ帳情報') ERASEVAR('名前入力識別') ERASEVAR('着せ替え情報','着せ替え有効パーツリストEX','着せ替え有効カテゴリリストEX') _a = GETFUNCLIST('ゴースト終了前の処理') foreach _a;_f { EVAL(_f) } } AYL_OnTextDrop { if TOINT(AYALilithEX) != 0 { REPLACE(reference.raw[0],CHR(1),CHR(0xd,0xa)) } else { REPLACE(reference.raw[0],CHR(1),' ') } } 累積起動時間 { ghostupmin_total() / 24 } AYL_OnMinuteChange { _r = 累積起動時間 if 累積起動時間初期 != _r { 累積起動時間初期 = _r if ISFUNC('累積起動時間変化') { _rs = EVAL('累積起動時間変化(_r)') if _rs != '' { _rs return } } } _fname = 'OnMinuteChange' + TOSTR(モード) if ISFUNC(_fname) { EVAL(_fname) return } } /*---------------------------------------------------------------------------------- イベント振り分け ----------------------------------------------------------------------------------*/ OnGhostEventTranslate.AYL { _fname = 'AYL_' + _argv[0] if ISFUNC(_fname) { _fname return } _fname = _argv[0] + TOSTR(モード) if ISFUNC(_fname) { _fname return } if SUBSTR(_argv[0],0,3) == 'On_' { _fname = _argv[0] if ISFUNC(_fname) { _fname return } } } AYL_OnChoiceSelect { if SUBSTR(reference[0],0,7) == 'http://' { "\C\![open,browser,%(reference[0])]" return } _fn = reference[0] + TOSTR(モード) if ISFUNC(_fn) { EVAL(_fn) return } _fn = reference[0] if ISFUNC(_fn) { EVAL(_fn) return } if SUBSTR(reference[0],0,6) == '|TEST|' { TOSTR(EVAL(SUBSTR(reference[0],6,10000))) return } } AYL_OnAnchorSelect { if SUBSTR(reference[0],0,7) == 'http://' { "\C\![open,browser,%(reference[0])]" return } _fn = 'アンカー' + reference[0] + TOSTR(モード) if ISFUNC(_fn) { EVAL(_fn) return } _fn = 'アンカー' + reference[0] if ISFUNC(_fn) { EVAL(_fn) return } if ISFUNC(reference[0]) { EVAL(reference[0]) return } } //*************************************************************************************************** /*--------------------------------------------------------------------- コア ---------------------------------------------------------------------*/ DelayedTalkEval { _txtarray = SPLIT(_argv[0],C_CRLF) _output = '' if GETTYPE(_txtarray) == 4 { _n = ARRAYSIZE(_txtarray) _inited = 0 for _i = 0 ; _i < _n ; _i++ { if _inited { _output += C_CRLF } _inited = 1 _output += EVAL(CHR(0x22) + REPLACE(_txtarray[_i],CHR(0x22),'%(CHR(0x22))') + CHR(0x22)) } } else { _output += EVAL(CHR(0x22) + REPLACE(_argv[0],CHR(0x22),'%(CHR(0x22))') + CHR(0x22)) } TOSTR(_output) } GetEvalTalkArray { _m = GETTIME[1] _d = GETTIME[2] _ms = GetMonthSlot _holiday = GetHolidaySlot _dayofweek = GetDOWSlot _season = GetSeasonSlot _time = GetTimeSlotList _slots = IARRAY //一般的なおおざっぱなもの if _argc == 0 || _argv[0] == 0 { //朝,昼,夕,夜,深夜etc... _slots ,= _time //何時 _slots ,= "%(GETTIME[4])時" //春,夏,秋,冬 _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)曜" //平日休日 _slots ,= _holiday //行事・平日休日 _slots ,= "%(_ms)%(_holiday)" //季節・状態 _slots ,= "%(_season)の%(_holiday)" //自ゴーストの状態 _slots ,= 'シェル' + SHIORI3FW.ShellName _slots ,= 'バルーン' + SHIORI3FW.BalloonName _slots ,= 着せ替え有効パーツリストEX _slots ,= 着せ替え有効カテゴリリストEX //その他 if ISFUNC('あやりりす・日付イベントユーザー定義') { _slots ,= EVAL('あやりりす・日付イベントユーザー定義') } } //特定の日付処理は特別 if _argc == 0 || _argv[0] == 1 { //?月?日 _slots ,= "%(_m)月%(_d)日" //?月第?週日曜,月曜... _slots ,= "%(_m)月第%(((_d - 1) / 7) + 1)週%(_dayofweek)曜" } _slots } TalkEval { //処理用!さわるな!! _argv[0] = OnGhostEventTranslate.AYL(_argv[0]) if ISFUNC(_argv[0]) { _var = EVAL(_argv[0]) _type = GETTYPE(_var) if _type == 4 { _var } elseif _type == 0 { IARRAY } else { CVSTR(_var) if STRLEN(_var) { (_var,IARRAY) } else { IARRAY } } } else { IARRAY } } GetBootSharedScript { MouseEventTimeReset _s = '' _a = GETFUNCLIST('起動共通スクリプト') foreach _a;_f { _s += EVAL(_f) } _s } GetCloseSharedScript { _s = '' _a = GETFUNCLIST('終了共通スクリプト') foreach _a;_f { _s += EVAL(_f) } _s } //*************************************************************************************************** /*--------------------------------------------------------------------- ランダムトーク処理 元あったRandomTalkは消すこと ---------------------------------------------------------------------*/ /*=====かきかたの例============================ ランダムトーク3月 : array { 'ごにょごにょ' } 1.かならず最後に : array とつけること! 2.' 'でトークをかこむこと! " " じゃないよ! =============================================*/ RandomTalk { //高速ランダムトーク処理用 DelayedTalkEval(RandomTalkEx()) } 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 { if ISFUNC('あやりりす・時間帯定義') { EVAL('あやりりす・時間帯定義') return } //おおざっぱに時間判定 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] { '日' '月' '火' '水' '木' '金' '土' } } GetHolidaySlot { if ISFUNC('あやりりす・休日定義') { EVAL('あやりりす・休日定義') return } //平日・休日 switch GETTIME[3] { '休日' '平日' '平日' '平日' '平日' '平日' '休日' } } GetMonthSlot { if ISFUNC('あやりりす・行事定義') { EVAL('あやりりす・行事定義') return } //月をおおざっぱに _月 = GETTIME[1] _日 = GETTIME[2] //_曜日 = GetDOWSlot //_第n週 = ((_日 - 1) / 7) + 1 if _月 == 1 && _日 <= 3 { //正月は特別 '正月' return } if _月 == 12 && _日 == 24 { //正月は特別 'クリスマス' return } if _月 == 12 && _日 == 25 { //正月は特別 'クリスマス' return } if _月 == 12 && _日 <= 31 || _日 >= 26 { //正月は特別 '年末' return } //標準は仕事 '仕事' } キーワードランダムトーク { _key = TOSTR(_argv[0]) _talk = DelayedTalkEval(KeywordRandomTalkExec(_key)) _talk = REPLACE(_talk,_key,"\f[bold,true]%(_key)\f[bold,default]") _talk } KeywordRandomTalkExec : nonoverlap { _text = _argv[0] _array = RandomTalkArray _output = IARRAY foreach _array ; _script { if _text _in_ _script { _output ,= _script } } parallel _output } RandomTalkArrayNewTalk { _talknew_func = IARRAY _talknew_func ,= '新規追加ランダムトーク' _earray = GetEvalTalkArray _n = ARRAYSIZE(_earray) for _i = 0 ; _i < _n ; _i++ { _talknew_func ,= '新規追加ランダムトーク' + _earray[_i] } if ISVAR('last_new_talk_id_array') == 0 { last_new_talk_id_array = IARRAY } if ISVAR('last_new_talk_array') == 0 { last_new_talk_array = IARRAY } _changed = 0 _n = ARRAYSIZE(_talknew_func) for _i = 0 ; _i < _n ; _i++ { _talknew = TalkEval(_talknew_func[_i]) _tnum = ARRAYSIZE(_talknew) if _tnum >= 2 { //1行目は日付 _idx = RE_ASEARCH("^\Q%(_talknew_func[_i])\E,",last_new_talk_id_array) _date = "%(_talknew_func[_i]),%(_talknew[0])" if _idx >= 0 { if last_new_talk_id_array[_idx] != _date { last_new_talk_array ,= _talknew[1,_tnum-1] last_new_talk_id_array[_idx] = _date _changed = 1 } } else { last_new_talk_array ,= _talknew[1,_tnum-1] last_new_talk_id_array ,= _date _changed = 1 } } } if _changed { last_new_talk_array = UNIQUE(last_new_talk_array) } _n = ARRAYSIZE(last_new_talk_array) if _n >= 1 { _rand = RAND(_n) last_new_talk_array[_rand] last_new_talk_array[_rand] = IARRAY return } RandomTalkArray } RandomTalkArray { _talk = IARRAY _talknew = TalkEval('新規追加ランダムトーク') _n = ARRAYSIZE(_talknew) if _n >= 2 { //1行目は日付 _talk ,= _talknew[1,65535] //優先トークが終わったらまぜる } //カスタム _talk ,= TalkEval('ランダムトークカスタム') //季節その他 _earray = GetEvalTalkArray _n = ARRAYSIZE(_earray) for _i = 0 ; _i < _n ; _i++ { _talknew = TalkEval('新規追加ランダムトーク' + _earray[_i]) _tnum = ARRAYSIZE(_talknew) if _tnum >= 2 { //1行目は日付 _talk ,= _talknew[1,_tnum-1] //優先トークが終わったらまぜる } _talk ,= TalkEval('ランダムトーク' + _earray[_i]) } //そしてこれがふつう _talk ,= TalkEval('ランダムトーク通常') _talk } RandomTalkEx : nonoverlap { parallel RandomTalkArrayNewTalk } //*************************************************************************************************** /*---------------------------------------------------------------------------------- ゴースト変更編 ----------------------------------------------------------------------------------*/ /*=================================================================================== 記述方法 関数名の例は以下の通りです。 (名前)から変更 (名前)へ変更 (名前)を呼び出し (名前)を呼び出し完了 (名前)から呼び出される (名前)が終了した (名前)の部分にはゴーストのSakura(メイン、\0)側名、またはフルネームが入ります。 さくらや黒姉などSakura名だけで識別できない場合はフルネームを使ってください。 +や-、"や'など、AYAのシステムで使われる文字はすべて _ に置換されます。 AYAの制限回避のため、数字ではじまるゴーストの名前の場合は、「*(ゴースト名)」と書いてください。 例:*54を呼び出し 記述例。 スクリプトは " " でかこってください。 Emilyへ変更 { "\u\s[10]\h\s[5]Emilyへ交代〜。" } ===================================================================================*/ TranslateSystemChar { SHIORI3FW.TranslateSystemChar(_argv[0],'_') } さくらスクリプト除去 { SHIORI3FW.RemoveAllTags(_argv[0]) } さくらスクリプト無効化 { SHIORI3FW.EscapeAllTags(_argv[0]) } GhostEventSearch { _funcname = OnGhostEventTranslate.AYL(_argv[0]) if STRLEN(_funcname) { _funcname return } _funcname = OnGhostEventTranslate.AYL('*' + _argv[0]) if STRLEN(_funcname) { _funcname return } '' } CallChangeFuncWrapper { _r0 = reference[0] _r2 = reference[2] reference[0] = さくらスクリプト無効化(_r0) reference[2] = さくらスクリプト無効化(_r2) TOSTR(EVAL(_argv[0])) reference[0] = _r0 reference[2] = _r2 } CallChangeFunc { //フルネームで探索 if reference[2] && STRLEN(TOSTR(reference[2])) { _ghostname = TranslateSystemChar(reference[2]) _funcname = GhostEventSearch(_ghostname + _argv[0]) if STRLEN(_funcname) { _script = CallChangeFuncWrapper(_funcname) if STRLEN(_script) { _script return } } } //Sakura名で探索 _ghostname = TranslateSystemChar(reference[0]) _funcname = GhostEventSearch(_ghostname + _argv[0]) if STRLEN(_funcname) { _script = CallChangeFuncWrapper(_funcname) if STRLEN(_script) { _script return } } //ゴースト名変換 if ISFUNC('ゴースト名変換') { _ghostname = EVAL('ゴースト名変換(TOSTR(reference[0]))') _funcname = GhostEventSearch(_ghostname + _argv[0]) if STRLEN(_funcname) { _script = CallChangeFuncWrapper(_funcname) if STRLEN(_script) { _script return } } } //汎用切り替え _funcname = OnGhostEventTranslate.AYL('他のゴースト' + _argv[0]) if ISFUNC(_funcname) { _script = CallChangeFuncWrapper(_funcname) if STRLEN(_script) { _script return } } //それでもない場合 if _argc >= 2 { REPLACE(CallChangeFuncWrapper(OnGhostEventTranslate.AYL(_argv[1])),'\-','') return } } AYL_OnGhostChanging { GetCloseSharedScript -- _boot = SpecialBootCloseTalk('終了') if STRLEN(_boot) { _boot return } _script = CallChangeFunc('へ変更','OnClose') _script = REPLACE(_script,'\e','') _script = _script + "\w9\w9\e" _script } AYL_OnGhostChanged { _boot = SpecialBootCloseTalk('起動') if STRLEN(_boot) { _boot return } タグなしトーク = さくらスクリプト除去(reference[1]) GetBootSharedScript -- CallChangeFunc('から変更','OnBoot') } AYL_OnGhostCalling { CallChangeFunc('を呼び出し') } AYL_OnGhostCalled { _boot = SpecialBootCloseTalk('起動') if STRLEN(_boot) { _boot return } タグなしトーク = さくらスクリプト除去(reference[1]) GetBootSharedScript -- CallChangeFunc('から呼び出される','OnBoot') } AYL_OnGhostCallComplete { タグなしトーク = さくらスクリプト除去(reference[1]) CallChangeFunc('を呼び出し完了') } AYL_OnOtherGhostClosed { CallChangeFunc('が終了した') } //*************************************************************************************************** /*---------------------------------------------------------------------------------- 起動編 ----------------------------------------------------------------------------------*/ /*=====かきかたの例================================================================== 春の朝に起動 : array { "ごにょごにょ" } 1.かならず最後に : array とつけること 2.' 'でトークをかこむこと 3.AYAの制限上、「7月5日に起動」というふうな数字ではじまる関数はつくれないので こういう場合は「起動7月5日」と書くこと ===================================================================================*/ SpecialBootCloseTalk { DelayedTalkEval(SpecialBootCloseTalkExec(_argv[0])) } SpecialBootCloseTalkExec { _date = GETTIME[0] + '/' + GETTIME[1] + '/' + GETTIME[2] if ISVAR('特殊起動トーク配列') == 0 { 特殊起動トーク配列 = IARRAY } if _date != 特殊起動トーク実行日時 { _talk = (SpecialBootCloseTalkExecArray(_argv[0]),IARRAY) 特殊起動トーク配列 = _talk 特殊起動トーク実行日時 = _date } _n = ARRAYSIZE(特殊起動トーク配列) if _n { _rand = RAND(_n) _script = 特殊起動トーク配列[_rand] 特殊起動トーク配列[_rand] = IARRAY _script return } '' return } SpecialBootCloseTalkExecArray { //特殊な日付トーク _earray = GetEvalTalkArray(1) _n = ARRAYSIZE(_earray) for _i = 0 ; _i < _n ; _i++ { _talk = TalkEval(_argv[0] + _earray[_i]) if ARRAYSIZE(_talk) { _talk return } } IARRAY return } AYL_OnBoot { GetBootSharedScript -- //高速処理用 DelayedTalkEval(BootCloseEx('起動')) } AYL_OnFirstBoot { GetBootSharedScript -- //高速処理用 if TOINT(reference[0]) != 0 { _r = DelayedTalkEval(BootCloseEx('Vanish後初回起動')) if _r == '' { _r = DelayedTalkEval(BootCloseEx('初回起動')) } _r } else { DelayedTalkEval(BootCloseEx('初回起動')) } } BootCloseEx { _talk = IARRAY //特殊な日付トーク _result = SpecialBootCloseTalkExec(_argv[0]) if STRLEN(_result) { _result return } //カスタム _talk = IARRAY _talk ,= TalkEval(_argv[0] + 'カスタム') //季節その他 _earray = GetEvalTalkArray(0) _n = ARRAYSIZE(_earray) for _i = 0 ; _i < _n ; _i++ { if RE_SEARCH(_earray[_i],'^\d') == 0 { _talk ,= TalkEval(_earray[_i] + 'に' + _argv[0]) } _talk ,= TalkEval(_argv[0] + _earray[_i]) } //そしてこれがふつう //時間帯別がないときのみ追加 if ARRAYSIZE(_talk) == 0 { _talk ,= TalkEval(_argv[0]) } parallel _talk } /*---------------------------------------------------------------------------------- 終了編 書き方の例は起動編といっしょ(ただし「〜に終了」になります) ----------------------------------------------------------------------------------*/ AYL_OnClose { GetCloseSharedScript -- _script = BootCloseEx('終了') if ! 終了しない { _script = REPLACE(_script,'\e','') _script = REPLACE(_script,'\-','') _script += '\w9\-' } //高速処理用 DelayedTalkEval(_script) } //*************************************************************************************************** /*---------------------------------------------------------------------------------- マウス反応編 ----------------------------------------------------------------------------------*/ MouseEventTimeReset { 最終マウスイベント分 = systemuptime / 1000 } //---- OnMouseMoveイベント -------------------------------------------------------------- MouseEventExec { _fname = '' if _argc >= 2 { _fname = _argv[0] + TOSTR(reference[3]) + TOSTR(_argv[1]) } else { _fname = _argv[0] + TOSTR(reference[3]) + TOSTR(reference[4]) } _fname = OnGhostEventTranslate.AYL(_fname) if ISFUNC(_fname) { EVAL(_fname) MouseEventTimeReset return } _fname = _argv[0] + TOSTR(reference[3]) _fname = OnGhostEventTranslate.AYL(_fname) if ISFUNC(_fname) { EVAL(_fname) MouseEventTimeReset return } } MouseMoveWheelFunc { _side = TOINT(reference[3]) if _argv[0] { _side += 10 } if strokeid[_side] == reference[4] { if (GETTICKCOUNT - TOINT(stroketimer[_side])) > 1500 { stroke[_side] = 1 } stroketimer[_side] = GETTICKCOUNT _stroke = TOINT(stroke[_side]) _stroke += 1 stroke[_side] = _stroke if _stroke >= _argv[1] { MouseEventExec(_argv[2]); stroke[_side] = 1 } } else { stroke[_side] = 1 stroketimer[_side] = GETTICKCOUNT strokeid[_side] = reference[4] } } AYL_OnMouseMove { if ISFUNC('あやりりす・マウスなで感度') { MouseMoveWheelFunc(0,あやりりす・マウスなで感度,'なでなで') } else { MouseMoveWheelFunc(0,50,'なでなで') } } AYL_OnMouseWheel { _script = '' _sensitivity = 4 if ISFUNC('あやりりす・マウスホイール感度') { _sensitivity = あやりりす・マウスホイール感度 } if reference[2] > 0 { _script = MouseMoveWheelFunc(1,_sensitivity,'ころころ上') } else { _script = MouseMoveWheelFunc(1,_sensitivity,'ころころ下') } if STRLEN(_script) { _script return } MouseMoveWheelFunc(1,_sensitivity,'ころころ') } AYL_OnMouseDoubleClick { MouseEventExec('ダブルクリック') } AYL_OnMouseDragStart { AYL_drag_start_col = reference[4] MouseEventExec('ドラッグ開始',AYL_drag_start_col) } AYL_OnMouseDragEnd { MouseEventExec('ドラッグ終了',AYL_drag_start_col) void ERASEVAR('AYL_drag_start_col') } AYL_OnMouseGesture { _name = '' _is_end = 0 case reference[5] { when 'right_up' { _name = '右上'; } when 'up' { _name = '上'; } when 'left_up' { _name = '左上'; } when 'left' { _name = '左'; } when 'left_down' { _name = '左下'; } when 'down' { _name = '下'; } when 'right_down' { _name = '右下'; } when 'right' { _name = '右'; } when 'circle.cw' { _name = '時計回り'; } when 'circle.ccw' { _name = '反時計回り'; } when 'end' { _is_end = 1 _name = '終了' } } _postfix = '' _garray = IARRAY _is_start = 0 if _is_end { ERASEVAR('gesture_name_array') ERASEVAR('gesture_circle_array') ERASEVAR('gesture_init') } else { if ISVAR('gesture_init') == 0 { gesture_init = 1 _is_start = 1 } if '回り' _in_ _name { if ISVAR('gesture_circle_array') == 0 { gesture_circle_array = IARRAY } gesture_circle_array ,= _name _postfix = '回転' _garray = gesture_circle_array } else { if ISVAR('gesture_name_array') == 0 { gesture_name_array = IARRAY } gesture_name_array ,= _name _garray = gesture_name_array } } if _is_end { _fname = "マウスジェスチャー%(reference[0])%(reference[4])終了" _fname = OnGhostEventTranslate.AYL(_fname) if ISFUNC(_fname) { EVAL(_fname) MouseEventTimeReset return } _fname = "マウスジェスチャー%(reference[0])終了" _fname = OnGhostEventTranslate.AYL(_fname) if ISFUNC(_fname) { EVAL(_fname) MouseEventTimeReset return } } else { if _is_start { _fname = "マウスジェスチャー%(reference[0])%(reference[4])開始" _fname = OnGhostEventTranslate.AYL(_fname) if ISFUNC(_fname) { EVAL(_fname) MouseEventTimeReset } else { _fname = "マウスジェスチャー%(reference[0])開始" _fname = OnGhostEventTranslate.AYL(_fname) if ISFUNC(_fname) { EVAL(_fname) MouseEventTimeReset } } } _fname = "マウスジェスチャー%(_postfix)%(reference[0])%(reference[4])%(JOIN(_garray,'・'))" _fname = OnGhostEventTranslate.AYL(_fname) if ISFUNC(_fname) { EVAL(_fname) MouseEventTimeReset return } _fname = "マウスジェスチャー%(_postfix)%(reference[0])%(reference[4])単発%(_name)" _fname = OnGhostEventTranslate.AYL(_fname) if ISFUNC(_fname) { EVAL(_fname + '(_garray)') MouseEventTimeReset return } _fname = "マウスジェスチャー%(_postfix)%(reference[0])%(reference[4])" _fname = OnGhostEventTranslate.AYL(_fname) if ISFUNC(_fname) { EVAL(_fname + '(_garray)') MouseEventTimeReset return } _fname = "マウスジェスチャー%(_postfix)%(reference[0])%(JOIN(_garray,'・'))" _fname = OnGhostEventTranslate.AYL(_fname) if ISFUNC(_fname) { EVAL(_fname) MouseEventTimeReset return } _fname = "マウスジェスチャー%(_postfix)%(reference[0])単発%(_name)" _fname = OnGhostEventTranslate.AYL(_fname) if ISFUNC(_fname) { EVAL(_fname) MouseEventTimeReset return } _fname = "マウスジェスチャー%(_postfix)%(reference[0])" _fname = OnGhostEventTranslate.AYL(_fname) if ISFUNC(_fname) { EVAL(_fname + '(_garray)') MouseEventTimeReset return } } } //*************************************************************************************************** /*---------------------------------------------------------------------------------- プラグイン ----------------------------------------------------------------------------------*/ AYL_On_installedplugin : void { _n = ARRAYSIZE(reference) installedplugin_name = IARRAY installedplugin_id = IARRAY for _i = 0 ; _i < _n ; _i++ { _a = SPLIT(reference[_i],CHR(1)) installedplugin_name ,= _a[0] installedplugin_id ,= _a[1] } } プラグインの存在 { if _argc == 0 { 0 return } if ASEARCH(_argv[0],installedplugin_id) >= 0 { 1 return } if ASEARCH(_argv[0],installedplugin_name) >= 0 { 1 return } 0 } //**** ユーティリティ //エスケープ エスケープ { _r = _argv[0] if RE_SEARCH(_r,'["\[\]]') { '"' + REPLACE(_r,'"','""') + '"' } else { _r } } //通常メニュー メニュー { '\![*]\q[' -- エスケープ( SHIORI3FW.MakeJustText(_argv[0],46) ) -- _n = ARRAYSIZE(_argv) _s = '' for _i = 1 ; _i < _n ; _i++ { _s += ',' + エスケープ(_argv[_i]) } _s -- ']' } //半分メニュー 半分メニュー開始 { half_menu_counter = 0 } 半分メニュー初期化 { half_menu_counter = 0 } 半分メニュー終了 { if 半分メニュー無効 { '' return } if half_menu_counter != 0 { '\n' } } 半分メニュー { if 半分メニュー無効 { メニュー(_argv) + '\n' return } if (half_menu_counter % 2) == 0 { if half_menu_counter != 0 { '\n' } } -- '\![*]\q[' -- エスケープ( SHIORI3FW.MakeJustText(_argv[0],21) ) -- _n = ARRAYSIZE(_argv) _s = '' for _i = 1 ; _i < _n ; _i++ { _s += ',' + エスケープ(_argv[_i]) } _s -- ']' -- if (half_menu_counter % 2) == 0 { '\_l[145]' } half_menu_counter++ } /*---------------------------------------------------------------------------------- 通知 ----------------------------------------------------------------------------------*/ AYL_OnNotifySelfInfo : void { 情報_ゴースト名 = reference[0] 情報_キャラ名[0] = reference[1] 情報_キャラ名[1] = reference[2] 情報_シェル名 = reference[3] 情報_バルーン名 = reference[5] } AYL_OnNotifyUserInfo : void { 情報_ユーザー名 = reference[0] 情報_ユーザー誕生日 = reference[2] if username == '' { if 情報_ユーザー名 == '' { username = 名前入力初期 } else { username = 情報_ユーザー名 } } } AYL_OnDisplayChange : void { //---- 変数にディスプレイ解像度と色深度に関する情報を取得 //---- 使うかどうかは分からないがとりあえず保持しておく 情報_モニタ色数 = reference[0] 情報_モニタ幅 = reference[1] 情報_モニタ高さ = reference[2] } /*---------------------------------------------------------------------------------- リンクメニュー ----------------------------------------------------------------------------------*/ あやりりす_LinkMenuConvert { _argc_copy = _argc _argv_copy = _argv if _argc_copy == 1 { //改行つきテキスト _argv_copy = SPLIT(_argv_copy[0],CHR(0xd,0xa)) if GETTYPE(_argv_copy) != 4 { //本当にひとつだけだった! _argv_copy = _argv } else { _argc_copy = ARRAYSIZE(_argv_copy) } } _text = '' _data = IARRAY for _i = 0 ; _i < _argc_copy ; _i++ { _data = (RE_SPLIT(_argv_copy[_i],'[ \t]*\|[ \t]*'),'','') //ダミー _text += "%(_data[0])%(CHR(1))%(_data[1])%(CHR(1))%(_data[2])%(CHR(1))%(CHR(2))" } _text; } //---- 本体側ポータルサイトのリスト ----------------------------------------------------- AYL_On_sakura.portalsites { あやりりす_LinkMenuConvert(ポータルサイト) } //---- 本体側おすすめサイトのリスト ----------------------------------------------------- AYL_On_sakura.recommendsites { あやりりす_LinkMenuConvert(おすすめ0) } //---- kero側おすすめサイトのリスト ----------------------------------------------------- AYL_On_kero.recommendsites { あやりりす_LinkMenuConvert(おすすめ1) } //**** ツールチップ ***************************************************************** AYL_On_tooltip { _f = 'シェルツールチップ' + TOSTR(reference[3]) + reference[4] if ISFUNC(_f) { EVAL(_f) } } AYL_On_balloon_tooltip { reference[0] = RE_REPLACE(reference[0],'[  ]+$','') _f = 'バルーンツールチップ' + reference[1] if ISFUNC(_f) { EVAL(_f) } } /*---------------------------------------------------------------------------------- 連続起動時間 ----------------------------------------------------------------------------------*/ ゴースト起動時間 { ghostupmin_total() } //*************************************************************************************************** /*---------------------------------------------------------------------------------- 名前入力補助 ----------------------------------------------------------------------------------*/ /*---------------------------------------------------------------------------------- 名前入力起動('識別子') で入力ボックス開く 要実装関数名 *は識別子 名前入力敬称 :敬称をテキストで返して下さい 名前入力開く*:インプットボックスを開く時のスクリプト 名前入力空欄*:空欄でエンターされた 名前入力敬称*:敬称つけて入力された 名前入力終了*:正常終了 ----------------------------------------------------------------------------------*/ 名前入力起動 { 名前入力識別 = _argv[0] 名前入力空欄カウント = 0 _script = EVAL("名前入力開く%(名前入力識別)") if TOINT(AYALilithEX) != 0 { void EVAL('_script = ProcessSpecialSyntax(_script)') } _script += "\![open,inputbox,OnInputNameInXTNDAYL,0,%(エスケープ(敬称削除(username)))]" _script } 敬称削除 { if _argv[0] == '' { '' } else { RE_REPLACE(_argv[0],'(さん|くん|ちゃん|様|さま|殿)$','') } } 敬称探索 { if _argv[0] == '' { 0 } else { RE_GREP(_argv[0],'(さん|くん|ちゃん|様|さま|殿)$') } } 名前入力敬称WRAP { if ISFUNC('名前入力敬称') { 名前入力敬称 } else { 'さん' } } 名前入力初期WRAP { if ISFUNC('名前入力初期') { 名前入力初期 } elseif SHIORI3FW.UserName != '' { SHIORI3FW.UserName } else { 'ユーザ' } } 名前入力初期名称判定 { if username == 名前入力初期WRAP() { 1 } else { 0 } } OnInputNameInXTNDAYL { if 敬称削除(reference[0]) == '' { _open_input = 1 _script = '' 名前入力空欄カウント += 1 if 名前入力空欄カウント <= 1 { _script = EVAL("名前入力空欄%(名前入力識別)") } else { _script = EVAL("名前入力空欄繰り返し%(名前入力識別)") if _script == '' { _script = EVAL("名前入力空欄%(名前入力識別)") } else { _open_input = 0 } } if TOINT(AYALilithEX) != 0 { void EVAL('_script = ProcessSpecialSyntax(_script)') } if _open_input { _script += "\![open,inputbox,OnInputNameInXTNDAYL,0,%(エスケープ(敬称削除(username)))]" } else { username = 名前入力初期WRAP() } _script return } _kflag = 0 if ( 敬称探索(reference[0]) ) { if ( 敬称削除(reference[0]) + 名前入力敬称WRAP() ) == reference[0] { reference[0] = 敬称削除(reference[0]) } else { _kflag = 1 } } username_saved = さくらスクリプト無効化(reference[0]) username_new = 敬称削除(username_saved) + 名前入力敬称WRAP() if username_saved == 名前入力初期WRAP() { OnInputNameSpecialXTNDAYL return } if _kflag { _script = EVAL("名前入力敬称%(名前入力識別)") if TOINT(AYALilithEX) != 0 { void EVAL('_script = ProcessSpecialSyntax(_script)') } _script += '\0\n\n[half]' _script += メニュー("%(username_saved) と呼んでほしい",'OnInputNameSpecialXTNDAYL') _script += '\n' _script += メニュー("%(username_new) と呼んでほしい",'OnInputNameEndXTNDAYL') _script return } OnInputNameEndXTNDAYL } InputNameSharedXTNDAYL { _script = EVAL("名前入力終了%(名前入力識別)") if TOINT(AYALilithEX) != 0 { void EVAL('_script = ProcessSpecialSyntax(_script)') } _script ERASEVAR('username_saved','username_new') ERASEVAR('名前入力識別','名前入力空欄カウント') } OnInputNameSpecialXTNDAYL { username = username_saved InputNameSharedXTNDAYL() } OnInputNameEndXTNDAYL { username = username_new InputNameSharedXTNDAYL() } //***************************************************** // 着せ替え基本データ取得 //***************************************************** AYL_OnNotifyDressupInfo : void { 着せ替え有効パーツリストEX = IARRAY 着せ替え有効カテゴリリストEX = IARRAY 着せ替え情報 = reference _c1 = CHR(1) _n = ARRAYSIZE(reference.raw) //キャラクターID [1] カテゴリー名 [1] パーツ名 [1] オプション [1] 有効1/無効0 [1] サムネイルパス for _i = 0 ; _i < _n ; _i++ { _v = SPLIT(reference.raw[_i],_c1) if TOINT(_v[4]) != 0 { _p = '着せ替えパーツ' + TranslateSystemChar(_v[2]) _c = '着せ替えカテゴリ' + TranslateSystemChar(_v[1]) if ASEARCH(_p,着せ替え有効パーツリストEX) < 0 { 着せ替え有効パーツリストEX ,= _p } if ASEARCH(_c,着せ替え有効カテゴリリストEX) < 0 { 着せ替え有効カテゴリリストEX ,= _c } } } }