昵称


昵称是一套系统,可以让某个对象(通常是玩家)给游戏中的其他实体起自定义的名字。

昵称和别名有所不同。给游戏实体设置别名会改变实体内部的属性,之后游戏中的所有人都可以用新的别名表示该实体。与此相反,给游戏实体起的昵称只能由你个人使用,起昵称的实体不会有任何改变。昵称的原理很简单:在发送信息前Evennia会扫描你的输入,找出其中的昵称,然后用完整的“真正”的名字来代替它。在默认系统中,昵称是由 nick 命令管理的,该系统还可以扩展出其他的用途。

在默认的Evennia中,昵称的使用方式(nick_type)有三种,它们决定了在什么时候执行实际替换:
  • inputline(输入行) —— 你在命令行上写的所有东西都会做替换。这是默认使用的方式。
  • objects(物体) —— 只在你指向物体时做替换。
  • players(玩家) —— 只在你指向玩家时做替换。

在默认命令集中可以这样使用(用 nick 命令):
 nick ls = look
这个昵称很适合 unix/linux 用户,他们在日常生活中已经习惯使用 ls 命令了。这条命令相当于 nick/inputline ls = look 。
 nick/object mycar2 = The red sports car
在这个例子中,替换只会发生在需要指向物体的命令中,比如
 look mycar2
相当于“look The red sports car”。
 nick/players tom = Thomas Johnsson
这对专门搜索玩家的命令有用:
 @find *tom
人们可以使用昵称加快输入。下面我们要添加创建红色按钮的快捷方式,以后只要输入 rb 就可以执行整个字符串了。
 nick rb = @create button:examples.red_button.RedButton
昵称也可以用来开始构建“识别”系统,这适合角色扮演类的mud。
 nick/player Arnold = The mysterious hooded man (神秘的蒙面人)


在代码中使用昵称

昵称被保存为 Nick 数据库模型,普通Evennia物体的 nicks 属性会指向它,它也被成为昵称处理程序。昵称处理程序可以提供有效的错误检查、搜索和转换功能。
    # 命令/频道的昵称:
    obj.nicks.add("greetjack", "tell Jack = Hello pal!")

    # 物体的昵称:
    obj.nicks.add("rose", "The red flower", nick_type="object")

    # 玩家的昵称:
    obj.nicks.add("tom", "Tommy Hill", nick_type="player")

    # 自定义的昵称类型(由自己的游戏代码来处理):
    obj.nicks.add("hood", "The hooded man", nick_type="my_identsystem")

    # 获取昵称的原文:
    full_name = obj.nicks.get("rose", nick_type="object")

    # 删除之前设置的昵称
    object.nicks.del("rose", nick_type="object")

在定义命令时,你可以通过 self.caller.nicks 来使用昵称处理程序。在 game/gamesrc/commands/default/general.py 的 nick 命令中有更多的例子。

最后要说明,Evennia的频道别名系统使用的是 nick_type="channel" 的昵称,它可以让用户创建自己的频道别名。


(原文:https://github.com/evennia/evennia/wiki/Nicks    翻译:卢铱俊)