Skip to content

Commit

Permalink
Hercules 1st 2014 MegaPatch
Browse files Browse the repository at this point in the history
  • Loading branch information
shennetsind committed Jan 11, 2014
1 parent 56649bd commit 82b583b
Show file tree
Hide file tree
Showing 34 changed files with 2,144 additions and 1,274 deletions.
7 changes: 6 additions & 1 deletion conf/inter-server.conf
Original file line number Diff line number Diff line change
Expand Up @@ -76,6 +76,8 @@ mysql_reconnect_count:1

//Shared
interreg_db: interreg
global_acc_reg_num_db: global_acc_reg_num_db
global_acc_reg_str_db: global_acc_reg_str_db

// Char Database Tables
char_db: char
Expand All @@ -85,7 +87,6 @@ cart_db: cart_inventory
inventory_db: inventory
charlog_db: charlog
storage_db: storage
reg_db: global_reg_value
skill_db: skill
interlog_db: interlog
memo_db: memo
Expand All @@ -110,6 +111,10 @@ mercenary_owner_db: mercenary_owner
ragsrvinfo_db: ragsrvinfo
elemental_db: elemental
account_data_db: account_data
acc_reg_num_db: acc_reg_num_db
acc_reg_str_db: acc_reg_str_db
char_reg_str_db: char_reg_str_db
char_reg_num_db: char_reg_num_db

// Map Database Tables
item_db_db: item_db
Expand Down
99 changes: 82 additions & 17 deletions sql-files/main.sql
Original file line number Diff line number Diff line change
Expand Up @@ -188,20 +188,6 @@ CREATE TABLE IF NOT EXISTS `hotkey` (
PRIMARY KEY (`char_id`,`hotkey`)
) ENGINE=MyISAM;

--
-- Table structure for table `global_reg_value`
--

CREATE TABLE IF NOT EXISTS `global_reg_value` (
`char_id` int(11) unsigned NOT NULL default '0',
`str` varchar(255) NOT NULL default '',
`value` varchar(255) NOT NULL default '0',
`type` tinyint(1) NOT NULL default '3',
`account_id` int(11) unsigned NOT NULL default '0',
PRIMARY KEY (`char_id`,`str`,`account_id`),
KEY `account_id` (`account_id`)
) ENGINE=MyISAM;

--
-- Table structure for table `guild`
--
Expand Down Expand Up @@ -462,11 +448,10 @@ INSERT INTO `login` (`account_id`, `userid`, `user_pass`, `sex`, `email`) VALUES
--

CREATE TABLE IF NOT EXISTS `mapreg` (
`varname` varchar(32) NOT NULL,
`varname` varchar(32) BINARY NOT NULL,
`index` int(11) unsigned NOT NULL default '0',
`value` varchar(255) NOT NULL,
KEY `varname` (`varname`),
KEY `index` (`index`)
PRIMARY KEY (`varname`,`index`)
) ENGINE=MyISAM;

--
Expand Down Expand Up @@ -672,6 +657,7 @@ INSERT INTO `sql_updates` (`timestamp`) VALUES (1383955424);
INSERT INTO `sql_updates` (`timestamp`) VALUES (1384545461);
INSERT INTO `sql_updates` (`timestamp`) VALUES (1384588175);
INSERT INTO `sql_updates` (`timestamp`) VALUES (1387844126);
INSERT INTO `sql_updates` (`timestamp`) VALUES (1388854043);
INSERT INTO `sql_updates` (`timestamp`) VALUES (1389028967);

--
Expand Down Expand Up @@ -744,6 +730,85 @@ CREATE TABLE IF NOT EXISTS `npc_market_data` (
PRIMARY KEY (`name`,`itemid`)
) ENGINE=MyISAM;

--
-- Table structure for table `acc_reg_num_db`
--

CREATE TABLE IF NOT EXISTS `acc_reg_num_db` (
`account_id` int(11) unsigned NOT NULL default '0',
`key` varchar(32) BINARY NOT NULL default '',
`index` int(11) unsigned NOT NULL default '0',
`value` int(11) NOT NULL default '0',
PRIMARY KEY (`account_id`,`key`,`index`),
KEY `account_id` (`account_id`)
) ENGINE=MyISAM;

--
-- Table structure for table `acc_reg_str_db`
--

CREATE TABLE IF NOT EXISTS `acc_reg_str_db` (
`account_id` int(11) unsigned NOT NULL default '0',
`key` varchar(32) BINARY NOT NULL default '',
`index` int(11) unsigned NOT NULL default '0',
`value` varchar(254) NOT NULL default '0',
PRIMARY KEY (`account_id`,`key`,`index`),
KEY `account_id` (`account_id`)
) ENGINE=MyISAM;

--
-- Table structure for table `char_reg_num_db`
--

