//---- トランスレータ -------------------------------------------------------------- TranslateInternalSub { _text = _argv[0] _text = REPLACE(_text,'‥','…') _text = RE_REPLACEEX(_text, '([、…])(?=.)', '$1\\w5') _text = RE_REPLACEEX(_text, '([。!?])(?=[^。!?])', '$1\\w9') _text = RE_REPLACE(_text,'[((](ユーザ|ユーザー|ユーザさん|ユーザーさん)[))]',username) _text } OnTranslateInternal { if SUBSTR(SHIORI3FW.Eventid,0,3) == 'On_' { _argv[0] return } _txtarray = SPLIT(_argv[0],CHR(0xd,0xa)) _script = '' if GETTYPE(_txtarray) == 4 { _talk_init = 0 _talk_init_side = IARRAY _talk_done_side = IARRAY _side = 0 _side_old = 0 _sync = 0 _n = ARRAYSIZE(_txtarray) for _i = 0 ; _i < _n ; _i++ { _txt = _txtarray[_i] if _txt != '' { _txt = RE_REPLACE(_txt,'」\s*$','') if RE_MATCH(_txt,'^[==]{4,}') { //=====区切りでchain SHIORI3FW.StartChainTalkScriptDirect(JOIN(_txtarray[_i+1,_n-1],CHR(0xd,0xa))) break } elseif RE_MATCH(_txt,'^(.+?)「(.+)$') { _main = RE_GETSTR[2] _cmd = RE_REPLACE(RE_GETSTR[1],'[  \t]','') _cmd_wait = _cmd _cmd = REPLACE(_cmd,'待ち無し','') _cmd_wait = (_cmd != _cmd_wait) _cmd_line = _cmd _cmd = REPLACE(_cmd,'改行無し','') _cmd_line = (_cmd != _cmd_line) if _talk_init != 0 { if _cmd_wait == 0 { _script += "\w9\w9" } else { _script += "\w3" } } while 1 { if RE_SEARCH(_cmd,'^[えエ]([0-90-9]*)') { if _sync { _sync = 0 _script += '\_s' } _cmd = ERASE(_cmd,0,RE_GETLEN[0]) _side = 0 _script += '\0' if RE_GETSTR[1] != '' { _talk_init_side[_side] = 1 _script += "\s[%(TOINT(ZEN2HAN(RE_GETSTR[1])))]" } } elseif RE_SEARCH(_cmd,'^[さサ]([0-90-9]*)') { if _sync { _sync = 0 _script += '\_s' } _cmd = ERASE(_cmd,0,RE_GETLEN[0]) _side = 1 _script += '\1' if RE_GETSTR[1] != '' { _talk_init_side[_side] = 1 _script += "\s[%(TOINT(ZEN2HAN(RE_GETSTR[1])))]" } } elseif SUBSTR(_cmd,0,2) == '二人' { _cmd = ERASE(_cmd,0,2) if _sync == 0 { _sync = 1 _script += '\_s' } } else { break } } if TOINT(_talk_done_side[_side]) != 0 { if _cmd_line == 0 { if _side_old != _side { _script += "\n\n[half]" } else { _script += "\n" } } } _side_old = _side if _talk_init == 0 { if TOINT(_talk_init_side[0]) == 0 { _script += '\0\s[0]\1' } elseif TOINT(_talk_init_side[1]) == 0 { _script += '\1\s[10]\0' } } _talk = TranslateInternalSub(_main) if _talk != '' { _talk_done_side[_side] = 1 _script += _talk } _talk_init = 1 } else { _script += "\w9\n"; _script += TranslateInternalSub(_txt) } } } _script } else { _argv[0] } } //---- 敬称 -------------------------------------------------------------- KeisyouCutter { RE_REPLACE(_argv[0],'(さん|くん|ちゃん|様|さま|殿)$','') } KeisyouFinder { RE_GREP(_argv[0],'(さん|くん|ちゃん|様|さま|殿)$') } //---- http -------------------------------------------------------------- OnExecuteHTTPComplete { EVAL("OnExecuteHTTPComplete%(reference[1])") } OnExecuteHTTPFailure { EVAL("OnExecuteHTTPFailure%(reference[1])") } //---- OnAiTalkイベント ----------------------------------------------------------------- OnAiTalk { //---- 通常のランダムトーク、ただしチェイン中はチェイントーク if SHIORI3FW.IsChain { lastTalk = ChainTalk } else { lastTalk = RandomTalk } lastTalk //ここ! } //**** 初期化 #define GHOST_BOOTTIME_DIV (1000*60) ゴースト起動前の処理 { 起動開始時間 = GETTICKCOUNT / GHOST_BOOTTIME_DIV OS情報取得 = 0 //このへんはリロードにそなえて消さないこと! if ! ISVAR('ネットワーク更新_自分') { ネットワーク更新_自分 = 0 } if ! ISVAR('ネットワーク更新_タイプ') { ネットワーク更新_タイプ = '' } if ! ISVAR('ネットワーク更新_名前') { ネットワーク更新_名前 = '' } } ゴースト終了前の処理 { CVINT(起動時間保存) 起動時間保存 = 起動時間 ERASEVAR('実行中環境名') ERASEVAR('実行中環境バージョン') ERASEVAR('OS情報') ERASEVAR('CPU情報') ERASEVAR('メモリ情報') ERASEVAR('OS情報取得') ERASEVAR('色深度') ERASEVAR('画面解像度Y') ERASEVAR('画面解像度X') ERASEVAR('名前') ERASEVAR('誕生日') ERASEVAR('lastTalk') //このへんはリロードにそなえて消さないこと! //ERASEVAR('ネットワーク更新_タイプ') //ERASEVAR('ネットワーク更新_名前') //ERASEVAR('ネットワーク更新_自分') } 起動時間 { CVINT(起動時間保存) 起動時間保存 + ((GETTICKCOUNT / GHOST_BOOTTIME_DIV) - 起動開始時間) } //**** バージョン basewareversion : void { 実行中環境名 = reference1 実行中環境バージョン = reference0 } OnNotifyOSInfo : void { OS情報取得 = 1 OS情報 = reference0 CPU情報 = reference1 メモリ情報 = reference2 } OnDisplayChange : void { 色深度 = reference0 画面解像度X = reference1 画面解像度Y = reference2 } OnNotifyUserInfo : void { 名前 = さくらスクリプト無効化(reference0) 誕生日 = reference2 } OnNotifyDressupInfo { _n = ARRAYSIZE(reference) _c = CHR(1) 着せ替え眼鏡有効 = 0 着せ替えアンテナ有効 = 0 for _i = 0 ; _i < _n ; _i++ { _info = SPLIT(reference[_i],_c) if TOINT(_info[0]) == 0 && TOINT(_info[4]) != 0 { //0はほげほげ側、4は有効無効 if '眼鏡' _in_ _info[2] { 着せ替え眼鏡有効 = 1 } elseif 'アンテナ' _in_ _info[2] { 着せ替えアンテナ有効 = 1 } } } }