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/
Dennis_Chikin 3 665 Опубликовано 19 Июня 2018 Поделиться Опубликовано 19 Июня 2018 А зачем вообще нужен сид для меток ? И, блин, КАК ??? Солянка обезжиренная, диетическая, полезные советы по "солянке", текущий тестовый патч Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/page/457/#findComment-1184931
Egor4ikModMaker 8 Опубликовано 19 Июня 2018 Поделиться Опубликовано 19 Июня 2018 6 часов назад, _Val_ сказал: zip.add_npc("uchen_10", 26.068271636963,-11.718555450439,-272.28005981445,51614,1480, "[logic]\ncfg = scripts\\terra_npc\\yantar\\yan_uchen_1.ltx", 12505 Интересует следущее, это скриптовая ф-ция? Подскажите Чайнику, что с этим делать? ( ну координаты свои поставлю, путь к логике тоже свой, а дальше? ) [Eger.Overkill] // Ⓐ // Eкьюалити / Uнити // ☮ "Burn the rich // eat the rich" О себе : Какой-то Ноунэйм с олд форума , заядлый нарушитель общественного порядка и правил , рецидивист. Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/page/457/#findComment-1184985
_Val_ 2 793 Опубликовано 20 Июня 2018 Поделиться Опубликовано 20 Июня 2018 Не дальше, а сначала... Поставить и подключить модули нет_пакетов. Сделать свой скрипт(у нас это zip). Прописать там собственно саму функцию спавна. -- спавн НПС, возвращает серверный объект -- custom и sid - опциональные параметры. -- пример вызова zip.add_npc("bar_leha", x, y, z, lv, gv, "[logic]\ncfg = scripts\\foto\\bar\\leha.ltx", 30334) function add_npc(section, pos_x, pos_y, pos_z, lvid, gvid, custom, sid) local sim = alife() local sobj = sim:create(section, vector():set(pos_x,pos_y,pos_z), lvid, gvid) if sobj and (custom or sid) then local pk = get_netpk(sobj,1) if pk:isOk() then local data = pk:get() if custom then data.custom_data:setString(custom) end if sid then dct.store_sid(sid,sobj.id) -- сохраним сид end pk:set(data) end end --printd("create %s ID = %d",section,sobj.id) return sobj end Краткий гид по моду Тайные Тропы 2 ПАРТИКЛЫ TERRA Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/page/457/#findComment-1185007
AndreySol 215 Опубликовано 20 Июня 2018 Поделиться Опубликовано 20 Июня 2018 (изменено) 4 часа назад, _Val_ сказал: if sid then dct.store_sid(sid,sobj.id) -- сохраним сид end Ну тогда уж и store_sid из dct выкладывай, все равно спросят... Да и про модули нет-пакетов стоит сразу указать что за авторством Artos'а должны быть, судя по синтаксису методов... Изменено 20 Июня 2018 пользователем AndreySol Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/page/457/#findComment-1185041
_Val_ 2 793 Опубликовано 20 Июня 2018 Поделиться Опубликовано 20 Июня 2018 1 час назад, AndreySol сказал: тогда уж и store_sid из dct выкладывай Думаю, это относится к - 6 часов назад, _Val_ сказал: Поставить и подключить модули нет_пакетов Краткий гид по моду Тайные Тропы 2 ПАРТИКЛЫ TERRA Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/page/457/#findComment-1185061
Dennis_Chikin 3 665 Опубликовано 20 Июня 2018 Поделиться Опубликовано 20 Июня 2018 local obj, t, cd for i, v in ipairs( { -- НЕ "ОПТИМИЗИРОВАТЬ" ! Конфиги жрут, и читаются медленнее ! { "respawn_atp_disk_bandit2", 834395, 2851, "\n[logic]\nactive=walker\n[walker]\npath_walk=atp_disk_bandit_walk11\npath_look=atp_disk_bandit_look11" }, { "respawn_atp_disk_bandit1", 838425, 2851, "\n[logic]\nactive=walker\n[walker]\npath_walk=atp_disk_bandit_walk12\npath_look=atp_disk_bandit_look12" }, { "respawn_atp_disk_bandit2", 895677, 2851, "\n[logic]\nactive=walker\n[walker]\npath_walk=atp_disk_bandit_walk13\npath_look=atp_disk_bandit_look13" }, { "respawn_atp_disk_bandit1", 897708, 2851, "\n[logic]\nactive=walker\n[walker]\npath_walk=atp_disk_bandit_walk14\npath_look=atp_disk_bandit_look14" }, { "respawn_atp_disk_bandit2", 785290, 2846, "\n[logic]\nactive=walker\n[walker]\npath_walk=atp_disk_bandit_walk15\npath_look=atp_disk_bandit_look15" }, { "respawn_atp_disk_bandit1", 782279, 2846, "\n[logic]\nactive=walker\n[walker]\npath_walk=atp_disk_bandit_walk16\npath_look=atp_disk_bandit_look16" }, { "respawn_atp_disk_bandit2", 709736, 2841, "\n[logic]\nactive=walker\n[walker]\npath_walk=atp_disk_bandit_walk17\npath_look=atp_disk_bandit_look17" }, { "respawn_atp_disk_bandit1", 936206, 2855, "\n[logic]\nactive=walker\n[walker]\npath_walk=atp_disk_bandit_walk18\npath_look=atp_disk_bandit_look18" }, } ) do obj = sim:create( v[1], level.vertex_position( v[2] ), v[2], v[3] ) if obj then obj = sim:object( obj.id ) if obj then t = get_npc_data( obj ) t.custom = t.custom .. v[4] set_npc_data( t, obj ) obj.smart_none = true end end end ЧДЯНТ ? (С) И, кстати, какая все-таки функция ставит метку по sid ? upd: А вот, кстати, с использованием олспавна: function check_spawn3() if actor:dont_has_info( "spawn_hospit_live" ) then local obj = sim:object( "hospital_muha_trup" ) if obj then sim:release( obj, true ) end obj = sim:create( 10008 ) if obj then local t = get_npc_data( obj ) t.custom = "[dont_spawn_loot]\n" set_npc_data( t, obj ) local p = obj.position p.x, p.y, p.z = -95.5, 29, 566.9 obj.position = p obj.death_call = muha_up -- obj.death_droped = true end -- level.add_call( muha_up, dummy ) muha_pp = particles_object( "static\\zharka_buble_idle" ) if muha_pp then muha_pp:play_at_pos( vector():set( -95.6, 28.3, 566.6 ) ) end local p for i, v in ipairs( { { "anomaly2\\studen_idle_bottom000", vector():set( -94.7, 28.2, 565.5 ) }, { "anomaly2\\studen_idle_bottom000", vector():set( -94.7, 28.3, 566.4 ) }, { "anomaly2\\studen_idle_bottom000", vector():set( -95.1, 28.4, 566.6 ) }, { "anomaly2\\studen_idle_bottom000", vector():set( -95.0, 28.4, 567.4 ) } } ) do p = particles_object( v[1] ) if p then p:play_at_pos( v[2] ) table_insert( t_muha_pp, p ) end end if actor:dont_has_info( "spawn_kamen_udachy" ) then for i, v in ipairs( { { "anomaly2\\studen_idle_bottom000", vector():set( -95.5, 32.5, 613.7 ) }, { "anomaly2\\studen_idle_bottom000", vector():set( -96.0, 32.6, 614.6 ) }, { "anomaly2\\studen_idle_bottom000", vector():set( -95.5, 32.6, 615.5 ) }, -- { "anomaly2\\studen_idle_bottom000", vector():set( -94.1, 32.5, 615.6 ) }, -- { "anomaly2\\studen_idle_bottom000", vector():set( -93.6, 32.4, 614.9 ) }, -- { "anomaly2\\studen_idle_bottom000", vector():set( -92.8, 32.3, 614.2 ) }, -- { "anomaly2\\studen_idle_bottom000", vector():set( -92.3, 32.3, 614.8 ) }, -- { "anomaly2\\studen_idle_bottom000", vector():set( -91.7, 32.3, 615.7 ) } } ) do p = particles_object( v[1] ) if p then p:play_at_pos( v[2] ) table_insert( t_stone_pp, p ) end end end end if actor:dont_has_info( "father_pant_say_start" ) then if not sim:object( "hospital_pantera_girl" ) then sim:create( 9998 ) end if actor:has_info( "real_dok_and_father_spawn" ) then if not sim:object( "hosp_father" ) then sim:create( 9980 ) end end end if actor:has_info( "real_dok_and_father_spawn" ) then add_ports( "real_dok_and_father_spawn", true ) if not sim:object( "hosp_real_bl_dok" ) then sim:create( 9979 ) end if sim:object( "hospital_bl_dok" ) then _util.release_npc( "hospital_bl_dok" ) end elseif not sim:object( "hospital_bl_dok" ) then sim:create( 9978 ) end for k, v in pairs( { ["hos_no_gulag_verh_black2"] = 9982, ["hos_no_gulag_verh_black3"] = 9983, ["hos_no_gulag_nad_black4"] = 9986, ["hospital_black_stalk3"] = 9989, ["hospital_black_stalk1"] = 9990, ["hospital_black_stalk2"] = 9991, ["hospital_sapsan"] = 9993, ["hos_black_niz_rayt"] = 9996, ["hos_black_niz_left"] = 9997, } ) do if not sim:object( k ) then sim:create( v ) end end if actor:dont_has_info( "prodaznay_tvar" ) and actor:dont_has_info( "spawn_hospit_live" ) then add_ports( "spawnim_3otsek", true ) end end Адовы тучи неписей, аномалий, телепортов и еще неведомой некро-сами-знаете-чего. Но все - "одноразовое", нужно только когда актор на локе и только при соблюдении определенных условий. Солянка обезжиренная, диетическая, полезные советы по "солянке", текущий тестовый патч Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/page/457/#findComment-1185088
Egor4ikModMaker 8 Опубликовано 20 Июня 2018 Поделиться Опубликовано 20 Июня 2018 (изменено) 1 час назад, _Val_ сказал: Поставить и подключить модули нет_пакетов И как их подключить? (Upd:можно как нибудь по проще , сделать что-то для установки метки на НПс ? ) Изменено 20 Июня 2018 пользователем Egor4ikModMaker [Eger.Overkill] // Ⓐ // Eкьюалити / Uнити // ☮ "Burn the rich // eat the rich" О себе : Какой-то Ноунэйм с олд форума , заядлый нарушитель общественного порядка и правил , рецидивист. Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/page/457/#findComment-1185093
h0N0r 416 Опубликовано 21 Июня 2018 Поделиться Опубликовано 21 Июня 2018 Немного попроще, сделать спецметку в \ui\map_spots.xml, <green_location_store store="1"> <level_map spot="green_spot" pointer="quest_pointer"/> <mini_map spot="green_mini_spot" pointer="quest_pointer"/> </green_location_store> store="1" - сохранять ли отметку при сохранении игры (если не задано, не сохраняется), может отсутствовать.ttl="3" - время жизни отметки (например подсветить на несколько секунд объект, и не заботиться о том, чтобы потом снять), может отсутствовать.no_offline="1" - не показывать отметку, если объект в offline (если не задано, показывается), может отсутствовать.hint="general_wounded" - подсказка, при наведении, может отсутствовать. Ставить метку через map_add_object_spot(number, string, string), но нужна функция, чтобы получить секцию / профиль нпс и передать полученное в number. https://sites.google.com/view/xray-sdk-0-4-smg Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/page/457/#findComment-1185217
Dennis_Chikin 3 665 Опубликовано 21 Июня 2018 Поделиться Опубликовано 21 Июня 2018 "чтобы получить секцию / профиль нпс и передать полученное в number." А-ааа ! Зачем ??? Если мы его сами создаем - ид мы получаем при создании. Если мы знаем имя - мы получаем объект, и из него - ид. Если это непись, получившийся в результате работы респавнера - этот непись под смартом, и мы достаем его ид из смарта. Секцию и профиль - это надо перебирать все от 1 до 65534, и проверять для каждого существующего, но, зачем ??? 2 Солянка обезжиренная, диетическая, полезные советы по "солянке", текущий тестовый патч Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/page/457/#findComment-1185219
Egor4ikModMaker 8 Опубликовано 22 Июня 2018 Поделиться Опубликовано 22 Июня 2018 20 часов назад, h0N0r сказал: Ставить метку через map_add_object_spot(number, string, string), но нужна функция, чтобы получить секцию / профиль нпс и передать полученное в number. А можно полную ф-цию , я в скриптах не шарю , так что прошу помощи у вас. Просто хочу сделать что бы адекватно как у всех , работали квесты с указанием на карте. где же стоит этот нпс. [Eger.Overkill] // Ⓐ // Eкьюалити / Uнити // ☮ "Burn the rich // eat the rich" О себе : Какой-то Ноунэйм с олд форума , заядлый нарушитель общественного порядка и правил , рецидивист. Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/page/457/#findComment-1185354
Daedra 0 Опубликовано 22 Июня 2018 Поделиться Опубликовано 22 Июня 2018 Прошу помощи у опытных скриптеров. Хочу слегка разнообразить игровой процесс Теней Чернобыля и поставить на чистую игру мод на случайные награды за задания. Как конфиг отредактировать под измененные награды за задания, я знаю, но тогда все равно буду знать, что именно дадут за выполненное задание. Пытался в обычный скрипт "task_manager" адаптировать коды, взятые из АМК или Симбиона, но все безуспешно. Может кто-нибудь подсказать, как правильно написать коды в нужных массивах или дать ссылку на готовый скрипт под чистый Stalker: SOC? Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/page/457/#findComment-1185371
Dennis_Chikin 3 665 Опубликовано 22 Июня 2018 Поделиться Опубликовано 22 Июня 2018 Короче, по обоим постам: "стол заказов" - "сделайте мне мод" - не здесь. По тому что даже если вам сделают мод с меткой на карте, где стоит какой-то непись, и раздает всем мимопроходящим рэндомные награды - все равно окажется, что это не тот непись, и вообще оно у вас "почему-то" не запускается. Тем более, что вполне конретные примеры по обоим вопросам как раз были на последних страницах, но полностью проигнорированы. Не разбираетесь - да, совершенно верно - берите тот же amk-мод, благо, он маленький по нынешним временам, или "симбион", который вообще создавался как образец "академического" стиля - по сути, именно, чтобы на его примере все и изучать, и разбирайтесь, как что работает, пока не будет достигнут хоть минимум понимания. Вот возникнут конкретные вопросы - на них хоть ответить можно будет как-то, вместо того, чтобы все бросить, и срочно делать вам мод. 1 Солянка обезжиренная, диетическая, полезные советы по "солянке", текущий тестовый патч Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/page/457/#findComment-1185388
AndreySol 215 Опубликовано 22 Июня 2018 Поделиться Опубликовано 22 Июня 2018 @Egor4ikModMaker, загляни в тему "Уроки по модостроению", не-поленись, пролистай всю, там есть и то что тебе нужно. Цитата где же стоит этот нпс Для квестов, которые прописаны в xml-описаниях, используется пара(сет) "число=строка", которые прописаны в game_story_ids.ltx(лежит в корне папки config). Смотри как это сделано в оригинале, и делай по подобию. Выложи код, который ты наваял, и сообщи что ты хотел от него. Кто нить подскажет\направит\научит. А на простые заказы в стиле "хочу чтоб было вот так..." товарищ DC уже изъяснил политику партии... Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/page/457/#findComment-1185448
Egor4ikModMaker 8 Опубликовано 22 Июня 2018 Поделиться Опубликовано 22 Июня 2018 Хорошо господа, последовав вашему совету , я постараюсь более точнее излагать свои мысли, и более конкретнее вопросы. Изходя из поста Хикса ( пост ниже) https://www.amk-team.ru/forum/topic/6458-uroki-po-modostroeniyu/?page=3&tab=comments#comment-630233 Я пытаюсь понять : ( может я просто глупый и не нашел спойлер, но мне было бы привычно делать раскрывающимся текстом. ) Так что простите за километровое сообщение . - function add_lchanger_location() local sim = alife() if sim then -- escape - здесь идет вроде как пояснение , какая локация local obj = sim:story_object(91) - сюда надо записать присвоенный стори_ид if obj then level.map_add_object_spot(obj.id, "level_changer", "to_garbage") - конкретно эта часть вроде как отвечает за постановку метки, на карте. (Собственно здесь я немного путаюсь , т.к - автор ( Хикс) сперва пишет что типы меток пишутся в первые кавычки (т.е надпись level_changer) (им же указанные - crlc_big – большой белый круг; crlc_mdl – средних размеров круг; crlc_small – маленький кружок. ) Но , позже я запутался, потому что он написал - Теперь можно тип метки указывать ”primary_object”. Куда это указывать , я так и не понял , если второе слово в кавычках , это вроде как название (здесь to_garbage это дословно - переход к свалке.) Меня интересует следущее - можно без ковыряния алл.спавн-а , указать координаты, и сделать все эти махинации через скрипты? Да , для меня это правда сложно. Только на вас надеюсь. end [Eger.Overkill] // Ⓐ // Eкьюалити / Uнити // ☮ "Burn the rich // eat the rich" О себе : Какой-то Ноунэйм с олд форума , заядлый нарушитель общественного порядка и правил , рецидивист. Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/page/457/#findComment-1185468
Dennis_Chikin 3 665 Опубликовано 22 Июня 2018 Поделиться Опубликовано 22 Июня 2018 Повторюсь еще раз: если мы знаем sid объекта, то уж его имя мы тем более знаем. Если не знаем ни того, ни другого - на этом приплыли. Дальше получаем собственно объект - ради его ид. Как здесь - local obj = sim:story_object(91) Кстати, совершенно лишние манипуляци: local sim = alife() if sim then, поскольку запускать нечто подобное до запуска собственно alife() - занятие в высшей степени странное. Или, по имени local obj = sim:object( "как_он_там_называется" ) Далее, собственно, ставится метка: level.map_add_object_spot(obj.id, "level_changer", "to_garbage") Первое - ид, ради которого городился весь предшествующий огород. Тип метки - из того, что прописано в gamedata\config\ui\map_spots.xml - то есть, всякие синие, желтые, и зеленые и прочие кракозябры, которые будут рисоваться на карте. Ну и произвольный текст, который будет выводиться при тыкании в кракозябры мышой. Никаких координат для метки задать нельзя. Ставится ТОЛЬКО на что-то существующее. Есть вариант с перебором всего-всего, и установкой меток на все, что кажется подходящим. Типа такого: function set_spots() -- local obj = sim:object( "old_doc_4" ) -- if obj then -- level.map_add_object_spot( obj.id, "artefact_location", obj:name() .. " y:" .. obj.position.y ) -- end local c_af = clsid.artefact -- clsid.artefact_s == electric_ball local c_ibox = clsid.inventory_box local obj, gvid, cls_id for i = 1, 65534 do obj = sim:object( i ) if obj then cls_id = obj:clsid() if cls_id == c_af then if obj.parent_id == 65535 then -- арты gvid = obj.m_game_vertex_id if gg:valid_vertex_id( gvid ) then if gg:vertex( gvid ):level_id() == level_id then log( "info", "found art: %s ( %.02f, %.02f, %.02f )", obj:name(), obj.position.x, obj.position.y, obj.position.z ) level.map_add_object_spot( i, "artefact_location", obj:name() .. " y:" .. obj.position.y ) end end end elseif cls_id == c_ibox -- and not онлайновый_ящик:is_inv_box_empty() and ( string_sub( obj:section_name(), 1, 1 ) == "m" or string_sub( obj:section_name(), 1, 1 ) == "e" ) -- and string_sub( obj:section_name(), 1, 1 ) ~= "m" and obj.position.y >= -290 -- ящики Бака then -- тайники gvid = obj.m_game_vertex_id if gg:valid_vertex_id( gvid ) then if gg:vertex( gvid ):level_id() == level_id then -- log( "info", "found treasure: %s", obj:name() ) local ini = obj:spawn_ini() if ini and ini:section_exist( "logic" ) and ini:line_exist( "logic", "actor_item" ) then level.map_add_object_spot( i, "habar_location", obj:name() .. " y:" .. obj.position.y ) else level.map_add_object_spot( i, "habar_clear_location", --"treasure" obj:name() .. " y:" .. obj.position.y ) end --local item = level.object_by_id( i ) --if item then amk_particle.amk_particle( { -- ["obj"] = item, ["looped"] = true, -- ["particle"] = "explosions\\campfire_grill" } ) --end end end elseif cls_id == 89 then gvid = obj.m_game_vertex_id if gg:valid_vertex_id( gvid ) then if gg:vertex( gvid ):level_id() == level_id then local ini = obj:spawn_ini() if ini and ini:section_exist( "drop_box" ) then -- log( "info", "found drop_box: %s", obj:name() ) level.map_add_object_spot( i, "green_location", obj:name() ) end end end -- elseif c_anoms[cls_id] then -- gvid = obj.m_game_vertex_id -- if gg:valid_vertex_id( gvid ) then -- if gg:vertex( gvid ):level_id() == level_id then -- level.map_add_object_spot( i, "alife_combat_attack", obj:name() ) -- end end -- elseif cls_id == clsid.controller_s then -- gvid = obj.m_game_vertex_id -- if gg:valid_vertex_id( gvid ) then -- if gg:vertex( gvid ):level_id() == level_id then -- level.map_add_object_spot( i, "defend_lager_location", obj:name() ) -- log( "info", "found: %s ( %.02f, %.02f, %.02f )", obj:name(), -- obj.position.x, obj.position.y, obj.position.z ) -- end end elseif string.sub( obj:section_name(), 6, 10 ) == "ameba" then gvid = obj.m_game_vertex_id if gg:valid_vertex_id( gvid ) then if gg:vertex( gvid ):level_id() == level_id then level.map_add_object_spot( i, "alife_combat_attack", obj:name() ) log( "info", "found: %s ( %.02f, %.02f, %.02f )", obj:name(), obj.position.x, obj.position.y, obj.position.z ) end end -- elseif obj:section_name() == "lights_hanging_lamp" then -- gvid = obj.m_game_vertex_id -- if gg:valid_vertex_id( gvid ) then -- if gg:vertex( gvid ):level_id() == level_id then -- level.map_add_object_spot( i, "defend_lager_location", obj:name() ) -- log( "info", "found: %s ( %.02f, %.02f, %.02f )", obj:name(), -- obj.position.x, obj.position.y, obj.position.z ) -- end end -- elseif obj:name() == "muha_hosp_live" then -- вписать ненужное -- log( "info", "found: %s ( %.02f, %.02f, %.02f ), lv: %s", obj:name(), -- obj.position.x, obj.position.y, obj.position.z, -- ( gg:valid_vertex_id( obj.m_game_vertex_id ) -- and gg:vertex(sobj_gv):level_id() ) or "n/a" ) -- level.map_add_object_spot( i, "defend_lager_location", obj:name() ) end end end end Далее - тему "справочник по функциям и классам" в руки, и разбираемся с тем, что непонятно. Дублировать все посты оттуда сюда, вместе с руководством по LUA - уже перебор. 1 Солянка обезжиренная, диетическая, полезные советы по "солянке", текущий тестовый патч Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/page/457/#findComment-1185544
Egor4ikModMaker 8 Опубликовано 23 Июня 2018 Поделиться Опубликовано 23 Июня 2018 (изменено) Собственно если я правильно понял, получается что ф-ция должна принимать следующий вид: (поправьте если не так) function add_lchanger_location() local obj = sim:object("es_andrew") - по имени , как пояснили (Указал из профиля, нпс) if obj then level.map_add_object_spot(obj.id, "12000", "Андрюха") (если все правильно понял , то первое это ид - из game_story_ids, а второе - это то , что появится на карте если навести на отметку. end Изменено 23 Июня 2018 пользователем Egor4ikModMaker [Eger.Overkill] // Ⓐ // Eкьюалити / Uнити // ☮ "Burn the rich // eat the rich" О себе : Какой-то Ноунэйм с олд форума , заядлый нарушитель общественного порядка и правил , рецидивист. Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/page/457/#findComment-1185584
Egor4ikModMaker 8 Опубликовано 23 Июня 2018 Поделиться Опубликовано 23 Июня 2018 Я может совсем дегенерат , но я собственно ловлю вылет (но по мимо этого я добавил в диалог экш на вызов этой ф-ции ( <action>level_tasks.andrew_at_map</action> ) по этой ф-ции, (Прописал ее как было указано в level_tasks.script) Ф-ция function andrew_at_map() local obj = sim:object("es_andrew") if obj then level.map_add_object_spot(obj.id, "12000", "Андрюха") end Log: Expression : fatal error Function : CScriptEngine::lua_error File : E:\stalker\patch_1_0004\xr_3da\xrGame\script_engine.cpp Line : 73 Description : <no expression> Arguments : LUA error: ...- Èñòèííûé ïóòü\gamedata\scripts\bind_stalker.script:194: attempt to index global 'level_tasks' (a nil value) [Eger.Overkill] // Ⓐ // Eкьюалити / Uнити // ☮ "Burn the rich // eat the rich" О себе : Какой-то Ноунэйм с олд форума , заядлый нарушитель общественного порядка и правил , рецидивист. Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/page/457/#findComment-1185585
WinCap 324 Опубликовано 23 Июня 2018 Поделиться Опубликовано 23 Июня 2018 (изменено) @Egor4ikModMaker function andrew_at_map() local obj = alife():object("es_andrew") if obj then level.map_add_object_spot(obj.id, "green_location", "Андрюха") end end Изменено 23 Июня 2018 пользователем WinCap 2 S.T.A.L.K.E.R. CoP Objects >200 шт (upd 21.05.26) - Скачать (Яндекс-диск) Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/page/457/#findComment-1185603
h0N0r 416 Опубликовано 23 Июня 2018 Поделиться Опубликовано 23 Июня 2018 В 22.06.2018 в 06:15, Egor4ikModMaker сказал: А можно полную ф-цию , я в скриптах не шарю , так что прошу помощи у вас. Просто хочу сделать что бы адекватно как у всех , работали квесты с указанием на карте. где же стоит этот нпс. Скрытый текст Вот такую функцию добавь в конец xr_effects.script, function add_spot_to_npc(actor, npc, p) if p[1] == nil then abort("Invalid parameter in function 'add_spot_to_npc', enter the profile_name!") end if p[2] == nil then abort("Invalid parameter in function 'add_spot_to_npc', enter the mapspot from map_spots.xml!") end if p[3] == nil then abort("Invalid parameter in function 'add_spot_to_npc', enter the hint!") end for a=1,65535,1 do local obj = alife():object(a) if obj and IsStalker(obj) and obj:profile_name() == p[1] then level.map_add_object_spot(obj.id, p[2], tostring(p[3])) end end end Потом её можно будет вызвать из любого другого скрипта: function my() ... xr_effects.add_spot_to_npc(nil, nil, {"bar_ecolog_professor", "blue_location", "ros_kruglov_name"}) ... end bar_ecolog_professor - профиль из \gameplay\character_desc_.xml blue_location - вид метки из \ui\map_spots.xml ros_kruglov_name - имя (если есть, но не используем при GENERATE_NAME_) из \gameplay\character_desc_.xml. Можно свой текст (типа kruglov_4udila_pret_v_anomaluu), но так игнорируются пробелы, так что, если длинная подсказка, то делаем в \text\rus\string_table_mapspots_.xml свою и используем её ид. Также можно вызвать из любого файла логики (нпс, объекты): логика рестриктора, [logic] active = sr_idle@start [sr_idle@start] on_info = {+bar_rescue_research_start} sr_idle@end %=add_spot_to_npc(bar_ecolog_professor:blue_location:ros_kruglov_name)% [sr_idle@end] Но всё это фигня, лучше скачай себе acdc (поставишь сид), сможешь нормально ставить метки. Ещё и сдк установи, а то сегодня метки, завтра локи править понадобиться. https://sites.google.com/view/xray-sdk-0-4-smg Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/page/457/#findComment-1185609
Dennis_Chikin 3 665 Опубликовано 23 Июня 2018 Поделиться Опубликовано 23 Июня 2018 58 минут назад, h0N0r сказал: for a=1,65535,1 do local obj = alife():object(a) if obj and IsStalker(obj) and obj:profile_name() == p[1] И получаем метки на ВСЕХ неписях с таким профилем. Кстати, как раз случай, где ссылку на alife() можно получить до for ... И, кстати, 65535 - это земля. Второе - если мы получили что-то для какого-то i. и это то, что нам нужно, то level.map_add_object_spot( i, ...) И, наконец, if obj and obj:profile_name and obj:profile_name() == p[1] then Но я все равно не понимаю, как можно знать сид и профиль, не зная просто имя. Какая-то странная телепатия... Солянка обезжиренная, диетическая, полезные советы по "солянке", текущий тестовый патч Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/page/457/#findComment-1185613
Рекомендуемые сообщения
Создайте аккаунт или авторизуйтесь, чтобы оставить комментарий
Комментарии могут оставлять только зарегистрированные пользователи
Создать аккаунт
Зарегистрировать новый аккаунт в нашем сообществе. Это несложно!
Зарегистрировать новый аккаунтВойти
Есть аккаунт? Войти.
Войти