Re: [wizs] times_check
看板mud_sanc (Sanctuary - 聖殿)作者laechan (小太保)時間12年前 (2013/09/07 00:15)推噓1(1推 0噓 2→)留言3則, 1人參與討論串2/3 (看更多)
理論上現在應該不會停了,心跳停止的原因在於 times_check
函數在執行過程中產生錯誤所致,一般來說會產生錯誤的片段
if(file_exists(times_check[tmp][tmp2][0]) ||
file_exists(times_check[tmp][tmp2][0]+".c"))
{
ob=find_object_or_load(times_check[tmp][tmp2][0]);
if(!ob)
{ ob=clone_object(times_check[tmp][tmp2][0]);
大概就是將上面 find_object_or_load 及 clone_object 的部
份用 catch 包起來即可,這兩個片段的撰寫用意在於,以book
為例,實際上 cancel_effect 是呼叫到 /d/book/xxxx.c 而非
玩家身上的實體書(即實體書的存在意義變成只剩下 min-max),
但即便一堆玩家身上有實體書,/d/book/xxxx.c 本身也可能因
為系統 reborn 的緣故而清掉,因此用兩道程序重新載入。
(不過這並不是好的做法。另外 file_exists 判斷應該可略過)
目前問題比較大的是 study 而非 times_check,從這次更動的
經驗可知道當原本一個 call_out 的東西改成 times_check 方
式時最好重寫相關判斷。
以這次的問題為例,當玩家 study 時 times_check 就出現一
筆資料,因此
1.必須避免 times_check 出現兩筆以上相同的資料
要嘛避免,不然就是 times_check 有辦法判斷只有一筆有作
用目前用 file_name(book) 及 login_on 來處理。
2.必須避免因 times_check 錯誤造成玩家無法再讀
這個最好的做法就是讓原本 ppl->set_temp("study 的設定
加進 time()+n 的判斷,這樣就算 times_check 停止心跳,
經過一段時間後玩家也可以再 study。
這個修改需 shutdown。
3.在 set_times_check 及 set_times_no_save 加入心跳判斷
當呼叫者是玩家,且 times_check 無心跳時,告訴玩家訊息
並且中止 set_times。
4.實體書泛濫的問題
為避免以後玩家 book 越屯越多,將採底下處理..
1.book 將改虛擬書
└但是上面關於 book 的修改還是可用在 egingin 等書上
2.虛擬書可用 ob read 去讀,每讀一次
a.加 0~n (0 代表可能讀了沒心得)
b.加 1~n (代表讀一次至少加 1)
3.虛擬書沒有認主問題,可 ob sell 也可 ob trade,亦可
堆疊,而且方便做堆疊上限,我基本上也不會管制數量,
但是讀了一次書後要等一陣子才能再讀第二次,則是確定
的。
以上會列入下禮拜修改重點,玩家身上的實體書將無法再讀,
玩家也無法再打到實體書,但是可打到虛擬書,預定全面實裝
時間將在中秋節後(因為要改很多東西)。
預定會先新增 /std/new_ob/vobjs/b 目錄及各書本實體檔。
Laechan
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 210.61.157.53
推
09/07 17:01, , 1F
09/07 17:01, 1F
→
09/07 17:02, , 2F
09/07 17:02, 2F
→
09/07 17:02, , 3F
09/07 17:02, 3F
討論串 (同標題文章)
完整討論串 (本文為第 2 之 3 篇):
mud_sanc 近期熱門文章
PTT遊戲區 即時熱門文章
15
26