sos.c

来自「C实现的MUD,对大家基本入门网络游戏很有帮助!」· C语言 代码 · 共 282 行

C
282
字号
/* modify by Sunyc@kync.tomud.com 5555    增加默认不显示all sos,只显示no solve的*//* modify by Sunyc@kync   源文件并没有给sos提供解决留言功能   so,rewrite it at 2002.8.11*/// This Program is for command "sos"// Create by keepon at 1999.4.20#define SOS_DIR       "/data/sos/"#define SOS_FILENAME  "sos"#include <ansi.h>inherit F_CLEAN_UP;inherit F_SAVE;mapping *notes;string query_save_file(){    return SOS_DIR + SOS_FILENAME ;}// This is the callback function to process the string returned from the// editor defined in F_EDIT of player object.void done_post(object me, mapping note, string text){    int i; //line 20    note["msg"] = text;    i = sizeof(notes);    for( ; i > 0; i-- )  if( notes[i-1]["author"] == me->query("id") ) break;    if( !pointerp(notes) || i > 0 ) if(!sizeof(notes)) notes = ({ note }); else {     notes[i-1]["title"] = note["title"];     notes[i-1]["author"] = note["author"];     notes[i-1]["msg"] = note["msg"];     notes[i-1]["time"] = note["time"];     notes[i-1]["solve"] = "";     notes[i-1]["solve_id"] = ""; }    else notes += ({ note });    tell_object(me, HIM "求救完毕。你的信息已经被加到巫师通知队列里。\n");    tell_object(me, HIM "巫师正在处理其他玩家,请等待。\n");    tell_object(me, HIM "你可以先忙你自己的事情,过一段时间后可以用sos read查看是否被解决。\n" NOR);    save();    return;}void list_bug(object me){    int i;    string str,s;    if (sizeof(notes)<1) { write("没人发出 sos 求救信号。\n"); return;    }     s = sprintf("玩家已经发出未解决的 sos 列表如下,如要察看总表请sos list:\n"      "----------------------------------------------------------------------\n");    for( i = 0; i<sizeof(notes); i++){ if(notes[i]["solve_id"]=="") {     str = sprintf("%2d) %-50s %10s %s \n",       i+1, notes[i]["title"], notes[i]["solve_id"]==""?"No solved":"By "+notes[i]["solve_id"],       ctime(notes[i]["time"])[0..9] );     s = s + str; }    }    me->start_more(s);                }void list_bug_all(object me){    int i;    string str,s;    if (sizeof(notes)<1) { write("没人发出 sos 求救信号。\n"); return;    }     s = sprintf("玩家已经发出的 sos 列表如下:\n"      "----------------------------------------------------------------------\n");    for( i = 0; i<sizeof(notes); i++){ str = sprintf("%d) %-50s %10s %s \n",   i+1, notes[i]["title"], notes[i]["solve_id"]==""?"No solved":"By "+notes[i]["solve_id"],   ctime(notes[i]["time"])[0..9] ); s = s + str;    }    me->start_more(s);                }void do_read(object me, int i) {    string s;    if( i > sizeof(notes) || i < 1) { write("无此编号!!\n"); return;    }    s = sprintf("%d) %-50s %10s %s\n"      "----------------------------------------------------------------------\n"      "%s\n"      "处理意见:\n"      "%s\n",      i, notes[i-1]["author"], notes[i-1]["solve_id"]==""?"No solved":"By "+notes[i-1]["solve_id"],      ctime(notes[i-1]["time"])[0..9], notes[i-1]["msg"],notes[i-1]["solve"] );    me->start_more(s);}int search_id(string id){    int i;    if( !(i = sizeof(notes)) ) return 0;    for( ; i > 0; i-- )  if( notes[i-1]["author"] == id ) break;    return i;}void done_solve(object me, int i, string text){    notes[i-1]["solve"] = text;    notes[i-1]["solve_id"] = me->query("id");    save();    write("该 sos 信息已标志为解决。\n");    return;}int do_solve(object me, int i){    if( i > sizeof(notes) || i < 1) { write("无此编号!!\n"); return 0;    }     if ( notes[i-1]["solve_id"]!="" ) { write(notes[i-1]["solve_id"]+"已经标志啦!\n"); return 1;    }    write("请输入你的处理意见:\n");    me->edit( (: done_solve, me,i :) );    return 1;}int main(object me, string arg){    mapping note;    object where;    string s, str,arg1; //line 40    int i,arg2;    //    if (file_size(SOS_DIR + SOS_FILENAME) == -1) {    //      notes = ({ });    //    save();    //}    restore();    if (!arg) { if(!wiz_level(me)){     tell_object(me, HIM "你正在" HIY MUD_NAME HIM "里辛苦地挖着泥巴,突然发现一只大个的臭虫向你爬来。\n" NOR);     tell_object(me, HIM "你赶紧向巫师们发出紧急求救信号:SOS!!!\n" NOR);     where = environment(me);     if (!where)   s=sprintf("%s(%s)求救",    (string)me->name(),    (string)me->query("id"));     else  s=sprintf("%s(%s)在%s(%s)求救",    (string)me->name(),    (string)me->query("id"),    (string)where->query("short"),    (string)file_name(where));     note = allocate_mapping(6);     note["title"] = s;     note["author"] = me->query("id");      note["time"] = time();     note["solve"] = "";     note["solve_id"] = "";     me->edit( (: done_post, me, note :) ); } else {     list_bug(me); } return 1;    }     if( sscanf(arg, "%s %s", s, arg1) == 2 ) { if( !wiz_level(me) ) return notify_fail("格式不对,具体使用方法请参阅 help sos \n"); if ( s != "solve" ) return notify_fail("格式不对,具体使用方法请参阅 help sos \n"); /* By Sunyc@kync,we don't need to solve all in one time */ /*  if ( arg1 =="all" ) {     if( !(i = sizeof(notes)) ) return notify_fail("没人发出sos求救信号。\n");     for( ; i > 0; i-- )          notes[i-1]["solve_id"] = me->query("id");     write("所有的 sos 信息已经标志为解决了。\n");     return 1;  } */ i = search_id(arg1); if( i > 0 ) {      do_solve( me, i );     return 1; }    }    if( sscanf(arg, "%s %d", s, arg2) == 2 ) { if( !wiz_level(me) ) return notify_fail("格式不对,具体使用方法请参阅 help sos \n"); if ( s != "solve" ) return notify_fail("格式不对,具体使用方法请参阅 help sos \n"); do_solve( me, arg2 );  return 1;    }    if ( sscanf(arg, "%s", s) == 1 )  switch(arg){    case "read":        if( !(i = sizeof(notes)) )     return notify_fail("还没有人做过 sos 呼叫!\n"); else {     i = search_id( me->query("id") );     do_read(me,i); } break;    case "list": if( !wiz_level(me) ) return notify_fail("格式不对,具体使用方法请参阅 help sos \n"); list_bug_all(me); break;    case "pack": if( !wiz_level(me) ) return notify_fail("格式不对,具体使用方法请参阅 help sos \n"); if( !(i = sizeof(notes)) ) return notify_fail("没人发出 sos 求救信号。\n"); for( ; i > 0; i-- )      if( "" != notes[i-1]["solve_id"] ) {  printf("%s的 sos 求救已被删除!\n", notes[i-1]["author"]);  if( sizeof(notes) == 1 ) notes = ({});  else if(i==1) notes = notes[1..sizeof(notes)-1];  else if( i == sizeof(notes) ) notes = notes[0..sizeof(notes)-2];  else notes = notes = notes[0..i-2] + notes[i..sizeof(notes)-1];     } save(); break;    case "solve": if( !wiz_level(me) ) return notify_fail("格式不对,具体使用方法请参阅 help sos \n"); return notify_fail("格式: sos solve <编号或玩家id>\n"); break;    default: if( !wiz_level(me) ) return notify_fail("格式不对,具体使用方法请参阅 help sos \n"); if( sscanf(arg, "%d", i) == 1 )     do_read( me, i ); else if( sscanf( arg, "%s", str ) == 1 ) {     i = search_id(str);     if( i == 0 ) return notify_fail("无此玩家发出的 sos 信息!\n");     do_read( me, i ); }    }    else return notify_fail("格式不对,具体使用方法请参阅 help sos \n");    return 1;}int help(object me){    if (!wiz_level(me) ) write(@HELP指令格式 :            sos           sos read这个指令可以在系统出现bug时来向巫师求助。输入该命令后,系统将提示你输入对 bug 的描述。玩家在这里应该将 bug出现的情况和系统的提示尽量详细地进行说明,以便巫师修改该 bug。每个玩家只能贴一条 sos,新的 sos 将覆盖以前的输入。可以用 sos read 阅读自己贴出的 sos。HELP );    else  write(@HELP指令格式 :            sos           sos <号码或玩家id>           sos list         sos pack           sos solve <号码或玩家id>这个指令可以辅助巫师处理玩家提出的 bug 列表。sos 和 sos list 的功能一样,都是将所有的 bug 信息进行列表。带参数的 sos 命令,根据参数的不同,将显示对应号码或对应玩家的 bug 的详细信息。sos solve用来标志某个bug已经被解决了。sos pack 将删除所有已经标志为解决了的 bug。HELP );    return 1;}

⌨️ 快捷键说明

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