ExcelToLua工具
来源:互联网 发布:js dragobject 编辑:程序博客网 时间:2024/06/05 04:10
前言
游戏开发中基本都需要这么一个工具,就是把策划配的excel表转换为我们程序需要的格式读取。刚好公司新项目也有这么个需求:给你一个xml配置,对应配置每张excel表需要读取的字段,需要读取的工作薄,字段名,导出文件名,数据类型等。然后根据这些配置信息去筛选excel对应内容,导出到本地。
项目准备用Lua脚本写,因此这个工具是用C#实现,将excel表转换为Lua的table表。(也是发了几天打LOL的时间,现在无私分享给大家~~~)
资源
excle表部分截图
xml部分配置信息
<?xml version="1.0" encoding="GB2312"?><database> <table name="NPC.xls"> <SHEET name="1" filename="NpcBase.tbl" struct="NpcB" index="编号"> <FIELD name="编号" code="id" type="DWORD" /> <FIELD name="名称" code="strName" type="string" /> <FIELD name="类型" code="dwType" type="DWORD" /> <FIELD name="等级" code="dwLevel" type="DWORD" /> <FIELD name="生命值" code="dwBlood" type="DWORD" /> <FIELD name="帧数" code="dwFrames" type="DWORD" /> <FIELD name="方向数" code="dwDirectNum" type="DWORD" /> <FIELD name="图片编号" code="dwPic" type="string" /> <FIELD name="标识" code="npcFlag" type="string" /> <FIELD name="头像编号" code="dwHeaderID" type="DWORD" /> <FIELD name="宠物头像编号" code="dwPetHeaderID" type="DWORD" /> <FIELD name="攻击类型" code="dwAttType" type="DWORD" /> <FIELD name="面积" code="strArea" type="string" /> <FIELD name="客户端访问距离" code="dwVisitDistance" type="DWORD" /> <FIELD name="图片标识" code="dwNpcIcon" type="DWORD" /> <FIELD name="头顶距离" code="headDis" type="DWORD" /> <FIELD name="影子编号" code="yingzi" type="string"/> <FIELD name="基本对话" code="basetask" type="string" /> <FIELD name="被击动作" code="byhitAction" type="string" /> <FIELD name="变色R" code="R" type="DWORD" /> <FIELD name="变色G" code="G" type="DWORD" /> <FIELD name="变色B" code="B" type="DWORD" /> <FIELD name="变色A" code="A" type="DWORD" /> <FIELD name="缩放" code="scale" type="DWORD" /> </SHEET> </table> <table name="Skill.xls"> <SHEET name="技能表" filename="SkillBase.tbl" struct="SkillB" index=""> <FIELD name="技能ID" code="id" type="DWORD" /> <FIELD name="技能名称" code="strName" type="string" /> <FIELD name="技能等级" code="dwLev" type="DWORD" /> <FIELD name="武器类型" code="strWeaponType" type="string" /> <FIELD name="技能系别" code="dwGenius" type="DWORD" /> <FIELD name="技能树别" code="dwCareer" type="DWORD" /> <FIELD name="前提技能点数" code="dwRequirePoint" type="DWORD" /> <FIELD name="前提技能" code="strRequireSkill" type="string" /> <FIELD name="消耗MP" code="dwMp" type="DWORD" /> <FIELD name="消耗HP" code="dwHp" type="DWORD" /> <FIELD name="需求等级" code="dwRequireLev" type="DWORD" /> <FIELD name="使用方式" code="dwUseType" type="DWORD" /> <FIELD name="冷却时间" code="dwCoolDownTime" type="DWORD" /> <FIELD name="目标类型" code="dwTargetType" type="DWORD" /> <FIELD name="客户端攻击距离" code="dwDistance" type="DWORD" /> <FIELD name="命中方式" code="dwHitMode" type="DWORD" /> <FIELD name="命中间隔时间" code="dwTimePerGrid" type="DWORD" /> <FIELD name="客户端作用范围" code="dwArea" type="DWORD" /> <FIELD name="伤害加成" code="dwAttackAdd" type="DWORD" /> <FIELD name="所需道具" code="dwGoodID" type="DWORD" /> <FIELD name="消耗物品类型" code="dwGoodsType" type="DWORD" /> <FIELD name="物品消耗数量" code="dwGoodsNum" type="DWORD" /> <FIELD name="效果字段" code="strEffect" type="string" /> <FIELD name="特效" code="dwEffectID" type="DWORD" /> <FIELD name="被击" code="byAttack" type="DWORD" /> <FIELD name="技能图标" code="dwIconID" type="DWORD" /> <FIELD name="技能说明" code="strHint" type="string" /> <FIELD name="选中" code="dwCheck" type="DWORD" /> <FIELD name="需求银币" code="dwMoney" type="DWORD" /> <FIELD name="需求经验" code="dwExp" type="QWORD" /> <FIELD name="技能操作说明" code="strHint1" type="string" /> <FIELD name="附加作用" code="strHint2" type="string" /> <FIELD name="攻击流程" code="dwAttackLine" type="DWORD" /> <FIELD name="技能最大等级" code="maxLevel" type="DWORD" /> <FIELD name="skilltype" code="skilltype" type="DWORD" /> <FIELD name="skillintervaltime" code="skillintervaltime" type="DWORD" /> <FIELD name="技能战斗力" code="sword" type="DWORD" /> <FIELD name="男角色无马匹延迟" code="delayNan" type="DWORD" /> <FIELD name="女性无马匹延迟" code="delayNv" type="DWORD" /> <FIELD name="男角色有马匹延迟" code="delayManHorse" type="DWORD" /> <FIELD name="女性有马匹延迟" code="delayNvHourse" type="DWORD" /> <FIELD name="花费灵石" code="CostLingshi" type="DWORD" /> </SHEET> </table> <table name="State.xls"> <SHEET name="状态表" filename="CharacterStateBase.tbl" struct="CharacterStateB" index="状态ID"> <FIELD name="状态ID" code="id" type="DWORD" /> <FIELD name="状态名称" code="strName" type="string" /> <!--<FIELD name="动画编号1" code="dwPicID1" type="DWORD" /> <FIELD name="动画编号2" code="dwPicID2" type="DWORD" /> <FIELD name="动画编号3" code="dwPicID3" type="DWORD" /> <FIELD name="动画编号4" code="dwStateType" type="DWORD" />--> <FIELD name="状态图标" code="dwStateID" type="DWORD" /> <FIELD name="说明" code="strDesc" type="string" /> </SHEET> </table> <table name="map.xls"> <SHEET name="Sheet1" filename="map.tbl" struct="MapB" index="地图id"> <FIELD name="地图id" code="mapId" type="DWORD" /> <FIELD name="阻挡" code="blockFile" type="string" /> <FIELD name="X最大片数" code="XMaxPlane" type="DWORD" /> <FIELD name="Y最大片数" code="YMaxPlane" type="DWORD" /> <FIELD name="状态" code="slice" type="WORD" /> <FIELD name="偏移量X" code="poseX" type="float" /> <FIELD name="偏移量Y" code="poseY" type="float" /> <FIELD name="最大X坐标" code="maxX" type="WORD" /> <FIELD name="最大Y坐标" code="maxY" type="WORD" /> <FIELD name="地图名称" code="mapfileName" type="string" /> <FIELD name="地图显示名称" code="mapName" type="string" /> <FIELD name="是否显示" code="showMap" type="WORD" /> <FIELD name="地图宽度w" code="maxW" type="WORD" /> <FIELD name="地图高度h" code="maxH" type="WORD" /> </SHEET> </table> <table name="Quest.xls"> <SHEET name="对话" filename="NpcDialogue.tbl" struct="NpcDialogue" index="任务ID"> <FIELD name="任务ID" type="DWORD" code="taskid"/> <FIELD name="任务名称" type="string" code="name"/> <FIELD name="任务目标" type="string" code="taskTarget"/> <FIELD name="任务对话{可接}" type="string" code="acceptDia"/> <FIELD name="任务对话{已接}" type="string" code="alreadyDia"/> <FIELD name="任务对话{失败}" type="string" code="taskFailedDia" /> <FIELD name="任务对话{完成}" type="string" code="taskScessDia"/> <FIELD name="任务描述" type="string" code="taskDis"/> <FIELD name="剧情对话" type="string" code="qingjingTips"/> </SHEET> <SHEET name="任务" filename="taskB.tbl" struct="taskB" index="任务ID"> <FIELD name="任务ID" type="DWORD" code="taskid"/> <FIELD name="任务名称" type="string" code="name"/> <FIELD name="显示名称" type="string" code="showName"/> <FIELD name="任务分类" type="DWORD" code="taskType"/> <FIELD name="接任务npc" type="string" code="acceptNpc"/> <FIELD name="交任务npc" type="string" code="receivedNpc"/> <FIELD name="前置脚本开关" type="QWORD" code="frontScript" /> <FIELD name="前提任务" type="DWORD" code="frontTaskID"/> <FIELD name="最小等级" type="DWORD" code="minLevel" /> <FIELD name="最大等级" type="DWORD" code="maxLevel"/> <FIELD name="附件属性" type="string" code="property"/> <FIELD name="是否显示飞天符" type="WORD" code="flyType"/> <FIELD name="功能ID" type="WORD" code="NpcFunID"/> </SHEET> <SHEET name="子任务" filename="subtasks.tbl" struct="subTasks" index=""> <FIELD name="任务ID" type="DWORD" code="taskid"/> <FIELD name="子任务ID" type="DWORD" code="subTaskID"/> <FIELD name="子任务类型" type="DWORD" code="subType"/> <FIELD name="目标描述" type="string" code="targetDes"/> <FIELD name="数量" type="DWORD" code="targetNum"/> <FIELD name="目标ID" type="QWORD" code="targetID"/> <FIELD name="场景名称" type="string" code="sceneName" /> <FIELD name="场景限制" type="string" code="sceneCheck" /> <FIELD name="坐标" type="string" code="targetPos"/> <FIELD name="附加属性" type="string" code="property"/> </SHEET> <SHEET name="日常任务" filename="daytasks.tbl" struct="DayTasks" index="日常任务Id"> <FIELD name="日常任务Id" type="DWORD" code="dayTaskid"/> <!--<FIELD name="任务名称" type="DWORD" code="subTaskID"/>--> <FIELD name="任务日" type="string" code="dayTask"/> <FIELD name="开始时间" type="string" code="dayKaishiTime"/> <FIELD name="结束时间" type="string" code="dayJieshuTime"/> <FIELD name="可接次数" type="DWORD" code="dayAcceptTime"/> <FIELD name="附加属性" type="string" code="dayProtShuxing" /> </SHEET> <SHEET name="环任务" filename="huantasks.tbl" struct="HuanTasks" index="环任务Id"> <FIELD name="环任务Id" type="DWORD" code="huanTaskid"/> <!--<FIELD name="任务名称" type="DWORD" code="subTaskID"/>--> <FIELD name="环轮换算" type="string" code="huanLun"/> <FIELD name="最大日轮数" type="string" code="maxRiLun"/> <FIELD name="最大周轮数" type="string" code="maxWeekLun"/> <FIELD name="环系数" type="string" code="huanIndex"/> <FIELD name="轮系数" type="string" code="lunIndex" /> </SHEET> <SHEET name="任务组" filename="taskZu.tbl" struct="taskZu" index="任务组Id"> <FIELD name="任务组Id" type="DWORD" code="taskID"/> <FIELD name="任务名" type="string" code="taskShowName"/> <FIELD name="类型" type="WORD" code="taskType"/> <FIELD name="任务组列表" type="string" code="taskList"/> </SHEET> </table> <table name="boss.xls"> <SHEET name="基础配置" filename="boss.tbl" struct="boss" index=""> <FIELD name="ID" type="DWORD" code="ID" /> <FIELD name="是否显示" type="DWORD" code="isShow" /> <FIELD name="副本名" type="string" code="fubenName" /> <FIELD name="类型" type="DWORD" code="type" /> <FIELD name="等级" type="DWORD" code="level" /> <FIELD name="战力" type="DWORD" code="power" /> <FIELD name="刷新时间" type="DWORD" code="refreshTime" /> <FIELD name="刷新时间描述" type="string" code="refreshTimeDes" /> <FIELD name="图片ID" type="string" code="picName" /> <FIELD name="掉落描述" type="string" code="DropDes" /> </SHEET> </table></database>
完整源码
说明:路径使用相对路径,需要对当前工作路径往上找到根目录,从这个根目录开始再分别指定xml,excel,和lua表输出路径。还有excel表分中文(cn),英文(en),纯数据的类别,所以输出lua路径是要和excel表读取路径的最后子目录是一致的。这里只是对自己项目的需求说明,主要核心是解析XML与OleDb数据库读取excel表,其它细节不同需求逻辑都不同。
using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Threading.Tasks;using System.Xml;using System.Xml.XPath;using System.Data;using System.ComponentModel;using System.Collections;using System.Data.OleDb;using System.IO;namespace exceltolua{ class Program { static string m_outLuaRootPath; //输出lua表根目录 static string m_excelRootPath; //excel表根目录目录 static string m_xmlPath; //xml目录 static String[,] m_cExcelData; //完整数据表数据 static String[,] m_rExcelData; //实际需要的数据表数据 static int m_nConRow = 0; //完整数据表行数 static int m_nConCol = 0; //完整数据表列数 static int m_nRealRow = 0; //实际数据表行数 static int m_nRealCol = 0; //实际数据表列数 static String m_sStructName; //lua表对象名 static String m_OutputFileName; //lua本地保存名 static String[] m_sStructDataType; //字段数据类型(number or string) static String[] m_sStructVariable; //字段变量名 static String[] m_sStructAnnotation; //字段注释 /*遍历指定文件目录下的所有文件,包括子目录*/ static List<FileInfo> m_List = new List<FileInfo>(); static int m_count = 0; static public List<FileInfo> GetFilesByDir(string path) { DirectoryInfo di = new DirectoryInfo(path); //找到该目录下的文件 FileInfo[] fi = di.GetFiles("*.xls"); //把FileInfo[]数组转换为List List<FileInfo> list = fi.ToList<FileInfo>(); return list; } /*读取所有excel文件名,保存至list容器中*/ static public List<FileInfo> GetAllFiles(string path) { DirectoryInfo dir = new DirectoryInfo(path); if (m_count < 1) { //找到该目录下的文件 FileInfo[] fi = dir.GetFiles("*.xls"); m_List = fi.ToList<FileInfo>(); m_count = m_count + 1; } else { List<FileInfo> subList = GetFilesByDir(path); foreach (FileInfo subFile in subList) { m_List.Add(subFile); } } DirectoryInfo[] subDir = dir.GetDirectories(); string Spath = ""; foreach (DirectoryInfo d in subDir) { Spath = path + "\\" + d.ToString() + "\\"; GetAllFiles(Spath); } return m_List; } /*.xls表是否存在,存在返回对应表iter,否则-1*/ static public int isExistExcel(string name) { for (int i = 0; i < m_List.Count; i++) { if (m_List[i].Name == name) { return i; } } return -1; } /*数据库读取excel表,并保存至数组m_cExcelData*/ static public bool ReadExcel(String sExcelFile, String Sheet) { DataTable ExcelTable; DataSet ds = new DataSet(); //Excel的连接 OleDbConnection objConn; try { objConn = new OleDbConnection("Provider=Microsoft.Jet.Oledb.4.0;Data Source=" + sExcelFile + ";Extended Properties='Excel 8.0;HDR=No;IMEX=1;'"); objConn.Open(); } catch (Exception ex) { Console.WriteLine(ex.Message); return false; } DataTable schemaTable = objConn.GetOleDbSchemaTable(System.Data.OleDb.OleDbSchemaGuid.Tables, null); string tableName = Sheet + "$"; //schemaTable.Rows[0][2].ToString().Trim();//获取 Excel 的表名,默认值是sheet1 string strSql = "select * from [" + tableName + "A:CV" + "]"; //最大列数限定100(小于256) OleDbCommand objCmd; OleDbDataAdapter myData; try { objCmd = new OleDbCommand(strSql, objConn); myData = new OleDbDataAdapter(strSql, objConn); } catch (Exception ex) { Console.WriteLine(ex.Message); return false; } myData.Fill(ds, tableName);//填充数据 objConn.Close(); ExcelTable = ds.Tables[tableName]; int iColums = ExcelTable.Columns.Count;//列数 int iRows = ExcelTable.Rows.Count;//行数 m_nConRow = iRows; for (int i = 0; i < iColums;i++ ) { if (ExcelTable.Rows[0][i].ToString() == "") { m_nConCol = i; break; } m_nConCol = iColums; } //定义二维数组存储 Excel 表中读取的数据 m_cExcelData = new String[m_nConRow, m_nConCol]; for (int i = 0; i < m_nConRow; i++) { for (int j = 0; j < m_nConCol; j++) { //将Excel表中的数据存储到数组 m_cExcelData[i, j] = ExcelTable.Rows[i][j].ToString(); } } return true; } /*判断是否需要读取此字段*/ static public bool isFieldsExist(string tyte) { for (int i = 0; i < m_nRealCol; i++) { if (m_sStructAnnotation[i] == tyte) { return true; } } return false; } /*将完整数据表转换为需要用到的数据表数组*/ static public void convertToUseExcel() { m_rExcelData = new String[m_nRealRow, m_nRealCol]; int n = 0; int m = 0; for (int i = 0; i < m_nConRow; i++) { for (int j = 0; j < m_nConCol; j++) { if (isFieldsExist(m_cExcelData[0, j])) { m_rExcelData[n, m] = m_cExcelData[i, j]; m += 1; } } n += 1; m = 0; } } /*将数据表以lua table形式写入本地*/ static void OutLuaTable(int iter) { String lastPath = getExcelLastPath(m_List[iter].FullName); String hPath = m_outLuaRootPath + lastPath + m_OutputFileName + ".lua"; FileStream fs = File.Open(hPath, FileMode.Create, FileAccess.Write); StreamWriter hFile = new StreamWriter(fs); hFile.WriteLine("local " + m_sStructName + " = {"); hFile.Write("--"); for (int col = 0; col < m_nRealCol; col++) { hFile.Write(m_sStructVariable[col] + "=\"" + m_sStructAnnotation[col] + "\","); } hFile.WriteLine(""); for (int row = 1; row < m_nRealRow; row++) { hFile.Write("["); hFile.Write(m_rExcelData[row, 0]); hFile.Write("]" + "="); hFile.Write("{ "); for (int col = 0; col < m_nRealCol; col++) { hFile.Write(m_sStructVariable[col] + "="); if (m_sStructDataType[col].Equals("string")) { hFile.Write("\"" + m_rExcelData[row, col] + "\""); } else { hFile.Write(m_rExcelData[row, col]); } if (col != (m_nRealCol - 1)) { hFile.Write(", "); } } hFile.Write("}"); if (row != (m_nRealRow - 1)) { hFile.Write(", "); } hFile.WriteLine(""); } hFile.WriteLine("}"); hFile.WriteLine(""); hFile.WriteLine("return " + m_sStructName); // hFile.Close(); fs.Close(); } /*得到程序运行目录的nlv上级目录*/ static string getProjectUpPath(int nlv) { string projectPath = System.IO.Directory.GetCurrentDirectory(); char[] sp = { '\\' }; string[] str = projectPath.Split(sp); int length = str.Length; string usePath = ""; for (int i = 0;i < length - nlv;i++) { usePath = usePath + str[i] + "\\"; } return usePath; } /*得到excel表最后子目录名字*/ static string getExcelLastPath(string fullPath) { char[] sp = { '\\' }; string[] str = fullPath.Split(sp); int length = str.Length; string lastPath = str[length - 2]; if (lastPath == "数据表") { return ""; } return lastPath + "\\"; } static void Main(string[] args) { /*路径设置*/ string root = getProjectUpPath(4); m_outLuaRootPath = root + "Client\\data\\"; m_excelRootPath = root + "策划\\数据表\\"; m_xmlPath = root + "策划\\数据表\\excelmake_client.xml"; if (Directory.Exists(m_outLuaRootPath)) { Directory.Delete(m_outLuaRootPath, true); } Directory.CreateDirectory(m_outLuaRootPath); Directory.CreateDirectory(m_outLuaRootPath + "cn\\"); Directory.CreateDirectory(m_outLuaRootPath + "en\\"); GetAllFiles(m_excelRootPath); //XML配置信息解析 int count = 0; //标志xml配置的表数量 string file = m_xmlPath; XmlDocument doc = new XmlDocument(); doc.Load(file); XmlElement rootElem = doc.DocumentElement; XmlNodeList excelNodes = rootElem.GetElementsByTagName("table"); foreach (XmlNode table in excelNodes) { //excel名 string excelName = ((XmlElement)table).GetAttribute("name"); int listIter = isExistExcel(excelName); if (listIter == -1) { Console.WriteLine(excelName + "配置表不存在"); return; } XmlNodeList sheetNodes = ((XmlElement)table).GetElementsByTagName("SHEET"); foreach (XmlNode sheet in sheetNodes) { //excel sheet字段与保存本地lua文件名等 string sheetname = ((XmlElement)sheet).GetAttribute("name"); string filename = ((XmlElement)sheet).GetAttribute("filename"); string structs = ((XmlElement)sheet).GetAttribute("struct"); string index = ((XmlElement)sheet).GetAttribute("index"); char[] sp = { '.' }; string[] str = filename.Split(sp); m_OutputFileName = str[0]; m_sStructName = structs; if (!ReadExcel(m_List[listIter].FullName, sheetname)) { Console.WriteLine(m_List[listIter].Name + "表Sheet读取失败"); return; } XmlNodeList fieldNodes = ((XmlElement)sheet).GetElementsByTagName("FIELD"); m_nRealCol = fieldNodes.Count; m_sStructDataType = new String[m_nRealCol]; m_sStructVariable = new String[m_nRealCol]; m_sStructAnnotation = new String[m_nRealCol]; m_nRealRow = m_nConRow; int i = 0; foreach (XmlNode field in fieldNodes) { //具体excel读取字段 string fieldname = ((XmlElement)field).GetAttribute("name"); string code = ((XmlElement)field).GetAttribute("code"); string type = ((XmlElement)field).GetAttribute("type"); m_sStructAnnotation[i] = fieldname; m_sStructVariable[i] = code; m_sStructDataType[i] = type; i += 1; } convertToUseExcel(); OutLuaTable(listIter); Console.WriteLine(excelName + " 转换完成..."); count = count + 1; } } Console.WriteLine("excel表总数:{0 :G},xml已配置表数:{1 :G}, 全部转换成功!", m_List.Count,count); Console.WriteLine(""); } }}
- 导出的lua表示例
local boss = {--ID="ID",isShow="是否显示",fubenName="副本名",type="类型",level="等级",power="战力",refreshTime="刷新时间",refreshTimeDes="刷新时间描述",picName="图片ID",DropDes="掉落描述",[1]={ ID=1, isShow=1, fubenName="炎魔降世", type=1, level=20, power=999, refreshTime=10:30, refreshTimeDes="my", picName="[00FF00]【掉落】经验、装备[-]", DropDes="每日[00FF00]{0}[-]刷新"}, [2]={ ID=2, isShow=1, fubenName="炎魔降世", type=1, level=20, power=999, refreshTime=12:00, refreshTimeDes="my", picName="[00FF00]【掉落】经验、装备[-]", DropDes="每日[00FF00]{0}[-]刷新"}, [3]={ ID=3, isShow=1, fubenName="炎魔降世", type=1, level=20, power=999, refreshTime=14:00, refreshTimeDes="my", picName="[00FF00]【掉落】经验、装备[-]", DropDes="每日[00FF00]{0}[-]刷新"}, [4]={ ID=4, isShow=1, fubenName="炎魔降世", type=1, level=20, power=999, refreshTime=16:00, refreshTimeDes="my", picName="[00FF00]【掉落】经验、装备[-]", DropDes="每日[00FF00]{0}[-]刷新"}, [5]={ ID=5, isShow=1, fubenName="炎魔降世", type=1, level=20, power=999, refreshTime=18:00, refreshTimeDes="my", picName="[00FF00]【掉落】经验、装备[-]", DropDes="每日[00FF00]{0}[-]刷新"}, [6]={ ID=6, isShow=1, fubenName="炎魔降世", type=2, level=20, power=999, refreshTime=0:00, refreshTimeDes="my", picName="[00FF00]【掉落】经验、装备[-]", DropDes="每日[00FF00]{0}[-]刷新"}, [7]={ ID=7, isShow=1, fubenName="炎魔降世", type=2, level=20, power=999, refreshTime=0:00, refreshTimeDes="my", picName="[00FF00]【掉落】经验、装备[-]", DropDes="每日[00FF00]{0}[-]刷新"}, [8]={ ID=8, isShow=1, fubenName="炎魔降世", type=2, level=20, power=999, refreshTime=0:00, refreshTimeDes="my", picName="[00FF00]【掉落】经验、装备[-]", DropDes="每日[00FF00]{0}[-]刷新"}, [9]={ ID=9, isShow=1, fubenName="炎魔降世", type=2, level=20, power=999, refreshTime=0:00, refreshTimeDes="my", picName="[00FF00]【掉落】经验、装备[-]", DropDes="每日[00FF00]{0}[-]刷新"}, [10]={ ID=10, isShow=1, fubenName="炎魔降世", type=2, level=20, power=999, refreshTime=0:00, refreshTimeDes="my", picName="[00FF00]【掉落】经验、装备[-]", DropDes="每日[00FF00]{0}[-]刷新"}, [11]={ ID=11, isShow=1, fubenName="炎魔降世", type=3, level=20, power=999, refreshTime=10:30, refreshTimeDes="my", picName="[00FF00]【掉落】经验、装备[-]", DropDes="每日[00FF00]{0}[-]刷新"}, [12]={ ID=12, isShow=1, fubenName="炎魔降世", type=3, level=20, power=999, refreshTime=12:00, refreshTimeDes="my", picName="[00FF00]【掉落】经验、装备[-]", DropDes="每日[00FF00]{0}[-]刷新"}, [13]={ ID=13, isShow=1, fubenName="炎魔降世", type=3, level=20, power=999, refreshTime=14:00, refreshTimeDes="my", picName="[00FF00]【掉落】经验、装备[-]", DropDes="每日[00FF00]{0}[-]刷新"}, [14]={ ID=14, isShow=1, fubenName="炎魔降世", type=3, level=20, power=999, refreshTime=16:00, refreshTimeDes="my", picName="[00FF00]【掉落】经验、装备[-]", DropDes="每日[00FF00]{0}[-]刷新"}, [15]={ ID=15, isShow=1, fubenName="炎魔降世", type=3, level=20, power=999, refreshTime=18:00, refreshTimeDes="my", picName="[00FF00]【掉落】经验、装备[-]", DropDes="每日[00FF00]{0}[-]刷新"}, [16]={ ID=16, isShow=1, fubenName="炎魔降世", type=4, level=20, power=999, refreshTime=10:30, refreshTimeDes="my", picName="[00FF00]【掉落】经验、装备[-]", DropDes="每日[00FF00]{0}[-]刷新"}, [17]={ ID=17, isShow=1, fubenName="炎魔降世", type=4, level=20, power=999, refreshTime=12:00, refreshTimeDes="my", picName="[00FF00]【掉落】经验、装备[-]", DropDes="每日[00FF00]{0}[-]刷新"}, [18]={ ID=18, isShow=1, fubenName="炎魔降世", type=4, level=20, power=999, refreshTime=14:00, refreshTimeDes="my", picName="[00FF00]【掉落】经验、装备[-]", DropDes="每日[00FF00]{0}[-]刷新"}, [19]={ ID=19, isShow=1, fubenName="炎魔降世", type=4, level=20, power=999, refreshTime=16:00, refreshTimeDes="my", picName="[00FF00]【掉落】经验、装备[-]", DropDes="每日[00FF00]{0}[-]刷新"}, [20]={ ID=20, isShow=1, fubenName="炎魔降世", type=4, level=20, power=999, refreshTime=18:00, refreshTimeDes="my", picName="[00FF00]【掉落】经验、装备[-]", DropDes="每日[00FF00]{0}[-]刷新"}}return boss
0 0
- ExcelToLua工具
- 工具
- 工具
- 工具
- 工具
- 工具
- 工具
- 工具
- 工具
- 工具
- 工具
- 工具
- 工具
- 工具
- 工具
- 工具
- 工具
- 工具
- 加载图片的三种方式使用
- 一次诡异的日志死锁
- 黑马程序员——数据类型、printf函数与scanf函数
- James邮箱服务器账户资料迁移问题
- Linux串口驱动(8250)的编写与调试
- ExcelToLua工具
- 12月风怒(2)
- Java中使用PrepateStatement并且like模糊查询
- Spring MVC的基本概念
- 解决新建maven工程出现Could not resolve archetype
- 数据库(SQL)之trigger(触发器)的使用以及视图(view)的基本实现
- 【C++】基础知识—引用和指针引用
- SpringMVC知识一
- web前台工作笔记1