Initial support for enchantgrade (#5445)

Thanks to @LunarSHINING, @idk-whoami and @attackjom
This commit is contained in:
Lemongrass3110 2020-11-05 22:18:12 +01:00 committed by GitHub
parent 12cfe31bf1
commit d01b718cc0
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
15 changed files with 262 additions and 126 deletions

View File

@ -86,6 +86,7 @@ CREATE TABLE IF NOT EXISTS `auction` (
`option_val4` smallint(5) NOT NULL default '0', `option_val4` smallint(5) NOT NULL default '0',
`option_parm4` tinyint(3) NOT NULL default '0', `option_parm4` tinyint(3) NOT NULL default '0',
`unique_id` bigint(20) unsigned NOT NULL default '0', `unique_id` bigint(20) unsigned NOT NULL default '0',
`enchantgrade` tinyint unsigned NOT NULL default '0',
PRIMARY KEY (`auction_id`) PRIMARY KEY (`auction_id`)
) ENGINE=MyISAM; ) ENGINE=MyISAM;
@ -185,6 +186,7 @@ CREATE TABLE IF NOT EXISTS `cart_inventory` (
`expire_time` int(11) unsigned NOT NULL default '0', `expire_time` int(11) unsigned NOT NULL default '0',
`bound` tinyint(3) unsigned NOT NULL default '0', `bound` tinyint(3) unsigned NOT NULL default '0',
`unique_id` bigint(20) unsigned NOT NULL default '0', `unique_id` bigint(20) unsigned NOT NULL default '0',
`enchantgrade` tinyint unsigned NOT NULL default '0',
PRIMARY KEY (`id`), PRIMARY KEY (`id`),
KEY `char_id` (`char_id`) KEY `char_id` (`char_id`)
) ENGINE=MyISAM; ) ENGINE=MyISAM;
@ -576,6 +578,7 @@ CREATE TABLE IF NOT EXISTS `guild_storage` (
`expire_time` int(11) unsigned NOT NULL default '0', `expire_time` int(11) unsigned NOT NULL default '0',
`bound` tinyint(3) unsigned NOT NULL default '0', `bound` tinyint(3) unsigned NOT NULL default '0',
`unique_id` bigint(20) unsigned NOT NULL default '0', `unique_id` bigint(20) unsigned NOT NULL default '0',
`enchantgrade` tinyint unsigned NOT NULL default '0',
PRIMARY KEY (`id`), PRIMARY KEY (`id`),
KEY `guild_id` (`guild_id`) KEY `guild_id` (`guild_id`)
) ENGINE=MyISAM; ) ENGINE=MyISAM;
@ -617,6 +620,7 @@ CREATE TABLE IF NOT EXISTS `guild_storage_log` (
`expire_time` int(11) unsigned NOT NULL default '0', `expire_time` int(11) unsigned NOT NULL default '0',
`unique_id` bigint(20) unsigned NOT NULL default '0', `unique_id` bigint(20) unsigned NOT NULL default '0',
`bound` tinyint(1) unsigned NOT NULL default '0', `bound` tinyint(1) unsigned NOT NULL default '0',
`enchantgrade` tinyint unsigned NOT NULL default '0',
PRIMARY KEY (`id`), PRIMARY KEY (`id`),
INDEX (`guild_id`) INDEX (`guild_id`)
) ENGINE=MyISAM AUTO_INCREMENT=1; ) ENGINE=MyISAM AUTO_INCREMENT=1;
@ -715,6 +719,7 @@ CREATE TABLE IF NOT EXISTS `inventory` (
`bound` tinyint(3) unsigned NOT NULL default '0', `bound` tinyint(3) unsigned NOT NULL default '0',
`unique_id` bigint(20) unsigned NOT NULL default '0', `unique_id` bigint(20) unsigned NOT NULL default '0',
`equip_switch` int(11) unsigned NOT NULL default '0', `equip_switch` int(11) unsigned NOT NULL default '0',
`enchantgrade` tinyint unsigned NOT NULL default '0',
PRIMARY KEY (`id`), PRIMARY KEY (`id`),
KEY `char_id` (`char_id`) KEY `char_id` (`char_id`)
) ENGINE=MyISAM; ) ENGINE=MyISAM;
@ -818,6 +823,7 @@ CREATE TABLE IF NOT EXISTS `mail_attachments` (
`option_parm4` tinyint(3) NOT NULL default '0', `option_parm4` tinyint(3) NOT NULL default '0',
`unique_id` bigint(20) unsigned NOT NULL DEFAULT '0', `unique_id` bigint(20) unsigned NOT NULL DEFAULT '0',
`bound` tinyint(1) unsigned NOT NULL DEFAULT '0', `bound` tinyint(1) unsigned NOT NULL DEFAULT '0',
`enchantgrade` tinyint unsigned NOT NULL default '0',
PRIMARY KEY (`id`,`index`) PRIMARY KEY (`id`,`index`)
) ENGINE=MyISAM; ) ENGINE=MyISAM;
@ -1038,6 +1044,7 @@ CREATE TABLE IF NOT EXISTS `storage` (
`expire_time` int(11) unsigned NOT NULL default '0', `expire_time` int(11) unsigned NOT NULL default '0',
`bound` tinyint(3) unsigned NOT NULL default '0', `bound` tinyint(3) unsigned NOT NULL default '0',
`unique_id` bigint(20) unsigned NOT NULL default '0', `unique_id` bigint(20) unsigned NOT NULL default '0',
`enchantgrade` tinyint unsigned NOT NULL default '0',
PRIMARY KEY (`id`), PRIMARY KEY (`id`),
KEY `account_id` (`account_id`) KEY `account_id` (`account_id`)
) ENGINE=MyISAM; ) ENGINE=MyISAM;

View File

@ -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';

View File

