diff --git a/src/map/cashshop.cpp b/src/map/cashshop.cpp index 603df274a1..ef36903984 100644 --- a/src/map/cashshop.cpp +++ b/src/map/cashshop.cpp @@ -38,7 +38,7 @@ static bool cashshop_parse_dbrow(char* fields[], int columns, int current) { int j; struct cash_item_data* cid; - if( !itemdb_exists( nameid ) ){ + if( !item_db.exists( nameid ) ){ ShowWarning( "cashshop_parse_dbrow: Invalid ID %u in line '%d', skipping...\n", nameid, current ); return 0; } @@ -156,7 +156,7 @@ static bool sale_parse_dbrow( char* fields[], int columns, int current ){ time_t now = time(NULL); struct sale_item_data* sale_item = NULL; - if( !itemdb_exists(nameid) ){ + if( !item_db.exists(nameid) ){ ShowWarning( "sale_parse_dbrow: Invalid ID %u in line '%d', skipping...\n", nameid, current ); return false; } diff --git a/src/map/itemdb.cpp b/src/map/itemdb.cpp index 8773b3f9a3..0c18e8aca7 100644 --- a/src/map/itemdb.cpp +++ b/src/map/itemdb.cpp @@ -3562,7 +3562,7 @@ bool itemdb_parse_roulette_db(void) Sql_GetData(mmysql_handle, 3, &data, NULL); amount = atoi(data); Sql_GetData(mmysql_handle, 4, &data, NULL); flag = atoi(data); - if (!itemdb_exists(item_id)) { + if (!item_db.exists(item_id)) { ShowWarning("itemdb_parse_roulette_db: Unknown item ID '%u' in level '%d'\n", item_id, level); continue; } diff --git a/src/map/itemdb.hpp b/src/map/itemdb.hpp index b385367e12..7d670863dc 100644 --- a/src/map/itemdb.hpp +++ b/src/map/itemdb.hpp @@ -1551,7 +1551,10 @@ extern ItemPackageDatabase item_package_db; uint16 itemdb_searchname_array(std::map> &data, uint16 size, const char *str); struct item_data* itemdb_search(t_itemid nameid); + +[[deprecated("Please upgrade your code to item_db.exists() or item_db.find()! This function will be dropped soon!")]] std::shared_ptr itemdb_exists(t_itemid nameid); + #define itemdb_name(n) itemdb_search(n)->name.c_str() #define itemdb_ename(n) itemdb_search(n)->ename.c_str() #define itemdb_type(n) itemdb_search(n)->type diff --git a/src/map/npc.cpp b/src/map/npc.cpp index bddd9eb9d2..f6b10f2924 100644 --- a/src/map/npc.cpp +++ b/src/map/npc.cpp @@ -3938,7 +3938,7 @@ static const char* npc_parse_shop(char* w1, char* w2, char* w3, char* w4, const ShowError("npc_parse_shop: Invalid item cost definition in file '%s', line '%d'. Ignoring the rest of the line...\n * w1=%s\n * w2=%s\n * w3=%s\n * w4=%s\n", filepath, strline(buffer,start-buffer), w1, w2, w3, w4); return strchr(start,'\n'); // skip and continue } - if (itemdb_exists(nameid) == NULL) { + if (!item_db.exists(nameid)) { ShowWarning("npc_parse_shop: Invalid item ID cost in file '%s', line '%d' (id '%u').\n", filepath, strline(buffer,start-buffer), nameid); return strchr(start,'\n'); // skip and continue } @@ -4700,7 +4700,7 @@ static int npc_market_checkall_sub(DBKey key, DBData *data, va_list ap) { struct npc_item_list *list = &market->list[i]; uint16 j; - if (!list->nameid || !itemdb_exists(list->nameid)) { + if (!item_db.exists(list->nameid)) { ShowError("npc_market_checkall_sub: NPC '%s' sells invalid item '%u', deleting...\n", nd->exname, list->nameid); npc_market_delfromsql(nd->exname, list->nameid); continue; @@ -5277,7 +5277,7 @@ static const char* npc_parse_mapflag(char* w1, char* w2, char* w3, char* w4, con if (!strcmpi(drop_arg1, "random")) args.nightmaredrop.drop_id = -1; - else if (itemdb_exists((args.nightmaredrop.drop_id = strtol(drop_arg1, nullptr, 10))) == NULL) { + else if (!item_db.exists((args.nightmaredrop.drop_id = strtol(drop_arg1, nullptr, 10)))) { args.nightmaredrop.drop_id = 0; ShowWarning("npc_parse_mapflag: Invalid item ID '%d' supplied for mapflag 'pvp_nightmaredrop' (file '%s', line '%d'), removing.\n * w1=%s\n * w2=%s\n * w3=%s\n * w4=%s\n", args.nightmaredrop.drop_id, filepath, strline(buffer, start - buffer), w1, w2, w3, w4); break; diff --git a/src/map/pc.cpp b/src/map/pc.cpp index dae7180925..67fb7346a0 100755 --- a/src/map/pc.cpp +++ b/src/map/pc.cpp @@ -203,7 +203,7 @@ uint64 AttendanceDatabase::parseBodyNode(const ryml::NodeRef& node){ continue; } - if( item_id == 0 || !itemdb_exists( item_id ) ){ + if( !item_db.exists( item_id ) ){ ShowError( "pc_attendance_load: Unknown item ID %u for day %d.\n", item_id, day + 1 ); continue; } @@ -1343,7 +1343,7 @@ void pc_setequipindex(struct map_session_data *sd) //{ // int i; // struct item *item = &sd->inventory.u.items_inventory[eqindex]; -// struct item_data *data; +// std::shared_ptr data; // // //Crafted/made/hatched items. // if (itemdb_isspecial(item->card[0])) @@ -1353,7 +1353,7 @@ void pc_setequipindex(struct map_session_data *sd) // if( item->card[MAX_SLOTS - 1] && s < MAX_SLOTS - 1 ) // s = MAX_SLOTS - 1; // -// ARR_FIND( 0, s, i, item->card[i] && (data = itemdb_exists(item->card[i])) != NULL && data->flag.no_equip&flag ); +// ARR_FIND( 0, s, i, item->card[i] && (data = item_db.find(item->card[i])) != NULL && data->flag.no_equip&flag ); // return( i < s ) ? 0 : 1; //} @@ -2920,7 +2920,7 @@ static void pc_bonus_item_drop(std::vector &drop, t_itemid nameid, u ShowWarning("pc_bonus_item_drop: No Item ID nor Item Group ID specified.\n"); return; } - if (nameid && !itemdb_exists(nameid)) { + if (!item_db.exists(nameid)) { ShowWarning("pc_bonus_item_drop: Invalid item id %u\n",nameid); return; } @@ -6289,7 +6289,7 @@ bool pc_steal_item(struct map_session_data *sd,struct block_list *bl, uint16 ski // Try dropping one item, in the order from first to last possible slot. // Droprate is affected by the skill success rate. for( i = 0; i < MAX_MOB_DROP; i++ ) - if( md->db->dropitem[i].nameid > 0 && !md->db->dropitem[i].steal_protected && itemdb_exists(md->db->dropitem[i].nameid) && rnd() % 10000 < md->db->dropitem[i].rate + if( item_db.exists(md->db->dropitem[i].nameid) && !md->db->dropitem[i].steal_protected && rnd() % 10000 < md->db->dropitem[i].rate #ifndef RENEWAL * rate/100. #endif diff --git a/src/map/quest.cpp b/src/map/quest.cpp index 8040677bdd..e7d3a45992 100644 --- a/src/map/quest.cpp +++ b/src/map/quest.cpp @@ -777,7 +777,7 @@ void quest_update_objective(struct map_session_data *sd, struct mob_data* md) continue; if (it->rate < 10000 && rnd()%10000 >= it->rate) continue; // TODO: Should this be affected by server rates? - if (!itemdb_exists(it->nameid)) + if (!item_db.exists(it->nameid)) continue; struct item entry = {}; @@ -795,7 +795,7 @@ void quest_update_objective(struct map_session_data *sd, struct mob_data* md) if ((result = pc_additem(sd, &entry, 1, LOG_TYPE_QUEST)) != ADDITEM_SUCCESS) // Failed to obtain the item clif_additem(sd, 0, 0, result); -// else if (it.isAnnounced || itemdb_exists(it.nameid)->flag.broadcast) +// else if (it.isAnnounced || item_db.find(it.nameid)->flag.broadcast) // intif_broadcast_obtain_special_item(sd, it.nameid, it.mob_id, ITEMOBTAIN_TYPE_MONSTER_ITEM); } } diff --git a/src/map/script.cpp b/src/map/script.cpp index 6af0ee0d5e..f3d15bc0ec 100644 --- a/src/map/script.cpp +++ b/src/map/script.cpp @@ -7520,7 +7520,7 @@ BUILDIN_FUNC(checkweight2) if(fail) continue; //cpntonie to depop rest - if(itemdb_exists(nameid) == NULL ) { + if (!item_db.exists(nameid)) { ShowError("buildin_checkweight2: Invalid item '%u'.\n", nameid); fail=1; continue; @@ -7848,7 +7848,7 @@ BUILDIN_FUNC(rentitem) { else { nameid = script_getnum(st, 2); - if( nameid == 0 || !itemdb_exists(nameid) ) + if( !item_db.exists(nameid) ) { ShowError("buildin_rentitem: Nonexistant item %u requested.\n", nameid); return SCRIPT_CMD_FAILURE; @@ -8014,7 +8014,7 @@ BUILDIN_FUNC(getnameditem) }else nameid = script_getnum(st, 2); - if(!itemdb_exists(nameid)/* || itemdb_isstackable(nameid)*/) + if(!item_db.exists(nameid)/* || itemdb_isstackable(nameid)*/) { //Even though named stackable items "could" be risky, they are required for certain quests. script_pushint(st,0); return SCRIPT_CMD_SUCCESS; @@ -8098,7 +8098,7 @@ BUILDIN_FUNC(makeitem) { nameid = (t_itemid)val; } - if( !itemdb_exists( nameid ) ){ + if( !item_db.exists( nameid ) ){ ShowError( "buildin_makeitem: Unknown item id %u\n", nameid ); return SCRIPT_CMD_FAILURE; } @@ -8158,7 +8158,7 @@ BUILDIN_FUNC(makeitem2) { }else{ nameid = (t_itemid)script_getnum( st, 2 ); - if( !itemdb_exists( nameid ) ){ + if( !item_db.exists( nameid ) ){ ShowError( "buildin_%s: Unknown item id %u\n", funcname, nameid ); return SCRIPT_CMD_FAILURE; } @@ -8533,7 +8533,7 @@ BUILDIN_FUNC(delitem) else { it.nameid = script_getnum(st, 2);// - if( !itemdb_exists( it.nameid ) ) + if( !item_db.exists( it.nameid ) ) { ShowError("buildin_%s: unknown item \"%u\".\n", command, it.nameid); st->state = END; @@ -8628,7 +8628,7 @@ BUILDIN_FUNC(delitem2) else { it.nameid = script_getnum(st, 2);// - if( !itemdb_exists( it.nameid ) ) + if( !item_db.exists( it.nameid ) ) { ShowError("buildin_%s: unknown item \"%u\".\n", command, it.nameid); st->state = END; @@ -11143,7 +11143,7 @@ BUILDIN_FUNC(getmobdrops) { if( mob->dropitem[i].nameid == 0 ) continue; - if( itemdb_exists(mob->dropitem[i].nameid) == NULL ) + if( !item_db.exists(mob->dropitem[i].nameid) ) continue; mapreg_setreg(reference_uid(add_str("$@MobDrop_item"), j), mob->dropitem[i].nameid); @@ -12122,7 +12122,7 @@ BUILDIN_FUNC(getareadropitem) }else{ nameid = script_getnum(st, 7); - if( !itemdb_exists( nameid ) ){ + if( !item_db.exists( nameid ) ){ ShowError( "buildin_getareadropitem: Unknown item id %u\n", nameid ); return SCRIPT_CMD_FAILURE; } @@ -17854,7 +17854,7 @@ BUILDIN_FUNC(npcshopitem) for (n = 0, i = 3; n < amount; n++, i+=offs) { t_itemid nameid = script_getnum( st, i ); - if( itemdb_exists( nameid ) == nullptr ){ + if( !item_db.exists( nameid ) ){ ShowError( "builtin_npcshopitem: Item ID %u does not exist.\n", nameid ); script_pushint( st, 0 ); return SCRIPT_CMD_FAILURE; @@ -17899,7 +17899,7 @@ BUILDIN_FUNC(npcshopadditem) t_itemid nameid = script_getnum(st,i); uint16 j; - if( itemdb_exists( nameid ) == nullptr ){ + if( !item_db.exists( nameid ) ){ ShowError( "builtin_npcshopadditem: Item ID %u does not exist.\n", nameid ); script_pushint( st, 0 ); return SCRIPT_CMD_FAILURE; @@ -17939,7 +17939,7 @@ BUILDIN_FUNC(npcshopadditem) { t_itemid nameid = script_getnum( st, i ); - if( itemdb_exists( nameid ) == nullptr ){ + if( !item_db.exists( nameid ) ){ ShowError( "builtin_npcshopadditem: Item ID %u does not exist.\n", nameid ); script_pushint( st, 0 ); return SCRIPT_CMD_FAILURE; @@ -23597,7 +23597,7 @@ BUILDIN_FUNC(mergeitem2) { nameid = id->nameid; } else {// nameid = script_getnum(st, 2); - if (!itemdb_exists(nameid)) { + if (!item_db.exists(nameid)) { ShowError("buildin_mergeitem: Nonexistant item %u requested.\n", nameid); script_pushint(st, count); return SCRIPT_CMD_FAILURE; @@ -25581,7 +25581,7 @@ BUILDIN_FUNC(mail){ msg.item[i].nameid = (t_itemid)get_val2_num( st, reference_uid( id, start ), reference_getref( data ) ); msg.item[i].identify = 1; - if( !itemdb_exists(msg.item[i].nameid) ){ + if( !item_db.exists(msg.item[i].nameid) ){ ShowError( "buildin_mail: invalid item id %u.\n", msg.item[i].nameid ); return SCRIPT_CMD_FAILURE; } @@ -25683,7 +25683,7 @@ BUILDIN_FUNC(mail){ for( k = 0; k < num_items && start < end; k++, start++ ){ msg.item[k].card[i] = (t_itemid)get_val2_num( st, reference_uid( id, start ), reference_getref( data ) ); - if( msg.item[k].card[i] != 0 && !itemdb_exists(msg.item[k].card[i]) ){ + if( !item_db.exists(msg.item[k].card[i]) ){ ShowError( "buildin_mail: invalid card id %u.\n", msg.item[k].card[i] ); return SCRIPT_CMD_FAILURE; } diff --git a/src/map/searchstore.cpp b/src/map/searchstore.cpp index 067b6d7af2..18586ec202 100644 --- a/src/map/searchstore.cpp +++ b/src/map/searchstore.cpp @@ -172,14 +172,14 @@ void searchstore_query(struct map_session_data* sd, unsigned char type, unsigned // validate lists for( i = 0; i < item_count; i++ ) { - if( !itemdb_exists(itemlist[i].itemId) ) { + if( !item_db.exists(itemlist[i].itemId) ) { ShowWarning("searchstore_query: Client resolved item %u is not known.\n", itemlist[i].itemId); clif_search_store_info_failed(sd, SSI_FAILED_NOTHING_SEARCH_ITEM); return; } } for( i = 0; i < card_count; i++ ) { - if( !itemdb_exists(cardlist[i].itemId) ) { + if( !item_db.exists(cardlist[i].itemId) ) { ShowWarning("searchstore_query: Client resolved card %u is not known.\n", cardlist[i].itemId); clif_search_store_info_failed(sd, SSI_FAILED_NOTHING_SEARCH_ITEM); return; diff --git a/src/map/skill.cpp b/src/map/skill.cpp index 1684efdeee..5efa89a084 100755 --- a/src/map/skill.cpp +++ b/src/map/skill.cpp @@ -21145,13 +21145,13 @@ void skill_unit_move_unit_group(std::shared_ptr group, int16 */ short skill_can_produce_mix(struct map_session_data *sd, t_itemid nameid, int trigger, int qty) { - short i, j; - nullpo_ret(sd); - if (!nameid || !itemdb_exists(nameid)) + if (!item_db.exists(nameid)) return 0; + short i, j; + for (i = 0; i < MAX_SKILL_PRODUCE_DB; i++) { if (skill_produce_db[i].nameid == nameid) { if ((j = skill_produce_db[i].req_skill) > 0 && @@ -21279,9 +21279,9 @@ bool skill_produce_mix(struct map_session_data *sd, uint16 skill_id, t_itemid na for (i = 0; i < MAX_PRODUCE_RESOURCE; i++) { short x, j; - t_itemid id; + t_itemid id = skill_produce_db[idx].mat_id[i]; - if (!(id = skill_produce_db[idx].mat_id[i]) || !itemdb_exists(id)) + if (!item_db.exists(id)) continue; num++; x = (skill_id == RK_RUNEMASTERY ? 1 : qty) * skill_produce_db[idx].mat_amount[i]; @@ -24242,7 +24242,7 @@ uint64 ReadingSpellbookDatabase::parseBodyNode(const ryml::NodeRef& node) { * @return Spell data or nullptr otherwise */ std::shared_ptr ReadingSpellbookDatabase::findBook(t_itemid nameid) { - if (nameid == 0 || !itemdb_exists(nameid) || reading_spellbook_db.empty()) + if (!item_db.exists(nameid) || reading_spellbook_db.empty()) return nullptr; for (const auto &spell : reading_spellbook_db) { @@ -24331,7 +24331,7 @@ static bool skill_parse_row_producedb(char* split[], int columns, int current) return true; } - if (!itemdb_exists(nameid)) { + if (!item_db.exists(nameid)) { ShowError("skill_parse_row_producedb: Invalid item %u.\n", nameid); return false; } diff --git a/src/map/status.cpp b/src/map/status.cpp index 7a7e7db6b8..fe7d0f9510 100644 --- a/src/map/status.cpp +++ b/src/map/status.cpp @@ -13466,7 +13466,7 @@ int status_change_end(struct block_list* bl, enum sc_type type, int tid) std::shared_ptr skill = skill_db.find(RL_H_MINE); - if (!itemdb_exists(skill->require.itemid[0])) + if (!item_db.exists(skill->require.itemid[0])) break; memset(&it, 0, sizeof(it)); it.nameid = skill->require.itemid[0];