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 Ссылка на комментарий
Desertir 202 Опубликовано 27 Июня 2016 Поделиться Опубликовано 27 Июня 2016 @Nazgool, скорее continue. Без него некоторые циклы вырастают во вложенности очень сильно. PS: goto ТЧ 1.0004. SAP и Trans mod github Ссылка на комментарий
Zander_driver 10 343 Опубликовано 27 Июня 2016 Поделиться Опубликовано 27 Июня 2016 Как тебе такое? Когда программист что-то пишет, возможны три результата. 0: Все работает относительно идеально 1: Все более-менее работает. Далеко не идеал но сойдет, причина - программисту лень/наплевать на юзеров/мало заплатили/еще что нибудь вставить что понравится. 2: Все более-менее работает. Далеко не идеал но сойдет, причина - программист недостаточно опытен и умел, чтобы сделать лучше. В описанном случае - явный случай из 1 или 2. Какой именно - понятия не имею. Еще возможен (и на самом деле повсеместно и на каждом шагу происходит) такой случай. Программист написал творение, соответствующее варианту 0. Затем прошло время, требования к продуктам такого рода возросли. И тот же самый продукт уже соответствует случаю 2. Просто в те годы не было настолько опытных программистов чтобы сделать вот так Что тогда может делать программист? Он же написал творение по сценарию 0. оно идеально. Было... теперь уже не очень... Он может уже 2 варианта. 0: повышать свою квалификацию и вновь вытаскивать свой код на уровень идеала 1: ему лень заморачиваться / мало платят / появились другие интересы и он говорит юзерам "и так сойдет, терпите" В выше приведенном случае - финальный вариант 1. 1 Мод, где не бывает одинаковых путей - Судьба Зоны. (Лучшее, что у меня получилось на X-Ray) На базе модифицированного движка OGSR Engine. Бывший мододел на X-Ray / Начинающий игродел на Unreal Engine. Программист. AMD Ryzen 9 7950X (16 ядер, 32 потока, 5.75 ГГц); RTX 3080; 128 ГБ DDR5; Arctic Liquid Freezer II-420; 3 ТБ SSD PCIe 4.0; 4ТБ HDD. Ссылка на комментарий
Sla-Sla 43 Опубликовано 28 Июня 2016 Поделиться Опубликовано 28 Июня 2016 (изменено) Всем привет, у меня такая проблема: зарегистрировал на GUI кнопки, сделал, чтобы они появлялись в зависимости от класса выбранного предмета из списка, но работает только кнопка использования В методе InitControls() self.btn_use:Show(false)self.btn_slot_1:Show(false)self.btn_slot_2:Show(false)self.btn_drop:Show(true)В функции клика по итему в спискеlocal index, item, objif self.list:GetSize() == 0 thenreturnendindex = self.list:GetSelectedItem()if index == -1 or index == nil thenreturnenditem = self.list:GetItem(index)if item == nil thenreturnendobj = item:GetSection()if obj ~= nil thenplay_sound_actor([[interface\inv_select]],db.actor, 0, 1.0)for i = 1, #tEatableClasses doif get_clsid(obj) == tEatableClasses thenself.btn_use:Show(true)endendfor s = 1, #tPistolClasses doif get_clsid(obj) == tPistolClasses thenself.btn_slot_1:Show(true)endendfor a = 1, #tRifleClasses doif get_clsid(obj) == tRifleClasses[a] thenself.btn_slot_2:Show(true)endendendТаблицы с классами local tPistolClasses = { clsid.wpn_hpsa, clsid.wpn_pm, clsid.wpn_fort, clsid.wpn_usp45, clsid.wpn_walther } local tRifleClasses = { clsid.wpn_ak74, clsid.wpn_lr300, clsid.wpn_shotgun, clsid.wpn_svd, clsid.wpn_svu, clsid.wpn_rpg7, clsid.wpn_val, clsid.wpn_vintorez, clsid.wpn_groza } local tEatableClasses = { clsid.obj_medkit, clsid.obj_bottle, clsid.obj_bandage, clsid.obj_antirad, clsid.obj_food } В чем же мой косяк? Изменено 28 Июня 2016 пользователем Sla-Sla Ссылка на комментарий
Charsi 440 Опубликовано 28 Июня 2016 Поделиться Опубликовано 28 Июня 2016 @Sla-Sla, заполняй таблицы так: local tPistolClasses = { [clsid.wpn_hpsa] = true, [clsid.wpn_pm] = true, [clsid.wpn_fort] = true, [clsid.wpn_usp45] = true, [clsid.wpn_walther] = true } а видимость устанавливай так: self.btn_slot_1:Show( tPistolClasses[obj:clsid()]~=nil ) 1 1 Lua и LuaJIT плагины для Notepad++ SciTE-RU 3.5.5 плагины для MilkShape3D Ссылка на комментарий
Sla-Sla 43 Опубликовано 28 Июня 2016 Поделиться Опубликовано 28 Июня 2016 @Charsi, не помогло, как и раньше, появляется только btn_use. Может классы неправильно указал? Ссылка на комментарий
Charsi 440 Опубликовано 28 Июня 2016 Поделиться Опубликовано 28 Июня 2016 Конечно неправильно. Посмотри в lua_help или class_registrator.script как они зарегистрированы. cs_register (object_factory, "CWeaponHPSA", "se_item.se_weapon_magazined", "WP_HPSA", "wpn_hpsa_s") Поэтому нужно писать clsid.wpn_hpsa_s и т.д. Lua и LuaJIT плагины для Notepad++ SciTE-RU 3.5.5 плагины для MilkShape3D Ссылка на комментарий
Sla-Sla 43 Опубликовано 28 Июня 2016 Поделиться Опубликовано 28 Июня 2016 @Charsi, оу, я из _g.script брал Ссылка на комментарий
Winsor 178 Опубликовано 30 Июня 2016 Поделиться Опубликовано 30 Июня 2016 Уважаемые, есть ли аналоги для m_netpk (может свои разработки), пригодные для использования? p.s. - на вопрос - чем тебе m_netpk не подходит - у него неправильно парситься пакет для оружия с подствольником. хочу увидеть альтернативу. Буду благодарен за Ваши варианты. Ссылка на комментарий
CRAZY_STALKER666 36 Опубликовано 1 Июля 2016 Поделиться Опубликовано 1 Июля 2016 Такой вопрос - как одной функцией убрать всех НПЦ с уровня? Можно и через for 1, 64567 или как то так... Забыл просто, как делать проверку вида IsStalker(obj) Не соответствует правилам. Ссылка на комментарий
Zander_driver 10 343 Опубликовано 2 Июля 2016 Поделиться Опубликовано 2 Июля 2016 Забыл просто, как делать проверку вида IsStalker(obj) Так и делать. У тебя уже в вопросе есть все что требуется для ответа, так и в чем тогда вопрос. Мод, где не бывает одинаковых путей - Судьба Зоны. (Лучшее, что у меня получилось на X-Ray) На базе модифицированного движка OGSR Engine. Бывший мододел на X-Ray / Начинающий игродел на Unreal Engine. Программист. AMD Ryzen 9 7950X (16 ядер, 32 потока, 5.75 ГГц); RTX 3080; 128 ГБ DDR5; Arctic Liquid Freezer II-420; 3 ТБ SSD PCIe 4.0; 4ТБ HDD. Ссылка на комментарий
Romann 623 Опубликовано 2 Июля 2016 Поделиться Опубликовано 2 Июля 2016 (изменено) Так и делать. Что-то типа этого? function bla_bla_bla() for id=1,65534 do local obj = level.object_by_id(id) if obj and get_clsid(obj) == IAmAStalker then bla_bla.bla() end end end Мне нужно изменить код из этого примера , а то и правда можно хитовать и ящики с БТРами. Вот я попытался переписать ещё и так, чтоб проверялись объекты не на всей локации а только в онлайне: --local radius_sqr = 100 -- квадрат радиуса --local actor_position = db.actor:position() -- позиция актора -- по идее, лучший вариант сделать биндеры на все живие объекты -- и регистрировать их в определённую таблицу, которую будем -- перебирать и проверять, живой ли объект. Но обойдёмся этим: -- перебор объектов в онлайне (медленно!) local PositionActor = db.actor:position() for id,o in pairs(db.storage) do -- апд: был 0, могло стукнуть актора -- берём с локации local obj = level.object_by_id(id) -- если объект по ид есть, то if obj and get_clsid(obj) == IAmAStalker and obj.alive and obj:alive() then -- если макс хп у объекта не равно -1, значит объект живой if obj:max_health() > 0 then -- если квадрат дистанции, между позицией актора и объектом меньше либо равен макс радиусу в квадрате, то ( distance_to_sqr быстрей вроде как) if obj:position():distance_to(PositionActor) <= 50 then -- Наносим хит (ну тут можно брать и какие то определённые параметры) hit = hit() -- создание объекта класса hit hit.direction = vector():set(1,0,0) --дирекция по оси x hit.draftsman = db.actor --нанёс урон актор hit.impulse = 600 --импульс hit.power = 1.45 --хит hit.type = 2 --тип урона - выстрел hit:bone("bip01_head") -- удар приходится на голову -- наносим урон obj:hit(hit) end end end end Я не скриптер, если что-то не так поправьте пожалуйста. Изменено 2 Июля 2016 пользователем Romann Мать: ASRock X470 Master SLI. Процессор: AMD Ryzen 9 3900X 12-Core(4200 MHz). Память: Patriot Memory 3200 C16 Series. DDR4-3200(1600МГц), 16Гбх2(32Гб). Видео: GeForce GTX 1060 6GB. Блок питания: CoolerMaster 750 Вт. Корпус: Zalman i3 Edge. Химера конечно сильный хищник, а все держится дома. Чего же ты пришел к ней домой и пытаешься её убить? © Болотный Доктор Ссылка на комментарий
CRAZY_STALKER666 36 Опубликовано 2 Июля 2016 Поделиться Опубликовано 2 Июля 2016 @Romann, попробовал так сделать. Вписал IsStalker(obj), всё проверил, поставил метки через send_tip(). После этого --> if obj and get_clsid(obj) уже ничего не происходило... Пробовал разные варианты, нашел еще пример... В общем не заладилось. Вызывал это дело из меню. Другой вопрос - как проверить находиться ли ГГ в диалоге с НПЦ скриптом? Почитал справочники - из полезного только level.present() нашел, но это совсем не то(. Не соответствует правилам. Ссылка на комментарий
Overfirst 637 Опубликовано 2 Июля 2016 Поделиться Опубликовано 2 Июля 2016 как проверить находиться ли ГГ в диалоге с НПЦ А разве не подходит? if db.actor:is_talking() then ... end Или тебе надо проверить даилог с конкретным НПС? 1 Ранее был известен под ником BoBaH_671. Ссылка на комментарий
CRAZY_STALKER666 36 Опубликовано 2 Июля 2016 Поделиться Опубликовано 2 Июля 2016 Что это значит? Критично ли для сохранений? ! Invalid object 'single_player' position. Outside of sector structure. Не соответствует правилам. Ссылка на комментарий
CRAZY_STALKER666 36 Опубликовано 4 Июля 2016 Поделиться Опубликовано 4 Июля 2016 Почему при спавне НПЦ скриптом в его имени к основному добавляются какие-то рандомные цифры? Если через all.spawn - такого не наблюдаеться... Не соответствует правилам. Ссылка на комментарий
Dennis_Chikin 3 662 Опубликовано 4 Июля 2016 Поделиться Опубликовано 4 Июля 2016 По тому что так задумано. Разработчиками. И не какие-то, а id. 1 1 Солянка обезжиренная, диетическая, полезные советы по "солянке", текущий тестовый патч Ссылка на комментарий
CRAZY_STALKER666 36 Опубликовано 4 Июля 2016 Поделиться Опубликовано 4 Июля 2016 @Dennis_Chikin, просто это доставляло некоторые неудобства... С id тоже разобрался + оценил новые возможности использования расширенных библиотек Lua. Но вопрос из поста #7569 покоя не дает до сих пор... Не соответствует правилам. Ссылка на комментарий
Malandrinus 615 Опубликовано 5 Июля 2016 Поделиться Опубликовано 5 Июля 2016 как проверить находиться ли ГГ в диалоге с НПЦ скриптом? в XE есть функция для получения собеседника level.get_second_talker(). Но всё равно перед её использованием надо проверять, что идёт разговор. 1 Плагины Total Commander для работы с игровыми архивами: Архиваторный плагин (для работы с одиночным архивом): link1 link2 Системный плагин (для распаковки установленной игры): link1 link2 Ссылка на комментарий
CRAZY_STALKER666 36 Опубликовано 5 Июля 2016 Поделиться Опубликовано 5 Июля 2016 @Malandrinus, спасибо! С этой функцией я разобрался. Но я, видимо, перепутал номер поста. Хотелось побольше узнать вот об этом. ! Invalid object 'single_player' position. Outside of sector structure. Как я понял, игра ссылается на ГГ, и какую-то структуру сектора... Ну в общем в этой области для меня - туман. Меня этот вопрос потому так волнует, что сейчас пытаюсь устранить один очень неприятный вылет, в логах даже при модифицированной printf() ничего не видно. И обращаю внимание на любые мелочи... Не соответствует правилам. Ссылка на комментарий
Nazgool 250 Опубликовано 6 Июля 2016 Поделиться Опубликовано 6 Июля 2016 (изменено) Почему при спавне НПЦ скриптом в его имени к основному добавляются какие-то рандомные цифры? Вот почему, извините начальство форума за не очень пристойное слово, хочется {игнорировать} всякие призывы о помощи, и не тратить силы на распинания по сути. CRAZY_STALKER666 ты же поставил "Спасибо" к моему посту http://www.amk-team.ru/forum/topic/6185-skriptovanie/?p=1020661, т.е. ты должно быть его прочитал. А если это так, то ты не мог не заметить, что я в этом посте рассказывал про "цифры" в имени объекта. В то время, когда я начинал моддить, не было столько исчерпывающей информации как сейчас. Цеплялись за любые намеки. А тут... "Абыдно, да?" ("Кавказская пленница") "Начальство" в специально отведенном месте постоянно рыдает по тому же самому поводу. Не успевает жилетки менять. dc Изменено 6 Июля 2016 пользователем Dennis_Chikin Ссылка на комментарий
Рекомендуемые сообщения
Создайте аккаунт или авторизуйтесь, чтобы оставить комментарий
Комментарии могут оставлять только зарегистрированные пользователи
Создать аккаунт
Зарегистрировать новый аккаунт в нашем сообществе. Это несложно!
Зарегистрировать новый аккаунтВойти
Есть аккаунт? Войти.
Войти