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 Ссылка на комментарий
Wlad777 24 Опубликовано 17 Ноября 2015 Поделиться Опубликовано 17 Ноября 2015 Если стоит xray-extensions, можно попробовать получить текущий стейт аномалии, он хранится в m_eZoneState класса CCustomZone. Если аномалия выключена, стейт будет равен eZoneStateDisabled. Стоит ОГСЕ-движок. Там есть, не в курсе? --------------------------------- www.amk-zone.de Ссылка на комментарий
RayTwitty 511 Опубликовано 17 Ноября 2015 Поделиться Опубликовано 17 Ноября 2015 Там есть, не в курсе?Там есть. Можешь спокойно использовать. Ссылка на комментарий
Старлей 88 Опубликовано 18 Ноября 2015 Поделиться Опубликовано 18 Ноября 2015 Добрый вечер, форумчане. Вопрос: level_vertex это какой-то конкретный node АИ-сетки? 1 Ray Of Hope - кооператив сталкера OldStory Ссылка на комментарий
Zander_driver 10 342 Опубликовано 18 Ноября 2015 Поделиться Опубликовано 18 Ноября 2015 Да... 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. Ссылка на комментарий
Dennis_Chikin 3 660 Опубликовано 19 Ноября 2015 Поделиться Опубликовано 19 Ноября 2015 Господа присяжные заседатели, вчера, в соседней палате, лед - тронулся ! То есть, а скажите мне: ни кому ни разу не приходило в голову, что конструкция entity_action( entity_action() ) - несколько странна ? Солянка обезжиренная, диетическая, полезные советы по "солянке", текущий тестовый патч Ссылка на комментарий
HellRatz 2 895 Опубликовано 19 Ноября 2015 Поделиться Опубликовано 19 Ноября 2015 (изменено) Здравствуйте. Подскажите, пожалуйста, есть ли идеи, как загнать несколько community (dog, dog_two, dog_three к clsid.dog_s и т.п) под один класс в эту таблицу (Из скрипта smart_terrain.script? -- заполняет таблицу monster_classes -- TODO: заменить на глобальный функционал function se_smart_terrain:fill_monster_classes() if not monster_classes then monster_classes = { [clsid.bloodsucker_s ] = "bloodsucker", [clsid.boar_s ] = "boar", [clsid.burer_s ] = "burer", [clsid.cat_s ] = "cat", [clsid.chimera_s ] = "chimera", [clsid.controller_s ] = "controller", [clsid.pseudodog_s ] = "pseudodog", [clsid.psy_dog_s ] = "psy_dog", [clsid.dog_s ] = "dog", [clsid.flesh_s ] = "flesh", [clsid.fracture_s ] = "fracture", [clsid.poltergeist_s ] = "poltergeist", [clsid.gigant_s ] = "pseudo_gigant", [clsid.snork_s ] = "snork", [clsid.tushkano_s ] = "rat", [clsid.zombie_s ] = "zombie" } end end Дело в том, что новосозданные животины не берутся под гулаги, пока не пропишешь сюда в таблицу их коммунити. Т.е у меня, допустим, 2 собаки на 1 классе (С обязательно [!] разным коммунити), пока новую сюда не впишешь, она не будет бегать под гулагом. Такие вот заморочки. Изменено 19 Ноября 2015 пользователем HellRatz GTA 3 MAP X-Ray | NFS U:2 MAP X-Ray | RTCW MAP X-Ray | L2D | Раритетные моды на моем облаке — на память о былом. Ссылка на комментарий
dsh 3 824 Опубликовано 19 Ноября 2015 Поделиться Опубликовано 19 Ноября 2015 @HellRatz, т.е. у тебя собаки, имеющие один и тот-же clsid, имеют разные community? Тогда ты ничего не сделаешь, не меняя smart_terrains.script. Он расчитан на то, что один clsid будет иметь одно community. dsh mod: https://github.com/dsh2dsh/op2ogse Ссылка на комментарий
HellRatz 2 895 Опубликовано 19 Ноября 2015 Поделиться Опубликовано 19 Ноября 2015 @dsh, все правильно, собаки, имеющие один и тот-же clsid, имеют разные community. Тогда ты ничего не сделаешь, не меняя smart_terrains.script. Да это-то понятно. Это, конечно, печально, но я думаю решаемо (Уж какие скрипты только не делали). По этому и пишу сюда, может у кого какие есть идеи и/или предложения. Потому что прям вообще труба иначе. GTA 3 MAP X-Ray | NFS U:2 MAP X-Ray | RTCW MAP X-Ray | L2D | Раритетные моды на моем облаке — на память о былом. Ссылка на комментарий
dsh 3 824 Опубликовано 19 Ноября 2015 Поделиться Опубликовано 19 Ноября 2015 (изменено) чтобы гулаги брали на работу моих собак с новым коммунити, иначе он берет только то, что прописано в этой таблице Данный код не интересует коммунити твоих собак. Грубо говоря, если у тебя в смарте указано communities = dog и в smart_terrains.script [clsid.dog_s ] = "dog", то в этот смарт будет принят любой мутант с clsid == dog_s. По сути, смарт принимает к себе не по коммунити, которое указано в секции моба, а по clsid. Тот код, он просто для человекочитаемого вида. Я предполагаю, что ты используешь generic_lair. Иначе, ко всему этому, еще действуют правила конкретного гулага. generic_lair примет всех, кого примет смарт. Изменено 19 Ноября 2015 пользователем dsh dsh mod: https://github.com/dsh2dsh/op2ogse Ссылка на комментарий
HellRatz 2 895 Опубликовано 19 Ноября 2015 Поделиться Опубликовано 19 Ноября 2015 (изменено) то в этот смарт будет принят любой мутант с clsid == dog_s. Вот и я так думал, а на деле оказалось иначе. Пока не прописал заместо "dog" свою community, моя новая собака не бралась в работу гулага. И вряд ли это совпадение, потому что до этого я пробовал всяко, запускал десятки раз, а результат получился только сейчас, сменив группировку для класса. При чем это не только с собаками, но и с другими старыми/новыми животными. ----------- И да, я еще раз перепроверил - все дело именно в таблице monster_classes и прописанных в нее community. Если в нее не вписана новая community для нового зверька, то его (нового зверька) не подхватит гулаг, хоть как ты его, гулаг этот, настраивай. По этому, дабы далее не продолжать флуд, предлагаю, если есть у кого идеи - писать чисто по делу. Изменено 19 Ноября 2015 пользователем HellRatz Добавлено Dennis_Chikin, 19 Ноября 2015 Собственно, кроме приведеного выше, и еще проверки по presets, где так же используется алиас вместо цифры, ни каких проверок по какому-то специальному коммунити монстра... гм, ну, можно еще в предикате, конечно, задать. Но, если иного ни где не прописано - это - все. Смотри код. GTA 3 MAP X-Ray | NFS U:2 MAP X-Ray | RTCW MAP X-Ray | L2D | Раритетные моды на моем облаке — на память о былом. Ссылка на комментарий
dsh 3 824 Опубликовано 19 Ноября 2015 Поделиться Опубликовано 19 Ноября 2015 Вот и я так думал, а на деле оказалось иначе. Пока не прописал заместо "dog" свою community, моя новая собака не бралась в работу гулага. Конечно, ты же в смарте написал "dog_two", а в таблице "dog". Это таблица используется для перевода clsid в человекочитаемый формат, что бы значение потом сравнивать с тем, что указано в описании смарта. В твоем случае, т.к. ты хочешь более сложных правил, а именно, что бы указанный смарт принимал не всякую собаку, а только ту, у которой в секции указано "community = dog_two", нужно уже свою логику добавлять. Например вот так: function se_smart_terrain:get_obj_community( obj ) local cls = obj:clsid() if cls == clsid.script_stalker then return obj:community(), true else local comm = get_string( obj:section_name(), "community" ) if comm == "dog_two" then return comm, false else return monster_classes[ cls ], false end end end Или вообще вот так function se_smart_terrain:get_obj_community( obj ) local cls = obj:clsid() if cls == clsid.script_stalker then return obj:community(), true else return get_string( obj:section_name(), "community", monster_classes[ cls ] ), false end end Решать тебе. А может еще как-то более замороченно. Результат get_obj_community просто сравнивается со значениями из communities смарта и если совпадает с одним из этих значений, моб принимается в смарт, если другие условия тоже совпадают. Т.ч. никакой магии, возвращай из get_obj_community все, что тебе нужно и так, как тебе нужно. dsh mod: https://github.com/dsh2dsh/op2ogse Ссылка на комментарий
HellRatz 2 895 Опубликовано 19 Ноября 2015 Поделиться Опубликовано 19 Ноября 2015 @dsh, сделал по второму варианту, все заработало, новые звери идут под гулаг без редактирования и шаманства с таблицей. Спасибо за решение вопроса. Добавлено Dennis_Chikin, 20 Ноября 2015 Когда пользуетесь движком от ОГСЕ - просьба это указывать. GTA 3 MAP X-Ray | NFS U:2 MAP X-Ray | RTCW MAP X-Ray | L2D | Раритетные моды на моем облаке — на память о былом. Ссылка на комментарий
dsh 3 824 Опубликовано 19 Ноября 2015 Поделиться Опубликовано 19 Ноября 2015 сделал по второму варианту, все заработало это более общий вариант, поэтому, что бы ничего работающего не сломать, убедиcь, что у всех мутантов прописано правильное community. dsh mod: https://github.com/dsh2dsh/op2ogse Ссылка на комментарий
Serge! 127 Опубликовано 19 Ноября 2015 Поделиться Опубликовано 19 Ноября 2015 конструкция entity_action( entity_action() ) - несколько странна ? С точки зрения Lua в ней нет ничего ни странного, ни криминального, если вспомнить, что параметры вычисляются до вызова функции. Тут всё зависит не от конструкции вызова, а от содержания самой функции. Например, вот такая функция: function entity_action(f) a = f and '2' or '1'; print('--> '..a); return true end отработает вполне корректно и выдаст предсказуемый результат. entity_action(entity_action()) --> 1 --> 2 Так что здесь вопрос скорее не в форме, а в содержании. Так то так. Ссылка на комментарий
Charsi 440 Опубликовано 19 Ноября 2015 Поделиться Опубликовано 19 Ноября 2015 Вообще это две разные функции - конструктор без параметров и конструктор копирования класса CScriptEntityAction. Содержание у них конечно разное. Lua и LuaJIT плагины для Notepad++ SciTE-RU 3.5.5 плагины для MilkShape3D Ссылка на комментарий
Dennis_Chikin 3 660 Опубликовано 19 Ноября 2015 Поделиться Опубликовано 19 Ноября 2015 "и конструктор копирования" - и на кой он, в такой вот конкретно форме ? Или даже a = entity_action(); a:set_action( v ); return entity_action( a ) ? Солянка обезжиренная, диетическая, полезные советы по "солянке", текущий тестовый патч Ссылка на комментарий
Zander_driver 10 342 Опубликовано 20 Ноября 2015 Поделиться Опубликовано 20 Ноября 2015 и на кой он Ну это у автора кода лучше спрашивать =) сама по себе форма - не криминальна как бы. и вполне имеет право на существование, если оно зачем-то потребовалось. Разве что одинаковые названия разных на самом деле сущностей могут запутывать того кто будет чужой код читать. кто-то в свое время вообще заявил "я не понимаю таких конструкций" говоря о конструкции flist[func](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. Ссылка на комментарий
Malandrinus 615 Опубликовано 20 Ноября 2015 Поделиться Опубликовано 20 Ноября 2015 две разные функции - конструктор без параметров и конструктор копирования класса А разве в Lua есть перегрузка функций? По моему вызов функции, как и обращение к чему угодно другому по имени, - это просто выбор из таблицы по ключу, а значит и функция будет вызвана одна и та же, просто с разным списком аргументов. Или я не понял мысли? Плагины Total Commander для работы с игровыми архивами: Архиваторный плагин (для работы с одиночным архивом): link1 link2 Системный плагин (для распаковки установленной игры): link1 link2 Ссылка на комментарий
Desertir 202 Опубликовано 20 Ноября 2015 Поделиться Опубликовано 20 Ноября 2015 А разве в Lua есть перегрузка функций?Нет, но я так понимаю, LuaBind это может. Цитата из method_rep.hpp contains information about a method. It contains a list of all overloads of the function. В коде я не разбирался. ТЧ 1.0004. SAP и Trans mod github Ссылка на комментарий
Dennis_Chikin 3 660 Опубликовано 20 Ноября 2015 Поделиться Опубликовано 20 Ноября 2015 (изменено) Не, ну а по смыслу если ? Применительно к конкретному ТЧ ? Без всяких дополнений/расширений ? Там entity_action() - функция не абстрактная, а делает вполне конкретные вещи. Что-то принимает, и что-то возвращает. Так вот надо ли ее вызывать, чтобы в итоге вернуть результат, если аргумент ранее был получен такой же entity_action() без аргумента, или таки return entity_action():set_action( v ) - более чем достаточно ? Изменено 20 Ноября 2015 пользователем Dennis_Chikin Солянка обезжиренная, диетическая, полезные советы по "солянке", текущий тестовый патч Ссылка на комментарий
Рекомендуемые сообщения
Создайте аккаунт или авторизуйтесь, чтобы оставить комментарий
Комментарии могут оставлять только зарегистрированные пользователи
Создать аккаунт
Зарегистрировать новый аккаунт в нашем сообществе. Это несложно!
Зарегистрировать новый аккаунтВойти
Есть аккаунт? Войти.
Войти