コード例 #1
0
ファイル: XmlBuilder.cs プロジェクト: winkyT3/xlsparser
        public static void SetValueInNode(XElement node, KeyT key_T, object value)
        {
            if (key_T.outFlag.IndexOf(ConfigIni.OUTPUT_S) < 0)
            {
                return;
            }

            if (KEY_TYPE.ITEM == key_T.keyType)
            {
                node.Add(GetItemNode(key_T.key, value.ToString()));
            }
            else if (KEY_TYPE.ITEM_LIST == key_T.keyType)
            {
                node.Add(GetItemListNode(key_T.key, value.ToString()));
            }
            else if (KEY_TYPE.DROP_ID == key_T.keyType)
            {
                node.Add(GetDropIdListNode(key_T.key, value.ToString()));
            }
            else if (KEY_TYPE.EFFECT == key_T.keyType)
            {
                node.Add(GetEffectListNode(key_T.key, value.ToString()));
            }
            else
            {
                node.SetElementValue(key_T.key, value);
            }
        }
コード例 #2
0
        public override void PostProcessTableList(List <Table> table_list)
        {
            // add sceneobject value
            {
                int         condition_key_index = 0;
                int         c_param1_key_index  = 0;
                List <KeyT> key_list            = table_list[0].keyList;
                for (int i = 0; i < key_list.Count; ++i)
                {
                    KeyT key_T = key_list[i];
                    if ("accept_npc" == key_T.key || "commit_npc" == key_T.key)
                    {
                        key_T.keyType = KEY_TYPE.NPC_OBJ;
                    }

                    if ("condition" == key_T.key)
                    {
                        condition_key_index = i;
                    }

                    if ("c_param1" == key_T.key)
                    {
                        c_param1_key_index = i;
                    }
                }

                {
                    KeyT key_T = new KeyT();
                    key_T.key     = "target_obj";
                    key_T.keyType = KEY_TYPE.SCENE_OBJ_LIST;
                    key_T.outFlag = ConfigIni.OUTPUT_C.ToString();
                    key_list.Add(key_T);
                }

                List <List <object> > item_list = table_list[0].itemList;
                for (int i = 0; i < item_list.Count; ++i)
                {
                    int condition = Convert.ToInt32(item_list[i][condition_key_index]);
                    int c_param1  = Convert.ToInt32(item_list[i][c_param1_key_index]);
                    item_list[i].Add(string.Format("{0},{1}", condition, c_param1));
                }
            }

            base.PostProcessTableList(table_list);
        }
コード例 #3
0
ファイル: LuaBuilder.cs プロジェクト: winkyT3/xlsparser
 private static string GetToLuaKeyValue(KeyT key_T, object value)
 {
     if (KEY_TYPE.ITEM == key_T.keyType)
     {
         return(GetLuaItemTable(key_T.key, value.ToString()));
     }
     else if (KEY_TYPE.ITEM_LIST == key_T.keyType)
     {
         return(ConvertToLuaItemListTable(key_T.key, value.ToString()));
     }
     else if (KEY_TYPE.NPC_OBJ == key_T.keyType)
     {
         return(GetNpcTable(key_T.key, value));
     }
     else if (KEY_TYPE.SCENE_OBJ_LIST == key_T.keyType)
     {
         return(GetSceneObjListTable(key_T.key, value));
     }
     else if (KEY_TYPE.SPLIT_LIST == key_T.keyType)
     {
         return(GetSplitListTable(key_T.key, value));
     }
     else if (KEY_TYPE.STEP_LIST == key_T.keyType)
     {
         return(GetStepListTable(key_T.key, value));
     }
     else if (KEY_TYPE.NORMA == key_T.keyType || KEY_TYPE.MAIN_KEY == key_T.keyType)
     {
         if (value.GetType() == typeof(string))
         {
             return(string.Format("{0}=\"{1}\"", key_T.key, value));
         }
         else
         {
             return(string.Format("{0}={1}", key_T.key, value));
         }
     }
     else
     {
         return("error");
     }
 }
