From 324a06080c81c6274ce711f022c37c355295e7d5 Mon Sep 17 00:00:00 2001 From: i0gan Date: Sat, 21 Sep 2024 18:24:40 +0800 Subject: [PATCH] Remove useless excel header --- resource/excel/Group.xlsx | Bin 9040 -> 9236 bytes resource/excel/Player.xlsx | Bin 9708 -> 9666 bytes resource/excel/Scene.xlsx | Bin 11301 -> 11118 bytes resource/excel/common/IObject.xlsx | Bin 9964 -> 9848 bytes resource/excel/example/Property.xlsx | Bin 9389 -> 9580 bytes resource/excel/example/Record.xlsx | Bin 10899 -> 10507 bytes src/squick/plugin/config/class_module.cc | 4 +- src/tools/sqkctl/excel/config_generator.cc | 4 - src/tools/sqkctl/excel/config_generator.h | 11 +- src/tools/sqkctl/excel/java_generator.h | 108 ----------- .../sqkctl/excel/logic_class_generator.h | 2 +- src/tools/sqkctl/excel/pb_generator.h | 11 -- src/tools/sqkctl/excel/sql_generator.h | 124 ------------- src/tools/sqkctl/excel/ts_generator.h | 167 ------------------ 14 files changed, 7 insertions(+), 424 deletions(-) delete mode 100644 src/tools/sqkctl/excel/java_generator.h delete mode 100644 src/tools/sqkctl/excel/pb_generator.h delete mode 100644 src/tools/sqkctl/excel/sql_generator.h delete mode 100644 src/tools/sqkctl/excel/ts_generator.h diff --git a/resource/excel/Group.xlsx b/resource/excel/Group.xlsx index 70021905ea9eb4875f0fb7a1b993e43b91577c1b..9f97bf0b90d25974fa93d275a0c0a7295ac6d8fa 100644 GIT binary patch literal 9236 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 literal 9040 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 he%Af9Yw`c3`DG#~+TOnA?F{{oO7muvt4 diff --git a/resource/excel/Player.xlsx b/resource/excel/Player.xlsx index 240054038e14c131677ae228cbeaf1c1005dbd2f..3ffe3c4f538ba8d1eafb4df2018b0d7e93133289 100644 GIT binary patch literal 9666 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 NfKHe)?$ZAF_kVM-L398B literal 9708 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 diff --git a/resource/excel/Scene.xlsx b/resource/excel/Scene.xlsx index ff8ac005862e33edd26f8c1a5d94da127a7c0913..abbb6b4d880da544c758d81bee35c79e3e675b88 100644 GIT binary patch literal 11118 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

