mirror of
https://github.com/EQEmu/Server.git
synced 2025-12-12 01:11:29 +00:00
Importing client files works now
This commit is contained in:
parent
4270d77692
commit
0e6c9820cd
@ -65,7 +65,7 @@ int GetSpellColumns(SharedDatabase *db) {
|
|||||||
MYSQL_RES *result;
|
MYSQL_RES *result;
|
||||||
MYSQL_ROW row;
|
MYSQL_ROW row;
|
||||||
int res = 0;
|
int res = 0;
|
||||||
if(db->RunQuery(query, strlen(query), errbuf, &result)) {
|
if(db->RunQuery(query, (uint32)strlen(query), errbuf, &result)) {
|
||||||
while(row = mysql_fetch_row(result)) {
|
while(row = mysql_fetch_row(result)) {
|
||||||
++res;
|
++res;
|
||||||
}
|
}
|
||||||
@ -85,11 +85,71 @@ void ImportSpells(SharedDatabase *db) {
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
std::string delete_sql = "DELETE FROM spells_new";
|
||||||
|
db->RunQuery(delete_sql.c_str(), (uint32)delete_sql.length());
|
||||||
|
|
||||||
int columns = GetSpellColumns(db);
|
int columns = GetSpellColumns(db);
|
||||||
|
int spells_imported = 0;
|
||||||
|
|
||||||
char buffer[2048];
|
char buffer[2048];
|
||||||
while(fgets(buffer, 2048, f)) {
|
while(fgets(buffer, 2048, f)) {
|
||||||
auto split = SplitString(buffer, '^');
|
for(int i = 0; i < 2048; ++i) {
|
||||||
|
if(buffer[i] == '\n') {
|
||||||
|
buffer[i] = 0;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
std::string escaped = ::EscapeString(buffer);
|
||||||
|
auto split = SplitString(escaped, '^');
|
||||||
|
int line_columns = (int)split.size();
|
||||||
|
std::string sql;
|
||||||
|
|
||||||
|
if(line_columns >= columns) {
|
||||||
|
sql = "INSERT INTO spells_new VALUES(";
|
||||||
|
for(int i = 0; i < columns; ++i) {
|
||||||
|
if(i != 0) {
|
||||||
|
sql += ", '";
|
||||||
|
} else {
|
||||||
|
sql += "'";
|
||||||
|
}
|
||||||
|
|
||||||
|
sql += split[i];
|
||||||
|
sql += "'";
|
||||||
|
}
|
||||||
|
|
||||||
|
sql += ");";
|
||||||
|
} else {
|
||||||
|
int i = 0;
|
||||||
|
sql = "INSERT INTO spells_new VALUES(";
|
||||||
|
for(; i < line_columns; ++i) {
|
||||||
|
if(i != 0) {
|
||||||
|
sql += ", '";
|
||||||
|
} else {
|
||||||
|
sql += "'";
|
||||||
|
}
|
||||||
|
|
||||||
|
sql += split[i];
|
||||||
|
sql += "'";
|
||||||
|
}
|
||||||
|
|
||||||
|
for(; i < columns; ++i) {
|
||||||
|
sql += ", '0'";
|
||||||
|
}
|
||||||
|
|
||||||
|
sql += ");";
|
||||||
|
}
|
||||||
|
|
||||||
|
db->RunQuery(sql.c_str(), (uint32)sql.length());
|
||||||
|
|
||||||
|
spells_imported++;
|
||||||
|
if(spells_imported % 1000 == 0) {
|
||||||
|
LogFile->write(EQEMuLog::Status, "%d spells imported.", spells_imported);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if(spells_imported % 1000 != 0) {
|
||||||
|
LogFile->write(EQEMuLog::Status, "%d spells imported.", spells_imported);
|
||||||
}
|
}
|
||||||
|
|
||||||
fclose(f);
|
fclose(f);
|
||||||
@ -97,22 +157,81 @@ void ImportSpells(SharedDatabase *db) {
|
|||||||
|
|
||||||
void ImportSkillCaps(SharedDatabase *db) {
|
void ImportSkillCaps(SharedDatabase *db) {
|
||||||
LogFile->write(EQEMuLog::Status, "Importing Skill Caps...");
|
LogFile->write(EQEMuLog::Status, "Importing Skill Caps...");
|
||||||
|
|
||||||
FILE *f = fopen("import/SkillCaps.txt", "r");
|
FILE *f = fopen("import/SkillCaps.txt", "r");
|
||||||
if(!f) {
|
if(!f) {
|
||||||
LogFile->write(EQEMuLog::Error, "Unable to open import/SkillCaps.txt to read, skipping.");
|
LogFile->write(EQEMuLog::Error, "Unable to open import/SkillCaps.txt to read, skipping.");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
std::string delete_sql = "DELETE FROM skill_caps";
|
||||||
|
db->RunQuery(delete_sql.c_str(), (uint32)delete_sql.length());
|
||||||
|
|
||||||
|
char buffer[2048];
|
||||||
|
while(fgets(buffer, 2048, f)) {
|
||||||
|
auto split = SplitString(buffer, '^');
|
||||||
|
|
||||||
|
if(split.size() < 4) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
std::string sql;
|
||||||
|
int class_id, skill_id, level, cap;
|
||||||
|
class_id = atoi(split[0].c_str());
|
||||||
|
skill_id = atoi(split[1].c_str());
|
||||||
|
level = atoi(split[2].c_str());
|
||||||
|
cap = atoi(split[3].c_str());
|
||||||
|
|
||||||
|
StringFormat(sql, "INSERT INTO skill_caps(class, skillID, level, cap) VALUES(%d, %d, %d, %d)",
|
||||||
|
class_id, skill_id, level, cap);
|
||||||
|
|
||||||
|
db->RunQuery(sql.c_str(), (uint32)sql.length());
|
||||||
|
}
|
||||||
|
|
||||||
fclose(f);
|
fclose(f);
|
||||||
}
|
}
|
||||||
|
|
||||||
void ImportBaseData(SharedDatabase *db) {
|
void ImportBaseData(SharedDatabase *db) {
|
||||||
LogFile->write(EQEMuLog::Status, "Importing Base Data...");
|
LogFile->write(EQEMuLog::Status, "Importing Base Data...");
|
||||||
|
|
||||||
FILE *f = fopen("import/BaseData.txt", "r");
|
FILE *f = fopen("import/BaseData.txt", "r");
|
||||||
if(!f) {
|
if(!f) {
|
||||||
LogFile->write(EQEMuLog::Error, "Unable to open import/BaseData.txt to read, skipping.");
|
LogFile->write(EQEMuLog::Error, "Unable to open import/BaseData.txt to read, skipping.");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
std::string delete_sql = "DELETE FROM base_data";
|
||||||
|
db->RunQuery(delete_sql.c_str(), (uint32)delete_sql.length());
|
||||||
|
|
||||||
|
char buffer[2048];
|
||||||
|
while(fgets(buffer, 2048, f)) {
|
||||||
|
auto split = SplitString(buffer, '^');
|
||||||
|
|
||||||
|
if(split.size() < 10) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
std::string sql;
|
||||||
|
int level, class_id;
|
||||||
|
double hp, mana, end, unk1, unk2, hp_fac, mana_fac, end_fac;
|
||||||
|
|
||||||
|
level = atoi(split[0].c_str());
|
||||||
|
class_id = atoi(split[1].c_str());
|
||||||
|
hp = atof(split[2].c_str());
|
||||||
|
mana = atof(split[3].c_str());
|
||||||
|
end = atof(split[4].c_str());
|
||||||
|
unk1 = atof(split[5].c_str());
|
||||||
|
unk2 = atof(split[6].c_str());
|
||||||
|
hp_fac = atof(split[7].c_str());
|
||||||
|
mana_fac = atof(split[8].c_str());
|
||||||
|
end_fac = atof(split[9].c_str());
|
||||||
|
|
||||||
|
StringFormat(sql, "INSERT INTO base_data(level, class, hp, mana, end, unk1, unk2, hp_fac, "
|
||||||
|
"mana_fac, end_fac) VALUES(%d, %d, %f, %f, %f, %f, %f, %f, %f, %f)",
|
||||||
|
level, class_id, hp, mana, end, unk1, unk2, hp_fac, mana_fac, end_fac);
|
||||||
|
|
||||||
|
db->RunQuery(sql.c_str(), (uint32)sql.length());
|
||||||
|
}
|
||||||
|
|
||||||
fclose(f);
|
fclose(f);
|
||||||
}
|
}
|
||||||
@ -337,4 +337,41 @@ std::vector<std::string> SplitString(const std::string &str, char delim) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
std::string EscapeString(const std::string &s) {
|
||||||
|
std::string ret;
|
||||||
|
|
||||||
|
size_t sz = s.length();
|
||||||
|
for(size_t i = 0; i < sz; ++i) {
|
||||||
|
char c = s[i];
|
||||||
|
switch(c) {
|
||||||
|
case '\x00':
|
||||||
|
ret += "\\x00";
|
||||||
|
break;
|
||||||
|
case '\n':
|
||||||
|
ret += "\\n";
|
||||||
|
break;
|
||||||
|
case '\r':
|
||||||
|
ret += "\\r";
|
||||||
|
break;
|
||||||
|
case '\\':
|
||||||
|
ret += "\\\\";
|
||||||
|
break;
|
||||||
|
case '\'':
|
||||||
|
ret += "\\'";
|
||||||
|
break;
|
||||||
|
case '\"':
|
||||||
|
ret += "\\\"";
|
||||||
|
break;
|
||||||
|
case '\x1a':
|
||||||
|
ret += "\\x1a";
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
ret.push_back(c);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|||||||
@ -24,12 +24,12 @@
|
|||||||
|
|
||||||
void vStringFormat(std::string& output, const char* format, va_list args);
|
void vStringFormat(std::string& output, const char* format, va_list args);
|
||||||
void StringFormat(std::string& output, const char* format, ...);
|
void StringFormat(std::string& output, const char* format, ...);
|
||||||
|
std::string EscapeString(const std::string &s);
|
||||||
|
|
||||||
const char *MakeLowerString(const char *source);
|
const char *MakeLowerString(const char *source);
|
||||||
|
|
||||||
void MakeLowerString(const char *source, char *target);
|
void MakeLowerString(const char *source, char *target);
|
||||||
|
|
||||||
|
|
||||||
int MakeAnyLenString(char** ret, const char* format, ...);
|
int MakeAnyLenString(char** ret, const char* format, ...);
|
||||||
uint32 AppendAnyLenString(char** ret, uint32* bufsize, uint32* strlen, const char* format, ...);
|
uint32 AppendAnyLenString(char** ret, uint32* bufsize, uint32* strlen, const char* format, ...);
|
||||||
|
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user