diff --git a/sql-files/main.sql b/sql-files/main.sql index 6420b3107c..334a37d57b 100644 --- a/sql-files/main.sql +++ b/sql-files/main.sql @@ -86,6 +86,7 @@ CREATE TABLE IF NOT EXISTS `auction` ( `option_val4` smallint(5) NOT NULL default '0', `option_parm4` tinyint(3) NOT NULL default '0', `unique_id` bigint(20) unsigned NOT NULL default '0', + `enchantgrade` tinyint unsigned NOT NULL default '0', PRIMARY KEY (`auction_id`) ) ENGINE=MyISAM; @@ -185,6 +186,7 @@ CREATE TABLE IF NOT EXISTS `cart_inventory` ( `expire_time` int(11) unsigned NOT NULL default '0', `bound` tinyint(3) unsigned NOT NULL default '0', `unique_id` bigint(20) unsigned NOT NULL default '0', + `enchantgrade` tinyint unsigned NOT NULL default '0', PRIMARY KEY (`id`), KEY `char_id` (`char_id`) ) ENGINE=MyISAM; @@ -576,6 +578,7 @@ CREATE TABLE IF NOT EXISTS `guild_storage` ( `expire_time` int(11) unsigned NOT NULL default '0', `bound` tinyint(3) unsigned NOT NULL default '0', `unique_id` bigint(20) unsigned NOT NULL default '0', + `enchantgrade` tinyint unsigned NOT NULL default '0', PRIMARY KEY (`id`), KEY `guild_id` (`guild_id`) ) ENGINE=MyISAM; @@ -617,6 +620,7 @@ CREATE TABLE IF NOT EXISTS `guild_storage_log` ( `expire_time` int(11) unsigned NOT NULL default '0', `unique_id` bigint(20) unsigned NOT NULL default '0', `bound` tinyint(1) unsigned NOT NULL default '0', + `enchantgrade` tinyint unsigned NOT NULL default '0', PRIMARY KEY (`id`), INDEX (`guild_id`) ) ENGINE=MyISAM AUTO_INCREMENT=1; @@ -715,6 +719,7 @@ CREATE TABLE IF NOT EXISTS `inventory` ( `bound` tinyint(3) unsigned NOT NULL default '0', `unique_id` bigint(20) unsigned NOT NULL default '0', `equip_switch` int(11) unsigned NOT NULL default '0', + `enchantgrade` tinyint unsigned NOT NULL default '0', PRIMARY KEY (`id`), KEY `char_id` (`char_id`) ) ENGINE=MyISAM; @@ -818,6 +823,7 @@ CREATE TABLE IF NOT EXISTS `mail_attachments` ( `option_parm4` tinyint(3) NOT NULL default '0', `unique_id` bigint(20) unsigned NOT NULL DEFAULT '0', `bound` tinyint(1) unsigned NOT NULL DEFAULT '0', + `enchantgrade` tinyint unsigned NOT NULL default '0', PRIMARY KEY (`id`,`index`) ) ENGINE=MyISAM; @@ -1038,6 +1044,7 @@ CREATE TABLE IF NOT EXISTS `storage` ( `expire_time` int(11) unsigned NOT NULL default '0', `bound` tinyint(3) unsigned NOT NULL default '0', `unique_id` bigint(20) unsigned NOT NULL default '0', + `enchantgrade` tinyint unsigned NOT NULL default '0', PRIMARY KEY (`id`), KEY `account_id` (`account_id`) ) ENGINE=MyISAM; diff --git a/sql-files/upgrades/upgrade_20201105.sql b/sql-files/upgrades/upgrade_20201105.sql new file mode 100644 index 0000000000..0712bdd891 --- /dev/null +++ b/sql-files/upgrades/upgrade_20201105.sql @@ -0,0 +1,20 @@ +ALTER TABLE `auction` + ADD COLUMN `enchantgrade` tinyint unsigned NOT NULL default '0'; + +ALTER TABLE `cart_inventory` + ADD COLUMN `enchantgrade` tinyint unsigned NOT NULL default '0'; + +ALTER TABLE `guild_storage` + ADD COLUMN `enchantgrade` tinyint unsigned NOT NULL default '0'; + +ALTER TABLE `guild_storage_log` + ADD COLUMN `enchantgrade` tinyint unsigned NOT NULL default '0'; + +ALTER TABLE `inventory` + ADD COLUMN `enchantgrade` tinyint unsigned NOT NULL default '0'; + +ALTER TABLE `mail_attachments` + ADD COLUMN `enchantgrade` tinyint unsigned NOT NULL default '0'; + +ALTER TABLE `storage` + ADD COLUMN `enchantgrade` tinyint unsigned NOT NULL default '0'; diff --git a/src/char/char.cpp b/src/char/char.cpp index 2ac3cd36ec..6cc4263485 100644 --- a/src/char/char.cpp +++ b/src/char/char.cpp @@ -560,7 +560,7 @@ int char_memitemdata_to_sql(const struct item items[], int max, int id, enum sto // it significantly reduces cpu load on the database server. StringBuf_Init(&buf); - StringBuf_AppendStr(&buf, "SELECT `id`, `nameid`, `amount`, `equip`, `identify`, `refine`, `attribute`, `expire_time`, `bound`, `unique_id`"); + StringBuf_AppendStr(&buf, "SELECT `id`, `nameid`, `amount`, `equip`, `identify`, `refine`, `attribute`, `expire_time`, `bound`, `unique_id`, `enchantgrade`"); if (tableswitch == TABLE_INVENTORY) { StringBuf_Printf(&buf, ", `favorite`, `equip_switch`"); offset = 2; @@ -586,7 +586,7 @@ int char_memitemdata_to_sql(const struct item items[], int max, int id, enum sto } SqlStmt_BindColumn(stmt, 0, SQLDT_INT, &item.id, 0, NULL, NULL); - SqlStmt_BindColumn(stmt, 1, SQLDT_UINT, &item.nameid, 0, NULL, NULL); + SqlStmt_BindColumn(stmt, 1, SQLDT_UINT, &item.nameid, 0, NULL, NULL); SqlStmt_BindColumn(stmt, 2, SQLDT_SHORT, &item.amount, 0, NULL, NULL); SqlStmt_BindColumn(stmt, 3, SQLDT_UINT, &item.equip, 0, NULL, NULL); SqlStmt_BindColumn(stmt, 4, SQLDT_CHAR, &item.identify, 0, NULL, NULL); @@ -595,16 +595,17 @@ int char_memitemdata_to_sql(const struct item items[], int max, int id, enum sto SqlStmt_BindColumn(stmt, 7, SQLDT_UINT, &item.expire_time, 0, NULL, NULL); SqlStmt_BindColumn(stmt, 8, SQLDT_UINT, &item.bound, 0, NULL, NULL); SqlStmt_BindColumn(stmt, 9, SQLDT_UINT64, &item.unique_id, 0, NULL, NULL); + SqlStmt_BindColumn(stmt,10, SQLDT_INT8, &item.enchantgrade,0, NULL, NULL); if (tableswitch == TABLE_INVENTORY){ - SqlStmt_BindColumn(stmt, 10, SQLDT_CHAR, &item.favorite, 0, NULL, NULL); - SqlStmt_BindColumn(stmt, 11, SQLDT_UINT, &item.equipSwitch, 0, NULL, NULL); + SqlStmt_BindColumn(stmt, 11, SQLDT_CHAR, &item.favorite, 0, NULL, NULL); + SqlStmt_BindColumn(stmt, 12, SQLDT_UINT, &item.equipSwitch, 0, NULL, NULL); } for( i = 0; i < MAX_SLOTS; ++i ) - SqlStmt_BindColumn(stmt, 10+offset+i, SQLDT_UINT, &item.card[i], 0, NULL, NULL); + SqlStmt_BindColumn(stmt, 11+offset+i, SQLDT_UINT, &item.card[i], 0, NULL, NULL); for( i = 0; i < MAX_ITEM_RDM_OPT; ++i ) { - SqlStmt_BindColumn(stmt, 10+offset+MAX_SLOTS+i*3, SQLDT_SHORT, &item.option[i].id, 0, NULL, NULL); - SqlStmt_BindColumn(stmt, 11+offset+MAX_SLOTS+i*3, SQLDT_SHORT, &item.option[i].value, 0, NULL, NULL); - SqlStmt_BindColumn(stmt, 12+offset+MAX_SLOTS+i*3, SQLDT_CHAR, &item.option[i].param, 0, NULL, NULL); + SqlStmt_BindColumn(stmt, 11+offset+MAX_SLOTS+i*3, SQLDT_SHORT, &item.option[i].id, 0, NULL, NULL); + SqlStmt_BindColumn(stmt, 12+offset+MAX_SLOTS+i*3, SQLDT_SHORT, &item.option[i].value, 0, NULL, NULL); + SqlStmt_BindColumn(stmt, 13+offset+MAX_SLOTS+i*3, SQLDT_CHAR, &item.option[i].param, 0, NULL, NULL); } // bit array indicating which inventory items have already been matched flag = (bool*) aCalloc(max, sizeof(bool)); @@ -639,14 +640,15 @@ int char_memitemdata_to_sql(const struct item items[], int max, int id, enum sto items[i].attribute == item.attribute && items[i].expire_time == item.expire_time && items[i].bound == item.bound && + items[i].enchantgrade == item.enchantgrade && (tableswitch != TABLE_INVENTORY || (items[i].favorite == item.favorite && items[i].equipSwitch == item.equipSwitch)) ) ; //Do nothing. else { // update all fields. StringBuf_Clear(&buf); - StringBuf_Printf(&buf, "UPDATE `%s` SET `amount`='%d', `equip`='%u', `identify`='%d', `refine`='%d',`attribute`='%d', `expire_time`='%u', `bound`='%d', `unique_id`='%" PRIu64 "'", - tablename, items[i].amount, items[i].equip, items[i].identify, items[i].refine, items[i].attribute, items[i].expire_time, items[i].bound, items[i].unique_id); + StringBuf_Printf(&buf, "UPDATE `%s` SET `amount`='%d', `equip`='%u', `identify`='%d', `refine`='%d',`attribute`='%d', `expire_time`='%u', `bound`='%d', `unique_id`='%" PRIu64 "', `enchantgrade`='%d'", + tablename, items[i].amount, items[i].equip, items[i].identify, items[i].refine, items[i].attribute, items[i].expire_time, items[i].bound, items[i].unique_id, items[i].enchantgrade); if (tableswitch == TABLE_INVENTORY) StringBuf_Printf(&buf, ", `favorite`='%d', `equip_switch`='%u'", items[i].favorite, items[i].equipSwitch); for( j = 0; j < MAX_SLOTS; ++j ) @@ -681,7 +683,7 @@ int char_memitemdata_to_sql(const struct item items[], int max, int id, enum sto SqlStmt_Free(stmt); StringBuf_Clear(&buf); - StringBuf_Printf(&buf, "INSERT INTO `%s`(`%s`, `nameid`, `amount`, `equip`, `identify`, `refine`, `attribute`, `expire_time`, `bound`, `unique_id`", tablename, selectoption); + StringBuf_Printf(&buf, "INSERT INTO `%s`(`%s`, `nameid`, `amount`, `equip`, `identify`, `refine`, `attribute`, `expire_time`, `bound`, `unique_id`, `enchantgrade`", tablename, selectoption); if (tableswitch == TABLE_INVENTORY) StringBuf_Printf(&buf, ", `favorite`, `equip_switch`"); for( j = 0; j < MAX_SLOTS; ++j ) @@ -706,8 +708,8 @@ int char_memitemdata_to_sql(const struct item items[], int max, int id, enum sto else found = true; - StringBuf_Printf(&buf, "('%d', '%u', '%d', '%u', '%d', '%d', '%d', '%u', '%d', '%" PRIu64 "'", - id, items[i].nameid, items[i].amount, items[i].equip, items[i].identify, items[i].refine, items[i].attribute, items[i].expire_time, items[i].bound, items[i].unique_id); + StringBuf_Printf(&buf, "('%d', '%u', '%d', '%u', '%d', '%d', '%d', '%u', '%d', '%" PRIu64 "', '%d'", + id, items[i].nameid, items[i].amount, items[i].equip, items[i].identify, items[i].refine, items[i].attribute, items[i].expire_time, items[i].bound, items[i].unique_id, items[i].enchantgrade); if (tableswitch == TABLE_INVENTORY) StringBuf_Printf(&buf, ", '%d', '%u'", items[i].favorite, items[i].equipSwitch); for( j = 0; j < MAX_SLOTS; ++j ) @@ -787,7 +789,7 @@ bool char_memitemdata_from_sql(struct s_storage* p, int max, int id, enum storag } StringBuf_Init(&buf); - StringBuf_AppendStr(&buf, "SELECT `id`,`nameid`,`amount`,`equip`,`identify`,`refine`,`attribute`,`expire_time`,`bound`,`unique_id`"); + StringBuf_AppendStr(&buf, "SELECT `id`,`nameid`,`amount`,`equip`,`identify`,`refine`,`attribute`,`expire_time`,`bound`,`unique_id`,`enchantgrade`"); if (tableswitch == TABLE_INVENTORY) { StringBuf_Printf(&buf, ", `favorite`, `equip_switch`"); offset = 2; @@ -821,16 +823,17 @@ bool char_memitemdata_from_sql(struct s_storage* p, int max, int id, enum storag SqlStmt_BindColumn(stmt, 7, SQLDT_UINT, &item.expire_time, 0, NULL, NULL); SqlStmt_BindColumn(stmt, 8, SQLDT_CHAR, &item.bound, 0, NULL, NULL); SqlStmt_BindColumn(stmt, 9, SQLDT_ULONGLONG, &item.unique_id, 0, NULL, NULL); + SqlStmt_BindColumn(stmt,10, SQLDT_INT8, &item.enchantgrade, 0, NULL, NULL); if (tableswitch == TABLE_INVENTORY){ - SqlStmt_BindColumn(stmt, 10, SQLDT_CHAR, &item.favorite, 0, NULL, NULL); - SqlStmt_BindColumn(stmt, 11, SQLDT_UINT, &item.equipSwitch, 0, NULL, NULL); + SqlStmt_BindColumn(stmt, 11, SQLDT_CHAR, &item.favorite, 0, NULL, NULL); + SqlStmt_BindColumn(stmt, 12, SQLDT_UINT, &item.equipSwitch, 0, NULL, NULL); } for( i = 0; i < MAX_SLOTS; ++i ) - SqlStmt_BindColumn(stmt, 10+offset+i, SQLDT_UINT, &item.card[i], 0, NULL, NULL); + SqlStmt_BindColumn(stmt, 11+offset+i, SQLDT_UINT, &item.card[i], 0, NULL, NULL); for( i = 0; i < MAX_ITEM_RDM_OPT; ++i ) { - SqlStmt_BindColumn(stmt, 10+offset+MAX_SLOTS+i*3, SQLDT_SHORT, &item.option[i].id, 0, NULL, NULL); - SqlStmt_BindColumn(stmt, 11+offset+MAX_SLOTS+i*3, SQLDT_SHORT, &item.option[i].value, 0, NULL, NULL); - SqlStmt_BindColumn(stmt, 12+offset+MAX_SLOTS+i*3, SQLDT_CHAR, &item.option[i].param, 0, NULL, NULL); + SqlStmt_BindColumn(stmt, 11+offset+MAX_SLOTS+i*3, SQLDT_SHORT, &item.option[i].id, 0, NULL, NULL); + SqlStmt_BindColumn(stmt, 12+offset+MAX_SLOTS+i*3, SQLDT_SHORT, &item.option[i].value, 0, NULL, NULL); + SqlStmt_BindColumn(stmt, 13+offset+MAX_SLOTS+i*3, SQLDT_CHAR, &item.option[i].param, 0, NULL, NULL); } for( i = 0; i < max && SQL_SUCCESS == SqlStmt_NextRow(stmt); ++i ) @@ -2439,7 +2442,7 @@ bool char_checkdb(void){ } //checking mail_attachment_db if( SQL_ERROR == Sql_Query(sql_handle, "SELECT `id`,`index`,`nameid`,`amount`,`refine`,`attribute`,`identify`," - "`card0`,`card1`,`card2`,`card3`,`option_id0`,`option_val0`,`option_parm0`,`option_id1`,`option_val1`,`option_parm1`,`option_id2`,`option_val2`,`option_parm2`,`option_id3`,`option_val3`,`option_parm3`,`option_id4`,`option_val4`,`option_parm4`,`unique_id`, `bound`" + "`card0`,`card1`,`card2`,`card3`,`option_id0`,`option_val0`,`option_parm0`,`option_id1`,`option_val1`,`option_parm1`,`option_id2`,`option_val2`,`option_parm2`,`option_id3`,`option_val3`,`option_parm3`,`option_id4`,`option_val4`,`option_parm4`,`unique_id`, `bound`, `enchantgrade`" " FROM `%s` LIMIT 1;", schema_config.mail_attachment_db) ){ Sql_ShowDebug(sql_handle); return false; @@ -2448,7 +2451,7 @@ bool char_checkdb(void){ //checking auction_db if( SQL_ERROR == Sql_Query(sql_handle, "SELECT `auction_id`,`seller_id`,`seller_name`,`buyer_id`,`buyer_name`," "`price`,`buynow`,`hours`,`timestamp`,`nameid`,`item_name`,`type`,`refine`,`attribute`,`card0`,`card1`," - "`card2`,`card3`,`option_id0`,`option_val0`,`option_parm0`,`option_id1`,`option_val1`,`option_parm1`,`option_id2`,`option_val2`,`option_parm2`,`option_id3`,`option_val3`,`option_parm3`,`option_id4`,`option_val4`,`option_parm4`,`unique_id` " + "`card2`,`card3`,`option_id0`,`option_val0`,`option_parm0`,`option_id1`,`option_val1`,`option_parm1`,`option_id2`,`option_val2`,`option_parm2`,`option_id3`,`option_val3`,`option_parm3`,`option_id4`,`option_val4`,`option_parm4`,`unique_id`, `enchantgrade` " "FROM `%s` LIMIT 1;", schema_config.auction_db) ){ Sql_ShowDebug(sql_handle); return false; @@ -2501,14 +2504,14 @@ bool char_checkdb(void){ } //checking cart_db if( SQL_ERROR == Sql_Query(sql_handle, "SELECT `id`,`char_id`,`nameid`,`amount`,`equip`,`identify`,`refine`," - "`attribute`,`card0`,`card1`,`card2`,`card3`,`option_id0`,`option_val0`,`option_parm0`,`option_id1`,`option_val1`,`option_parm1`,`option_id2`,`option_val2`,`option_parm2`,`option_id3`,`option_val3`,`option_parm3`,`option_id4`,`option_val4`,`option_parm4`,`expire_time`,`bound`,`unique_id`" + "`attribute`,`card0`,`card1`,`card2`,`card3`,`option_id0`,`option_val0`,`option_parm0`,`option_id1`,`option_val1`,`option_parm1`,`option_id2`,`option_val2`,`option_parm2`,`option_id3`,`option_val3`,`option_parm3`,`option_id4`,`option_val4`,`option_parm4`,`expire_time`,`bound`,`unique_id`,`enchantgrade`" " FROM `%s` LIMIT 1;", schema_config.cart_db) ){ Sql_ShowDebug(sql_handle); return false; } //checking inventory_db if( SQL_ERROR == Sql_Query(sql_handle, "SELECT `id`,`char_id`,`nameid`,`amount`,`equip`,`identify`,`refine`," - "`attribute`,`card0`,`card1`,`card2`,`card3`,`option_id0`,`option_val0`,`option_parm0`,`option_id1`,`option_val1`,`option_parm1`,`option_id2`,`option_val2`,`option_parm2`,`option_id3`,`option_val3`,`option_parm3`,`option_id4`,`option_val4`,`option_parm4`,`expire_time`,`bound`,`unique_id`" + "`attribute`,`card0`,`card1`,`card2`,`card3`,`option_id0`,`option_val0`,`option_parm0`,`option_id1`,`option_val1`,`option_parm1`,`option_id2`,`option_val2`,`option_parm2`,`option_id3`,`option_val3`,`option_parm3`,`option_id4`,`option_val4`,`option_parm4`,`expire_time`,`bound`,`unique_id`,`enchantgrade`" ",`favorite`,`equip_switch`" " FROM `%s` LIMIT 1;", schema_config.inventory_db) ){ Sql_ShowDebug(sql_handle); @@ -2516,7 +2519,7 @@ bool char_checkdb(void){ } //checking guild_storage_db if( SQL_ERROR == Sql_Query(sql_handle, "SELECT `id`,`guild_id`,`nameid`,`amount`,`equip`,`identify`,`refine`," - "`attribute`,`card0`,`card1`,`card2`,`card3`,`option_id0`,`option_val0`,`option_parm0`,`option_id1`,`option_val1`,`option_parm1`,`option_id2`,`option_val2`,`option_parm2`,`option_id3`,`option_val3`,`option_parm3`,`option_id4`,`option_val4`,`option_parm4`,`expire_time`,`bound`,`unique_id`" + "`attribute`,`card0`,`card1`,`card2`,`card3`,`option_id0`,`option_val0`,`option_parm0`,`option_id1`,`option_val1`,`option_parm1`,`option_id2`,`option_val2`,`option_parm2`,`option_id3`,`option_val3`,`option_parm3`,`option_id4`,`option_val4`,`option_parm4`,`expire_time`,`bound`,`unique_id`,`enchantgrade`" " FROM `%s` LIMIT 1;", schema_config.guild_storage_db) ){ Sql_ShowDebug(sql_handle); return false; diff --git a/src/char/int_auction.cpp b/src/char/int_auction.cpp index b76947b338..99ffb84b2a 100644 --- a/src/char/int_auction.cpp +++ b/src/char/int_auction.cpp @@ -51,8 +51,8 @@ void auction_save(struct auction_data *auction) return; StringBuf_Init(&buf); - StringBuf_Printf(&buf, "UPDATE `%s` SET `seller_id` = '%d', `seller_name` = ?, `buyer_id` = '%d', `buyer_name` = ?, `price` = '%d', `buynow` = '%d', `hours` = '%d', `timestamp` = '%lu', `nameid` = '%u', `item_name` = ?, `type` = '%d', `refine` = '%d', `attribute` = '%d'", - schema_config.auction_db, auction->seller_id, auction->buyer_id, auction->price, auction->buynow, auction->hours, (unsigned long)auction->timestamp, auction->item.nameid, auction->type, auction->item.refine, auction->item.attribute); + StringBuf_Printf(&buf, "UPDATE `%s` SET `seller_id` = '%d', `seller_name` = ?, `buyer_id` = '%d', `buyer_name` = ?, `price` = '%d', `buynow` = '%d', `hours` = '%d', `timestamp` = '%lu', `nameid` = '%u', `item_name` = ?, `type` = '%d', `refine` = '%d', `attribute` = '%d', `enchantgrade`", + schema_config.auction_db, auction->seller_id, auction->buyer_id, auction->price, auction->buynow, auction->hours, (unsigned long)auction->timestamp, auction->item.nameid, auction->type, auction->item.refine, auction->item.attribute, auction->item.enchantgrade); for( j = 0; j < MAX_SLOTS; j++ ) StringBuf_Printf(&buf, ", `card%d` = '%u'", j, auction->item.card[j]); for (j = 0; j < MAX_ITEM_RDM_OPT; j++) { @@ -88,7 +88,7 @@ unsigned int auction_create(struct auction_data *auction) auction->timestamp = time(NULL) + (auction->hours * 3600); StringBuf_Init(&buf); - StringBuf_Printf(&buf, "INSERT INTO `%s` (`seller_id`,`seller_name`,`buyer_id`,`buyer_name`,`price`,`buynow`,`hours`,`timestamp`,`nameid`,`item_name`,`type`,`refine`,`attribute`,`unique_id`", schema_config.auction_db); + StringBuf_Printf(&buf, "INSERT INTO `%s` (`seller_id`,`seller_name`,`buyer_id`,`buyer_name`,`price`,`buynow`,`hours`,`timestamp`,`nameid`,`item_name`,`type`,`refine`,`attribute`,`unique_id`,`enchantgrade`", schema_config.auction_db); for( j = 0; j < MAX_SLOTS; j++ ) StringBuf_Printf(&buf, ",`card%d`", j); for (j = 0; j < MAX_ITEM_RDM_OPT; ++j) { @@ -96,8 +96,8 @@ unsigned int auction_create(struct auction_data *auction) StringBuf_Printf(&buf, ", `option_val%d`", j); StringBuf_Printf(&buf, ", `option_parm%d`", j); } - StringBuf_Printf(&buf, ") VALUES ('%d',?,'%d',?,'%d','%d','%d','%lu','%u',?,'%d','%d','%d','%" PRIu64 "'", - auction->seller_id, auction->buyer_id, auction->price, auction->buynow, auction->hours, (unsigned long)auction->timestamp, auction->item.nameid, auction->type, auction->item.refine, auction->item.attribute, auction->item.unique_id); + StringBuf_Printf(&buf, ") VALUES ('%d',?,'%d',?,'%d','%d','%d','%lu','%u',?,'%d','%d','%d','%" PRIu64 "','%d'", + auction->seller_id, auction->buyer_id, auction->price, auction->buynow, auction->hours, (unsigned long)auction->timestamp, auction->item.nameid, auction->type, auction->item.refine, auction->item.attribute, auction->item.unique_id, auction->item.enchantgrade); for( j = 0; j < MAX_SLOTS; j++ ) StringBuf_Printf(&buf, ",'%u'", auction->item.card[j]); for (j = 0; j < MAX_ITEM_RDM_OPT; ++j) { @@ -196,7 +196,7 @@ void inter_auctions_fromsql(void) StringBuf_Init(&buf); StringBuf_AppendStr(&buf, "SELECT `auction_id`,`seller_id`,`seller_name`,`buyer_id`,`buyer_name`," - "`price`,`buynow`,`hours`,`timestamp`,`nameid`,`item_name`,`type`,`refine`,`attribute`,`unique_id`"); + "`price`,`buynow`,`hours`,`timestamp`,`nameid`,`item_name`,`type`,`refine`,`attribute`,`unique_id`,`enchantgrade`"); for( i = 0; i < MAX_SLOTS; i++ ) StringBuf_Printf(&buf, ",`card%d`", i); for (i = 0; i < MAX_ITEM_RDM_OPT; ++i) { @@ -234,6 +234,7 @@ void inter_auctions_fromsql(void) Sql_GetData(sql_handle,12, &data, NULL); item->refine = atoi(data); Sql_GetData(sql_handle,13, &data, NULL); item->attribute = atoi(data); Sql_GetData(sql_handle,14, &data, NULL); item->unique_id = strtoull(data, NULL, 10); + Sql_GetData(sql_handle,15, &data, NULL); item->enchantgrade = atoi(data); item->identify = 1; item->amount = 1; @@ -241,16 +242,16 @@ void inter_auctions_fromsql(void) for( i = 0; i < MAX_SLOTS; i++ ) { - Sql_GetData(sql_handle, 15 + i, &data, NULL); + Sql_GetData(sql_handle, 16 + i, &data, NULL); item->card[i] = strtoul(data, nullptr, 10); } for (i = 0; i < MAX_ITEM_RDM_OPT; i++) { - Sql_GetData(sql_handle, 15 + MAX_SLOTS + i*3, &data, NULL); - item->option[i].id = atoi(data); Sql_GetData(sql_handle, 16 + MAX_SLOTS + i*3, &data, NULL); - item->option[i].value = atoi(data); + item->option[i].id = atoi(data); Sql_GetData(sql_handle, 17 + MAX_SLOTS + i*3, &data, NULL); + item->option[i].value = atoi(data); + Sql_GetData(sql_handle, 18 + MAX_SLOTS + i*3, &data, NULL); item->option[i].param = atoi(data); } diff --git a/src/char/int_mail.cpp b/src/char/int_mail.cpp index d7249d2c20..4a9a30d6bc 100644 --- a/src/char/int_mail.cpp +++ b/src/char/int_mail.cpp @@ -106,7 +106,7 @@ int mail_savemessage(struct mail_message* msg) SqlStmt_Free(stmt); StringBuf_Clear(&buf); - StringBuf_Printf(&buf,"INSERT INTO `%s` (`id`, `index`, `amount`, `nameid`, `refine`, `attribute`, `identify`, `unique_id`, `bound`", schema_config.mail_attachment_db); + StringBuf_Printf(&buf,"INSERT INTO `%s` (`id`, `index`, `amount`, `nameid`, `refine`, `attribute`, `identify`, `unique_id`, `bound`, `enchantgrade`", schema_config.mail_attachment_db); for (j = 0; j < MAX_SLOTS; j++) StringBuf_Printf(&buf, ", `card%d`", j); for (j = 0; j < MAX_ITEM_RDM_OPT; ++j) { @@ -127,7 +127,7 @@ int mail_savemessage(struct mail_message* msg) found = true; } - StringBuf_Printf(&buf, "('%" PRIu64 "', '%hu', '%d', '%u', '%d', '%d', '%d', '%" PRIu64 "', '%d'", (uint64)msg->id, i, msg->item[i].amount, msg->item[i].nameid, msg->item[i].refine, msg->item[i].attribute, msg->item[i].identify, msg->item[i].unique_id, msg->item[i].bound); + StringBuf_Printf(&buf, "('%" PRIu64 "', '%hu', '%d', '%u', '%d', '%d', '%d', '%" PRIu64 "', '%d', '%d'", (uint64)msg->id, i, msg->item[i].amount, msg->item[i].nameid, msg->item[i].refine, msg->item[i].attribute, msg->item[i].identify, msg->item[i].unique_id, msg->item[i].bound, msg->item[i].enchantgrade); for (j = 0; j < MAX_SLOTS; j++) StringBuf_Printf(&buf, ", '%u'", msg->item[i].card[j]); for (j = 0; j < MAX_ITEM_RDM_OPT; ++j) { @@ -185,7 +185,7 @@ bool mail_loadmessage(int mail_id, struct mail_message* msg) } StringBuf_Init(&buf); - StringBuf_AppendStr(&buf, "SELECT `amount`,`nameid`,`refine`,`attribute`,`identify`,`unique_id`,`bound`"); + StringBuf_AppendStr(&buf, "SELECT `amount`,`nameid`,`refine`,`attribute`,`identify`,`unique_id`,`bound`,`enchantgrade`"); for (j = 0; j < MAX_SLOTS; j++) StringBuf_Printf(&buf, ",`card%d`", j); for (j = 0; j < MAX_ITEM_RDM_OPT; ++j) { @@ -215,16 +215,17 @@ bool mail_loadmessage(int mail_id, struct mail_message* msg) Sql_GetData(sql_handle,4, &data, NULL); msg->item[i].identify = atoi(data); Sql_GetData(sql_handle,5, &data, NULL); msg->item[i].unique_id = strtoull(data, NULL, 10); Sql_GetData(sql_handle,6, &data, NULL); msg->item[i].bound = atoi(data); + Sql_GetData(sql_handle,7, &data, NULL); msg->item[i].enchantgrade = atoi(data); msg->item[i].expire_time = 0; for( j = 0; j < MAX_SLOTS; j++ ){ - Sql_GetData(sql_handle,7 + j, &data, NULL); msg->item[i].card[j] = strtoul(data, nullptr, 10); + Sql_GetData(sql_handle,8 + j, &data, NULL); msg->item[i].card[j] = strtoul(data, nullptr, 10); } for( j = 0; j < MAX_ITEM_RDM_OPT; j++ ){ - Sql_GetData(sql_handle, 7 + MAX_SLOTS + j * 3, &data, NULL); msg->item[i].option[j].id = atoi(data); - Sql_GetData(sql_handle, 8 + MAX_SLOTS + j * 3, &data, NULL); msg->item[i].option[j].value = atoi(data); - Sql_GetData(sql_handle, 9 + MAX_SLOTS + j * 3, &data, NULL); msg->item[i].option[j].param = atoi(data); + Sql_GetData(sql_handle, 8 + MAX_SLOTS + j * 3, &data, NULL); msg->item[i].option[j].id = atoi(data); + Sql_GetData(sql_handle, 9 + MAX_SLOTS + j * 3, &data, NULL); msg->item[i].option[j].value = atoi(data); + Sql_GetData(sql_handle,10 + MAX_SLOTS + j * 3, &data, NULL); msg->item[i].option[j].param = atoi(data); } } diff --git a/src/common/mmo.hpp b/src/common/mmo.hpp index b4f1e2f593..f94f8c9c11 100644 --- a/src/common/mmo.hpp +++ b/src/common/mmo.hpp @@ -263,6 +263,7 @@ struct item { char favorite, bound; uint64 unique_id; unsigned int equipSwitch; // location(s) where item is equipped for equip switching (using enum equip_pos for bitmasking) + uint8 enchantgrade; }; //Equip position constants diff --git a/src/map/buyingstore.cpp b/src/map/buyingstore.cpp index a4ae9bec16..df19d70b45 100644 --- a/src/map/buyingstore.cpp +++ b/src/map/buyingstore.cpp @@ -568,7 +568,7 @@ bool buyingstore_searchall(struct map_session_data* sd, const struct s_search_st ; } - if( !searchstore_result(s->search_sd, sd->buyer_id, sd->status.account_id, sd->message, it->nameid, it->amount, it->price, buyingstore_blankslots, 0) ) + if( !searchstore_result(s->search_sd, sd->buyer_id, sd->status.account_id, sd->message, it->nameid, it->amount, it->price, buyingstore_blankslots, 0, 0) ) {// result set full return false; } diff --git a/src/map/clif.cpp b/src/map/clif.cpp index ee336b076e..530f883901 100644 --- a/src/map/clif.cpp +++ b/src/map/clif.cpp @@ -2727,19 +2727,22 @@ void clif_additem( struct map_session_data *sd, int n, int amount, unsigned char p.type = itemtype( sd->inventory.u.items_inventory[n].nameid ); #if PACKETVER >= 20061218 p.HireExpireDate = sd->inventory.u.items_inventory[n].expire_time; -#endif #if PACKETVER >= 20071002 /* why restrict the flag to non-stackable? because this is the only packet allows stackable to, * show the color, and therefore it'd be inconsistent with the rest (aka it'd show yellow, you relog/refresh and boom its gone) */ p.bindOnEquipType = sd->inventory.u.items_inventory[n].bound && !itemdb_isstackable2( sd->inventory_data[n] ) ? 2 : sd->inventory_data[n]->flag.bindOnEquip ? 1 : 0; -#endif #if PACKETVER >= 20150226 clif_add_random_options( p.option_data, &sd->inventory.u.items_inventory[n] ); -#endif #if PACKETVER >= 20160921 p.favorite = sd->inventory.u.items_inventory[n].favorite; p.look = sd->inventory_data[n]->look; +#if PACKETVER_MAIN_NUM >= 20200916 || PACKETVER_RE_NUM >= 20200724 + p.enchantgrade = sd->inventory.u.items_inventory[n].enchantgrade; +#endif +#endif +#endif +#endif #endif } @@ -2847,6 +2850,10 @@ static void clif_item_equip( short idx, struct EQUIPITEM_INFO *p, struct item *i #if PACKETVER >= 20150226 p->option_count = clif_add_random_options( p->option_data, it ); #endif + +#if PACKETVER_MAIN_NUM >= 20200916 || PACKETVER_RE_NUM >= 20200724 + p->enchantgrade = it->enchantgrade; +#endif } static void clif_item_normal( short idx, struct NORMALITEM_INFO *p, struct item *i, struct item_data *id ){ @@ -4491,6 +4498,11 @@ void clif_tradeadditem( struct map_session_data* sd, struct map_session_data* ts clif_addcards( &p.slot, &sd->inventory.u.items_inventory[index] ); #if PACKETVER >= 20150226 clif_add_random_options( p.option_data, &sd->inventory.u.items_inventory[index] ); +#if PACKETVER_MAIN_NUM >= 20200916 || PACKETVER_RE_NUM >= 20200724 + p.location = pc_equippoint_sub( sd, sd->inventory_data[index] ); + p.viewSprite = sd->inventory_data[index]->look; + p.enchantgrade = sd->inventory.u.items_inventory[index].enchantgrade; +#endif #endif }else{ p = {}; @@ -4633,6 +4645,9 @@ void clif_storageitemadded( struct map_session_data* sd, struct item* i, int ind clif_addcards( &p.slot, i ); #if PACKETVER >= 20150226 clif_add_random_options( p.option_data, i ); +#if PACKETVER_MAIN_NUM >= 20200916 || PACKETVER_RE_NUM >= 20200724 + p.enchantgrade = i->enchantgrade; +#endif #endif clif_send( &p, sizeof( p ), &sd->bl, SELF ); @@ -7046,6 +7061,9 @@ void clif_cart_additem( struct map_session_data *sd, int n, int amount ){ clif_addcards( &p.slot, &sd->cart.u.items_cart[n] ); #if PACKETVER >= 20150226 clif_add_random_options( p.option_data, &sd->cart.u.items_cart[n] ); +#if PACKETVER_MAIN_NUM >= 20200916 || PACKETVER_RE_NUM >= 20200724 + p.enchantgrade = sd->cart.u.items_cart[n].enchantgrade; +#endif #endif clif_send( &p, sizeof( p ), &sd->bl, SELF ); @@ -7404,6 +7422,9 @@ void clif_vendinglist( struct map_session_data* sd, struct map_session_data* vsd #if PACKETVER >= 20160921 p->items[i].location = pc_equippoint_sub( sd, data ); p->items[i].viewSprite = data->look; +#if PACKETVER_MAIN_NUM >= 20200916 || PACKETVER_RE_NUM >= 20200724 + p->items[i].enchantgrade = vsd->cart.u.items_cart[index].enchantgrade; +#endif #endif #endif } @@ -7473,7 +7494,7 @@ void clif_openvending( struct map_session_data* sd, int id, struct s_vending* ve struct PACKET_ZC_PC_PURCHASE_MYITEMLIST *p = (struct PACKET_ZC_PC_PURCHASE_MYITEMLIST *)WFIFOP( fd, 0 ); - p->packetType = 0x136; + p->packetType = openvendingType; p->packetLength = len; p->AID = id; @@ -7491,6 +7512,9 @@ void clif_openvending( struct map_session_data* sd, int id, struct s_vending* ve clif_addcards( &p->items[i].slot, &sd->cart.u.items_cart[index] ); #if PACKETVER >= 20150226 clif_add_random_options( p->items[i].option_data, &sd->cart.u.items_cart[index] ); +#if PACKETVER_MAIN_NUM >= 20200916 || PACKETVER_RE_NUM >= 20200724 + p->items[i].enchantgrade = sd->cart.u.items_cart[index].enchantgrade; +#endif #endif } @@ -15383,6 +15407,9 @@ void clif_Mail_setattachment( struct map_session_data* sd, int index, int amount } p.favorite = item->favorite; p.location = pc_equippoint( sd, server_index( index ) ); +#if PACKETVER_MAIN_NUM >= 20200916 || PACKETVER_RE_NUM >= 20200724 + p.enchantgrade = item->enchantgrade; +#endif } p.PacketType = rodexadditem; @@ -15888,6 +15915,9 @@ void clif_Mail_read( struct map_session_data *sd, int mail_id ){ mailitem->bindOnEquip = item->bound ? 2 : data->flag.bindOnEquip ? 1 : 0; clif_addcards( &mailitem->slot, item ); clif_add_random_options( mailitem->optionData, item ); +#if PACKETVER_MAIN_NUM >= 20200916 || PACKETVER_RE_NUM >= 20200724 + mailitem->enchantgrade = item->enchantgrade; +#endif offset += sizeof( struct mail_item ); count++; @@ -18231,6 +18261,9 @@ void clif_party_show_picker( struct map_session_data* sd, struct item* item_data clif_addcards( &p.slot, item_data ); p.location = id->equip; // equip location p.itemType = itemtype( id->nameid ); // item type +#if PACKETVER_MAIN_NUM >= 20200916 || PACKETVER_RE_NUM >= 20200724 + p.enchantgrade = item_data->enchantgrade; +#endif clif_send( &p, sizeof( p ), &sd->bl, PARTY_SAMEMAP_WOS ); #endif @@ -18762,7 +18795,7 @@ void clif_search_store_info_ack( struct map_session_data* sd ){ struct PACKET_ZC_SEARCH_STORE_INFO_ACK *p = (struct PACKET_ZC_SEARCH_STORE_INFO_ACK *)WFIFOP( fd, 0 ); - p->packetType = 0x836; + p->packetType = HEADER_ZC_SEARCH_STORE_INFO_ACK; p->packetLength = len; p->firstPage = !sd->searchstore.pages; p->nextPage = searchstore_querynext( sd ); @@ -18791,6 +18824,9 @@ void clif_search_store_info_ack( struct map_session_data* sd ){ clif_addcards( &p->items[i].slot, &it ); #if PACKETVER >= 20150226 clif_add_random_options( p->items[i].option_data, &it ); +#if PACKETVER_MAIN_NUM >= 20200916 || PACKETVER_RE_NUM >= 20200724 + p->items[i].enchantgrade = ssitem->enchantgrade; +#endif #endif } diff --git a/src/map/clif_packetdb.hpp b/src/map/clif_packetdb.hpp index 9609fbfa45..e3660a8465 100644 --- a/src/map/clif_packetdb.hpp +++ b/src/map/clif_packetdb.hpp @@ -70,13 +70,13 @@ packet( HEADER_ZC_ITEM_ENTRY, sizeof( struct PACKET_ZC_ITEM_ENTRY ) ); packet(0x009e,17); parseable_packet(0x009f,6,clif_parse_TakeItem,2); - packet(0x00a0,23); + packet( additemType, sizeof( struct packet_additem ) ); packet(0x00a1,6); parseable_packet(0x00a2,6,clif_parse_DropItem,2,4); - packet(0x00a3,-1); - packet(0x00a4,-1); - packet(0x00a5,-1); - packet(0x00a6,-1); + packet( inventorylistnormalType, -1 ); + packet( inventorylistequipType, -1 ); + packet( storageListNormalType, -1 ); + packet( storageListEquipType, -1 ); parseable_packet(0x00a7,8,clif_parse_UseItem,2,4); packet( useItemAckType, sizeof( struct PACKET_ZC_USE_ITEM_ACK ) ); parseable_packet(0x00a9,6,clif_parse_EquipItem,2,4); @@ -143,7 +143,7 @@ parseable_packet(0x00e6,3,clif_parse_TradeAck,2); packet(0x00e7,3); parseable_packet(0x00e8,8,clif_parse_TradeAddItem,2,4); - packet(0x00e9,19); + packet( tradeaddType, sizeof( struct PACKET_ZC_ADD_EXCHANGE_ITEM ) ); packet(0x00ea,5); parseable_packet(0x00eb,2,clif_parse_TradeOk,0); packet(0x00ec,3); @@ -200,8 +200,8 @@ packet(0x011f,16); packet(0x0120,6); packet(0x0121,14); - packet(0x0122,-1); - packet(0x0123,-1); + packet( cartlistequipType, -1 ); + packet( cartlistnormalType, -1 ); packet( cartaddType, sizeof( struct PACKET_ZC_ADD_ITEM_TO_CART ) ); packet(0x0125,8); parseable_packet(0x0126,8,clif_parse_PutItemToCart,2,4); @@ -217,10 +217,10 @@ parseable_packet(0x0130,6,clif_parse_VendingListReq,2); packet(0x0131,86); packet(0x0132,6); - packet(0x0133,-1); + packet( vendinglistType, -1 ); parseable_packet(0x0134,-1,clif_parse_PurchaseReq,2,4,8); packet(0x0135,7); - packet(0x0136,-1); + packet(openvendingType,-1); packet(0x0137,6); packet(0x0138,3); packet(0x0139,16); @@ -401,8 +401,6 @@ packet(0x01eb,10); packet(0x01ec,26); parseable_packet(0x01ed,2,clif_parse_NoviceExplosionSpirits,0); - packet(0x01ee,-1); - packet(0x01ef,-1); packet(0x01f0,-1); packet(0x01f1,-1); packet(0x01f2,20); @@ -995,12 +993,8 @@ parseable_packet(0x0292,2,clif_parse_AutoRevive,0); packet(0x0293,70); packet(0x0294,10); - packet(0x0295,-1); - packet(0x0296,-1); - packet(0x0297,-1); packet( HEADER_ZC_CASH_TIME_COUNTER, sizeof( struct PACKET_ZC_CASH_TIME_COUNTER ) ); packet( HEADER_ZC_CASH_ITEM_DELETE, sizeof( struct PACKET_ZC_CASH_ITEM_DELETE ) ); - packet(0x029a,27); packet(0x029c,66); packet(0x029d,-1); packet(0x029e,11); @@ -1107,14 +1101,10 @@ packet(0x02cd,26); packet(0x02ce,10); parseable_packet(0x02cf,6,clif_parse_MemorialDungeonCommand,2); - packet(0x02d0,-1); - packet(0x02d1,-1); - packet(0x02d2,-1); ack_packet(ZC_NOTIFY_BIND_ON_EQUIP,0x02d3,4,2); - packet(0x02d4,29); packet(0x02d5,2); parseable_packet(0x02d6,6,clif_parse_ViewPlayerEquip,2); - packet(0x02d7,-1); + packet( viewequipackType, -1 ); parseable_packet(0x02d8,10,clif_parse_configuration,2,6); packet(0x02d9,10); packet(0x02da,3); @@ -1163,9 +1153,6 @@ // 2008-01-02aSakexe #if PACKETVER >= 20080102 parseable_packet(0x01df,6,clif_parse_GMReqAccountName,2); - packet(0x02e8,-1); - packet(0x02e9,-1); - packet(0x02ea,-1); packet(0x02eb,13); packet(0x02ec,67); packet(0x02ed,59); @@ -1622,7 +1609,6 @@ // 2009-12-15aRagexeRE #if PACKETVER >= 20091215 - packet(0x0800,-1); //packet(0x0801,-1); #endif @@ -1669,11 +1655,6 @@ //packet(0x07F0,6); #endif -// 2010-02-23aRagexeRE -#if PACKETVER >= 20100223 - packet(0x080F,20); -#endif - // 2010-03-03aRagexeRE #if PACKETVER >= 20100303 packet(0x0810,3); @@ -1744,7 +1725,7 @@ //packet(0x0825,-1); //packet(0x0826,4); parseable_packet(0x0835,-1,clif_parse_SearchStoreInfo,2,4,5,9,13,14,15); - packet(0x0836,-1); + packet( HEADER_ZC_SEARCH_STORE_INFO_ACK, -1 ); packet(0x0837,3); //packet(0x0838,3); #endif @@ -1823,7 +1804,6 @@ packet(0x0856,-1); packet(0x0857,-1); packet(0x0858,-1); - packet(0x0859,-1); ack_packet(ZC_WEAR_EQUIP_ACK,0x08d0,9,2,4,6,8); #endif @@ -2086,14 +2066,6 @@ packet(0x0979,50); //ackworldinfo ack_packet(ZC_PERSONAL_INFOMATION,0x097b,16,2,4,8,12,16,17,21,25); //Still need further information //ack_packet(ZC_PERSONAL_INFOMATION_CHN,0x0981,12,2,4,6,8,12,13,15,17,10); // Disabled until further information is found. - packet(0x0990,31); //additem - packet(0x0991,-1); //inv itemlist normal - packet(0x0992,-1); //inv itemlist equip - packet(0x0993,-1); //cart itemlist normal - packet(0x0994,-1); //cart itemlist equip - packet(0x0995,-1); //store itemlist normal - packet(0x0996,-1); //store itemlist equip - packet(0x0997,-1); //ZC_EQUIPWIN_MICROSCOPE_V5 parseable_packet(0x0998,8,clif_parse_EquipItem,2,4); // CZ_REQ_WEAR_EQUIP_V5 ack_packet(ZC_WEAR_EQUIP_ACK,0x0999,11,2,4,8,10); // cz_wear_equipv5 packet(0x099a,9); // take_off_equipv5 @@ -2238,16 +2210,6 @@ packet(0x09FF,-1); // ZC_NOTIFY_STANDENTRY11 #endif -// 2015-02-25aRagexeRE -#if PACKETVER >= 20150225 - packet(0x0A09,45); // ZC_ADD_EXCHANGE_ITEM3 - packet(0x0A0C,56); // ZC_ITEM_PICKUP_ACK_V6 - packet(0x0A0D,-1); // ZC_INVENTORY_ITEMLIST_EQUIP_V6 - packet(0x0A0F,-1); // ZC_CART_ITEMLIST_EQUIP_V6 - packet(0x0A10,-1); // ZC_STORE_ITEMLIST_EQUIP_V6 - packet(0x0A2D,-1); // ZC_EQUIPWIN_MICROSCOPE_V6 -#endif - #if PACKETVER_MAIN_NUM >= 20150507 || PACKETVER_RE_NUM >= 20150429 || defined(PACKETVER_ZERO) packet( HEADER_ZC_HAT_EFFECT, -1 ); #endif @@ -2259,7 +2221,7 @@ parseable_packet(0x09E8,11,clif_parse_Mail_refreshinbox,2,3); // CZ_OPEN_MAILBOX parseable_packet(0x09E9,2,clif_parse_dull,0); // CZ_CLOSE_MAILBOX parseable_packet(0x09EA,11,clif_parse_Mail_read,2,3); // CZ_REQ_READ_MAIL - packet(0x09EB,-1); // ZC_ACK_READ_MAIL + packet(rodexread,-1); // ZC_ACK_READ_MAIL parseable_packet(0x09EC,-1,clif_parse_Mail_send,2,4,28,52,60,62,64); // CZ_REQ_WRITE_MAIL packet(0x09ED,3); // ZC_ACK_WRITE_MAIL parseable_packet(0x09EE,11,clif_parse_Mail_refreshinbox,2,3); // CZ_REQ_NEXT_MAIL_LIST @@ -2273,7 +2235,7 @@ packet(0x09F6,11); // ZC_ACK_DELETE_MAIL parseable_packet(0x0A03,2,clif_parse_Mail_cancelwrite,0); // CZ_REQ_CANCEL_WRITE_MAIL parseable_packet(0x0A04,6,clif_parse_Mail_setattach,2,4); // CZ_REQ_ADD_ITEM_TO_MAIL - packet(0x0A05,53); // ZC_ACK_ADD_ITEM_TO_MAIL + packet( rodexadditem, sizeof( struct PACKET_ZC_ADD_ITEM_TO_MAIL ) ); // ZC_ACK_ADD_ITEM_TO_MAIL parseable_packet(0x0A06,6,clif_parse_Mail_winopen,2,4); // CZ_REQ_REMOVE_ITEM_MAIL packet(0x0A07,9); // ZC_ACK_REMOVE_ITEM_MAIL parseable_packet(0x0A08,26,clif_parse_Mail_beginwrite,0); // CZ_REQ_OPEN_WRITE_MAIL @@ -2337,11 +2299,6 @@ packet(0x0A84,94); #endif -// 2016-09-21bRagexeRE -#if PACKETVER >= 20160921 - packet(0x0A37,59); -#endif - // 2016-10-26bRagexeRE #if PACKETVER >= 20161026 packet(0x0AA5,-1); diff --git a/src/map/packets.hpp b/src/map/packets.hpp index 4a36bc9c0a..bca74f0e3b 100644 --- a/src/map/packets.hpp +++ b/src/map/packets.hpp @@ -199,8 +199,17 @@ DEFINE_PACKET_HEADER(ZC_ACK_WEAPONREFINE, 0x223) DEFINE_PACKET_HEADER(CZ_REQ_MAKINGITEM, 0x25b) DEFINE_PACKET_HEADER(ZC_CASH_TIME_COUNTER, 0x298) DEFINE_PACKET_HEADER(ZC_CASH_ITEM_DELETE, 0x299) -DEFINE_PACKET_HEADER(ZC_ITEM_PICKUP_PARTY, 0x2b8) +#if PACKETVER_MAIN_NUM >= 20200916 || PACKETVER_RE_NUM >= 20200724 + DEFINE_PACKET_HEADER(ZC_ITEM_PICKUP_PARTY, 0xb67) +#else + DEFINE_PACKET_HEADER(ZC_ITEM_PICKUP_PARTY, 0x2b8) +#endif DEFINE_PACKET_HEADER(ZC_FAILED_TRADE_BUYING_STORE_TO_SELLER, 0x824) +#if PACKETVER_MAIN_NUM >= 20200916 || PACKETVER_RE_NUM >= 20200724 + DEFINE_PACKET_HEADER(ZC_SEARCH_STORE_INFO_ACK, 0xb64) +#else + DEFINE_PACKET_HEADER(ZC_SEARCH_STORE_INFO_ACK, 0x836) +#endif DEFINE_PACKET_HEADER(CZ_SSILIST_ITEM_CLICK, 0x83c) DEFINE_PACKET_HEADER(CZ_REQ_CASH_BARGAIN_SALE_ITEM_INFO, 0x9ac) DEFINE_PACKET_HEADER(ZC_ACK_CASH_BARGAIN_SALE_ITEM_INFO, 0x9ad) diff --git a/src/map/packets_struct.hpp b/src/map/packets_struct.hpp index ec7e58c262..35354a6be9 100644 --- a/src/map/packets_struct.hpp +++ b/src/map/packets_struct.hpp @@ -17,21 +17,27 @@ enum packet_headers { banking_checkType = 0x9a6, cart_additem_ackType = 0x12c, sc_notickType = 0x196, -#if PACKETVER >= 20150226 +#if PACKETVER_MAIN_NUM >= 20200916 || PACKETVER_RE_NUM >= 20200724 + cartaddType = 0xb45, +#elif PACKETVER >= 20150226 cartaddType = 0xa0b, #elif PACKETVER >= 5 cartaddType = 0x1c5, #else cartaddType = 0x124, #endif -#if PACKETVER >= 20150226 +#if PACKETVER_MAIN_NUM >= 20200916 || PACKETVER_RE_NUM >= 20200724 + storageaddType = 0xb44, +#elif PACKETVER >= 20150226 storageaddType = 0xa0a, #elif PACKETVER >= 5 storageaddType = 0x1c4, #else storageaddType = 0xf4, #endif -#if PACKETVER >= 20150226 +#if PACKETVER_MAIN_NUM >= 20200916 || PACKETVER_RE_NUM >= 20200724 + tradeaddType = 0xb42, +#elif PACKETVER >= 20150226 tradeaddType = 0xa09, #elif PACKETVER >= 20100223 tradeaddType = 0x80f, @@ -48,6 +54,8 @@ enum packet_headers { additemType = 0x990, #elif PACKETVER < 20160921 additemType = 0xa0c, +#elif PACKETVER_MAIN_NUM >= 20200916 || PACKETVER_RE_NUM >= 20200724 + additemType = 0xb41, #else additemType = 0xa37, #endif @@ -179,7 +187,9 @@ enum packet_headers { #else inventorylistnormalType = 0xa3, #endif -#if PACKETVER_RE_NUM >= 20180912 || PACKETVER_ZERO_NUM >= 20180919 || PACKETVER_MAIN_NUM >= 20181002 +#if PACKETVER_MAIN_NUM >= 20200916 || PACKETVER_RE_NUM >= 20200724 + inventorylistequipType = 0xb39, +#elif PACKETVER_RE_NUM >= 20180912 || PACKETVER_ZERO_NUM >= 20180919 || PACKETVER_MAIN_NUM >= 20181002 inventorylistequipType = 0xb0a, #elif PACKETVER >= 20150226 inventorylistequipType = 0xa0d, @@ -203,7 +213,9 @@ enum packet_headers { #else storageListNormalType = 0xa5, #endif -#if PACKETVER_RE_NUM >= 20180829 || PACKETVER_ZERO_NUM >= 20180919 || PACKETVER_MAIN_NUM >= 20181002 +#if PACKETVER_MAIN_NUM >= 20200916 || PACKETVER_RE_NUM >= 20200724 + storageListEquipType = 0xb39, +#elif PACKETVER_RE_NUM >= 20180829 || PACKETVER_ZERO_NUM >= 20180919 || PACKETVER_MAIN_NUM >= 20181002 storageListEquipType = 0xb0a, #elif PACKETVER >= 20150226 storageListEquipType = 0xa10, @@ -227,7 +239,9 @@ enum packet_headers { #else cartlistnormalType = 0x123, #endif -#if PACKETVER_RE_NUM >= 20180829 || PACKETVER_ZERO_NUM >= 20180919 || PACKETVER_MAIN_NUM >= 20181002 +#if PACKETVER_MAIN_NUM >= 20200916 || PACKETVER_RE_NUM >= 20200724 + cartlistequipType = 0xb39, +#elif PACKETVER_RE_NUM >= 20180829 || PACKETVER_ZERO_NUM >= 20180919 || PACKETVER_MAIN_NUM >= 20181002 cartlistequipType = 0xb0a, #elif PACKETVER >= 20150226 cartlistequipType = 0xa0f, @@ -242,10 +256,16 @@ enum packet_headers { #endif #if PACKETVER < 20100105 vendinglistType = 0x133, +#elif PACKETVER_MAIN_NUM >= 20200916 || PACKETVER_RE_NUM >= 20200724 + vendinglistType = 0xb3d, #else vendinglistType = 0x800, #endif +#if PACKETVER_MAIN_NUM >= 20200916 || PACKETVER_RE_NUM >= 20200724 + openvendingType = 0xb40, +#else openvendingType = 0x136, +#endif #if PACKETVER >= 20120925 equipitemType = 0x998, #else @@ -261,7 +281,9 @@ enum packet_headers { #else unequipitemackType = 0xac, #endif -#if PACKETVER_MAIN_NUM >= 20180801 || PACKETVER_RE_NUM >= 20180801 || PACKETVER_ZERO_NUM >= 20180808 +#if PACKETVER_MAIN_NUM >= 20200916 || PACKETVER_RE_NUM >= 20200724 + viewequipackType = 0xb37, +#elif PACKETVER_MAIN_NUM >= 20180801 || PACKETVER_RE_NUM >= 20180801 || PACKETVER_ZERO_NUM >= 20180808 viewequipackType = 0xb03, #elif PACKETVER >= 20150226 viewequipackType = 0xa2d, @@ -303,13 +325,21 @@ enum packet_headers { #endif // PACKETVER >= 20141022 /* Rodex */ rodexicon = 0x09E7, +#if PACKETVER_MAIN_NUM >= 20200916 || PACKETVER_RE_NUM >= 20200724 + rodexread = 0x0B63, +#else rodexread = 0x09EB, +#endif rodexwriteresult = 0x09ED, rodexnextpage = 0x09F0, rodexgetzeny = 0x09F2, rodexgetitem = 0x09F4, rodexdelete = 0x09F6, +#if PACKETVER_MAIN_NUM >= 20200916 || PACKETVER_RE_NUM >= 20200724 + rodexadditem = 0x0B3f, +#else rodexadditem = 0x0A05, +#endif rodexremoveitem = 0x0A07, rodexopenwrite = 0x0A12, #if PACKETVER < 20160601 @@ -481,7 +511,9 @@ struct EQUIPITEM_INFO { #if PACKETVER < 20120925 uint8 IsDamaged; #endif +#if !( PACKETVER_MAIN_NUM >= 20200916 || PACKETVER_RE_NUM >= 20200724 ) uint8 RefiningLevel; +#endif struct EQUIPSLOTINFO slot; #if PACKETVER >= 20071002 int32 HireExpireDate; @@ -496,6 +528,10 @@ struct EQUIPITEM_INFO { uint8 option_count; struct ItemOptions option_data[MAX_ITEM_OPTIONS]; #endif +#if PACKETVER_MAIN_NUM >= 20200916 || PACKETVER_RE_NUM >= 20200724 + uint8 RefiningLevel; + uint8 enchantgrade; +#endif #if PACKETVER >= 20120925 struct { uint8 IsIdentified : 1; @@ -546,7 +582,9 @@ struct packet_additem { #endif uint8 IsIdentified; uint8 IsDamaged; +#if !( PACKETVER_MAIN_NUM >= 20200916 || PACKETVER_RE_NUM >= 20200724 ) uint8 refiningLevel; +#endif struct EQUIPSLOTINFO slot; #if PACKETVER >= 20120925 uint32 location; @@ -563,10 +601,14 @@ struct packet_additem { #endif #if PACKETVER >= 20150226 struct ItemOptions option_data[MAX_ITEM_OPTIONS]; -#endif #if PACKETVER >= 20160921 uint8 favorite; uint16 look; +#if PACKETVER_MAIN_NUM >= 20200916 || PACKETVER_RE_NUM >= 20200724 + uint8 refiningLevel; + uint8 enchantgrade; +#endif +#endif #endif } __attribute__((packed)); @@ -1557,12 +1599,18 @@ struct PACKET_ZC_ADD_ITEM_TO_MAIL { int8 type; int8 IsIdentified; int8 IsDamaged; +#if !( PACKETVER_MAIN_NUM >= 20200916 || PACKETVER_RE_NUM >= 20200724 ) int8 refiningLevel; +#endif struct EQUIPSLOTINFO slot; struct ItemOptions optionData[MAX_ITEM_OPTIONS]; int16 weight; uint8 favorite; uint32 location; +#if PACKETVER_MAIN_NUM >= 20200916 || PACKETVER_RE_NUM >= 20200724 + int8 refiningLevel; + uint8 enchantgrade; +#endif } __attribute__((packed)); struct mail_item { @@ -1574,13 +1622,19 @@ struct mail_item { #endif int8 IsIdentified; int8 IsDamaged; +#if !( PACKETVER_MAIN_NUM >= 20200916 || PACKETVER_RE_NUM >= 20200724 ) int8 refiningLevel; +#endif struct EQUIPSLOTINFO slot; uint32 location; uint8 type; uint16 viewSprite; uint16 bindOnEquip; struct ItemOptions optionData[MAX_ITEM_OPTIONS]; +#if PACKETVER_MAIN_NUM >= 20200916 || PACKETVER_RE_NUM >= 20200724 + int8 refiningLevel; + uint8 enchantgrade; +#endif } __attribute__((packed)); struct PACKET_CZ_REQ_OPEN_WRITE_MAIL { @@ -2087,10 +2141,16 @@ struct PACKET_ZC_ADD_ITEM_TO_STORE { #endif uint8 identified; uint8 damaged; +#if !( PACKETVER_MAIN_NUM >= 20200916 || PACKETVER_RE_NUM >= 20200724 ) uint8 refine; +#endif struct EQUIPSLOTINFO slot; #if PACKETVER >= 20150226 struct ItemOptions option_data[MAX_ITEM_OPTIONS]; +#if PACKETVER_MAIN_NUM >= 20200916 || PACKETVER_RE_NUM >= 20200724 + uint8 refine; + uint8 enchantgrade; +#endif #endif } __attribute__((packed)); @@ -2131,10 +2191,16 @@ struct PACKET_ZC_ADD_ITEM_TO_CART { #endif uint8 identified; uint8 damaged; +#if !( PACKETVER_MAIN_NUM >= 20200916 || PACKETVER_RE_NUM >= 20200724 ) uint8 refine; +#endif struct EQUIPSLOTINFO slot; #if PACKETVER >= 20150226 struct ItemOptions option_data[MAX_ITEM_OPTIONS]; +#if PACKETVER_MAIN_NUM >= 20200916 || PACKETVER_RE_NUM >= 20200724 + uint8 refine; + uint8 enchantgrade; +#endif #endif } __attribute__((packed)); @@ -2224,10 +2290,18 @@ struct PACKET_ZC_ADD_EXCHANGE_ITEM { #endif uint8 identified; uint8 damaged; +#if !( PACKETVER_MAIN_NUM >= 20200916 || PACKETVER_RE_NUM >= 20200724 ) uint8 refine; +#endif struct EQUIPSLOTINFO slot; #if PACKETVER >= 20150226 struct ItemOptions option_data[MAX_ITEM_OPTIONS]; +#if PACKETVER_MAIN_NUM >= 20200916 || PACKETVER_RE_NUM >= 20200724 + uint32 location; + uint16 viewSprite; + uint8 refine; + uint8 enchantgrade; +#endif #endif } __attribute__((packed)); @@ -2261,10 +2335,16 @@ struct PACKET_ZC_ITEM_PICKUP_PARTY { #endif uint8 identified; uint8 damaged; +#if !( PACKETVER_MAIN_NUM >= 20200916 || PACKETVER_RE_NUM >= 20200724 ) uint8 refine; +#endif struct EQUIPSLOTINFO slot; uint16 location; uint8 itemType; +#if PACKETVER_MAIN_NUM >= 20200916 || PACKETVER_RE_NUM >= 20200724 + uint8 refine; + uint8 enchantgrade; +#endif } __attribute__((packed)); struct PACKET_ZC_UPDATE_ITEM_FROM_BUYING_STORE { @@ -2463,10 +2543,16 @@ struct PACKET_ZC_PC_PURCHASE_MYITEMLIST_sub { #endif uint8 identified; uint8 damaged; +#if !( PACKETVER_MAIN_NUM >= 20200916 || PACKETVER_RE_NUM >= 20200724 ) uint8 refine; +#endif struct EQUIPSLOTINFO slot; #if PACKETVER >= 20150226 struct ItemOptions option_data[MAX_ITEM_OPTIONS]; +#if PACKETVER_MAIN_NUM >= 20200916 || PACKETVER_RE_NUM >= 20200724 + uint8 refine; + uint8 enchantgrade; +#endif #endif } __attribute__((packed)); @@ -2559,7 +2645,9 @@ struct PACKET_ZC_PC_PURCHASE_ITEMLIST_FROMMC_sub { #endif uint8 identified; uint8 damaged; +#if !( PACKETVER_MAIN_NUM >= 20200916 || PACKETVER_RE_NUM >= 20200724 ) uint8 refine; +#endif struct EQUIPSLOTINFO slot; #if PACKETVER >= 20150226 struct ItemOptions option_data[MAX_ITEM_OPTIONS]; @@ -2568,6 +2656,10 @@ struct PACKET_ZC_PC_PURCHASE_ITEMLIST_FROMMC_sub { #if PACKETVER >= 20160921 uint32 location; uint16 viewSprite; +#if PACKETVER_MAIN_NUM >= 20200916 || PACKETVER_RE_NUM >= 20200724 + uint8 refine; + uint8 enchantgrade; +#endif #endif } __attribute__((packed)); @@ -2780,10 +2872,16 @@ struct PACKET_ZC_SEARCH_STORE_INFO_ACK_sub { uint8 itemType; uint32 price; uint16 amount; +#if !( PACKETVER_MAIN_NUM >= 20200916 || PACKETVER_RE_NUM >= 20200724 ) uint8 refine; +#endif struct EQUIPSLOTINFO slot; #if PACKETVER >= 20150226 struct ItemOptions option_data[MAX_ITEM_OPTIONS]; +#if PACKETVER_MAIN_NUM >= 20200916 || PACKETVER_RE_NUM >= 20200724 + uint8 refine; + uint8 enchantgrade; +#endif #endif } __attribute__((packed)); diff --git a/src/map/searchstore.cpp b/src/map/searchstore.cpp index 9fdea73d54..d0e43cfc46 100644 --- a/src/map/searchstore.cpp +++ b/src/map/searchstore.cpp @@ -400,7 +400,7 @@ void searchstore_clearremote(struct map_session_data* sd) * @param card : card in the item * @param refine : refine of the item */ -bool searchstore_result(struct map_session_data* sd, int store_id, uint32 account_id, const char* store_name, t_itemid nameid, unsigned short amount, unsigned int price, const t_itemid* card, unsigned char refine) +bool searchstore_result(struct map_session_data* sd, int store_id, uint32 account_id, const char* store_name, t_itemid nameid, unsigned short amount, unsigned int price, const t_itemid* card, unsigned char refine, uint8 enchantgrade) { struct s_search_store_info_item* ssitem; @@ -416,6 +416,7 @@ bool searchstore_result(struct map_session_data* sd, int store_id, uint32 accoun ssitem->price = price; memcpy(ssitem->card, card, sizeof(ssitem->card)); ssitem->refine = refine; + ssitem->enchantgrade = enchantgrade; return true; } diff --git a/src/map/searchstore.hpp b/src/map/searchstore.hpp index b074c90591..2b098458bd 100644 --- a/src/map/searchstore.hpp +++ b/src/map/searchstore.hpp @@ -32,6 +32,7 @@ struct s_search_store_info_item { unsigned int price; t_itemid card[MAX_SLOTS]; unsigned char refine; + uint8 enchantgrade; }; struct s_search_store_info { @@ -55,6 +56,6 @@ void searchstore_close(struct map_session_data* sd); void searchstore_click(struct map_session_data* sd, uint32 account_id, int store_id, t_itemid nameid); bool searchstore_queryremote(struct map_session_data* sd, uint32 account_id); void searchstore_clearremote(struct map_session_data* sd); -bool searchstore_result(struct map_session_data* sd, int store_id, uint32 account_id, const char* store_name, t_itemid nameid, unsigned short amount, unsigned int price, const t_itemid* card, unsigned char refine); +bool searchstore_result(struct map_session_data* sd, int store_id, uint32 account_id, const char* store_name, t_itemid nameid, unsigned short amount, unsigned int price, const t_itemid* card, unsigned char refine, uint8 enchantgrade); #endif /* SEARCHSTORE_HPP */ diff --git a/src/map/storage.cpp b/src/map/storage.cpp index 5f6f113276..153ebca477 100644 --- a/src/map/storage.cpp +++ b/src/map/storage.cpp @@ -645,7 +645,7 @@ void storage_guild_log( struct map_session_data* sd, struct item* item, int16 am StringBuf buf; StringBuf_Init(&buf); - StringBuf_Printf(&buf, "INSERT INTO `%s` (`time`, `guild_id`, `char_id`, `name`, `nameid`, `amount`, `identify`, `refine`, `attribute`, `unique_id`, `bound`", guild_storage_log_table); + StringBuf_Printf(&buf, "INSERT INTO `%s` (`time`, `guild_id`, `char_id`, `name`, `nameid`, `amount`, `identify`, `refine`, `attribute`, `unique_id`, `bound`, `enchantgrade`", guild_storage_log_table); for (i = 0; i < MAX_SLOTS; ++i) StringBuf_Printf(&buf, ", `card%d`", i); for (i = 0; i < MAX_ITEM_RDM_OPT; ++i) { @@ -653,8 +653,8 @@ void storage_guild_log( struct map_session_data* sd, struct item* item, int16 am StringBuf_Printf(&buf, ", `option_val%d`", i); StringBuf_Printf(&buf, ", `option_parm%d`", i); } - StringBuf_Printf(&buf, ") VALUES(NOW(),'%u','%u', '%s', '%u', '%d','%d','%d','%d','%" PRIu64 "','%d'", - sd->status.guild_id, sd->status.char_id, sd->status.name, item->nameid, amount, item->identify, item->refine,item->attribute, item->unique_id, item->bound); + StringBuf_Printf(&buf, ") VALUES(NOW(),'%u','%u', '%s', '%u', '%d','%d','%d','%d','%" PRIu64 "','%d','%d'", + sd->status.guild_id, sd->status.char_id, sd->status.name, item->nameid, amount, item->identify, item->refine,item->attribute, item->unique_id, item->bound, item->enchantgrade); for (i = 0; i < MAX_SLOTS; i++) StringBuf_Printf(&buf, ",'%u'", item->card[i]); @@ -676,7 +676,7 @@ enum e_guild_storage_log storage_guild_log_read_sub( struct map_session_data* sd StringBuf_Init(&buf); StringBuf_AppendStr(&buf, "SELECT `id`, `time`, `name`, `amount`"); - StringBuf_AppendStr(&buf, " , `nameid`, `identify`, `refine`, `attribute`, `expire_time`, `bound`, `unique_id`"); + StringBuf_AppendStr(&buf, " , `nameid`, `identify`, `refine`, `attribute`, `expire_time`, `bound`, `unique_id`, `enchantgrade`"); for (j = 0; j < MAX_SLOTS; ++j) StringBuf_Printf(&buf, ", `card%d`", j); for (j = 0; j < MAX_ITEM_RDM_OPT; ++j) { @@ -713,13 +713,14 @@ enum e_guild_storage_log storage_guild_log_read_sub( struct map_session_data* sd SqlStmt_BindColumn(stmt, 7, SQLDT_CHAR, &entry.item.attribute, 0, NULL, NULL); SqlStmt_BindColumn(stmt, 8, SQLDT_UINT, &entry.item.expire_time, 0, NULL, NULL); SqlStmt_BindColumn(stmt, 9, SQLDT_UINT, &entry.item.bound, 0, NULL, NULL); - SqlStmt_BindColumn(stmt, 10, SQLDT_UINT64, &entry.item.unique_id, 0, NULL, NULL); + SqlStmt_BindColumn(stmt, 10, SQLDT_UINT64, &entry.item.unique_id, 0, NULL, NULL); + SqlStmt_BindColumn(stmt, 11, SQLDT_INT8, &entry.item.enchantgrade,0, NULL, NULL); for( j = 0; j < MAX_SLOTS; ++j ) - SqlStmt_BindColumn(stmt, 11+j, SQLDT_UINT, &entry.item.card[j], 0, NULL, NULL); + SqlStmt_BindColumn(stmt, 12+j, SQLDT_UINT, &entry.item.card[j], 0, NULL, NULL); for( j = 0; j < MAX_ITEM_RDM_OPT; ++j ) { - SqlStmt_BindColumn(stmt, 11+MAX_SLOTS+j*3, SQLDT_SHORT, &entry.item.option[j].id, 0, NULL, NULL); - SqlStmt_BindColumn(stmt, 11+MAX_SLOTS+j*3+1, SQLDT_SHORT, &entry.item.option[j].value, 0, NULL, NULL); - SqlStmt_BindColumn(stmt, 11+MAX_SLOTS+j*3+2, SQLDT_CHAR, &entry.item.option[j].param, 0, NULL, NULL); + SqlStmt_BindColumn(stmt, 12+MAX_SLOTS+j*3, SQLDT_SHORT, &entry.item.option[j].id, 0, NULL, NULL); + SqlStmt_BindColumn(stmt, 12+MAX_SLOTS+j*3+1, SQLDT_SHORT, &entry.item.option[j].value, 0, NULL, NULL); + SqlStmt_BindColumn(stmt, 12+MAX_SLOTS+j*3+2, SQLDT_CHAR, &entry.item.option[j].param, 0, NULL, NULL); } log.reserve(max); diff --git a/src/map/vending.cpp b/src/map/vending.cpp index 27b363deb1..bdc4400940 100755 --- a/src/map/vending.cpp +++ b/src/map/vending.cpp @@ -465,7 +465,7 @@ bool vending_searchall(struct map_session_data* sd, const struct s_search_store_ } } - if( !searchstore_result(s->search_sd, sd->vender_id, sd->status.account_id, sd->message, it->nameid, sd->vending[i].amount, sd->vending[i].value, it->card, it->refine) ) { // result set full + if( !searchstore_result(s->search_sd, sd->vender_id, sd->status.account_id, sd->message, it->nameid, sd->vending[i].amount, sd->vending[i].value, it->card, it->refine, it->enchantgrade ) ) { // result set full return false; } }