|
3. 平时随机动作和战斗中动作
在create()函数里
set("chat_chance", 25); // 随机动作概率 25%
set("chat_msg", ({
"僵尸护法说道:我们茅山派实力最强!谁敢欺负我们?\n"
"僵尸护法对你念了一会咒,你不禁毛骨悚然起来…\n",
(:random_move // 随机移动
}) );
set("chat_chance_combat", 70); // 战斗中随机动作概率
set("chat_msg_combat", ({
(: command("你敢惹我,追到天涯海角我都要杀了你!") ,
(: cast_spell, "drainerbolt" ,
(: cast_spell, "netherbolt" , //使用各种法术
(: cast_spell, "feeblebolt" ,
(: cast_spell, "invocation" ,
}) );
4. 根据玩家询问的信息作相应的动作
杨掌柜为例:
在create()函数里:
set("inquiry", ([
"治伤": (: heal_me ,
"疗伤": (: heal_me ,
"开药": (: heal_me ,
]) );
再定义一个heal_me函数
string heal_me(object me)
int ratio;
ratio = (int)me->query("eff_kee") * 100 / (int)me->query("max_kee");
if( ratio >= 100 )
return "这位" + RANK_D->query_respect(me) +
",您看起来气色很好啊,不像有受伤的样子。";
if( ratio >= 95 )
return
"哦….我看看….只是些皮肉小伤,您买包金创药回去敷敷就没事了。";
作相应的动作
5. 人物身上的物品和钱
在create()函数里
__DIR__是一个宏,表示当前目录,提高程序可移植性
carry_object(__DIR__"obj/magic_book"); // 一般的物品
carry_object(__DIR__"obj/spells_book");
carry_object(__DIR__"obj/thin_sword")->wield(); // 武器可以装备
carry_object(__DIR__"obj/pink_cloth")->wear(); // 衣服等可以穿上
carry_object(__DIR__"obj/shoe")->wear();
add_money("gold", 3); // 钱用add_money函数
--
巫师编程 (2)
5) 人物的属性 (scratch)
"id" (string)
人物的识别字,这个字可以用来识别玩家,通常 "id" 跟 "name" 都不直接用
set() 设定,而是用 F_NAME 中的 set_name()。
"title", "nickname", "name" (string)
人物的称号、绰号、与中文姓名。
"age" (int)
人物的年龄,玩家的年龄是由定义在 USER_OB 中的 update_age() 定期更新。
"age_modify" (int)
这个数值会在 update_age() 中被加在人物的年龄上,可以是负数。
"gin", "eff_gin", "max_gin" (int)
"kee", "eff_kee", "max_kee"
"sen", "eff_sen", "max_sen"
人物的精气神数值及其上限,其中 "gin", "kee", "sen" 请透过定义在 F_DAMAGE
中的 receive_damage() 与 receive_heal() 增减,"eff_gin", "eff_kee",
"eff_sen" 则用 receive_wound() 与 receive_curing()。
"str", "cor", "int", "spi", "cps", "per", "kar" (int)
人物的天赋,依序分别为膂力(strength)、胆识(courage)、悟性(intelligence)
、灵性(spirituality)、定力(composure)、容貌(personality)、福缘(karma)。
根据天赋的原意,请勿修改这几个值,也不要依赖这些值做一些相关重大的检查。
"atman", "max_atman" (int)
"force", "max_force"
"mana", "max_mana"
人物的灵力(atman, AP)、内力(force, FP)、法力(mana, MP) 及其上限,可
以用 set(), add() 直接修改,但是必须自行检查上下限。
"MKS", " KS" (int)
人物杀死其他生物的统计(MKS = Monster Killing Statistic, PKS = Player
Killing Stastics)。
"combat_exp" (int)
人物的实战经验?
"score" (int)
人物的综合评价。
"force_factor" (int)
人物 enforce 指定的强度,表示用内力伤人所耗的内力。
"mana_factor" (int)
人物 enchant 指定的强度,表示引出武器魔法效果所耗的法力。
"family" (mapping)
人物的师承门派等记录,当人物拜师或自创门派时就会设定这个属性,其内容
及定义如下:
"family_name": 门派名称
"master_name": 师父的中文名字
"master_id": 师父的英文代?
"generation": 人物在这个门派中的辈分,1 表示开山始祖,2 表示
第二代弟子….等等。
"title": 人物在这个门派中的地位,如"掌门人"、"左护法"、等
等,刚加入一个新门派的预设值是"弟子"。
"priv": 人物在门派中的权限旗号,一般弟子是 0,掌门人是 -1
"enter_time": 人物加入门派时 time() 所传回的值。
"guilds" (mapping)
人物所参加的各种组织,每个组织有一个 identity 当 key,value
的内容由该组织的相关物件自行定义。
"startroom" (string)
人物 login 时出现的房间,一般都设为公会。
6) 如何建造一个房间
房间是构成这整个世界的要素之一,在此我们提供了一个房间的标准物件来让
所有的房间继承。而如同其他的物件一般,你需要写一个 create() 来设定房间中
的叙述、出口、物品、生物等等。这里,我喜欢说你用 create() 这个函式来赋予
这个房间的属性。一般来说,要建造一个简单的房间,你只要赋予它基本的属性即
可。当然,我们不认为一个区域中几十个房间没有任何的机关或秘密,是个会吸引
玩家一游的好地方。
下面,提到了一些建造房间所需要留意的事项,也会配合一些例子来说明。
一、基本篇
一个基本的房间,要有 short <短叙述> 、 long <长叙述>、 exits <出口>
□ 当你在写一个房间的 long <长叙述>时,其格式为:
set("long", @LONG
房间的叙述…….
LONG
"west" : __DIR__"path3",
和
"west" : "/u/d/davidoff/goathill/path3",
是完全一样的。但前者显然在以後目录的搬移上方便的多。而在下面会提到设定房
间中的物品或生物时,也建议采用这种方式写作。
□ item_desc 这是用来设定个别景物的描述,当玩家用 look 这个指令时就会作
用。其格式为:
set("item_desc", ([
"景物名称" : "景物叙述",
………..
]);
其中景物叙述可以是字串或是一个 function ,所以你可以利用这个功能加以
变化,当玩家 look 一个景物时,可能看到叙述,也可能发生一些特殊的事件,而
你就可以在被呼叫的函式中写下这些事件。
□ objects 可以让这个房间在每次 reset时载入某些生物或某些物品:
set("objects", ([
"物品或生物的档名" : 数量,
………..
]);
如同前面所提到的,建议采用 __DIR__来编写你的路径,而数量则要用整数。
□ 要为这个房间添上门户时,记得前面必须先 #include 。而格式为:
create_door("出口方向", "门的名称", "进入方向", 预设状态);
比如说,这里明显的出口有 west、east 和 up。 而你要让西边有一个关上的
红木门,你可以这样写:
create_door("west", "红木门", "east", DOOR_CLOSED);
当玩家进入这个房间时,他会看到:
这里明显的出口有 east 和 up。
而当他 look west 时,会看到:这个红木门是关上的。
其他的一些属性,你可以参考 /doc/build/room_prop 或是读一下标准物件的
room.c。也建议你可以多用 more here来观看一间特殊的 room。 |
|