Re: [wizs] 系統撰寫概要

看板mud_sanc (Sanctuary - 聖殿)作者 (小太保)時間17年前 (2009/02/04 11:36), 編輯推噓0(000)
留言0則, 0人參與, 最新討論串4/6 (看更多)
再來講個簡單的系統,例如說某房間,它會定期紀錄線上玩家 在各區域(依目錄分)的數量,將之統計起來,日後方便分析哪 些區域是較熱門的點,以及其它資訊之類的.. 從這裡開始,restore_object/save_object 就不再是重點,因 為這個只要會用就好了,重點開始變成「你要怎麼存資料」。 一般來說可以這樣子設定要存的資料.. mapping count_data=([ "/u/l/laechan/area/felid" : ({ 3, 2, 5, 4, .... }), "/u/l/laechan/area/hole" : ({ 5, 4, 5, 7, .... }), ]) 也就是說,每一段周期時間,它就去讀 users(),分析每一個 environment(ppl) 的 base_name,然後 filter 出 area_path mixed usr=users(); object ppl,env; string files,area_path; int s; foreach(ppl in usr) { if(ppl && env=environment(ppl)) { files=base_name(env); s=strlen(files); while(s-->0) { if(files[s..s]=="/") area_path=files[0..s]; // 或 files[0..s-1] 然後做 mapping 資料的增減... mixed tmps=({}); if(count_data[area_path]) { tmps=count_data[area_path]; tmps+=({ 本數統計的數量 }); } else count_data[area_path]=({ 本次統計的數量 }); 當然最後要做的事情就是.. save_room(); 通常當累積的陣列元素越多時,就有足夠的資訊可以分析,在一定 的時間範圍內,某一個區域它的人數增減情況。 撰寫這樣的系統,基本上要注意幾件事... 一、周期時間的訂定。 二、在讀取資料的時候如何最快速簡易無負擔(上面的沒有做到這點) 三、如何設定儲存資料的格式可以使儲存量更精簡 通常二跟三是衝突的,根據定律,它就存在一個所謂的「最適合寫 法」,可以折衡中間的優缺。 不過實務上一般還是依實際情況來做二or三的考量,需考量最適合 寫法的情況通常只有在寫頻繁讀取 or 大型系統時。 在這情況下考量聖殿的現況,還是請各位多以二為主^^              Laechan -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 218.170.230.44
文章代碼(AID): #19YGrDj2 (mud_sanc)
文章代碼(AID): #19YGrDj2 (mud_sanc)