Перейти к контенту

Nazgool

Жители
  • Число публикаций

    618
  • Регистрация

  • Последнее посещение

  • Дней в топе

    1
  • AMKoin

    37 [Подарить AMKoin]

Весь контент пользователя Nazgool

  1. Nazgool

    Скриптование

    Да там по идее достаточно просто для конкретного сделать, только нужно знать : А насколько он конкретный? Чем отличается от других? У него своя секция? Или sid?
  2. , Т.е. в схеме матюгальника звук snd = lab_x7_biohazard_alarm проигрывается, а в схеме вентилятора звук snd = lab_x7_ventilators_run нет? А ты уверен, что со звуком вентиляторов всё нормально? Подставь звук lab_x7_ventilators_run в схему матюгальника и посмотри - если не будет звучать, то звук явно кривой.
  3. Stalker_AleX333 Может быть. Хотя если верить мануалу Тогда переключайся в ph_idle. Там on_timer должен работать. И on_timer2 и т.д. также. Т.е. не [sr_idle@ventilators_timer] а [ph_idle@ventilators_timer]
  4. @Micha_Pulemiot, Что-то ссылка у меня не дает прогу. Как она хоть называется? , Поставь проверки и найдешь во что оно упирается. ....... @Charsi, Спасибо. Я в принципе таким не занимаюсь, но мало ли )
  5. Давно не занимался логикой. Да и не очень понял что и через сколько должно включаться. Может как-то так ? [ph_button@ventilation_system_on] anim_blend = false anim = button_true ; секунды через 3 запускается двигвтель on_timer = 3000 | %+lab_x7_ventilation_system_turned_on_play_snd% ; через 15 сек. выдыется инфо и секцию оптравить в nil on_timer2 = 15000 | nil %+lab_x7_ventilation_system_worked% А [sr_idle@ventilators_timer] это лишнее
  6. А что ты вообще хотел сделать? Так проще будет разобраться как исправить.
  7. @VAVKA, Для начала нужно узнать кто-такой pasha и где он должен стоять (судя по way_***). Потом снять координаты этого места и переписать их в файле way_l05_bar.ltx. Как снимать координаты? Способов много. СДК не знаю, а сейчас самый крутой скриптовый искать не буду. Я вот пока набросал что проще, а потом найдешь что нужно. 1. В файле gamedata\config\ui\ui_custom_msgs.xml после: <?xml version='1.0' encoding="UTF-8"?> <header> допиши : <pos_debug x="170" y="10" width="270" height="150" complex_mode="1"> <text font="letterica16" r="255" g="255" b="255" a="150" align="l"/> </pos_debug> 2. в файле gamedata\scripts\bind_stalker.script после : function actor_binder:update(delta) допиши : pos_debug.show() 3. Создай файл gamedata\scripts\pos_debug.script и в нем запиши : local sfmt = string.format local hud = get_hud() local cs = hud:GetCustomStatic("pos_debug") or hud:AddCustomStatic("pos_debug", true) function show() local pos = db.actor: position() local lvid = db.actor:level_vertex_id() local gvid = db.actor:game_vertex_id() local dir = device().cam_dir local valid = level.vertex_position(lvid):distance_to(pos) <= 0.7 local msg = sfmt("pos %1.3f,%1.3f,%1.3f\\n", pos.x, pos.y, pos.z) .. --позиция ГГ (x,y,z) sfmt("lvid %d\\n", lvid) .. --левел вертекс sfmt("gvid %d\\n", gvid) .. --гейм вертекс sfmt("dir %1.3f,%1.3f,%1.3f\\n", dir.x, dir.y, dir.z) .. --поворот ГГ вокруг осей (x,y,z) sfmt("valid %s\\n", tostring(valid)) --наличие AI-сетки в данной координате cs:wnd():SetText(msg) end Теперь приходи в нужную точку, снимать координаты или проверять, и следи за показаниями "valid" - если TRUE, то AI сетка есть. Когда показания уже не нужны будут, закомментишь строку : -- pos_debug.show() -- вот так
  8. @VAVKA, Распаковать all.spawns Описание путей находится в файлах way_***.ltx Найти путь [sniper_3_walk] и проверить точки(у) путей - p*:position p*:game_vertex_id p*:level_vertex_id и т.д. если есть
  9. Посмотрел только функцию lab_x7_biohazard_check_actor_outfit. Кондишены должны возвращать либо true либо false. false у тебя может возвратиться. А true где? Поправь ... db.actor:give_info_portion("lab_x7_actor_have_bioprotection_outfit") return true ... З.Ы. Опоздал )
  10. @Eugen81, Такой только перебором for i=1,65534 do. Уникальные предметы, я считаю, на то и уникальные, что должны где-то и когда-то понадобиться. Их нужно "запоминать". В олл-спавне обычно запоминают по story_id, ну или искать по имени. А как запоминать при скриптовом спавне я уже показал.
  11. @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.
  12. Если id будет равен (скажем) 100, то цикл for i=1,65534 do закончиться относительно быстро (по break-у). А если id будет за 65000? То будет крутить в 650 раз дольше. А это очень долго. В любом случае способ перебора не есть гуд. Даже с id до сотни скорость поиска объекта в цикле существенно проигрывает способу поиска по имени.
  13. Nazgool

    Скриптование

    @Simonov50, При первом обращении к нему он сам зарегистрируется. @Капитан Кузьмичёв, Насколько я понял это нужно делать в пределах локации? db.actor:set_actor_position(vector():set(X,X,X)) не подойдет? Поставить space_restrictor и при заходе в него вызывать метод выше.
  14. Да не мучаемся мы. Это совсем не трудно. А очень даже полезно ) Может быть когда-то человек сделал "чтобы работало" и на что знаний хватало. Но время то идет. Слава Богу что-то узнаем новое - в общем не утратили способности развиваться. Вот и мне, к примеру, сразу бросилась в глаза "грандиозность" идеи перебора всех и вся. Не имеют. В 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') просто не будет найден. И без вылета.
  15. А чего так не красиво? Сейф, насколько я понимаю, уникальный. Значит и имя у него тоже будет уникально. Если он был создан в олл спавне, то найти по имени 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, то и сотен) раз это быстрее. В принципе меня это не должно касаться. При хорошем железе такой цикл к фризам не приведет. Это я так. В качестве рассуждения. )
  16. Nazgool

    Скриптование

    Так вот же я показал - function(ctrl) Попробуй так. А если снова что-то не пойдет, то тогда посмотрим.
  17. @AndrewMor, Удалить space_restrictor-ы 1. файл alife_l03_agroprom.ltx, удали секцию с именем name = agr_space_restrictor_0001 2. файл alife_l06_rostok.ltx, удали секцию с именем name = rosros_cutscene На Агропроме сталкеров атакуют военные, если помнишь, с двух направлений. Оба этих шейпа хоть и находятся в разных местах, но относятся к одному смарту. Т.е. 8 солдат разбиты на две группы по 4, но под одним смартом. И когда погибнут все 8, как члены одного смарта, то выдается инфопорция, и тогда Крот кричит, что мол "помогите мне, зажал кто-то и зацеловал".
  18. Nazgool

    Скриптование

    @Anonim, Если поискать по "m_preconditions", то использование этой таблицы найдется только в одном месте. В файле ui_mm_opt_main.script. for i,j in pairs(self.m_preconditions) do j(i, _current_id) end Т.е. вызывается твоя функция : handler.m_preconditions[ctl] = function() local opt1 = self:GetCheckButton("option1") ctrl:Enable( opt1:GetCheck() ) end В которую передается аргумент "i". Т.е. контрол "ctl" ctl = xml:InitTrackBar ("video_adv:track_option2", _st) А у тебя хоть что-то передается в эту функцию? Нет. Передай и всё. handler.m_preconditions[ctl] = function(ctrl) ... ctrl:Enable(opt1:GetCheck()) -- тогда вот тут "ctrl" и будет определен
  19. Лог это не скрипт. Скрипт вот это - stlkdead.script. Вот его и покажи для начала.
  20. Nazgool

    Скриптование

    У меня почему-то показало, что это разные метатаблицы... Ну да Бог с ним. Сталкер мне уже не первый раз разные фортеля выкидывает. Главное что получилось ))
  21. Nazgool

    Скриптование

    , Пожалуйста. Да, я сделал только набросок. Оформлять можно как душе угодно). Я вижу, что ты сделал только для actor-а. Для остальных npc необходимо тоже получать метатаблицу.
  22. Nazgool

    Скриптование

    Можно. Примерно так : local act_mt = getmetatable(db.actor) -- для ГГ своя метатаблица local npc_mt = getmetatable(alife():story_object(100)) -- неважно кто, для всех NPC одна метатаблица local new_npc_methods = { new_1 = function(self, arg_1, ... , arg_N) -- собственно новый метод 1. self передается автоматом - это сам объект -- action end, new_2 = function(self, arg_1, ... , arg_N) -- новый метод 2 и т.д. -- action end, } -- не забыть оригинальные метаметоды local act_index = act_mt.__index local npc_index = npc_mt.__index -- переназначение метаметодов function act_mt.__index(t,k) return new_npc_methods[k] or act_index(t,k) end function npc_mt.__index(t,k) return new_npc_methods[k] or npc_index(t,k) end a = db.actor:new_1(arg_1, ... , arg_N) b = alife():story_object(100):new_1(arg_1, ... , arg_N) c = alife():story_object(004):new_1(arg_1, ... , arg_N)
  23. Никакой магии тут нет. Хотя нет. Есть. Магия Lua. В файле death_manager.script производится заполнение таблицы зависимостей : local n = death_ini:line_count("item_dependence") local id, value = "", "" for i=0,n-1 do result, id, value = death_ini:r_line("item_dependence",i,"","") item_dependence[id] = {} local vvv = parse_names(value) for k,v in pairs(vvv) do item_dependence[id][v] = true end end Разбирается секция [item_dependence] в файле death_generic.ltx local n = death_ini:line_count("item_dependence") И для каждой строки for i=0,n-1 do result, id, value = death_ini:r_line("item_dependence",i,"","") происходит распарсивание полученного значения value (В твоем случае это строка "wpn_bm-16_full, wpn_toz34") : local vvv = parse_names(value) Т.е. ожидается получить два результата: строку "wpn_bm-16_full" и строку "wpn_toz34". Но будет получена только "wpn_toz34", т.к. нужно посмотреть функцию parse_names в файле _g.script. В ней есть такая строка : for name in string.gfind( s, "([%w_\\]+)%p*" ) do которая говорит о том, что происходит поиск строки, состоящей из букв и цифр (%w), символов нижнего подчеркивания (_) и бэкслэшей (\) Но в строке "wpn_bm-16_full" находится знак минус (-), которой не входит в набор. Поэтому и вся строка целиком не подходит под условия поиска и найдена не будет.
  24. Nazgool

    Форум: вопросы и предложения

    А если я не россиянин, и общаюсь по-российски только потому, что форум российский, но знание этого языка шло "прицепом". Что тогда делать? Всем не россиянам срочно пройти курс изучения языка, или покинуть форум самому? Иначе, в конце концов, кто-то и когда-то всё равно нарвется и вылетит "с позором". Вот уже Ваша идея и работает - пишу и пИсаю (кстати, последнее слово как расценивается? Нет, это так, на будущее).
  25. Nazgool

    Скриптование

    В SciTE-е справку видел? Так вот попытка "разжевать" каждую функцию, варианты и способы. Для тебя, скорее всего, может показаться и мало интересно. Ну, блин, в общем-то правильно. Я понимаю, что вопрос был не конкретный, и понимать его можно по разному.Но я рассуждаю так, как написано. По буквам. Эти буквы говорят ровно столько, сколько процитировано. А именно говорилось о пробелах и соответствии им шаблона %w+. Только и всего.
×
×
  • Создать...