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 XLSNPCDataLoader : XLSLoader { private HashMap NPCDatas = new HashMap(); public XLSNPCDataLoader(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 == "NpcList" ) { LoadSheet(sheet); } } catch ( Exception error ) { log.Error(string.Format("XLSNPCDataLoader 初始化NPC配置错误SheetName = {0},Error = {1}", sheet.SheetName, error.ToString())); } } } log.Info("XLSMonsterDataLoader 初始化怪物配置完成."); } private void LoadSheet(ISheet sheet) { string name = null; int index = 0; NPCData temp = null; try { foreach ( NPCData m in LoadSheet(sheet) ) { //name = string.Format("{0}_{1}", m.NpcID, m.Level); name = m.NpcID.ToString(); temp = m; NPCDatas.Add(name, m); index++; } } catch ( Exception error ) { throw new Exception(string.Format("XLSNPCDataLoader Error : index = {0} name = {1} Error = {2}", index, name, error.ToString())); } log.Info(string.Format("loadSheet【{0}】Complete", sheet.SheetName)); } public NPCData GetNPCAbility(int unit_template_id, int unit_level) { NPCData ret = null; if ( !NPCDatas.TryGetValue(unit_template_id.ToString(), out ret) ) { log.Error(string.Format("npc表不存在npc, GetNPCAbility Error: id = {0} level = {1}", unit_template_id, unit_level)); } return ret; } } }