遊戲伺服器設計之任務系統

2021-09-21 15:36:37 字數 1366 閱讀 3596

任務系統是遊戲中最重要的系統之一,本文旨在設計乙個輕量清晰的任務系統。通用易擴充套件是本系統關注的重點。任務系統中當角色的條件滿足時,自動觸發每一型別的任務,每個任務有其所需的完成條件,當角色完成了指定的操作後,則會觸發任務自動完成,任務完成後一般玩家會領取對應的獎勵,結束任務,此任務的生命週期結束,如果這個任務有後續任務,那麼會自動觸發下乙個任務,從玩家角度講,任務是一條故事線,所以經常會說主線、支線任務就是這個原因。

當設計任務時有如下幾個重點:

任務需要以線的方式組織,一般都是在每個任務配置中指定下乙個任務的id,每個任務線的第乙個和最後乙個比較特殊,第乙個任務必須在角色屬性滿足條件下自動獲得,而最後乙個任務因為是故事線的結尾所以不能觸發下乙個任務,需要保持任務已結束的狀態,如果故事線增加了後續任務,那麼任務可以繼續往下順延。

任務需要滿足條件才能接取,所謂的條件一般都是角色屬性,比如角色等級。比如等級10級以上的可接取,為了抽象這個需求,任務可接條件設定兩個字段角色屬性型別和屬性值,這個等級的例子就是等級:10。

任務接取後角色在遊戲中做相關的操作,如果跟接取的任務相關,那麼任務的進度會自動更新,那麼二者是組合產生關聯的呢?我們使用事件機制,玩家的遊戲行為拆分出一系列的事件型別,用三個字段表示,事件型別,事件物件,事件值,比如打怪,事件型別為擊殺怪物,事件物件為樹妖,事件值為1。對應的任務完成條件也是這三個配置,不過任務配置中的值為目標值,另外有一種特殊情況比較常見就是狀態完成條件,比如某任務需要角色達到100級完成,這個時候就用乙個特殊的事件型別,屬性表示狀態類的完成條件,本例中配置就應該為屬性:等級:100。

任務完成後需要觸發下乙個任務,但是如果下乙個任務條件不滿足,那麼也不允許獲得該任務,待角色屬性成長後滿足了條件再自動獲得。

任務配置除了支援以上說的引數外,需要流出一些可擴充套件引數,比如任務獎勵,任務繫結的npc,任務接、交過程中的對白、過場動畫等。任務系統使用csv做配置,增加配置只需要增加欄位就可以了,每個任務有map型別的引數字段保留了所有擴充套件配置。

系統中大量使用了事件機制,增加了易用性和可擴充套件性。角色上線載入資料,使用事件機制,避免了與資料庫模組產生耦合,同時也很好的支援了非同步和同步模式。

任務系統與客戶端的協議細節沒有做實現,這個使用者在確定的事件下hook到然後通知客戶端即可,完全不需要修改任務系統。

任務系統的介面都已適配到指令碼層,利用h2engine 的通用指令碼層,無論是python,lua,js,php都可以使用相同的介面呼叫任務系統。

關於任務系統使用的屬性管理器:

關於遊戲伺服器引擎h2engine:

遊戲伺服器設計之NPC系統

npc系統是遊戲中非常重要的系統,設計的好壞很大程度上影響遊戲的體驗。npc在遊戲中有如下作用 引導玩家體驗遊戲內容,一般遊戲內有很多主線 支線任務,而任務的介紹 接取 領取獎勵等操作都是通過npc的操作,一般會有幾個核心npc,再不停的任務引導中,玩家會對核心npc印象深刻,強化了遊戲代入感。核心...

遊戲伺服器設計之屬性管理器

遊戲中角色擁有的屬性值很多,運營多年的遊戲,往往會有很多個成長線,每個屬性都有可能被n個成長線模組增減數值。舉例當角色戴上 時候hp 100點,卸下 時hp 100點,這樣加減邏輯只有一處還比較好控制,如果某天有個特殊功能當被某技能攻擊時,角色 會被擊落,這樣就會出現減數值的操作不止一處。如果邏輯處...

遊戲伺服器架構設計

一 棋牌類伺服器的特點 1,棋牌類不分割槽不分服 一般來說,棋牌遊戲都是不分割槽不分服的。所以棋牌類伺服器要滿足隨著使用者量的增加而擴充套件的需要。2,房間模式 即在同一局遊戲中就是在同乙個房間中,同乙個房間中的人可以接收到其他人的訊息。3,每個房間的操作必須是順 序性 這個特性類似與一般遊戲的回合...