コード例 #4
0
        public override void PostProcessTableList(List <Table> table_list)
        {
            // combine table
            {
                List <List <object> > item_list = table_list[0].itemList;
                for (int i = 1; i < table_list.Count; i++)
                {
                    List <List <object> > temp_item_list = table_list[i].itemList;
                    for (int j = 0; j < temp_item_list.Count; ++j)
                    {
                        item_list.Add(temp_item_list[j]);
                    }
                }

                while (table_list.Count > 1)
                {
                    table_list.RemoveAt(table_list.Count - 1);
                }

                table_list[0].tableType          = TABLE_TYPE.LIST;
                table_list[0].keyList[0].keyType = KEY_TYPE.MAIN_KEY;
            }

            // handle default table
            {
                Table default_table = LuaBuilder.SimplifiedTable(table_list[0]);
                default_table.tableType = TABLE_TYPE.SIMPLE;
                default_table.name      = "default_table";

                KeyT key_T = new KeyT();
                key_T.outFlag = "";
                key_T.key     = "default_table";
                key_T.keyType = KEY_TYPE.MAIN_KEY;
                default_table.keyList.Add(key_T);

                table_list.Add(default_table);
            }
        }
コード例 #5
0
ファイル: LuaBuilder.cs プロジェクト: winkyT3/xlsparser
        public static Table SimplifiedTable(Table table)
        {
            List <KeyT> default_key_list = new List <KeyT>();
            List <Dictionary <object, int> > value_count_list = new List <Dictionary <object, int> >();

            // init key
            for (int j = 0; j < table.keyList.Count; ++j)
            {
                value_count_list.Add(new Dictionary <object, int>());

                KeyT key_T = table.keyList[j].Clone();
                if (KEY_TYPE.MAIN_KEY == key_T.keyType)
                {
                    key_T.keyType = KEY_TYPE.NORMA;
                }

                default_key_list.Add(key_T);
            }

            // calc value disappear count
            for (int m = 0; m < table.itemList.Count; ++m)
            {
                List <object> value_list = table.itemList[m];
                for (int n = 0; n < value_list.Count; ++n)
                {
                    Dictionary <object, int> count_dic = value_count_list[n];
                    object value = value_list[n];

                    if (count_dic.ContainsKey(value))
                    {
                        ++count_dic[value];
                    }
                    else
                    {
                        count_dic.Add(value, 1);
                    }
                }
            }

            // find default val
            List <object> default_value_list = new List <object>();

            for (int x = 0; x < value_count_list.Count; ++x)
            {
                Dictionary <object, int> count_dic = value_count_list[x];
                int    max_count   = 0;
                object default_val = null;

                foreach (var item in count_dic)
                {
                    if (item.Value > max_count)
                    {
                        max_count   = item.Value;
                        default_val = item.Key;
                    }
                }

                default_value_list.Add(default_val);
            }

            // flag del default val in itemlist
            for (int m = 0; m < default_value_list.Count; ++m)
            {
                object default_val = default_value_list[m];
                for (int n = 0; n < table.itemList.Count; ++n)
                {
                    if (default_val.Equals(table.itemList[n][m]) &&
                        KEY_TYPE.MAIN_KEY != table.keyList[m].keyType)
                    {
                        table.itemList[n][m] = null;
                    }
                }
            }

            // add default to memtable list
            Table default_table = new Table();

            default_table.name      = string.Format("{0}_default_table", table.name);
            default_table.tableType = TABLE_TYPE.SIMPLE;
            default_table.keyList   = default_key_list;
            default_table.itemList  = new List <List <object> >();
            default_table.itemList.Add(default_value_list);

            return(default_table);
        }
