Re: [閒聊] 碎碎念

看板mud_mars (瑪爾斯群英傳)作者 (小太保)時間13年前 (2012/08/16 14:08), 編輯推噓2(204)
留言6則, 2人參與, 最新討論串2/7 (看更多)
聊一下我的經驗,sanc 有個函數叫 improve_skill 是用在 玩家技能熟練度的增加用的。 那麼理論上,這個函數直接內建在 user.c 是最精簡的做法 ,因為玩家的熟練度資料參數是建在 user.c 裡面的,內建 函數就可以直接這樣做.. isk[skname]+=n; // skname 這個技能的熟練度 +n 但是 sanc 以前卻把這個函數建到別的地方,使得實際的呼 叫如下.. "/adm/daemons/user2_d"->improve_skill(me,skname,n); 那麼你就可以想像,玩家在戰鬥中每一次觸發到熟練度的增 加時就得做上面的動作至少一次。 但是它有好處,就是「不容易當」,因為它是一個呼叫外部 物件函數的 code,而依 mud 的設計就是,如果你呼叫一個 外部的東西卻失敗時,程式是會往下繼續執行的。但是,如 果是在一個函數裡面的某一個內部呼叫或計算段落錯誤,它 則是會直接停下的。 void improve_skill(string skname,int n) { // 這樣就算底下的東西呼叫錯誤,也不會產生重大錯誤 // 然後還可以試著用 catch 去捕捉錯誤訊息 "/adm/daemons/user2_d"->improve_skill(me,skname,n); } void improve_skill(string skame,int n) { // 這樣一旦下面的東西出錯(比方 skname 是空白的情況) // 玩家會失去心跳, 嚴重時還會死機 isk[skname]+=n; } 一般來說,死機有幾種可能原因.. 1.資料 type 錯誤 2.函數遞迴錯誤(特別留意一些 return call_other 的) 3.迴圈設計不良(如 while(true), while(1) ) 4.具心跳的物件過多 5.同一時間系統需處理的執行緒過重 . . 一般來說 mudos 升版, config 檔參數適當配置, 可減少在 lib 面看不出來的 crash 情況出現. -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 223.143.100.43

08/16 16:07, , 1F
謝謝laechan指導!
08/16 16:07, 1F

08/16 17:51, , 2F
純經驗談,交流交流~ sanc以前23x人就會不明原因crash,後來
08/16 17:51, 2F

08/16 17:51, , 3F
換mudos換了幾次後這問題就自動解決了
08/16 17:51, 3F

08/16 17:57, , 4F
不過我查一下 2.2就沒在更新了..
08/16 17:57, 4F

08/18 07:26, , 5F
也可以換開發者,像sanc win版曾經換成 fluffos 過
08/18 07:26, 5F

08/18 07:26, , 6F
從 v22.2b14 -> fluffos
08/18 07:26, 6F
文章代碼(AID): #1GB8v8k2 (mud_mars)
討論串 (同標題文章)
文章代碼(AID): #1GB8v8k2 (mud_mars)