|
@@ -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<t_itemid, std::shared_ptr<item_data>> 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<t_itemid, std::shared_ptr<item_data>> 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;
|
|
|
}
|
|
|
|