basic Lyuma dialogs on GT template

This commit is contained in:
2026-01-11 20:53:23 +08:00
parent 8f926f5333
commit 64b0e28a88
72 changed files with 7097 additions and 307 deletions

View File

@ -0,0 +1,4 @@
dic, config.dic, UTF-8
dic, shiori3.dic, UTF-8
dicif, optional.dic, UTF-8
dicif, compatible.dic, UTF-8

View File

@ -0,0 +1,216 @@
//******************************************************************************
//SHIORI/3.0制御スクリプト for YAYA
//互換処理
//******************************************************************************
// aya5.dll設定(旧)
#globaldefine AYAINFO_VERSION 0
#globaldefine AYAINFO_CHARSET 1
#globaldefine AYAINFO_PATH 2
#globaldefine AYAINFO_NAME 3
#globaldefine AYAINFO_AUTHOR 4
// 旧互換性保持のためのシステム関数補完(読み替えのみで対応可能なもの)
#globaldefine SETSEPARATOR SETDELIM
#globaldefine TONUMBER2 TOINT
#globaldefine TOSTRING2 TOSTR
#globaldefine TONUMBER CVINT
#globaldefine TOSTRING CVSTR
#globaldefine ISFUNCTION ISFUNC
#globaldefine BINSTRTONUM BINSTRTOI
#globaldefine HEXSTRTONUM HEXSTRTOI
#globaldefine ERASEVARIABLE ERASEVAR
#globaldefine MSTRLEN STRLEN
#globaldefine MSTRSTR STRSTR
#globaldefine MSUBSTR SUBSTR
#globaldefine MERASE ERASE
#globaldefine MINSERT INSERT
#globaldefine NAMETOVALUE EVAL
#globaldefine CALLBYNAME EVAL
//******************************************************************************
//文 version 4 システム関数 / システム変数の補完
//汎用関数
//******************************************************************************
ASC
{
if !_argc; ' '
elseif GETTYPE(_argv[0]) != 1; ' '
elseif _argv[0] < 0 || _argv[0] > 0x7f; ' '
else; CHR(_argv[0])
}
//----
IASC
{
if !_argc; -1
elseif GETTYPE(_argv[0]) != 3; -1
elseif !STRLEN(_argv[0]); -1
else; CHRCODE(_argv[0])
}
//----
ISINSIDE
{
if _argc < 3; 0
elseif (_argv[1] <= _argv[0] && _argv[0] <= _argv[2]) ||/
(_argv[2] <= _argv[0] && _argv[0] <= _argv[1]); 1
else; 0
}
//----
ISREAL
{
if !_argc; 0
elseif GETTYPE(_argv[0]) == 2; 1
else; 0
}
//----
ISINTEGER
{
if !_argc; 0
elseif GETTYPE(_argv[0]) == 1; 1
else; 0
}
//******************************************************************************
//文 version 4 システム関数 / システム変数の補完
//REQ系関数
//******************************************************************************
//----
REQ.KEY
{
if !_argc; return
switch GETTYPE(_i = _argv[0]) {
// エラー
''
// 位置指定
var.req.key[_i]
// 位置指定(実数) 整数化して処理
var.req.key[TOINT(_i)]
// 文字列はエラー
''
}
}
//----
REQ.HEADER
{
REQ.KEY(_argv)
}
//----
REQ.VALUE
{
if !_argc; return
switch GETTYPE(_i = _argv[0]) {
// エラー
''
// 位置指定
var.req.value[_i]
// 位置指定(実数) 整数化して処理
var.req.value[TOINT(_i)]
// 名前指定
{
_sz = ARRAYSIZE(var.req.key)
for _j = 0; _j < _sz; _j++ {
if (var.req.key[_j] == _i) {
var.req.value[_j]
break
}
}
}
}
}
//******************************************************************************
//文 version 4 システム関数 / システム変数の補完
//LIB系関数
//******************************************************************************
LIB.KEY
{
if !_argc; return
switch GETTYPE(_i = _argv[0]) {
// エラー
''
// 位置指定
var.lib.key[_i]
// 位置指定(実数) 整数化して処理
var.lib.key[TOINT(_i)]
// 文字列はエラー
''
}
}
//----
LIB.HEADER
{
LIB.KEY(_argv)
}
//----
LIB.VALUE
{
if !_argc; return
switch GETTYPE(_i = _argv[0]) {
// エラー
''
// 位置指定
var.lib.value[_i]
// 位置指定(実数) 整数化して処理
var.lib.value[TOINT(_i)]
// 名前指定
{
_sz = ARRAYSIZE(var.lib.key)
for _j = 0; _j < _sz; _j++ {
if (var.lib.key[_j] == _i) {
var.lib.value[_j]
break
}
}
}
}
}
//******************************************************************************
// 文 version 4 以前の変数/関数の補完
//******************************************************************************
restore_old_variables
{
// ascii
ascii = IARRAY
for _i = 0; _i <= 0x7f; _i++ {
ascii ,= CHR(_i)
}
}

