[wizs] times_check 修改為支援內迴做法
比方底下有一航行計劃
set("plane",({ ({"/x/x/xxx1","西斯迪克港",30,300}),
({"/x/x/xxx2","菲里德軍港",30,400}),
({"/x/x/xxx3","塔塔克高原",30,500}) }));
300 400
上面的意思是航行路線為 西斯迪克─→菲里德─→塔塔克─┐
↑ │
└────────────┘
需 500 秒
首先需要設定一筆即使 times_check 被 update 也會被記憶的
設定,每 300+400+500+30x2x3 = 1380 秒要被 check 一次的。
times_check->set_times_check(names,files,"start_plane",1200);
然後是產生內迴資料: ({"呼叫檔案1",幾秒,"呼叫檔案2",幾秒,...})
tmps=({});
planes=query("plane");
j=sizeof(planes);
t=0;
for(i=0;i<j;i++)
{
tmps+=({planes[i][0],t+time()}); // 停靠
t=t+planes[i][2];
tmps+=({planes[i][0],t+time()}); // 廣播
t=t+planes[i][2];
tmps+=({planes[i][0],t+time()}); // 駛離(與廣播同一時間間隔)
t=t+planes[i][3];
}
上面的意思是說,一開始 t=0 時 i=0 代表先執行船隻進入了
西斯迪克港(開出口、廣播),然後 30 秒後廣播要出發了,再
30 秒駛離西斯迪克港(關出口、廣播),然後 t+300 秒。
這時換 i=1,tmps+=({planes[i][0],t+time()}); 這時所加
的時間就是 30+30+300 後的秒數,也就是下一階段。
當迴圈執行完畢時,最後一筆的資料就是 time()+880 秒,
理論上「再經過 500 秒應駛回西斯迪克港重新開始」,這個
就是一開始 set_times_check 所設定的那筆。
那麼如果是 a->b->c->b->a 這樣的航行計劃呢,很簡單就是
設定五筆航行資料即可,然後當船隻駛回 a 時自然就重新開
始。
上面內迴跑完後則只需設定一筆即可:
times_check->set_times_no_save(names,files,tmps);
這樣就能達到每 1380 秒呼叫兩次 times_check 就完成船隻
控制─不管它航行會經過幾個點,而且只會 save_room 一次
今天會實裝一隻船艦樣本,完成後僅需照原先船隻的設定即
可:
set("plane",({({"塔塔克高原",TR"015",30,30}),
({"西斯迪克港","/u/l/laechan/area/sisdic/room/001",30,30}),
}));
即此設定不用改,只要增加幾個識別用設定,再改繼承即可。
Laechan
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 210.61.157.53
mud_sanc 近期熱門文章
PTT遊戲區 即時熱門文章