Svoboда 3 Опубликовано 23 Апреля 2009 Поделиться Опубликовано 23 Апреля 2009 Тема для обсуждения скриптов всего и всех в серии игр STALKER. Задавая вопрос (!): 1. Внимательно изучите суть вопроса. Вопрос должен соответствовать выбранной Вами темы. Это поможет сохранить порядок и читабельность темы, а также облегчит поиск и понимание сего; 2. Изучите то, что уже есть в теме (пролистайте "руками", воспользуйтесь поиском на форуме); 3. Изучите информацию которая может вам помочь: Stalkerin. Там есть много хороших статей касательно данной темы.Уроки по модостроению. Есть рабочие примеры готовых скриптов различного назначения. Справочное руководство по языку Lua 5.1https://www.mediawiki.org/wiki/Extension:Scribunto/Lua_reference_manual/ruСправочник по функциям и классам. Собрано много информации по функциям и классам, не всем, но по основные сведения предоставлены. Логика со вступлением и четырьмя частями: ВступлениеЧасть перваяЧасть втораяЧасть третьяЧасть четвертая. Smart_terrain (в простонароде - гулаг)Интересный способ настроики логики для гулаговСкриптовая часть игровой логики 4. Дабы не превращать обсуждение в "кашу" разной информативной направленности, задавайте несколько вопросов по порядку (в разных постах) после того, как получите ответ на предыдущий вопрос; 5. "Спасибо" и тому подобное - будьте так любезны в ПМ. Если не любите писать в ПМ, в конце вопроса напишите фразу: "Заранее спасибо!" - или что-то в этом духе; 6. ПОЖАЛУЙСТА! Указывайте, для какой игры Вам необходима информация (ТЧ, ЧН, ЗП), если стоит мод - укажите название мода; 7. Если Вы что-то сделали и результат не такой, какой Вами задумывался, то, пожалуйста, приводите коды которые Вы изменяли/писали целиком! Это поможет другим правильно ответить на Ваш вопрос, а также оградит Вас от лишней писанины. 8. Оформляйте сообщение. Пользуйтесь тегами для того, чтобы отделить код от текста. Пишите грамотно - ПОЛЬЗУЙТЕСЬ ЗНАКАМИ ПРЕПИНАНИЯ. 9. И помните: «Правильно заданный вопрос – половина ответа». Какие вопросы следует задавать, а какие нет... Задавайте вопросы, которые касаются непосредственно скриптов и их работы, т.е. Вы что-то делаете, а у Вас что-то не получается, при этом у Вас на руках должен быть хотя бы какой-то код, свидетельствующий о Вашей причастности к вопросу. Вопросы которые будут удалятся, следовательно их задавать не нужно:-- Где находится та или иная функция? Для ответа используем поиск по словам среди файлов оригинальной игры или мода, если объект поиска относится к нему, при помощью программы, которая Вам наиболее симпатизирует;-- Как сделать что-то/то-то? С подобными вопросами, либо в "ковырялки", где Вам вероятнее всего так же не ответят, либо выдвигаем мысли, подкреплённые теорией, практикой (идеальный вариант) и здравым рассудком;-- Вопросы со смыслом: "сделайте", "совместите" и подобными глаголами повелительного наклонения.-- К тому же удалению будут подвергаться вопросы, в которых масштабно не используются теги, для отделения кода и цитат от основного текста, а также не вписан в спойлер код размером превышающие семь строк.Ответ на возможно возникший вопрос: В какую тему можно обратиться по поводу логики и спавна объектов? В тему "ковырялок" соответствующей версии игры, для которой Вы задаёте вопрос. И последнее: очень рекомендовано к прочтению Правила форума 1 2 Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/
Kirgudu 1 340 Опубликовано 26 Сентября 2019 Поделиться Опубликовано 26 Сентября 2019 17 часов назад, Баба ЯГА сказал: Читал, там нет подробного объяснения. Всё там есть. level.start_stop_menu(wnd, true|false) - показывает|скрывает переданное в первом аргументе окно level.main_input_receiver() - возвращает открытое в настоящий момент окно (диалог, инвентарь и т. д.) 1 Свои работы и совместные проекты: Инструмент, OGSM CS, Final Stroke, HARDWARMOD Полезное: модули Артоса, XML парсер Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/page/499/#findComment-1286460
Баба ЯГА 12 Опубликовано 27 Сентября 2019 Поделиться Опубликовано 27 Сентября 2019 В 26.09.2019 в 09:41, AndreySol сказал: Уточни, что ты под этим понимаешь? В 26.09.2019 в 07:32, AndrewMor сказал: В нужный момент выдать инфо, а дальше прописать нужное действие в логике НПС (переход в секцию логики по выдаче инфо). Не, я не это имел ввиду, нужно именно скриптово, без логики, поршней и дополнительных костылей, что-то типа если то иначе, ну, например, стоит НПС на координатах (1,1,1) а ему нужно "приказать" пойти/переместиться на координаты (3,1,1), или - проверять по lvid и перемещать его по lvid, что-то типа этого. Я потому и спрашиваю, что не знаю как это сделать... Что-то похожее есть в скрипте который отвечает за перемещение нпс в укрытия при выбросе, но я там ничего не понял... И там без логики и поршней всё, а именно скриптово, но как это сделать? Мы, вчера, соседям сказали, что материализация - состоялась, чтобы ваш авторитет не уронить. Вот, мол, было изваяние, а теперь - стала Марья Ивановна. Многие верят ... © Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/page/499/#findComment-1286929
dsh 3 824 Опубликовано 27 Сентября 2019 Поделиться Опубликовано 27 Сентября 2019 @Баба ЯГА, это делается с помощью метода клиентского обьекта set_dest_level_vertex_id( lvid ). Непись пойдет на этот lvid, если в процессе его какой-нибудь скрипт не пошлет куда-нибудь в другое место. 2 dsh mod: https://github.com/dsh2dsh/op2ogse Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/page/499/#findComment-1286935
Баба ЯГА 12 Опубликовано 27 Сентября 2019 Поделиться Опубликовано 27 Сентября 2019 (изменено) 8 минут назад, dsh сказал: @Баба ЯГА, это делается с помощью метода клиентского обьекта set_dest_level_vertex_id( lvid ). Непись пойдет на этот lvid, если в процессе его какой-нибудь скрипт не пошлет куда-нибудь в другое место. А можешь на малюсеньком примере показать чтобы до меня как-то больше дошло... Ну, типа там, берём ID любого непися онлайн и... for i=1,65000 do local o = alife():level_obj_by_id(i) if o then o:set_dest_level_vertex_id( 45612 ) end end как-то так? Изменено 27 Сентября 2019 пользователем Баба ЯГА Мы, вчера, соседям сказали, что материализация - состоялась, чтобы ваш авторитет не уронить. Вот, мол, было изваяние, а теперь - стала Марья Ивановна. Многие верят ... © Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/page/499/#findComment-1286937
_Sk8_AsTeR_ 122 Опубликовано 28 Сентября 2019 Поделиться Опубликовано 28 Сентября 2019 Ребята, кто мне помогал, огромное спасибо! Теперь все НПС платно отправляют СМСки в чат, ибо нефиг халявничать! Возник следующий вопрос: тратить НПС деньги научились, а где бы им подзаработать? Реализована ли в НС какая-нибудь схема, где НПС в оффлайне продают ненужный лут? Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/page/499/#findComment-1287078
Баба ЯГА 12 Опубликовано 28 Сентября 2019 Поделиться Опубликовано 28 Сентября 2019 Продолжаю пытаться отправить НПС по нужным координатам, на данный момент добился вот такого: npc:set_desired_position() npc:set_desired_direction() npc:clear_animations() npc:set_detail_path_type(move.line) npc:set_body_state(move.standing) npc:set_movement_type(move.run) npc:set_path_type(game_object.level_path) npc:set_mental_state(anim.free) npc:set_sight(look.danger, nil, 0) npc:remove_all_restrictions() gg_lvid = db.actor:level_vertex_id() npc:set_dest_level_vertex_id( gg_lvid ) но, например, нпс сидит у костра, когда я выполняю код, то он жопе так и едет к нужному lvid... Ну да ладно, дело вот в чём ещё, когда нпс достигает КРАЯ нужного level_vertex_id то он считает что всё хорошо, но, мне нужно чтобы нпс при достижении нужного level_vertex_id не останавливался на краю. а заходил В ЦЕНТР этой клетки, т.к. клетка, например может быть размером 3х3 метра, как это сделать? Подскажите ребята. Мы, вчера, соседям сказали, что материализация - состоялась, чтобы ваш авторитет не уронить. Вот, мол, было изваяние, а теперь - стала Марья Ивановна. Многие верят ... © Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/page/499/#findComment-1287085
AndreySol 215 Опубликовано 28 Сентября 2019 Поделиться Опубликовано 28 Сентября 2019 57 минут назад, _Sk8_AsTeR_ сказал: Теперь все НПС платно отправляют СМСки в чат, ибо нефиг халявничать! Ты это о чем вообще? О ботах, которыми рулит ИИ движка? 1 час назад, _Sk8_AsTeR_ сказал: Реализована ли в НС какая-нибудь схема, где НПС в оффлайне продают ненужный лут? Ты бы спросил сначала: "А есть ли схема, где НПС в оффлайне этот лут добывают?". 2 минуты назад, Баба ЯГА сказал: но, например, нпс сидит у костра А ты подумал о том, что НПС не просто "сидит у костра", а что он находится под логикой некой работы в неком гулаге. И ты думаешь, что это нормальная идея - выдернуть скриптово его с работы из гулага? Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/page/499/#findComment-1287086
Баба ЯГА 12 Опубликовано 28 Сентября 2019 Поделиться Опубликовано 28 Сентября 2019 @AndreySol, да, думаю это нормальная идея, и если ты заметил, я спрашивал - КАК ОТПРАВИТЬ НПС в ЦЕНТ КЛЕТКИ level_vertex_id - знаешь как это правильно сделать - то подскажи. Я задал конкретный вопрос - зачем ты мне вопросы задаёшь что я думаю??? Я сюда пришёл за помощью, я понятия не имею что такое гулаги и работа - ты знаешь как отправить НПС в ЦЕНТР клетки level_vertex_id ? Мы, вчера, соседям сказали, что материализация - состоялась, чтобы ваш авторитет не уронить. Вот, мол, было изваяние, а теперь - стала Марья Ивановна. Многие верят ... © Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/page/499/#findComment-1287088
_g.script 3 669 Опубликовано 28 Сентября 2019 Поделиться Опубликовано 28 Сентября 2019 Добрый вечер. Подскажет ли кто-нибудь, как скриптово принудительно остановить перезарядку оружия у ГГ? Здесь могла быть ваша реклама. Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/page/499/#findComment-1287089
_Sk8_AsTeR_ 122 Опубликовано 28 Сентября 2019 Поделиться Опубликовано 28 Сентября 2019 (изменено) @AndreySol, а разве они оффлайн не подбирают? Они умеют в оффлайне драться, например, и вроде там же арты подбирают те же. amk_offline_alife.script Скрытый текст --есть бесхозное оружие amk.oau_reason="cn offline_alife chp13 "..tostring(victim and victim:name()) on_weapons_found(victim, vdata) break --прерываем цикл - событие отработано elseif #vdata.artefacts>0 then --есть арты amk.oau_reason="cn offline_alife chp14 "..tostring(victim and victim:name()) on_artifacts_found(victim, vdata) break --прерываем цикл - событие отработано elseif #vdata.inv_boxes>0 then --есть контейнеры. Надо обыскать. amk.oau_reason="cn offline_alife chp18 "..tostring(victim and victim:name()) on_inv_boxes_found(victim, vdata) break --прерываем цикл - событие отработано elseif items[victim.id] and #items[victim.id] > 0 then --попробуем продать всякого amk.oau_reason="cn offline_alife chp15 "..tostring(victim and victim:name()) -- amk.mylog("Offline: lets trade") amk.oau_reason="cn offline_alife chp17 "..tostring(victim and victim:name()) process_trade(victim) -- amk.mylog("Offline: trade done") break Скрытый текст function on_artifacts_found(victim, vdata) if (victim == nil or vdata == nil) then return end local obj, v_obj local object local v_id = victim.id local b_stalker = false -- Если сталкер - дадим опыт. if victim and IAmAStalker[victim:clsid()] and victim.community then local m_comm = victim:community() if (m_comm == "stalker" or m_comm == "dolg" or m_comm == "freedom") then b_stalker = true end end for i=1, #vdata.artefacts do v_obj = vdata.artefacts[i] if (v_obj) then object = alife():object(v_obj.id) if (object and object:name() == v_obj.name) then obj = pick_item(victim, object) if (obj) then if (b_stalker == true) then victim:set_rank(victim:rank() + rate_art_found) end end end end end process_trade(victim) end Изменено 28 Сентября 2019 пользователем _Sk8_AsTeR_ Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/page/499/#findComment-1287093
Баба ЯГА 12 Опубликовано 30 Сентября 2019 Поделиться Опубликовано 30 Сентября 2019 Ребята, как узнать на карте произвольный level_vertex_id, ну например, level_vertex_id(30078) - а мне возвращает если он существует то true и его координаты, а если его не существует то возвращает просто false, как такое реализовать? upd: или как узнать по координатам ID вертекса и валидный он или нет? Например, я запрашиваю произвольные координаты на локации на которой находится ГГ, а мне возвращает по этим координатам level_vertex_id и то есть ли он там на самом деле, грубо говоря - если клетка АI сетки по этим координатам? Мы, вчера, соседям сказали, что материализация - состоялась, чтобы ваш авторитет не уронить. Вот, мол, было изваяние, а теперь - стала Марья Ивановна. Многие верят ... © Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/page/499/#findComment-1287389
naxac 2 595 Опубликовано 1 Октября 2019 Поделиться Опубликовано 1 Октября 2019 Цитата как узнать на карте произвольный level_vertex_id @Баба ЯГА, например так local v = math.random(1, vertex_count) Количество вертексов фиксированное, т ч. можно составить табличку [имя уровня] = кол-во вертексов. Позиция вертекса: level.vertex_position(level_vertex) Обратной функции в ТЧ точно нет, про ЧН/ЗП не в курсе. Есть в X-Ray Extensions: level.vertex_id_by_pos = function ( position ) db.actor:set_vector_global_arg_1( position ) return level.vertex_id() end Аддон для ОП-2.09.2: Яндекс/Google/GitHub/Тема на AP-PRO Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/page/499/#findComment-1287490
Баба ЯГА 12 Опубликовано 1 Октября 2019 Поделиться Опубликовано 1 Октября 2019 @naxac, жаль что нельзя по координатам узнать ID вертекса 14 минут назад, naxac сказал: Количество вертексов фиксированное, т ч. можно составить табличку [имя уровня] = кол-во вертексов. Позиция вертекса: level.vertex_position(level_vertex) Я об этом думал, но, вот тут проблема,, например на Кордоне = 539254 вертекса, а при переборе показывает только 5421 из них 4702 - валидных... Если перебирать свыше 300000 - вылет. Ничего понять не могу... Я так понимаю, что клетка AI сетки - это и есть вертекс, значит на Кордоне должно быть 539254 вертекса по количеству AI клеток. 17 минут назад, naxac сказал: Есть в X-Ray Extensions: Я не знаю что это такое... Мы, вчера, соседям сказали, что материализация - состоялась, чтобы ваш авторитет не уронить. Вот, мол, было изваяние, а теперь - стала Марья Ивановна. Многие верят ... © Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/page/499/#findComment-1287492
naxac 2 595 Опубликовано 1 Октября 2019 Поделиться Опубликовано 1 Октября 2019 (изменено) @Баба ЯГА, level_vertex не может быть невалидным по определению. Невалидным для AI может быть game_vertex, если он расположен вне аи-сетки. Цитата Я не знаю что это такое... https://www.amk-team.ru/forum/topic/10538-x-ray-extensions/ Изменено 1 Октября 2019 пользователем naxac Аддон для ОП-2.09.2: Яндекс/Google/GitHub/Тема на AP-PRO Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/page/499/#findComment-1287494
Баба ЯГА 12 Опубликовано 1 Октября 2019 Поделиться Опубликовано 1 Октября 2019 @naxac, хорошо, как тогда перебрать все вертексы на Кордоне например? Вот так у меня показывает 4477 вертекса function GetLevelsVertexes(lname) local t = {} local i = 0 local graph = game_graph() local sim = alife() while graph:valid_vertex_id(i) do local v = graph:vertex(i) local ln = sim:level_name(v:level_id()) if ln == lname then t[#t+1] = v:level_vertex_id() end i = i+1 end return t, i end local t,i = GetLevelsVertexes(level.name()) а вот так показывает 5704 вертекса на Кордоне, а реально там 500000 клеток (а значит и вертексов) local colco_ver = 0 local all_colvo = 0 clear_log() while all_colvo < 350000 do if game_graph():vertex(all_colvo):level_id() == alife():level_id() then colco_ver = colco_ver + 1 --gc:execute( "load ~:> vertex_id ="..i..", " ) end all_colvo = all_colvo + 1 end upd: вот тут хотел поставить 600000 (предварительно количество посмотрел в LE) чтобы с запасом, но, как я и говорил если ставить больше чем 300000 - то вылет. while all_colvo < 350000 do Мы, вчера, соседям сказали, что материализация - состоялась, чтобы ваш авторитет не уронить. Вот, мол, было изваяние, а теперь - стала Марья Ивановна. Многие верят ... © Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/page/499/#findComment-1287495
naxac 2 595 Опубликовано 1 Октября 2019 Поделиться Опубликовано 1 Октября 2019 (изменено) @Баба ЯГА, так оно и не покажет реальное количество нод, это же только вертексы точек графа. Реальное количество нужно смотреть в level.gct локации (или в level.ai, не помню, склероз, чтоб его...), с помощью, например, Graph Viewer, скриптами его не получить. Изменено 1 Октября 2019 пользователем naxac Аддон для ОП-2.09.2: Яндекс/Google/GitHub/Тема на AP-PRO Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/page/499/#findComment-1287497
Баба ЯГА 12 Опубликовано 1 Октября 2019 Поделиться Опубликовано 1 Октября 2019 @naxac, так а что тогда возвращает db.actor:level_vertex_id() ? Что-то я запутался совсем... Я смотрел реальное количество клеток АИ так: открыл Кордон в LE и выделил все клетки и там внизу показывает количество выделенных клеток. Труба, короче. Я хотел определить какие вертексы есть вокруг ГГ в радиусе, скажем 3 метра, а потом вывести АИ сетку эту (кусочек) - на экран. Но выходит - ничего не выйдет.... Мы, вчера, соседям сказали, что материализация - состоялась, чтобы ваш авторитет не уронить. Вот, мол, было изваяние, а теперь - стала Марья Ивановна. Многие верят ... © Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/page/499/#findComment-1287498
naxac 2 595 Опубликовано 1 Октября 2019 Поделиться Опубликовано 1 Октября 2019 @Баба ЯГА, почему же не выйдет. Перебирай все вертексы локации и проверяй расстояние. Если меньше 3х, то выводи на экран. for i = 1, count do if level.vertex_position(i):distance_to(db.actor:position()) <= 3 then -- тут выводишь клетку ... Аддон для ОП-2.09.2: Яндекс/Google/GitHub/Тема на AP-PRO Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/page/499/#findComment-1287499
Баба ЯГА 12 Опубликовано 1 Октября 2019 Поделиться Опубликовано 1 Октября 2019 7 минут назад, naxac сказал: for i = 1, count do хорошо, а COUNT - сколько ставить? Если больше 300000 - вылет upd: попробуй сам перебрать вертексы и сам всё увидишь, не работает такой перебор, он всё не перебирает. Мы, вчера, соседям сказали, что материализация - состоялась, чтобы ваш авторитет не уронить. Вот, мол, было изваяние, а теперь - стала Марья Ивановна. Многие верят ... © Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/page/499/#findComment-1287500
naxac 2 595 Опубликовано 1 Октября 2019 Поделиться Опубликовано 1 Октября 2019 (изменено) @Баба ЯГА, вот так только что попробовал, всё работает: Скрытый текст function ggg() local pos = db.actor:position() local vpos local n = 0 for i = 1, 595499 do -- для Кордона vpos = level.vertex_position(i) if vpos and vpos:distance_to_sqr(pos) < 9 then n = n + 1 log(i) end end log("found %s vertexes", n) end вот что получил: Скрытый текст 385291 386206 386207 386208 386209 386210 387120 387121 387122 387123 387124 387125 387126 388033 388034 388035 388036 388037 388038 388039 388945 388946 388947 388948 388949 388950 388951 389852 389853 389854 389855 389856 389857 389858 389859 390747 390748 390749 390750 390751 390752 390753 391639 391640 391641 391642 391643 391644 391645 392549 392550 392551 392552 found 53 vertexes Изменено 1 Октября 2019 пользователем naxac Аддон для ОП-2.09.2: Яндекс/Google/GitHub/Тема на AP-PRO Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/page/499/#findComment-1287502
Рекомендуемые сообщения
Создайте аккаунт или авторизуйтесь, чтобы оставить комментарий
Комментарии могут оставлять только зарегистрированные пользователи
Создать аккаунт
Зарегистрировать новый аккаунт в нашем сообществе. Это несложно!
Зарегистрировать новый аккаунтВойти
Есть аккаунт? Войти.
Войти