改成由 MUSHclient 自己去所設定的目錄(這裡是角色檔存放目錄)下尋找
符合命名條件的檔名(本篇格式為"角色小寫ID-三位數.bmp",如:hmml-001.bmp
),並存成一個表,遍歷表的內容以得到可用的檔案總數;接著用隨機數去選擇
檔案,再將選中的圖檔載入掛上。
使用者只要將圖檔丟到設定的目錄下,取個符合格式的檔名就可以了!
由於隨機亂數並非真正的亂數,使用的種子是系統時間,精度只到整數秒,
故刷新換圖的時候,頻率不要低於一秒,否則容易得到相同的結果。
shoimg 更新迷你視窗,shoimg0 隱藏迷你視窗。
--==-==--==-==--==-==--==-==--==-==--==-==--==-==--==-==--==-==--==-==--==-==--
<aliases>
<alias
match="^shoimg(0*)$"
enabled="y"
echo_alias="y"
regexp="y"
send_to="12"
keep_evaluating="y"
sequence="100"
>
<send>
--設定迷你視窗ID到imgchar
imgchar = 'img'..GetAlphaOption("name")
--取得角色名稱,並變換小寫
Char_Name = string.lower(GetAlphaOption("player"))
--取得圖檔目錄下符合條件的檔名列表。
bmpall = utils.readdir (GetInfo(67)..Char_Name.."-*.bmp")
--圖檔數量先設為零
bmpall_n = 0
--如果有找到符合條件的檔案
if bmpall ~= nil then
--計算這個表的檔名數量,這個表是字典型態,所以不能用table.getn()
for k, v in pairs (bmpall) do
bmpall_n = bmpall_n + 1
end --for
end --if
--觀測訊息用,減輕 debug 時洗畫面的情況。
InfoClear()
Info ("圖片數量:"..bmpall_n)
--製造隨機數,改用 MUSHclient 所附的梅森旋轉演算法函數,期望效果會較好。
--隨機種子。將系統時間數值顛倒後取前七位數。
MtSrand (tostring(os.time()):reverse():sub(1, 7))
--隨機得出不大於bmpall_n的三位元長度的數字。
img_choice = string.format("%%03d",math.floor (MtRand () * bmpall_n)+1)
-- └───────────────────┐
--將路徑和檔名組合。 ↓
imgpatch = GetInfo(67)..Char_Name..'-'..bmp_choice..".bmp"
--建立角色圖的迷你視窗
WindowCreate (imgchar, --迷你視窗ID
739, 23, 204, 303, --位置,左,上,寬,高。
6, --因下個參數的設定,無效。
3, --以座標值為位置設定,並置於最底。
ColourNameToRGB("black")) --視窗底色。
--載入圖檔,套上 Note 和 ErrorDesc,方便除錯。
--顯示 執行結果 載入圖檔
Note (ErrorDesc(WindowLoadImage (imgchar, --迷你視窗名稱
"im", --物件ID
imgpatch))) --圖檔目錄
-嵌入圖片
--顯示 執行結果 載入圖檔
Note (ErrorDesc(WindowImageOp (imgchar, --迷你視窗名稱
miniwin.image_fill_rectangle, --矩形
4, 4, 200, 400, --位置,左,上,右,下。
ColourNameToRGB("lime"), --外框線條顏色
miniwin.pen_null, --外框線條常數:無框
1, --外框線條粗細
ColourNameToRGB("cyan"), --底色
"im", --圖檔ID
20, 20))) --圓角矩形才有用。
--用來顯示或隱藏圖片
if tonumber('%1') == 0 then
WindowShow (imgchar, false)
else
WindowShow (imgchar, true)
end --if
</send>
</alias>
</aliases>
--==-==--==-==--==-==--==-==--==-==--==-==--==-==--==-==--==-==--==-==--==-==--
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 220.132.196.45