限制相似的中文姓名
2007/5/11 21:31:51

// named.c 保存所有玩家的名字
#include 
#pragma optimize
#pragma save_binary
inherit F_SAVE;
inherit F_DBASE;
static string *family_name = ({ "东方", "独孤", "慕容", "欧阳", "司马",
                                "西门", "尉迟", "长孙", "诸葛" });
void create()
{
        seteuid(getuid());
        restore();
}
void remove()
{
        save();
}
void mud_shutdown()
{
        save();
}
// the name PATH store in dbase
#define PATH(name)      (name[0..1] + "/" + name)
// remove the mapping of a name & id
public void remove_name(string name, string id)
{
        string old;
        string *ms;
        if (! stringp(name) || strlen(name) < 2 ||
            undefinedp(old = query(PATH(name))))
                return;
        if (! stringp(old) ||
            ! sizeof(ms = explode(old, "/") - ({ id })))
        {
                delete(PATH(name));
                if (! sizeof(query(name[0..1])))
                        delete(name[0..1]);
                save();
                return;
        }
        set(PATH(name), implode(ms, "/"));
        save();
}
// record the mapping of a name & id
public void map_name(string name, string id)
{
        string old;
        string *ms;
        if (! stringp(name) || strlen(name) < 2)
                return;
        if (! stringp(old = query(PATH(name))))
                set(PATH(name), id);
        else
        {
                ms = explode(old, "/");
                if (member_array(id, ms) != -1)
                        // alreay exist
                        return;
                ms += ({ id });
                set(PATH(name), implode(ms, "/"));
        }
        save();
}
// check name
public string who_is(string name)
{
        string id;
        if (! stringp(name) || strlen(name) < 2 ||
            ! stringp(id = query(PATH(name))))
                return "没有人叫这个名字。\n";
        return "泥潭中叫" + name + "的有:" + id + "\n";
}
// check the id - name
private int really_exist(string name, string id)
{
        object ob;
        object user;
        int result;
        if (! stringp(id))
                return 0;
        ob = find_player(id);
        if (objectp(ob))
        {
                if (ob->name(1) == name)
                        return 1;
                else
                        return 0;
        }
        // read the data of user object
        ob = new(LOGIN_OB);
        ob->set("id", id);
        user = LOGIN_D->make_body(ob);
        destruct(ob);
        if (! objectp(user))
                // no such user
                return 0;
        result = user->restore() && (user->name(1) == name);
        destruct(user);
        return result;
}
// assure the id matched the name
public void assure_map_name(string name)
{
        string id;
        string *ids;
        if (! stringp(id = query(PATH(name))))
                // null name
                return;
        ids = explode(id, "/");
        // examine all the id
     

下一页
返回列表
返回首页
©2025 MUD游戏网_文字mud 电脑版
Powered by iwms