為簡化以及達成一些較高難度同人任務中所使用到的運算技巧,所以我們建立了函式庫公開給大家使用。 ※含有debug標籤之事件代表有多於拿來檢查是否有疏失之動作,請自行刪除。 VAR檔的使用方法: 函式的URL可通過右鍵相應的下載符號,按複製連結網址取得 TWF檔的使用方法: 用「同人陣合體外掛」將函式內容搬至你的同人內,詳見此文章 目前函式: TWIlibrary.twf: 1.優先佇列 (Priority Queue) 2.平方 (Square Root) 3.兩點距離 (Distance between two points) 註:此檔歷史比較悠久,沒有用執行事件動作,因此運算會比較慢 另外,作者星龍的實力又比其他編輯成員高出許多,目前不會有更新版 目前FK終於搞懂Priority Queue是怎玩了,但沒有時間弄/_>\ sqrt()_*.var: 平方 (square root 的變數存檔版) trigo.var: 三角函數 (sin cos tan asin acos atan 的純變數版) char60.var: 六十個字元的字元表 ( 60 character map) factorial.twf: 階乘 (nothing important) 環狀AI陣_26容量.twf: 環狀AI陣基本檔 vector.min.twf: 矢量(流動陣列) TWIlibrary.twf介紹: 1.優先佇列 (複雜版:維基百科) 優先佇列可以將儲存一堆數字,預設可以儲存49個數字。 其特色為:數列中的第一個數字必為最大值。 舉例: 一個數列:{1,9,4,6,3} 依序放入優先佇列後會變為: {9,6,4,3,1} 我們可以利用這個性質進行排序: 每次取出最大值,直到最後一個被取出,佇列為空時,取出的順序必然是有順序的數列。 拿上面的例子開刀: 優先佇列:{9,6,4,1,3} 取出:{} ↓ 優先佇列:{x,6,4,1,3} -> {3,6,4,1} -> { 6,3,4,1} 取出:{9,} ↓ 優先佇列:{x,3,4,1} -> {1,3,4} -> {4,3,1} 取出:{9,6} ↓ 優先佇列:{x,3,1} -> {1,3} -> {3,1} 取出:{9,6,4} ↓ 優先佇列:{x,1} -> {1}(剩下一個,直接取出) 取出:{9,6,4,3} -> {9,6,4,3,1} ↓ 優先佇列:{} 取出:{9,6,4,3,1} 看不懂沒關係~至少知道怎麼用 函數成員: 使用前必須檢查 : PRIOwait 等於 0
附註:由於光暈系統的關係,所以目前是最不穩定的函數。 2.平方根 (請使用官方數學式中的平方根) 就是開根號 不用解釋吧 由於光暈系統的關係,這裡支援最大開到4900,生成速率大約200~500個 / 分鐘 如要使用建議使用任務初始化讀取至少一分鐘以上 另外,在事件 [stop:sqrt]中,如5分鐘內沒有完成,則將會強迫終止繼續運算尚未算到的根號值。(可自行修改時間或刪除) 函數成員:
範例: 設定變數 a = 10 設定變數 a = sqrt.{a} 最後結果: a = 316 3.兩點距離 (請使用官方數學式中的平方根) 取得兩座標間乘以100後的絕對距離。 函數成員:
範例: 檢查- 檢查人物位置 : enemy 在座標(0,0) 上 檢查相反效果 (儲存位置: dis.pos) // << 假設為 3,3 檢查人物位置 : player 在座標(0,0) 上 檢查相反效果 (儲存位置: dis.pos2) // << 假設為 18,23 比較數值 : (整數)1 等於 (整數)1 (儲存檢查結果:dis.call) 事件結束:dis.return 比較數值 dis.return 等於 dis.return (儲存檢查結果:distance) // << distance = 2500 動作:distance = distance / 100 // << 變為25 動作:人物說話 [player] : 敵人目前距離大約%{distance}%格遠! 結果: 敵人目前距離大約25格遠! 下面為獨立函式: (灰階為已有官方解決的函式,不再適合使用) 4.字元表 (VAR檔) 只是60個字元
函數成員:
範例: 設定變數 a = 10 設定變數 a = char.{a} 最後結果: a = "a" 5.階乘 其實這只是一個遞迴的範例,但弄得很差 函數成員:
例: [動作]factorial.parameter = 3 [動作]執行事件動作:factorial,不做任何檢查 [動作]FK說「%{factorial.return}%」 最終FK會說6 6.環狀AI陣 (請使用檢查 - 人物面向角度/人物 - 儲存人物面向角度) 用26容量於地圖四周快速建立環狀AI陣 用於與鼠標有關的控制 函數成員:
測試時請將導演面版暫時關掉,待AI陣建立完成後才重開 7.插入排序(insertion sort) 超實用的排序演算法,如果原本的資料已有一部分已經排列好,這是最佳的排序演算法 (如果每次只需拿最小或最大的數據,priority queue會是個比較好的方法,因為運算會快很多,但本中心暫時沒有穩定版本) 基礎容量:10 (超帥 呼叫容量:4 回傳由小至大排列的列表 函數成員:
排列完畢後,函式會回傳一個陣列去對應的代碼 例: 這兒有一個完全隨機排列的列表:list.{n}.value,n由0-9,即長度是10 listPrefix就是「list.」,listSuffix就是「.value」 key我們這兒填上0,因為沒有任何元素已經排列 (如果你肯定首n個已經排列好,就可以填n,這樣可以加速排序 length明顯就是10啦 return我們填"rank." 然後呼叫insertionsort 如果 list.{n}.value = {1,10,1,2,1,4,4,8,10,4} 那我們運算得到的便會是 rank.{n} = {0,2,4,3,5,6,9,7,1,8 } ![]() 不就是給幼稚園生玩的連連看嘛XD 如果list.{n}.players是一個人物列表,list.{n}.value是對應人物的分數 list.{rank.{n}}.players就是按人物的分數,由小至大排列好的人物列表 下面下載有應用例子,只有標籤insertionsort是核心功能 7.平方根 (VAR檔) (請用官方提供的數學式) 就是開根號 不用解釋吧 請注意,VAR版本的平方根是沒有句點的! 是sqrt{參數}而不是sqrt.{參數} 下面有多個檔可以選擇,後面的數字表示平方的上限 如sqrt()_10000.var只有運算至sqrt10000 函數成員:
範例: 設定變數 a = 10 設定變數 a = sqrt{a} 最後結果: a = 316 8.三角函式 (VAR檔) (請用官方提供的數學式) 就是sin cos tan 和 arcsin arccos arctan 函數成員:
由於同人陣不支援小數,sin/cos/tan回傳的參數是乘大了100;asin/acos/atan輸入的參數也需要比平時乘大100,但回傳的角度是正常的 degree的值介乎0至360 例: 7.矢量(vector) 矢量(vector)即是流動陣列,可以輕鬆進行「附加」、「插入」、「移除」的資料結構。進行上述動作後,矢量會自動更新其餘資料的位置。 因此你可以用矢量輕鬆模擬到堆疊(stack, first in last out)、隊列(queue, first in first out),配合指標(pointer,即是 { } 的一種用法)更可以造出物件矢量~ 基礎容量:15 呼叫容量: 附加:1至3 插入:1至3 刪除:1至2 沒有回傳數值,效果直接反映於矢量上 函數成員:
\其他敬請期待 或者有建議之函數要納入函式庫請聯絡我們/ |
檔案下載區 >

