作者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/m.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