作者laechan (挥泪斩马云)
看板mud_sanc
标题Re: [闲聊] 新增纪录之石(Record Stone)
时间Wed May 3 07:59:14 2017
※ 引述《hlead (希多)》之铭言:
: 新增下列物件(可在罗德斯及罪恶城道具店购买):
: --------------------------------------------------------
: 纪录之石(Record Stone)
: --------------------------------------------------------
: 单位:颗
: 重量:20
: 价格:168168
: 掉落:无
: 据说是从远古时代流传至今的一颗神秘石头,里面蕴藏着强大的
: 魔力,可以将人物目前所在地的时空资讯纪录在人物的身上。
: 使用方法:use stone。
: --------------------------------------------------------
: 功用:
: 可在罪恶城的神之广场及罗德斯的巨型高塔使用。
: 使用後 recall 处会变更,以後 recall 都会到该地点。
: 上述两个房间新增参数:
: set("recall_location","lodoos"); // 配合纪录之石(Record Stone)使用。
: 指令 recall 变更:
: else // 新增 record_data/recall_location 判断。 Norr in 106/05/02
: {
: string reLocal = me->query("record_data/recall_location");
: if(reLocal == "sin_city")
: me->move_player("/d/ppl/norr/sin_city/room/192","SNEAK");
: else if(reLocal == "lodoos")
: me->move_player("/d/wiz/room/disc","SNEAK");
: else
: me->move_player("/d/wiz/room/disc","SNEAK");
: }
补充一下 ob use 的部份(指令 /cmds/std/_ob.c)
else if(sscanf(str,"use %s",tmp)==1)
{
vobjs=me->query_vobjs();
tmps=keys(vobjs);
tmps=sort_array(tmps,(: sort_vobjs :));
x=atoi(tmp);
if(x>0)
{
y=sizeof(tmps);
if(y<1)
return notify_fail("你的物品栏一个东西也没有。\n");
if(x>y)
return notify_fail("你的物品栏没有第 "+x+" 件物品喔.\n");
tmp=tmps[x-1];
tmps=questing("vobjs","replace","mton",({tmp}));
tmp=tmps[0];
}
//tmp这时变为该物品的"名字"
// ({"mark","name","unit","kind","value","carry","sell","trade","desc"})
tmps2=questing("vobjs","query_array",tmp);
//tmps2这时变为该物品的阵列资料, 例如 tmps2[0]就是其编号
if(sizeof(tmps2)<8)
return notify_fail("没有"+tmp+"这个东西喔。\n");
if(!vobjs[tmps2[0]])
return notify_fail("你没有"+tmp+"这个东西喔。\n");
//当desc被设定为 档名型式 时 如 /std/new_ob/s/s001
if(tmps2[8][0..0]=="/")
{
tmps2[8]=substr(tmps2[8],"\n","");
env=find_object_or_load(tmps2[8]);
// Laechan@Sanc add in 2013/09/13
// 不想动旧有的 ob_use_func 所以新增一个, 两者共存时
// 会以 use_func 为主, 并把需要的所有资讯全部传过去
//如果该指向的档名,其物件档案内有 use_func 函数时
//玩家下 ob use 该物品编号或名字 时,就会呼叫该函数
if(function_exists("use_func",env))
{
me->vobjs("add",tmps2[0],-1);
//预设使用後该物品数量会 -1
env->use_func(me,environment(me),tmps2);
//并无条件 return 1(即支援 move、move_player 函数的呼叫)
return 1;
}
//名称叫 use_func 或 ob_use_func 皆可
else if(function_exists("ob_use_func",env))
{
me->vobjs("add",tmps2[0],-1);
env->ob_use_func(me);
return 1;
}
return notify_fail("ob use: "+tmp+" 这个东西可能有问题,现在不能使用喔.\n");
}
return notify_fail("ob use: "+tmp+" 这个东西不能使用喔.\n");
}
--
※ 发信站: 批踢踢实业坊(ptt.cc), 来自: 111.252.81.122
※ 文章网址: https://webptt.com/cn.aspx?n=bbs/mud_sanc/M.1493769557.A.E4C.html
1F:→ laechan : 因为数量会减1,所以在 use_func 内记得把物品再+1 05/03 08:00
2F:→ laechan : 基本上是否预设-1是可讨论的 05/03 08:01
例如说真的写几种不同的 use function,通常一种物品只会带
一个 use function,某些 use function 就不扣物品数量:
通常版: use_func、ob_use_func
特殊版: special_use_func (类似自定特殊攻击的 special_fun 做法)
中午前我评估看看能否这样写。
※ 编辑: laechan (111.252.81.122), 05/03/2017 08:04:46