/*--------------------------------------------------------------------- かんたん文スクリプト「あやりりす」 ---------------------------------------------------------------------*/ //*************************************************************************************************** OnSystemLoad.゚AYALILITH : void //゚はソート順序を最後にするため { stroke = (1,1,1) stroketimer = (1,1,1) strokeid = ('','','') half_menu_counter = 0 boot_init = 0 mikire_flag_array = IARRAY 最終マウスイベント分 = systemuptime / 60 ゴースト起動時刻 = systemuptime 累積起動時間初期 = 累積起動時間 if ISVAR('半分メニュー無効') == 0 { 半分メニュー無効 = 0 } _a = GETFUNCLIST('ゴースト起動前の処理') foreach _a;_f { EVAL(_f) } if username == '' { username = 名前入力初期WRAP() } mousedown_time = -1 mousedown_reference_array = IARRAY mousedown_exec_complete = 0 mouseevent_time = IARRAY mouseevent_colname = IARRAY mouseevent_count = IARRAY マウスイベント連続回数 = 1 着せ替え情報 = IARRAY 着せ替え有効パーツリスト = IARRAY 着せ替え有効パーツリストEX = IARRAY 着せ替え有効カテゴリリスト = IARRAY 着せ替え有効カテゴリリストEX = IARRAY モード = '' 現在の日 = GETTIME()[2] _ft = <<' OnChoiceSelect OnAnchorSelect OnBoot OnClose OnFirstBoot OnGhostChanging OnGhostChanged OnGhostCalling OnGhostCalled OnGhostCallComplete OnOtherGhostClosed OnShellChanging OnShellChanged OnMinuteChange OnOffScreen OnBalloonChange OnMouseMove OnMouseWheel OnMouseClick OnMouseDoubleClick OnMouseDragStart OnMouseDragEnd OnMouseGesture OnMouseDown OnMouseUp OnCommunicate OnRecommendsiteChoice OnKeyPress On_otherghostname On_sakura.portalsites On_sakura.recommendsites On_kero.recommendsites '>> _fa = SPLIT(_ft,CHR(0xd,0xa)) foreach _fa;_f { if ISFUNC(_f) { LOGGING("警告:関数/イベント %(_f) はあやりりすで上書きされます") } } } OnSystemUnload.゚AYALILITH : void //゚はソート順序を最後にするため { ERASEVAR('累積起動時間初期') ERASEVAR('stroke','stroketimer','strokeid') ERASEVAR('half_menu_counter') ERASEVAR('boot_init') ERASEVAR('mikire_flag_array') ERASEVAR('最終マウスイベント分') ERASEVAR('ゴースト起動時刻') ERASEVAR('タグなしトーク') ERASEVAR('終了しない') ERASEVAR('installedplugin_name','installedplugin_id') ERASEVAR('ghostexlist') ERASEVAR('mousedown_reference_array','mousedown_time','mousedown_exec_complete') ERASEVAR('mouseevent_time''mouseevent_colname','mouseevent_count','マウスイベント連続回数') //'情報_シェル名','情報_バルーン名'は消さない ERASEVAR('情報_ゴースト名','情報_キャラ名') ERASEVAR('情報_ユーザー名','情報_ユーザー誕生日') ERASEVAR('情報_モニタ色数','情報_モニタ幅','情報_モニタ高さ') ERASEVAR('スタンプ帳動作','スタンプ帳情報') ERASEVAR('名前入力識別') ERASEVAR('着せ替え情報','着せ替え有効パーツリスト','着せ替え有効パーツリストEX','着せ替え有効カテゴリリスト','着せ替え有効カテゴリリストEX') ERASEVAR('今日はユーザー誕生日','現在の日') _a = GETFUNCLIST('ゴースト終了前の処理') foreach _a;_f { EVAL(_f) } } OnTranslateInternal.゚AYALILITH //゚はソート順序を最後にするため { if SUBSTR(SHIORI3FW.Eventid,0,3) == 'On_' { _argv[0] //ret return } if ! boot_init { if ISFUNC('起動初期化スクリプト') { _v = REPLACE(EVAL('起動初期化スクリプト'),'\e','') _v + _argv[0] //ret } else { _argv[0] //ret } boot_init = 1 } else { _argv[0] //ret } } 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_OnSecondChange { _mikire = TOINT(reference[1]) if _mikire != TOINT(mikire_flag_array[0]) { mikire_flag_array[0] = _mikire _fname = '' if _mikire { _fname = OnGhostEventTranslate.AYL('見切れ0') } else { _fname = OnGhostEventTranslate.AYL('見切れ解除0') } if ISFUNC(_fname) { _v = EVAL(_fname) if STRLEN(_v) { _v return } } } //ホールド if ARRAYSIZE(mousedown_reference_array) && (mousedown_exec_complete == 0) { if (GETTICKCOUNT() - mousedown_time) > 1000 { //いったんreferenceを仮保存し、擬似マウスイベントに(MouseDownのreferenceを上書き) _r = reference reference = mousedown_reference_array mousedown_exec_complete = 1 _result = MouseEventExec('ホールド') if STRLEN(_result) { _result return } reference = _r } } _fname = 'OnSecondChange' + TOSTR(モード) if ISFUNC(_fname) { EVAL(_fname) return } } AYL_OnOffScreen { _mikire_after = IARRAY _fa = SPLIT(reference[0],CHR(1)) foreach _fa;_f { _mikire_after[TOINT(_f)] = 1 } _n = ARRAYSIZE(mikire_flag_array) _n2 = ARRAYSIZE(_mikire_after) if _n < _n2 { _n = _n2 } for _i = 0 ; _i < _n ; _i++ { if mikire_flag_array[_i] != _mikire_after[_i] { _fname = '' if _mikire_after[_i] { _fname = OnGhostEventTranslate.AYL('見切れ' + _i) } else { _fname = OnGhostEventTranslate.AYL('見切れ解除' + _i) } if ISFUNC(_fname) { _v = EVAL(_fname) if STRLEN(_v) { _v return } } return } } mikire_flag_array = _mikire_after } AYL_OnKeyPress { _fname = '' if TOINT(reference[2]) >= 2 { _fname = OnGhostEventTranslate.AYL('キー入力連続' + TOUPPER(reference[0])) } else { _fname = OnGhostEventTranslate.AYL('キー入力' + TOUPPER(reference[0])) } if ISFUNC(_fname) { _v = EVAL(_fname) if STRLEN(_v) { _v return } } } AYL_OnMinuteChange { _r = 累積起動時間 if 累積起動時間初期 != _r { 累積起動時間初期 = _r if ISFUNC('累積起動時間変化') { _rs = EVAL('累積起動時間変化(_r)') if _rs != '' { _rs return } } } if minute == 0 { if 現在の日 != GETTIME()[2] { 現在の日 = GETTIME()[2] _fname = OnGhostEventTranslate.AYL("日付変更") if ISFUNC(_fname) { _v = EVAL(_fname) if STRLEN(_v) { _v return } } AYL_DateInit } _fname = OnGhostEventTranslate.AYL("時報%(hour)時") if ISFUNC(_fname) { _v = EVAL(_fname) if STRLEN(_v) { _v return } } _fname = OnGhostEventTranslate.AYL("時報") if ISFUNC(_fname) { _v = EVAL(_fname) if STRLEN(_v) { _v return } } } _fname = 'OnMinuteChangeAYALILITH' + TOSTR(モード) if ISFUNC(_fname) { EVAL(_fname) return } } AYL_DateInit { if GETTYPE(SHIORI3FW.UserBirthday) != 3 { 今日はユーザー誕生日 = 0 return } if STRLEN(SHIORI3FW.UserBirthday) == 0 { 今日はユーザー誕生日 = 0 return } _a1 = GETTIME() _d1 = JOIN(_a1[1],_a1[2],',') _a2 = SPLIT(SHIORI3FW.UserBirthday,',') _d2 = JOIN(TOINT(_a2[1]),TOINT(_a2[2]),',') if _d1 == _d2 { 今日はユーザー誕生日 = 1 } else { 今日はユーザー誕生日 = 0 } } /*---------------------------------------------------------------------------------- イベント振り分け ----------------------------------------------------------------------------------*/ OnGhostEventTranslate.AYL { _fname = 'AYL_' + _argv[0] if ISFUNC(_fname) { _fname return } _fname = _argv[0] + TOSTR(モード) if ISFUNC(_fname) { _fname return } } AYL_OnChoiceSelect { _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 RE_SEARCH(reference[0],'^(http|https)://') { "\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 ,= "%(_holiday)の%(_time)" //自ゴーストの状態 _slots ,= 'シェル' + SHIORI3FW.ShellName _slots ,= 'バルーン' + SHIORI3FW.BalloonName _slots ,= 着せ替え有効パーツリストEX _slots ,= 着せ替え有効カテゴリリストEX //その他 if ISFUNC('あやりりす・日付イベントユーザー定義') { _slots ,= EVAL('あやりりす・日付イベントユーザー定義') } } //特定の日付処理は特別 if _argc == 0 || _argv[0] == 1 { //誕生日 if 今日はユーザー誕生日 { _slots ,= 'ユーザー誕生日' } //?月?日 _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 } ClearRandomTalkArrayNewTalk : void { last_new_talk_id_array = IARRAY last_new_talk_array = IARRAY } 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 } } } //自分かどうか if TOINT(_argv[1]) == 0 { if reference[0] == selfname { _funcname = GhostEventSearch('自分' + _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 } } _funcname = OnGhostEventTranslate.AYL('他のゴースト' + _argv[0]) if ISFUNC(_funcname) { _script = CallChangeFuncWrapper(_funcname) if STRLEN(_script) { _script return } } } } CallChangeFuncLastCatch { REPLACE(CallChangeFuncWrapper(OnGhostEventTranslate.AYL(_argv[0])),'\-','') } AYL_OnGhostChanging { GetCloseSharedScript -- _boot = SpecialBootCloseTalk('終了') if STRLEN(_boot) { _boot return } _script = CallChangeFunc('へ変更') if STRLEN(_script) == 0 { _script = CallChangeFuncLastCatch('OnClose') } _script = REPLACE(_script,'\e','') if AYALilithEX { _script = _script + CHR(0xd,0xa) + "\w9\w9\e" } else { _script = _script + "\w9\w9\e" } _script } AYL_OnGhostChanged { _boot = SpecialBootCloseTalk('起動') if STRLEN(_boot) { _boot return } タグなしトーク = さくらスクリプト除去(reference[1]) _script = GetBootSharedScript + CallChangeFunc('から変更') if STRLEN(_script) == 0 { _script = CallChangeFuncLastCatch('OnBoot') } _script } AYL_OnGhostCalling { _script = CallChangeFunc('を呼び出し') if TOINT(EVAL('呼び出し反応に切り替え反応を流用')) { _script = CallChangeFunc('へ変更',1) } _script } AYL_OnGhostCalled { _boot = SpecialBootCloseTalk('起動') if STRLEN(_boot) { _boot return } タグなしトーク = さくらスクリプト除去(reference[1]) _script = GetBootSharedScript + CallChangeFunc('から呼び出される') if TOINT(EVAL('呼び出し反応に切り替え反応を流用')) { _script = GetBootSharedScript + CallChangeFunc('から変更',1) } if STRLEN(_script) == 0 { _script = CallChangeFuncLastCatch('OnBoot') } _script } AYL_OnGhostCallComplete { タグなしトーク = さくらスクリプト除去(reference[1]) CallChangeFunc('を呼び出し完了') } AYL_OnOtherGhostClosed { CallChangeFunc('が終了した') } AYL_OnShellChanging { _r0 = reference[0] reference[0] = さくらスクリプト無効化(_r0) _script = '' if _r0 == SHIORI3FW.ShellName { _funcname = OnGhostEventTranslate.AYL('シェル再読み込み前') if STRLEN(_funcname) { _script = TOSTR(EVAL(_funcname)) } } else { _funcname = OnGhostEventTranslate.AYL('シェル' + reference[0] + '変更前') if STRLEN(_funcname) { _script = TOSTR(EVAL(_funcname)) } else { _funcname = OnGhostEventTranslate.AYL('シェル変更前') if STRLEN(_funcname) { _script = TOSTR(EVAL(_funcname)) } } } if _script != '' { if AYALilithEX { _script = _script + CHR(0xd,0xa) + "\w9\w9\e" } else { _script = _script + "\w9\w9\e" } } _script reference[0] = _r0 } AYL_OnShellChanged { _r0 = reference[0] reference[0] = さくらスクリプト無効化(_r0) if SHIORI3FW.ShellName == SHIORI3FW.ShellNameOld { _funcname = OnGhostEventTranslate.AYL('シェル再読み込み後') if STRLEN(_funcname) { TOSTR(EVAL(_funcname)) } } else { _funcname = OnGhostEventTranslate.AYL('シェル' + reference[0] + '変更後') if STRLEN(_funcname) { TOSTR(EVAL(_funcname)) } else { _funcname = OnGhostEventTranslate.AYL('シェル変更後') if STRLEN(_funcname) { TOSTR(EVAL(_funcname)) } } } reference[0] = _r0 } AYL_OnBalloonChange { _r0 = reference[0] reference[0] = さくらスクリプト無効化(_r0) if SHIORI3FW.BalloonName == SHIORI3FW.BalloonNameOld { _funcname = OnGhostEventTranslate.AYL('バルーン再読み込み') if STRLEN(_funcname) { TOSTR(EVAL(_funcname)) } } else { _funcname = OnGhostEventTranslate.AYL('バルーン' + reference[0] + '変更') if STRLEN(_funcname) { TOSTR(EVAL(_funcname)) } else { _funcname = OnGhostEventTranslate.AYL('バルーン変更') if STRLEN(_funcname) { TOSTR(EVAL(_funcname)) } } } } //*************************************************************************************************** /*---------------------------------------------------------------------------------- 起動編 ----------------------------------------------------------------------------------*/ /*=====かきかたの例================================================================== 春の朝に起動 : 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("特殊%(_argv[0])トーク配列") == 0 { void EVAL("特殊%(_argv[0])トーク配列 = IARRAY") } _talk = (SpecialBootCloseTalkExecArray(_argv[0]),IARRAY) _talk_size = ARRAYSIZE(_talk) if (_date != EVAL("特殊%(_argv[0])トーク実行日時")) || (_talk_size != EVAL("特殊%(_argv[0])トーク配列数")) { void EVAL("特殊%(_argv[0])トーク配列 = _talk") void EVAL("特殊%(_argv[0])トーク実行日時 = _date") void EVAL("特殊%(_argv[0])トーク配列数 = _talk_size") } _talk_x = EVAL("特殊%(_argv[0])トーク配列") _n = ARRAYSIZE(_talk_x) if _n { _rand = RAND(_n) _script = _talk_x[_rand] void EVAL("特殊%(_argv[0])トーク配列[_rand] = IARRAY") _script return } '' return } SpecialBootCloseTalkExecArray { //特殊な日付トーク _earray = GetEvalTalkArray(1) _n = ARRAYSIZE(_earray) _talk = IARRAY for _i = 0 ; _i < _n ; _i++ { _talk_e = TalkEval(_argv[0] + _earray[_i]) if ARRAYSIZE(_talk_e) { _talk ,= _talk_e } } _talk 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イベント -------------------------------------------------------------- MouseEventExecSub { _fname = _argv[0] + TOSTR(reference[3]) + _argv[1] _fname = OnGhostEventTranslate.AYL(_fname) if ISFUNC(_fname) { EVAL(_fname) return } _fname = _argv[0] + HAN2ZEN(TOSTR(reference[3])) + _argv[1] _fname = OnGhostEventTranslate.AYL(_fname) if ISFUNC(_fname) { EVAL(_fname) return } _fname = _argv[0] + TOSTR(reference[3]) _fname = OnGhostEventTranslate.AYL(_fname) if ISFUNC(_fname) { EVAL(_fname) return } _fname = _argv[0] + HAN2ZEN(TOSTR(reference[3])) _fname = OnGhostEventTranslate.AYL(_fname) if ISFUNC(_fname) { EVAL(_fname) return } -1 } MouseEventExecFromEventName { if 'クリック' == _argv[0] { 0 return } if 'ダブルクリック' == _argv[0] { 1 return } if 'ころころ' _in_ _argv[0] { 2 return } if 'なでなで' _in_ _argv[0] { -1 return } if 'ドラッグ' _in_ _argv[0] { -1 return } if 'ホールド' _in_ _argv[0] { -1 return } -1 return } MouseEventExec { _fname = '' _m = TOINT(reference[5]) _head = '' if _m == 1 { _head = '右' + _argv[0] } elseif _m == 2 { _head = '中' + _argv[0] } else { _head = _argv[0] } _colname = reference[4] if _argc >= 2 { _colname = _argv[1] } _col_id = MouseEventExecFromEventName(_head) if _col_id >= 0 { _col_id += TOINT(reference[3])*10 if ((GETTICKCOUNT() - mouseevent_time[_col_id]) < 3000) && (mouseevent_colname[_col_id] == _colname) { mouseevent_count[_col_id] += 1 } else { mouseevent_colname[_col_id] = _colname mouseevent_count[_col_id] = 1 } } マウスイベント連続回数 = mouseevent_count[_col_id] mouseevent_time[_col_id] = GETTICKCOUNT() _result = -1 if 'talking' _in_ status { _result = MouseEventExecSub('トーク中' + _head,_colname) } if _result == -1 { _result = MouseEventExecSub(_head,_colname) } if _result != -1 { MouseEventTimeReset() SHIORI3FW.ResetAITalkInterval() _result 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] { if 'talking' !_in_ status { _s = MouseEventExec(_argv[2]) if STRLEN(_s) == 0 { if _argc >= 4 { _s = MouseEventExec(_argv[3]) } } _s 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 } } AYL_OnMouseClick { MouseEventExec('クリック') } AYL_OnMouseDoubleClick { MouseEventExec('ダブルクリック') } AYL_OnMouseDragStart { //ホールド解除 if mousedown_exec_complete == 0 { mousedown_reference_array = IARRAY mousedown_time = -1 } AYL_drag_start_col = reference[4] MouseEventExec('ドラッグ開始',AYL_drag_start_col) } AYL_MouseHoldEndExec { if 'talking' _in_ status { SHIORI3FW.SetDelayEvent('OnAYLMouseHoldEndExecDelay',2) } else { OnAYLMouseHoldEndExecDelay() } } OnAYLMouseHoldEndExecDelay { reference = mousedown_reference_array MouseEventExec('ホールド終了') //ホールド解除 mousedown_reference_array = IARRAY mousedown_time = -1 mousedown_exec_complete = 0 } AYL_OnMouseDragEnd { if mousedown_exec_complete { AYL_MouseHoldEndExec() } else { MouseEventExec('ドラッグ終了',AYL_drag_start_col) } void ERASEVAR('AYL_drag_start_col') } AYL_OnMouseDown { if TOINT(reference[5]) == 0 { //ホールド計測開始 mousedown_reference_array = reference mousedown_time = GETTICKCOUNT() mousedown_exec_complete = 0 } } AYL_OnMouseUp { if mousedown_exec_complete { AYL_MouseHoldEndExec() } else { //ホールド解除 mousedown_reference_array = IARRAY mousedown_time = -1 } } 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') ERASEVAR('gesture_wheel_event_raised') } else { if ISVAR('gesture_init') == 0 { gesture_init = 1 gesture_wheel_event_raised = '' _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 } if TOINT(EVAL('マウスジェスチャーにホイール反応を流用')) { if '上' _in_ _name || '下' _in_ _name { if '上' _in_ _name { _name = '上' } elseif '下' _in_ _name { _name = '下' } if _name !_in_ gesture_wheel_event_raised { reference[3] = reference[0] _xy = SPLIT(referece[1],CHR(1)) reference[0] = _xy[0] reference[1] = _xy[1] _script = '' if _name == '上' { reference[2] = '20' _script = MouseEventExec('ころころ上') } else { reference[2] = '-20' _script = MouseEventExec('ころころ下') } if STRLEN(_script) == 0 { _script = MouseEventExec('ころころ') } if STRLEN(_script) { _script gesture_wheel_event_raised += _name 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 ISFUNC('On_installedplugin') { void EVAL('On_installedplugin') } } プラグインの存在 { if _argc == 0 { 0 return } if ASEARCH(_argv[0],installedplugin_id) >= 0 { 1 return } if ASEARCH(_argv[0],installedplugin_name) >= 0 { 1 return } 0 } /*---------------------------------------------------------------------------------- 通知 ----------------------------------------------------------------------------------*/ 情報_ゴースト名 { さくらスクリプト無効化(SHIORI3FW.GhostName) } 情報_キャラ名 { _inf = (さくらスクリプト無効化(sakuraname),さくらスクリプト無効化(keroname)) _inf } 情報_シェル名 { さくらスクリプト無効化(SHIORI3FW.ShellName) } 情報_バルーン名 { さくらスクリプト無効化(SHIORI3FW.BalloonName) } 情報_ユーザー名 { さくらスクリプト無効化(SHIORI3FW.UserName) } 情報_ユーザー誕生日 { SHIORI3FW.UserBirthday } AYL_OnNotifyUserInfo : void { if username == '' { if 情報_ユーザー名 == '' { username = 名前入力初期 } else { username = 情報_ユーザー名 } } if ISFUNC('SHIORI3EV.OnNotifyUserInfo') { void EVAL('SHIORI3EV.OnNotifyUserInfo') } if ISFUNC('OnNotifyUserInfo') { void EVAL('OnNotifyUserInfo') } AYL_DateInit() } AYL_OnDisplayChange : void { //---- 変数にディスプレイ解像度と色深度に関する情報を取得 //---- 使うかどうかは分からないがとりあえず保持しておく 情報_モニタ色数 = reference[0] 情報_モニタ幅 = reference[1] 情報_モニタ高さ = reference[2] if ISFUNC('SHIORI3EV.OnDisplayChange') { void EVAL('SHIORI3EV.OnDisplayChange') } if ISFUNC('OnDisplayChange') { void EVAL('OnDisplayChange') } } /*---------------------------------------------------------------------------------- リンクメニュー ----------------------------------------------------------------------------------*/ あやりりす_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_OnRecommendsiteChoice { _sitename = TranslateSystemChar(reference[0]) if reference[3] == 'recommend' { if TOINT(reference[4]) > 0 { _fname = 'おすすめ' + TOINT(reference[4]) + _sitename if ISFUNC(_fname) { EVAL(_fname) return } } else { _fname = 'おすすめ0' + _sitename if ISFUNC(_fname) { EVAL(_fname) return } } } elseif reference[3] == 'portal' { _fname = 'ポータルサイト' + _sitename if ISFUNC(_fname) { EVAL(_fname) return } } else { _fname = 'おすすめ0' + _sitename if ISFUNC(_fname) { EVAL(_fname) return } _fname = 'おすすめ1' + _sitename if ISFUNC(_fname) { EVAL(_fname) return } _fname = 'ポータルサイト' + _sitename if ISFUNC(_fname) { EVAL(_fname) return } } } //**** ツールチップ ***************************************************************** AYL_On_tooltip { _f = 'シェルツールチップ' + TOSTR(reference[3]) + reference[4] if ISFUNC(_f) { EVAL(_f) } if ISFUNC('On_tooltip') { EVAL('On_tooltip') } } AYL_On_balloon_tooltip { reference[0] = RE_REPLACE(reference[0],'[  ]+$','') _f = 'バルーンツールチップ' + reference[1] if ISFUNC(_f) { _v = EVAL(_f) if STRLEN(_v) { _v return } } if RE_SEARCH(reference[1],'^(http|https)://') { '[ブラウザでURLを開く]\n' + reference[1] return } if ISFUNC('On_balloon_tooltip') { EVAL('On_balloon_tooltip') } } /*---------------------------------------------------------------------------------- 連続起動時間 ----------------------------------------------------------------------------------*/ ゴースト起動時間 { 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 { 着せ替え有効パーツリスト = IARRAY 着せ替え有効パーツリストEX = IARRAY 着せ替え有効カテゴリリスト = 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 { _p2 = TranslateSystemChar(_v[2]) _p = '着せ替えパーツ' + _p2 _c2 = TranslateSystemChar(_v[1]) _c = '着せ替えカテゴリ' + _c2 if ASEARCH(_p,着せ替え有効パーツリストEX) < 0 { 着せ替え有効パーツリスト ,= _p2 着せ替え有効パーツリストEX ,= _p } if ASEARCH(_c,着せ替え有効カテゴリリストEX) < 0 { 着せ替え有効カテゴリリスト ,= _c2 着せ替え有効カテゴリリストEX ,= _c } } } if ISFUNC('OnNotifyDressupInfo') { void EVAL('OnNotifyDressupInfo') } } //***************************************************** // コミュ //***************************************************** //------------------------------------------------------------------------------ // こっちから話しかける //------------------------------------------------------------------------------ 他に話しかける { //まず話しかける相手を決める _ghostname = AYF_GetRandomSakuraName() if STRLEN(_ghostname) == 0 { if ISFUNC('話しかけられない') { EVAL('話しかけられない') } return } res_reference0 = _ghostname //関数呼び出し _fname = '*' + TranslateSystemChar(_ghostname) + 'に話しかける' if ISFUNC(_fname) { EVAL(_fname) return } _fname = TranslateSystemChar(_ghostname) + 'に話しかける' if ISFUNC(_fname) { EVAL(_fname) return } _fname = 'その他に話しかける' if ISFUNC(_fname) { EVAL(_fname) return } RandomTalk } //話しかける相手をランダムに決定 AYF_GetRandomSakuraName { _ghostlist=IARRAY //FMOが使える場合はFMOから読みます if ISFUNC('SHIORI3FW.RefreshFMOTable') { SHIORI3FW.RefreshFMOTable _ghostlist=SHIORI3FW.SakuraNameList }else{ _ghostlist=ghostexlist } if ARRAYSIZE(_ghostlist)>0 { ANY(_ghostlist) }else{ '' } } //起動中ゴーストリスト取得 AYL_On_otherghostname { // 現在起動中のゴーストのリストを作成する ghostexlist = reference } //------------------------------------------------------------------------------ //OnCommunicateイベント //------------------------------------------------------------------------------ AYL_OnCommunicate { if ARRAYSIZE(reference) >= 4 { if STRLEN(reference[3]) { if reference[2] == 'ECHO/1.0' { //台本コミュニケート(受信) res_securitylevel = 'External' res_reference[0] = reference[0] if STRLEN(marker) == 0 { marker = "Communicate from %(reference[0])" } reference[3] return } elseif reference[2] == 'JPRadish' { //大根コミュニケート(受信) '*' + TranslateSystemChar(reference[0]) + '大根コミュニケート(reference[3,100])' return } } } _fname = 'OnCommunicateAYALILITH' + TOSTR(モード) if ISFUNC(_fname) { EVAL(_fname) return } if (reference[0] == "user") || (reference[0] == "User") { AYF_ComParseFunc('ユーザー') } else { _r = AYF_ComParseFunc(reference[0]) if STRLEN(_r) == 0 { _r = AYF_ComParseFunc('その他') } if STRLEN(_r) > 0 { _r } } } AYF_ComParseFunc { _fname = TranslateSystemChar(_argv[0]) _fname += 'コミュ' _func_array = IARRAY _func_array ,= GETFUNCLIST(_fname) _func_array ,= GETFUNCLIST('*' + _fname) _func_result = IARRAY _ev_max = 0 foreach _func_array ; _func { if '該当なし' !_in_ _func { _ev = AYF_ComSyntaxToAyaSyntaxEval(_func,_fname,reference[1]) if (GETTYPE(_ev) == 1) && (_ev > 0) { if _ev_max < _ev { _func_result = IARRAY _ev_max = _ev } _func_result ,= _func } } } if ARRAYSIZE(_func_result) > 0 { EVAL(ANY(_func_result)) } else { _fname = _sname + 'コミュ該当なし' if ISFUNC(_fname) { EVAL(_fname) } } } AYF_ComSyntaxToAyaSyntaxEval { _str = _argv[0] //ヘッダを消す _str = REPLACE(_str,_argv[1],'') _str = REPLACE(_str,'*' + _argv[1],'') _result_and = 0 _arr_and = SPLIT(_str,'&') foreach _arr_and ; _and { _arr_or = SPLIT(_and,'|') _result_or = 0 foreach _arr_or ; _or { if _or _in_ _argv[2] { _result_or = 1 break } } if _result_or == 0 { _result_and = 0 break } else { _result_and += 1 } } _result_and }