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/
Snork 163 8 Опубликовано 20 Июня 2014 Поделиться Опубликовано 20 Июня 2014 (изменено) Друзья, подскажите что написать на проверку визуала НПС, именно визуала, а не надетого костюма. Пример: если визуал green_stalker1(модель, а не текстура), то нпс не выполняет определённые действия. Я не соображу как сделать проверку по визуалу. Изменено 20 Июня 2014 пользователем Snork 163 Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/page/283/#findComment-855901
Dennis_Chikin 3 665 Опубликовано 20 Июня 2014 Поделиться Опубликовано 20 Июня 2014 local pk = net_packet() obj:STATE_Write( pk ) pk:r_seek( 0 ) pk:r_s32() -- money pk:r_stringZ() -- profile pk:r_s32() -- infammo pk:r_stringZ() -- class pk:r_s32() -- communityid pk:r_s32() -- rank pk:r_s32() -- reputation pk:r_stringZ() -- charname pk:r_u16() -- gvid pk:r_float() -- obf32u1 pk:r_s32() -- obs32u2 pk:r_s32() -- lvid pk:r_s32() -- oflags pk:r_stringZ() -- custom pk:r_s32() -- sid pk:r_s32() -- obs32u3 local vis = pk:r_stringZ() Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/page/283/#findComment-855902
Старлей 88 Опубликовано 20 Июня 2014 Поделиться Опубликовано 20 Июня 2014 (изменено) Dennis_Chikin, А это чья структура? Изменено 20 Июня 2014 пользователем Старлей Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/page/283/#findComment-855916
Dennis_Chikin 3 665 Опубликовано 20 Июня 2014 Поделиться Опубликовано 20 Июня 2014 Я не понял вопрос. Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/page/283/#findComment-855931
Карлан 1 050 Опубликовано 20 Июня 2014 Поделиться Опубликовано 20 Июня 2014 @Старлей, кэп намекает на сталкера, если конкретно, то в данном примере три класса, cse_alife_trader_abstract, cse_alife_object, и, собственно нужный нам - cse_visual. Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/page/283/#findComment-855934
Старлей 88 Опубликовано 21 Июня 2014 Поделиться Опубликовано 21 Июня 2014 Я предполагал, что это сталкер... Тогда вопрос в другом: откуда именно такой выбор типов переменных, под значения?(например pk:r_s32() -- money, почему s32?) Разве не такая структура? --========== cse_alife_trader_abstract ========== local money = packet:r_u32() local specific_character = packet:r_stringZ() local trader_flags = packet:r_h32() local character_profile = packet:r_stringZ() local community_index = packet:r_h32() local rank = packet:r_h32() local reputation = packet:r_h32() local character_name = packet:r_stringZ() --========== cse_alife_object ========== local game_vertex_id = packet:r_u16() local distance = packet:r_float() local direct_control = packet:r_u32() local level_vertex_id = packet:r_u32() local object_flags = packet:r_h32() local custom_data = packet:r_stringZ() local story_id = packet:r_s32() local spawn_story_id = packet:r_s32() --========== cse_visual ========== local visual_name = packet:r_stringZ() А главный вопрос, вот в чем: в самом начале у Dennis_Chikin signed int, а у меня в этой штуковине(из acdc) unsigned int. По идее байты из пакета считаются одинаково и ошибки никакой не будет. А что если при считывании у money будет значение выходящее из диапазона s32, но входящее в u32? К чему я это - получается можно читать пакеты, зная только кол-во байт под какую переменную определенно, а уж signed/unsigned нужно только, если работать с этими значениями? P.S. Код выше, из NetPacketCreator, и я сам то еще не пойму, что такое r_h32()?! Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/page/283/#findComment-855999
Dennis_Chikin 3 665 Опубликовано 21 Июня 2014 Поделиться Опубликовано 21 Июня 2014 Со знаком/без знака - в данном случае, скорее всего, без разницы. Читать, кстати, можно вообще сразу нужную переменную, если знать позицию. Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/page/283/#findComment-856006
Карлан 1 050 Опубликовано 21 Июня 2014 Поделиться Опубликовано 21 Июня 2014 (изменено) r_h32()Опечатка, такого нету. По крайней мере судя по документации, сам не проверял. а у меня в этой штуковине(из acdc) unsigned int Наверняка автор подразумевал, что отрицательного количества денег в оригинале игры быть не может.К чему я это - получается можно читать пакеты, зная только кол-во байт под какую переменную определенно, а уж signed/unsigned нужно только, если работать с этими значениями?Если я правильно понял вопрос, то да.Читать, кстати, можно вообще сразу нужную переменную, если знать позицию.В случае с визуалом сталкера, получение конкретно этого параметра будет весьма кривым кодом. Не уверен что работает, вот набросал: function GetVisual(obj) local packet = net_packet() local se_obj = alife():object(obj:id()) se_obj.STATE_Write(se_obj, packet) packet:r_advance(4) packet:r_stringZ() packet:r_advance(4) packet:r_stringZ() packet:r_advance(12) packet:r_stringZ() packet:r_advance(18) packet:r_stringZ() packet:r_advance(8) return packet:r_stringZ() end Разумеется можно считывать сразу длину строк и устанавливать позицию чтения сразу туда, куда нужно, но это сами сделайте, кому интересно. Изменено 21 Июня 2014 пользователем Карлан Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/page/283/#findComment-856009
Wlad777 24 Опубликовано 23 Июня 2014 Поделиться Опубликовано 23 Июня 2014 Знающие камрады, подскажите - есть ли способ закрепить кость у заспавненного скриптом предмета? Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/page/283/#findComment-856627
Карлан 1 050 Опубликовано 23 Июня 2014 Поделиться Опубликовано 23 Июня 2014 @Wlad777, не уверен, но можно попробовать заспавнить объект на основе physic_object или, если угодно, O_PHYS_S, и указать ему кость фиксации в стейт части (fixed_bones называется, тип - строка). Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/page/283/#findComment-856649
Wlad777 24 Опубликовано 24 Июня 2014 Поделиться Опубликовано 24 Июня 2014 @Карлан, спасибо за наводку. Разобрался, всё работает. Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/page/283/#findComment-856717
demon96 8 Опубликовано 24 Июня 2014 Поделиться Опубликовано 24 Июня 2014 Здравствуйте, как сделать выдачу сообщения на экран после выдачи инфопорции? Тоесть захожу в спейс рестриктор, он выдает инфопорцию и появляется сообщение на экране. Помогите Разобрался, вдруг кому будет нужно. Сделал я это так: 1.Регистрируем новую инфопорцию: <info_portion id="Имя инфопорции"> <action>Скрипт.Название_функции</action> </info_portion> При получении этой инфопорции срабатывает функция через скрипт. 2.В рестрикторе указываем такую логику: [logic] active = sr_idle [sr_idle] on_actor_inside = %+Имя инфопорции% END 3.Создаем скрипт с фунцией: function Название_фунции(actor, npc) news_manager.send_tip(actor, "%c[255,255,128,128] Текст сообщения %c[default]", nil, "stalker", nil, 30000) end Единственный вопрос, xr_sound.set_sound_play(npc, "rostok_kruglov_help_6") -- выдает вылет, если используется функция через рестриктор, через диалог все работает, как быть? Я так понял, что здесь указано npc ( как отправитель сообщения со звуком, как указать для регистра? Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/page/283/#findComment-856850
Карлан 1 050 Опубликовано 24 Июня 2014 Поделиться Опубликовано 24 Июня 2014 @demon96, вместо npc db.actor поставь и будет тебе счастье. Для выдачи сообщений за глаза хватит. Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/page/283/#findComment-856881
demon96 8 Опубликовано 24 Июня 2014 Поделиться Опубликовано 24 Июня 2014 @Карлан,спасибо) Вылет Expression : fatal error Function : CScriptEngine::lua_error File : E:\stalker\sources\trunk\xr_3da\xrGame\script_engine.cpp Line : 73 Description : <no expression> Arguments : LUA error: ...games\s.t.a.l.k.e.r\gamedata\scripts\xr_sound.script:17: attempt to index field '?' (a nil value) Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/page/283/#findComment-856890
Dennis_Chikin 3 665 Опубликовано 24 Июня 2014 Поделиться Опубликовано 24 Июня 2014 Для этого непися что-то должно быть в звуковом конфиге. Имеющее отношение к звуковым файлам по соответствующему пути. Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/page/283/#findComment-856897
demon96 8 Опубликовано 24 Июня 2014 Поделиться Опубликовано 24 Июня 2014 Еще один мучающий меня вопрос, как сделать при загрузке игры, загрузку внедренных скриптов, тоесть я создал сторонний скрипт и мне надо, чтоб он срабатывал от определенных действий, а не через диалог Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/page/283/#findComment-856900
Карлан 1 050 Опубликовано 24 Июня 2014 Поделиться Опубликовано 24 Июня 2014 (изменено) @demon96, http://www.amk-team.ru/forum/index.php?showtopic=7450&p=258470 здесь и http://www.amk-team.ru/forum/index.php?showtopic=7450&p=472142 здесь конкретно получишь ответ на "при загрузке игры", а уж "определенные действия" извини, не угадаем. @Wlad777, еще тебе подкину один метод, в классе physics_element есть метод fix(), намертво фиксирует гейм объект по указанной кости. Получать кость можно например методом get_element_by_bone_id, но для того, чтобы не путатся, лучше использовать get_element_by_bone_name. Замечу, что при перезагрузке фиксация так скажем теряется, так что нужно "перефиксировать" объект каждый раз при перезагрузке... В целом лучше конечно нет-пакет юзать, но я так, может кому надо будет. Вот можешь попробовать: function FixObj(Obj) local oObj if type(Obj) == 'userdata' then oObj = Obj end if type(Obj) == 'number' then oObj = level.object_by_id(Obj) end if oObj then local GetPhysShell = oObj:get_physics_shell() if GetPhysShell then local sElement = GetPhysShell:get_element_by_bone_name("link") if sElement and (not sElement:is_fixed()) then sElement:fix() end end end end Изменено 24 Июня 2014 пользователем Карлан Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/page/283/#findComment-856922
Wlad777 24 Опубликовано 25 Июня 2014 Поделиться Опубликовано 25 Июня 2014 В целом лучше конечно нет-пакет юзать, но я так, может кому надо будет. Я через нетпакет сделал. Для моих целей (подспавн небольшого кол-ва предметов по ходу сюжета, для более реалистичной "жизни Зоны") хватает абсолютно. Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/page/283/#findComment-857128
nikita_nz1986 130 Опубликовано 26 Июня 2014 Поделиться Опубликовано 26 Июня 2014 (изменено) Люди, всем привет, такая проблема: я создал сталкера снайпера, всё в норме, но когда я с ним поговорю, отхожу далеко, то он не хочет становится в прежнюю анимацию, просто стоит, потирает ладони. Вопрос: как это исправить? Делал через all.spawn ;SNIPER ADDON ;Меченый(Стрелок)[logic]active = remark@search[remark@fire]combat_ignore_cond = {!is_enemy_actor}radius = 0anim = hideon_info = {=health_le(0.5)} remark@searchwounded = wounded@worksniper = true[smart_terrains]none = true[remark@search]combat_ignore_cond = truecombat_ignore_keep_when_attacked = falseanim = hidetarget = actoron_info = {=see_actor} remark@firewounded = wounded@work[wounded@work]hp_state = 0|wounded_heavy@help_heavyhp_state_see = 0|wounded_heavy@help_heavyhp_victim = 0|nilhp_fight = 0|falsehp_cover = 0|false @nikita_nz1986, Вопрос исчерпан. Изменено 1 Июля 2014 пользователем Kirgudu Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/page/283/#findComment-857219
J.A.A. 2 Опубликовано 28 Июня 2014 Поделиться Опубликовано 28 Июня 2014 Ребята, подскажите, как вызвать удар в морду через диалог? А то я прописываю: <action>dialogs.punch</action> и ловлю вылет (система ругается на скрипт). @nikita_nz1986, cделай так: [logic] active = camper@search[remark@fire] anim = hide_fire target = actor combat_ignore_cond = truewounded = wounded@work [camper@search] path_walk =1_walk path_look = 1_look combat_ignore_cond = trueon_actor_dist_le = 5| remark@firewounded = wounded@work def_state_standing = hide [wounded@work]hp_state = 0|wounded_heavy@help_heavyhp_state_see = 0|wounded_heavy@help_heavyhp_victim = 0|nilhp_fight = 0|falsehp_cover = 0|false [smart_terrains] none = true Не забудь прописать точки "1_walk" и "1_look". Тогда по умолчанию твой НПС будет стоять и целиться в заданную точку, при приближении ГГ на 5 метров, он начнёт целиться в него, а если ГГ - враг, то начнёт стрелять. А с юзанием всё будет в порядке. Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/page/283/#findComment-857835
Рекомендуемые сообщения
Создайте аккаунт или авторизуйтесь, чтобы оставить комментарий
Комментарии могут оставлять только зарегистрированные пользователи
Создать аккаунт
Зарегистрировать новый аккаунт в нашем сообществе. Это несложно!
Зарегистрировать новый аккаунтВойти
Есть аккаунт? Войти.
Войти