コード例 #6
0
ファイル: LuaBuilder.cs プロジェクト: winkyT3/xlsparser
        public static string GetLuaTable(Table table)
        {
            if (!string.IsNullOrEmpty(table.outFlag) &&
                table.outFlag.IndexOf(ConfigIni.OUTPUT_S) >= 0)
            {
                return("");
            }

            int item_count = table.itemList.Count;
            int key_count  = table.keyList.Count;

            if (key_count <= 0)
            {
                return("");
            }

            StringBuilder builder = new StringBuilder();

            if (TABLE_TYPE.NORMAL == table.tableType)
            {
                builder.Append(string.Format("{0}={{\n", table.name));
            }
            else if (TABLE_TYPE.SIMPLE == table.tableType)
            {
                builder.Append(string.Format("{0}=", table.name));
            }

            for (int i = 0; i < item_count; ++i)
            {
                List <object> value_list = table.itemList[i];

                if (KEY_TYPE.MAIN_KEY == table.keyList[0].keyType)
                {
                    if (value_list[0].GetType() == typeof(string))
                    {
                        builder.Append(string.Format("[\"{0}\"]={{", value_list[0]));
                    }
                    else
                    {
                        builder.Append(string.Format("[{0}]={{", value_list[0]));
                    }
                }
                else
                {
                    builder.Append("{");
                }

                for (int j = 0; j < key_count; ++j)
                {
                    KeyT key_T = table.keyList[j];

                    if (key_T.outFlag.IndexOf(ConfigIni.OUTPUT_C) < 0 ||
                        null == value_list[j])
                    {
                        continue;
                    }

                    builder.Append(GetToLuaKeyValue(key_T, value_list[j]));
                    builder.Append(",");
                }

                builder.Append(i != item_count - 1 ? "},\n" : "}");
            }

            if (TABLE_TYPE.NORMAL == table.tableType)
            {
                builder.Append("}");
            }

            return(builder.ToString());
        }
コード例 #7
0
        protected virtual bool ParseSheetData(ISheet sheet, Table ret_table)
        {
            if (null == sheet)
            {
                return(false);
            }

            int row_num         = sheet.LastRowNum;
            int start_row_index = this.header.startLine - 1;

            if (start_row_index < 0 ||
                (row_num > 0 && start_row_index >= row_num))
            {
                return(false);
            }

            // LastRowNum have bug
            int col_num = 1000;

            // key
            {
                IRow out_flag_row = sheet.GetRow(start_row_index);
                IRow key_row      = sheet.GetRow(start_row_index + 2);
                for (int i = 0; i < col_num; ++i)
                {
                    if (null == out_flag_row)
                    {
                        break;
                    }

                    ICell flag_col = out_flag_row.GetCell(i);
                    ICell key_col  = key_row.GetCell(i);
                    if (null == flag_col || null == key_col)
                    {
                        break;
                    }

                    string out_flag = flag_col.ToString();
                    string key      = key_col.ToString();
                    key = key.Trim(' ');
                    key = key.Trim('\n');

                    if (string.IsNullOrEmpty(out_flag) && string.IsNullOrEmpty(key))
                    {
                        break;
                    }

                    if (!string.IsNullOrEmpty(out_flag) && !string.IsNullOrEmpty(key))
                    {
                        KeyT key_T = new KeyT();
                        key_T.outFlag = out_flag;
                        key_T.key     = key;

                        string[] flags = out_flag.IndexOf(",") >= 0 ? out_flag.Split(',') : out_flag.Split(',');
                        key_T.outFlag = flags[0];

                        if (flags.Length > 1)
                        {
                            if (flags[1].Equals(ConfigIni.INDEX_FLAG) && 0 == i)
                            {
                                key_T.keyType = KEY_TYPE.MAIN_KEY;
                            }
                            else if (flags[1].Equals(ConfigIni.ITEMLIST_FLAG))
                            {
                                key_T.keyType = KEY_TYPE.ITEM_LIST;
                            }
                            else if (flags[1].Equals(ConfigIni.ITEM_FLAG))
                            {
                                key_T.keyType = KEY_TYPE.ITEM;
                            }
                            else if (flags[1].Equals(ConfigIni.DROP_ID_FLAG))
                            {
                                key_T.keyType = KEY_TYPE.DROP_ID;
                            }
                            else if (flags[1].Equals(ConfigIni.EFFECT_FLAG))
                            {
                                key_T.keyType = KEY_TYPE.EFFECT;
                            }
                            else if (flags[1].Equals(ConfigIni.SPLITLIST_FLAG))
                            {
                                key_T.keyType = KEY_TYPE.SPLIT_LIST;
                            }
                            else if (flags[1].Equals(ConfigIni.STEPLIST_FLAG))
                            {
                                key_T.keyType = KEY_TYPE.STEP_LIST;
                            }
                            else
                            {
                                key_T.keyType = KEY_TYPE.NORMA;
                            }
                        }

                        ret_table.keyList.Add(key_T);
                    }
                    else
                    {
                        return(false);
                    }
                }
            }

            // real col num
            col_num = ret_table.keyList.Count;
            // LastRowNum have bug
            row_num = 10000000;

            // list value
            for (int i = start_row_index + 3; i < row_num; ++i)
            {
                IRow row = sheet.GetRow(i);
                if (null == row)
                {
                    break; // read end
                }

                List <object> value_list = new List <object>();

                bool is_end = false;
                for (int j = 0; j < col_num; ++j)
                {
                    ICell cell = row.GetCell(j);
                    if (null == cell || string.IsNullOrEmpty(cell.ToString()))
                    {
                        value_list.Add(string.Empty);
                        if (0 == j)
                        {
                            is_end = true;
                        }
                    }
                    else
                    {
                        if (CellType.Numeric == cell.CellType)
                        {
                            value_list.Add(cell.NumericCellValue);
                        }
                        else if (CellType.String == cell.CellType)
                        {
                            if (Regex.Match(cell.StringCellValue, "^[-+]?[0-9]*\\.?[0-9]+$").Success)
                            {
                                value_list.Add(Convert.ToDouble(cell.StringCellValue));
                            }
                            else
                            {
                                value_list.Add(cell.StringCellValue);
                            }
                        }
                        else if (CellType.Formula == cell.CellType)
                        {
                            ICell new_cell = formulaEvaluator.EvaluateInCell(cell);
                            if (CellType.Numeric == new_cell.CellType)
                            {
                                value_list.Add(new_cell.NumericCellValue);
                            }
                            else if (CellType.String == new_cell.CellType)
                            {
                                if (Regex.Match(cell.StringCellValue, "^[-+]?[0-9]*\\.?[0-9]+$").Success)
                                {
                                    value_list.Add(Convert.ToDouble(cell.StringCellValue));
                                }
                                else
                                {
                                    value_list.Add(cell.StringCellValue);
                                }
                            }
                        }
                    }
                }

                if (is_end)
                {
                    break; // read end
                }

                ret_table.itemList.Add(value_list);
            }

            return(true);
        }
