2007年1月29日 星期一

Mud指令

首先要明白的是,因為發出指令後有所謂的凍結時間(Freeze time),因此MUD的指令分成下列幾大類:


  1. 瞬間發出,且不受Freeze影響的指令(say talk tell chat prac等一般性指令)
  2. 瞬間發出,但是在發出之前會檢查目前是否在Freeze狀態,若回答為否,則有兩種類型:
    • 發出後,不設定freeze(n e w s u d 等移動指令)
    • 發出後設定freeze(flee scan等技能)

    若是檢定為是,則將指令移入本shell的等待指令區,Timer以一定頻率檢查此區,並執行指令(執行指令前會偵察是否狀態在freeze)

  3. 非瞬發指令,此類指令將放入Timer的Command list中,並設定此生物的Freeze。
    若本類指令有frozen time與execute time,則先檢定
    caller.getFrozenTime() + command.frozenTime 是否超出規定的凍結時間上限(預設1分鐘),若是則退回指令並列印錯誤訊息給此caller。若否則將command.frozenTime加在caller身上,並用command.executeTime推算要插入的commandLists的位置。若輸入指令時已經在frozenTime,則將指令插入:(((caller.getFrozenTime()+command.executeTime)/4000)+1)%150,其中的/4000是找出可插入的適當位置,而+1是因為要將除出來的小數無條件進位

沒有留言: