中文偽春菜後援會論壇  

打印

[教學] 製作SAORI

製作SAORI

最近發現有一陣子沒有去更新Wiki了,
一動念下就寫了這篇文章。
最主要的其實還是想說明SAORI並不是啥太高深的東西,
只要學過基本的C/C++便能做出來了。
(至於功能強大與否就不在此討論範圍之外了...XD)

以下是寫在Wiki上的東西:

----------

製作教學

首先請到csaori - Google Code下載CSaori的原始碼,這是日本方面預先寫好的Saori原型,裡面已經幫你做好除了你要寫的功能以外的所有事情。

下載好後,請開啟任意的C++ IDE開發工具(如Visual C++),建立一個空專案,將這兩個檔案加入專案之中。接下來,再新增一個cpp檔,並實作以下三個函式:
複製內容到剪貼板
代碼:
void CSAORI::exec(const CSAORIInput& in,CSAORIOutput& out)
bool CSAORI::load()
bool CSAORI::unload()
load()與unload()主要是處理記憶體配置的工作,如果你沒有做這些事情的需求,那麼直接回傳true即可。exec()就是實際實作功能的地方了,你主要要記住的事情有二:

  • 偽春菜呼叫Saori時所傳入的引數都在in.args中。
  • 你的輸出要放在out.value中。

最後再將專案的組態型別改成動態函式庫(.dll)即可。

現在,讓我們來實作一個簡單的例子。首先,我們要製作一個talk.dll,它的功能是當偽春菜呼叫此Saori並傳入「cattalk」字眼時,便回傳「喵。」。在這例子中我們定義第一個引數是決定是誰講話,第二個引數是決定要講什麼。例如當使用者呼叫
複製內容到剪貼板
代碼:
FUNCTIONEX('talk.dll', 'kero', 'cattalk');
時,我們便要在value[0]中回傳「\1喵。」。在AYA中這個變數會被存入valueex0中。

那麼,我們首先在專案中加入一個talk.cpp,並將以下程式碼加入其中:
複製內容到剪貼板
代碼:
#include "csaori.h"

void CSAORI::exec(const CSAORIInput& in,CSAORIOutput& out)
{
    string_t s = L"";
    if (in.args[0] == L"sakura")
        s += L"\\0";
    else if (in.args[0] == L"kero")
        s += L"\\1";
    else
        return;

    if (in.args[1] == L"cattalk")
        s += L"喵。";
    else if (in.args[1] == L"dogtalk")
        s += L"汪。";
    else
        return;

    out.values.push_back(s);
}

bool CSAORI::load()
{
    return true;
}

bool CSAORI::unload()
{
    return true;
}
注意因為我們使用寬字串來運作,所以所有的字串的雙引號前面得加上「L」來告知編譯器這是個寬字元字串。接下來我們首先判斷第一引數是sakura或是kero,然後決定要加入\0或\1到字串裡,如果都不相同的話則直接return什麼都不輸出,第二引數也是相同的道理。

再來便是輸出了,由於CSaori在這裡使用C++的vector容器,因此要增加元素的話就要用push_back這個成員函數來新增。之後CSaori的內部函式會把你加到out.value中的字串做成核心程式看得懂的格式回傳給偽春菜。

(注意:如果你看不懂我這邊在寫什麼,那麼建議你去買本C++的書來看看會比較好。)

接下來就是編譯了,記得把你的專案組態換成.dll型式。編譯好後將產生出來的dll檔複製到ghost資料夾底下,就可以運作了。

一個簡單的AYA版呼叫例子:
複製內容到剪貼板
代碼:
FUNCTIONEX('talk.dll', 'kero', 'cattalk');
"%(valueex0)\n";
有沒有發現使魔叫了聲「喵。」呢?XD

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

惰性是大敵。

TOP

以眾人對語法類似C/C++的AYA的掌握來看,說SAORI並不是啥太高深的東西恐怕毫無說服力.
不過即使了解了How to do,還有What to do的問題在.
皮格马利翁效应(Pygmalion Effect):只要有爱,伪春菜也能和人类一样.

TOP

這確實是個問題...

不過我所要做的事只是在難以通行的山上建一座便橋
至於有沒有人走過或走去了哪
這並不是我要考慮的事
我想重視的是我曾建了這麼一座便橋...
末月返想 - 創意的存放處
二次元斷層 - 成果展現之所在

惰性是大敵。

TOP

然後有人就在橋上走著走著就不小心失足墜落