CREATE TABLE IF NOT EXISTS `char_reg_num_db` (
`char_id` int(11) unsigned NOT NULL default '0',
`key` varchar(32) BINARY NOT NULL default '',
`index` int(11) unsigned NOT NULL default '0',
`value` int(11) NOT NULL default '0',
PRIMARY KEY (`char_id`,`key`,`index`),
KEY `char_id` (`char_id`)
) ENGINE=MyISAM;

--
-- Table structure for table `char_reg_str_db`
--

CREATE TABLE IF NOT EXISTS `char_reg_str_db` (
`char_id` int(11) unsigned NOT NULL default '0',
`key` varchar(32) BINARY NOT NULL default '',
`index` int(11) unsigned NOT NULL default '0',
`value` varchar(254) NOT NULL default '0',
PRIMARY KEY (`char_id`,`key`,`index`),
KEY `char_id` (`char_id`)
) ENGINE=MyISAM;

--
-- Table structure for table `global_acc_reg_num_db`
--

CREATE TABLE IF NOT EXISTS `global_acc_reg_num_db` (
`account_id` int(11) unsigned NOT NULL default '0',
`key` varchar(32) BINARY NOT NULL default '',
`index` int(11) unsigned NOT NULL default '0',
`value` int(11) NOT NULL default '0',
PRIMARY KEY (`account_id`,`key`,`index`),
KEY `account_id` (`account_id`)
) ENGINE=MyISAM;

--
-- Table structure for table `global_acc_reg_str_db`
--


CREATE TABLE IF NOT EXISTS `global_acc_reg_str_db` (
`account_id` int(11) unsigned NOT NULL default '0',
`key` varchar(32) BINARY NOT NULL default '',
`index` int(11) unsigned NOT NULL default '0',
`value` varchar(254) NOT NULL default '0',
PRIMARY KEY (`account_id`,`key`,`index`),
KEY `account_id` (`account_id`)
) ENGINE=MyISAM;