コード例 #8
0
        public override bool BuildServerXml(List <Table> table_list)
        {
            if (table_list.Count <= 0)
            {
                return(false);
            }

            Table table = table_list[0];

            foreach (List <object> val_list in table.itemList)
            {
                int       skill_id = Convert.ToInt32(val_list[0]);
                XDocument doc      = new XDocument();

                XElement root_node = new XElement("Skill");
                doc.Add(root_node);

                bool is_self_pos = false;

                for (int i = 0; i < table.keyList.Count; ++i)
                {
                    KeyT key_T = table.keyList[i];

                    // del effect
                    if ((key_T.key.Equals("effect") || key_T.key.Equals("tipType")) &&
                        string.IsNullOrEmpty(val_list[i].ToString()))
                    {
                        continue;
                    }

                    // set skillname output
                    if (key_T.key.Equals("skillname"))
                    {
                        key_T.outFlag = "cs";
                    }

                    if (key_T.key.Equals("Distance") && Convert.ToInt32(val_list[i]) <= 1)
                    {
                        is_self_pos = true;
                    }

                    XmlBuilder.SetValueInNode(root_node, key_T, val_list[i]);

                    // special add
                    {
                        if (key_T.key.Equals("Distance"))
                        {
                            KeyT temp_key_T = new KeyT();
                            temp_key_T.key     = "ProfLimit";
                            temp_key_T.outFlag = "s";
                            XmlBuilder.SetValueInNode(root_node, temp_key_T, 4);
                        }

                        if (key_T.key.Equals("Range"))
                        {
                            KeyT temp_key_T = new KeyT();
                            temp_key_T.key     = "IsSelfPos";
                            temp_key_T.outFlag = "s";
                            int is_self_pos_val = is_self_pos && Convert.ToInt32(val_list[i]) > 0 ? 1 : 0;
                            XmlBuilder.SetValueInNode(root_node, temp_key_T, is_self_pos_val);
                        }
                    }
                }

                string group_name = this.GetSkillGroupName(skill_id);
                string path       = string.Format("{0}/gameworld/skill/monsterskills/{1}{2}.xml", ConfigIni.XmlDir, group_name, skill_id);

                Writer.Instance.WriteXml(path, doc, false);
            }

            Command.Instance.AddSvnAddFilePath(string.Format("{0}/gameworld/skill/monsterskills/", ConfigIni.XmlDir));
            Command.Instance.AddSvnCommitFilePath(string.Format("{0}/gameworld/skill/monsterskills/", ConfigIni.XmlDir));

            // monster manager
            {
                XDocument doc       = new XDocument();
                XElement  root_node = new XElement("skills");
                doc.Add(root_node);

                Dictionary <string, XElement> group_dic = new Dictionary <string, XElement>();

                // init group
                {
                    string[] group_name_list = { "CommonSkillToEnemy",        "RangeCommonSkillToEnemyPos", "CommonSkillToSelf",
                                                 "RangeCommonSkillToSelfPos", "FaZhenSkillToEnemy",         "FaZhenSkillToSelf",
                                                 "SkillToEnemyEffectToOther", "RandZoneSkillToSelfPos",     "RectRangeSkillToEnemyPos" };

                    for (int i = 0; i < group_name_list.Length; i++)
                    {
                        XElement group_node = new XElement(group_name_list[i]);
                        root_node.Add(group_node);
                        group_dic.Add(group_name_list[i], group_node);
                    }
                }

                foreach (List <object> val_list in table.itemList)
                {
                    int    skill_id   = Convert.ToInt32(val_list[0]);
                    string group_name = this.GetSkillGroupName(skill_id);

                    XElement group_node = null;
                    if (!group_dic.TryGetValue(group_name, out group_node))
                    {
                        group_node = new XElement(group_name);
                        root_node.Add(group_node);
                        group_dic.Add(group_name, group_node);
                    }

                    XElement path_node = new XElement("skill");
                    path_node.SetValue(string.Format("monsterskills/{0}{1}.xml", group_name, skill_id));
                    group_node.Add(path_node);
                }

                string path = string.Format("{0}/gameworld/skill/MonsterPetSkillManager.xml", ConfigIni.XmlDir);

                Command.Instance.AddSvnAddFilePath(path);
                Writer.Instance.WriteXml(path, doc);

                Command.Instance.AddSvnCommitFilePath(path);
            }

            return(true);
        }