View File

@ -0,0 +1,60 @@
/*---------------------------------------------------------------------------------------
* SHIORI/3.0設定スクリプト for YAYA
* --------------------------------------------------------------------------------------*/
/*---------------------------------------------------------------------------------------
* 初期設定値
* --------------------------------------------------------------------------------------*/
/* AIトーク関連 -------------------------------------------------------------------------*/
/*
TALK_INTERVAL AIトーク間隔の初期値[秒]
COM_RATIO AIトーク中に占めるコミュニケート開始の割合[%]
*/
#globaldefine TALK_INTERVAL 180
#globaldefine COM_RATIO 0
/* インストール済みゴーストリスト構築関連 -----------------------------------------------*/
/*
IGLIST_ACCEL
1にするとSSP/CROW時にはNOTIFY installedghostnameで
インストール済ゴーストリストを構築するようになります。
sakura/kero名リストは作成されませんが高速です
0だとファイル走査にて構築します。
インストール済みゴーストが多いと時間がかかります。
IGLIST_MAX
ファイル走査にてゴーストリストを構築する際、取得する
数の上限を指定します。-1で制限なし(すべて取得)です。
0とすると取得しません。
*/
#globaldefine SHIORI3FW.IGLIST_ACCEL 1
#globaldefine SHIORI3FW.IGLIST_MAX 0
/* リクエスト解析・レスポンス構築関連 ---------------------------------------------------*/
/*
SHIORI3FW.RES_REF_MAX
res_referenceの上限
SHIORI3FW.AUTO_DATA_CONVERT
1にするとAYA5と同等の処理になります。
-SAORIの戻り値などの自動タイプ変換・自動的に\0x01をカンマにする等の処理が入ります。
0にするとそれらの処理を行いません。
SHIORI3FW.REF_ACCEL
1にすると、reference0 といった変数を作成せず、reference[0] という形で
アクセスするようになります。若干のスピードアップが見込めます。
0にすると、reference0 といった変数を作成します(過去互換処理)
*/
#globaldefine SHIORI3FW.RES_REF_MAX 32
#globaldefine SHIORI3FW.AUTO_DATA_CONVERT 0
#globaldefine SHIORI3FW.REF_ACCEL 0
/*
See: https://github.com/YAYA-shiori/yaya-dic/issues/19
enabling Delayed EVAL will make your ghost more vulnerable to unsuspecting people using it to attack users' computers
make sure this switch is turned off if you can
*/
#globaldefine SHIORI3FW.ENABLE_DELAYED_EVAL 0

View File

