作者laechan (小太保)
看板mud_sanc
标题[wizs] times_check 修改为支援内回做法
时间Thu Aug 22 10:27:46 2013
比方底下有一航行计划
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