--
-- Table structure for table `autotrade_merchants`
--
Expand Down
61 changes: 61 additions & 0 deletions sql-files/upgrades/2014-01-04--16-47.sql
Original file line number Diff line number Diff line change
@@ -0,0 +1,61 @@
#1388854043
ALTER TABLE `mapreg` ADD PRIMARY KEY (`varname`, `index`);
ALTER TABLE `mapreg` DROP INDEX `varname`;
ALTER TABLE `mapreg` DROP INDEX `index`;
ALTER TABLE `mapreg` MODIFY `varname` varchar(32) BINARY NOT NULL;
CREATE TABLE IF NOT EXISTS `acc_reg_num_db` (
`account_id` int(11) unsigned NOT NULL default '0',
`key` varchar(32) BINARY NOT NULL default '',
`index` int(11) unsigned NOT NULL default '0',
`value` int(11) NOT NULL default '0',
PRIMARY KEY (`account_id`,`key`,`index`),
KEY `account_id` (`account_id`)
) ENGINE=MyISAM;
CREATE TABLE IF NOT EXISTS `acc_reg_str_db` (
`account_id` int(11) unsigned NOT NULL default '0',
`key` varchar(32) BINARY NOT NULL default '',
`index` int(11) unsigned NOT NULL default '0',
`value` varchar(254) NOT NULL default '0',
PRIMARY KEY (`account_id`,`key`,`index`),
KEY `account_id` (`account_id`)
) ENGINE=MyISAM;
CREATE TABLE IF NOT EXISTS `char_reg_num_db` (
`char_id` int(11) unsigned NOT NULL default '0',
`key` varchar(32) BINARY NOT NULL default '',
`index` int(11) unsigned NOT NULL default '0',
`value` int(11) NOT NULL default '0',
PRIMARY KEY (`char_id`,`key`,`index`),
KEY `char_id` (`char_id`)
) ENGINE=MyISAM;
CREATE TABLE IF NOT EXISTS `char_reg_str_db` (
`char_id` int(11) unsigned NOT NULL default '0',
`key` varchar(32) BINARY NOT NULL default '',
`index` int(11) unsigned NOT NULL default '0',
`value` varchar(254) NOT NULL default '0',
PRIMARY KEY (`char_id`,`key`,`index`),
KEY `char_id` (`char_id`)
) ENGINE=MyISAM;
CREATE TABLE IF NOT EXISTS `global_acc_reg_num_db` (
`account_id` int(11) unsigned NOT NULL default '0',
`key` varchar(32) BINARY NOT NULL default '',
`index` int(11) unsigned NOT NULL default '0',
`value` int(11) NOT NULL default '0',
PRIMARY KEY (`account_id`,`key`,`index`),
KEY `account_id` (`account_id`)
) ENGINE=MyISAM;
CREATE TABLE IF NOT EXISTS `global_acc_reg_str_db` (
`account_id` int(11) unsigned NOT NULL default '0',
`key` varchar(32) BINARY NOT NULL default '',
`index` int(11) unsigned NOT NULL default '0',
`value` varchar(254) NOT NULL default '0',
PRIMARY KEY (`account_id`,`key`,`index`),
KEY `account_id` (`account_id`)
) ENGINE=MyISAM;
INSERT INTO `acc_reg_num_db` (`account_id`, `key`, `index`, `value`) SELECT `account_id`, `str`, 0, `value` FROM `global_reg_value` WHERE `type` = 2 AND `str` NOT LIKE '%$';
INSERT INTO `acc_reg_str_db` (`account_id`, `key`, `index`, `value`) SELECT `account_id`, `str`, 0, `value` FROM `global_reg_value` WHERE `type` = 2 AND `str` LIKE '%$';
INSERT INTO `char_reg_num_db` (`char_id`, `key`, `index`, `value`) SELECT `char_id`, `str`, 0, `value` FROM `global_reg_value` WHERE `type` = 3 AND `str` NOT LIKE '%$';
INSERT INTO `char_reg_str_db` (`char_id`, `key`, `index`, `value`) SELECT `char_id`, `str`, 0, `value` FROM `global_reg_value` WHERE `type` = 3 AND `str` LIKE '%$';
INSERT INTO `global_acc_reg_num_db` (`account_id`, `key`, `index`, `value`) SELECT `account_id`, `str`, 0, `value` FROM `global_reg_value` WHERE `type` = 1 AND `str` NOT LIKE '%$';
INSERT INTO `global_acc_reg_str_db` (`account_id`, `key`, `index`, `value`) SELECT `account_id`, `str`, 0, `value` FROM `global_reg_value` WHERE `type` = 1 AND `str` LIKE '%$';
#DROP TABLE `global_reg_value`;
INSERT INTO `sql_updates` (`timestamp`) VALUES (1388854043);
1 change: 1 addition & 0 deletions sql-files/upgrades/index.txt
Original file line number Diff line number Diff line change
Expand Up @@ -16,4 +16,5 @@
2013-11-16--07-49.sql
2013-11-18--08-23.sql
2013-12-24--00-15.sql
2014-01-04--16-47.sql
2014-01-06--17-22.sql
112 changes: 87 additions & 25 deletions src/char/char.c
Original file line number Diff line number Diff line change
Expand Up @@ -45,7 +45,6 @@ char inventory_db[256] = "inventory";
char charlog_db[256] = "charlog";
char storage_db[256] = "storage";
char interlog_db[256] = "interlog";
char reg_db[256] = "global_reg_value";
char skill_db[256] = "skill";
char memo_db[256] = "memo";
char guild_db[256] = "guild";
Expand All @@ -71,6 +70,10 @@ char ragsrvinfo_db[256] = "ragsrvinfo";
char elemental_db[256] = "elemental";
char interreg_db[32] = "interreg";
char account_data_db[256] = "account_data";
char acc_reg_num_db[32] = "acc_reg_num_db";
char acc_reg_str_db[32] = "acc_reg_str_db";
char char_reg_str_db[32] = "char_reg_str_db";
char char_reg_num_db[32] = "char_reg_num_db";

// show loading/saving messages
int save_log = 1;
Expand Down Expand Up @@ -1793,7 +1796,9 @@ int delete_char_sql(int char_id)
Sql_ShowDebug(sql_handle);

/* delete character registry */
if( SQL_ERROR == SQL->Query(sql_handle, "DELETE FROM `%s` WHERE `type`=3 AND `char_id`='%d'", reg_db, char_id) )
if( SQL_ERROR == SQL->Query(sql_handle, "DELETE FROM `%s` WHERE `char_id`='%d'", char_reg_str_db, char_id) )
Sql_ShowDebug(sql_handle);
if( SQL_ERROR == SQL->Query(sql_handle, "DELETE FROM `%s` WHERE `char_id`='%d'", char_reg_num_db, char_id) )
Sql_ShowDebug(sql_handle);

/* delete skills */
Expand Down Expand Up @@ -2460,17 +2465,12 @@ int parse_fromlogin(int fd) {
break;

// reply to an account_reg2 registry request
case 0x2729:
case 0x3804:
if (RFIFOREST(fd) < 4 || RFIFOREST(fd) < RFIFOW(fd,2))
return 0;

{ //Receive account_reg2 registry, forward to map servers.
unsigned char buf[13+ACCOUNT_REG2_NUM*sizeof(struct global_reg)];
memcpy(buf,RFIFOP(fd,0), RFIFOW(fd,2));
WBUFW(buf,0) = 0x3804; //Map server can now receive all kinds of reg values with the same packet. [Skotlex]
mapif_sendall(buf, WBUFW(buf,2));
//Receive account_reg2 registry, forward to map servers.
mapif_sendall(RFIFOP(fd, 0), RFIFOW(fd,2));
RFIFOSKIP(fd, RFIFOW(fd,2));
}
break;

// State change of account/ban notification (from login-server)
Expand Down Expand Up @@ -2603,21 +2603,76 @@ int request_accreg2(int account_id, int char_id)
}
return 0;
}

