/cmds/wiz/_crontab.c - 聖殿英雄傳說 MUD

Rosalind avatar
By Rosalind
at 2018-01-08T21:50

Table of Contents

今天忙死了。總之,新的工作室 day2,今天晚上看底下的東西
能不能 coding 完。

// _crontab.c
// Laechan@Sanc add in 2018/01/08
// * * * * * 要做啥工作 格式大概長這樣
// 目前已知有 a-b 及 */n 這兩種
// n 若給錯導致不能被整除的情況發生時就不會 match
inherit DAEMON;

mixed crontabs;

void create()
{
::create();
seteuid(getuid(this_object()));

crontabs=({});

if(file_exists("/open/cmds/crontab.o"))
restore_object("/open/cmds/crontab");
}

int save_room()
{
save_object("/open/cmds/crontab");
return 1;
}

// 到以上為止的寫法都很固定

// 暫時不開放 a,b,c * * * * 這種給法, 事實上它還能混合
// 例如 a,b,*/10 * * * * 這樣會沒完沒了, 逗號先不開放
int illegel_check(string tmp,string kind,int min,int max)
{
int t,t1,t2;

t=atoi(tmp);
if(tmp=="*") return 0;

else if(sscanf(min,"%d-%d",t1,t2)==2)
{
if(t1<min || t1>max || t2<min || t2>max || t1>=t2)
{
write("crontab -add: 你所給的"+kind+" '"+tmp+"' 格式不符喔.\n");
return 1;
}
return 0;
}
// 週不能有 / 號
else if(kind!="週" && sscanf(tmp,"*/%d",t1)==1)
{
// 要能整除
if(t1<min || t1>max || (t1!=0 && t%t1!=0))
{
write("crontab -add: 你所給的"+kind+" '"+tmp+"' 格式不符喔.\n");
return 1;
}
return 0;
}
else if(sscanf(tmp,"%d",t)==1)
{
if(t<min || t>max)
{
write("crontab -add: 你所給的"+kind+" '"+tmp+"' 格式不符喔.\n");
return 1;
}
return 0;
}

write("crontab -add: 你所給的"+kind+" '"+tmp+"' 格式不符喔.\n");
return 1;
}

int cmd_crontab(string str,object me)
{
string what,files,funs,t1,t2,t3,t4,t5;
int n,n1,n2;
object ob;
mixed tmps=({});

if(!str || str=="")
return notify_fail(@LONG
例行排程(crontab)指令說明:
======================================================
crontab -list 例行排程列表
crontab -add xxx 將 xxx 加進排程中
crontab -del xxx 刪掉 xxx 這個排程

每一個排程都是一行,前五個分別代表 分 時 日 月 週,
每一個都可以是 數字、a-b、或 a/b 或 * 的形式。再之後
所接的東西固定為 什麼物件->呼叫什麼函數

例子
* * * * * /d/event/control->newyear 每分鐘的呼叫
0 * * * * /d/event/control->newyear 每小時整點呼叫
*/10 * * * * /d/event/control->newyear 每10分鐘的呼叫
======================================================
LONG
);

else if(str=="-l" || str=="-list")
return notify_fail(implode(crontabs,"\n")+"\n");

else if(sscanf(str,"-add %s",what)==1)
{
if(sscanf(what,"%s %s %s %s %s %s->%s",
t1,t2,t3,t4,t5,files,funs)!=7)
return notify_fail("格式: 分 時 日 月 週 物件檔->函數名\n"+
" 前五個可給 數字,a-b,a/b 及 * 等.\n");

// 不能有完全一模一樣的
if(member_array(what,crontabs)!=-1)
return notify_fail("crontab -add: 這條例行排程已經有了喔!\n");

if(illegel_check(t1,"分",0,59)>0) return notify_fail("");
if(illegel_check(t2,"時",0,23)>0) return notify_fail("");
if(illegel_check(t3,"日",1,31)>0) return notify_fail("");
if(illegel_check(t4,"月",1,12)>0) return notify_fail("");
// 週不能用 / 號
if(illegel_check(t5,"週",1,7)>0) return notify_fail("");

// 通過上面的判斷就可以加進去
crontabs+=({what});
save_room();
return notify_fail("crontab -add: 這個例行排程已加入.\n");
}
else if(sscanf(str,"-del %s",what)==1 ||
sscanf(str,"-delete %s",what)==1)
{
if(member_array(what,crontabs)==-1)
return notify_fail("crontab -del: 沒有這個例行排程喔.\n");

crontabs-=({what});
save_room();
return notify_fail("crontab -del: 這個例行排程已刪除.\n");
}

return notify_fail("沒有 crontab "+str+" 這個語法喔.\n");
}


大概是上面的感覺吧,明天再放到 sanc 跑看看。


Laechan

--
Tags: 線上

All Comments

Ivy avatar
By Ivy
at 2018-01-11T19:58
修正了一些寫法

95梅沙

Elma avatar
By Elma
at 2018-01-08T18:47
上限價格 18:48丟 肥料底紫 分享給各位 希望板友搶到 - ...

《魔競盃》闇影詩章 台北電玩展實況主

Megan avatar
By Megan
at 2018-01-08T18:40
實況主:M.e魔競 實況連結:https://www.twitch.tv/mentertainment 職業/牌組: 今天的關主是叉燒 《魔競盃》闇影詩章 台北電玩展實況主團體賽 - 第二戰-2018/1/8 19:00 參賽人員: https://i. ...

1/9更新 帕拉丁/龍騎二覺

Olive avatar
By Olive
at 2018-01-08T18:26
1/9的暑假作業 1.掛襪子跟聖誕禮物 (TOA爬塔券/隨機箱) 2.沒有BUFF的光頭之路 3.聖誕/新年禮盒(SD寵) 4.煩死人的12任務(SS轉移石) 5.月例道具(N+) 6.上期鎖頭的白金徽章箱+完美寶珠 ----------------- 1.帕拉丁/龍騎二覺 https://www.dfon ...

提醒1/9號前可補繳牌組

Callum avatar
By Callum
at 2018-01-08T18:21
直接拷貝Email內文囉 忘記標第一階段要用的牌趕快去補喔~ 還有賽程表也出來了喔可以去找一下自己的名字有沒有在上面~ 各位選手您好 牌組繳交已經結束 我們工作人員正在加緊腳步整理牌組中,預計會在比賽當日中午時間開放供各選手查看 以下幾項事項請各位務必注意 1. 依照賽事規章中規定, ...

建議討論

Ophelia avatar
By Ophelia
at 2018-01-08T17:34
※ 引述《eplis (Eplis)》之銘言: : ※ 引述《xyzliu (Kliu)》之銘言: : : 目前dr ep hr吃得太重 : : 所以強力裝備不外乎就這三屬了 : : 所以照明裝備如果可以讓屬性更有用似乎不錯 : : 我舉個例 : : 防禦照明 提供角色con屬性於護甲、閃躲、格擋、招架、hp ...