diff --git a/src/map/script.cpp b/src/map/script.cpp index cdcb44d16f..323310eb1e 100644 --- a/src/map/script.cpp +++ b/src/map/script.cpp @@ -18412,58 +18412,48 @@ BUILDIN_FUNC(checkidlemer) BUILDIN_FUNC(searchitem) { - struct script_data* data = script_getdata(st, 2); - const char *itemname = script_getstr(st,3); - std::map> items; - int count; - - char* name; - int32 start; - int32 id; - int32 i; - TBL_PC* sd = NULL; - - if ((items[0] = item_db.find(strtoul(itemname, nullptr, 10)))) - count = 1; - else - count = itemdb_searchname_array(items, MAX_SEARCH, itemname); - - if (!count) { - script_pushint(st, 0); - return SCRIPT_CMD_SUCCESS; - } + script_data* data = script_getdata(st, 2); + const char *name = reference_getname(data); if( !data_isreference(data) ) { - ShowError("script:searchitem: not a variable\n"); + ShowError("buildin_searchitem: Argument %s is not a variable.\n", name); script_reportdata(data); st->state = END; return SCRIPT_CMD_FAILURE;// not a variable } - id = reference_getid(data); - start = reference_getindex(data); - name = reference_getname(data); - - if( not_server_variable(*name) && !script_rid2sd(sd) ) - { - return SCRIPT_CMD_SUCCESS;// no player attached - } - if( is_string_variable(name) ) {// string array - ShowError("script:searchitem: not an integer array reference\n"); + ShowError("buildin_searchitem: Argument %s is not an integer array.\n", name); script_reportdata(data); st->state = END; return SCRIPT_CMD_FAILURE;// not supported } - for( i = 0; i < count; ++start, ++i ) - {// Set array - set_reg_num( st, sd, reference_uid( id, start ), name, items[i]->nameid, reference_getref( data ) ); + map_session_data *sd = nullptr; + + if (not_server_variable(*name) && !script_rid2sd(sd)) + { + return SCRIPT_CMD_SUCCESS;// no player attached } - script_pushint(st, count); + const char *itemname = script_getstr(st, 3); + std::map> items; + + itemdb_searchname_array(items, MAX_SEARCH, itemname); + + if (!items.empty()) { + int32 id = reference_getid(data); + int32 start = reference_getindex(data); + + for (const auto &it : items) { // Set array + set_reg_num(st, sd, reference_uid(id, start), name, it.first, reference_getref(data)); + start++; + } + } + + script_pushint64(st, items.size()); return SCRIPT_CMD_SUCCESS; }