作者laechan (小太保)
看板mud_sanc
标题Re: [问题] 物件问题
时间Tue Jul 29 15:44:25 2014
※ 引述《justinj (黑旋风)》之铭言:
: /*****************************************************************/
: 执行时段错误: *Can't load objects when no effective user.
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
: 程式: /adm/simul_efun/find_object_or_load.c(/adm/obj/simul_efun.c):20
: 物件: /adm/obj/simul_efun
: /std/user#953868 "cmd_hook" /std/user.c:140
: /cmds/std/_wear "cmd_wear" /cmds/std/_wear.c:66
: /cmds/std/_wear "try_wear_one" /cmds/std/_wear.c:502
: /d/ppl/justinj/wristlet#1984514 "wear_func" /d/ppl/justinj/armor.c:176
: /adm/obj/simul_efun "find_object_or_load"
: /adm/simul_efun/find_object_or_load.c(/adm/obj/simul_efun.c):20
: /*****************************************************************/
: 这个是我在写耐久度时出现的问题
: 我是设定当装备穿上时会去某个物件(装备管理房)登记(register)
^^^^^^^^^^^^^^^^^^^^^^^^
: 这样就会启动一段时间就减少
: 但如果某物件(装备管理房)还未生成时才会发生的问题...
你可以记一下,通常会发生这问题,有可能是你的装备管理房没有
inherit DAEMON,你可以检查一下。物件没有 inherit 任何东西时
你可以想成它将因此无载体,无载体的物件在你最初 update 时不
会有问题,但是过一段时间它被从记忆体清除後就会有问题。
(像我有段时间比较懒,有些东西直接 inherit ROOM,这也可以)
Laechan
--
※ 发信站: 批踢踢实业坊(ptt.cc), 来自: 210.61.157.53
※ 文章网址: http://webptt.com/cn.aspx?n=bbs/mud_sanc/M.1406619871.A.0A4.html
1F:推 justinj :装备管理房有inherit ROOM;.. 07/29 16:08
2F:→ justinj :发生的方法是我写在wear_func...XXX->register().. 07/29 16:09
if(data["Duration_Max"])
{
set("wear_func_time",time()+180);//穿3分钟
find_object_or_load(EQ_CONTROL);
EQ_CONTROL->eq_register(this_object());
}
不太建议这样写。
int wear_func()
{
object ob;
.
.
if(data["Duration_Max"])
{
set("wear_func_time",time()+180);//穿3分钟
if(!catch(ob=find_object_or_load(EQ_CONTROL)))
ob->eq_register(this_object());
}
另外
mixed EQS = ({});
void eq_register(object ob)//装备登入
{
set_heart_beat(1);
EQS += ({ob});
}
这个可能会无效,至少在 tmi2_v3 是无效的,因为 mixed EQS=({})
这并不是有效的初始化动作,一般是这样子做初始化你可参考
mixed EQS;
void create()
{
::create();
seteuid(getuid(this_object()));
if(!EQS) EQS=({});
}
你可以想成所有有宣告 create 的函数再被载入时一定会呼叫,所
以将初始化的段落写在 create 内就变成一种很自然的想法。
※ 编辑: laechan (210.61.157.53), 07/29/2014 16:30:48
3F:推 justinj :耐久度系统失效,请通知WIZ! 07/30 09:49
4F:→ justinj :一样...连载入都不行..只是变成可以往下跑而已.. 07/30 09:52
5F:→ laechan :喔我想起一件事,我很多东西都放.../open :p 07/30 10:45
6F:推 justinj :我还以为那边只有写入有问题才放那而已.. 07/30 11:05
7F:推 justinj :移过去也一样... 07/30 11:24
8F:→ laechan :你可以试试把部份放 open 看看或许会成功 07/30 11:25
9F:→ laechan :先试试就好,理论上在/d也应该能成功的,不成功应该是 07/30 11:25
10F:→ laechan :有别的原因在 07/30 11:25
11F:推 justinj :试过情况如下..装备上不能load_obj..房间可以... 07/30 11:42
12F:→ justinj :装备移到/open...还没试过..不过管理房移过去不行 07/30 11:43
13F:推 justinj :不行...那只剩房间跟装备的差别... 07/30 11:45
14F:推 justinj :seteuid(getuid(this_object())); 07/30 11:50
15F:→ justinj :房间有这个..装备没有..所以装备加那个就可以叫了 07/30 11:51
16F:→ laechan :唔原来你装备没加这个, 那通常是不行的 07/30 13:41
17F:推 justinj :刚刚去看一下..原来norr的范例本来就没有..--\\\ 07/30 14:08
18F:→ justinj :印象中只有怪物有..其它都是预设(写在最初档里) 07/30 14:09
19F:→ laechan :加那东西主要是给有想做特殊用途的物件用的 07/30 14:41
20F:→ laechan :一般物件(比方像是简单的房间)没有加也是ok的 07/30 14:42
21F:→ laechan :像指令是因为写在 user.c 的函数内去呼叫的所以大部 07/30 14:42
22F:→ laechan :份指令才可以只需 inherit DAEMON 及 int cmd_xxxxxx 07/30 14:42
23F:推 justinj :soga~~ 07/30 15:28