コード例 #9
0
        protected override bool ParseSheetData(ISheet sheet, Table ret_table)
        {
            if (null == sheet)
            {
                return(false);
            }

            int col_num         = 1000;
            int row_num         = 100000;
            int start_row_index = this.header.startLine - 1;

            // key
            {
                IRow key_row = sheet.GetRow(start_row_index);
                for (int i = 0; i < col_num; ++i)
                {
                    ICell key_col = key_row.GetCell(i);
                    if (null == key_col)
                    {
                        break;
                    }

                    KeyT key_T = new KeyT();
                    key_T.outFlag = "s";
                    key_T.key     = key_col.ToString();
                    key_T.keyType = KEY_TYPE.NORMA;

                    ret_table.keyList.Add(key_T);
                }
            }

            List <Object> value_list   = null;
            int           condition_id = -1;
            int           real_col_num = ret_table.keyList.Count;

            for (int i = start_row_index + 1; i < row_num; ++i)
            {
                IRow row = sheet.GetRow(i);
                if (null == row)
                {
                    continue; // read end
                }

                ICell cell = row.GetCell(0);
                if (null != cell && cell.ToString().Equals("END"))
                {
                    break;
                }

                cell = row.GetCell(0);
                if (null != cell && !string.IsNullOrEmpty(cell.ToString()) &&
                    Convert.ToInt32(cell.NumericCellValue) != condition_id)
                {
                    condition_id = Convert.ToInt32(cell.NumericCellValue);
                    value_list   = new List <object>();
                    ret_table.itemList.Add(value_list);
                }

                for (int j = 0; j < real_col_num; ++j)
                {
                    KeyT key_T = ret_table.keyList[j];

                    cell = row.GetCell(j);
                    if (null != cell && !string.IsNullOrEmpty(cell.ToString()))
                    {
                        object value = null;
                        if (CellType.Numeric == cell.CellType)
                        {
                            value = cell.NumericCellValue;
                        }
                        else if (CellType.String == cell.CellType)
                        {
                            value = cell.StringCellValue;
                        }
                        else if (CellType.Formula == cell.CellType)
                        {
                            ICell new_cell = formulaEvaluator.EvaluateInCell(cell);
                            if (CellType.Numeric == new_cell.CellType)
                            {
                                value = new_cell.NumericCellValue;
                            }
                            else if (CellType.String == new_cell.CellType)
                            {
                                value = new_cell.ToString();
                            }
                        }

                        if (value != null)
                        {
                            if (j < value_list.Count && null != value_list[j] &&
                                (key_T.key.Equals("cond") || key_T.key.Equals("skill_id")))
                            {
                                value_list[j] = value_list[j].ToString() + "|" + value.ToString();
                            }
                            else
                            {
                                value_list.Add(value);
                            }
                        }
                        else
                        {
                            value_list.Add(string.Empty);
                        }
                    }
                }
            }

            return(true);
        }
