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

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

介紹

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

設計

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

  1. 任務須要以線的方式組織,通常都是在每一個任務配置中指定下一個任務的id,每一個任務線的第一個和最後一個比較特殊,第一個任務必須在角色屬性知足條件下自動得到,而最後一個任務由於是故事線的結尾因此不能觸發下一個任務,須要保持任務已結束的狀態,若是故事線增長了後續任務,那麼任務能夠繼續往下順延。git

  2. 任務須要知足條件才能接取,所謂的條件通常都是角色屬性,好比角色等級。好比等級10級以上的可接取,爲了抽象這個需求,任務可接條件設置兩個字段角色屬性類型和屬性值,這個等級的例子就是等級:10。github

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

  4. 任務完成後須要觸發下一個任務,可是若是下一個任務條件不知足,那麼也不容許得到該任務,待角色屬性成長後知足了條件再自動得到。服務器

  5. 任務配置除了支持以上說的參數外,須要流出一些可擴展參數,好比任務獎勵,任務綁定的npc,任務接、交過程當中的對白、過場動畫等。任務系統使用csv作配置,增長配置只須要增長字段就能夠了,每一個任務有map<string, string>類型的參數字段保留了全部擴展配置。異步

任務操做的時序圖

任務操做的狀態圖

總結

  1. 系統中大量使用了事件機制,增長了易用性和可擴展性。角色上線載入數據,使用事件機制,避免了與數據庫模塊產生耦合,同時也很好的支持了異步和同步模式。
  2. 任務系統與客戶端的協議細節沒有作實現,這個使用者在肯定的事件下hook到而後通知客戶端便可,徹底不須要修改任務系統。
  3. 任務系統的接口都已適配到腳本層,利用h2engine 的通用腳本層,不管是Python,lua,js,php均可以使用相同的接口調用任務系統。
  4. GitHub地址: https://github.com/fanchy/h2engine
  5. 關於任務系統使用的屬性管理器:http://www.cnblogs.com/zhiranok/p/h2engine_propmgr.html
  6. 關於遊戲服務器引擎h2engine:http://www.cnblogs.com/zhiranok/p/ffengine.html

更多精彩文章 http://h2cloud.org/動畫

相關文章
相關標籤/搜索