4K5D#X*bG6u(hcKU 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 B6{-LL literal 11301 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 me@FjS3aqRpAIr!EX5G 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 diff --git a/resource/excel/example/Property.xlsx b/resource/excel/example/Property.xlsx index cb63180d2742135d4ee369f024038bb32cd688c8..14689407cac817819bc365ae80f5e5ad455dd435 100644 GIT binary patch literal 9580 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 diff --git a/resource/excel/example/Record.xlsx b/resource/excel/example/Record.xlsx index 4d7e1e6af8e1ad670879117bd51f018bba8769b5..96413e9bc0da36955dd8ab5e28b220a9b8a9e69f 100644 GIT binary patch literal 10507 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 literal 10899 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 #include #include -ClassModule::ClassModule() { mConfigFileName = "config/struct/logic_class.xml"; } +ClassModule::ClassModule() { mConfigFileName = "config/struct/Root.xml"; } ClassModule::ClassModule(IPluginManager *p) { pm_ = p; - mConfigFileName = "config/struct/logic_class.xml"; + mConfigFileName = "config/struct/Root.xml"; #ifdef DEBUG std::cout << "Using [" << pm_->GetWorkPath() << "/" + mConfigFileName << "]" << std::endl; diff --git a/src/tools/sqkctl/excel/config_generator.cc b/src/tools/sqkctl/excel/config_generator.cc index b6b06598..f046c73a 100644 --- a/src/tools/sqkctl/excel/config_generator.cc +++ b/src/tools/sqkctl/excel/config_generator.cc @@ -15,12 +15,8 @@ ConfigGenerator::ConfigGenerator(const std::string &excelPath, const std::string mxGenerators.push_back(new CPPGenerator(excelPath, outPath)); mxGenerators.push_back(new CSGenerator(excelPath, outPath)); mxGenerators.push_back(new IniGenerator(excelPath, outPath)); - mxGenerators.push_back(new JAVAGenerator(excelPath, outPath)); mxGenerators.push_back(new LogicClassGenerator(excelPath, outPath)); - mxGenerators.push_back(new PBGenerator(excelPath, outPath)); - mxGenerators.push_back(new SQLGenerator(excelPath, outPath)); mxGenerators.push_back(new StructGenerator(excelPath, outPath)); - mxGenerators.push_back(new TSGenerator(excelPath, outPath)); mxGenerators.push_back(new LuaGenerator(excelPath, outPath)); strExcelIniPath = excelPath; diff --git a/src/tools/sqkctl/excel/config_generator.h b/src/tools/sqkctl/excel/config_generator.h index d4396c38..36c3ab8c 100644 --- a/src/tools/sqkctl/excel/config_generator.h +++ b/src/tools/sqkctl/excel/config_generator.h @@ -3,15 +3,11 @@ #include "cpp_generator.h" #include "cs_generator.h" #include "ini_generator.h" -#include "java_generator.h" #include "logic_class_generator.h" #include "lua_generator.h" #include "mini_excel_reader.h" -#include "pb_generator.h" -#include "sql_generator.h" #include "struct_generator.h" #include "third_party/common/lexical_cast.hpp" -#include "ts_generator.h" #include namespace sqkctl { @@ -50,9 +46,10 @@ class ConfigGenerator { private: bool bConvertIntoUTF8 = false; - const int nPropertyHeight = 10; // property line - const int nRecordHeight = 13; // record line - const int nRecordDescHeight = 9; // record line + // Excel base header attr line define + const int nPropertyHeight = 3; // property line + const int nRecordHeight = 6; // record line + const int nRecordDescHeight = 2; // record line std::string outPath; std::string strExcelIniPath; // = "../excel/"; diff --git a/src/tools/sqkctl/excel/java_generator.h b/src/tools/sqkctl/excel/java_generator.h deleted file mode 100644 index df5b8b2a..00000000 --- a/src/tools/sqkctl/excel/java_generator.h +++ /dev/null @@ -1,108 +0,0 @@ -#pragma once - -#include "i_generator.h" -namespace sqkctl { -class JAVAGenerator : public IGenerator { - public: - JAVAGenerator(const std::string &excelPath, const std::string &outPath) { SetPath(excelPath, outPath); } - - virtual bool Generate(const std::map &classData) override { - - FILE *javaWriter = fopen((outPath + "/excel/Excel.java").c_str(), "w"); - - std::string strFileHead = "// -------------------------------------------------------------------------\n"; - strFileHead = strFileHead + "// @FileName : Excel.java\n" + "// @Author : I0gan\n" + - "// @Module : Excel\n" + "// -------------------------------------------------------------------------\n\n" + - "package Excel;\n"; - - fwrite(strFileHead.c_str(), strFileHead.length(), 1, javaWriter); - ///////////////////////////////////////////////////// - - ClassData *pBaseObject = classData.at("IObject"); - for (std::map::const_iterator it = classData.begin(); it != classData.end(); ++it) { - const std::string &className = it->first; - ClassData *pClassDta = it->second; - - if (pClassDta->beIncluded || pClassDta->beParted || className == "Include") { - continue; - } - - // cs - std::string strPropertyInfo; - - strPropertyInfo += "\tpublic class " + className + "\n\t{\n"; - strPropertyInfo += "\t\t//Class name\n\t"; - strPropertyInfo += "\tpublic static final String ThisName = \"" + className + "\";\n"; - - if (className != "IObject") { - // add base class properties - strPropertyInfo += "\t\t// IObject\n"; - - for (std::map::iterator itProperty = pBaseObject->xStructData.xPropertyList.begin(); - itProperty != pBaseObject->xStructData.xPropertyList.end(); ++itProperty) { - const std::string &propertyName = itProperty->first; - ClassProperty *pClassProperty = itProperty->second; - - strPropertyInfo += "\t\tpublic static final String " + propertyName + " = \"" + propertyName + "\";"; - strPropertyInfo += "// " + pClassProperty->descList["Type"] + "\n"; - } - } - - strPropertyInfo += "\t\t// Property\n"; - for (std::map::iterator itProperty = pClassDta->xStructData.xPropertyList.begin(); - itProperty != pClassDta->xStructData.xPropertyList.end(); ++itProperty) { - const std::string &propertyName = itProperty->first; - ClassProperty *pClassProperty = itProperty->second; - - strPropertyInfo += "\t\tpublic static final String " + propertyName + " = \"" + propertyName + "\";"; - strPropertyInfo += "// " + pClassProperty->descList["Type"] + "\n"; - } - - fwrite(strPropertyInfo.c_str(), strPropertyInfo.length(), 1, javaWriter); - - // record - std::string strRecordInfo = ""; - strRecordInfo += "\t\t// Record\n"; - - for (std::map::iterator itRecord = pClassDta->xStructData.xRecordList.begin(); - itRecord != pClassDta->xStructData.xRecordList.end(); ++itRecord) { - const std::string &recordName = itRecord->first; - ClassRecord *pClassRecord = itRecord->second; - - std::cout << "save for java ---> " << className << "::" << recordName << std::endl; - - strRecordInfo += "\t\tpublic class " + recordName + "\n\t\t{\n"; - strRecordInfo += "\t\t\t//Class name\n\t"; - strRecordInfo += "\t\tpublic static final String ThisName = \"" + recordName + "\";\n"; - - // col - for (int i = 0; i < pClassRecord->colList.size(); ++i) { - for (std::map::iterator itCol = pClassRecord->colList.begin(); - itCol != pClassRecord->colList.end(); ++itCol) { - const std::string &colTag = itCol->first; - ClassRecord::RecordColDesc *pRecordColDesc = itCol->second; - - if (pRecordColDesc->index == i) { - strRecordInfo += - "\t\t\tpublic static final int " + colTag + " = " + std::to_string(pRecordColDesc->index) + ";//" + pRecordColDesc->type + "\n"; - } - } - } - - strRecordInfo += "\n\t\t}\n"; - } - fwrite(strRecordInfo.c_str(), strRecordInfo.length(), 1, javaWriter); - - std::string strHppEnumInfo = ""; - - std::string strClassEnd; - strClassEnd += "\n\t}\n"; - - fwrite(strClassEnd.c_str(), strClassEnd.length(), 1, javaWriter); - } - fclose(javaWriter); - - return false; - } -}; -} // namespace sqkctl diff --git a/src/tools/sqkctl/excel/logic_class_generator.h b/src/tools/sqkctl/excel/logic_class_generator.h index 7ae87842..95c0f52e 100644 --- a/src/tools/sqkctl/excel/logic_class_generator.h +++ b/src/tools/sqkctl/excel/logic_class_generator.h @@ -8,7 +8,7 @@ class LogicClassGenerator : public IGenerator { LogicClassGenerator(const std::string &excelPath, const std::string &outPath) { SetPath(excelPath, outPath); } virtual bool Generate(const std::map &classData) override { - std::string fileName = strXMLStructPath + "logic_class.xml"; + std::string fileName = strXMLStructPath + "Root.xml"; FILE *iniWriter = fopen(fileName.c_str(), "w"); diff --git a/src/tools/sqkctl/excel/pb_generator.h b/src/tools/sqkctl/excel/pb_generator.h deleted file mode 100644 index 09afe91b..00000000 --- a/src/tools/sqkctl/excel/pb_generator.h +++ /dev/null @@ -1,11 +0,0 @@ -#pragma once - -#include "i_generator.h" -namespace sqkctl { -class PBGenerator : public IGenerator { - public: - PBGenerator(const std::string &excelPath, const std::string &outPath) { SetPath(excelPath, outPath); } - - virtual bool Generate(const std::map &classData) override { return false; } -}; -} // namespace sqkctl diff --git a/src/tools/sqkctl/excel/sql_generator.h b/src/tools/sqkctl/excel/sql_generator.h deleted file mode 100644 index a7676df5..00000000 --- a/src/tools/sqkctl/excel/sql_generator.h +++ /dev/null @@ -1,124 +0,0 @@ -#pragma once - -#include "i_generator.h" -namespace sqkctl { -class SQLGenerator : public IGenerator { - - public: - SQLGenerator(const std::string &excelPath, const std::string &outPath) { SetPath(excelPath, outPath); } - - virtual bool Generate(const std::map &classData) override { - // 1 class.sql - std::string fileName = outPath + "/excel/server.sql"; - - FILE *iniWriter = fopen(fileName.c_str(), "w"); - - std::string strElementData; - for (std::map::const_iterator it = classData.begin(); it != classData.end(); ++it) { - const std::string &className = it->first; - ClassData *pClassDta = it->second; - - if (pClassDta->beIncluded || pClassDta->beParted || className == "Include") { - continue; - } - - strElementData += "CREATE TABLE IF NOT EXISTS " + pClassDta->xStructData.className + " ("; - strElementData += " `ID` varchar(128) NOT NULL,"; - strElementData += " PRIMARY KEY (`ID`)"; - strElementData += " ) ENGINE=InnoDB DEFAULT CHARSET=utf8; \n"; - } - - // 2 fields - // ALTER TABLE `Buff` ADD `EffectType` bigint(11) DEFAULT '0' COMMENT '影响属性类型(效果类型) 生命,法力(可组合,叠加)'; - // 2.1) property - for (std::map::const_iterator it = classData.begin(); it != classData.end(); ++it) { - const std::string &className = it->first; - ClassData *pClassDta = it->second; - - for (std::map::iterator itProperty = pClassDta->xStructData.xPropertyList.begin(); - itProperty != pClassDta->xStructData.xPropertyList.end(); ++itProperty) { - const std::string &propertyName = itProperty->first; - ClassProperty *xPropertyData = itProperty->second; - - std::string strType; - std::string strSave; - std::string strCache; - std::string strDesc; - for (std::map::iterator itDesc = xPropertyData->descList.begin(); itDesc != xPropertyData->descList.end(); ++itDesc) { - const std::string &strKey = itDesc->first; - const std::string &value = itDesc->second; - if (strKey == "Type") { - strType = value; - } else if (strKey == "Save") { - strSave = value; - } else if (strKey == "Cache") { - strCache = value; - } else if (strKey == "Desc") { - strDesc = value; - } - } - - if (strSave == "1" || strCache == "1") { - std::string strAlter = "\nALTER TABLE `" + className + "` ADD `" + propertyName + "`"; - // ALTER TABLE `Buff` ADD `EffectType` bigint(11) DEFAULT '0' COMMENT '影响属性类型(效果类型) 生命,法力(可组合,叠加)'; - if (strType == "int") { - strAlter += " bigint(11) DEFAULT '0'"; - } else if (strType == "string") { - strAlter += " text COLLATE utf8mb4_unicode_ci DEFAULT ''"; - } else if (strType == "float") { - strAlter += " double DEFAULT '0.0'"; - } else if (strType == "object") { - strAlter += " varchar(64) COLLATE utf8mb4_unicode_ci DEFAULT ''"; - } else if (strType == "vector2") { - strAlter += " varchar(64) COLLATE utf8mb4_unicode_ci DEFAULT ''"; - } else if (strType == "vector3") { - strAlter += " varchar(64) COLLATE utf8mb4_unicode_ci DEFAULT ''"; - } - - strAlter += " COMMENT '" + strDesc + "';"; - - strElementData += strAlter; - } - } - - // 2.2) record - for (std::map::iterator itRecord = pClassDta->xStructData.xRecordList.begin(); - itRecord != pClassDta->xStructData.xRecordList.end(); ++itRecord) { - const std::string &recordName = itRecord->first; - ClassRecord *xRecordData = itRecord->second; - - std::string strType; - std::string strSave; - std::string strCache; - std::string strDesc; - for (std::map::iterator itDesc = xRecordData->descList.begin(); itDesc != xRecordData->descList.end(); ++itDesc) { - const std::string &strKey = itDesc->first; - const std::string &value = itDesc->second; - if (strKey == "Type") { - strType = value; - } else if (strKey == "Save") { - strSave = value; - } else if (strKey == "Cache") { - strCache = value; - } else if (strKey == "Desc") { - strDesc = value; - } - } - - if (strSave == "1" || strCache == "1") { - std::string strAlter = "\nALTER TABLE `" + className + "` ADD `" + recordName + "`"; - strAlter += " text COLLATE utf8mb4_unicode_ci DEFAULT ''"; - strAlter += " COMMENT '" + strDesc + "';"; - - strElementData += strAlter; - } - } - } - - fwrite(strElementData.c_str(), strElementData.length(), 1, iniWriter); - fclose(iniWriter); - - return true; - } -}; -} // namespace sqkctl diff --git a/src/tools/sqkctl/excel/ts_generator.h b/src/tools/sqkctl/excel/ts_generator.h deleted file mode 100644 index 405154b5..00000000 --- a/src/tools/sqkctl/excel/ts_generator.h +++ /dev/null @@ -1,167 +0,0 @@ -#pragma once - -#include "i_generator.h" -namespace sqkctl { -class TSGenerator : public IGenerator { - public: - TSGenerator(const std::string &excelPath, const std::string &outPath) { SetPath(excelPath, outPath); } - - virtual bool Generate(const std::map &classData) override { - - FILE *csWriter = fopen((outPath + "/excel/excel.ts").c_str(), "w"); - - std::string strFileHead = "// -------------------------------------------------------------------------\n"; - strFileHead = strFileHead + "// @FileName : excel.ts\n" + "// @Author : I0gan\n" + - "// @Module : Excel\n" + "// -------------------------------------------------------------------------\n\n"; - fwrite(strFileHead.c_str(), strFileHead.length(), 1, csWriter); - - ClassData *pBaseObject = classData.at("IObject"); - std::string allClassNames = "export const Excel={\n\t\t"; - for (std::map::const_iterator it = classData.begin(); it != classData.end(); ++it) { - const std::string &className = it->first; - ClassData *pClassDta = it->second; - - if (pClassDta->beIncluded || pClassDta->beParted || className == "Include") { - continue; - } - - // ts - std::string strPropertyInfo; - if (it != classData.begin()) { - allClassNames += ','; - } - allClassNames += className; - - strPropertyInfo += "\tclass " + className + "\n\t{\n"; - strPropertyInfo += "\t\t//Class name\n\t"; - strPropertyInfo += "\tpublic static ThisName = \"" + className + "\";\n"; - if (className != "IObject") { - // add base class properties - strPropertyInfo += "\t\t// IObject\n"; - - for (std::map::iterator itProperty = pBaseObject->xStructData.xPropertyList.begin(); - itProperty != pBaseObject->xStructData.xPropertyList.end(); ++itProperty) { - const std::string &propertyName = itProperty->first; - ClassProperty *pClassProperty = itProperty->second; - - strPropertyInfo += "\t\tpublic static " + propertyName + " = \"" + propertyName + "\";"; - strPropertyInfo += "// " + pClassProperty->descList["Type"] + "\n"; - } - } - - strPropertyInfo += "\t\t// Property\n"; - for (std::map::iterator itProperty = pClassDta->xStructData.xPropertyList.begin(); - itProperty != pClassDta->xStructData.xPropertyList.end(); ++itProperty) { - const std::string &propertyName = itProperty->first; - ClassProperty *pClassProperty = itProperty->second; - - strPropertyInfo += "\t\tpublic static " + propertyName + " = \"" + propertyName + "\";"; - strPropertyInfo += "// " + pClassProperty->descList["Type"] + "\n"; - } - - // include property, come from - - for (std::string item : pClassDta->includes) { - auto includeClass = classData.at(item); - - strPropertyInfo += "\t\t// Include Property, come from " + includeClass->xStructData.className + " \n"; - - for (std::map::iterator itProperty = includeClass->xStructData.xPropertyList.begin(); - itProperty != includeClass->xStructData.xPropertyList.end(); ++itProperty) { - const std::string &propertyName = itProperty->first; - ClassProperty *pClassProperty = itProperty->second; - - strPropertyInfo += "\t\tpublic static " + propertyName + " = \"" + propertyName + "\";"; - strPropertyInfo += "// " + pClassProperty->descList["Type"] + "\n"; - } - } - - fwrite(strPropertyInfo.c_str(), strPropertyInfo.length(), 1, csWriter); - - // record - std::string strRecordInfo = ""; - strRecordInfo += "\t\t// Record\n"; - - for (std::map::iterator itRecord = pClassDta->xStructData.xRecordList.begin(); - itRecord != pClassDta->xStructData.xRecordList.end(); ++itRecord) { - const std::string &recordName = itRecord->first; - ClassRecord *pClassRecord = itRecord->second; - - std::cout << "save for ts ---> " << className << "::" << recordName << std::endl; - - strRecordInfo += "\t\tpublic static " + recordName + " = \n\t\t{\n"; - strRecordInfo += "\t\t\t//Class name\n\t"; - strRecordInfo += "\t\t\"ThisName\":\"" + recordName + "\",\n"; - - // col - for (int i = 0; i < pClassRecord->colList.size(); ++i) { - for (std::map::iterator itCol = pClassRecord->colList.begin(); - itCol != pClassRecord->colList.end(); ++itCol) { - - const std::string &colTag = itCol->first; - ClassRecord::RecordColDesc *pRecordColDesc = itCol->second; - - if (pRecordColDesc->index == i) { - if (i != 0) { - strRecordInfo += ",\n"; - } - strRecordInfo += "\t\t\t\"" + colTag + "\":" + std::to_string(pRecordColDesc->index); - } - } - } - - strRecordInfo += "\n\t\t}\n"; - } - - for (std::string item : pClassDta->includes) { - auto includeClass = classData.at(item); - - strRecordInfo += "\t\t// Include Record, come from " + includeClass->xStructData.className + " \n"; - - for (std::map::iterator itRecord = includeClass->xStructData.xRecordList.begin(); - itRecord != includeClass->xStructData.xRecordList.end(); ++itRecord) { - const std::string &recordName = itRecord->first; - ClassRecord *pClassRecord = itRecord->second; - - strRecordInfo += "\t\tpublic static " + recordName + " = \n\t\t{\n"; - strRecordInfo += "\t\t\t//Class name\n\t"; - strRecordInfo += "\t\t\"ThisName\":\"" + recordName + "\",\n"; - - // col - for (int i = 0; i < pClassRecord->colList.size(); ++i) { - for (std::map::iterator itCol = pClassRecord->colList.begin(); - itCol != pClassRecord->colList.end(); ++itCol) { - - const std::string &colTag = itCol->first; - ClassRecord::RecordColDesc *pRecordColDesc = itCol->second; - - if (pRecordColDesc->index == i) { - if (i != 0) { - strRecordInfo += ",\n"; - } - strRecordInfo += "\t\t\t\"" + colTag + "\":" + std::to_string(pRecordColDesc->index); - } - } - } - - strRecordInfo += "\n\t\t}\n"; - } - } - - fwrite(strRecordInfo.c_str(), strRecordInfo.length(), 1, csWriter); - - std::string strHppEnumInfo = ""; - - std::string strClassEnd; - strClassEnd += "\n\t}\n"; - - fwrite(strClassEnd.c_str(), strClassEnd.length(), 1, csWriter); - } - allClassNames += "}\n"; - fwrite(allClassNames.c_str(), allClassNames.length(), 1, csWriter); - fclose(csWriter); - - return false; - } -}; -} // namespace sqkctl