fluffos v2017驱动遇到的初学新手问题实录

第一步、按照fluffos v2017的步骤生成编译的driver文件(ubuntu1804环境) 因为v2019设计到转码utf8和更麻烦的需要修改函数适配问题(初学其实根本不知道这些函数在哪里,当然程序猿除外,此文仅供没有程序基础,又想玩一下单机的小白朋友参考),所以跳过v2019,不然无数错误,问都不知道问谁,就算大佬不吝指教,也完全听不懂,因为大佬的回答,需要有基础的,小白略过就好了。不过幸好有2017可以先对兼容老版本的lib,还算是福音的,具体2017跟2019什么区别,本人也不清楚,姑且认为,2019是尝鲜版比较先进吧。2017比较保守兼容性更好。

第二步、cp driver到lib根目录,同时修改config.xx文件的配置对应lib和驱动位置。如果驱动后没报错,就可以玩了,证明玩的这个lib兼容性好,或者说开发的大佬把可能遇到的问题,已经帮解决了。

第三步、绝大部分lib,都会遇到报错信息,类似:

/adm/simul_efun/path.c line 51: Warning: Unused local variable 't2' before the end of line

/adm/simul_efun/path.c line 51: Warning: Unused local variable 't3' before the end of line

/adm/simul_efun/path.c line 51: Warning: Unused local variable 't4' before the end of line

/adm/simul_efun/mkmapping.c line 24: Warning: Unused local variable 'index' before the end of line

/adm/simul_efun/mkmapping.c line 55: Warning: Unused local variable 'index' before the end of line

/adm/simul_efun/message.c line 170: Unknown efun: tail before ( file );

/adm/simul_efun/message.c line 170: Warning: Expression has no side effects, and the value is unused before the end of line

No error handler for error: *Error in loading object '/adm/single/simul_efun'

program: (none), object: (none), file: (none)

The simul_efun (/adm/single/simul_efun) and master (/adm/single/master) objects must be loadable.

Please check log files for exact error.

如上这样的错误提示,于是小白就会很懵圈,不过,fluffos的开发大佬其实知道这个问题并且有文章说明解决的,不过可能因为这个问题对应编程专业的程序猿来说,可能是很初级的问题,大佬并没有详细的实例详细解决,小白至此应该就没办法了。不过首先认真学习https://bbs.mud.ren/threads/85,还是很有启发的,不过难点是提到的三个关键点:修改static变量为nosave变量|修改static函数为protected函数|删除#pragma 相关预处理指令(不删除可以运行,但是日志会有warning),虽然提出了,可是并没有具体可能在哪里,并且修改后是什么格式和样子。很晦涩不易理解,于是开始了漫长的请教和解惑的过程......

第四步、首先flluffos的目录下找到options.h或者local_options.h这两个应该一个意思,如果只有一个那就复制一份改名为另一个,这样两个文件都有,内容一样,可能程序读取的时候,万一用到不会报错。找到后将#define SENSIBLE_MODIFIERS改为#undef SENSIBLE_MODIFIERS,这样再去试一下driver config如果能启动,那就可以了,如果不行,就需要继续探索,上文提到的三个关键点到底是什么并且在哪里找到后如何改了。因为本人也困惑在这里,还在学习中,如果明白了,再来完善。

补充1:如果报/adm/simul_efun/message.c文件170行tail错误,tail.c下载:https://github.com/fluffos/fluffos/blob/master/compat/simuls/tail.c 下载复制到message文件目录下,message文件170行 把 efun::tail 改成 tail。再驱动 另外,驱动成功之前错误log再屏幕上,驱动成功之后错误log在文件里,具体的位置知道了再发。

补充2:一个兼容mudos办法,目的让fluffos能用mudos驱动,而不是把mudos改成fluffos模式。 办法如下:在globals.h文件加入

#ifndef __SENSIBLE_MODIFIERS__

#define nosave static

#define protected static

#endif

如果看到了这里,证明也是喜欢玩玩单机体验一下的朋友,基础虽然没有,但是不妨碍咱们前进的梦想,加油朋友们

补充3:今天按照按照大佬们的指点,学会了关键三点的修改,首先需要用到一个关键的工具,就是文本替换专家,这个用来搜索,static这个和#pragma,查找.c和.h文件里面的变量和函数,相应修改成对应的,文本替换专家v2.6绿色版,这个百度一下就可以,这样极大提高效率和准确度。就不再需要第三第四步操作。基本老代码就可以用v2017驱动起来了。至于提到的v2019为什么不适用,因为即使成功转码,也涉及端口分配gbk,这个小白根本不会操作,也不会编写代码能适配到zmud之类的终端使用,这个暂时还没明白,将来懂了,再来补充。 经过多日的修复和学习,已经驱动了sznew也就是神州lib但是代码本身存在很多问题,还是很多报错的。懂得大佬能结合群内共享代码,给出修复办法和意见,就更好了,也不胜感谢,先到这里吧,今天为止,剩余的错误也记录下来,每天进展,再按天缩减log: 3月5日屏显问题log如下(因为论坛没有附件功能,就这样贴出来,自己看吧):

第一段代码找错:
// 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);
    else home = LOG_DIR;

    if(wizardp(this_player(1))&&(strsrch(message,"Warning:")==-1))
        efun::write("编译时段错误:" + message+"\n");

}
第二段代码找错:
// 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");

}
第三段代码找错:
// 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 );
}
第四段代码找错:
void create()
{
        seteuid(ROOT_UID);
        set("channel_id", "故事精灵");
        CHANNEL_D->do_channel( this_object(), "alarm", "故事系统已经启动。\n");

        history = allocate_mapping(sizeof(story_name));
        ready_to_start();
}
第五段代码找错:
void create()
{
    string *wizlist, wiz_name, wiz_level, wiz_site, wiz_renwu;
    int i;

    seteuid(ROOT_UID);

    if(!restore())
    {
        wiz_status = allocate_mapping(10000);
        wiz_sites = allocate_mapping(10000);
        wiz_renwus = allocate_mapping(10000);
        wiz_status["npc"] = "(admin)";
        wiz_sites["npc"] = ".*";
        wiz_renwus["npc"] = "none";
    }

}
  • 错在哪里
  • /adm/daemons/securityd.c line 73: Warning: Unused local variable 'wizlist' before the end of line
    第六段代码奇怪的错

    file

  • 12行看不出来有错啊:呼叫来自:/adm/single/simul_efun.c 的 wizardp() 第 12 行,物件: /adm/single/simul_efun
京ICP备13031296号-4