@ -0,0 +1,351 @@
//******************************************************************************
//SHIORI/3.0制御スクリプト for YAYA
//オプション関数
//******************************************************************************
#define ESCAPE_TAG_1 CHR(0x3,0x3)
#define ESCAPE_TAG_2 CHR(0x4,0x4)
//******************************************************************************
//初期化・後始末
//******************************************************************************
OnSystemLoad.SHIORI3FW.OPTIONAL
{
}
OnSystemUnload.SHIORI3FW.OPTIONAL
{
ERASEVAR('SHIORI3FW.FMOCache')
ERASEVAR('SHIORI3FW.SakuraNameList')
ERASEVAR('SHIORI3FW.FMOTable')
}
//******************************************************************************
//さくらスクリプトタグ除去
//******************************************************************************
//------------------------------------------------------------------------------
// 関数名:SHIORI3FW.EscapeDangerousTags
// 機能 :危険なタグのみをエスケープ(\付加)する。
// 引数 :argv0=テキスト
//------------------------------------------------------------------------------
SHIORI3FW.EscapeDangerousTags{
_txt=_argv[0]
_txt=REPLACE(_txt,'\\',ESCAPE_TAG_1)
_txt=REPLACE(_txt,'\%',ESCAPE_TAG_2)
_txt=RE_REPLACE(_txt, /
'\\(?=(!\[(' + /
'updatebymyself|vanishbymyself|enter,passivemode|' + /
'leave,passivemode|lock,repaint|unlock,repaint|biff|' + /
'open,browser|open,mailer|raise)' + /
'.*?\]|\\j\[))' , /
'\\')
_txt=REPLACE(_txt,ESCAPE_TAG_2,'\%')
_txt=REPLACE(_txt,ESCAPE_TAG_1,'\\')
_txt
}
//------------------------------------------------------------------------------
// 関数名:SHIORI3FW.EscapeAllTags
// 機能 :全てのさくらスクリプトタグをエスケープ(\付加)する。
// 引数 :argv0=テキスト
//------------------------------------------------------------------------------
SHIORI3FW.EscapeAllTags{
_txt=_argv[0]
_txt=REPLACE(_txt,'\\',ESCAPE_TAG_1)
_txt=REPLACE(_txt,'\%',ESCAPE_TAG_2)
_txt=REPLACE(_txt,'\','\\')
_txt=REPLACE(_txt,'%','\%')
_txt=REPLACE(_txt,ESCAPE_TAG_2,'\%')
_txt=REPLACE(_txt,ESCAPE_TAG_1,'\\')
_txt
}
//------------------------------------------------------------------------------
// 関数名:SHIORI3FW.TranslateSystemChar
// 機能 :演算子などシステム予約文字を別のものに置き換える
// 引数 :argv0=テキスト argv1=置き換え対象(省略時_)
//------------------------------------------------------------------------------
SHIORI3FW.TranslateSystemChar
{
_c = '_'
if _argc >= 2 {
_c = _argv[1]
}
_text = TOSTR(_argv[0])
_text = RE_REPLACE(_text,"[ !%(CHR(0x22))%(CHR(0x25))#$&()*+,\-/:;<=>?@\[\]`{|}~]",_c)
_text
}
//------------------------------------------------------------------------------
// 関数名:SHIORI3FW.InitBalloons
// 機能 :バルーン完全初期化スクリプトを自動生成する
//------------------------------------------------------------------------------
SHIORI3FW.InitBalloons
{
_tx = ''
_n = ARRAYSIZE(SHIORI3FW.HWnd)
for _i = 0 ; _i < _n ; _i++ {
if SHIORI3FW.HWnd[_i] != 0 {
_tx += "\p[%(_i)]\c\b[-1]"
}
}
_tx
}
//******************************************************************************
// FMO関連
//******************************************************************************
//------------------------------------------------------------------------------
//関数名:SHIORI3FW.IsGhostExist(ゴースト名(sakuraname)[,fmoname])
//機能 :指定されたゴーストが存在するか調べる
//    存在しなければ0、存在すれば1を返す
//------------------------------------------------------------------------------
SHIORI3FW.IsGhostExist
{
_ghostname=_argv[0]
SHIORI3FW.RefreshFMOTable(_argv[1])
_result=ASEARCH(_ghostname,SHIORI3FW.SakuraNameList)
if _result == -1 {
0
}else{
1
}
}
//------------------------------------------------------------------------------
//関数名:SHIORI3FW.RefreshFMOTable(FMO名称,無視するエントリのHWND)
//機能 :READFMOによってFMOテーブルを作る。
/*
FMOはキャッシュされ、変わっていなければ解析は行われない。
FMO名称を省略すると自動的に'Sakura'になる。
無視するエントリのHWNDを省略すると、SHIORI3FW.HWnd[0] 変数が利用される。
(つまり自動的に自身の情報は含まれなくなる)
グローバル変数:SHIORI3FW.FMOCache FMOの内容のキャッシュ(単純ダンプ)
グローバル変数:SHIORI3FW.FMOTable FMOのテーブル(簡易配列。内容は以下)
id|name|keroname|hwnd|kerohwnd|path|ghostpath,
id|name|keroname|hwnd|kerohwnd|path|ghostpath,
...
グローバル変数:SHIORI3FW.SakuraNameList sakuranameを列挙した汎用配列
また、いわゆる「非ゴースト」FMOエントリ(一時起動等)はこの時点で排除される。
*/
//------------------------------------------------------------------------------
SHIORI3FW.RefreshFMOTable : void
{
_fmoname=TOSTR(_argv[0])
if _fmoname == '' {
_fmoname='Sakura'
}
_result=''
if _fmoname == 'SakuraUnicode'
_result=READFMO(_fmoname,'UTF-8')
else
_result=READFMO(_fmoname)
if SHIORI3FW.FMOCache == _result {
//変わっていなければ即座に戻る
return
}
//FMOの内容をキャッシュする
SHIORI3FW.FMOCache=_result
SHIORI3FW.FMOTable=''
SHIORI3FW.SakuraNameList=IARRAY
_ignorehwnd=TOSTR(_argv[1])
if _ignorehwnd == '' {
_ignorehwnd = SHIORI3FW.HWnd[0]
}
//\r\nで分割
_array = SPLIT(_result,C_CRLF)
_arraynum=ARRAYSIZE(_array)
//変数初期化
_fmotable_temp=''
_id=''
_oldid=''
_name=''
_keroname=''
_hwnd=''
_kerohwnd=''
_path=''
_ghostpath=''
//結果を擬似2次配列にストア
//ssp_fmo_header_000024dc_005c094e.hwnd,6031694
//<------------------id----------> key value
for _i=0 ; _i<_arraynum-1 ; _i++ {
//一時起動ゴーストかどうか?
_buf=_array[_i]
_id=_buf[0,'.']
if 'SSTPVIEWER-' _in_ _id || 'ssp_fmo_header_dummyentry' _in_ _id || 'SSSB' _in_ _id{
//一時起動なのでなにもしない
}else{
if _oldid == '' {
_oldid = _id
}
//IDが変わったら一時保存を書き出し
if _oldid != _id {
_fmotable_temp+="%(_oldid)|%(_name)|%(_keroname)|%(_hwnd)|%(_kerohwnd)|%(_path)|%(_ghostpath),"
_oldid = _id
_name=''
_keroname=''
_hwnd=''
_kerohwnd=''
_path=''
_ghostpath=''
}
_kvpair=_buf[1,'.']
_key=_kvpair[0,C_BYTE1]
_val=_kvpair[1,C_BYTE1]
//各値を一時保存
case _key {
when 'hwnd' {_hwnd=_val}
when 'name' {_name=_val}
when 'keroname' {_keroname=_val}
when 'path' {_path=_val}
when 'kerohwnd' {_kerohwnd=_val}
when 'ghostpath'{_ghostpath=_val}
}
}
}
//最後のエントリを書き出し
_fmotable_temp += "%(_id)|%(_name)|%(_keroname)|%(_hwnd)|%(_kerohwnd)|%(_path)|%(_ghostpath)"
//無視するHWNDを取り除き、同時にSakuraNameListを作成
_count_temp=ARRAYSIZE(_fmotable_temp)
for _i=0;_i<_count_temp;_i++ {
_tablestr=_fmotable_temp[_i]
_tablehwnd=_tablestr[3,'|']
if _tablehwnd != _ignorehwnd {
SHIORI3FW.FMOTable += _tablestr+','
SHIORI3FW.SakuraNameList=(SHIORI3FW.SakuraNameList,_tablestr[1,'|'])
}
}
//最後がカンマなら取り除く
if SUBSTR(SHIORI3FW.FMOTable,STRLEN(SHIORI3FW.FMOTable)-1,1)==',' {
SHIORI3FW.FMOTable=SUBSTR(SHIORI3FW.FMOTable,0,STRLEN(SHIORI3FW.FMOTable)-1)
}
}
//******************************************************************************
// テキスト処理
//******************************************************************************
//------------------------------------------------------------------------------
// 関数名:SHIORI3FW.MakeJustText
// 機能 :指定した長さになるまでスペースを埋める / 省略する
// 引数 :argv0=テキスト argv1=文字数(半角換算)
//------------------------------------------------------------------------------
//---- 後ろにスペースを補完する関数 (from和音)
SHIORI3FW.MakeLongText
{
_menuitem = _argv[0]
_len = _argv[1] - GETSTRBYTES(_menuitem,127)
if _len <= 0 {
_menuitem
return
}
_space = ' '
_menuitem += SUBSTR(_space,0,_len)
_menuitem
}
//---- 適当な長さで切る -------------------------------------------
SHIORI3FW.MakeShortText
{
if _argc < 2 {
''
return
}
_src = _argv[0]
_cut = TOINT(_argv[1])
_text = ''
if GETSTRBYTES(_argv[0],127) <= _cut {
_argv[0]
return
}
_num = STRLEN(_src)
_lendiff = 0//後で保存するためにスコープを一つ下げるためのダミー代入
while 1 {
_text = SUBSTR(_argv[0],0,_num)
_lendiff = _cut - GETSTRBYTES(_text,127) - 2
if _lendiff >= 0 {
break
}
_num -= 1
if _num <= 0 {
''
return
}
}
if _lendiff > 0 {
_text += '...'
}
else {
_text += '..'
}
_text
}
//---- 長さをきっちり調節
SHIORI3FW.MakeJustText
{
_text = SHIORI3FW.MakeLongText(_argv[0],_argv[1])
if _text != _argv[0] {//短すぎた
_text
return
}
_text = SHIORI3FW.MakeShortText(_argv[0],_argv[1])
_text
}
//******************************************************************************
// その他
//******************************************************************************
//---- HTTPコード->日本語 _argv[0]にコード
SHIORI3FW.HTTPCodeToMessage
{
case _argv[0] {
when '403' {
'アクセス拒否'
}
when '404','410' {
'ファイル無し'
}
when '500','502','503' {
'サーバ側の不調'
}
when 'timeout' {
'タイムアウト'
}
when 'fileio' {
'ファイル書き込みエラー'
}
when 'artificial' {
'手動中断'
}
}
}

File diff suppressed because it is too large Load Diff