@ -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. // it significantly reduces cpu load on the database server.
StringBuf_Init(&buf); 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) { if (tableswitch == TABLE_INVENTORY) {
StringBuf_Printf(&buf, ", `favorite`, `equip_switch`"); StringBuf_Printf(&buf, ", `favorite`, `equip_switch`");
offset = 2; offset = 2;
@ -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, 7, SQLDT_UINT, &item.expire_time, 0, NULL, NULL);
SqlStmt_BindColumn(stmt, 8, SQLDT_UINT, &item.bound, 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, 9, SQLDT_UINT64, &item.unique_id, 0, NULL, NULL);
SqlStmt_BindColumn(stmt,10, SQLDT_INT8, &item.enchantgrade,0, NULL, NULL);
if (tableswitch == TABLE_INVENTORY){ if (tableswitch == TABLE_INVENTORY){
SqlStmt_BindColumn(stmt, 10, SQLDT_CHAR, &item.favorite, 0, NULL, NULL); SqlStmt_BindColumn(stmt, 11, SQLDT_CHAR, &item.favorite, 0, NULL, NULL);
SqlStmt_BindColumn(stmt, 11, SQLDT_UINT, &item.equipSwitch, 0, NULL, NULL); SqlStmt_BindColumn(stmt, 12, SQLDT_UINT, &item.equipSwitch, 0, NULL, NULL);
} }
for( i = 0; i < MAX_SLOTS; ++i ) 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 ) { 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].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_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, 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 // bit array indicating which inventory items have already been matched
flag = (bool*) aCalloc(max, sizeof(bool)); 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].attribute == item.attribute &&
items[i].expire_time == item.expire_time && items[i].expire_time == item.expire_time &&
items[i].bound == item.bound && items[i].bound == item.bound &&
items[i].enchantgrade == item.enchantgrade &&
(tableswitch != TABLE_INVENTORY || (items[i].favorite == item.favorite && items[i].equipSwitch == item.equipSwitch)) ) (tableswitch != TABLE_INVENTORY || (items[i].favorite == item.favorite && items[i].equipSwitch == item.equipSwitch)) )
; //Do nothing. ; //Do nothing.
else else
{ {
// update all fields. // update all fields.
StringBuf_Clear(&buf); 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 "'", 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); 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) if (tableswitch == TABLE_INVENTORY)
StringBuf_Printf(&buf, ", `favorite`='%d', `equip_switch`='%u'", items[i].favorite, items[i].equipSwitch); StringBuf_Printf(&buf, ", `favorite`='%d', `equip_switch`='%u'", items[i].favorite, items[i].equipSwitch);
for( j = 0; j < MAX_SLOTS; ++j ) 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); SqlStmt_Free(stmt);
StringBuf_Clear(&buf); 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) if (tableswitch == TABLE_INVENTORY)
StringBuf_Printf(&buf, ", `favorite`, `equip_switch`"); StringBuf_Printf(&buf, ", `favorite`, `equip_switch`");
for( j = 0; j < MAX_SLOTS; ++j ) 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 else
found = true; found = true;
StringBuf_Printf(&buf, "('%d', '%u', '%d', '%u', '%d', '%d', '%d', '%u', '%d', '%" PRIu64 "'", 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); 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) if (tableswitch == TABLE_INVENTORY)
StringBuf_Printf(&buf, ", '%d', '%u'", items[i].favorite, items[i].equipSwitch); StringBuf_Printf(&buf, ", '%d', '%u'", items[i].favorite, items[i].equipSwitch);
for( j = 0; j < MAX_SLOTS; ++j ) 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_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) { if (tableswitch == TABLE_INVENTORY) {
StringBuf_Printf(&buf, ", `favorite`, `equip_switch`"); StringBuf_Printf(&buf, ", `favorite`, `equip_switch`");
offset = 2; 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, 7, SQLDT_UINT, &item.expire_time, 0, NULL, NULL);
SqlStmt_BindColumn(stmt, 8, SQLDT_CHAR, &item.bound, 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, 9, SQLDT_ULONGLONG, &item.unique_id, 0, NULL, NULL);
SqlStmt_BindColumn(stmt,10, SQLDT_INT8, &item.enchantgrade, 0, NULL, NULL);
if (tableswitch == TABLE_INVENTORY){ if (tableswitch == TABLE_INVENTORY){
SqlStmt_BindColumn(stmt, 10, SQLDT_CHAR, &item.favorite, 0, NULL, NULL); SqlStmt_BindColumn(stmt, 11, SQLDT_CHAR, &item.favorite, 0, NULL, NULL);
SqlStmt_BindColumn(stmt, 11, SQLDT_UINT, &item.equipSwitch, 0, NULL, NULL); SqlStmt_BindColumn(stmt, 12, SQLDT_UINT, &item.equipSwitch, 0, NULL, NULL);
} }
for( i = 0; i < MAX_SLOTS; ++i ) 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 ) { 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].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_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, 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 ) for( i = 0; i < max && SQL_SUCCESS == SqlStmt_NextRow(stmt); ++i )
@ -2439,7 +2442,7 @@ bool char_checkdb(void){
} }
//checking mail_attachment_db //checking mail_attachment_db
if( SQL_ERROR == Sql_Query(sql_handle, "SELECT `id`,`index`,`nameid`,`amount`,`refine`,`attribute`,`identify`," 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) ){ " FROM `%s` LIMIT 1;", schema_config.mail_attachment_db) ){
Sql_ShowDebug(sql_handle); Sql_ShowDebug(sql_handle);
return false; return false;
@ -2448,7 +2451,7 @@ bool char_checkdb(void){
//checking auction_db //checking auction_db
if( SQL_ERROR == Sql_Query(sql_handle, "SELECT `auction_id`,`seller_id`,`seller_name`,`buyer_id`,`buyer_name`," 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`," "`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) ){ "FROM `%s` LIMIT 1;", schema_config.auction_db) ){
Sql_ShowDebug(sql_handle); Sql_ShowDebug(sql_handle);
return false; return false;
@ -2501,14 +2504,14 @@ bool char_checkdb(void){
} }
//checking cart_db //checking cart_db
if( SQL_ERROR == Sql_Query(sql_handle, "SELECT `id`,`char_id`,`nameid`,`amount`,`equip`,`identify`,`refine`," 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) ){ " FROM `%s` LIMIT 1;", schema_config.cart_db) ){
Sql_ShowDebug(sql_handle); Sql_ShowDebug(sql_handle);
return false; return false;
} }
//checking inventory_db //checking inventory_db
if( SQL_ERROR == Sql_Query(sql_handle, "SELECT `id`,`char_id`,`nameid`,`amount`,`equip`,`identify`,`refine`," 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`" ",`favorite`,`equip_switch`"
" FROM `%s` LIMIT 1;", schema_config.inventory_db) ){ " FROM `%s` LIMIT 1;", schema_config.inventory_db) ){
Sql_ShowDebug(sql_handle); Sql_ShowDebug(sql_handle);
@ -2516,7 +2519,7 @@ bool char_checkdb(void){
} }
//checking guild_storage_db //checking guild_storage_db
if( SQL_ERROR == Sql_Query(sql_handle, "SELECT `id`,`guild_id`,`nameid`,`amount`,`equip`,`identify`,`refine`," 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) ){ " FROM `%s` LIMIT 1;", schema_config.guild_storage_db) ){
Sql_ShowDebug(sql_handle); Sql_ShowDebug(sql_handle);
return false; return false;

View File

@ -51,8 +51,8 @@ void auction_save(struct auction_data *auction)
return; return;
StringBuf_Init(&buf); 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'", 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); 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++ ) for( j = 0; j < MAX_SLOTS; j++ )
StringBuf_Printf(&buf, ", `card%d` = '%u'", j, auction->item.card[j]); StringBuf_Printf(&buf, ", `card%d` = '%u'", j, auction->item.card[j]);
for (j = 0; j < MAX_ITEM_RDM_OPT; 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); auction->timestamp = time(NULL) + (auction->hours * 3600);
StringBuf_Init(&buf); 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++ ) for( j = 0; j < MAX_SLOTS; j++ )
StringBuf_Printf(&buf, ",`card%d`", j); StringBuf_Printf(&buf, ",`card%d`", j);
for (j = 0; j < MAX_ITEM_RDM_OPT; ++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_val%d`", j);
StringBuf_Printf(&buf, ", `option_parm%d`", j); StringBuf_Printf(&buf, ", `option_parm%d`", j);
} }
StringBuf_Printf(&buf, ") VALUES ('%d',?,'%d',?,'%d','%d','%d','%lu','%u',?,'%d','%d','%d','%" PRIu64 "'", 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->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++ ) for( j = 0; j < MAX_SLOTS; j++ )
StringBuf_Printf(&buf, ",'%u'", auction->item.card[j]); StringBuf_Printf(&buf, ",'%u'", auction->item.card[j]);
for (j = 0; j < MAX_ITEM_RDM_OPT; ++j) { for (j = 0; j < MAX_ITEM_RDM_OPT; ++j) {
@ -196,7 +196,7 @@ void inter_auctions_fromsql(void)
StringBuf_Init(&buf); StringBuf_Init(&buf);
StringBuf_AppendStr(&buf, "SELECT `auction_id`,`seller_id`,`seller_name`,`buyer_id`,`buyer_name`," 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++ ) for( i = 0; i < MAX_SLOTS; i++ )
StringBuf_Printf(&buf, ",`card%d`", i); StringBuf_Printf(&buf, ",`card%d`", i);
for (i = 0; i < MAX_ITEM_RDM_OPT; ++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,12, &data, NULL); item->refine = atoi(data);
Sql_GetData(sql_handle,13, &data, NULL); item->attribute = 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,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->identify = 1;
item->amount = 1; item->amount = 1;
@ -241,16 +242,16 @@ void inter_auctions_fromsql(void)
for( i = 0; i < MAX_SLOTS; i++ ) 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); item->card[i] = strtoul(data, nullptr, 10);
} }
for (i = 0; i < MAX_ITEM_RDM_OPT; i++) { 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); 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); 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); item->option[i].param = atoi(data);
} }

View File

@ -106,7 +106,7 @@ int mail_savemessage(struct mail_message* msg)
SqlStmt_Free(stmt); SqlStmt_Free(stmt);
StringBuf_Clear(&buf); 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++) for (j = 0; j < MAX_SLOTS; j++)
StringBuf_Printf(&buf, ", `card%d`", j); StringBuf_Printf(&buf, ", `card%d`", j);
for (j = 0; j < MAX_ITEM_RDM_OPT; ++j) { for (j = 0; j < MAX_ITEM_RDM_OPT; ++j) {
@ -127,7 +127,7 @@ int mail_savemessage(struct mail_message* msg)
found = true; 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++) for (j = 0; j < MAX_SLOTS; j++)
StringBuf_Printf(&buf, ", '%u'", msg->item[i].card[j]); StringBuf_Printf(&buf, ", '%u'", msg->item[i].card[j]);
for (j = 0; j < MAX_ITEM_RDM_OPT; ++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_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++) for (j = 0; j < MAX_SLOTS; j++)
StringBuf_Printf(&buf, ",`card%d`", j); StringBuf_Printf(&buf, ",`card%d`", j);
for (j = 0; j < MAX_ITEM_RDM_OPT; ++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,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,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,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; msg->item[i].expire_time = 0;
for( j = 0; j < MAX_SLOTS; j++ ){ 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++ ){ 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].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].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,10 + MAX_SLOTS + j * 3, &data, NULL); msg->item[i].option[j].param = atoi(data);
} }
} }

View File

@ -263,6 +263,7 @@ struct item {
char favorite, bound; char favorite, bound;
uint64 unique_id; uint64 unique_id;
unsigned int equipSwitch; // location(s) where item is equipped for equip switching (using enum equip_pos for bitmasking) unsigned int equipSwitch; // location(s) where item is equipped for equip switching (using enum equip_pos for bitmasking)
uint8 enchantgrade;
}; };
//Equip position constants //Equip position constants

View File

@ -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 {// result set full
return false; return false;
} }

View File

