架单机mud求助
mud吧
全部回复
仅看楼主
level 10
gogogo_goal 楼主
下载的东方故事2(说是linux适用) 用的是小熊里面的mudos v22pre11 fow win
连接时 只能到 connect…… 就断线,mudos记录信息如下
Loading preloaded files ...
错误讯息被拦截:
执行时段错误:*Error in loading object '/feature/dbase'
程式:adm/obj/master.c 第 98 行
物件: /adm/obj/master
呼叫来自:adm/obj/master.c 的 preload() 第 98 行,物件: adm/obj/master
呼叫来自:adm/obj/master.c 的 CATCH() 第 98 行,物件: adm/obj/master
Initializations complete.
Accepting connections on port 6666.
错误讯息被拦截:
执行时段错误:*Error in loading object '/feature/dbase'
程式:adm/obj/master.c 第 13 行
物件: /adm/obj/master
呼叫来自:adm/obj/master.c 的 connect() 第 13 行,物件: adm/obj/master
呼叫来自:adm/obj/master.c 的 CATCH() 第 13 行,物件: adm/obj/master
Connection from 127.0.0.1 aborted.

2011年10月14日 06点10分 1
level 10
这个os不一定适用吧。简单的看是dbase.c 编译失败了,但是没说在哪里
2011年10月14日 06点10分 2
level 10
gogogo_goal 楼主
哦 谢谢
我下载的是 linux下的 es2源码 是不是要用mudos for linux来运行?
2011年10月14日 06点10分 3
level 15
不一定的。都可以,但是肯定有些小地方你要自己修改下的。
2011年10月14日 07点10分 4
level 10
gogogo_goal 楼主
不懂C 没辄啊 有神人指点么?
<---西游记: MudOs v22pre11 (by wwj,Jan 1 1999) startup on Microsoft Windows NT at Fri Oct 14 16:20:34 2011
using config file: C:\Download\南京河海大学的es2和xkx《校内_1.01版》\config.cfg
Can't find "mudos", ignoring old binaries.
Try invoking the driver using the full pathname.
Connected to address server on localhost port 3990
]simul_efun loaded successfully.
Loading preloaded files ...
错误讯息被拦截:
执行时段错误:*Error in loading object '/feature/dbase'
程式:adm/obj/master.c 第 98 行
物件: /adm/obj/master
呼叫来自:adm/obj/master.c 的 preload() 第 98 行,物件: adm/obj/master
呼叫来自:adm/obj/master.c 的 CATCH() 第 98 行,物件: adm/obj/master
Initializations complete.
Accepting connections on port 6666.

2011年10月14日 08点10分 5
level 15
dbase.c发来瞧瞧?
2011年10月14日 09点10分 6
level 10
gogogo_goal 楼主
// cracked by vikee 2/09/2002 [email protected]
// dbase.c
//#include <dbase.h>
inherit F_TREEMAP;
mapping dbase;
static mapping tmp_dbase;
// The default_ob provides the default values of the dbase. It is set to
// be master copy of an object.
static mixed default_ob;
mixed query_default_object() { return default_ob; }
void set_default_object(mixed ob)
{
// if( geteuid(previous_object()) != ROOT_UID )
// error("dbase: Only this_object() or object with root euid can set default_ob.\n");
if( !geteuid() ) seteuid(getuid());
default_ob = ob;
ob->add("no_clean_up", 1);
}
mixed set(string prop, mixed data)
{
if( !mapp(dbase) ) dbase = ([]);
if( strsrch(prop, '/')!=-1 )
return _set( dbase, explode(prop, "/"), data );
return dbase[prop] = data;
}
varargs mixed query(string prop, int raw)
{
mixed data;
if( !mapp(dbase) ) return 0;
if( undefinedp(dbase[prop]) && (strsrch(prop, '/')!=-1) )
data = _query(dbase, explode(prop, "/"));
else
data = dbase[prop];
if( undefinedp(data) && default_ob )
data = default_ob->query(prop, 1);
if( raw ) return data;
return evaluate( data, this_object() );
}
int delete(string prop)
{
if( !mapp(dbase) ) return 0;
if( strsrch(prop, '/')!=-1 )
return _delete(dbase, explode(prop, "/"));
else {
map_delete(dbase, prop);
return 1;
}
}
mixed add(string prop, mixed data)
{
mixed old;
if( !mapp(dbase) || !(old = query(prop, 1)) )
return set(prop, data);
if( functionp(old) )
error("dbase: add() - called on a function type property.\n");
return set(prop, old + data);
}
mapping query_entire_dbase()
{
// if( (previous_object() != this_object())
// && (geteuid(previous_object()) != ROOT_UID) )
// error("dbase: query_entire_dbase() - must has root euid or be this_object().\n");
return dbase;
}
mixed set_temp(string prop, mixed data)
{
if( !mapp(tmp_dbase) ) tmp_dbase = ([]);
if( strsrch(prop, '/')!=-1 )
return _set( tmp_dbase, explode(prop, "/"), data );
return tmp_dbase[prop] = data;
}
varargs mixed query_temp(string prop, int raw)
{
mixed data;
if( !mapp(tmp_dbase) ) return 0;
if( strsrch(prop, '/')!=-1 )
data = _query(tmp_dbase, explode(prop, "/"));
else
data = tmp_dbase[prop];
if( functionp(data) && !raw )
return (*data)( this_object() );
else
return data;
}
int delete_temp(string prop)
{
if( !mapp(tmp_dbase) ) return 0;
if( strsrch(prop, '/')!=-1 )
return _delete(tmp_dbase, explode(prop, "/"));
else {
map_delete(tmp_dbase, prop);
return 1;
}
}
mixed add_temp(string prop, mixed data)
{
mixed old;
if( !mapp(tmp_dbase) || !(old = query_temp(prop, 1)) )
return set_temp(prop, data);
if( functionp(old) )
error("dbase: add_temp() - called on a function type property.\n");
return set_temp(prop, old + data);
}
mapping query_entire_temp_dbase()
{
// if( (previous_object() != this_object())
// && (geteuid(previous_object()) != ROOT_UID) )
// error("dbase: query_entire_temp_dbase() - must has root euid or be this_object().\n");
return tmp_dbase;
}

2011年10月14日 11点10分 7
level 10
gogogo_goal 楼主
原来带的是这个,有问题的是这个(刚刚那个是我考的别的里面的)
// dbase.c
//#include <dbase.h>
inherit F_TREEMAP;
mapping dbase;
static mapping tmp_dbase;
// The default_ob provides the default values of the dbase. It is set to
// be master copy of an object.
static mixed default_ob;
mixed query_default_object() { return default_ob; }
void set_default_object(mixed ob)
{
// if( geteuid(previous_object()) != ROOT_UID )
// error("dbase: Only this_object() or object with root euid can set default_ob.\n");
if( !geteuid() ) seteuid(getuid());
default_ob = ob;
ob->add("no_clean_up", 1);
}
mixed set(string prop, mixed data)
{
if( !mapp(dbase) ) dbase = ([]);
if( strsrch(prop, '/')!=-1 )
return _set( dbase, explode(prop, "/"), data );
return dbase[prop] = data;
}
varargs mixed query(string prop, int raw)
{
mixed data;
if( !mapp(dbase) ) return 0;
if( undefinedp(dbase[prop]) && (strsrch(prop, '/')!=-1) )
data = _query(dbase, explode(prop, "/"));
else
data = dbase[prop];
if( undefinedp(data) && default_ob )
data = default_ob->query(prop, 1);
if( raw ) return data;
return evaluate( data, this_object() );
}
int delete(string prop)
{
if( !mapp(dbase) ) return 0;
if( strsrch(prop, '/')!=-1 )
return _delete(dbase, explode(prop, "/"));
else {
map_delete(dbase, prop);
return 1;
}
}
mixed add(string prop, mixed data)
{
mixed old;
if( !mapp(dbase) || !(old = query(prop, 1)) )
return set(prop, data);
if( functionp(old) )
error("dbase: add() - called on a function type property.\n");
return set(prop, old + data);
}
mapping query_entire_dbase()
{
// if( (previous_object() != this_object())
// && (geteuid(previous_object()) != ROOT_UID) )
// error("dbase: query_entire_dbase() - must has root euid or be this_object().\n");
return dbase;
}
mixed set_temp(string prop, mixed data)
{
if( !mapp(tmp_dbase) ) tmp_dbase = ([]);
if( strsrch(prop, '/')!=-1 )
return _set( tmp_dbase, explode(prop, "/"), data );
return tmp_dbase[prop] = data;
}
varargs mixed query_temp(string prop, int raw)
{
mixed data;
if( !mapp(tmp_dbase) ) return 0;
if( strsrch(prop, '/')!=-1 )
data = _query(tmp_dbase, explode(prop, "/"));
else
data = tmp_dbase[prop];
if( functionp(data) && !raw )
return (*data)( this_object() );
else
return data;
}
int delete_temp(string prop)
{
if( !mapp(tmp_dbase) ) return 0;
if( strsrch(prop, '/')!=-1 )
return _delete(tmp_dbase, explode(prop, "/"));
else {
map_delete(tmp_dbase, prop);
return 1;
}
}
mixed add_temp(string prop, mixed data)
{
mixed old;
if( !mapp(tmp_dbase) || !(old = query_temp(prop, 1)) )
return set_temp(prop, data);
if( functionp(old) )
error("dbase: add_temp() - called on a function type property.\n");
return set_temp(prop, old + data);
}
mapping query_entire_temp_dbase()
{
// if( (previous_object() != this_object())
// && (geteuid(previous_object()) != ROOT_UID) )
// error("dbase: query_entire_temp_dbase() - must has root euid or be this_object().\n");
return tmp_dbase;
}

2011年10月14日 11点10分 8
level 10
gogogo_goal 楼主
这个是那个 master 文件
//
// master.c
//
// for ES II mudlib
// original from Lil
// rewritten by Annihilator (11/07/94)
object connect()
{
object login_ob;
mixed err;
err = catch(login_ob = new(LOGIN_OB));
if (err) {
write("现在有人正在修改使用者连线部份的程式,请待会再来。\n");
write(err);
destruct(this_object());
}
return login_ob;
}
// compile_object: This is used for loading MudOS "virtual" objects.
// It should return the object the mudlib wishes to associate with the
// filename named by 'file'. It should return 0 if no object is to be
// associated.
mixed compile_object(string file)
{
object daemon;
if( daemon = find_object(VIRTUAL_D) )
return daemon->compile_object(file);
else
return 0;
}
// This is called when there is a driver segmentation fault or a bus error,
// etc. As it's static it can't be called by anything but the driver (and
// master).
static void crash(string error, object command_giver, object current_object)
{
efun::shout("系统核心发出一声惨叫:哇—哩—咧—\n");
efun::shout("系统核心告诉你:要当机了,自己保重吧!\n");
log_file("static/CRASHES", MUD_NAME + " crashed on: " + ctime(time()) +
", error: " + error + "\n");
if (command_giver)
log_file("static/CRASHES",
sprintf( "this_player: %O\n", command_giver));
if (current_object)
log_file("static/CRASHES",
sprintf( "this_object: %O\n", current_object));
}
// Function name: update_file
// Description: reads in a file, ignoring lines that begin with '#'
// Arguements: file: a string that shows what file to read in.
// Return: Array of nonblank lines that don't begin with '#'
// Note: must be declared static (else a security hole)
static string *update_file(string file)
{
string *list;
string str;
int i;
str = read_file(file);
if (!str)
return ({});
list = explode(str, "\n");
for (i = 0; i < sizeof(list); i++) {
if (list[i][0] == '#') {
list[i] = 0;
}
}
return list;
}
// Function name: epilog
// Return: List of files to preload
string *epilog(int load_empty)
{
string *items;
items = update_file(CONFIG_DIR + "preload");
return items;
}
// preload an object
void preload(string file)
{
int t1;
string err;
if (file_size(file + ".c") == -1)
return;
t1 = time();
write("Preloading : " + file );
err = catch(call_other(file, "??"));
if (err)
write(" -> Error " + err + " when loading " + file + "\n");
else
write(".... Done.\n");
}
// Write an error message into a log file. The error occured in the object
// 'file', giving the error message 'message'.
void log_error(string file, string message)
{
string name, home;
if( find_object(SIMUL_EFUN_OB) )
name = file_owner(file);
if (name) home = user_path(name);

2011年10月14日 11点10分 9
level 10
gogogo_goal 楼主
string error_handler( mapping error, int caught )
{
if (this_player(1)) {
this_player(1)->set_temp("error", error);
tell_object(this_player(1), standard_trace(error, caught));
}
// whatever we return goes to the debug.log
return standard_trace(error, caught);
}
// valid_shadow: controls whether an object may be shadowed or not
int valid_shadow( object ob ) { return 0; }
// valid_override: controls which simul_efuns may be overridden with
// efun:: prefix and which may not. This function is only called at
// object compile-time
int valid_override( string file, string name )
{
// simul_efun can override any simul_efun by Annihilator
if (file == SIMUL_EFUN_OB || file==MASTER_OB)
return 1;
// Must use the move() defined in F_MOVE.
if(((name == "move_object") || (name == "destruct")) && (file != F_MOVE))
return 0;
// may also wish to protect destruct, shutdown, snoop, and exec.
return 1;
}
// valid_seteuid: determines whether an object ob can become euid str
int valid_seteuid( object ob, string str )
{
return (int)SECURITY_D->valid_seteuid( ob, str );
}
// valid_socket: controls access to socket efunctions
int valid_socket( object eff_user, string fun, mixed *info )
{
return 1;
}
// valid_asm: controls whether or not an LPC->C compiled object can use
// asm { }
int valid_asm( string file )
{
return 1;
}
// valid_compile_to_c: controls whether or not an object may be compiled
// via LPC->C
int valid_compile_to_c( string file )
{
return 1;
}
// valid_hide: controls the use of the set_hide() efun, to hide objects or
// see hidden objects
int valid_hide( object who )
{
return 1;
}
// valid_object: controls whether an object loaded by the driver should
// exist
int valid_object( object ob )
{
return (!clonep(ob)) || inherits(F_MOVE, ob);
}
// valid_link: controls use of the link() efun for creating hard links
// between paths
int valid_link( string original, string reference )
{
return 0;
}
// valid_save_binary: controls whether an object can save a binary
// image of itself to the specified "save binaries directory"
// (see config file)
int valid_save_binary( string filename )
{
return 1;
}
// valid_write: write privileges; called with the file name, the object
// initiating the call, and the function by which they called it.
int valid_write( string file, mixed user, string func )
{
object ob;
if( ob = find_object(SECURITY_D) )
return (int)SECURITY_D->valid_write(file, user, func);
return 0;
}
// valid_read: read privileges; called exactly the same as valid_write()
int valid_read( string file, mixed user, string func )
{
return 1;
}
string object_name(object ob)
{
if( ob ) return ob->name();
}
void create()
{
write("master: loaded successfully.\n");
}
int valid_bind(object binder, object old_owner, object new_owner)
{
if( userp(new_owner) ) return 0;
if( geteuid(binder)==ROOT_UID ) return 1;
if( clonep(new_owner) ) return 1;
return 0;
}

2011年10月14日 11点10分 11
level 10
gogogo_goal 楼主
求助~~~~~~~~~~~~~~~
2011年10月17日 05点10分 12
level 15
这么看太麻烦了。。。
你把lib发给我吧,我尝试改好给你。
2011年10月17日 09点10分 13
level 10
gogogo_goal 楼主
好啊 谢谢~~~~~~~
2011年10月17日 09点10分 14
level 1
是/feature/treemap.c 文件有问题 ,把原来文件中的 private 删掉就可以了。一共三处。
2017年11月24日 08点11分 15
1