Painter 3 399 Опубликовано 2 Августа 2013 Поделиться Опубликовано 2 Августа 2013 (изменено) @StafGlawer, если платформа ЗП, навскидку можно реализовать следующим образом: if not db.actor:object("device_pda") then get_hud():HidePdaMenu() end end Не идеально, конечно, зато дёшево и сердито... Изменено 26 Ноября 2019 пользователем Jurok Портфолио Ссылка на комментарий
Saruman 8 Опубликовано 2 Августа 2013 Поделиться Опубликовано 2 Августа 2013 StafGlawer, а unbind и bind ты из головы взял? в оригинале их нет S.T.A.L.K.E.R 1.004, Народная..Солянка от 19.04.10, дополнение 14.08.10, патч 3.09.10, DMX 1.3.5, Saruman addon 1.1 Vkontakte Добавление нового транспорта в сталкер Ссылка на комментарий
Desertir 202 Опубликовано 2 Августа 2013 Поделиться Опубликовано 2 Августа 2013 (изменено) @Saruman, да неужели? Все управление через биндинги в user.ltx прописано. @StafGlawer, что то мне подсказывает, что анбиндинг работает не по значению, а по клавише, типа такого "unbind kP", но таким методом не заблокировать весь пда, контакты и карта все равно останутся (мб еще чтото, залезь в настройки управления). Можно попробовать разбиндивать и их, только нужно получать правильные клавиши, например у меня открытие активных задач далеко не на клавишу P. А как получать, не подскажу, могу только запутать Вариант @Jurok'а из самых распространенных, в Солянке есть такая шняга с рюкзаком, якобы молния застряла (если ноги растут у этой идеи не из Солянки, уж извините, увидел именно в ней). Там проверяются инфопрошни, я уверен на 90% и как только получили инфопоршень открытия какого либо окна из ПДА его можно закрыть. Как - описано в справочнике по скриптам. Изменено 2 Августа 2013 пользователем Desertir 1 ТЧ 1.0004. SAP и Trans mod github Ссылка на комментарий
Сталкер Лом 356 Опубликовано 3 Августа 2013 Поделиться Опубликовано 3 Августа 2013 Здравствуйте. Вот, ЗП энциклопедию для ПДА создал - радовался. Не долго, правда: "Как статьи то выдавать?" - вопрос повис в воздухе и не хочет решаться. Знаю, проще всего сделать так: Сидор отправляя нас на задание, предупреждает, что там будут Слепые псы, их нужно опасаться, ведь у нас из оружия - только ПМ и т.д. В конце диалога выдать инфопоршень, по появлению которого у нас появляется статья в ПДА. Так - работает (да и с чего бы не работать?). Но если выдавать статьи только по заданию, то посинеешь их делать (ведь статей то явно перевалит за сотню, вместе с "дневником"), решил выкрутиться так же, как я выкрутился когда то с тайниками: при обыске NPC, есть вероятность того, что мы обнаружим наводку на тайник. Решил сделать аналогичное, но для инфопоршней. function finding_info(npc) local rnd_tbl = { "Mutant_boar_info", "Flesh_info", "Pseudo_flesh_info", "Bloodsucker_info", "Himera_info_info", "Pseudodog_info_info", "Psy_dog_info", "Dog_info", "Rotan_info", "Tushkano_info", "Giant_info", "Izlom_info", "Zombie_info", "Zombied_info", "Poltergeist_tele_info", "Poltergeist_flamer_info", "Snork_info", "Cat_info", "Cat_bayun_info", "Crow_info", "Burer_info", "Controller_info", "Rat_info", "Rats_wolf_info", "Escape_info", "Garbage_info", "Marsh_info", "Darkscape_info", "Agroprom_info", "Darkvalley_info", "Agroprom_u_info", "Rostok_info", "Bar_info", "Monolith_info", "Military_stalkers_info", "Freedom_info", "Duty_info", "Stalkers_info", "Bandits_info", "Clear_sky_info", "Military_info", "Ecolog_info", "Killers_info" } if math.random(0,100) > 1 then --Такой шанс дал, дабы не валить толпы народа for k,v in pairs(rnd_tbl) do if not has_alife_info(v) then --Если такого инфопоршня нет, то... table.insert(rnd_tbl, v) --...Выдаём его end end end end И Старина Сталкер ЗП вылетает с логом о том, что у него не хватает памяти: FATAL ERROR[error]Expression : !m_error_code[error]Function : raii_guard::~raii_guard[error]File : D:\prog_repository\sources\trunk\xrServerEntities\script_storage.cpp[error]Line : 748[error]Description : not enough memorystack trace: Не подскажете, в чём причина неработоспособности скрипта? За ответ буду благодарен. Работы на Artstation - https://www.artstation.com/artist/stalker_lom Ссылка на комментарий
Desertir 202 Опубликовано 3 Августа 2013 Поделиться Опубликовано 3 Августа 2013 (изменено) @Сталкер Лом, я бы попробовал вынести за функцию таблицу с информацией, но наверняка это не поможет. Ты уверен, что именно из за этого вылетает? В рунете в основном советуют почистить диск, увеличить файл подкачки, сделать дефрагментацию. На счет работоспособности скрипта в целом. Так задумано, что выдаются все инфопоршни из таблицы? Дебаг? Если нет, то в теле последнего if'а надо бы поставить break. Да и вообще как то рандомно надо выбирать инфопоршень, если такой инфопоршень есть, выбрать другой случайный, чисто моя логика, то бишь ИМХО. PS: в справочнике вылетов такого еще нету/не нашел Изменено 3 Августа 2013 пользователем Desertir ТЧ 1.0004. SAP и Trans mod github Ссылка на комментарий
Сталкер Лом 356 Опубликовано 3 Августа 2013 Поделиться Опубликовано 3 Августа 2013 Desertir, мне нужно, чтобы из таблицы выбирался только один поршень. А вылет именно из за этого скрипта, потому как во время, когда он включен, при обыске трупа идёт вылет. А когда без него, то всё как обычно - деньги, по вероятности, тайничок. В рунете в основном советуют почистить диск, увеличить файл подкачки, сделать дефрагментацию. Это когда ты играешь долгое время и память забивается, тогда - да, я бы винил подкачку и т.п., А сейчас: НИ, спавн бандоса и зомбированного, первый стреляет из ПБ во второго, тот обижается и даёт в зубы прикладом + раздаёт "в щи" контрольные пол-рожка. Ничего затратного, тем более, что и симуляция "спит" один час с НИ, а только потом начинает "кушать" ресурсы, творя своё великое дело! (как то громко вышло, хе-хе ...) P.S. Не объясните, почему таблицы лучше выносить за скрипт? А то мы без образования, скрипты без азбуки изучать пытаемся... Работы на Artstation - https://www.artstation.com/artist/stalker_lom Ссылка на комментарий
Painter 3 399 Опубликовано 3 Августа 2013 Поделиться Опубликовано 3 Августа 2013 (изменено) @Saruman, какая интересует платформа? На ЗП поставить выполнение функции при открытии инвентаря можно в файле actor_menu.script: function inventory_wnd_opened() твой_скрипт.твоя_функция() printf("---:>Inventory opened") end Изменено 26 Ноября 2019 пользователем Jurok Портфолио Ссылка на комментарий
azrael1325 28 Опубликовано 3 Августа 2013 Поделиться Опубликовано 3 Августа 2013 (изменено) @Сталкер Лом, по-моему, table.insert - это добавление в таблицу. То есть, вместо того, чтобы выдавать поршень, ты его добавляешь в таблицу, увеличивая ее до бесконечности. Отсюда и вылет в конце концов. Чтобы выдать один поршень, самый простой вариант local inf = rnd_tbl[math.random(#rnd_tbl)] if not has_alife_info(inf) then give_info(inf) end Его минус в том, что чем больше у тебя поршней, тем меньше вероятность получить новый. В идеале нужно сохранять таблицу в памяти, и при получении поршня удалять его из таблицы. Тогда выбор будет идти всегда только из еще не полученных поршней. (Конечно, еще надо будет добавить проверку на то, что в таблице еще остались элементы if #rnd_tabl ~= 0) Но с сохранением я, к сожалению, помочь не могу. Изменено 3 Августа 2013 пользователем azrael1325 1 Ссылка на комментарий
Nazgool 250 Опубликовано 3 Августа 2013 Поделиться Опубликовано 3 Августа 2013 (изменено) abramcumner Согласен По правилам Lua нельзя увеличивать таблицу во время перебора посредством table.insert. Можно только удалять или изменять элементы DEL Изменено 3 Августа 2013 пользователем Gun12 Ссылка на комментарий
abramcumner 1 159 Опубликовано 3 Августа 2013 Поделиться Опубликовано 3 Августа 2013 (изменено) Вы запрашиваете значение элемента таблицы V Но для всех полей Вашей таблицы значение V равно nil (Т.е. ключ - это строка с именем инфопорции, а значенее-то nil!!!!!!!!) Не-не. Таблица вида local rnd_tbl = { "Mutant_boar_info", "Flesh_info", "Pseudo_flesh_info", "Bloodsucker_info",эквивалентна таблице local rnd_tbl = { [1] = "Mutant_boar_info", [2] = "Flesh_info", [3] = "Pseudo_flesh_info", [4] = "Bloodsucker_info",Ошибка в том, что при итерировании таблицы, таблица меняется(table.insert). Так делать просто нельзя. Ну и код сам по себе напрочь бестолковый. Изменено 3 Августа 2013 пользователем abramcumner Ссылка на комментарий
Сталкер Лом 356 Опубликовано 3 Августа 2013 Поделиться Опубликовано 3 Августа 2013 azrael1325, скрипт работает и инфопоршни выдаёт. Правда, при первом обыске был небольшой лаг (доля секунды игра "висела"), при втором уже подобного не было, но это не критично. А с тем, что под конец игры информация будет выдаваться реже, придётся смириться, до тех пор, пока не наберусь опыта в "скриптовом деле". Благодарю за подсказку. Работы на Artstation - https://www.artstation.com/artist/stalker_lom Ссылка на комментарий
artur 9 Опубликовано 3 Августа 2013 Поделиться Опубликовано 3 Августа 2013 Всем добрый день у меня возник вопрос для новичка, так как познаю скрипты. Значит надо мне сделать так, что бы животинка(мутант псевдогигант) двигалась по заданному маршруту, это выглядит приблизительно так: [smart_terrain]topi_smart_terrains=true[logic]active=patrol[patrol]path_walk=topi_smart_terrain_patrol_walkpath_walk=topi_smart_terrain_patrol_look Ну и прокладывается сам маршрут,но где то я допустил ошибку, не могли ли вы ткнуть на неё, заранее большое спасибо!! Ссылка на комментарий
Desertir 202 Опубликовано 3 Августа 2013 Поделиться Опубликовано 3 Августа 2013 (изменено) Ого, а insert то я и не увидел, вот я шляпа. Тогда все очевидно... Если позволите, как бы я реализовал выдачу информации. local infoportions = {"info_1","info_2","info_3"} function load_game() --вызвать для удаления существующих\известных инфопорций for id,info in pairs(infoportions) do if db.actor:has_info(info) then table.remove(infoportions,id) end end end function give_rnd_info() --выдача случайного инфопоршня if not next(infoportions) then return end local chance = math.random(0,100) if chance < 20 then local id = math.random(#infoportions) db.actor:give_info_portion(infoportions[id]) table.remove(infoportions,id) end end Проверено под Lua for Windows 5.1.4 В критике не нуждаюсь, ибо ИМХО PS: пока я писал, автор ответил. Изменено 3 Августа 2013 пользователем Desertir 1 ТЧ 1.0004. SAP и Trans mod github Ссылка на комментарий
azrael1325 28 Опубликовано 3 Августа 2013 Поделиться Опубликовано 3 Августа 2013 path_walk=topi_smart_terrain_patrol_walkpath_walk=topi_smart_terrain_patrol_look Не должно быть во второй строчке path_look? Ссылка на комментарий
artur 9 Опубликовано 3 Августа 2013 Поделиться Опубликовано 3 Августа 2013 Я извеняюсь за повторение, но на тушканов этот скрипт который писал выше подойдет?? Ссылка на комментарий
Painter 3 399 Опубликовано 3 Августа 2013 Поделиться Опубликовано 3 Августа 2013 @artur, ознакомься. Портфолио Ссылка на комментарий
StafGlawer 0 Опубликовано 5 Августа 2013 Поделиться Опубликовано 5 Августа 2013 StafGlawer, а unbind и bind ты из головы взял? в оригинале их нет Я тебя разочарую есть и они работают при других условиях ... @Saruman, да неужели? Все управление через биндинги в user.ltx прописано. @StafGlawer, что то мне подсказывает, что анбиндинг работает не по значению, а по клавише, типа такого "unbind kP", но таким методом не заблокировать весь пда, контакты и карта все равно останутся (мб еще чтото, залезь в настройки управления). Можно попробовать разбиндивать и их, только нужно получать правильные клавиши, например у меня открытие активных задач далеко не на клавишу P. А как получать, не подскажу, могу только запутать Вариант @Jurok'а из самых распространенных, в Солянке есть такая шняга с рюкзаком, якобы молния застряла (если ноги растут у этой идеи не из Солянки, уж извините, увидел именно в ней). Там проверяются инфопрошни, я уверен на 90% и как только получили инфопоршень открытия какого либо окна из ПДА его можно закрыть. Как - описано в справочнике по скриптам. Я так понял с лыжами все в порядке ... а вот я дурак =) функция пашет (по-другому вызывал), но не в апдейте ... похоже я просто коряво вызвал, может тыкнешь пальчиком ? =) (ну е-мае первые шаги в скриптовании) Ссылка на комментарий
*Shoker* 322 Опубликовано 7 Августа 2013 Поделиться Опубликовано 7 Августа 2013 (изменено) Хотел спросить, уже достаточно много времени прошло, никто не нашёл в ЗП более\менее адекватную замену функции level.main_input_receiver()? Эта функция возвращала текущее UI-окно, позволяя его изменять, но лично я её использовал чтобы определить что игрок сейчас не находится в инвентаре\ПДА\диалоге и вообще любом интерфейсе. Вроде одно время мелькало сообщение, что где то нашли функцию-замену в одном из UI-классов или типа того. Ну или вообще какие есть более\менее адекватные варианты чтобы определить что в данный момент у игрока не открыта никакая UI-менюшка (как движковые ПДА\Инвентори, так и скриптово добавленные окна) чтобы не делать для каждого из них персональную проверку. _______________Нашёл этот пост (в прошлый раз не так поиском воспользовался), он закрывает вопросы по level.main_input_receiver(), но всё ещё остаётся вопрос о том как универсальным методом определить что открыто любое UI-окно. (без правок движка) Изменено 7 Августа 2013 пользователем *Shoker* 1 Можно просто Shoker, форум АМК съел моё старое имя и не хочет отдавать о_О Мастер аномалий на свою заднюю точку. Ссылка на комментарий
abramcumner 1 159 Опубликовано 7 Августа 2013 Поделиться Опубликовано 7 Августа 2013 Вроде одно время мелькало сообщение, что где то нашли функцию-замену в одном из UI-классов или типа того.Где-то Malandrinus добавил в xray-extensions. Просто функция с подходощей сигнатурой нашлась в "одном из UI-классов". Ну или вообще какие есть более\менее адекватные варианты чтобы определить что в данный момент у игрока не открыта никакая UI-менюшкахВ actor_menu.script отслеживаются движковые окна. В скриптовые окна добавить при показе установку флажка, при закрытии сброс. Нашёл этот пост (в прошлый раз не так поиском воспользовался), он закрывает вопросы по[/size] level.main_input_receiver(), но всё ещё остаётся вопрос о том как универсальным методом определить что открыто любое UI-окно. (без правок движка)Совершенно не закрывает С окном, выведенным этим методом, невозможно никакое взаимодействие игрока. Это только для показа информации и все. 1 Ссылка на комментарий
Shredder 49 Опубликовано 7 Августа 2013 Поделиться Опубликовано 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 Ссылка на комментарий
Рекомендуемые сообщения
Создайте аккаунт или авторизуйтесь, чтобы оставить комментарий
Комментарии могут оставлять только зарегистрированные пользователи
Создать аккаунт
Зарегистрировать новый аккаунт в нашем сообществе. Это несложно!
Зарегистрировать новый аккаунтВойти
Есть аккаунт? Войти.
Войти