Nazgool 250 Опубликовано 17 Марта 2015 (изменено) for i=1,65534 do А чего так не красиво? Сейф, насколько я понимаю, уникальный. Значит и имя у него тоже будет уникально. Если он был создан в олл спавне, то найти по имени function add_spot_to_item_parent() local obj = alife():object('какое_там_имя_у_него') if obj then parent = obj.parent_id ... и т.д. endend Ну а если был заспавнен скриптом, то сохранить где-то имя объекта. Если нет какого-либо хранилища, то взять тот же pstor хотя бы. local obj = alife():create('inventory_sakbox_03', ...)xr_logic.pstor_store(db.actor, "inventory_sakbox_03_name", obj:name()) Ну и получить соответственно function add_spot_to_item_parent() local obj = alife():object(xr_logic.pstor_retrieve(db.actor, "inventory_sakbox_03_name", 'unknown')) if obj then ... и т.д. endend Даже не знаю во сколько десятков (а если "не повезет" с ID, то и сотен) раз это быстрее. В принципе меня это не должно касаться. При хорошем железе такой цикл к фризам не приведет. Это я так. В качестве рассуждения. ) Изменено 27 Марта 2015 пользователем BFG 1 Поделиться этим сообщением Ссылка на сообщение
Nazgool 250 Опубликовано 18 Марта 2015 (изменено) Да что вы с этим сейфом мучаетесь? Да не мучаемся мы. Это совсем не трудно. А очень даже полезно ) Т.е., то, что один человек закодил, другой завсегда оптимизировать сможет Может быть когда-то человек сделал "чтобы работало" и на что знаний хватало. Но время то идет. Слава Богу что-то узнаем новое - в общем не утратили способности развиваться. Вот и мне, к примеру, сразу бросилась в глаза "грандиозность" идеи перебора всех и вся. Хотелось бы уточнить - имеют ли значения одинарные/двойные кавычки? Не имеют. В Lua следующие записи эквивалентны : "red_location" 'red_location' [[red_location]] Чувствую где-то натупил... Есть малость ). Вот тут alife():object(xr_logic.pstor_retrieve(db.actor, "Здесь_пишем_что_ищем_из_allspawn", "Здесь_пишем_желаемое_описание_при_наведении_на_тайник?")) Вместо "Здесь_пишем_что_ищем_из_allspawn" должно быть "Здесь_пишем_имя_той_переменной_которую_сохраняли_в_pstor_store" Вместо "Здесь_пишем_желаемое_описание_при_наведении_на_тайник?" должна быть некая строка. Поясню. Если в xr_logic.pstor_retrieve не будет найдена сохраненная переменная то возвратиться nil, что приведет к вылету (alife():object(nil)), поэтому нужно задать некую строку, которая возвратиться, если переменной нет. Напр. 'unknown'. Тогда объект alife():object('unknown') просто не будет найден. И без вылета. Изменено 18 Марта 2015 пользователем Nazgool 1 2 1 Поделиться этим сообщением Ссылка на сообщение
Nazgool 250 Опубликовано 18 Марта 2015 (изменено) Кстати, а как может не повезти с id ? Если id будет равен (скажем) 100, то цикл for i=1,65534 do закончиться относительно быстро (по break-у). А если id будет за 65000? То будет крутить в 650 раз дольше. А это очень долго. В любом случае способ перебора не есть гуд. Даже с id до сотни скорость поиска объекта в цикле существенно проигрывает способу поиска по имени. Изменено 18 Марта 2015 пользователем Nazgool Поделиться этим сообщением Ссылка на сообщение
Nazgool 250 Опубликовано 18 Марта 2015 (изменено) @alexyats Если предмет в all_spawn-е, то имя брать тут : ... [201] ; cse_abstract properties section_name = flesh_weak name = esc_flesh_normal -- вот в этой строке ...Т.е. пишем : function add_spot_to_item_parent() local obj = alife():object('esc_flesh_normal') -- не перепутать. получаем по 'name' ...А если спавним скриптом, то имя будет сгенерировано автоматически.Его нужно сначала получить : local obj = alife():create('flesh_weak', ...) -- не перепутать. спавним по 'section_name' local obj_name = obj:name() -- получаем имя 'name'Если посмотреть на 'obj_name', то имя будет иметь вид 'flesh_weakDDDD', где 'DDDD' это числа, являющиеся сгенерированным игрой идентификатором.В этом случае нам его знать и не нужно. Мы сохраним этот неизвестный id под вполне понятным произвольным именем. Например "flesh_weak_name": xr_logic.pstor_store(db.actor, "flesh_weak_name", obj_name) -- obj_name мы получили вышеИ когда необходимо получаем его по этому ("flesh_weak_name") понятному имени: local name = xr_logic.pstor_retrieve(db.actor, "flesh_weak_name", 'unknown') И что это за хранилище такое?Это стандартное хранилище произвольных данных в объектах игры.Данные пишутся в нет-пакет объекта, который имеет ограниченный размер в 8192 байта. Поэтому необходимо следить за размером сохраняемых данных. В данном случае пишем в пакет actor-а. Но это уже совсем другая история. И что будет, если предмет не уникален - поиск идет до первого совпадения?Совершенно верно. Именно поэтому в моем первом посте первым предложением было сказано : Сейф, насколько я понимаю, уникальный. Значит и имя у него тоже будет уникально. ... Полезно. Не часто такие люди к нам заходят. Eugen81. Изменено 22 Апреля 2015 пользователем Eugen81 Поправил форматирование чуть-чуть. 1 1 2 Поделиться этим сообщением Ссылка на сообщение
Nazgool 250 Опубликовано 18 Марта 2015 (изменено) @Eugen81, Такой только перебором for i=1,65534 do. Уникальные предметы, я считаю, на то и уникальные, что должны где-то и когда-то понадобиться. Их нужно "запоминать". В олл-спавне обычно запоминают по story_id, ну или искать по имени. А как запоминать при скриптовом спавне я уже показал. Изменено 18 Марта 2015 пользователем Nazgool Поделиться этим сообщением Ссылка на сообщение