游侠NETSHOW论坛

标题: 【光荣工作组】銀鳥的容器的初階教程 [打印本页]

作者: two001    时间: 2009-3-18 11:20:20     标题: 【光荣工作组】銀鳥的容器的初階教程

後續教程:
【光荣工作组】銀鳥的TK5剧本编辑系列讲座
容器的使用教程(进阶篇)        by:五彩麒麟

前言:
      隨著新技術的出現,TK5版區終於又熱鬧起來了。趁著這股東風,大家都加入到劇本製作者的隊伍中來吧。
------------------------------------------------------------------------------------------------------------------------------------------------
作为TK5剧本编辑中最複杂也是最重要的功能之一,容器一直是阻碍新人学习一道门槛。而且至今为止游侠网上也没有一篇比较全面的关於容器功能的使用教程。今次偶银鸟(游侠ID:two001)就为各位送上一篇算是入門級容器功能的使用教程。
(本贴内的所有内容都是偶平时在制作剧本时总结的经验,因此可能有缺陷以及错误,如果各位发现后可以回帖告知,以便及时改正,避免误导新人。)
------------------------------------------------------------------------------------------------------------------------------------------------

    如果要將容器做一个形象的比喻,那TK5中的容器就大致可以理解为网络中的搜索引擎。之所以说他是搜索引擎,是因为容器功能的複杂性、宽泛性、可操作性一点也不比搜索引擎差。(當然是你能夠運用用熟練的情況下)
    因為是入門級別的教程,因此一些複雜的容器的書寫,以及容器結果的循環,兩容器或多容器的套用等進階的內容這裡暫時不說……

首先讓我們了解下,容器製作的大致流程與具體順序:

コンテナ設定:(種類,属性,属性值)
//設定容器的種類......相當于使用搜索引擎搜索的項目,網頁搜索、圖片搜索、mp3搜索
コンテナ絞り込み:(種類,属性,属性值)
//設定容器的主要內容......相當于您輸入的關鍵字,只不過這裡可有可無而已
コンテナ除外:(種類,属性,属性值)
//排除您不希望得到結果......將您不滿意的結果從容器內中中去除
コンテナソート:(種類,属性,属性值)
//將容器結果排序
コンテナ選択:(人物A,人物選択)
//最後選擇您想要的......

了解了流程與順序后下面让我们来看下容器使用中比较常用的格式语句:(寫的時候建議您對照書寫器來寫)

コンテナ设定:(種類,属性,属性值)


    设定容器的种类:所有容器的固定开头,容器中最为重要的也是不可或缺的项目。这个开头也最终决定了容器的显示方式(人物容器将最终显示人物选择框,据点容器显示大地图,物品容器显示物品列表)。括号中的第一项為容器種類設定。TK5大致为大家提供以下几种容器,它们分别是:人物、势力(又可以细分为大名家、海贼众、商家、忍者众)、据点(又可以细分为城、里、町、砦)、物品。当然也包括军团、流派、或是卡片等(这些都没办法显示性选择)。

コンテナ绞り込み:(種類,属性,属性值)

   
容器的主要内容,通常来说这一项是可有可无的,如果您利用“除外”的方式将容器内容划分的很细緻的話,就完全可以不写这一项。但是如果您一定要用到这一项,切记单个容器内只能包含一条主要内容,且必须要与容器种类相一致。

为什么只能包含一条呢?还是让我们用实际测试的结果来实验一下。
请使用支配力较大的大名来执行一下的两个容器。以便更好的验证结果!

测试用范例:1
太閤立志伝5イベントソース
チャプター:{
    イベント:事件1{//事件1 开始
        属性:一度だけ
        発生契機:ゲームスタート時
        発生条件:{
        }//条件结束
        スクリプト:{ //执行开始
            ナレーション:[[打開測試]]
            コンテナ設定:(人物,所属上司,主人公)
            コンテナ絞り込み:(人物,身分,家老)
            コンテナ絞り込み:(人物,身分,部将)
            コンテナ選択:(人物A,人物選択)
        }
    }
}
测试用范例:2
太閤立志伝5イベントソース
チャプター:{
    イベント:事件1{//事件1 开始
        属性:一度だけ
        発生契機:ゲームスタート時
        発生条件:{
        }//条件结束
        スクリプト:{ //执行开始
            ナレーション:[[打開測試]]
            コンテナ設定:(人物,所属上司,主人公)
            コンテナ絞り込み:(人物,身分,家老)
            コンテナ選択:(人物A,人物選択)
        }
    }
}

