XmdsDataMgr.cs 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402
  1. 
  2. using CommonAI.Zone;
  3. using CommonAI.Zone.Instance;
  4. using CommonAI.Zone.ZoneEditor;
  5. using CommonLang;
  6. using CommonLang.IO;
  7. using System;
  8. using System.Collections.Generic;
  9. using System.Diagnostics;
  10. using System.IO;
  11. using System.Linq;
  12. using System.Text;
  13. using XmdsCommon.EditorData;
  14. using XmdsCommon.Plugin;
  15. using XmdsCommonServer.XLS;
  16. using XmdsCommonServer.XLS.Data;
  17. namespace XmdsCommonServer.Plugin
  18. {
  19. /// <summary>
  20. /// FileName: XmdsDataMgr.cs
  21. /// Author: Alex.Yu
  22. /// Corporation:...
  23. /// Description: Xmds配置数据管理类.
  24. /// DateTime: 2015/7/7 18:35:41
  25. /// </summary>
  26. public class XmdsDataMgr
  27. {
  28. private static XmdsDataMgr mInstance = null;
  29. private XLSMonsterDataLoader mMonsterDataLoader = null;
  30. public XLSMonsterDynamicLoader mMonsterDynamicLoader = null;
  31. private XLSSkillCfgLoader mXLSSkillCfgLoader = null;
  32. private XLSNPCDataLoader mXLSNPCDataLoader = null;
  33. private XLSRandomMonsterSkillLoader mXLSRandomMonsterskillLoader = null;
  34. private XLSBSConfigLoader mXLSBSConfigLoader = null;
  35. //buff配置表
  36. private XLSBuffConfigLoader mXLSBuffConfigLoader = null;
  37. //随机名字
  38. private XLSRandomNameLoader mXLSRandomNameLoader = null;
  39. private XLSZhanYaoDataLoader mXLSZhanYaoDataLoader = null;
  40. //场景,山大王对应配置
  41. private XLSMountainKingConfigLoader mMountainKingConfigLoader = null;
  42. private XmdsDataMgr()
  43. {
  44. mInstance = this;
  45. }
  46. public static XmdsDataMgr GetInstance()
  47. {
  48. if ( mInstance == null )
  49. {
  50. new XmdsDataMgr();
  51. }
  52. return mInstance;
  53. }
  54. #region 怪物能力配置.
  55. /// <summary>
  56. /// 加载怪物配置数据.
  57. /// </summary>
  58. /// <param name="path"></param>
  59. public void LoadMonsterData(string path)
  60. {
  61. Stopwatch sw = Stopwatch.StartNew();
  62. mMonsterDataLoader = new XLSMonsterDataLoader(path);
  63. sw.Stop();
  64. XmdsVirtual.FormatLog("LoadMonsterData usetime {0}", sw.ElapsedMilliseconds);
  65. }
  66. public void LoadMonsterDynamicData(string path)
  67. {
  68. Stopwatch sw = Stopwatch.StartNew();
  69. mMonsterDynamicLoader = new XLSMonsterDynamicLoader(path);
  70. sw.Stop();
  71. XmdsVirtual.FormatLog("LoadMonsterDynamicData usetime {0}", sw.ElapsedMilliseconds);
  72. }
  73. public void LoadMountainKingData(string path)
  74. {
  75. Stopwatch sw = Stopwatch.StartNew();
  76. mMountainKingConfigLoader = new XLSMountainKingConfigLoader(path);
  77. sw.Stop();
  78. XmdsVirtual.FormatLog("LoadMountainKingData usetime {0}", sw.ElapsedMilliseconds);
  79. }
  80. /// <summary>
  81. /// 获取怪物能力.
  82. /// </summary>
  83. /// <param name="sceneType"></param>
  84. /// <param name="tempID"></param>
  85. /// <param name="random"></param>
  86. /// <param name="needFormat"></param>
  87. /// <returns></returns>
  88. public MonsterData GetMonsterData(string sceneType, int tempID, Random random, bool needFormat = true)
  89. {
  90. MonsterData ret = null;
  91. if ( mMonsterDataLoader != null )
  92. {
  93. ret = mMonsterDataLoader.GetMonsterAbility(sceneType, tempID, random,needFormat);
  94. }
  95. return ret;
  96. }
  97. public MonsterProp GetSingleMonsterProp(int level,int type)
  98. {
  99. MonsterProp ret = null;
  100. if (mMonsterDynamicLoader != null)
  101. {
  102. ret = mMonsterDynamicLoader.GetSingleMonsterProp(level,type);
  103. }
  104. return ret;
  105. }
  106. public MonsterProp GetMultipleMonsterProp(int level, int type)
  107. {
  108. MonsterProp ret = null;
  109. if (mMonsterDynamicLoader != null)
  110. {
  111. ret = mMonsterDynamicLoader.GetMultipleMonsterProp(level, type);
  112. }
  113. return ret;
  114. }
  115. public OrigData GetOrigData(int level)
  116. {
  117. OrigData ret = null;
  118. if (mMonsterDynamicLoader != null)
  119. {
  120. ret = mMonsterDynamicLoader.GetOrigData(level);
  121. }
  122. return ret;
  123. }
  124. public TowerMonsterRatio GetTowerMonsterRatio(int floor)
  125. {
  126. TowerMonsterRatio ret = null;
  127. if (mMonsterDynamicLoader != null)
  128. {
  129. ret = mMonsterDynamicLoader.GetTowerMonsterRatio(floor);
  130. }
  131. return ret;
  132. }
  133. public TowerMonsterRatio GetAbyssMonsterRatio(int floor)
  134. {
  135. TowerMonsterRatio ret = null;
  136. if (mMonsterDynamicLoader != null)
  137. {
  138. ret = mMonsterDynamicLoader.GetAbyssMonsterRatio(floor);
  139. }
  140. return ret;
  141. }
  142. public GuildBossRatio GetGuildBossRatio(int bossLv)
  143. {
  144. GuildBossRatio ret = null;
  145. if (mMonsterDynamicLoader != null)
  146. {
  147. ret = mMonsterDynamicLoader.GetGuildBossRatio(bossLv);
  148. }
  149. return ret;
  150. }
  151. public UserDefineConfig GetUserDefineConfig(int type)
  152. {
  153. UserDefineConfig ret = null;
  154. if (mMonsterDynamicLoader != null)
  155. {
  156. ret = mMonsterDynamicLoader.GetUserDefineConfig(type);
  157. }
  158. return ret;
  159. }
  160. public DungeonMonsterRatio GetDungeonMonsterRatio(int type)
  161. {
  162. DungeonMonsterRatio ret = null;
  163. if (mMonsterDynamicLoader != null)
  164. {
  165. ret = mMonsterDynamicLoader.GetDungeonMonsterRatio(type);
  166. }
  167. return ret;
  168. }
  169. public MonsterData GetSummonMonsterData(string sceneType, int tempID, int lv, Random random)
  170. {
  171. MonsterData ret = null;
  172. if (mMonsterDataLoader != null)
  173. {
  174. ret = mMonsterDataLoader.GetSummonMonsterAbility(sceneType, tempID, lv, random);
  175. }
  176. return ret;
  177. }
  178. #endregion
  179. #region 技能数据配置.
  180. public void LoadSkillCfgData(string path)
  181. {
  182. Stopwatch sw = Stopwatch.StartNew();
  183. mXLSSkillCfgLoader = new XLSSkillCfgLoader(path);
  184. sw.Stop();
  185. XmdsVirtual.FormatLog("LoadSkillCfgData usetime {0}", sw.ElapsedMilliseconds);
  186. }
  187. public void LoadBuffCfgData(string path)
  188. {
  189. Stopwatch sw = Stopwatch.StartNew();
  190. mXLSBuffConfigLoader = new XLSBuffConfigLoader(path);
  191. sw.Stop();
  192. XmdsVirtual.FormatLog("LoadBuffCfgData usetime {0}", sw.ElapsedMilliseconds);
  193. }
  194. public void LoadRandomNameData(string path)
  195. {
  196. Stopwatch sw = Stopwatch.StartNew();
  197. mXLSRandomNameLoader = new XLSRandomNameLoader(path);
  198. sw.Stop();
  199. XmdsVirtual.FormatLog("LoadBuffCfgData usetime {0}", sw.ElapsedMilliseconds);
  200. }
  201. public XmdsSkillData GetXmdsSkillData(int skillid)
  202. {
  203. XmdsSkillData ret = null;
  204. if ( mXLSSkillCfgLoader != null )
  205. {
  206. ret = mXLSSkillCfgLoader.GetSkillData(skillid);
  207. }
  208. return ret;
  209. }
  210. public BuffConfig GetBuffConfigData(int triggerID)
  211. {
  212. if (mXLSBuffConfigLoader != null)
  213. {
  214. return mXLSBuffConfigLoader.GetBuffData(triggerID);
  215. }
  216. return null;
  217. }
  218. public HashMap<int, BuffConfig> GetBuffConfigDatas()
  219. {
  220. if (mXLSBuffConfigLoader != null)
  221. {
  222. return mXLSBuffConfigLoader.GetAllDatas();
  223. }
  224. return null;
  225. }
  226. #endregion
  227. #region NPC数据配置.
  228. public void LoadNPCData(string path)
  229. {
  230. Stopwatch sw = Stopwatch.StartNew();
  231. mXLSNPCDataLoader = new XLSNPCDataLoader(path);
  232. sw.Stop();
  233. XmdsVirtual.FormatLog("LoadNPCData usetime {0}", sw.ElapsedMilliseconds);
  234. }
  235. public NPCData GetNPCData(int templateID, int lv)
  236. {
  237. NPCData ret = null;
  238. if ( mXLSNPCDataLoader != null )
  239. {
  240. ret = mXLSNPCDataLoader.GetNPCAbility(templateID, lv);
  241. }
  242. return ret;
  243. }
  244. public void LoadZhanYaoData(string path)
  245. {
  246. Stopwatch sw = Stopwatch.StartNew();
  247. mXLSZhanYaoDataLoader = new XLSZhanYaoDataLoader(path);
  248. sw.Stop();
  249. XmdsVirtual.FormatLog("LoadNPCData usetime {0}", sw.ElapsedMilliseconds);
  250. }
  251. public bool IsZhanYaoCrit(InstanceUnit unit, int bossLevel, int level, int curHitNums, ref int outStateExt)
  252. {
  253. ZhanYaoData data = mXLSZhanYaoDataLoader.GetZhanYaoData(level);
  254. if(data == null || bossLevel > data.Zhanyao_Data1)
  255. {
  256. return false;
  257. }
  258. outStateExt = data.Zhanyao_CHD;
  259. if (data.Zhanyao_maxtime >= 0 && curHitNums >= data.Zhanyao_maxtime)
  260. {
  261. return true;
  262. }
  263. else if (unit.RandomN.Next(10000) < data.Zhanyao_CHC)
  264. {
  265. return true;
  266. }
  267. return false;
  268. }
  269. public void LoadMonsterSkillInfo(String path)
  270. {
  271. Stopwatch sw = Stopwatch.StartNew();
  272. mXLSRandomMonsterskillLoader = new XLSRandomMonsterSkillLoader(path);
  273. sw.Stop();
  274. XmdsVirtual.FormatLog("LoadNPCData usetime {0}", sw.ElapsedMilliseconds);
  275. }
  276. public void LoadBSConfig(String path)
  277. {
  278. Stopwatch sw = Stopwatch.StartNew();
  279. mXLSBSConfigLoader = new XLSBSConfigLoader(path);
  280. sw.Stop();
  281. XmdsVirtual.FormatLog("LoadBSConfig usetime {0}", sw.ElapsedMilliseconds);
  282. }
  283. public MonsterSkills GetMonsterSkillInfo(int monsterId)
  284. {
  285. MonsterSkills ret = null;
  286. if (mXLSRandomMonsterskillLoader != null)
  287. {
  288. ret = mXLSRandomMonsterskillLoader.GetMonsterSkillInfo(monsterId);
  289. }
  290. return ret;
  291. }
  292. public MonsterSkills GetMonsterSkillInfo()
  293. {
  294. return mXLSRandomMonsterskillLoader.GetMonsterSkillInfo();
  295. }
  296. //获得boss随机主动技能数
  297. public int GetBossComActiveNum()
  298. {
  299. return this.mXLSSkillCfgLoader.GetBossComActiveNum();
  300. }
  301. //获得boss被动技能数
  302. public int GetBossComPassiveNum()
  303. {
  304. return this.mXLSSkillCfgLoader.GetBossComPassiveNum();
  305. }
  306. //随机获得一个boss主动技能
  307. public XmdsSkillData GetBossRandomActiveSkill(Random random)
  308. {
  309. return this.mXLSSkillCfgLoader.GetBossRandomActiveSkill(random);
  310. }
  311. //随机获得一个boss被动技能
  312. public XmdsSkillData GetBossRandomPassiveSkill(Random random, XmdsSkillData[] hasList)
  313. {
  314. return this.mXLSSkillCfgLoader.GetBossRandomPassiveSkill(random, hasList);
  315. }
  316. //多人深渊秘境,怪物数值加成
  317. public AbyssMutilAddition GetAbyssMutilAddition()
  318. {
  319. return this.mXLSBSConfigLoader.GetMutilAbyssAddition();
  320. }
  321. public string GetRanomName()
  322. {
  323. return this.mXLSRandomNameLoader.GetRanomName();
  324. }
  325. /** 获取一个地图的王 */
  326. public int GetMapKingID(int mapID)
  327. {
  328. return this.mMountainKingConfigLoader == null ? 0 : this.mMountainKingConfigLoader.GetMapKing(mapID);
  329. }
  330. /** 获得山大王列表 */
  331. public HashSet<int> GetMountainKings()
  332. {
  333. return this.mMountainKingConfigLoader.GetMountainKings();
  334. }
  335. #endregion
  336. }
  337. }