diff --git a/sql-files/main.sql b/sql-files/main.sql index 4689017d7b..8de9536a59 100644 --- a/sql-files/main.sql +++ b/sql-files/main.sql @@ -390,7 +390,6 @@ CREATE TABLE IF NOT EXISTS `elemental` ( CREATE TABLE IF NOT EXISTS `friends` ( `char_id` int(11) NOT NULL default '0', - `friend_account` int(11) NOT NULL default '0', `friend_id` int(11) NOT NULL default '0', PRIMARY KEY (`char_id`, `friend_id`) ) ENGINE=MyISAM; @@ -506,18 +505,9 @@ CREATE TABLE IF NOT EXISTS `guild_expulsion` ( CREATE TABLE IF NOT EXISTS `guild_member` ( `guild_id` int(11) unsigned NOT NULL default '0', - `account_id` int(11) unsigned NOT NULL default '0', `char_id` int(11) unsigned NOT NULL default '0', - `hair` tinyint(6) unsigned NOT NULL default '0', - `hair_color` smallint(6) unsigned NOT NULL default '0', - `gender` tinyint(6) unsigned NOT NULL default '0', - `class` smallint(6) unsigned NOT NULL default '0', - `lv` smallint(6) unsigned NOT NULL default '0', `exp` bigint(20) unsigned NOT NULL default '0', - `exp_payper` tinyint(11) unsigned NOT NULL default '0', - `online` tinyint(4) unsigned NOT NULL default '0', `position` tinyint(6) unsigned NOT NULL default '0', - `name` varchar(24) NOT NULL default '', PRIMARY KEY (`guild_id`,`char_id`), KEY `char_id` (`char_id`) ) ENGINE=MyISAM; diff --git a/sql-files/upgrades/upgrade_20200125.sql b/sql-files/upgrades/upgrade_20200125.sql new file mode 100644 index 0000000000..46f483a21d --- /dev/null +++ b/sql-files/upgrades/upgrade_20200125.sql @@ -0,0 +1,13 @@ +ALTER TABLE `guild_member` + DROP COLUMN `account_id`, + DROP COLUMN `hair`, + DROP COLUMN `hair_color`, + DROP COLUMN `gender`, + DROP COLUMN `class`, + DROP COLUMN `lv`, + DROP COLUMN `exp_payper`, + DROP COLUMN `online`, + DROP COLUMN `name`; + +ALTER TABLE `friends` + DROP COLUMN `friend_account`; diff --git a/src/char/char.cpp b/src/char/char.cpp index 11e8157385..2e35c95e9e 100644 --- a/src/char/char.cpp +++ b/src/char/char.cpp @@ -250,8 +250,6 @@ void char_set_all_offline_sql(void){ //Set all players to 'OFFLINE' if( SQL_ERROR == Sql_Query(sql_handle, "UPDATE `%s` SET `online` = '0'", schema_config.char_db) ) Sql_ShowDebug(sql_handle); - if( SQL_ERROR == Sql_Query(sql_handle, "UPDATE `%s` SET `online` = '0'", schema_config.guild_member_db) ) - Sql_ShowDebug(sql_handle); if( SQL_ERROR == Sql_Query(sql_handle, "UPDATE `%s` SET `connect_member` = '0'", schema_config.guild_db) ) Sql_ShowDebug(sql_handle); } @@ -467,14 +465,14 @@ int char_mmo_char_tosql(uint32 char_id, struct mmo_charstatus* p){ } StringBuf_Clear(&buf); - StringBuf_Printf(&buf, "INSERT INTO `%s` (`char_id`, `friend_account`, `friend_id`) VALUES ", schema_config.friend_db); + StringBuf_Printf(&buf, "INSERT INTO `%s` (`char_id`, `friend_id`) VALUES ", schema_config.friend_db); for( i = 0, count = 0; i < MAX_FRIENDS; ++i ) { if( p->friends[i].char_id > 0 ) { if( count ) StringBuf_AppendStr(&buf, ","); - StringBuf_Printf(&buf, "('%d','%d','%d')", char_id, p->friends[i].account_id, p->friends[i].char_id); + StringBuf_Printf(&buf, "('%d','%d')", char_id, p->friends[i].char_id); count++; } } @@ -1186,8 +1184,8 @@ int char_mmo_char_fromsql(uint32 char_id, struct mmo_charstatus* p, bool load_ev StringBuf_Printf(&msg_buf, " %d skills", skill_count); //read friends - //`friends` (`char_id`, `friend_account`, `friend_id`) - if( SQL_ERROR == SqlStmt_Prepare(stmt, "SELECT c.`account_id`, c.`char_id`, c.`name` FROM `%s` c LEFT JOIN `%s` f ON f.`friend_account` = c.`account_id` AND f.`friend_id` = c.`char_id` WHERE f.`char_id`=? LIMIT %d", schema_config.char_db, schema_config.friend_db, MAX_FRIENDS) + //`friends` (`char_id`, `friend_id`) + if( SQL_ERROR == SqlStmt_Prepare(stmt, "SELECT c.`account_id`, c.`char_id`, c.`name` FROM `%s` c LEFT JOIN `%s` f ON f.`friend_id` = c.`char_id` WHERE f.`char_id`=? LIMIT %d", schema_config.char_db, schema_config.friend_db, MAX_FRIENDS) || SQL_ERROR == SqlStmt_BindParam(stmt, 0, SQLDT_INT, &char_id, 0) || SQL_ERROR == SqlStmt_Execute(stmt) || SQL_ERROR == SqlStmt_BindColumn(stmt, 0, SQLDT_INT, &tmp_friend.account_id, 0, NULL, NULL) @@ -2402,9 +2400,7 @@ bool char_checkdb(void){ return false; } //checking guild_member_db - if( SQL_ERROR == Sql_Query(sql_handle, "SELECT `guild_id`,`account_id`,`char_id`,`hair`," - "`hair_color`,`gender`,`class`,`lv`,`exp`,`exp_payper`,`online`,`position`,`name`" - " FROM `%s` LIMIT 1;", schema_config.guild_member_db) ){ + if( SQL_ERROR == Sql_Query(sql_handle, "SELECT `guild_id`,`char_id`,`exp`,`position` FROM `%s` LIMIT 1;", schema_config.guild_member_db) ){ Sql_ShowDebug(sql_handle); return false; } @@ -2431,7 +2427,7 @@ bool char_checkdb(void){ return false; } //checking friend_db - if( SQL_ERROR == Sql_Query(sql_handle, "SELECT `char_id`,`friend_account`,`friend_id` FROM `%s` LIMIT 1;", schema_config.friend_db) ){ + if( SQL_ERROR == Sql_Query(sql_handle, "SELECT `char_id`,`friend_id` FROM `%s` LIMIT 1;", schema_config.friend_db) ){ Sql_ShowDebug(sql_handle); return false; } @@ -3266,7 +3262,7 @@ int do_init(int argc, char **argv) Sql_ShowDebug(sql_handle); //guildmemberdb clean - if( SQL_ERROR == Sql_Query(sql_handle, "DELETE FROM `%s` WHERE `guild_id` = '0' AND `account_id` = '0' AND `char_id` = '0'", schema_config.guild_member_db) ) + if( SQL_ERROR == Sql_Query(sql_handle, "DELETE FROM `%s` WHERE `guild_id` = '0' AND `char_id` = '0'", schema_config.guild_member_db) ) Sql_ShowDebug(sql_handle); set_defaultparse(chclif_parse); diff --git a/src/char/int_guild.cpp b/src/char/int_guild.cpp index b88f9c7db5..5aeda89139 100644 --- a/src/char/int_guild.cpp +++ b/src/char/int_guild.cpp @@ -90,9 +90,9 @@ TIMER_FUNC(guild_save_timer){ return 0; } -int inter_guild_removemember_tosql(uint32 account_id, uint32 char_id) +int inter_guild_removemember_tosql(uint32 char_id) { - if( SQL_ERROR == Sql_Query(sql_handle, "DELETE from `%s` where `account_id` = '%d' and `char_id` = '%d'", schema_config.guild_member_db, account_id, char_id) ) + if( SQL_ERROR == Sql_Query(sql_handle, "DELETE from `%s` where `char_id` = '%d'", schema_config.guild_member_db, char_id) ) Sql_ShowDebug(sql_handle); if( SQL_ERROR == Sql_Query(sql_handle, "UPDATE `%s` SET `guild_id` = '0' WHERE `char_id` = '%d'", schema_config.char_db, char_id) ) Sql_ShowDebug(sql_handle); @@ -109,7 +109,7 @@ int inter_guild_tosql(struct guild *g,int flag) // GS_LEVEL `guild_lv`,`max_member`,`exp`,`next_exp`,`skill_point` // GS_BASIC `name`,`master`,`char_id` - // GS_MEMBER `guild_member` (`guild_id`,`account_id`,`char_id`,`hair`,`hair_color`,`gender`,`class`,`lv`,`exp`,`exp_payper`,`online`,`position`,`name`) + // GS_MEMBER `guild_member` (`guild_id`,`char_id`,`exp`,`position`) // GS_POSITION `guild_position` (`guild_id`,`position`,`name`,`mode`,`exp_mode`) // GS_ALLIANCE `guild_alliance` (`guild_id`,`opposition`,`alliance_id`,`name`) // GS_EXPULSION `guild_expulsion` (`guild_id`,`account_id`,`name`,`mes`) @@ -239,12 +239,9 @@ int inter_guild_tosql(struct guild *g,int flag) continue; if(m->account_id) { //Since nothing references guild member table as foreign keys, it's safe to use REPLACE INTO - Sql_EscapeStringLen(sql_handle, esc_name, m->name, strnlen(m->name, NAME_LENGTH)); - if( SQL_ERROR == Sql_Query(sql_handle, "REPLACE INTO `%s` (`guild_id`,`account_id`,`char_id`,`hair`,`hair_color`,`gender`,`class`,`lv`,`exp`,`exp_payper`,`online`,`position`,`name`) " - "VALUES ('%d','%d','%d','%d','%d','%d','%d','%d','%" PRIu64 "','%d','%d','%d','%s')", - schema_config.guild_member_db, g->guild_id, m->account_id, m->char_id, - m->hair, m->hair_color, m->gender, - m->class_, m->lv, m->exp, m->exp_payper, m->online, m->position, esc_name) ) + if( SQL_ERROR == Sql_Query(sql_handle, "REPLACE INTO `%s` (`guild_id`,`char_id`,`exp`,`position`) " + "VALUES ('%d','%d','%" PRIu64 "','%d')", + schema_config.guild_member_db, g->guild_id, m->char_id, m->exp, m->position ) ) Sql_ShowDebug(sql_handle); if (m->modified&GS_MEMBER_NEW || new_guild == 1) { @@ -411,7 +408,7 @@ struct guild * inter_guild_fromsql(int guild_id) } // load guild member info - if( SQL_ERROR == Sql_Query(sql_handle, "SELECT `m`.`account_id`,`m`.`char_id`,`m`.`hair`,`m`.`hair_color`,`m`.`gender`,`m`.`class`,`m`.`lv`,`m`.`exp`,`m`.`exp_payper`,`m`.`online`,`m`.`position`,`m`.`name`,coalesce(UNIX_TIMESTAMP(`c`.`last_login`),0) " + if( SQL_ERROR == Sql_Query(sql_handle, "SELECT `c`.`account_id`,`m`.`char_id`,`c`.`hair`,`c`.`hair_color`,`c`.`sex`,`c`.`class`,`c`.`base_level`,`m`.`exp`,`c`.`online`,`m`.`position`,`c`.`name`,coalesce(UNIX_TIMESTAMP(`c`.`last_login`),0) " "FROM `%s` `m` INNER JOIN `%s` `c` on `c`.`char_id`=`m`.`char_id` WHERE `m`.`guild_id`='%d' ORDER BY `position`", schema_config.guild_member_db, schema_config.char_db, guild_id) ) { Sql_ShowDebug(sql_handle); @@ -426,17 +423,28 @@ struct guild * inter_guild_fromsql(int guild_id) Sql_GetData(sql_handle, 1, &data, NULL); m->char_id = atoi(data); Sql_GetData(sql_handle, 2, &data, NULL); m->hair = atoi(data); Sql_GetData(sql_handle, 3, &data, NULL); m->hair_color = atoi(data); - Sql_GetData(sql_handle, 4, &data, NULL); m->gender = atoi(data); + Sql_GetData(sql_handle, 4, &data, NULL); + switch( *data ){ + case 'F': + m->gender = SEX_FEMALE; + break; + case 'M': + m->gender = SEX_MALE; + break; + default: + ShowWarning( "inter_guild_fromsql: Unsupported gender %c for char_id %u. Defaulting to male...\n", *data, m->char_id ); + m->gender = SEX_MALE; + break; + } Sql_GetData(sql_handle, 5, &data, NULL); m->class_ = atoi(data); Sql_GetData(sql_handle, 6, &data, NULL); m->lv = atoi(data); Sql_GetData(sql_handle, 7, &data, NULL); m->exp = strtoull(data, NULL, 10); - Sql_GetData(sql_handle, 8, &data, NULL); m->exp_payper = (unsigned int)atoi(data); - Sql_GetData(sql_handle, 9, &data, NULL); m->online = atoi(data); - Sql_GetData(sql_handle, 10, &data, NULL); m->position = atoi(data); + Sql_GetData(sql_handle, 8, &data, NULL); m->online = atoi(data); + Sql_GetData(sql_handle, 9, &data, NULL); m->position = atoi(data); if( m->position >= MAX_GUILDPOSITION ) // Fix reduction of MAX_GUILDPOSITION [PoW] m->position = MAX_GUILDPOSITION - 1; - Sql_GetData(sql_handle, 11, &data, &len); memcpy(m->name, data, zmin(len, NAME_LENGTH)); - Sql_GetData(sql_handle, 12, &data, NULL); m->last_login = atoi(data); + Sql_GetData(sql_handle, 10, &data, &len); memcpy(m->name, data, zmin(len, NAME_LENGTH)); + Sql_GetData(sql_handle, 11, &data, NULL); m->last_login = atoi(data); m->modified = GS_MEMBER_UNMODIFIED; } @@ -1327,7 +1335,7 @@ int mapif_parse_GuildLeave(int fd, int guild_id, uint32 account_id, uint32 char_ } mapif_guild_withdraw(guild_id,account_id,char_id,flag,g->member[i].name,mes); - inter_guild_removemember_tosql(g->member[i].account_id,g->member[i].char_id); + inter_guild_removemember_tosql(g->member[i].char_id); memset(&g->member[i],0,sizeof(struct guild_member)); diff --git a/src/common/mmo.hpp b/src/common/mmo.hpp index 5431606fec..0df0c87f79 100644 --- a/src/common/mmo.hpp +++ b/src/common/mmo.hpp @@ -627,7 +627,6 @@ struct guild_member { uint32 account_id, char_id; short hair,hair_color,gender,class_,lv; uint64 exp; - int exp_payper; short online,position; char name[NAME_LENGTH]; struct map_session_data *sd; diff --git a/src/map/guild.cpp b/src/map/guild.cpp index 1a878d4a27..13092c477b 100644 --- a/src/map/guild.cpp +++ b/src/map/guild.cpp @@ -376,8 +376,7 @@ void guild_makemember(struct guild_member *m,struct map_session_data *sd) { m->gender = sd->status.sex; m->class_ = sd->status.class_; m->lv = sd->status.base_level; -// m->exp = 0; -// m->exp_payper = 0; + m->exp = 0; m->online = 1; m->position = MAX_GUILDPOSITION-1; safestrncpy(m->name,sd->status.name,NAME_LENGTH);