@ -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 ); p.type = itemtype( sd->inventory.u.items_inventory[n].nameid );
#if PACKETVER >= 20061218 #if PACKETVER >= 20061218
p.HireExpireDate = sd->inventory.u.items_inventory[n].expire_time; p.HireExpireDate = sd->inventory.u.items_inventory[n].expire_time;
#endif
#if PACKETVER >= 20071002 #if PACKETVER >= 20071002
/* why restrict the flag to non-stackable? because this is the only packet allows stackable to, /* 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) * 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; 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 #if PACKETVER >= 20150226
clif_add_random_options( p.option_data, &sd->inventory.u.items_inventory[n] ); clif_add_random_options( p.option_data, &sd->inventory.u.items_inventory[n] );
#endif
#if PACKETVER >= 20160921 #if PACKETVER >= 20160921
p.favorite = sd->inventory.u.items_inventory[n].favorite; p.favorite = sd->inventory.u.items_inventory[n].favorite;
p.look = sd->inventory_data[n]->look; 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 #endif
} }
@ -2847,6 +2850,10 @@ static void clif_item_equip( short idx, struct EQUIPITEM_INFO *p, struct item *i
#if PACKETVER >= 20150226 #if PACKETVER >= 20150226
p->option_count = clif_add_random_options( p->option_data, it ); p->option_count = clif_add_random_options( p->option_data, it );
#endif #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 ){ 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] ); clif_addcards( &p.slot, &sd->inventory.u.items_inventory[index] );
#if PACKETVER >= 20150226 #if PACKETVER >= 20150226
clif_add_random_options( p.option_data, &sd->inventory.u.items_inventory[index] ); 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 #endif
}else{ }else{
p = {}; p = {};
@ -4633,6 +4645,9 @@ void clif_storageitemadded( struct map_session_data* sd, struct item* i, int ind
clif_addcards( &p.slot, i ); clif_addcards( &p.slot, i );
#if PACKETVER >= 20150226 #if PACKETVER >= 20150226
clif_add_random_options( p.option_data, i ); clif_add_random_options( p.option_data, i );
#if PACKETVER_MAIN_NUM >= 20200916 || PACKETVER_RE_NUM >= 20200724
p.enchantgrade = i->enchantgrade;
#endif
#endif #endif
clif_send( &p, sizeof( p ), &sd->bl, SELF ); 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] ); clif_addcards( &p.slot, &sd->cart.u.items_cart[n] );
#if PACKETVER >= 20150226 #if PACKETVER >= 20150226
clif_add_random_options( p.option_data, &sd->cart.u.items_cart[n] ); 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 #endif
clif_send( &p, sizeof( p ), &sd->bl, SELF ); 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 #if PACKETVER >= 20160921
p->items[i].location = pc_equippoint_sub( sd, data ); p->items[i].location = pc_equippoint_sub( sd, data );
p->items[i].viewSprite = data->look; 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
#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 ); 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->packetLength = len;
p->AID = id; 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] ); clif_addcards( &p->items[i].slot, &sd->cart.u.items_cart[index] );
#if PACKETVER >= 20150226 #if PACKETVER >= 20150226
clif_add_random_options( p->items[i].option_data, &sd->cart.u.items_cart[index] ); 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 #endif
} }
@ -15383,6 +15407,9 @@ void clif_Mail_setattachment( struct map_session_data* sd, int index, int amount
} }
p.favorite = item->favorite; p.favorite = item->favorite;
p.location = pc_equippoint( sd, server_index( index ) ); 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; 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; mailitem->bindOnEquip = item->bound ? 2 : data->flag.bindOnEquip ? 1 : 0;
clif_addcards( &mailitem->slot, item ); clif_addcards( &mailitem->slot, item );
clif_add_random_options( mailitem->optionData, 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 ); offset += sizeof( struct mail_item );
count++; 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 ); clif_addcards( &p.slot, item_data );
p.location = id->equip; // equip location p.location = id->equip; // equip location
p.itemType = itemtype( id->nameid ); // item type 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 ); clif_send( &p, sizeof( p ), &sd->bl, PARTY_SAMEMAP_WOS );
#endif #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 ); 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->packetLength = len;
p->firstPage = !sd->searchstore.pages; p->firstPage = !sd->searchstore.pages;
p->nextPage = searchstore_querynext( sd ); 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 ); clif_addcards( &p->items[i].slot, &it );
#if PACKETVER >= 20150226 #if PACKETVER >= 20150226
clif_add_random_options( p->items[i].option_data, &it ); 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 #endif
} }

View File

@ -70,13 +70,13 @@
packet( HEADER_ZC_ITEM_ENTRY, sizeof( struct PACKET_ZC_ITEM_ENTRY ) ); packet( HEADER_ZC_ITEM_ENTRY, sizeof( struct PACKET_ZC_ITEM_ENTRY ) );
packet(0x009e,17); packet(0x009e,17);
parseable_packet(0x009f,6,clif_parse_TakeItem,2); parseable_packet(0x009f,6,clif_parse_TakeItem,2);
packet(0x00a0,23); packet( additemType, sizeof( struct packet_additem ) );
packet(0x00a1,6); packet(0x00a1,6);
parseable_packet(0x00a2,6,clif_parse_DropItem,2,4); parseable_packet(0x00a2,6,clif_parse_DropItem,2,4);
packet(0x00a3,-1); packet( inventorylistnormalType, -1 );
packet(0x00a4,-1); packet( inventorylistequipType, -1 );
packet(0x00a5,-1); packet( storageListNormalType, -1 );
packet(0x00a6,-1); packet( storageListEquipType, -1 );
parseable_packet(0x00a7,8,clif_parse_UseItem,2,4); parseable_packet(0x00a7,8,clif_parse_UseItem,2,4);
packet( useItemAckType, sizeof( struct PACKET_ZC_USE_ITEM_ACK ) ); packet( useItemAckType, sizeof( struct PACKET_ZC_USE_ITEM_ACK ) );
parseable_packet(0x00a9,6,clif_parse_EquipItem,2,4); parseable_packet(0x00a9,6,clif_parse_EquipItem,2,4);
@ -143,7 +143,7 @@
parseable_packet(0x00e6,3,clif_parse_TradeAck,2); parseable_packet(0x00e6,3,clif_parse_TradeAck,2);
packet(0x00e7,3); packet(0x00e7,3);
parseable_packet(0x00e8,8,clif_parse_TradeAddItem,2,4); parseable_packet(0x00e8,8,clif_parse_TradeAddItem,2,4);
packet(0x00e9,19); packet( tradeaddType, sizeof( struct PACKET_ZC_ADD_EXCHANGE_ITEM ) );
packet(0x00ea,5); packet(0x00ea,5);
parseable_packet(0x00eb,2,clif_parse_TradeOk,0); parseable_packet(0x00eb,2,clif_parse_TradeOk,0);
packet(0x00ec,3); packet(0x00ec,3);
@ -200,8 +200,8 @@
packet(0x011f,16); packet(0x011f,16);
packet(0x0120,6); packet(0x0120,6);
packet(0x0121,14); packet(0x0121,14);
packet(0x0122,-1); packet( cartlistequipType, -1 );
packet(0x0123,-1); packet( cartlistnormalType, -1 );
packet( cartaddType, sizeof( struct PACKET_ZC_ADD_ITEM_TO_CART ) ); packet( cartaddType, sizeof( struct PACKET_ZC_ADD_ITEM_TO_CART ) );
packet(0x0125,8); packet(0x0125,8);
parseable_packet(0x0126,8,clif_parse_PutItemToCart,2,4); parseable_packet(0x0126,8,clif_parse_PutItemToCart,2,4);
@ -217,10 +217,10 @@
parseable_packet(0x0130,6,clif_parse_VendingListReq,2); parseable_packet(0x0130,6,clif_parse_VendingListReq,2);
packet(0x0131,86); packet(0x0131,86);
packet(0x0132,6); packet(0x0132,6);
packet(0x0133,-1); packet( vendinglistType, -1 );
parseable_packet(0x0134,-1,clif_parse_PurchaseReq,2,4,8); parseable_packet(0x0134,-1,clif_parse_PurchaseReq,2,4,8);
packet(0x0135,7); packet(0x0135,7);
packet(0x0136,-1); packet(openvendingType,-1);
packet(0x0137,6); packet(0x0137,6);
packet(0x0138,3); packet(0x0138,3);
packet(0x0139,16); packet(0x0139,16);
@ -401,8 +401,6 @@
packet(0x01eb,10); packet(0x01eb,10);
packet(0x01ec,26); packet(0x01ec,26);
parseable_packet(0x01ed,2,clif_parse_NoviceExplosionSpirits,0); parseable_packet(0x01ed,2,clif_parse_NoviceExplosionSpirits,0);
packet(0x01ee,-1);
packet(0x01ef,-1);
packet(0x01f0,-1); packet(0x01f0,-1);
packet(0x01f1,-1); packet(0x01f1,-1);
packet(0x01f2,20); packet(0x01f2,20);
@ -995,12 +993,8 @@
parseable_packet(0x0292,2,clif_parse_AutoRevive,0); parseable_packet(0x0292,2,clif_parse_AutoRevive,0);
packet(0x0293,70); packet(0x0293,70);
packet(0x0294,10); 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_TIME_COUNTER, sizeof( struct PACKET_ZC_CASH_TIME_COUNTER ) );
packet( HEADER_ZC_CASH_ITEM_DELETE, sizeof( struct PACKET_ZC_CASH_ITEM_DELETE ) ); packet( HEADER_ZC_CASH_ITEM_DELETE, sizeof( struct PACKET_ZC_CASH_ITEM_DELETE ) );
packet(0x029a,27);
packet(0x029c,66); packet(0x029c,66);
packet(0x029d,-1); packet(0x029d,-1);
packet(0x029e,11); packet(0x029e,11);
@ -1107,14 +1101,10 @@
packet(0x02cd,26); packet(0x02cd,26);
packet(0x02ce,10); packet(0x02ce,10);
parseable_packet(0x02cf,6,clif_parse_MemorialDungeonCommand,2); 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); ack_packet(ZC_NOTIFY_BIND_ON_EQUIP,0x02d3,4,2);
packet(0x02d4,29);
packet(0x02d5,2); packet(0x02d5,2);
parseable_packet(0x02d6,6,clif_parse_ViewPlayerEquip,2); parseable_packet(0x02d6,6,clif_parse_ViewPlayerEquip,2);
packet(0x02d7,-1); packet( viewequipackType, -1 );
parseable_packet(0x02d8,10,clif_parse_configuration,2,6); parseable_packet(0x02d8,10,clif_parse_configuration,2,6);
packet(0x02d9,10); packet(0x02d9,10);
packet(0x02da,3); packet(0x02da,3);
@ -1163,9 +1153,6 @@
// 2008-01-02aSakexe // 2008-01-02aSakexe
#if PACKETVER >= 20080102 #if PACKETVER >= 20080102
parseable_packet(0x01df,6,clif_parse_GMReqAccountName,2); parseable_packet(0x01df,6,clif_parse_GMReqAccountName,2);
packet(0x02e8,-1);
packet(0x02e9,-1);
packet(0x02ea,-1);
packet(0x02eb,13); packet(0x02eb,13);
packet(0x02ec,67); packet(0x02ec,67);
packet(0x02ed,59); packet(0x02ed,59);
@ -1622,7 +1609,6 @@
// 2009-12-15aRagexeRE // 2009-12-15aRagexeRE
#if PACKETVER >= 20091215 #if PACKETVER >= 20091215
packet(0x0800,-1);
//packet(0x0801,-1); //packet(0x0801,-1);
#endif #endif
@ -1669,11 +1655,6 @@
//packet(0x07F0,6); //packet(0x07F0,6);
#endif #endif
// 2010-02-23aRagexeRE
#if PACKETVER >= 20100223
packet(0x080F,20);
#endif
// 2010-03-03aRagexeRE // 2010-03-03aRagexeRE
#if PACKETVER >= 20100303 #if PACKETVER >= 20100303
packet(0x0810,3); packet(0x0810,3);
@ -1744,7 +1725,7 @@
//packet(0x0825,-1); //packet(0x0825,-1);
//packet(0x0826,4); //packet(0x0826,4);
parseable_packet(0x0835,-1,clif_parse_SearchStoreInfo,2,4,5,9,13,14,15); 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(0x0837,3);
//packet(0x0838,3); //packet(0x0838,3);
#endif #endif
@ -1823,7 +1804,6 @@
packet(0x0856,-1); packet(0x0856,-1);
packet(0x0857,-1); packet(0x0857,-1);
packet(0x0858,-1); packet(0x0858,-1);
packet(0x0859,-1);
ack_packet(ZC_WEAR_EQUIP_ACK,0x08d0,9,2,4,6,8); ack_packet(ZC_WEAR_EQUIP_ACK,0x08d0,9,2,4,6,8);
#endif #endif
@ -2086,14 +2066,6 @@
packet(0x0979,50); //ackworldinfo 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,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. //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 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 ack_packet(ZC_WEAR_EQUIP_ACK,0x0999,11,2,4,8,10); // cz_wear_equipv5
packet(0x099a,9); // take_off_equipv5 packet(0x099a,9); // take_off_equipv5
@ -2238,16 +2210,6 @@
packet(0x09FF,-1); // ZC_NOTIFY_STANDENTRY11 packet(0x09FF,-1); // ZC_NOTIFY_STANDENTRY11
#endif #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) #if PACKETVER_MAIN_NUM >= 20150507 || PACKETVER_RE_NUM >= 20150429 || defined(PACKETVER_ZERO)
packet( HEADER_ZC_HAT_EFFECT, -1 ); packet( HEADER_ZC_HAT_EFFECT, -1 );
#endif #endif
@ -2259,7 +2221,7 @@
parseable_packet(0x09E8,11,clif_parse_Mail_refreshinbox,2,3); // CZ_OPEN_MAILBOX 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(0x09E9,2,clif_parse_dull,0); // CZ_CLOSE_MAILBOX
parseable_packet(0x09EA,11,clif_parse_Mail_read,2,3); // CZ_REQ_READ_MAIL 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 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 packet(0x09ED,3); // ZC_ACK_WRITE_MAIL
parseable_packet(0x09EE,11,clif_parse_Mail_refreshinbox,2,3); // CZ_REQ_NEXT_MAIL_LIST 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 packet(0x09F6,11); // ZC_ACK_DELETE_MAIL
parseable_packet(0x0A03,2,clif_parse_Mail_cancelwrite,0); // CZ_REQ_CANCEL_WRITE_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 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 parseable_packet(0x0A06,6,clif_parse_Mail_winopen,2,4); // CZ_REQ_REMOVE_ITEM_MAIL
packet(0x0A07,9); // ZC_ACK_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 parseable_packet(0x0A08,26,clif_parse_Mail_beginwrite,0); // CZ_REQ_OPEN_WRITE_MAIL
@ -2337,11 +2299,6 @@
packet(0x0A84,94); packet(0x0A84,94);
#endif #endif
// 2016-09-21bRagexeRE
#if PACKETVER >= 20160921
packet(0x0A37,59);
#endif
// 2016-10-26bRagexeRE // 2016-10-26bRagexeRE
#if PACKETVER >= 20161026 #if PACKETVER >= 20161026
packet(0x0AA5,-1); packet(0x0AA5,-1);

View File

@ -199,8 +199,17 @@ DEFINE_PACKET_HEADER(ZC_ACK_WEAPONREFINE, 0x223)
DEFINE_PACKET_HEADER(CZ_REQ_MAKINGITEM, 0x25b) DEFINE_PACKET_HEADER(CZ_REQ_MAKINGITEM, 0x25b)
DEFINE_PACKET_HEADER(ZC_CASH_TIME_COUNTER, 0x298) DEFINE_PACKET_HEADER(ZC_CASH_TIME_COUNTER, 0x298)
DEFINE_PACKET_HEADER(ZC_CASH_ITEM_DELETE, 0x299) 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) 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_SSILIST_ITEM_CLICK, 0x83c)
DEFINE_PACKET_HEADER(CZ_REQ_CASH_BARGAIN_SALE_ITEM_INFO, 0x9ac) DEFINE_PACKET_HEADER(CZ_REQ_CASH_BARGAIN_SALE_ITEM_INFO, 0x9ac)
DEFINE_PACKET_HEADER(ZC_ACK_CASH_BARGAIN_SALE_ITEM_INFO, 0x9ad) DEFINE_PACKET_HEADER(ZC_ACK_CASH_BARGAIN_SALE_ITEM_INFO, 0x9ad)

View File

@ -17,21 +17,27 @@ enum packet_headers {
banking_checkType = 0x9a6, banking_checkType = 0x9a6,
cart_additem_ackType = 0x12c, cart_additem_ackType = 0x12c,
sc_notickType = 0x196, sc_notickType = 0x196,
#if PACKETVER >= 20150226 #if PACKETVER_MAIN_NUM >= 20200916 || PACKETVER_RE_NUM >= 20200724
cartaddType = 0xb45,
#elif PACKETVER >= 20150226
cartaddType = 0xa0b, cartaddType = 0xa0b,
#elif PACKETVER >= 5 #elif PACKETVER >= 5
cartaddType = 0x1c5, cartaddType = 0x1c5,
#else #else
cartaddType = 0x124, cartaddType = 0x124,
#endif #endif
#if PACKETVER >= 20150226 #if PACKETVER_MAIN_NUM >= 20200916 || PACKETVER_RE_NUM >= 20200724
storageaddType = 0xb44,
#elif PACKETVER >= 20150226
storageaddType = 0xa0a, storageaddType = 0xa0a,
#elif PACKETVER >= 5 #elif PACKETVER >= 5
storageaddType = 0x1c4, storageaddType = 0x1c4,
#else #else
storageaddType = 0xf4, storageaddType = 0xf4,
#endif #endif
#if PACKETVER >= 20150226 #if PACKETVER_MAIN_NUM >= 20200916 || PACKETVER_RE_NUM >= 20200724
tradeaddType = 0xb42,
#elif PACKETVER >= 20150226
tradeaddType = 0xa09, tradeaddType = 0xa09,
#elif PACKETVER >= 20100223 #elif PACKETVER >= 20100223
tradeaddType = 0x80f, tradeaddType = 0x80f,
@ -48,6 +54,8 @@ enum packet_headers {
additemType = 0x990, additemType = 0x990,
#elif PACKETVER < 20160921 #elif PACKETVER < 20160921
additemType = 0xa0c, additemType = 0xa0c,
#elif PACKETVER_MAIN_NUM >= 20200916 || PACKETVER_RE_NUM >= 20200724
additemType = 0xb41,
#else #else
additemType = 0xa37, additemType = 0xa37,
#endif #endif
@ -179,7 +187,9 @@ enum packet_headers {
#else #else
inventorylistnormalType = 0xa3, inventorylistnormalType = 0xa3,
#endif #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, inventorylistequipType = 0xb0a,
#elif PACKETVER >= 20150226 #elif PACKETVER >= 20150226
inventorylistequipType = 0xa0d, inventorylistequipType = 0xa0d,
@ -203,7 +213,9 @@ enum packet_headers {
#else #else
storageListNormalType = 0xa5, storageListNormalType = 0xa5,
#endif #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, storageListEquipType = 0xb0a,
#elif PACKETVER >= 20150226 #elif PACKETVER >= 20150226
storageListEquipType = 0xa10, storageListEquipType = 0xa10,
@ -227,7 +239,9 @@ enum packet_headers {
#else #else
cartlistnormalType = 0x123, cartlistnormalType = 0x123,
#endif #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, cartlistequipType = 0xb0a,
#elif PACKETVER >= 20150226 #elif PACKETVER >= 20150226
cartlistequipType = 0xa0f, cartlistequipType = 0xa0f,
@ -242,10 +256,16 @@ enum packet_headers {
#endif #endif
#if PACKETVER < 20100105 #if PACKETVER < 20100105
vendinglistType = 0x133, vendinglistType = 0x133,
#elif PACKETVER_MAIN_NUM >= 20200916 || PACKETVER_RE_NUM >= 20200724
vendinglistType = 0xb3d,
#else #else
vendinglistType = 0x800, vendinglistType = 0x800,
#endif #endif
#if PACKETVER_MAIN_NUM >= 20200916 || PACKETVER_RE_NUM >= 20200724
openvendingType = 0xb40,
#else
openvendingType = 0x136, openvendingType = 0x136,
#endif
#if PACKETVER >= 20120925 #if PACKETVER >= 20120925
equipitemType = 0x998, equipitemType = 0x998,
#else #else
@ -261,7 +281,9 @@ enum packet_headers {
#else #else
unequipitemackType = 0xac, unequipitemackType = 0xac,
#endif #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, viewequipackType = 0xb03,
#elif PACKETVER >= 20150226 #elif PACKETVER >= 20150226
viewequipackType = 0xa2d, viewequipackType = 0xa2d,
@ -303,13 +325,21 @@ enum packet_headers {
#endif // PACKETVER >= 20141022 #endif // PACKETVER >= 20141022
/* Rodex */ /* Rodex */
rodexicon = 0x09E7, rodexicon = 0x09E7,
#if PACKETVER_MAIN_NUM >= 20200916 || PACKETVER_RE_NUM >= 20200724
rodexread = 0x0B63,
#else
rodexread = 0x09EB, rodexread = 0x09EB,
#endif
rodexwriteresult = 0x09ED, rodexwriteresult = 0x09ED,
rodexnextpage = 0x09F0, rodexnextpage = 0x09F0,
rodexgetzeny = 0x09F2, rodexgetzeny = 0x09F2,
rodexgetitem = 0x09F4, rodexgetitem = 0x09F4,
rodexdelete = 0x09F6, rodexdelete = 0x09F6,
#if PACKETVER_MAIN_NUM >= 20200916 || PACKETVER_RE_NUM >= 20200724
rodexadditem = 0x0B3f,
#else
rodexadditem = 0x0A05, rodexadditem = 0x0A05,
#endif
rodexremoveitem = 0x0A07, rodexremoveitem = 0x0A07,
rodexopenwrite = 0x0A12, rodexopenwrite = 0x0A12,
#if PACKETVER < 20160601 #if PACKETVER < 20160601
@ -481,7 +511,9 @@ struct EQUIPITEM_INFO {
#if PACKETVER < 20120925 #if PACKETVER < 20120925
uint8 IsDamaged; uint8 IsDamaged;
#endif #endif
#if !( PACKETVER_MAIN_NUM >= 20200916 || PACKETVER_RE_NUM >= 20200724 )
uint8 RefiningLevel; uint8 RefiningLevel;
#endif
struct EQUIPSLOTINFO slot; struct EQUIPSLOTINFO slot;
#if PACKETVER >= 20071002 #if PACKETVER >= 20071002
int32 HireExpireDate; int32 HireExpireDate;
@ -496,6 +528,10 @@ struct EQUIPITEM_INFO {
uint8 option_count; uint8 option_count;
struct ItemOptions option_data[MAX_ITEM_OPTIONS]; struct ItemOptions option_data[MAX_ITEM_OPTIONS];
#endif #endif
#if PACKETVER_MAIN_NUM >= 20200916 || PACKETVER_RE_NUM >= 20200724
uint8 RefiningLevel;
uint8 enchantgrade;
#endif
#if PACKETVER >= 20120925 #if PACKETVER >= 20120925
struct { struct {
uint8 IsIdentified : 1; uint8 IsIdentified : 1;
@ -546,7 +582,9 @@ struct packet_additem {
#endif #endif
uint8 IsIdentified; uint8 IsIdentified;
uint8 IsDamaged; uint8 IsDamaged;
#if !( PACKETVER_MAIN_NUM >= 20200916 || PACKETVER_RE_NUM >= 20200724 )
uint8 refiningLevel; uint8 refiningLevel;
#endif
struct EQUIPSLOTINFO slot; struct EQUIPSLOTINFO slot;
#if PACKETVER >= 20120925 #if PACKETVER >= 20120925
uint32 location; uint32 location;
@ -563,10 +601,14 @@ struct packet_additem {
#endif #endif
#if PACKETVER >= 20150226 #if PACKETVER >= 20150226
struct ItemOptions option_data[MAX_ITEM_OPTIONS]; struct ItemOptions option_data[MAX_ITEM_OPTIONS];
#endif
#if PACKETVER >= 20160921 #if PACKETVER >= 20160921
uint8 favorite; uint8 favorite;
uint16 look; uint16 look;
#if PACKETVER_MAIN_NUM >= 20200916 || PACKETVER_RE_NUM >= 20200724
uint8 refiningLevel;
uint8 enchantgrade;
#endif
#endif
#endif #endif
} __attribute__((packed)); } __attribute__((packed));
@ -1557,12 +1599,18 @@ struct PACKET_ZC_ADD_ITEM_TO_MAIL {
int8 type; int8 type;
int8 IsIdentified; int8 IsIdentified;
int8 IsDamaged; int8 IsDamaged;
#if !( PACKETVER_MAIN_NUM >= 20200916 || PACKETVER_RE_NUM >= 20200724 )
int8 refiningLevel; int8 refiningLevel;
#endif
struct EQUIPSLOTINFO slot; struct EQUIPSLOTINFO slot;
struct ItemOptions optionData[MAX_ITEM_OPTIONS]; struct ItemOptions optionData[MAX_ITEM_OPTIONS];
int16 weight; int16 weight;
uint8 favorite; uint8 favorite;
uint32 location; uint32 location;
#if PACKETVER_MAIN_NUM >= 20200916 || PACKETVER_RE_NUM >= 20200724
int8 refiningLevel;
uint8 enchantgrade;
#endif
} __attribute__((packed)); } __attribute__((packed));
struct mail_item { struct mail_item {
@ -1574,13 +1622,19 @@ struct mail_item {
#endif #endif
int8 IsIdentified; int8 IsIdentified;
int8 IsDamaged; int8 IsDamaged;
#if !( PACKETVER_MAIN_NUM >= 20200916 || PACKETVER_RE_NUM >= 20200724 )
int8 refiningLevel; int8 refiningLevel;
#endif
struct EQUIPSLOTINFO slot; struct EQUIPSLOTINFO slot;
uint32 location; uint32 location;
uint8 type; uint8 type;
uint16 viewSprite; uint16 viewSprite;
uint16 bindOnEquip; uint16 bindOnEquip;
struct ItemOptions optionData[MAX_ITEM_OPTIONS]; struct ItemOptions optionData[MAX_ITEM_OPTIONS];
#if PACKETVER_MAIN_NUM >= 20200916 || PACKETVER_RE_NUM >= 20200724
int8 refiningLevel;
uint8 enchantgrade;
#endif
} __attribute__((packed)); } __attribute__((packed));
struct PACKET_CZ_REQ_OPEN_WRITE_MAIL { struct PACKET_CZ_REQ_OPEN_WRITE_MAIL {
@ -2087,10 +2141,16 @@ struct PACKET_ZC_ADD_ITEM_TO_STORE {
#endif #endif
uint8 identified; uint8 identified;
uint8 damaged; uint8 damaged;
#if !( PACKETVER_MAIN_NUM >= 20200916 || PACKETVER_RE_NUM >= 20200724 )
uint8 refine; uint8 refine;
#endif
struct EQUIPSLOTINFO slot; struct EQUIPSLOTINFO slot;
#if PACKETVER >= 20150226 #if PACKETVER >= 20150226
struct ItemOptions option_data[MAX_ITEM_OPTIONS]; struct ItemOptions option_data[MAX_ITEM_OPTIONS];
#if PACKETVER_MAIN_NUM >= 20200916 || PACKETVER_RE_NUM >= 20200724
uint8 refine;
uint8 enchantgrade;
#endif
#endif #endif
} __attribute__((packed)); } __attribute__((packed));
@ -2131,10 +2191,16 @@ struct PACKET_ZC_ADD_ITEM_TO_CART {
#endif #endif
uint8 identified; uint8 identified;
uint8 damaged; uint8 damaged;
#if !( PACKETVER_MAIN_NUM >= 20200916 || PACKETVER_RE_NUM >= 20200724 )
uint8 refine; uint8 refine;
#endif
struct EQUIPSLOTINFO slot; struct EQUIPSLOTINFO slot;
#if PACKETVER >= 20150226 #if PACKETVER >= 20150226
struct ItemOptions option_data[MAX_ITEM_OPTIONS]; struct ItemOptions option_data[MAX_ITEM_OPTIONS];
#if PACKETVER_MAIN_NUM >= 20200916 || PACKETVER_RE_NUM >= 20200724
uint8 refine;
uint8 enchantgrade;
#endif
#endif #endif
} __attribute__((packed)); } __attribute__((packed));
@ -2224,10 +2290,18 @@ struct PACKET_ZC_ADD_EXCHANGE_ITEM {
#endif #endif
uint8 identified; uint8 identified;
uint8 damaged; uint8 damaged;
#if !( PACKETVER_MAIN_NUM >= 20200916 || PACKETVER_RE_NUM >= 20200724 )
uint8 refine; uint8 refine;
#endif
struct EQUIPSLOTINFO slot; struct EQUIPSLOTINFO slot;
#if PACKETVER >= 20150226 #if PACKETVER >= 20150226
struct ItemOptions option_data[MAX_ITEM_OPTIONS]; 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 #endif
} __attribute__((packed)); } __attribute__((packed));
@ -2261,10 +2335,16 @@ struct PACKET_ZC_ITEM_PICKUP_PARTY {
#endif #endif
uint8 identified; uint8 identified;
uint8 damaged; uint8 damaged;
#if !( PACKETVER_MAIN_NUM >= 20200916 || PACKETVER_RE_NUM >= 20200724 )
uint8 refine; uint8 refine;
#endif
struct EQUIPSLOTINFO slot; struct EQUIPSLOTINFO slot;
uint16 location; uint16 location;
uint8 itemType; uint8 itemType;
#if PACKETVER_MAIN_NUM >= 20200916 || PACKETVER_RE_NUM >= 20200724
uint8 refine;
uint8 enchantgrade;
#endif
} __attribute__((packed)); } __attribute__((packed));
struct PACKET_ZC_UPDATE_ITEM_FROM_BUYING_STORE { struct PACKET_ZC_UPDATE_ITEM_FROM_BUYING_STORE {
@ -2463,10 +2543,16 @@ struct PACKET_ZC_PC_PURCHASE_MYITEMLIST_sub {
#endif #endif
uint8 identified; uint8 identified;
uint8 damaged; uint8 damaged;
#if !( PACKETVER_MAIN_NUM >= 20200916 || PACKETVER_RE_NUM >= 20200724 )
uint8 refine; uint8 refine;
#endif
struct EQUIPSLOTINFO slot; struct EQUIPSLOTINFO slot;
#if PACKETVER >= 20150226 #if PACKETVER >= 20150226
struct ItemOptions option_data[MAX_ITEM_OPTIONS]; struct ItemOptions option_data[MAX_ITEM_OPTIONS];
#if PACKETVER_MAIN_NUM >= 20200916 || PACKETVER_RE_NUM >= 20200724
uint8 refine;
uint8 enchantgrade;
#endif
#endif #endif
} __attribute__((packed)); } __attribute__((packed));
@ -2559,7 +2645,9 @@ struct PACKET_ZC_PC_PURCHASE_ITEMLIST_FROMMC_sub {
#endif #endif
uint8 identified; uint8 identified;
uint8 damaged; uint8 damaged;
#if !( PACKETVER_MAIN_NUM >= 20200916 || PACKETVER_RE_NUM >= 20200724 )
uint8 refine; uint8 refine;
#endif
struct EQUIPSLOTINFO slot; struct EQUIPSLOTINFO slot;
#if PACKETVER >= 20150226 #if PACKETVER >= 20150226
struct ItemOptions option_data[MAX_ITEM_OPTIONS]; struct ItemOptions option_data[MAX_ITEM_OPTIONS];
@ -2568,6 +2656,10 @@ struct PACKET_ZC_PC_PURCHASE_ITEMLIST_FROMMC_sub {
#if PACKETVER >= 20160921 #if PACKETVER >= 20160921
uint32 location; uint32 location;
uint16 viewSprite; uint16 viewSprite;
#if PACKETVER_MAIN_NUM >= 20200916 || PACKETVER_RE_NUM >= 20200724
uint8 refine;
uint8 enchantgrade;
#endif
#endif #endif
} __attribute__((packed)); } __attribute__((packed));
@ -2780,10 +2872,16 @@ struct PACKET_ZC_SEARCH_STORE_INFO_ACK_sub {
uint8 itemType; uint8 itemType;
uint32 price; uint32 price;
uint16 amount; uint16 amount;
#if !( PACKETVER_MAIN_NUM >= 20200916 || PACKETVER_RE_NUM >= 20200724 )
uint8 refine; uint8 refine;
#endif
struct EQUIPSLOTINFO slot; struct EQUIPSLOTINFO slot;
#if PACKETVER >= 20150226 #if PACKETVER >= 20150226
struct ItemOptions option_data[MAX_ITEM_OPTIONS]; struct ItemOptions option_data[MAX_ITEM_OPTIONS];
#if PACKETVER_MAIN_NUM >= 20200916 || PACKETVER_RE_NUM >= 20200724
uint8 refine;
uint8 enchantgrade;
#endif
#endif #endif
} __attribute__((packed)); } __attribute__((packed));

View File

@ -400,7 +400,7 @@ void searchstore_clearremote(struct map_session_data* sd)
* @param card : card in the item * @param card : card in the item
* @param refine : refine of 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; 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; ssitem->price = price;
memcpy(ssitem->card, card, sizeof(ssitem->card)); memcpy(ssitem->card, card, sizeof(ssitem->card));
ssitem->refine = refine; ssitem->refine = refine;
ssitem->enchantgrade = enchantgrade;
return true; return true;
} }

