文字MUD游戏论坛-天下泥潭群英会-水泊梁山  

返回   文字MUD游戏论坛-天下泥潭群英会-水泊梁山 > 西游之旅 > 『 巫师天下 』

『 巫师天下 』 学习如何挂MUD,如何制作MUD。讨论如何管理好一个MUD,做好一个巫师。

发表新主题 回复
 
LinkBack 主题工具 主题评分 显示模式
旧 2011-12-03   #1
高级会员
级别:6 | 在线时长:109小时 | 升级还需:31小时级别:6 | 在线时长:109小时 | 升级还需:31小时级别:6 | 在线时长:109小时 | 升级还需:31小时
 
Odysseus 的头像
 
注册: 08年04月11日
来自: 盘丝洞
帖子: 311
声望力: 20
声望: 50 Odysseus 初领妙道
现金:29两梁山币
资产:1245两梁山币
致谢数: 0
获感谢文章数:0
获会员感谢数:0
限制相似的中文姓名

发信人: jjgod (jjgod), 信区: Mud_Builder
标 题: POST两个类似程序
发信站: 一塌糊涂站 (Sat May 26 16:59:39 2001) , 站内信件


// 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
ids = filter_array(ids, (: really_exist, name :));

if (! sizeof(ids))
{
// no id matched
delete(PATH(name));
return;
}

// reset name-id mapping
id = implode(ids, "/");
set(PATH(name), id);
}

// If the name to be a new name, dose it invalid ?
public string invalid_new_name(string name)
{
string id;
int i;
int l;

if (! stringp(name) || strlen(name) < 2)
return "不能使用空名字。\n";

if (member_array(name, family_name) != -1)
return "不能使用复姓作为名字。\n";

// 和对有关ID-名字的信息
assure_map_name(name);

if (id = query(PATH(name)))
return "这个名字和 " + id + " 的名字重复了。\n";

if (strlen(name) < 4)
return 0;

l = strlen(name);
for (i = 0; i <= l - 4; i++)
{
// 和对有关ID-名字的信息
assure_map_name(name[i..i + 3]);
if (i + 6 <= l)
assure_map_name(name[i..i + 5]);

if (member_array(name[i..i + 3], family_name) == -1 &&
stringp(id = query(PATH(name[i..i + 3]))))
return "这个名字和 " + id + " 的名字太接近了。\n";

if ((i + 6 <= l) &&
stringp(id = query(PATH(name[i..i + 5]))))
return "这个名字和 " + id + " 的名字太接近了。\n";
}

return 0;
}

// change a user's name
public varargs string change_name(object me, string new_name, int force)
{
string result;
mapping dbase;

if (stringp(me->name(1)))
{
remove_name(me->name(1), me->query("id"));
result = invalid_new_name(new_name);
} else
result = 0;

if (force || ! result)
{
dbase = me->query_entire_dbase();
dbase["name"] = new_name;
}

map_name(me->name(1), me->query("id"));
return result;
}

// how many name
public int query_total_name()
{
string *ks;
int total;
int i;

total = 0;
ks = keys(query_entire_dbase());
for (i = 0; i < sizeof(ks); i++)
total += sizeof(query(ks[i]));

return total;
}

string query_save_file() { return DATA_DIR "named"; }

// 中文姓名检测程序

#include
inherit F_SAVE;
inherit F_DBASE;
#define NAME_FILE "/data/name.o"

mapping name=([ ]);

void create()
{
seteuid(ROOT_UID);
set("channel_id", "姓名检测精灵");
if (file_size(NAME_FILE)<=0)
{
name=([]);
save();
}
restore();
}

string query_save_file()
{
return NAME_FILE;
}

int check_name(string user_name)
{
int i,len;
string *key=keys(name);

for (i=0;i < sizeof(name);i++) {
if (user_name==name[key[i]]) {
// write(name[key[i]]);
write(WHT"\n对不起,这个名字和 "HIC+key[i]+NOR WHT" 的
名字是一样的。\n"NOR);
return 0;
}

else {
if (strlen(user_name) > strlen(name[key[i]])&&
strsrch(user_name,name[key[i]])!=-1&&strlen(user_name)>
=4) {
write(WHT"\n对不起,这个名字和 "HIC+key[i]+NOR
WHT" 的名字过于相似了。\n"NOR);
return 0;
}

if (strlen(user_name) < strlen(name[key[i]])&&strlen(user
_name)>=4&&
strsrch(name[key[i]],user_name)!=-1) {
write(WHT"\n对不起,这个名字和 "HIC+key[i]+NOR
WHT" 的名字太过相似了。\n"NOR);
return 0;
}
}
}
return 1;
}

void add_name(string id,string user_name)
{
if (stringp(id)&&stringp(user_name)
&&!stringp(name[id])) {
name[id]=user_name;
save();
restore();
log_file("name",sprintf("属于 %s 的中文姓名 %s 被添加到姓名数据
中。\n",id,name[id]));
return;
}
}

void del_name(string id)
{
if (stringp(id)&&stringp(name[id])) {
log_file("name",sprintf("属于 %s 的中文姓名 %s 从姓名数据中删除
。\n",id,name[id]));
map_delete(name,id);
save();
restore();
return;
}
}

string who_is(string user_name)
{
string *names = keys(name);
int i;
string msg = WHT "江湖中叫" + user_name + NOR WHT + "的有 ", *user = ({
});

for (i = 0; i < sizeof(names); i++)
{
if (name[names[i]] == user_name)
{
user += ({ names[i] });
}
}
if (! sizeof(user))
return WHT"江湖中没有叫" + user_name + NOR WHT "这个名字的。\n"
NOR;
else
{
msg += (implode(user, "/") + "。" NOR);
return msg;
}
}

大家比较比较?
Odysseus 当前离线  
回复时引用此帖

发表新主题 回复

添加到书签


发帖规则
不可以发表主师
不可以回复帖子
不可以上传附件
不可以编辑自己的帖子

论坛启用 vB 代码
论坛启用 表情图标
论坛启用 [IMG] 代码
论坛禁用 HTML 代码
Trackbacks are 启用
Pingbacks are 启用
Refbacks are 启用



所有时间均为格林尼治时间 +9, 现在的时间是 07:49.


Powered by SPLS
版权所有 2001-2023 水泊梁山
皖ICP备05012024号

站长 fengyue

Content Relevant URLs by vBSEO 3.6.1