//Send packet forward to login-server for account saving
int save_accreg2(unsigned char* buf, int len)
{
if (login_fd > 0) {
WFIFOHEAD(login_fd,len+4);
memcpy(WFIFOP(login_fd,4), buf, len);
WFIFOW(login_fd,0) = 0x2728;
WFIFOW(login_fd,2) = len+4;
WFIFOSET(login_fd,len+4);
return 1;
/**
* Handles global account reg saving that continues with global_accreg_to_login_add and global_accreg_to_send
**/
void global_accreg_to_login_start (int account_id, int char_id) {
WFIFOHEAD(login_fd, 60000 + 300);
WFIFOW(login_fd,0) = 0x2728;
WFIFOW(login_fd,2) = 14;
WFIFOL(login_fd,4) = account_id;
WFIFOL(login_fd,8) = char_id;
WFIFOW(login_fd,12) = 0;/* count */
}
/**
* Completes global account reg saving that starts global_accreg_to_login_start and continues with global_accreg_to_login_add
**/
void global_accreg_to_login_send (void) {
WFIFOSET(login_fd, WFIFOW(login_fd,2));
}
/**
* Handles global account reg saving that starts global_accreg_to_login_start and ends with global_accreg_to_send
**/
void global_accreg_to_login_add (const char *key, unsigned int index, intptr_t val, bool is_string) {
int nlen = WFIFOW(login_fd, 2);
size_t len;

len = strlen(key)+1;

WFIFOB(login_fd, nlen) = (unsigned char)len;/* won't be higher; the column size is 32 */
nlen += 1;

safestrncpy((char*)WFIFOP(login_fd,nlen), key, len);
nlen += len;

WFIFOL(login_fd, nlen) = index;
nlen += 4;

if( is_string ) {
WFIFOB(login_fd, nlen) = val ? 2 : 3;
nlen += 1;

if( val ) {
char *sval = (char*)val;
len = strlen(sval)+1;

WFIFOB(login_fd, nlen) = (unsigned char)len;/* won't be higher; the column size is 254 */
nlen += 1;

safestrncpy((char*)WFIFOP(login_fd,nlen), sval, len);
nlen += len;
}

} else {
WFIFOB(login_fd, nlen) = val ? 0 : 1;
nlen += 1;

if( val ) {
WFIFOL(login_fd, nlen) = (int)val;
nlen += 4;
}

}

WFIFOW(login_fd,12) += 1;

WFIFOW(login_fd, 2) = nlen;
if( WFIFOW(login_fd, 2) > 60000 ) {
int account_id = WFIFOL(login_fd,4), char_id = WFIFOL(login_fd,8);
global_accreg_to_login_send();
global_accreg_to_login_start(account_id,char_id);/* prepare next */
}
return 0;
}

void char_read_fame_list(void) {
int i;
char* data;
Expand Down Expand Up @@ -4901,8 +4956,6 @@ void sql_config_read(const char* cfgName)
safestrncpy(charlog_db, w2, sizeof(charlog_db));
else if(!strcmpi(w1,"storage_db"))
safestrncpy(storage_db, w2, sizeof(storage_db));
else if(!strcmpi(w1,"reg_db"))
safestrncpy(reg_db, w2, sizeof(reg_db));
else if(!strcmpi(w1,"skill_db"))
safestrncpy(skill_db, w2, sizeof(skill_db));
else if(!strcmpi(w1,"interlog_db"))
Expand Down Expand Up @@ -4955,6 +5008,15 @@ void sql_config_read(const char* cfgName)
safestrncpy(interreg_db,w2,sizeof(interreg_db));
else if(!strcmpi(w1,"account_data_db"))
safestrncpy(account_data_db,w2,sizeof(account_data_db));
else if(!strcmpi(w1,"char_reg_num_db"))
safestrncpy(char_reg_num_db, w2, sizeof(char_reg_num_db));
else if(!strcmpi(w1,"char_reg_str_db"))
safestrncpy(char_reg_str_db, w2, sizeof(char_reg_str_db));
else if(!strcmpi(w1,"acc_reg_str_db"))
safestrncpy(acc_reg_str_db, w2, sizeof(acc_reg_str_db));
else if(!strcmpi(w1,"acc_reg_num_db"))
safestrncpy(acc_reg_num_db, w2, sizeof(acc_reg_num_db));

//support the import command, just like any other config
else if(!strcmpi(w1,"import"))
sql_config_read(w2);
Expand Down
Loading

0 comments on commit 82b583b

Please sign in to comment.