标签:
游戏开发中基本都需要这么一个工具,就是把策划配的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("");
}
}
}
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
标签:
原文地址:http://blog.csdn.net/u010223072/article/details/50184719