123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220 |
-
- using CommonAI.Zone.Helper;
- using CommonLang;
- using CommonLang.IO;
- using NPOI.HSSF.UserModel;
- using NPOI.SS.UserModel;
- using NPOI.XSSF.UserModel;
- using System;
- using System.IO;
- using System.Linq;
- using XmdsCommonServer.XLS.Data;
- namespace XmdsCommonServer.XLS
- {
- public class XLSSkillCfgLoader : XLSLoader
- {
- public const string ACTOR_NAME = "SkillValue";
- public const string MONSTER_SKILL = "MonsterSkillValue";
- public const string PET_SKILL = "PetSkill";
- public const string CARD_SKILL = "CardSkill";
- private HashMap<int, XmdsSkillData> SkillDatas = new HashMap<int, XmdsSkillData>();
- //boss通用技能随机库
- XmdsSkillData [] bossComActiveSkill = null;
- XmdsSkillData [] bossComPassiveSkill = null;
- public XLSSkillCfgLoader(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;
- if (sheet.SheetName == ACTOR_NAME ||
- sheet.SheetName == MONSTER_SKILL ||
- sheet.SheetName == PET_SKILL ||
- sheet.SheetName == CARD_SKILL)
- {
- try
- {
- LoadSheet(sheet, sheet.SheetName == CARD_SKILL);
- }
- catch (Exception error)
- {
- throw new Exception(string.Format("XLSSkillCfgLoader 初始化技能配置错误SheetName = {0},Error = {1}",
- sheet.SheetName, error.ToString()));
- }
- }
- }
- }
- log.Info("XLSSkillCfgLoader 初始化技能配置完成.");
- }
- private void LoadSheet(ISheet sheet, bool isCardSKill)
- {
- int index = 0;
- try
- {
- HashMap<int, XmdsSkillData> activeSkill = new HashMap<int, XmdsSkillData>();
- HashMap<int, XmdsSkillData> passiveSkill = new HashMap<int, XmdsSkillData>();
- bool isMonsterSkill = (sheet.SheetName == MONSTER_SKILL);
- foreach (XmdsSkillData m in LoadSheet<XmdsSkillData>(sheet))
- {
- m.Init();
- if(isCardSKill)
- {
- m.SkillType = (byte)XmdsSkillType.cardSkill;
- }
-
- SkillDatas.Add(m.SkillID, m);
- index++;
- if(isMonsterSkill)
- {
- if((int)XmdsSkillData.XmdsSkillExtKey.BossComActiveSkill == m.SkillExt)
- {
- activeSkill.Add(m.SkillID, m);
- }
- else if ((int)XmdsSkillData.XmdsSkillExtKey.BossComPassiveSkill == m.SkillExt)
- {
- passiveSkill.Add(m.SkillID, m);
- }
- }
- }
- if (isMonsterSkill)
- {
- bossComActiveSkill = activeSkill.Values.ToArray();
- bossComPassiveSkill = passiveSkill.Values.ToArray();
- }
- }
- catch (Exception error)
- {
- throw new Exception(string.Format("XLSSkillCfgLoader Error : index = {0} Error = {1}", index, error.ToString()));
- }
- log.Info(string.Format("loadSheet【{0}】Complete", sheet.SheetName));
- }
- public XmdsSkillData GetSkillData(int skillid)
- {
- XmdsSkillData ret = null;
- SkillDatas.TryGetValue(skillid, out ret);
- return ret;
- }
- //获得boss随机主动技能数
- public int GetBossComActiveNum()
- {
- return this.bossComActiveSkill.Length;
- }
- //获得boss被动技能数
- public int GetBossComPassiveNum()
- {
- return this.bossComPassiveSkill.Length;
- }
- //随机获得一个boss主动技能
- public XmdsSkillData GetBossRandomActiveSkill(Random random)
- {
- XmdsSkillData result = null;
- try
- {
- if (this.bossComActiveSkill.Length <= 0)
- {
- return null;
- }
- int index = random.Next(this.bossComActiveSkill.Length);
- result = this.bossComActiveSkill[index];
- }
- catch(Exception e)
- {
- log.Error(string.Format("GetBossRandomActiveSkill catch - ", e));
- }
-
- return result;
- }
- //随机获得一个boss被动技能
- public XmdsSkillData GetBossRandomPassiveSkill(Random random, XmdsSkillData[] hasList)
- {
- XmdsSkillData result = null;
- int randIndex = 0;
- try
- {
- if (this.bossComPassiveSkill.Length <= 0)
- {
- return null;
- }
- int ntestTimes = 10;
- while(--ntestTimes >= 0)
- {
- randIndex = random.Next(this.bossComPassiveSkill.Length);
- result = this.bossComPassiveSkill[randIndex];
- foreach(XmdsSkillData temp in hasList)
- {
- if(temp == null || temp.SkillID != result.SkillID)
- {
- break;
- }
- else
- {
- result = null;
- }
- }
- if (result != null)
- {
- break;
- }
- }
- }
- catch (Exception e)
- {
- log.Error("GetBossRandomPassiveSkill catch - " + (hasList == null ? "null" : ("序列:" + hasList.Length)) + ", 技能数:" +
- this.bossComPassiveSkill.Length + ", 随机index: " + randIndex + ", e: " + e);
- result = null;
- }
- return result;
- }
- }
- }
|