⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 autorebootd.c

📁 C实现的MUD,对大家基本入门网络游戏很有帮助!
💻 C
字号:
// Deamon:/adm/daemons/autorebootd.c
/* 这个是由jjgod为模拟华附大幅度改写原waiwai的自动重启系统,
    自动重启看起来还是必要的,当巫师平时不在线的时候,可以通过
    重启恢复原来的状态。原先waiwai的那个系统太过繁琐,15分钟
    倒计时居然要写15个函数!假如200分钟倒计时岂不是要写200个
    函数?真是好笑。我现在改为只需要2个函数就够了,无论多长的
    倒计时都可以自己设置。*/

#include <ansi.h>
#include <net/daemons.h>

inherit F_DBASE;
private void count_time(int min);
void auto_reboot_start();
void auto_reboot_done();
void create()
{
//	object *ob = users();本来想实现有天神在线时就不启动此程序来占用资源,当游戏中一个天神都没有的时候,
//	int i;		 重启工作就交由此程序托管的,但越做越麻烦,还是算了,有兴趣的用这里的代码自己做吧。
	seteuid(ROOT_UID);
	set("channel_id", "自动定时启动精灵");
/*	for(i=0; i<sizeof(ob); i++){
		if (wizhood(ob[i])=="(admin)")
		{
		tell_object(ob[i],ob[i]->name()+",因为作为天神的你还在线,所以自动重启精灵不被加载!\n");
		log_file("AUTOREBOOT", sprintf("autoreboot启动失败!\n"));
		return;
		}
		else {*/
		CHANNEL_D->do_channel( this_object(), "sys", "自动定时重启精灵已经启动。");
		call_out("auto_reboot_start", 86400+random(500));// 2天自动重启
//		call_out("auto_reboot_start", 2);// 2天自动重启
/*		call_out("auto_reboot_start",20);
		log_file("AUTOREBOOT", sprintf("autoreboot启动成功!\n"));
		return;
		}
	}*/
}

void auto_reboot_start()
{
	remove_call_out("auto_reboot_start");
	message("system",RED"【重启精灵】"BLU"现在开始海洋II自动重启倒计时,还有5分钟!\n" NOR,users());
	call_out("count_time",60,5); // "15"是指整个倒计时时间15分钟,可以自己修改
}

private void count_time(int min)
{
	min--;
	if( min ) {
		message("system",RED"【重启精灵】"BLU"各位玩家,离海洋II自动重启还有" + chinese_number(min) +"分钟的时间!\n"NOR,users() );
		call_out("count_time", 60, min); // 告诉大家还有几分钟时间
	} else {
		message("system",RED"【重启精灵】"BLU"各位玩家,海洋II现在自动重启!!!\n"NOR,users() );
		call_out("auto_reboot_done", 3); // 到点啦
	}
}

void auto_reboot_done()
{
	int i,j;
	object *ob, link_ob;
	string id;
	j=0;
	seteuid(getuid());
	set("channel_id", "存盘精灵"); // 这段存盘的代码看上去就不大顺眼,肯定写的不太好,但太晚了我就不改它了
	ob=users();
	i=sizeof(ob);
	for( i=0;i<sizeof(ob);i++) {
	id = (string) ob[i]->query("id");
	if (!id) continue;
	if(!environment(ob[i]) )        continue;
	if( !objectp(link_ob = ob[i]->query_temp("link_ob")) ) continue;
	if( (int)link_ob->save() && (int)ob[i]->save() ) j = 1;
	else CHANNEL_D->do_channel( this_object(), "sys", ob[i]->query("name")+"档案自动存盘失败。");
	}
	CHANNEL_D->do_channel( this_object(), "sys", "档案自动存盘成功。");
	shutdown(0);
	return;
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -