[wizs] times_check 修改為支援內迴做法

看板mud_sanc (Sanctuary - 聖殿)作者 (小太保)時間12年前 (2013/08/22 10:27), 編輯推噓0(000)
留言0則, 0人參與, 最新討論串1/1
比方底下有一航行計劃 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
文章代碼(AID): #1I5NScPr (mud_sanc)
文章代碼(AID): #1I5NScPr (mud_sanc)