コード例 #10
0
        public override bool BuildServerXml(List <Table> table_list)
        {
            if (table_list.Count <= 0)
            {
                return(false);
            }

            Table table = table_list[0];

            foreach (List <object> val_list in table.itemList)
            {
                XDocument doc       = new XDocument();
                XElement  root_node = new XElement("config");
                doc.Add(root_node);

                string cond_val     = "";
                string skill_id_val = "";

                for (int i = 0; i < table.keyList.Count; ++i)
                {
                    KeyT key_T = table.keyList[i];
                    if (key_T.key.Equals("cond"))
                    {
                        cond_val = val_list[i].ToString();
                    }
                    else if (key_T.key.Equals("skill_id"))
                    {
                        skill_id_val = val_list[i].ToString();
                    }
                    else if (key_T.key.Equals("comment"))
                    {
                        continue;
                    }
                    else
                    {
                        XmlBuilder.SetValueInNode(root_node, key_T, val_list[i]);
                    }
                }

                XElement cond_list_node = new XElement("cond_list");
                root_node.Add(cond_list_node);

                string[] conds     = cond_val.Split('|');
                string[] skill_ids = skill_id_val.Split('|');

                if (conds.Length != skill_ids.Length)
                {
                    return(false);
                }

                for (int i = 0; i < conds.Length; i++)
                {
                    XElement cond_node = new XElement("cond");

                    {
                        cond_list_node.Add(cond_node);
                        string[] ary = conds[i].Split('#');
                        cond_node.SetElementValue("cond_type", ary[0]);
                        for (int j = 1; j < 5; ++j)
                        {
                            int param = j < ary.Length ? Convert.ToInt32(ary[j]) : 0;
                            cond_node.SetElementValue(string.Format("param{0}", j - 1), param);
                        }
                    }

                    // skill_id
                    {
                        XElement skill_list_node = new XElement("skill_list");
                        cond_node.Add(skill_list_node);

                        string[] ary = skill_ids[i].Split('#');
                        for (int j = 0; j < ary.Length; ++j)
                        {
                            XElement skill_node = new XElement("skill");
                            skill_list_node.Add(skill_node);
                            skill_node.SetElementValue("skill_id", ary[j]);
                        }
                    }
                }

                string path = string.Format("{0}/gameworld/bossskillcondition/{1}.xml", ConfigIni.XmlDir, val_list[0]);

                Writer.Instance.WriteXml(path, doc, false);
            }

            Command.Instance.AddSvnAddFilePath(string.Format("{0}/gameworld/bossskillcondition/", ConfigIni.XmlDir));
            Command.Instance.AddSvnCommitFilePath(string.Format("{0}/gameworld/bossskillcondition/", ConfigIni.XmlDir));

            // bossskillconditionmanager
            {
                XDocument doc       = new XDocument();
                XElement  root_node = new XElement("bossskillconditionmanager");
                doc.Add(root_node);

                foreach (List <object> val_list in table.itemList)
                {
                    XElement path_node = new XElement("path");
                    path_node.SetValue(string.Format("bossskillcondition/{0}.xml", val_list[0]));
                    root_node.Add(path_node);
                }

                string path = string.Format("{0}/gameworld/bossskillconditionmanager.xml", ConfigIni.XmlDir);
                Command.Instance.AddSvnAddFilePath(path);

                Writer.Instance.WriteXml(path, doc);
                Command.Instance.AddSvnCommitFilePath(string.Format("{0}/gameworld/bossskillcondition/", ConfigIni.XmlDir));
            }

            return(true);
        }