Лёха_тц 3 Опубликовано 12 Ноября 2011 Поделиться Опубликовано 12 Ноября 2011 короче как я понял мне нужно взять секцию уже готового спавна и просто поставить свои координаты и поставить на нужную локацию но вот проблема я в ал спавне не видел секции с вышками а где искать нез Ссылка на комментарий
KD87 718 Опубликовано 13 Ноября 2011 Поделиться Опубликовано 13 Ноября 2011 Лёха_тц, бери секции с section_name = physic_object. Ссылка на комментарий
panzyuza 41 Опубликовано 13 Ноября 2011 Поделиться Опубликовано 13 Ноября 2011 У меня вопрос при использовании ремарковой схемы у нпс.К примеру, анимация разговора нпс идет 4 секунды, звук идет 12.Будет ли в случае синхронизации анимации со звуком анимация и звук проигрываться нужные 12 секунд, а анимация не закончиться через 4? AVS_LOCATION_MOD Ссылка на комментарий
*Shoker* 322 Опубликовано 13 Ноября 2011 Поделиться Опубликовано 13 Ноября 2011 Ммм не совсем понял что ты хочешь, но насколько я знаю, анимация "шевеления" губами сама подстраивается под звуковой фаил. Ежели ты сделал какую то "особую" анимация для рта персонажа (что мало вероятно) её ты уже должен сам будешь подогнать. Ну а если ты во время разговора врубаешь просто какую то левую анимацию (ну там задницу почесать), то она будет выполнятся отдельно и паралельно с анимацией разговора. Тоесть не будет с ней связана, и непись будет шевелить губами столько, сколько идёт звук, а чесать будет ровно столько, сколько идёт анимка. А вообще лучше сам проверь, может там у схемы есть свои особенности. Можно просто Shoker, форум АМК съел моё старое имя и не хочет отдавать о_О Мастер аномалий на свою заднюю точку. Ссылка на комментарий
demover123 0 Опубликовано 13 Ноября 2011 Поделиться Опубликовано 13 Ноября 2011 Как можно сделать замену предмета в активном слоте? Ссылка на комментарий
RayTwitty 492 Опубликовано 13 Ноября 2011 Поделиться Опубликовано 13 Ноября 2011 (изменено) Привет всем. Есть небольшой вопрос. Допустим имеется предмет local item = db.actor:object("ak74") Для того чтобы заспавнить wpn_ с припиской ak74 (самопальная функция спавна в инвентарь), нужно написать так: spawn_item_in_inv("wpn_"..item) У нас заспавнится wpn_ + ak74, то есть wpn_ak74. А как можно заспавнить предмет wpn_ak74 без приписки wpn_ ? То есть если: local item = db.actor:object("wpn_ak74") То как отсюда отрезать wpn_ ? Заранее спасибо. demover123, штатных функций замены предмета в слоте, на сколько я знаю, нет. Но можно самому написать это действие. Сначала дропнуть предмет из слота в инвентарь (или удалить вообще), а потом заспавнить предмет, который может стать в освободившийся слот. Изменено 13 Ноября 2011 пользователем Shadows Ссылка на комментарий
AndreySol 215 Опубликовано 13 Ноября 2011 Поделиться Опубликовано 13 Ноября 2011 Размер сохраняемого pstor НЕ дожен превышать ~8000 байт.Значит есть способ этот размер получить ? Подскажите как ? Ссылка на комментарий
Zander_driver 10 333 Опубликовано 13 Ноября 2011 Поделиться Опубликовано 13 Ноября 2011 demover123 Удалить предмет из активного слота, заспавнить другой, который туда подходит. Shadows Не совсем понятно, что тебе требуется. заспавнить "ak74" ? или "wpn_" ? AndreySol Насколько знаю, напрямую никак. Только перебирать все элементы при чтении/записи и считать объем вручную. Мод, где не бывает одинаковых путей - Судьба Зоны. (Лучшее, что у меня получилось на 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. Ссылка на комментарий
KD87 718 Опубликовано 13 Ноября 2011 Поделиться Опубликовано 13 Ноября 2011 Shadows, регулярным выражением. В Lua это вроде через string.find(). Только совсем непонятен смысл этой чехарды. Ссылка на комментарий
Nazgool 250 Опубликовано 13 Ноября 2011 Поделиться Опубликовано 13 Ноября 2011 (изменено) Shadows function CutWpn(name) return name:match('wpn_(.+)') or name end spawn_item_in_inv(CutWpn('wpn_ak47')) Т.е. любое оружие с префиксом wpn_ "прогоняешь" через эту функцию. Изменено 13 Ноября 2011 пользователем Gun12 Ссылка на комментарий
KD87 718 Опубликовано 13 Ноября 2011 Поделиться Опубликовано 13 Ноября 2011 AndreySol, получить просто - берешь декомпилятор, декомпилишь xrGame.dll и смотришь размер Для ТЧ - 8 Кб, для ЧН и ЗП - 16 кб. Pstor же в нет-пакет сохраняется, а других способов получить размер нет-пакета нет. Как и невозможно определить момент переполнения нет-пакета при записи. Ссылка на комментарий
*Shoker* 322 Опубликовано 13 Ноября 2011 Поделиться Опубликовано 13 Ноября 2011 (изменено) AndreySol У GSC есть проверка на размер pstor-а. Она происходит в момент записи, и возможно, загрузки. Искать толи в xr_logic толи скорее в _g скрипте, где сейв проверяется (там есть такая функция, на слово save ищи) Вот тока тебе это зачем надо? Там стоит стандартная проверка на превышение лимита. Игра вылетит сама. если такое случится. Вот: _G.script function set_save_marker(p, mode, check, prefix) ... if mode == "save" then local dif = p:w_tell() - save_markers[result] printf(result..": SAVE DIF: %s", dif) if dif >= 8000 then printf("WARNING! may be this is problem save point") end if dif >= 10240 then abort("You are saving too much") end Изменено 13 Ноября 2011 пользователем *Shoker* Можно просто Shoker, форум АМК съел моё старое имя и не хочет отдавать о_О Мастер аномалий на свою заднюю точку. Ссылка на комментарий
AndreySol 215 Опубликовано 13 Ноября 2011 Поделиться Опубликовано 13 Ноября 2011 Вот: _G.script function set_save_marker(p, mode, check, prefix) чет нет у меня в _G.script такой ф-ции. Вот тока тебе это зачем надо? Там стоит стандартная проверка на превышение лимита. Игра вылетит сама. если такое случится.Ну так для того и надо, чтоб игра не вылетала. Ссылка на комментарий
*Shoker* 322 Опубликовано 13 Ноября 2011 Поделиться Опубликовано 13 Ноября 2011 (изменено) > чет нет у меня в _G.script такой ф-ции. В ЧН точно есть. В ЗП должна быть. Про ТЧ не помню. Если уберёшь проверку, то игра у тебя не будет вылетать, но если ты превысишь лимит, то у тебя тупо начнут биться сейвы. Да и вообще чтобы превысить лимит нужно постараться и сохранять в сейв какие то большие объёмы информации. Вполне возможно что тебе такое пока не грозит, тогда зачем париться. А вообще если не хочешь возится с пстором, можешь например напрямую в текстовые файлы всё записывать и считывать от туда при загрузке. Тут конечно свои тонкости, зато переполнения никогда не будет да и вся информация видна будет. В ЧН\ЗП есть импортированная область io для работы с файлами. в ТЧ тока с расширением движка от RvP В любом случае я сказал как это делают в GSC. Кстати сами они, по моим наблюдением, почти ничего в pstor не пишут. В ЧН я помню тока что он активно в схеме раненного используется, и в принципе всё. Изменено 13 Ноября 2011 пользователем *Shoker* Можно просто Shoker, форум АМК съел моё старое имя и не хочет отдавать о_О Мастер аномалий на свою заднюю точку. Ссылка на комментарий
Artos 99 Опубликовано 14 Ноября 2011 Поделиться Опубликовано 14 Ноября 2011 (изменено) Artos: Размер сохраняемого pstor НЕ дожен превышать ~8000 байт. AndreySol: Значит есть способ этот размер получить ? Подскажите как ? Уже в давние времена в моде AMK v1.xx, интенсивно использующем запись в pstor актора различных параметров мода, был написан алгоритм предварительной проверки размера сохранения относительно актора при помощи т.н. фейк-нет-пакета. Т.е. при записи вызывался алгоритм псевдо-записи и по результату этой проверки принималось решение - разгрузить pstor от избыточных данных или записывать как есть. В ЧН и ЗП, самими разработчиками игры была введена чем-то схожая проверка, но только не как предварительная, а как часть реальной записи. Т.е. при превышении определенной квоты - игра просто вылетает с фатал-еррором (по abort'у), но не приводя к образованию испорченного сэйва. Как же получить размер pstor'a, не дожидаясь фатальной ошибки или не дожидаясь собственно процесса записи? В принципе довольно просто. 1. По кодам игры видно, что в pstor'ы объектов везде применяется структура записи каждого поля этой таблицы типа: [string] = value , т.е. ключи таблицы строго имеют тип строки, а значения - строки, числа или булева значения. Можно записывать конечно иначе - но тогда (см. п.2) произойдет фатальная ошибка при записи pstor'а. 2. Смотрим как же записывается этот pstor в сохранения в файле xr_logic.script (pstor_save_all). Видно, что все записи из таблицы - подсчитываются по кол-ву и это кол-во записывается в w_u32 (4 байта); - каждый ключ записывается как строка (w_stringZ) - а это значит что кол-во байт равно кол-ву символов в строке + NULL ( str:len()+1 ); - далее, для каждого значения ключа в таблице записывается одно-байтовое значение (w_u8) типа данных этого значения (строка/число/булево); - каждое значение в таблице соответствующего ключа записывается либо как строка (кол-во байт см. выше), либо как число (w_float) - а это 4 байта, либо как булево значение (w_bool) - это 1 байт. Т.о. имея текущую табличку pstor'а несложно в любой момент вычислить кол-во байт потребное для хранения этой таблички в сэйвах (в нет-пакете объекта). local iSize = 4 --/ хранят кол-во записей в pstor for k,v in pairs(pstor) do iSize = iSize + k:len() + 1 --/ имя текущего ключа (переменной) local sType = type(v) --/ тип значения ключа (переменной) if sType == "number" then iSize = iSize + 1 + 4 --/ метка типа и число elseif sType == "string" then iSize = iSize +1 + v:len() + 1 --/ метка типа, строка и NULL elseif sType == "boolean" then iSize = iSize + 1 + 1 --/ метка типа и булево else printf("not saved type="..sType.." encountered") end end return iSize --/> кол-во потребных байт Следует учесть, что в моих изначальных словах присутствует приближенность числа (~8000), т.е. ориентировочное значение для ТЧ. Это значение может коррелироваться в меньшую строну, т.к. в нет-пакет объекта записываются самые разные данные и их кол-во может быть значительным. Для ЧН/ЗП хотя порог максимальног значения объема pstor'а в два раза выше, но функция проверки при записи ограничивает этот порог. При >8000 байт в лог будет выдано предупреждение, а при >10240 - вызван abort() ... Если у объекта сильно разветвленная логика, записанная напрямую в кастом-дату - каждый символ добавляет к объему нет-пакета 1 байт. Для актора много записывают таск- и треасуре- менеджеры и эти объемы также обязательно нужно учитывать при реальной записи. Примечание: Ну а о том, что запись в pstor можно сжать (хотя и незначительно) - уже писал ранее. Числа имеющие значения менее 65635 (а их в таблице немало) можно записывать не 4-мя байтами (w_float), а w_u16 или w_s16, что сэкономит по 2 байта накаждом значении. Но это потребует правки алгоритмов записи/чтения pstor'ов (о чем также ранее писал). Также, из изложенного можно сделать выводы: 1. Имена переменным следует задавать как можно короче. 2. Строковые значения переменным также следует задавать как можно более короткими 3. Вместо 1 иль 0 в качестве флагов в pstor'e стОит применять булевы значения (true|false) , которые вместо 4-х байт требуют всего 1 при их записи. Изменено 14 Ноября 2011 пользователем Artos "Но иногда найдется вдруг чудак, этот чудак все сделает не так ..."© Машина времени Ссылка на комментарий
Real Wolf 34 Опубликовано 14 Ноября 2011 Поделиться Опубликовано 14 Ноября 2011 Можно ли скриптовым способом узнать расположение вещей в инвентаре игрока? Ссылка на комментарий
Zander_driver 10 333 Опубликовано 14 Ноября 2011 Поделиться Опубликовано 14 Ноября 2011 Real Wolf Это как я понимаю, инфа вроде такой: СВД в инвентаре лежит вверху слева, под ним АК, под ним экза. Не припоминаю методов позволяющих узнать такое. К тому же это расположение может самопроизвольно меняться движком. Пример: переодели комбез. Тот что сняли - окажется в самом низу инвентаря. Закрыли-открыли инвентарь - он уже далеко не внизу. Мод, где не бывает одинаковых путей - Судьба Зоны. (Лучшее, что у меня получилось на 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. Ссылка на комментарий
Artos 99 Опубликовано 14 Ноября 2011 Поделиться Опубликовано 14 Ноября 2011 (изменено) Real Wolf Во-первых, в понятие "инвентарь" можно вкладывать различный смысл. В игре от разработчиков - это все, что имеется у ГГ, т.е. рюкзак + слоты (пояс - это тоже слот). Кто-то под этим понимает только рюкзак ... Во вторых, если ты под 'расположение' понимаешь - в какой ячейке рюкзака/пояса что лежат - такое невозможно. Все, что можно получить скриптами по данному вопросу - это использованием метода 'item_in_slot', узнать какой предмет в каком слоте и методом 'inventory_for_each' для ГГ, получить информацию - какие предметы в слотах, на поясе или в рюкзаке. Последнее возможно только специальным способом, которое подметил в свое время tolusha, т.е. спавном непосредственно перед итерацией по инвентарю специального 'сепаратора' (фейк-предмет), что позволяет разделить предметы на слотовые, поясныи и пр. Изменено 14 Ноября 2011 пользователем Artos "Но иногда найдется вдруг чудак, этот чудак все сделает не так ..."© Машина времени Ссылка на комментарий
*Shoker* 322 Опубликовано 14 Ноября 2011 Поделиться Опубликовано 14 Ноября 2011 (изменено) Кстати, я вот что хотел спросить по кустом дате. Как то в ЧН делал логику как вещам так и неписям. И обратил внимание что она работает тока с новой игрой (проверял на болотах, возможно не тока с новой а в момент спавна НПС но не суть), хотя сама логика вынесена в отдельный файл. Отчего это может быть? Неужели игра сохраняет всю логику в сейв, зачем это нужно? Хочу уточнить, что логика уже была. Я её просто менял, но новую игру не начинал. И она из за этого оставалась старая, хотя в конфиге была уже переделанная. Изменено 14 Ноября 2011 пользователем *Shoker* Можно просто Shoker, форум АМК съел моё старое имя и не хочет отдавать о_О Мастер аномалий на свою заднюю точку. Ссылка на комментарий
Artos 99 Опубликовано 14 Ноября 2011 Поделиться Опубликовано 14 Ноября 2011 (изменено) *Shoker* Есть 4 варианта прописать логику объекту: 1. Прописать ее в all.spawn в развернутом виде, т.е. указав все секции и параметры; 2. Прописать в all.spawn ссылку на файл с логикой; 3. Прописать в спавн-секции объекта (параметр 'custom_data') ссылку на файл с логикой; 4. При скриптовом спавне объекта прописать в 'custom_data' ссылку на файл с логикой; При вариантах 1 и 3 вся логика прописывается в юзер-дату (нет-пакет) объекта и запоминается в сэйвах. Изменить ее возможно только 'ручками' (через нет-пакеты), т.е. правкой 'custom_data'. При чем, в варианте 3 - при спавне объекта по указанной ссылке считывается вся логика и прописывается в 'custom_data' заспавненного объекта, т.е. прописывается не ссылка, а содержимое по указанной ссылке. При вариантах 2 и 4 - логика может меняться простой правкой файла-логики, ссылка на который прописана в юзер-дате объекта. Изменено 14 Ноября 2011 пользователем Artos "Но иногда найдется вдруг чудак, этот чудак все сделает не так ..."© Машина времени Ссылка на комментарий
Рекомендуемые сообщения
Создайте аккаунт или авторизуйтесь, чтобы оставить комментарий
Комментарии могут оставлять только зарегистрированные пользователи
Создать аккаунт
Зарегистрировать новый аккаунт в нашем сообществе. Это несложно!
Зарегистрировать новый аккаунтВойти
Есть аккаунт? Войти.
Войти