我一直在想這東西要怎麼寫,sanc防具型態很多,所以很多時候
並不需要寫這個(比方把這個效果放在特定某個型態的防具即可)
,但有時可能還是會有用到的時候。
晚點我擬幾種可行的做法。
第一種是比較懶的做法,用 present 來做,給特殊的 id,然後
搭配 heart_beat 每分鐘去呼叫特定函數,然後允許玩家可以最
長 59 秒該物品消失時效果仍常駐,判斷的時間一到,發現該玩
家沒有該物品,該效果就消失。這時效果用 set_temp 是最直覺
的做法。
也就是說大部份時間是去讀玩家的 temp_data,每分鐘做的判斷
才去做 present。
第二種是將這些物品全部寫成虛擬物品,那判斷只要一行:
if(user->query_vobjs("xxx")>0)
虛擬物品也具有方便控制玩家不能輕易丟棄、給人、販賣,但是
比方以受詛咒的某物為例,玩家身上帶有該物時 3p 減半,那怎
麼設定該效果的常駐?我認為最終還是會回到 set_temp 以及周
期性 check 的設定方式上。
第三種就是以 set_temp 及周期性 check 為出發點,然後再運用
times_check 原本就會週期性呼叫的做法,設定一個這類物品的
主控台,由它去執行對線上所有玩家「當他們持有某些物品時就
做哪些常駐效果」,這樣或許會比較好,但是其運作複雜度就會
跟以下的東西成正比:
1.線上玩家數量。
2.有多少種類的物品需執行這樣的判斷。
[編輯中]