View File

@ -32,6 +32,7 @@ struct s_search_store_info_item {
unsigned int price; unsigned int price;
t_itemid card[MAX_SLOTS]; t_itemid card[MAX_SLOTS];
unsigned char refine; unsigned char refine;
uint8 enchantgrade;
}; };
struct s_search_store_info { 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); 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); bool searchstore_queryremote(struct map_session_data* sd, uint32 account_id);
void searchstore_clearremote(struct map_session_data* sd); 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 */ #endif /* SEARCHSTORE_HPP */

View File

@ -645,7 +645,7 @@ void storage_guild_log( struct map_session_data* sd, struct item* item, int16 am
StringBuf buf; StringBuf buf;
StringBuf_Init(&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) for (i = 0; i < MAX_SLOTS; ++i)
StringBuf_Printf(&buf, ", `card%d`", i); StringBuf_Printf(&buf, ", `card%d`", i);
for (i = 0; i < MAX_ITEM_RDM_OPT; ++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_val%d`", i);
StringBuf_Printf(&buf, ", `option_parm%d`", i); StringBuf_Printf(&buf, ", `option_parm%d`", i);
} }
StringBuf_Printf(&buf, ") VALUES(NOW(),'%u','%u', '%s', '%u', '%d','%d','%d','%d','%" PRIu64 "','%d'", 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); 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++) for (i = 0; i < MAX_SLOTS; i++)
StringBuf_Printf(&buf, ",'%u'", item->card[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_Init(&buf);
StringBuf_AppendStr(&buf, "SELECT `id`, `time`, `name`, `amount`"); 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) for (j = 0; j < MAX_SLOTS; ++j)
StringBuf_Printf(&buf, ", `card%d`", j); StringBuf_Printf(&buf, ", `card%d`", j);
for (j = 0; j < MAX_ITEM_RDM_OPT; ++j) { for (j = 0; j < MAX_ITEM_RDM_OPT; ++j) {
@ -714,12 +714,13 @@ enum e_guild_storage_log storage_guild_log_read_sub( struct map_session_data* sd
SqlStmt_BindColumn(stmt, 8, SQLDT_UINT, &entry.item.expire_time, 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, 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 ) 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 ) { 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, 12+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, 12+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+2, SQLDT_CHAR, &entry.item.option[j].param, 0, NULL, NULL);
} }
log.reserve(max); log.reserve(max);

View File

@ -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; return false;
} }
} }