Improved support for enchantgrade (#5975)
Added further support for enchantgrade so that the enchantgrade is not lost during certain processes and can be accessed via script commands. Also added missing logging support for it.
This commit is contained in:
parent
5d92d1a000
commit
3a8e4ffbc7
@ -2916,6 +2916,7 @@ recreate these items perfectly if they are destroyed. Here's what you get:
|
||||
craftsman.
|
||||
@inventorylist_expire[] - expire time (Unix time stamp). 0 means never expires.
|
||||
@inventorylist_bound[] - the bound type of the items (see BOUND_* constants)
|
||||
@inventorylist_enchantgrade[] - the enchantgrade of the items
|
||||
@inventorylist_count - the number of items in these lists.
|
||||
@inventorylist_option_id1[] - first array of random option IDs
|
||||
@inventorylist_option_value1[] - first array of random option values
|
||||
@ -3079,6 +3080,15 @@ Returns the count of unidentified items in the player inventory.
|
||||
If <type> is true the command will identify all the unidentified items as well (default).
|
||||
If <type> is false the command only returns the count of unidentified items.
|
||||
|
||||
---------------------------------------
|
||||
|
||||
*getenchantgrade()
|
||||
|
||||
This function will return the enchantgrade of the equipment from which the
|
||||
function is called.
|
||||
|
||||
This function is intended for use in item scripts.
|
||||
|
||||
---------------------------------------
|
||||
//
|
||||
2,1.- End of item-related commands.
|
||||
@ -7059,6 +7069,7 @@ The label "OnSellItem" sets the following arrays:
|
||||
@sold_refine - refine count
|
||||
@sold_attribute - if the item is broken (1) or not (0)
|
||||
@sold_identify - if the item is identified (1) or not (0)
|
||||
@sold_enchantgrade - enchantgrade
|
||||
@sold_card1 - card slot 1
|
||||
@sold_card2 - card slot 2
|
||||
@sold_card3 - card slot 3
|
||||
|
@ -197,6 +197,7 @@ CREATE TABLE IF NOT EXISTS `picklog` (
|
||||
`unique_id` bigint(20) unsigned NOT NULL default '0',
|
||||
`map` varchar(11) NOT NULL default '',
|
||||
`bound` tinyint(1) unsigned NOT NULL default '0',
|
||||
`enchantgrade` tinyint unsigned NOT NULL default '0',
|
||||
PRIMARY KEY (`id`),
|
||||
INDEX (`type`)
|
||||
) ENGINE=MyISAM AUTO_INCREMENT=1;
|
||||
|
3
sql-files/upgrades/upgrade_20210530_logs.sql
Normal file
3
sql-files/upgrades/upgrade_20210530_logs.sql
Normal file
@ -0,0 +1,3 @@
|
||||
ALTER TABLE `picklog`
|
||||
`enchantgrade` tinyint unsigned NOT NULL default '0'
|
||||
;
|
@ -51,7 +51,7 @@ 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', `enchantgrade`",
|
||||
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` ='%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, auction->item.enchantgrade);
|
||||
for( j = 0; j < MAX_SLOTS; j++ )
|
||||
StringBuf_Printf(&buf, ", `card%d` = '%u'", j, auction->item.card[j]);
|
||||
|
@ -159,7 +159,7 @@ void inter_storage_checkDB(void) {
|
||||
if (SQL_ERROR == Sql_Query(sql_handle, "SELECT `id`,`account_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`"
|
||||
"`expire_time`,`bound`,`unique_id`,`enchantgrade`"
|
||||
" FROM `%s` LIMIT 1;", storage_table.second->table)) {
|
||||
Sql_ShowDebug(sql_handle);
|
||||
}else{
|
||||
@ -334,7 +334,7 @@ bool mapif_parse_itembound_retrieve(int fd)
|
||||
StringBuf_Init(&buf);
|
||||
|
||||
// Get bound items from player's inventory
|
||||
StringBuf_AppendStr(&buf, "SELECT `id`, `nameid`, `amount`, `equip`, `identify`, `refine`, `attribute`, `expire_time`, `bound`");
|
||||
StringBuf_AppendStr(&buf, "SELECT `id`, `nameid`, `amount`, `equip`, `identify`, `refine`, `attribute`, `expire_time`, `bound`, `enchantgrade`");
|
||||
for( j = 0; j < MAX_SLOTS; ++j )
|
||||
StringBuf_Printf(&buf, ", `card%d`", j);
|
||||
for( j = 0; j < MAX_ITEM_RDM_OPT; ++j ) {
|
||||
@ -364,12 +364,13 @@ bool mapif_parse_itembound_retrieve(int fd)
|
||||
SqlStmt_BindColumn(stmt, 6, SQLDT_CHAR, &item.attribute, 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, 9, SQLDT_INT8, &item.enchantgrade,0, NULL, NULL);
|
||||
for( j = 0; j < MAX_SLOTS; ++j )
|
||||
SqlStmt_BindColumn(stmt, 9+j, SQLDT_UINT, &item.card[j], 0, NULL, NULL);
|
||||
SqlStmt_BindColumn(stmt,10+j, SQLDT_UINT, &item.card[j], 0, NULL, NULL);
|
||||
for( j = 0; j < MAX_ITEM_RDM_OPT; ++j ) {
|
||||
SqlStmt_BindColumn(stmt, 9+MAX_SLOTS+j*3, SQLDT_SHORT, &item.option[j].id, 0, NULL, NULL);
|
||||
SqlStmt_BindColumn(stmt, 10+MAX_SLOTS+j*3, SQLDT_SHORT, &item.option[j].value, 0, NULL, NULL);
|
||||
SqlStmt_BindColumn(stmt, 11+MAX_SLOTS+j*3, SQLDT_CHAR, &item.option[j].param, 0, NULL, NULL);
|
||||
SqlStmt_BindColumn(stmt, 11+MAX_SLOTS+j*3, SQLDT_SHORT, &item.option[j].id, 0, NULL, NULL);
|
||||
SqlStmt_BindColumn(stmt, 12+MAX_SLOTS+j*3, SQLDT_SHORT, &item.option[j].value, 0, NULL, NULL);
|
||||
SqlStmt_BindColumn(stmt, 13+MAX_SLOTS+j*3, SQLDT_CHAR, &item.option[j].param, 0, NULL, NULL);
|
||||
}
|
||||
memset(&items, 0, sizeof(items));
|
||||
while( SQL_SUCCESS == SqlStmt_NextRow(stmt) )
|
||||
|
@ -218,7 +218,7 @@ void log_pick(int id, int16 m, e_log_pick_type type, int amount, struct item* it
|
||||
StringBuf buf;
|
||||
StringBuf_Init(&buf);
|
||||
|
||||
StringBuf_Printf(&buf, "%s INTO `%s` (`time`, `char_id`, `type`, `nameid`, `amount`, `refine`, `map`, `unique_id`, `bound`", LOG_QUERY, log_config.log_pick);
|
||||
StringBuf_Printf(&buf, "%s INTO `%s` (`time`, `char_id`, `type`, `nameid`, `amount`, `refine`, `map`, `unique_id`, `bound`, `enchantgrade`", LOG_QUERY, log_config.log_pick);
|
||||
for (i = 0; i < MAX_SLOTS; ++i)
|
||||
StringBuf_Printf(&buf, ", `card%d`", i);
|
||||
for (i = 0; i < MAX_ITEM_RDM_OPT; ++i) {
|
||||
@ -226,8 +226,8 @@ void log_pick(int id, int16 m, e_log_pick_type type, int amount, struct item* it
|
||||
StringBuf_Printf(&buf, ", `option_val%d`", i);
|
||||
StringBuf_Printf(&buf, ", `option_parm%d`", i);
|
||||
}
|
||||
StringBuf_Printf(&buf, ") VALUES(NOW(),'%u','%c','%u','%d','%d','%s','%" PRIu64 "','%d'",
|
||||
id, log_picktype2char(type), itm->nameid, amount, itm->refine, map_getmapdata(m)->name[0] ? map_getmapdata(m)->name : "", itm->unique_id, itm->bound);
|
||||
StringBuf_Printf(&buf, ") VALUES(NOW(),'%u','%c','%u','%d','%d','%s','%" PRIu64 "','%d','%d'",
|
||||
id, log_picktype2char(type), itm->nameid, amount, itm->refine, map_getmapdata(m)->name[0] ? map_getmapdata(m)->name : "", itm->unique_id, itm->bound, itm->enchantgrade);
|
||||
|
||||
for (i = 0; i < MAX_SLOTS; i++)
|
||||
StringBuf_Printf(&buf, ",'%u'", itm->card[i]);
|
||||
@ -251,7 +251,7 @@ void log_pick(int id, int16 m, e_log_pick_type type, int amount, struct item* it
|
||||
return;
|
||||
time(&curtime);
|
||||
strftime(timestring, sizeof(timestring), log_timestamp_format, localtime(&curtime));
|
||||
fprintf(logfp,"%s - %d\t%c\t%u,%d,%d,%u,%u,%u,%u,%s,'%" PRIu64 "',%d\n", timestring, id, log_picktype2char(type), itm->nameid, amount, itm->refine, itm->card[0], itm->card[1], itm->card[2], itm->card[3], map_getmapdata(m)->name[0]?map_getmapdata(m)->name:"", itm->unique_id, itm->bound);
|
||||
fprintf(logfp,"%s - %d\t%c\t%u,%d,%d,%u,%u,%u,%u,%s,'%" PRIu64 "',%d,%d\n", timestring, id, log_picktype2char(type), itm->nameid, amount, itm->refine, itm->card[0], itm->card[1], itm->card[2], itm->card[3], map_getmapdata(m)->name[0]?map_getmapdata(m)->name:"", itm->unique_id, itm->bound, itm->enchantgrade);
|
||||
fclose(logfp);
|
||||
}
|
||||
}
|
||||
|
@ -2135,6 +2135,7 @@ static int npc_selllist_sub(struct map_session_data* sd, int n, unsigned short*
|
||||
int key_refine = 0;
|
||||
int key_attribute = 0;
|
||||
int key_identify = 0;
|
||||
int key_enchantgrade = 0;
|
||||
int key_card[MAX_SLOTS];
|
||||
int key_option_id[MAX_ITEM_RDM_OPT], key_option_val[MAX_ITEM_RDM_OPT], key_option_param[MAX_ITEM_RDM_OPT];
|
||||
|
||||
@ -2144,6 +2145,7 @@ static int npc_selllist_sub(struct map_session_data* sd, int n, unsigned short*
|
||||
script_cleararray_pc( sd, "@sold_refine" );
|
||||
script_cleararray_pc( sd, "@sold_attribute" );
|
||||
script_cleararray_pc( sd, "@sold_identify" );
|
||||
script_cleararray_pc( sd, "@sold_enchantgrade" );
|
||||
|
||||
for( j = 0; j < MAX_SLOTS; j++ )
|
||||
{// clear each of the card slot entries
|
||||
@ -2176,6 +2178,7 @@ static int npc_selllist_sub(struct map_session_data* sd, int n, unsigned short*
|
||||
script_setarray_pc( sd, "@sold_refine", i, sd->inventory.u.items_inventory[idx].refine, &key_refine );
|
||||
script_setarray_pc( sd, "@sold_attribute", i, sd->inventory.u.items_inventory[idx].attribute, &key_attribute );
|
||||
script_setarray_pc( sd, "@sold_identify", i, sd->inventory.u.items_inventory[idx].identify, &key_identify );
|
||||
script_setarray_pc( sd, "@sold_enchantgrade", i, sd->inventory.u.items_inventory[idx].enchantgrade, &key_enchantgrade );
|
||||
|
||||
for( j = 0; j < MAX_SLOTS; j++ )
|
||||
{// store each of the cards from the equipment in the array
|
||||
|
@ -13433,6 +13433,7 @@ BUILDIN_FUNC(successremovecards) {
|
||||
item_tmp.attribute = sd->inventory.u.items_inventory[i].attribute;
|
||||
item_tmp.expire_time = sd->inventory.u.items_inventory[i].expire_time;
|
||||
item_tmp.bound = sd->inventory.u.items_inventory[i].bound;
|
||||
item_tmp.enchantgrade = sd->inventory.u.items_inventory[i].enchantgrade;
|
||||
|
||||
for (int j = sd->inventory_data[i]->slots; j < MAX_SLOTS; j++)
|
||||
item_tmp.card[j]=sd->inventory.u.items_inventory[i].card[j];
|
||||
@ -13518,6 +13519,7 @@ BUILDIN_FUNC(failedremovecards) {
|
||||
item_tmp.attribute = sd->inventory.u.items_inventory[i].attribute;
|
||||
item_tmp.expire_time = sd->inventory.u.items_inventory[i].expire_time;
|
||||
item_tmp.bound = sd->inventory.u.items_inventory[i].bound;
|
||||
item_tmp.enchantgrade = sd->inventory.u.items_inventory[i].enchantgrade;
|
||||
|
||||
for (int j = sd->inventory_data[i]->slots; j < MAX_SLOTS; j++)
|
||||
item_tmp.card[j]=sd->inventory.u.items_inventory[i].card[j];
|
||||
@ -14244,6 +14246,7 @@ BUILDIN_FUNC(getinventorylist)
|
||||
}
|
||||
pc_setreg(sd,reference_uid(add_str("@inventorylist_expire"), j),sd->inventory.u.items_inventory[i].expire_time);
|
||||
pc_setreg(sd,reference_uid(add_str("@inventorylist_bound"), j),sd->inventory.u.items_inventory[i].bound);
|
||||
pc_setreg(sd,reference_uid(add_str("@inventorylist_enchantgrade"), j),sd->inventory.u.items_inventory[i].enchantgrade);
|
||||
for (k = 0; k < MAX_ITEM_RDM_OPT; k++)
|
||||
{
|
||||
sprintf(randopt_var, "@inventorylist_option_id%d",k+1);
|
||||
@ -25092,6 +25095,22 @@ BUILDIN_FUNC(refineui){
|
||||
#endif
|
||||
}
|
||||
|
||||
BUILDIN_FUNC(getenchantgrade){
|
||||
struct map_session_data *sd;
|
||||
|
||||
if( !script_rid2sd( sd ) ){
|
||||
return SCRIPT_CMD_FAILURE;
|
||||
}
|
||||
|
||||
if( current_equip_item_index == -1 ){
|
||||
return SCRIPT_CMD_FAILURE;
|
||||
}
|
||||
|
||||
script_pushint( st, sd->inventory.u.items_inventory[current_equip_item_index].enchantgrade );
|
||||
|
||||
return SCRIPT_CMD_SUCCESS;
|
||||
}
|
||||
|
||||
#include "../custom/script.inc"
|
||||
|
||||
// declarations that were supposed to be exported from npc_chat.cpp
|
||||
@ -25782,6 +25801,8 @@ struct script_function buildin_func[] = {
|
||||
BUILDIN_DEF2(rentalcountitem, "rentalcountitem2", "viiiiiii?"),
|
||||
BUILDIN_DEF2(rentalcountitem, "rentalcountitem3", "viiiiiiirrr?"),
|
||||
|
||||
BUILDIN_DEF(getenchantgrade, ""),
|
||||
|
||||
#include "../custom/script_def.inc"
|
||||
|
||||
{NULL,NULL,NULL},
|
||||
|
Loading…
x
Reference in New Issue
Block a user