经过以上的测试,相信大家都明白了吧!

コンテナ除外:(種類,属性,属性值)


    除外项可以说是容器内最複杂的一项了,从格式上您就可以完全理解——将包含制定内容属性的结果从容器中去除。由此可见“除外”项可以在同一容器中并列书写多个。由於容器范围与种类的宽泛性,因此除外项目书写上也千差万别。

    这一项并不是三句两句就可以说的清楚的。原则上来说除外项可以与容器设定的种类不一致,但实际过程中又没有太多的意义使用到的比较少,因此建议大家书写时最好与前两项相一直。


コンテナソート:(種類,属性,属性值)


    设定完容器的内容后,您可以根據自己意愿让它按方便的方式来列。讓容器的結果按填寫的屬性為基準進行排列。与之前不同的是,这一项的属性值只有“昇顺”,“降顺”这两項可選。

    (顺便说一下随即排列的语句コンテナソート:(無効,シャッフル,降順))
原帖由 two001 于 2009-3-18 19:45 发表


在容器的排序語句里有一句:コンテナソート:(無効,シャッフル,降順)
它的功能就是將已得到的容器結果隨即排列
只要你將這一句加在你的容器“コンテナ选択”之前
並且將容器的選擇方式寫為“先頭”,“末尾”選擇就可以實現 ...


