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 Ссылка на комментарий
Kirgudu 1 263 Опубликовано 1 Марта 2020 Поделиться Опубликовано 1 Марта 2020 Вероятно, это действительно так. Я поэкспериментировал по-своему - с разными частями нет-пакета (включая абстрактную), со спавном и без, с выбрасыванием из инвентаря и без, с переключениями онлайн-оффлайн и без - тот же результат. Признаться, я рассчитывал на другое. Судя по всему, классические способы тут не помогут, либо что-то проходит мимо внимания. Инструмент Ссылка на комментарий
Norman Eisenherz 323 Опубликовано 1 Марта 2020 Поделиться Опубликовано 1 Марта 2020 Был вопрос на эту тему: On 10/13/2011 at 11:37 PM, Kirag said: Кстати, об update-пакете. Считать данные оттуда - без вопросов, а вот получалось ли у кого-нибудь данные туда результативно записать? И был такой ответ: On 10/13/2011 at 11:57 PM, Artos said: А вот на вопрос: " а вот получалось ли у кого-нибудь данные туда результативно записать?" - могу ответить утвердительно. Тот же параметр здоровья (health + upd:health) для неписей (хоть в он-лайне, хоть в офлайне) очень помогает и убивать и ранить и оживлять. Получается, UPDATE-пакет можно переписывать, но только для некоторых объектов. 1 Мини-моды: ТЧ ЧН ЗП Шпаргалка Ссылка на комментарий
abramcumner 1 179 Опубликовано 1 Марта 2020 Поделиться Опубликовано 1 Марта 2020 1 час назад, WinCap сказал: Эксперимент-доказательство. А если переключиться на подствольник, сохранить игру и загрузить? Скорей всего можно задать, через клиент_дату в секретной(или как ее принято называть) части нет-пакета. Получается, UPDATE-пакет можно переписывать, но только для некоторых объектов. Да для всех объектов он переписывается. Просто ты столкнулся с особенностью класса оружия, что состояние подствольника берется не из апдейт-пакета. Ты же вроде сам писал, что вычитывал нет-пакет обратно и там было все, как нужно. Ссылка на комментарий
Norman Eisenherz 323 Опубликовано 1 Марта 2020 Поделиться Опубликовано 1 Марта 2020 @abramcumner Нет – я проверял, что во временный нетпакет успешно переносятся данные из UPDATE-пакета исходного объекта; проблема возникает на следующей стадии – при переносе данных из временного пакета в новый объект. Мини-моды: ТЧ ЧН ЗП Шпаргалка Ссылка на комментарий
abramcumner 1 179 Опубликовано 1 Марта 2020 Поделиться Опубликовано 1 Марта 2020 11 минут назад, Norman Eisenherz сказал: проблема возникает на следующей стадии – при переносе данных из временного пакета в новый объект. То есть, если после этого перенести данные из нового объекта в еще один нет-пакет, то там уже кривые данные будут? Ссылка на комментарий
Norman Eisenherz 323 Опубликовано 1 Марта 2020 Поделиться Опубликовано 1 Марта 2020 @abramcumner В UPDATE-пакете нового оружия будут дефолтные данные класса + то, что совпадает со STATE-пакетом: например, будет один патрон, если была заряжена граната. Мини-моды: ТЧ ЧН ЗП Шпаргалка Ссылка на комментарий
abramcumner 1 179 Опубликовано 1 Марта 2020 Поделиться Опубликовано 1 Марта 2020 @Norman Eisenherz, попробуй через абстрактную часть нет-пакета. Смотри в доке у Артоса про net_abstract. Тогда станет доступно свойство co_props.grenade_mode. Ссылка на комментарий
Kirgudu 1 263 Опубликовано 1 Марта 2020 Поделиться Опубликовано 1 Марта 2020 @abramcumner, я пробовал сегодня - см. выше. Не сработало. Делал, ессно, как надо: с добавкой в биндере и колбэком. 1 Инструмент Ссылка на комментарий
Norman Eisenherz 323 Опубликовано 2 Марта 2020 Поделиться Опубликовано 2 Марта 2020 Здрасьте. 1. В X-Ray Extensions есть функции get/set_inventory_item_int16, которые позволяют менять флаги состояния предметов. Судя по комментарию "-- extra flags added in x-ray extensions" в списке ii_flags, флаги до 11-го бита (is_quest_item = 2048) существуют у объектов и в оригинальной игре. 2. Есть класс flags16, работа с которым вроде как похожа на работу с нетпакетом: • создать контейнер x = flags16(); • заполнить контейнер флагами объекта через ?:get(); • изменить отдельные флаги через x:set(#, true/false); • назначить новые флаги объекту через ?:assign(x). Примеров использования этого класса очень мало, и составить полную картину не получается. В частности, неясно, как выполняется привязка контейнера к объекту для чтения/записи флагов. Конечный вопрос: можно ли, используя только функции класса flags16, повторить работу функций get/set_inventory_item_int16? Другими словами, являются ли эти функции более удобным представлением того, что уже есть в движке, или делают что-то полностью новое? Нашел в файлах XRE код, но как он работает, я без знания языка понять не могу. Spoiler CScriptGameObject__SetInventoryItemInt16 proc pos = dword ptr 8 value = dword ptr 0Ch push ebp mov ebp, esp push edx ;--- call CScriptGameObject__CInventoryItem mov ecx, [ebp + pos] mov edx, [ebp + value] mov [eax+ecx], dx ;--- pop edx mov esp, ebp pop ebp retn 08h CScriptGameObject__SetInventoryItemInt16 endp CScriptGameObject__GetInventoryItemInt16 proc stub = dword ptr 8 pos = dword ptr 0Ch push ebp mov ebp, esp and esp, 0FFFFFFF8h push [ebp + pos] push [ebp + pos] call CScriptGameObject__GetInventoryItemInt and eax, 0FFFFh mov esp, ebp pop ebp retn 8 CScriptGameObject__GetInventoryItemInt16 endp Мини-моды: ТЧ ЧН ЗП Шпаргалка Ссылка на комментарий
WinCap 316 Опубликовано 2 Марта 2020 Поделиться Опубликовано 2 Марта 2020 2 часа назад, Norman Eisenherz сказал: можно ли, используя только функции класса flags16, повторить работу функций get/set_inventory_item_int16? Нет. Класс flags16 служит для удобства работы с флагами (отдельными битами числа). Он ни как не связан с объектами. А функции get/set_inventory_item_int16 как раз и добавляют в движок необходимый функционал. Скрытый текст x = flags16() x:assign(get_inventory_item_int16) x:set(11, true) set_inventory_item_int16(x:get()) 1 S.T.A.L.K.E.R. CoP Objects (upd 15.11.24) Ссылка на комментарий
naxac 2 477 Опубликовано 2 Марта 2020 Поделиться Опубликовано 2 Марта 2020 (изменено) @Norman Eisenherz, пример использования функций ХЕ, половина взята из ОГСЕ. Изменено 2 Марта 2020 пользователем naxac Аддон для ОП-2.09.2: Яндекс/Google/GitHub Ссылка на комментарий
Norman Eisenherz 323 Опубликовано 2 Марта 2020 Поделиться Опубликовано 2 Марта 2020 @naxac Я имел в виду примеры применения функций именно базового класса flags16. Но, раз без правок XRE получить флаги для последующей обработки нельзя, примеры ничего не дадут. Мини-моды: ТЧ ЧН ЗП Шпаргалка Ссылка на комментарий
Norman Eisenherz 323 Опубликовано 5 Марта 2020 Поделиться Опубликовано 5 Марта 2020 Здрасьте. [m_netpk.script] Функция r_chunk, насколько можно судить по коду, читает простую таблицу, в которой len записей типа u8, даже если значение len указано как 3*4 или 4*4 (то есть, матрица все равно читается как вектор). Что читает эта функция в варианте _r_l8u16v, когда вместо числового размера таблицы указано pk:r_u8(), а тип значения – u16? Таблицу размером 1 байт, в которой хранится 2-байтовое значение? Еще один непонятный вариант – _r_l32szv, где размер указан как pk:r_s32(), а тип – stringZ. Это должна быть одна строка с длиной строго 4 байта, или это таблица из таких строк? Мини-моды: ТЧ ЧН ЗП Шпаргалка Ссылка на комментарий
WinCap 316 Опубликовано 5 Марта 2020 Поделиться Опубликовано 5 Марта 2020 2 часа назад, Norman Eisenherz сказал: Что читает эта функция в варианте _r_l8u16v Функция читает 1 байт (u8) в котором хранится количество элементов, а затем сами элементы по 2 байта (u16). На выходе таблица 2 байтных чисел. 2 часа назад, Norman Eisenherz сказал: Еще один непонятный вариант – _r_l32szv Все тоже самое - сначала читается количество строк (4 байта s32), а затем уже сами строки (sz). 1 S.T.A.L.K.E.R. CoP Objects (upd 15.11.24) Ссылка на комментарий
Zander_driver 10 343 Опубликовано 5 Марта 2020 Поделиться Опубликовано 5 Марта 2020 @Norman Eisenherz, Вы таки задались целью, переделать с нуля труд Артоса? Иначе - зачем это все, для каких тайных целей... Мод, где не бывает одинаковых путей - Судьба Зоны. (Лучшее, что у меня получилось на 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. Ссылка на комментарий
Norman Eisenherz 323 Опубликовано 6 Марта 2020 Поделиться Опубликовано 6 Марта 2020 Здрасьте. Вывод таблицы данных нетпакета через table.concat(k .. v, "\\n"): назначаю для определенной строки цвет – пропадает перенос в конце строки. Пока в строке только переменные и текст, перенос есть. В чем причина? https://drive.google.com/open?id=1XU6jeaOI_HrNxm90ZiR6M6L3UTPXm0cC Spoiler local pk_dump = {} for k, v in pairs(data) do if type(v) ~= "table" then table.insert(pk_dump, k .. " = " .. v) else if next(v) == nil then table.insert(pk_dump, k .. "%c[gray]" .. " = empty" .. "%c[default]") -- table.insert(pk_dump, k .. " = empty") else for i = 1, #v do table.insert(pk_dump, k .. "_" .. i .. " = " .. v[i]) end end end end news_manager.send_tip(act, table.concat(pk_dump, "\\n")) Мини-моды: ТЧ ЧН ЗП Шпаргалка Ссылка на комментарий
Kirgudu 1 263 Опубликовано 6 Марта 2020 Поделиться Опубликовано 6 Марта 2020 (изменено) @Norman Eisenherz, news_manager.send_tip(act, table.concat(pk_dump, "\n")) И кстати, это опять изобретение велосипеда повторение уже имеющегося инструмента. В m_netpk есть функция pk:dumpDesc(), как раз предназначенная для вывода всех свойств нет-пакета. Почему бы не использовать её? Изменено 6 Марта 2020 пользователем Kirgudu Инструмент Ссылка на комментарий
naxac 2 477 Опубликовано 6 Марта 2020 Поделиться Опубликовано 6 Марта 2020 (изменено) @Norman Eisenherz, добавь после %c[default] пробел. Изменено 6 Марта 2020 пользователем naxac Аддон для ОП-2.09.2: Яндекс/Google/GitHub Ссылка на комментарий
Norman Eisenherz 323 Опубликовано 6 Марта 2020 Поделиться Опубликовано 6 Марта 2020 @Kirgudu Точно не то – один слеш в скриптовых текстах "съедается" как спецсимвол. По поводу повтора – хочется разобрать, а не открывать один черный ящик другим. @naxac Да, так работает. Мини-моды: ТЧ ЧН ЗП Шпаргалка Ссылка на комментарий
Cheburator988 3 Опубликовано 7 Марта 2020 Поделиться Опубликовано 7 Марта 2020 Помогите.Хочу прописать в escape_dialogue чтоб Волк побольше всего выдавал. В частности как прописать глушитель на МП-5 ?? Еще хорошо бы несколько гранат. 1 But I, being poor, have only my dreams; I have spread my dreams under your feet; Tread softly because you tread on my dreams. Ссылка на комментарий
Рекомендуемые сообщения
Создайте аккаунт или авторизуйтесь, чтобы оставить комментарий
Комментарии могут оставлять только зарегистрированные пользователи
Создать аккаунт
Зарегистрировать новый аккаунт в нашем сообществе. Это несложно!
Зарегистрировать новый аккаунтВойти
Есть аккаунт? Войти.
Войти