作者laechan (小太保)
看板mud_sanc
标题Re: [问题] inherit的问题
时间Tue Oct 29 17:00:27 2013
※ 引述《justinj (黑旋风)》之铭言:
: 我在某一个档案merc_room.c 有设定了一个动作finish
: add_action("cmd_finish","finish")
: int cmd_finish(string str)
: {
: ....
: }
: 那我另一个档案069.c 去 inherit 上述档
: 然後重新增加部分的资料
: int cmd_finish(string str)
: {
: ::cmd_finish(str);
: ...... //B区块
: ......
: }
: 那我要怎麽样写才会让我执行finish指令时
: 1.当我还未完成时,不去执行B区块,但会吐出原讯息代表未完成的讯息
: 2.当我完成时,会去执行B区块
我猜你并不想动 merc_room.c,在这情况下如何判断
::cmd_finish(str); 的结果是「完成」或「未完成」
比方说防具店有 sell_it 函数,然後你自己的防具店
inherit 了样本防具店然後自订函数
int sell_it(string str)
{
::sell_it(str);
那你的意思就接近玩家卖东西时「有卖成功=完成」
才执行 B区块,卖失败时就不执行,然後产生原先卖
失败的讯息。
「则以防具店为例」一般我会这样做
int
selling_it(string str)
{
if(this_object()->sell_it(str)>0) // return 1 时
{
B区段;
}
else
return sell_it(str);
}
会这样写是因为 this_object 本身 inherit 防具店
,所以 this_object 就能呼叫 sell_it。
而 >0 时它一定会出现卖出物品成功讯息同时执行 B
区段,<=0 时代表可能有 return notify_fail 的区
段代表卖出失败,return notify_fail 有可能不会显
示讯息,但是透过 return sell_it 该讯息就会出现
这前提是建立在
1.以防具店这个 case 为例
2.防具店的 sell_it 是用 return 1 及 return notify_fail
或是 return 0 来区别成功及失败
假设不幸的不管它成功或失败都是用 write + return 1
来写,那一般我的做法是我必须先知道我继承的 sell_it
函数本身是在执行哪些东西,这样我才有办法对它做
必要的判断,例如
int sell_it(string str)
{
set("origin_objnum",objnum);
::sell_it(str);
if(obj_num!=query("origin_objnum")) // 当然实际上根本不会这样写
{
// 代表本次执行 ::sell_it(str) 後防具店的物品内容有改变
执行 B 区段;
}
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 210.61.157.53
1F:→ laechan :然後一般的情况使用 :: 多是基於想直接套用前人写的 10/29 17:02
2F:→ laechan :所以你的 case 我比较建议你自己写, 或是就直接套用 10/29 17:03
3F:→ laechan :前人的再自己前後加点东西,或是建立属於自己的样本 10/29 17:03
4F:→ laechan :像之前你对船的样本不满意,其实当时可做的是更改船的 10/29 17:04
5F:→ laechan :样本,而不是大家都继承样本了,只有你的跟其它人不同 10/29 17:04
6F:→ laechan :你可以思考的是如何让大家继承的船都能像你的船一样 10/29 17:04
7F:→ laechan :除非你的船就是真的很特别 10/29 17:06
8F:推 justinj :了解... 10/29 18:05