中文偽春菜後援會論壇  

打印

[求助] 求助一個Ontranslate相關的語法寫法……

求助一個Ontranslate相關的語法寫法……

那個,我對正則表達式實在是不在行,
來此求各位前輩指導OTZ

我想讓人格在OnAITalk下,凡遇到\n\n[half]的時候,都自動轉換為\n\n[half]\w9\w9\w9
簡單來說就是讓兩個人互相說話的速度放慢一點,
現在是只靠標點符號來決定速度,總體感覺還是切換的太快了@@

目前的Ontranslate是這樣:
複製內容到剪貼板
代碼:
//**** 轉譯 ***************************************************************************************

//---- OnTranslate事件 ------------------------------------------------------------------
//---- 對話釋出前的加工,
//---- 舉個簡單的例子:改變語尾(「。」→「喵。」)。不想執行時可以註釋化。
TextOnlyTranslator
{
    _string = RE_SPLIT(_argv[0],'\\(\\|q\[.*?\]\[.*?\]|[!&8cfijmpqsn]\[.*?\]|[-*+014567bcehntuvxz]|_[ablmsuvw]\[.*?\]|__(t|[qw]\[.*?\])|_[!?+nqsV]|[sipw][0-9])')
    _n = ARRAYSIZE(_string)
    _tag = RE_GETSTR()
    _tr = ''
    _qs = 0
   
    for _i = 0 ; _i < _n ; _i++ {
        _tr += EVAL("%(_argv[1])('%(_string[_i])',%(_qs))")
        _tr += _tag[_i]
        if '\_q' _in_ _tag[_i] {
            _qs = ! _qs
        }
    }
   
    _tr
}

TextOnlyTranslatorFunc
{
    //_argv[0] = 置換対象テキスト
    //_argv[1] = クイックセクション内か否か

    _text = _argv[0]
    if ! _argv[1] {
        _text = REPLACE(_text, "、", "、\w5")
        _text = REPLACE(_text, ",", ",\w9\w5")
        _text = REPLACE(_text, "。", "。\w9\w9")
        _text = RE_REPLACE(_text ,'…(?=[^…])|…$', '…\w9\w5')
        _text = RE_REPLACE(_text ,'?(?=[^?|!])|?$', '?\w9\w5')
        _text = RE_REPLACE(_text ,'!(?=[^!])|!$', '!\w9\w5')
    }
    _text
}
OnTranslate
{
   //とりあえず最初のおまじない(一時変数にとりあえず代入)
   _text = reference0
   _text = TextOnlyTranslator(_text,'TextOnlyTranslatorFunc')
   
   //敬称置換の例
   //例外は先に書いておく
   //_text = REPLACE(_text, "たん殿", "たん")
   
   //「さん殿」とかだぶりそうなのを置換
   //_text = RE_REPLACE(_text,"(ちゃん|くん|さん|殿)殿","殿")
   
   //ここはおまじないのつもりで。消しちゃだめです。
   //(一時変数で置き換え処理したものを結果として返す)
   _text
}
×$那個替換為全角了,如果半角的話不知為何會把下面說的話給替代上去!@@

現在的情況是無論寫\n\n[half]或\0或\1都無效,
我猜想是TextOnlyTranslator那裡已經將櫻語無效化了……?@@"(那邊我完全看不懂;口;)
因此求助有沒有辦法簡單的將\n\n[half]轉譯……;;;w;;;

[ 本帖最後由 貓魚 於 2009-2-27 11:46 編輯 ]
主頁更新啦:cat-fish.net

TOP

像\n\n[half]這樣明確的字串應該不需要用正則表達式吧.
OnTranslate中直接
  _text = reference0
   _text = REPLACE(_text, "\n\n[half]", "\n\n[half]\w9\w9\w9")
就可以了.

順便問一下,單引號在AYA中是表示正則表達式('regexp ')的嗎?
皮格马利翁效应(Pygmalion Effect):只要有爱,伪春菜也能和人类一样.

TOP

引用:
原帖由 Pygmalion 於 2009-2-27 20:11 發表
像\n\n[half]這樣明確的字串應該不需要用正則表達式吧.
OnTranslate中直接
  _text = reference0
   _text = REPLACE(_text, "\n\n[half]", "\n\n[half]\w9\w9\w9")
就可以了.

順便問一下,單引號在AYA中是表示正則 ...
不是。反而比較像是PHP中的單引號啦。


正在聽着:
水人的格言:
有仇不報非君子!
有水不灌非魔人!

萬事皆可萌,唯有情無價

TOP

其實還蠻簡單的
既然呼叫了個TextOnlyTranslator進行純文字替換
那也可以另外寫個SakuraScriptTranslator進行櫻語替換
或者乾脆把額外的置換寫在TextOnlyTranslator下面
簡單的說就是
引用:
OnTranslate
{
   //とりあえず最初のおまじない(一時変数にとりあえず代入)
   _text = reference0
   _text = TextOnlyTranslator(_text,'TextOnlyTranslatorFunc')
   _text = REPLACE(_text, '\n\n[half]', '\n\n[half]\w9\w9\w9')

   _text
}
----

噗...上面好像已經有人講解過了
請自行無視我這段吧XD

用單引號括起來的字串在YAYA的處理過程中不會進行%()解析
因此速度上會比較快
在一次載入幾百個字串組成的array時就會有秒級數的差距了

[ 本帖最後由 時原砂 於 2009-2-27 22:21 編輯 ]
末月返想 - 創意的存放處
二次元斷層 - 成果展現之所在

惰性是大敵。

TOP

感謝感謝,
一腦抽居然沒想到寫到外頭去OTZ

啊!
但是這樣的話,所有有\n\n[half]的地方都會被替換,
而我只想要在OnAITalk部分替換……
這要怎麼做呢?@@
主頁更新啦:cat-fish.net

TOP

比較簡單的是另外設置一個變數AITalking
在OnAITalk的前面將此變數設為1
然後在OnTranslate那邊判斷此變數是否為1
是的話就執行替換
並重設變數為0

其他的方法比較麻煩就不細說了...
末月返想 - 創意的存放處
二次元斷層 - 成果展現之所在

惰性是大敵。

TOP

作成了!
非常感謝><
主頁更新啦:cat-fish.net

TOP



當前時區 GMT+8, 現在時間是 2019-2-20 16:55

Processed in 0.016856 second(s), 9 queries, Gzip enabled.

清除 Cookies - 聯繫我們 - 中文偽春菜後援會 - Archiver - WAP - TOP - 界面風格