diff options
author | ultramage <ultramage@54d463be-8e91-2dee-dedb-b68131a5f0ec> | 2007-07-01 10:19:43 +0000 |
---|---|---|
committer | ultramage <ultramage@54d463be-8e91-2dee-dedb-b68131a5f0ec> | 2007-07-01 10:19:43 +0000 |
commit | 85f4d70c7d6f06bbce93360cb05308de2901a683 (patch) | |
tree | a399cb6da72f091864c9a9ded6c33f8f8e4dd46c /src/txt-converter | |
parent | 601e50bee37d39f293b63ea0f1e0a5572cb67cdb (diff) | |
download | hercules-85f4d70c7d6f06bbce93360cb05308de2901a683.tar.gz hercules-85f4d70c7d6f06bbce93360cb05308de2901a683.tar.bz2 hercules-85f4d70c7d6f06bbce93360cb05308de2901a683.tar.xz hercules-85f4d70c7d6f06bbce93360cb05308de2901a683.zip |
* TXT->SQL converter fixup
- Added missing char_id insert which totally messed up the conversion
- Fixed login converter ignoring many columns (although it had the data)
- Pointed out that Login-stored account variable conversion is MISSING!
- Pointed out that Status, Homunculus and Mapreg conversion is MISSING!
- Blocked the config functions from exiting server when file not found
- Finally added VS8 project files for this thing
git-svn-id: https://rathena.svn.sourceforge.net/svnroot/rathena/trunk@10835 54d463be-8e91-2dee-dedb-b68131a5f0ec
Diffstat (limited to 'src/txt-converter')
-rw-r--r-- | src/txt-converter/char-converter.c | 93 | ||||
-rw-r--r-- | src/txt-converter/login-converter.c | 173 |
2 files changed, 135 insertions, 131 deletions
diff --git a/src/txt-converter/char-converter.c b/src/txt-converter/char-converter.c index 9dd677938..63c261604 100644 --- a/src/txt-converter/char-converter.c +++ b/src/txt-converter/char-converter.c @@ -1,10 +1,7 @@ // (c) eAthena Dev Team - Licensed under GNU GPL // For more information, see LICENCE in the main folder -#include <stdio.h> -#include <stdlib.h> -#include <string.h> - +#include "../common/cbasetypes.h" #include "../common/mmo.h" #include "../common/core.h" #include "../common/strlib.h" @@ -25,12 +22,15 @@ #include "../char_sql/int_guild.h" #include "../char_sql/inter.h" -char t_name[256]; +#include <stdio.h> +#include <stdlib.h> +#include <string.h> #define CHAR_CONF_NAME "conf/char_athena.conf" #define SQL_CONF_NAME "conf/inter_athena.conf" #define INTER_CONF_NAME "conf/inter_athena.conf" //-------------------------------------------------------- + int convert_init(void) { char line[65536]; @@ -41,16 +41,17 @@ int convert_init(void) ShowWarning("Make sure you backup your databases before continuing!\n"); printf("\n"); + ShowNotice("Do you wish to convert your Character Database to SQL? (y/n) : "); - input=getchar(); - if(input == 'y' || input == 'Y'){ + input = getchar(); + if(input == 'y' || input == 'Y') + { struct character_data char_dat; struct accreg reg; ShowStatus("Converting Character Database...\n"); - fp = fopen(char_txt, "r"); - memset (&char_dat, 0, sizeof(struct character_data)); - if(fp==NULL) { + if( (fp = fopen(char_txt, "r")) == NULL ) + { ShowError("Unable to open file [%s]!\n", char_txt); return 0; } @@ -58,9 +59,9 @@ int convert_init(void) while(fgets(line, sizeof(line), fp)) { lineno++; - memset(&char_dat, 0, sizeof(char_dat)); + memset(&char_dat, 0, sizeof(struct character_data)); ret=mmo_char_fromstr(line, &char_dat.status, char_dat.global, &char_dat.global_num); - if(ret > 0){ + if(ret > 0) { count++; parse_friend_txt(&char_dat.status); //Retrieve friends. mmo_char_tosql(char_dat.status.char_id , &char_dat.status); @@ -78,7 +79,7 @@ int convert_init(void) ShowStatus("Converted %d characters.\n", count); fclose(fp); ShowStatus("Converting Account variables Database...\n"); - if( (fp=fopen(accreg_txt,"r")) ==NULL ) + if( (fp = fopen(accreg_txt, "r")) == NULL ) { ShowError("Unable to open file %s!", accreg_txt); return 1; @@ -91,7 +92,7 @@ int convert_init(void) if(inter_accreg_fromstr(line, ®) == 0 && reg.account_id > 0) { count++; inter_accreg_tosql(reg.account_id, 0, ®, 2); //Type 2: Account regs - }else{ + } else { ShowError("accreg reading: broken data [%s] at %s:%d\n", line, accreg_txt, lineno); } } @@ -102,14 +103,15 @@ int convert_init(void) while(getchar() != '\n'); printf("\n"); ShowNotice("Do you wish to convert your Storage Database to SQL? (y/n) : "); - input=getchar(); - if(input == 'y' || input == 'Y') { + input = getchar(); + if(input == 'y' || input == 'Y') + { struct storage storage_; printf("\n"); ShowStatus("Converting Storage Database...\n"); - fp=fopen(storage_txt,"r"); - if(fp==NULL){ - ShowError("can't read : %s\n",storage_txt); + if( (fp = fopen(storage_txt,"r")) == NULL ) + { + ShowError("can't read : %s\n", storage_txt); return 0; } lineno = count = 0; @@ -132,15 +134,18 @@ int convert_init(void) fclose(fp); } + //FIXME: CONVERT STATUS DATA HERE!!! + while(getchar() != '\n'); printf("\n"); ShowNotice("Do you wish to convert your Pet Database to SQL? (y/n) : "); input=getchar(); - if(input == 'y' || input == 'Y') { + if(input == 'y' || input == 'Y') + { struct s_pet p; printf("\n"); ShowStatus("Converting Pet Database...\n"); - if( (fp=fopen(pet_txt,"r")) ==NULL ) + if( (fp = fopen(pet_txt, "r")) == NULL ) { ShowError("Unable to open file %s!", pet_txt); return 1; @@ -150,10 +155,10 @@ int convert_init(void) { lineno++; memset (&p, 0, sizeof(struct s_pet)); - if(inter_pet_fromstr(line, &p)==0 && p.pet_id>0){ + if(inter_pet_fromstr(line, &p)==0 && p.pet_id>0) { count++; inter_pet_tosql(p.pet_id,&p); - }else{ + } else { ShowError("pet reading: broken data [%s] at %s:%d\n", line, pet_txt, lineno); } } @@ -161,15 +166,18 @@ int convert_init(void) fclose(fp); } + //FIXME: CONVERT HOMUNCULUS DATA AND SKILLS HERE!!! + while(getchar() != '\n'); printf("\n"); ShowNotice("Do you wish to convert your Party Database to SQL? (y/n) : "); input=getchar(); - if(input == 'y' || input == 'Y') { + if(input == 'y' || input == 'Y') + { struct party p; printf("\n"); ShowStatus("Converting Party Database...\n"); - if( (fp=fopen(party_txt,"r")) ==NULL ) + if( (fp = fopen(party_txt, "r")) == NULL ) { ShowError("Unable to open file %s!", party_txt); return 1; @@ -193,14 +201,15 @@ int convert_init(void) while(getchar() != '\n'); printf("\n"); - ShowNotice("Do you wish to convert your Guilds/Guild Castles Database to SQL? (y/n) : "); + ShowNotice("Do you wish to convert your Guilds and Castles Database to SQL? (y/n) : "); input=getchar(); - if(input == 'y' || input == 'Y') { + if(input == 'y' || input == 'Y') + { struct guild g; struct guild_castle gc; printf("\n"); ShowStatus("Converting Guild Database...\n"); - if( (fp=fopen(guild_txt,"r")) ==NULL ) + if( (fp = fopen(guild_txt, "r")) == NULL ) { ShowError("Unable to open file %s!", guild_txt); return 1; @@ -220,7 +229,7 @@ int convert_init(void) ShowStatus("Converted %d guilds.\n", count); fclose(fp); ShowStatus("Converting Guild Castles Database...\n"); - if( (fp=fopen(castle_txt,"r")) ==NULL ) + if( (fp = fopen(castle_txt, "r")) == NULL ) { ShowError("Unable to open file %s!", castle_txt); return 1; @@ -229,7 +238,7 @@ int convert_init(void) while(fgets(line, sizeof(line), fp)) { lineno++; - memset (&gc, 0, sizeof(struct guild_castle)); + memset(&gc, 0, sizeof(struct guild_castle)); if (inter_guildcastle_fromstr(line, &gc) == 0) { inter_guildcastle_tosql(&gc); count++; @@ -245,13 +254,14 @@ int convert_init(void) printf("\n"); ShowNotice("Do you wish to convert your Guild Storage Database to SQL? (y/n) : "); input=getchar(); - if(input == 'y' || input == 'Y') { + if(input == 'y' || input == 'Y') + { struct guild_storage storage_; printf("\n"); ShowStatus("Converting Guild Storage Database...\n"); - fp=fopen(guild_storage_txt,"r"); - if(fp==NULL){ - ShowError("can't read : %s\n",guild_storage_txt); + if( (fp = fopen(guild_storage_txt, "r")) == NULL ) + { + ShowError("can't read : %s\n", guild_storage_txt); return 0; } lineno = count = 0; @@ -271,20 +281,23 @@ int convert_init(void) ShowStatus("Converted %d guild storages.\n", count); fclose(fp); } + + //FIXME: CONVERT MAPREG HERE! (after enforcing MAPREGSQL for sql) + return 0; } -int do_init(int argc, char **argv) +int do_init(int argc, char** argv) { - char_config_read((argc>1)?argv[1]:CHAR_CONF_NAME); + char_config_read( (argc > 1) ? argv[1] : CHAR_CONF_NAME); mapindex_init(); - sql_config_read((argc>2)?argv[2]:SQL_CONF_NAME); - inter_init_txt((argc > 3) ? argv[3] :INTER_CONF_NAME); - inter_init_sql((argc > 3) ? argv[3] :INTER_CONF_NAME); + sql_config_read( (argc > 2) ? argv[2] : SQL_CONF_NAME); + inter_init_txt( (argc > 3) ? argv[3] : INTER_CONF_NAME); + inter_init_sql( (argc > 3) ? argv[3] : INTER_CONF_NAME); convert_init(); ShowStatus("Everything's been converted!\n"); mapindex_final(); - exit (0); + return 0; } void do_abort(void) {} diff --git a/src/txt-converter/login-converter.c b/src/txt-converter/login-converter.c index 687689dad..6c194b9d5 100644 --- a/src/txt-converter/login-converter.c +++ b/src/txt-converter/login-converter.c @@ -1,39 +1,26 @@ // (c) eAthena Dev Team - Licensed under GNU GPL // For more information, see LICENCE in the main folder +#include "../common/cbasetypes.h" +#include "../common/mmo.h" +#include "../common/core.h" +#include "../common/db.h" +#include "../common/showmsg.h" + #include <stdio.h> #include <stdlib.h> #include <string.h> -#include "cbasetypes.h" -#ifdef __WIN32 -#include <my_global.h> -#include <my_sys.h> + +#ifdef WIN32 +#include <winsock2.h> #endif #include <mysql.h> -#include "../common/mmo.h" -#include "../common/core.h" -#include "../common/db.h" - -struct auth_dat_ { - int account_id, sex; - char userid[24], pass[24], lastlogin[24]; - int logincount; - int state; // packet 0x006a value + 1 (0: compte OK) - char email[40]; // e-mail (by default: a@a.com) - char error_message[20]; // Message of error code #6 = You are Prohibited to log in until %s (packet 0x006a) - time_t ban_until_time; // # of seconds 1/1/1970 (timestamp): ban time limit of the account (0 = no ban) - time_t connect_until_time; // # of seconds 1/1/1970 (timestamp): Validity limit of the account (0 = unlimited) - char last_ip[16]; // save of last IP of connection - char memo[255]; // a memo field - int account_reg2_num; - struct global_reg account_reg2[ACCOUNT_REG2_NUM]; -} *auth_dat; - char login_account_id[256]="account_id"; char login_userid[256]="userid"; char login_user_pass[256]="user_pass"; char login_db[256]="login"; +char globalreg_db[256]="global_reg_value"; static struct dbt *gm_account_db; @@ -44,6 +31,9 @@ char db_server_pw[32] = "ragnarok"; char db_server_logindb[32] = "ragnarok"; #define INTER_CONF_NAME "conf/inter_athena.conf" +#define GM_ACCOUNT_NAME "conf/GM_account.txt" +#define ACCOUNT_TXT_NAME "save/account.txt" +//-------------------------------------------------------- int isGM(int account_id) { @@ -59,120 +49,122 @@ int read_gm_account() char line[8192]; struct gm_account *p; FILE *fp; - int c=0; - - gm_account_db = db_alloc(__FILE__,__LINE__,DB_INT,DB_OPT_BASE,sizeof(int)); - - printf("Starting reading gm_account\n"); - - if( (fp=fopen("conf/GM_account.txt","r"))==NULL ) + int line_counter = 0, gm_counter = 0; + + ShowStatus("Starting reading gm_account\n"); + + if( (fp = fopen(GM_ACCOUNT_NAME,"r")) == NULL ) return 1; + + gm_account_db = db_alloc(__FILE__,__LINE__,DB_INT,DB_OPT_BASE,sizeof(int)); //FIXME: never deallocated + while(fgets(line,sizeof(line),fp)) { - if(line[0] == '/' || line[1] == '/' || line[2] == '/') + line_counter++; + if ((line[0] == '/' && line[1] == '/') || line[0] == '\0' || line[0] == '\n' || line[0] == '\r') continue; - + p = (struct gm_account*)malloc(sizeof(struct gm_account)); if(p==NULL){ - printf("gm_account: out of memory!\n"); + ShowFatalError("gm_account: out of memory!\n"); exit(0); } - + if(sscanf(line,"%d %d",&p->account_id,&p->level) != 2 || p->level <= 0) { - printf("gm_account: broken data [conf/GM_account.txt] line %d\n",c); + ShowWarning("gm_account: unsupported data format [conf/GM_account.txt] on line %d\n", line_counter); continue; } else { if(p->level > 99) p->level = 99; idb_put(gm_account_db,p->account_id,p); - c++; - printf("GM ID: %d Level: %d\n",p->account_id,p->level); + gm_counter++; + ShowInfo("GM ID: %d Level: %d\n",p->account_id,p->level); } } + fclose(fp); - printf("%d ID of gm_accounts read.\n",c); + ShowStatus("%d ID of gm_accounts read.\n", gm_counter); return 0; } -int mmo_auth_init(void) +int convert_login(void) { MYSQL mysql_handle; char tmpsql[1024]; - MYSQL_RES* sql_res ; - MYSQL_ROW sql_row ; + int line_counter = 0; FILE *fp; int account_id, logincount, user_level, state, n, i; char line[2048], userid[2048], pass[2048], lastlogin[2048], sex, email[2048], error_message[2048], last_ip[2048], memo[2048]; time_t ban_until_time; time_t connect_until_time; - char t_uid[256]; + char dummy[2048]; mysql_init(&mysql_handle); - if(!mysql_real_connect(&mysql_handle, db_server_ip, db_server_id, db_server_pw, - db_server_logindb ,db_server_port, (char *)NULL, 0)) { + if(!mysql_real_connect(&mysql_handle, db_server_ip, db_server_id, db_server_pw, db_server_logindb ,db_server_port, (char *)NULL, 0)) { //pointer check printf("%s\n",mysql_error(&mysql_handle)); exit(1); } - else { - printf ("Connect: Success!\n"); - } - printf ("Convert start...\n"); - - - fp=fopen("save/account.txt","r"); - auth_dat = (struct auth_dat_*)malloc(sizeof(auth_dat[0])*256); - if(fp==NULL) + ShowStatus("Connect: Success!\n"); + + ShowStatus("Convert start...\n"); + fp = fopen(ACCOUNT_TXT_NAME,"r"); + if(fp == NULL) return 0; - while(fgets(line,1023,fp)!=NULL) + + while(fgets(line,sizeof(line),fp) != NULL) { + line_counter++; if(line[0]=='/' && line[1]=='/') continue; - i = sscanf(line, "%d\t%[^\t]\t%[^\t]\t%[^\t]\t%c\t%d\t%d\t" - "%[^\t]\t%[^\t]\t%ld\t%[^\t]\t%[^\t]\t%ld%n", + i = sscanf(line, "%d\t%[^\t]\t%[^\t]\t%[^\t]\t%c\t%d\t%d\t%[^\t]\t%[^\t]\t%ld\t%[^\t]\t%[^\t]\t%ld\t%[^\r\n]%n", &account_id, userid, pass, lastlogin, &sex, &logincount, &state, - email, error_message, &connect_until_time, last_ip, memo, &ban_until_time, &n); + email, error_message, &connect_until_time, last_ip, memo, &ban_until_time, dummy, &n); - sprintf(tmpsql, "SELECT `%s`,`%s`,`%s`,`lastlogin`,`logincount`,`sex`,`connect_until`,`last_ip`,`ban_until`,`state`" - " FROM `%s` WHERE `%s`='%s'", login_account_id, login_userid, login_user_pass, login_db, login_userid, t_uid); + if (i < 13) { + ShowWarning("Skipping incompatible data on line %d\n", line_counter); + continue; + } + + if (i > 13) + ShowWarning("Reading login account variables is not implemented, data will be lost! (line %d)\n", line_counter); - if(mysql_query(&mysql_handle, tmpsql) ) { - printf("DB server Error - %s\n", mysql_error(&mysql_handle) ); - } user_level = isGM(account_id); - printf ("userlevel: %s (%d)- %d\n",userid, account_id, user_level); - sql_res = mysql_store_result(&mysql_handle) ; - sql_row = mysql_fetch_row(sql_res); //row fetching - if (!sql_row) //no row -> insert - sprintf(tmpsql, "INSERT INTO `login` (`account_id`, `userid`, `user_pass`, `lastlogin`, `sex`, `logincount`, `email`, `level`) VALUES (%d, '%s', '%s', '%s', '%c', %d, 'user@athena', %d);",account_id , userid, pass,lastlogin,sex,logincount, user_level); - else //row reside -> updating - sprintf(tmpsql, "UPDATE `login` SET `account_id`='%d', `userid`='%s', `user_pass`='%s', `lastlogin`='%s', `sex`='%c', `logincount`='%d', `email`='user@athena', `level`='%d'\nWHERE `account_id`='%d';",account_id , userid, pass,lastlogin,sex,logincount, user_level, account_id); - printf ("Query: %s\n",tmpsql); - mysql_free_result(sql_res) ; //resource free + ShowInfo("Converting user (id: %d, name: %s, gm level: %d)\n", account_id, userid, user_level); + sprintf(tmpsql, + "REPLACE INTO `login` " + "(`account_id`, `userid`, `user_pass`, `lastlogin`, `sex`, `logincount`, `email`, `level`, `error_message`, `connect_until`, `last_ip`, `memo`, `ban_until`, `state`) " + "VALUES " + "(%d, '%s', '%s', '%s', '%c', %d, '%s', %d, '%s', %u, '%s', '%s', %u, %d)", + account_id , userid, pass, lastlogin, sex, logincount, email, user_level, error_message, (uint32)connect_until_time, last_ip, memo, (uint32)ban_until_time, state); if(mysql_query(&mysql_handle, tmpsql) ) { - printf("DB server Error - %s\n", mysql_error(&mysql_handle) ); + ShowError("DB server Error - %s\n", mysql_error(&mysql_handle) ); + ShowError("Query: %s\n", tmpsql); } + + //TODO: parse the rest of the line to read the login-stored account variables, and import them to `global_reg_value` + // then remove the 'dummy' buffer } fclose(fp); - printf ("Convert end...\n"); + ShowStatus("Convert end...\n"); return 0; } -int login_config_read(const char *cfgName) +int login_config_read(const char* cfgName) { int i; char line[1024], w1[1024], w2[1024]; FILE *fp; - printf ("Start reading interserver configuration: %s\n",cfgName); + ShowStatus("Start reading interserver configuration: %s\n", cfgName); fp=fopen(cfgName,"r"); if(fp==NULL){ - printf("File not found: %s\n", cfgName); + ShowError("File not found: %s\n", cfgName); return 1; } @@ -188,23 +180,23 @@ int login_config_read(const char *cfgName) //add for DB connection if(strcmpi(w1,"db_server_ip")==0){ strcpy(db_server_ip, w2); - printf ("set db_server_ip : %s\n",w2); + ShowStatus("set db_server_ip : %s\n",w2); } else if(strcmpi(w1,"db_server_port")==0){ db_server_port=atoi(w2); - printf ("set db_server_port : %s\n",w2); + ShowStatus("set db_server_port : %s\n",w2); } else if(strcmpi(w1,"db_server_id")==0){ strcpy(db_server_id, w2); - printf ("set db_server_id : %s\n",w2); + ShowStatus("set db_server_id : %s\n",w2); } else if(strcmpi(w1,"db_server_pw")==0){ strcpy(db_server_pw, w2); - printf ("set db_server_pw : %s\n",w2); + ShowStatus("set db_server_pw : %s\n",w2); } else if(strcmpi(w1,"db_server_logindb")==0){ strcpy(db_server_logindb, w2); - printf ("set db_server_logindb : %s\n",w2); + ShowStatus("set db_server_logindb : %s\n",w2); } //support the import command, just like any other config else if(strcmpi(w1,"import")==0){ @@ -212,23 +204,22 @@ int login_config_read(const char *cfgName) } } fclose(fp); - printf ("End reading interserver configuration...\n"); + ShowStatus("End reading interserver configuration...\n"); return 0; } -int do_init(int argc,char **argv) +int do_init(int argc, char** argv) { - char input; - login_config_read( (argc>1)?argv[1]:INTER_CONF_NAME ); + int input; + login_config_read( (argc > 1) ? argv[1] : INTER_CONF_NAME ); read_gm_account(); - printf("\nWarning : Make sure you backup your databases before continuing!\n"); - printf("\nDo you wish to convert your Login Database to SQL? (y/n) : "); - input=getchar(); + ShowInfo("\nWarning : Make sure you backup your databases before continuing!\n"); + ShowInfo("\nDo you wish to convert your Login Database to SQL? (y/n) : "); + input = getchar(); if(input == 'y' || input == 'Y') - mmo_auth_init(); - printf ("Everything's been converted!\n"); - exit (0); + convert_login(); + return 0; } void do_abort(void) {} |