排程系統 - 聖殿英雄傳說 MUD

Agnes avatar
By Agnes
at 2017-12-31T11:10

Table of Contents

嚴格來說,這東西不是一個系統。

times_check.c 每一心跳時間(兩秒),會呼叫一次 times_check 函數,
然後它會去 keys(times_check) 得到時間序數陣列,接著

mixed tmps2=({});
tmps2=times_check[tmps[i]];

代表 tmps2 存的是一個 mixed 資料,而且它是兩層的陣列,因為同一
個時間序數可能要執行兩件以上的工作,也就是 ({ ({}),({}),..})。
接著

if(catch(ob=find_object_or_load(tmps2[ii][1])))
continue;
call_other(ob,"times_check",tmps2[ii][0],
tmps2[ii][1],
tmps2[ii][2]);

代表 tmps2[ii][1] 存的是欲呼叫目標的檔名。

接著

> call times_check;return_times_check
times_check=
([ "1514689570" : ({
({ "/d/aty/bird/room/boat1",
"/d/aty/bird/room/boat1",
({ "start_plane" })
}),
}),
"xxxxxxxxx" : ({
.
.
}),
])


換言之,一般的排程,只需要 tmps2[ii][1]、times[ii][2] 的資料
就行了,tmps2[ii][0] 的資料可以隨便給或做其它用途。

這時就產生三種寫法,不論哪一種,都會有 /cmds/std/_crontab.c

一、在 /open/cmds/times_check.c 裡面附加 crontab 處理函數

這個理論上可以,不過如果寫錯或呼叫錯,times_check 可能會
有心跳停止的情況發生,我是想盡量避免這種情況。

二、建立 /open/cmds/crontab.c

也就是多載入一個系統物件(但是該物件不必有心跳),然後再讓
/cmds/std/_crontab.c 去呼叫 crontab.c,裡頭就包含了排程所
需的函數,並由 crontab.c 去控制所有經使用者設定的排程。

不過我不太喜歡這樣,我不太想讓 preload 再去多載入一個檔案

三、直接就由 /cmds/std/_crontab.c 去操控一切

這個可以,並建立 /open/cmds/crontab.o 儲存檔。


採三的做法的話,就是由 _crontab.c 去呼叫 times_check 建立呼叫
排程,然後 _crontab.c 裡頭就內建 times_check 函數,類似斜角巷
的華麗與汙痕書店的做法:

// names 這時可用來儲存排程設定者
int times_check(string names,string files,mixed tmps)
{
if(!times_check)
if(catch(times_check=find_object_or_load("/open/cmds/times_check")))
return 1;

.
.

// 對下一次排程做設定
if(sk/10 > 300)
times_check->set_times_check(names,shop_files,({tmps[0],sk}),sk/50);
else
times_check->set_times_check(names,shop_files,({tmps[0],sk}),sk/10);

return 1;
}

上面的意思是說,在 cmd_crontab 裡本來就會針對使用者要設定的
排程,先對 times_check 做了第一次 set_times_check,後續就由
times_check.c 定期呼叫 /cmds/std/_crontab.c 的 times_check
函數來執行相關工作。

下一篇將整理排程有哪些型態種類,並說明如何透過 crontab 指令
去設定這些排程。比較可行的做法是透過 input_to 做引導式設定,
然後最後如 betla 指令那樣可撰寫腳本檔再讓指令做 read。


Laechan

--
Tags: 線上

All Comments

2018 Happy new year

Ursula avatar
By Ursula
at 2017-12-31T10:38
今天是2017最後一天了 這幾天都有四、五位玩家在Mars打拼呢! 超開心 希望新的一年...玩家成長10倍XD 嗯... 也希望... 有新年裝嗎 EP~~~~~~ ----- Sent from JPTT on my iPhone - ...

指定系列禁忌言靈

Carolina Franco avatar
By Carolina Franco
at 2017-12-31T03:43
使用牌組: https://i.imgur.com/e8e99ha.png 巴哈*1 宙斯*2 使用區域:(Be/D/C/B/A/AA/M/Free/2P) M https://i.imgur.com/S7SQ3YB.png https://i.imgur.com/UQ3HqnF.png m區低分12戰 ...

回合結束 效果觸發順序

Barb Cronin avatar
By Barb Cronin
at 2017-12-31T03:24
情報來源:對戰實測 情報懶人包:主戰者效果結算先於場上卡牌效果 情報詳細內容: /了 觸發 效果 結算 回合 主戰者 柯羅 等詞都沒找到相關文章 新虹卡 柯羅諾斯 效果:給予雙方主戰者「自己的回合結束時,抽取與『自己戰場上的從者中最高攻擊力值 』等量的卡片」 回合結束場上如果有4攻、3 ...

【01/01(一)伺服器停機維護公告】

Eartha avatar
By Eartha
at 2017-12-31T00:11
因最強之戰的新賽季在2018/01/01(一)開始轉換,所以2018/01/01(一) 02:00~04:00將進 行伺服器維護調整,期間無法登入伺服器,造成不便,敬請見諒。 感謝各位玩家的支持與鼓勵 《全民打棒球2 Online》營運團隊敬上 http://bb.wasabii.com.tw/no ...

【跨年卡片賀禮】

Queena avatar
By Queena
at 2017-12-31T00:10
【跨年卡片賀禮】 活動時間:2017/12/31(日) 00:00 ~ 2017/12/31(日) 23:59 活動辦法:活動時間內在遊戲中自購滿指定金額可獲得對應獎勵。 獎勵項目 條件 獎勵內容 1 累積消費滿1,000元(含)以上 紫卡交換卷(EP紫卡)*1 2 累積消費滿1,500元(含 ...