using CommonLang; using CommonLang.IO; using NPOI.HSSF.UserModel; using NPOI.SS.UserModel; using NPOI.XSSF.UserModel; using System; using System.IO; using XmdsCommonServer.XLS.Data; namespace XmdsCommonServer.XLS { public class XLSRandomMonsterSkillLoader : XLSLoader { public enum MonsterRandomSkillType : int { None = 0, OnlyActive = 1, //仅主动 OnlyPassive = 2, //仅被动 //Active_Passive = 3, //主动 & 被动 } private HashMap<int, MonsterSkills> monsterSkills = new HashMap<int, MonsterSkills>(); //默认的基础概率信息 MonsterSkills defaultSkills; public XLSRandomMonsterSkillLoader(string path) { byte[] data = Resource.LoadData(path); if (data == null) { throw new Exception("Can not read xls file : " + path); } using (MemoryStream ms = new MemoryStream(data)) { IWorkbook Workbook = null; if (path.Contains(".xlsx")) { Workbook = new XSSFWorkbook(ms); } else if (path.Contains(".xls")) { Workbook = new HSSFWorkbook(ms); } for (int si = 0; si < Workbook.NumberOfSheets; si++) { ISheet sheet = Workbook.GetSheetAt(si) as ISheet; try { if (sheet.SheetName == "MonsterSkills") { LoadSheet(sheet); } } catch (Exception error) { throw new Exception(string.Format("XLSRandomMonsterSkillLoader 初始化怪物配置错误SheetName = {0},Error = {1}", sheet.SheetName, error.ToString())); } } } log.Info("XLSRandomMonsterSkillLoader 初始化怪物配置完成."); } private void LoadSheet(ISheet sheet) { int index = 0; try { foreach (MonsterSkills m in LoadSheet<MonsterSkills>(sheet)) { monsterSkills.Add(m.MonsterID, m); index++; if(m.MonsterID == 0) { defaultSkills = m; } } } catch (Exception error) { throw new Exception(string.Format("XLSRandomMonsterSkillLoader Error : index = {0} Error = {1}", index, error.ToString())); } log.Info(string.Format("loadSheet【{0}】Complete", sheet.SheetName)); } public MonsterSkills GetMonsterSkillInfo(int monsterId) { return this.monsterSkills.Get(monsterId); } public MonsterSkills GetMonsterSkillInfo() { return defaultSkills; } } }