Shredder 49 Опубликовано 17 Марта 2013 (изменено) Кэширование пытался сделать через level.prefetch_sound, потом попробовал через db.actor:add_sound(), но там во втором случае вообще ничего не происходило, т.к. даже по вермени проходило всег 0,3 сек. против 9 сек через level.prefetch_sound. Больше не копал. Изменено 17 Марта 2013 пользователем Shredder Поделиться этим сообщением Ссылка на сообщение
Shredder 49 Опубликовано 23 Марта 2013 Покажи функцию, которой спавнишь телепорт. Споллер работает Поделиться этим сообщением Ссылка на сообщение
Shredder 49 Опубликовано 31 Марта 2013 Первой конечно. Вторая используется по-другому: alife():level_name(level_id), где level_id можно получить несколькими способами, один из них:game_graph():vertex(obj:game_vertex_id()):level_id() Поделиться этим сообщением Ссылка на сообщение
Shredder 49 Опубликовано 4 Апреля 2013 (изменено) Странно как-то. Должно работать. Попробуй так: if obj.alive and obj:alive() then cnt = cnt + 1 Возможно obj не имеет метода alive, т.е. это какой-то объект, который живым быть не может, автомат например. Хотя тогда бы и лог другой был. Ещё функцию oldstory.get_npc_character показал бы. Изменено 4 Апреля 2013 пользователем Shredder Поделиться этим сообщением Ссылка на сообщение
Shredder 49 Опубликовано 15 Апреля 2013 Поделитесь, пожалуйста, ссылкой на универсальное хранилище. Или подскажите, как его регестрировать в class_registrator.script. P.S. поиском нашёл только мёртвые ссылки. Поделиться этим сообщением Ссылка на сообщение
Shredder 49 Опубликовано 21 Апреля 2013 На сколько я понял, ты ничего не понял. self.name = utils.cfg_get_string(ini, section, "name", nil, true, "") self.description = utils.cfg_get_string(ini, section, "description", nil, true, "") Вылет происходит из-за того, что ты передаёшь в функцию cfg_get_string первые два аргумента, которые не определены, другими словами их значения nil, о чём, собственно, в логе и сказано. Поэтому, если со скриптами не дружишь, то методом тыка можно долго добиваться результата. Поделиться этим сообщением Ссылка на сообщение
Shredder 49 Опубликовано 23 Апреля 2013 Тебе нужно добавить схему поведения. Или, возможно, допилить схему xr_wounded, чтобы она заработала так, как тебе нужно. Примеров таких схем в самой игре предостаточно, но если ты со скриптами несколько дней, то сложновато будет. Поделиться этим сообщением Ссылка на сообщение
Shredder 49 Опубликовано 9 Мая 2013 Вот и ищи в секции контроллера, все что найдешь - твое, все остальное в движке. Поделиться этим сообщением Ссылка на сообщение
Shredder 49 Опубликовано 19 Мая 2013 На сколько я знаю, только методом перебора: ---- -- Получение ближайшего гейм-вертекса по левел-вертексу function anomalies_manager:get_game_vertex(lv) local lname = level.name() local new_gv = 0 local min_dist = 100000 local pos = level.vertex_position(lv) for a = self.game_vertex_min, self.game_vertex_max do g1 = game_graph():vertex(a):game_point() if g1:distance_to(pos)<min_dist then min_dist = g1:distance_to(pos) new_gv = a end end return new_gv end self.game_vertex_min, self.game_vertex_max соответственно минимальный и максимальный гейм вертексы для текущего уровня. Поделиться этим сообщением Ссылка на сообщение
Shredder 49 Опубликовано 21 Мая 2013 self:AddCallback("Button_"..id,ui_events.WINDOW_LBUTTON_DB_CLICK, loadstring("имя_скрипта.on_db_click('" .. id .. "')")) function on_db_click(id) get_console():execute("load ~~~нажата " .. id) end Поделиться этим сообщением Ссылка на сообщение
Shredder 49 Опубликовано 21 Мая 2013 Да? А ты пробовал? Ничего, что при нажатии на любую кнопку id в функции OnBtnClick(id) будет всегда равен последнему. Т.к. в каждой функции ты оставил ссылку на одну и ту же переменную, значение которой в конце цикла будет равно последнему числу. Поэтому, ещё неизвестно, кого куда занесло... Поделиться этим сообщением Ссылка на сообщение
Shredder 49 Опубликовано 21 Мая 2013 прежде чем кидаться репликами, самому проверить на практике...Проверено и не раз, не работает. Я прекрасно знаю, что такое замыкание. В твоём примере на каждую кнопку навешан свой обработчик: function() self:OnBtnClick(id) end. В момент вызова будет фактически выполнен код self:OnBtnClick(id), но к тому моменту переменная id будет содержать последнее значение цикла. Замыкается переменная, а не её значение. Поделиться этим сообщением Ссылка на сообщение
Shredder 49 Опубликовано 22 Мая 2013 Признаю, был не прав. Всё от того, что в своё время намучился с подобной ситуацией в javascript, где замыкание работает как раз так, как я описал выше. В lua всё ок. Приношу извинения за дезинформацию. Поделиться этим сообщением Ссылка на сообщение
Shredder 49 Опубликовано 7 Августа 2013 Добавлю, что помимо actor_menu.script срабатывает функция actor_menu_mode из pda.script, но только для случаев: -- 10 = Talk dialog show -- 11 = Talk dialog hide В actor_menu.script они не срабатывают. На открытие pda выдаётся какой-то инфопоршень, на закрытие кажется тоже. Какие именно легко проверить, просто пишу, что они есть. Используя xray-extensions получить текущее активное окно можно так: dialog_wnd = CUIListBox():GetMainInputReceiver() За что товарищу malandrinus огромное спасибо! 1 Поделиться этим сообщением Ссылка на сообщение
Shredder 49 Опубликовано 27 Августа 2013 Я бы тебе посоветовал использовать разные названия для переменных и для скриптов (get_visual) 2 Поделиться этим сообщением Ссылка на сообщение
Shredder 49 Опубликовано 22 Сентября 2013 m_netpk юзать не пробовал? Поделиться этим сообщением Ссылка на сообщение
Shredder 49 Опубликовано 23 Сентября 2013 Я универсальные таймеры пока не использовал, но вот вопрос, почему не передавать сразу функцию: start_multi_timer(1, my_file.t1, nil, true) Поделиться этим сообщением Ссылка на сообщение
Shredder 49 Опубликовано 28 Сентября 2013 (изменено) Я могу ошибаться, но возможно в цикле who:object(section) возвращает один и тот же предмет. Т.е. только на следующем апдейте после who:transfer_item метод who:object(section) вернёт другой предмет. Т.е. по сути, в цикле будет попытка передать один и от же предмет count раз, из-за этого и запись в лог. Это предположение. Да, это действительно так. Для правильного функционирования нужно итерировать инвентарь на предмет одинаковых предметов и их передавать. Доберусь до домашнего ПК, посмотрю осталось ли доделанная функция... ну или доделаю. ColR_iT Изменено 28 Сентября 2013 пользователем ColR_iT Поделиться этим сообщением Ссылка на сообщение
Shredder 49 Опубликовано 22 Августа 2015 Конечно можно, берёшь исходники и вперёд. Иначе никак 1 Поделиться этим сообщением Ссылка на сообщение
Shredder 49 Опубликовано 22 Августа 2015 (изменено) -- Вызывает вункцию func спустя n апдейтов function wait_call(func, n) local counter = n or 1 level.add_call( function() if counter == 0 then return true end counter = counter - 1 return false end, func ) end Изменено 22 Августа 2015 пользователем Shredder 1 Поделиться этим сообщением Ссылка на сообщение