コンテナ选抜:(属性值,值)


    這一項選拔方式比較特殊,同樣是可有可無的項目。它的屬性值一欄中只能填寫:

    “残す”(從頭開始消除您指定數量以外的多餘結果

    “削る”(從頭開始消除您所指定數量的結果

    以上兩項的“值”一欄只能填寫具體數值(不能使用諸如“代入a”之類先前設定的變量函數)。

    “順番偶自己沒用過……不過個人猜測是從頭開始只顯示指定數量的結果如果使用這“順番”的話,在“值”一覽只能填寫"奇数","偶数",其效果也就是只顯示結果中的奇數/偶數項結果。


コンテナ选択:(變量值,选択方式)


    容器最後也是最關鍵的一步。這裡的“變量值”必須要與你最初設定的容器種類相一致。如果是人物容器這裡必須要寫“人物A”(最多到E ,一共5 個人物變量),如果是據點容器那就必須要寫“拠点A”(最多到E ,同樣是5 項)。而選擇方式則分為

    “先頭”:適用于所有容器種類,使用這種選擇方式將直接選擇容器結果的第一項。

    “末尾”:適用于所有容器種類,這一項與“先頭”相反,直接選擇容器結果的最後一位。

    “選択”:只適用與人物容器、據點容器(包括城、里、町、砦)物品容器,這三種容器。(拠点選択、人物選択、アイテム選択)使用這種方式選擇,將直接在遊戲中顯示容器的結果,玩家可以自主選擇容器結果。所以在使用者一項時,後面必須加以真、偽判斷做引導。或者是使用“コンテナカウンタ”語句調查容器結果的具體總數量

    除了以上這些,容器的語句還包括:
コンテナ複写:(退避)


    保存容器結果。比較常用的方法是將“発生条件”內書寫的容器結果(或是多容器并列使用時,其中之一)進行保存。留到具體的執行開始后再利用恢復語句進行調用和判斷。一般來說這句寫在“コンテナ选択”之前。

コンテナ複写:(復帰)


    恢復并導出容器結果。之前必須要保存過才可以使用,不然的話將會出現錯誤。


看完了以上這些,您先不要急著操作。讓我們最後再來幾個實例,以便更好的理解……
(虽然大部分都是人物容器,但其中有相当一部分还是相当有代表意义)

Q:如何顯示主角部下中所有的家老
A:
コンテナ設定:(人物,所属上司,主人公)
コンテナ絞り込み:(人物,身分,家老)

Q:如何顯示主角持有的物品,且按價格由高到低排列
A:
コンテナ設定:(アイテム,所有者,主人公)
コンテナソート:(アイテム,価格,降順)
コンテナ選択:(アイテムA,アイテム選択)

Q:如何選擇在世的活人中,年齡最大的一位
A:
コンテナ設定:(人物,死亡フラグ,生存)
コンテナソート:(人物,年齢,降順)
コンテナ選択:(人物A,先頭)

Q:如何顯示主人公的全部徒弟,死去或未出現的不要
A:
コンテナ設定:(人物,剣術師匠,主人公)
コンテナ除外:(人物,出現フラグ,未出現)
コンテナ除外:(人物,死亡フラグ,死亡)
コンテナ選択:(人物A,人物選択)

Q:如何顯示出現人物中所有的流派弟子
A:
コンテナ設定:(人物,出現フラグ,出現済み)
コンテナ除外:(人物,剣術流派,無効)
コンテナ除外:(人物,死亡フラグ,死亡)
コンテナ除外:(人物,人物番号,主人公)

Q:如何顯示主人公部下中已外出的人
A:
コンテナ設定:(人物,所属大名家,主人公大名家)
コンテナ除外:(人物,留守フラグ,在宅)
コンテナ除外:(人物,死亡フラグ,死亡)
コンテナ除外:(人物,出現フラグ,未出現)
コンテナ除外:(人物,人物番号,主人公)

Q:如何顯示所有主人公所在國的全部町
A:
代入国A:(拠点::主人公拠点.所属国)
コンテナ設定:(拠点,拠点種類,町)
コンテナ絞り込み:(拠点,所属国,国A)

[ 本帖最后由 two001 于 2009-5-26 21:04 编辑 ]
作者: saigooding    时间: 2009-3-18 11:25:14

应该支持~~我在一开始用时也是这玩意犯懵
作者: rockymei2k    时间: 2009-3-18 11:27:26     标题: 回复 #1 two001 的帖子

支持楼主!推广脚本开发的技术贴,是非常需要的东东!
作者: iamchenchao    时间: 2009-3-18 11:27:27

支持支持 新人的一道坎  尤其是非计算机专业者
作者: two001    时间: 2009-3-18 11:31:13

下午要出門........
晚上回來!
作者: iamchenchao    时间: 2009-3-18 16:04:51

提问 从已经确定的一群人里,随机抽一个出来,该怎么写?        
作者: zhuoludian    时间: 2009-3-18 16:16:04     标题: 回复 #6 iamchenchao 的帖子

随机好象是这个,不过一般情况中随机数是最低值。
コンテナ設定:(人物,無効,無効)
コンテナ絞り込み:(人物,出現フラグ,出現済み)
コンテナ除外:(人物,死亡フラグ,死亡)
コンテナ除外:(人物,出現フラグ,未出現)
代入a:(コンテナカウンタ)                 
代入a:(Rnd)%(a)                       
ループ:{                                             
    調査:(a)==(0)
    ブロック脱出:(真)
    コンテナ選抜:(削る,1)
    代入a:(a)-(1)
}
コンテナ選択:(人物A,先頭)

在下也想请教楼主。知道以下这个具体是做什么的吗?
コンテナ検索

[ 本帖最后由 zhuoludian 于 2009-3-18 16:23 编辑 ]
作者: iamchenchao    时间: 2009-3-18 16:29:09     标题: 回复 #7 zhuoludian 的帖子

多谢啦~     这就去试试              202020
作者: 五彩麒麟    时间: 2009-3-18 17:44:42     标题: 回复 #7 zhuoludian 的帖子

我今天在尝试做太阁强手棋,刚刚好用到这个命令
コンテナ設定:(人物,カテゴリ,武将)
コンテナ検索:(人物,人物番号,794)
コンテナ選抜:(ポインタ,以上)
意思就是将指针直接移动到人物番号是794的人物上面。
作者: two001    时间: 2009-3-18 19:45:14

原帖由 iamchenchao 于 2009-3-18 16:04 发表
提问 从已经确定的一群人里,随机抽一个出来,该怎么写?        


在容器的排序語句里有一句:コンテナソート:(無効,シャッフル,降順)
它的功能就是將已得到的容器結果隨即排列
只要你將這一句加在你的容器“コンテナ选択”之前
並且將容器的選擇方式寫為“先頭”,“末尾”選擇就可以實現隨即隨即選擇的效果了、

[ 本帖最后由 two001 于 2009-3-18 19:47 编辑 ]
作者: rockymei2k    时间: 2009-3-18 20:25:41

原帖由 two001 于 2009-3-18 19:45 发表


在容器的排序語句里有一句:コンテナソート:(無効,シャッフル,降順))
它的功能就是將已得到的容器結果隨即排列
只要你將這一句加在你的容器“コンテナ选択”之前
並且將容器的選擇方式寫為“先頭”,“末尾”選擇就可以實現 ...


高手!受教了,你决定写教程,是多么的伟光正啊!
作者: two001    时间: 2009-3-18 23:33:38     标题: 回复 #11 rockymei2k 的帖子

樓上的太過獎了。
另外偶正在整理資料。
考慮要不要從頭開始寫一個詳細的完整的教程
作者: ericsim    时间: 2009-3-19 00:27:55

要,绝对要!
202020202020202020
作者: hhboy_100    时间: 2009-3-19 02:37:25

这个一定要顶啊,



作者: weiiy99010    时间: 2009-3-19 03:20:50

看是看了……明白得少
吃不透,还是很不明白怎么去用
作者: two001    时间: 2009-3-19 08:55:28     标题: 回复 #15 weiiy99010 的帖子

容器本来就是剧本编辑中比较深奥的。看不懂的话可以慢慢来。
作者: 小澜之芥    时间: 2009-3-19 11:39:58

按个爪印慢慢学,LZ辛苦..........
作者: lg5466    时间: 2009-3-19 16:13:24     标题: 回复 #12 two001 的帖子

要啊,一定要啊
作者: two001    时间: 2009-3-19 21:59:03

看来还是有必要
写一篇全面的教程^_^
作者: 独美行    时间: 2009-3-20 04:18:42


来支持下.




.
作者: lg5466    时间: 2009-3-20 08:14:52

我每次编的时候,一使用新武将的名字,编译的时候就提示中断
然后就用容器  コンテナ設定:(人物,カテゴリ,武将)
                    コンテナ絞り込み:(人物,人物番号,801)
                    コンテナ選択:(人物A,先頭)        
这个笨办法
问一下有没有简单的带入新武将的方法,最好直接用名字
作者: two001    时间: 2009-3-20 08:17:23     标题: 回复 #21 lg5466 的帖子

代入人物A:(801)

虽然不和规范
但我每次都这么写
作者: lg5466    时间: 2009-3-20 08:45:13

你那个能用不???
楼上大大,我之后用了代入人物A:(人物::人物番号:801)
编译时确实没有报错了
而我再用人物登用时,也没报错
就是游戏开始后看到801仍然在游戏的町里面猥琐着。。。。
[汗水] [汗水] [汗水]
作者: two001    时间: 2009-3-20 09:02:30     标题: 回复 #23 lg5466 的帖子

[冲啊] 不能用怎么会编译成功的呢?
是不是你自己编译的代码有问题
作者: lg5466    时间: 2009-3-20 09:25:57

不知道啊,所以才问一下你们这些高手啊

我是这样用的
代入人物A:(人物::人物番号:801)
人物登用:(人物A,直臣,织田信长)
游戏开始后看到人物A还是在青州町里面
编译时也没有报错
[汗水] [汗水]
之后就用了容器那个笨办法了
作者: lg5466    时间: 2009-3-20 09:29:17

对了,需不需要在发生条件里面加个调查人物A=存在 或是其他什么的

我是直接在执行”スクリプト:{"后面用这个代码的
[伤心啊] [伤心啊]
作者: iamchenchao    时间: 2009-3-20 10:12:07     标题: 回复 #26 lg5466 的帖子

コンテナ設定:(人物,無効,無効)
コンテナ絞り込み:(人物,人物番号,801)
コンテナ選択:(人物A,先頭)
人物登用:(人物A,直臣,织田信长)
=====================
我是这么用的...                     



另外,楼主同志写些难点重点好了  
我觉得以前小龙女前辈写的入门教程已经很好了
反倒是容器,循环这类东西没有什么好的讲解帖子
作者: zhuoludian    时间: 2009-3-20 10:14:10

我把g5466错误的地方放大点给你看:
代入人物A:(人物::人物番号:801)

大家注意红色部分!明白了吧,应该是全角的.,你用了:怎么能通过编译呢?

[ 本帖最后由 zhuoludian 于 2009-3-20 10:23 编辑 ]
作者: zhuoludian    时间: 2009-3-20 10:22:28

向楼主请教,容器调查项里,特殊变数中,以下这两个到底有什么区别?不好意思本人不懂日文。

コンテナカウンタ

コンテナポインタ

麻烦您了,谢谢。
作者: lg5466    时间: 2009-3-20 10:27:03


这是在论坛上图简单才没有用全角

我的意思是,我25楼的登用代码通过了编译

但就是游戏开始后发现人还是在町里面,还是个浪人[汗水] [汗水]

不过,听楼上几位大大的回答,看来代码应该没有问题,或许是我人品有问题[汗水] [汗水]

谢谢各位大大的热心解答
作者: zhuoludian    时间: 2009-3-20 10:49:49     标题: 回复 #30 lg5466 的帖子

拜托,人物番号后面应该跟的是点,不是冒号。
你本身的人物代入就不成立,怎么可能再进一步完成登用的命令呢?
而且怎么又往人品上扯?
作者: two001    时间: 2009-3-20 10:50:44

コンテナカウンタ
作用是统计当前容器结果的的总数。常用的做法是:
条件ループ:(コンテナカウンタ)>(0){
コンテナ選択:(XXX,XXX)
コンテナ選抜:(削る,1)
}
配合条件循环语句,可以将容器每条的结果都一一处理。直到容器的结果处理完毕为止
コンテナポインタ
这个是指容器的指针....因为用的比较少。偶也不太清楚该干嘛............
作者: lg5466    时间: 2009-3-20 11:45:41


哦,原来是点啊
明白了,等下试下
还有个问题,“見つからない : 淺井久政”   这是怎么回事  
我每次用这个人的时候编译就会出现这个问题,然后代入人物叉叉,让叉叉的番号成为016(淺井久政 ),然后对话什么的只要涉及到 淺井久政 的就一律变成 人物叉叉。
作者: two001    时间: 2009-3-20 12:01:53

"浅井久政"试试用这个.............
作者: lg5466    时间: 2009-3-20 12:25:32

可以用了,楼上谢了
31楼也谢了,人物登用也可以了,还是代码出了问题,多谢大大的指教了 [谢谢]
以后不用编那么繁琐的代码了^_^
最后一个问题,那个显示获得物品的代码怎么编写,是不是和显示卡片一样?
作者: two001    时间: 2009-3-20 14:06:30

你问题还真是一个接着一个.......
恩一样的....
スチル表示:(アイテム,物品名,無効,無効,フェード)
这里的"物品名"既可以用アイテムA(A~E,一个5个)的变量
也可以用具体的物品名
作者: 五彩麒麟    时间: 2009-3-20 14:07:21     标题: 回复 #29 zhuoludian 的帖子

コンテナポインタ是指針,我在做包圍網和迎擊追擊時都用過。比如要削去容器的最後一個記錄,就可以這麽寫:
代入コンテナポインタ:(コンテナカウンタ)-(1)//將指針移動到最後一個記錄
コンテナ選抜:(ポインタ,未満)//選擇指針之前的紀錄,也就是說指針之後的(包括)全部刪除

在隨機選取容器内記錄的時候,如果不想打亂排序,就可以用指針。先產生隨機數,然後將指針移動到相應的記錄上直接讀出來,比用循環一個個削要好。這也是執行速度最快的辦法。
作者: zhuoludian    时间: 2009-3-21 17:06:32     标题: 回复 #37 zhuoludian 的帖子

明白了コンテナポインタ原来是配合ポインタ使用的,长知识了。
多谢各位大哥的赐教,收益颇多。

顺便说一个,麒麟大人的迎击阻击补丁貌似有点问题,问题好象是在选择阻击军团以及军团人物时,错用了条件ループ的循环,这个因为字节限制的关系,有时出现奇怪的结果。
比如,敌人没有同盟与从属单位,却强制阻拦我援军,求救了番号靠前的势力,使同时从属于自势力的两个忍者众成了互相阻击的对手。
比如,到达敌城下,发生城下拦截,敌城兵多但将寡,(武将数不满3人)出击4支部队,弥补人数不足,选择大将时临时挑选番号靠前的生存武将带兵。结果此武将实际已经隶属于自势力,感觉就象是在自相残杀。
这个应该都是条件ループ 造成的混乱吧,BUG报告完毕,请麒麟大人复查。

[ 本帖最后由 zhuoludian 于 2009-3-21 17:10 编辑 ]
作者: 五彩麒麟    时间: 2009-3-22 03:25:32     标题: 回复 #38 zhuoludian 的帖子

我看了一下,最新的阻援和多军团迎击选势力和人物时候,我没有用到条件ループ 啊。

阻援用了条件ブロック,循环用的是ループ。如果你说的是条件ブロック,里面内容40行左右,应该没有超过2047字节的限制。
作者: zhuoludian    时间: 2009-3-22 09:22:44     标题: 回复 #39 五彩麒麟 的帖子

或许问题就出在条件ブロック上,我发觉以这个做选择时,经常在条件不满足的时候,也在执行,结果就出现了上文提到的这种莫名其妙的事情。字节虽然没超出,但总之是执行中有时会出错,不知是什么原因?
恕在下冒昧,是不是麒麟大人用条件ブロック为选择的源码,书写中哪里有错误,麻烦了,麻烦大人再复查一下。
在下执溺于此,老实说我正是在用大人你的源码为范本写东西,如果你的源码出了错…!……在下也就跟着错了。
哈哈,就是这样,不好意思的说,麻烦您了。
敬上。

[ 本帖最后由 zhuoludian 于 2009-3-22 09:47 编辑 ]
作者: 五彩麒麟    时间: 2009-3-22 13:06:46     标题: 回复 #40 zhuoludian 的帖子

经过修改和测试,做了些调整:

1、迎击问题(出城迎击.txt):

174行,即双军团迎击AND判断里面,将 調査:(コンテナカウンタ)>=(2) 改为 調査:(コンテナカウンタ)>=(1)

207行,即三军团迎击AND判断里面,添加一行:(コンテナカウンタ)>=(2)

238行,如按上面在三军团那里添加了一行,则这里就是239行,即四军团AND判断里面,将 調査:(コンテナカウンタ)>=(1) 改为 調査:(コンテナカウンタ)>=(2)

2、阻援问题(电脑阻援.txt):是循环问题,不过这里却是要由"ループ"改为用"条件ループ"。

三个大循环ループ,即判断自势力、从属同盟势力、从属忍者那里,全部改用 条件ループ:(コンテナカウンタ)>(0)

原脱出条件OR调查全部删除。

无论是自势力、从属同盟势力还是从属忍者,找到合适出兵点后,即在忍者报告语句后面,都要增加强制脱出语句:ブロック脱出:

测试了一下,没有超过字节的问题。下载我也更新了,在电脑阻援.txt里面我还对阻援的修改添加了些注释,你可以看看。
作者: zhuoludian    时间: 2009-3-22 14:26:58     标题: 回复 #41 五彩麒麟 的帖子

辛苦了,再次感谢。
20202020202020
作者: rockymei2k    时间: 2009-3-26 22:36:21

原帖由 五彩麒麟 于 2009-3-20 14:07 发表
コンテナポインタ是指針,我在做包圍網和迎擊追擊時都用過。比如要削去容器的最後一個記錄,就可以這麽寫:
代入コンテナポインタ:(コンテナカウンタ)-(1)//將指針移動到最後一個記錄
コンテナ選抜:(ポインタ,未満)//選擇 ...


嗯,又学会新东西了,呵呵!谢谢了!
作者: two001    时间: 2009-5-26 10:00:30

09.5.26.重新排版

另外,五彩麒麟可能接手繼續完成其餘的部分!

原帖由 五彩麒麟 于 2009-5-25 17:11 发表
突然想到了,干脆我接你的容器教程,把它补完吧。详细说下容器的检索、指针和存取:)

作者: o(_)o旅行    时间: 2013-4-25 21:08:17

大大学习了
作者: gododay    时间: 2017-3-24 15:13:49

大大,我用停止时间(0.1)不行哎,会直接停着不动,停止时间(1)就没问题,是最小只能用1吗?还是我用脱壳版的锅




欢迎光临 游侠NETSHOW论坛 (https://game.ali213.net/) Powered by Discuz! X2