(喂

[公告] 請不要來這裡求檔案,看到類似討論串內文不問一律刪除
-----------------------------------
啊哈哈   佐祐理不清楚
-----------------------------------
初心者有問題的話請先入內觀看
初心者常見問題區
-----------------------------------
注音文   求檔文   禁止

-----------------------------------
手書Blog~

TOP

引用:
原帖由 KSL 於 2009-3-7 14:16 發表
然後有人就在橋上走著走著就不小心失足墜落
那肯定是我下的陷阱




(喂
末月返想 - 創意的存放處
二次元斷層 - 成果展現之所在

惰性是大敵。

TOP

引用:
原帖由 時原砂 於 2009-3-7 15:41 發表

那肯定是我下的陷阱




(喂

附件

1225615291355.jpg (31.56 KB)

2009-3-7 15:49

1225615291355.jpg


[公告] 請不要來這裡求檔案,看到類似討論串內文不問一律刪除
-----------------------------------
啊哈哈   佐祐理不清楚
-----------------------------------
初心者有問題的話請先入內觀看
初心者常見問題區
-----------------------------------
注音文   求檔文   禁止

-----------------------------------
手書Blog~

TOP

CSaori Google Code Project page中有看到我的名字嗎? (拖走


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

萬事皆可萌,唯有情無價

TOP

求截屏功能的SAORI(自拖)
主頁更新啦:cat-fish.net

TOP

引用:
原帖由 貓魚 於 2009-3-10 18:13 發表
求截屏功能的SAORI(自拖)
你要的東西來了 XD

http://scrappedblog.blogspot.com/2009/03/screenshot-saori-new-r120090310-2137.html


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

萬事皆可萌,唯有情無價

TOP

哇;w;
我成功裝入,并取得OK的返值,
不過截取下來的圖片卻無法打開,也無法預覽,是我設置錯了嗎@@
複製內容到剪貼板
代碼:
        elseif reference0 == "f12" {
                _i = FUNCTIONEX("saori\screenshot.dll","cya.bmp");
                "%(_i)%(valueex0)"
        }
另外,我想要的截屏是可以用鼠標選取出截取範圍、然後丟到剪貼板的那種,
可以做到嗎(毆)
主頁更新啦:cat-fish.net

TOP

引用:
原帖由 貓魚 於 2009-3-12 18:54 發表
哇;w;
我成功裝入,并取得OK的返值,
不過截取下來的圖片卻無法打開,也無法預覽,是我設置錯了嗎@@        elseif reference0 == "f12" {
                _i = FUNCTIONEX("saori\screenshot.dll","cya.bmp");
                "%(_i)%(valueex0)"
        }另外,我想要 ...
啊…是bug。
修正了 http://scrappedblog.blogspot.com ... 220090312-2014.html

>可以用鼠標選取出截取範圍、然後丟到剪貼板的那種
不是不能做只是太麻煩了,pass。
有人要搞嗎? XD


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

萬事皆可萌,唯有情無價

TOP



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

萬事皆可萌,唯有情無價

TOP

引用:
>可以用鼠標選取出截取範圍、然後丟到剪貼板的那種
不是不能做只是太麻煩了,pass。
有人要搞嗎? XD
這個陷阱我跳了.

screencatch.rar (27.11 KB)
用法   _result=FUNCTIONEX("saori\screencatch.dll")

文件列表:
screencatch.dll       截屏功能的SAORI.
Readme.txt             Readme文件.
screencatch.cpp     SAORI源代碼,雖然沒用CSaori,但還是可以供大家學習以下.
皮格马利翁效应(Pygmalion Effect):只要有爱,伪春菜也能和人类一样.

TOP

拜。
用更新表達我的敬仰……!

無恥追加需求:
可以按右鍵取消截屏嗎?@w@

[ 本帖最後由 貓魚 於 2009-3-16 18:26 編輯 ]
主頁更新啦:cat-fish.net

TOP

追加右鍵取消截屏.
screencatch_1_1.rar (27.69 KB)
皮格马利翁效应(Pygmalion Effect):只要有爱,伪春菜也能和人类一样.

TOP

引用:
原帖由 Pygmalion 於 16/3/2009 21:08 發表
追加右鍵取消截屏.
1451
好似不能安裝
[url=http://hk.myblog.yahoo.com/lkyjimmy/]網主福佳網誌[/url]

TOP

引用:
原帖由 Pygmalion 於 2009-3-16 21:08 發表
追加右鍵取消截屏.
1451
mirror了。
http://saori.ukagaka.googlepages.com/


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

萬事皆可萌,唯有情無價

TOP

翻滚~神隐了段时间自己啥都么做~泪目~TAT
某只只知道自己的话是很需要这些的来着~
虽然很多地方会不理解的样子~
不过慢慢来就好~翻滚~

(于是~为咩某只一忙就会忙得要死要活的~TAT)

TOP

引用:
lkyjimmy 發表於 2009-3-16 21:58

好似不能安裝
我這沒問題.
皮格马利翁效应(Pygmalion Effect):只要有爱,伪春菜也能和人类一样.

TOP

謝龍恩。
已更新。

※ 我們嚴重偏題了是不是該開新串…

[ 本帖最後由 貓魚 於 2009-3-18 17:26 編輯 ]
主頁更新啦:cat-fish.net

TOP



當前時區 GMT+8, 現在時間是 2018-8-15 05:41

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

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