Вопрос, как из оригинальной игры извлечь папку gamedata? Я как-то не очень хорошо ориентируюсь на сайте. Если не сложно, подскажите или ткните носом в ссылку.
Mehanik Yar
1. Если использовать знакомые буковки/слова методом тыка - врядли удастся составить осмысленную фразу.
Уже не раз тут повторялось, что в скриптах метод тыка не проходит. Глупо думать про рестрикторы/телепорты:
Они являются ведь подразновидностью аномалий
.
В LUA не 'разновидности', а классы. Классы могут наследовать ...
Так вот наоборот - аномалии наследуют свойства класса рестрикторов.
Применять же операции с нет-пакетами не от соответствующего класса - прямой путь к возникновению фатальных ошибок. И если у тебя нет готовой функции для соответствующего класса - глупо пытаться применить 'от сходного' ...
2. Сам по себе story_id не присваивается при спавне скриптами и, если возникает ошибка с упоминанием о дубле, то это повод задуматься о неправильном использовании скриптов.
Смотрим твои вызовы:
_new_create.create_restr(pos, lv, gv, radius, ltx)
Смотрим куда идет вызов:
function create_restr(storid, pos_restr, lvid_restr, gvid_restr, custom_restr, radius_restr, ax_x, ax_y, ax_z)
Неужели не видно, что первым аргументом передается позиция (pos), а воспринимается как стори-ид (storid)?!!!
walper
Верни родной 'modules.script', или исправь в нем ошибку, о чем тебе и говорит твой лог.
singapur22
Это скорее все же не типы таймеров, а варианты использования таймеров. Можно конечно пойти и по такому пути, но мне кажется достаточно внести условие(я) применения/использования таймеров (чтобы учесть в кодах блока таймеров), а всевозможные вариации оставить модмейкерам.
Т.е. если заложить в таймер условие: возможность внешнего изменения времени срабатывания и/или параметров (функции коллбэка, ...), то это и будет вынесенным условием для использования модмейкером одного и того же блока для разных типов задач.
Mehanik Yar
Разочарую тебя, тут правка цифирек в конфиге не предусмотрена.
Тебе придется лезть в 'ph_car.script' и в секции 'FIRE SECTION' (помечено разрабами), отлавливать твой стреляющий БТР, твою цель и корректировать точку для стрельбы. Не забыв при этом, что БТР тоже стреляет оружием, у которого в конфигах имеется дисперсия выстрела ...
Pasha_199729 , поиск модов и пр. в соседней ветке ...
Понятно. Тогда ещё вопрос. Есть же м 134, как сделать так чтобы НПС стрелял из него длинной очередью, а не короткой, или из того же ПКМа чтобы выпускал пули пока противник не помрет.
Mehanik Yar
(отвлечемся ...)
а) Если по каждому (почти) возникшему вопросу вопрошать кого-то, то ... ответ то может быть и будет получен и даже в конкретном случае время будет сэкономлено, но(!) ... в конечном итоге вместо навыков и знаний будет получена 'зазубренная локальная' информация. И в случае даже чуть измененных условий - придется опять вопрошать.
б) Если же учиться получать ответы на свои вопросы самому(!), переворачивая 'тонны информации' - то помиво найденных ответов на конкретный вопрос, в голове оседает немало информации, которая может быть восстребована для ответа на последующие вопросы и для себя и для других ...
Комбинация из а) и б) - это и есть тот оптимум, который человеку позволяет и практические задачи решать, экономя время и не превращаться в тупого 'вопрошайку' или заумного 'энциклопедиста'.
По сути вопроса: тут недавно (неделька-две назад) как раз давался ответ на твой вопрос. Полистай топик ...
Artos
Тут вопрос назрел.
В каком формате будет сохраняться время таймеров? MRN$ предлагал паковать в CTime (yyyy,mm,dd,hh,mn,sc,ms).
Хотя миллисекунды наверное будет излишне.
Если так, то лучше сохранять число целиком, а из него потом брать что нужно.
Например 2012-й год, 12-й месяц, 31-е число, 23 часа, 59 минут, 59 секунд записать числом
20121231235959
При приведении к основанию счисления 100, уже начиная с двухзначных чисел можно сохранять строкой с двукратным уменьшением кол-ва байт.
Например 20121231235959 с основанием 100 будет равно KCCVNxx.
Или я чего-то не правильно понимаю с сохранением?
Gun12
Ответ на вопрос как раз стОит определить при создании блока таймеров.
Пока есть приведенный выше прототип и 'история' его использования, которая уже начала изменяться:
- ранее использовалось хранение значения каждого таймера 'как есть', т.е. для реал-таймеров это были милисекунды ( game.time() ), для гейм- минуты ( game.get_game_time():diffSec(CTime*)/60 );
- для сохранения в pstor-актора используются во многих модах имеющиеся (ун)паки, на базе штатных методов. Т.е. для хранения чисел - число переводитс в стринг и пристыковывается к имени ...
Тут уже требуется поразмышлять:
1. Хранить в pstor'е или прямой записью в пакет актору иль еще куда ...
2. Хранит**5001618d69873ce82a42**end
end
--/<
for i=1,TM_COUNT_MAX do
Load_Timer( string.format("rt%d",i), true ) --/ загрузка/проверка real-timer'а
Load_Timer( string.format("gt%d",i), false) --/ загрузка/проверка game-timer'а
end
end
--/------------------------------------------------------------------
--/ Сохранение таймеров (to actor-pstor)
--/------------------------------------------------------------------
function Save_Timers()
local iTimeR,iTimeG = game.time(), this.Get_Game_Minutes() --/ текущие значения (real-ms/game-minutes)
local sIdx,tTmr
for sIdx,tTmr in pairs(tTimers) do
if tTmr.m then --/ для real-timer'а
SetVarA(sIdx, {tTmr.n, math.ceil((tTmr.t-iTimeR)*0.001), tTmr.p}) --/ сохраняем под именем-индексом таблицу real-таймера
else --/ для game-timer'а
SetVarA(sIdx, {tTmr.n, tTmr.t-iTimeG, tTmr.p}) --/ сохраняем под именем-индексом таблицу game-таймера
end
end
end
--/------------------------------------------------------------------
[/code]
- т.е.:
а) реал-таймер округляется до целых секунд, гейм - имеет минуты.
б) для каждого таймера сохраняется только оставшееся время (секунды или минуты), т.е. с отбрасыванием времени с момента старта игры до момента сохранения сэйва.
Как уже писал выше: сохранять значения для года (да и для месяца) не имеет для модов практического применения.
P.S. Дополнительно в прототип можно ввести перевод десятичных значений в 16-ти ричные (для экономии кол-ва знаков)
16-ти ричные малоэффективно.
31235959 to16 = 1DC9F77
31235959 to100 = VNxx
Я использую собственную функцию перевода, поэтому символы какие мне вздумалось :)
Главное количество.
Из таких "мелочей" складывается общая эффективность.
Пусть на нас ориентируются ;-)
отредактировал(а) Gun12: 15-05-2011 23:07 GMT3 час. Не стань номинантом премии Дарвина.
Gun12
'мало/много' - понятия все же относительные ... и нередко не только количественные критерии имеют значение.
Я не забываю о том, что что-то может использоваться из готовых наработок от разрабов иль из модов. :-)
Все же 16-ти ричные (ре)трансляторы и уже написаны и не привязаны к единичному примению.
Но конечно же при написании нового и 'оптимального' могут быть и новые методы и пр.
Важен результат ... в комплексе. ;-)
MRN$ предлагал паковать в CTime (yyyy,mm,dd,hh,mn,sc,ms).
Хотя миллисекунды наверное будет излишне.
Милисекунды принимаются и возвращаются только для порядку, из-за того, что в формате они есть. То, что принимается - игнорируется, то, что возвращается - всегда 0. CTime это только на входе-выходе сохранения, сохраняется число с точкой, значение года может быть 0...
На всякий случай, обращу внимание на один факт: целые числа - полноценные только до 2^23 (= 8388608). Если 8388608 - секунды, то это интервал всего 97 дней...
отредактировал(а) MRN$: 15-05-2011 23:14 GMT3 час. всё легко
MRN$
Это все понятно ...
Но (ИМХО) не стОит только о крайностях говорить.
Если кол-во секунд будет точно равно кол-ву дней - тогда ясно, что экономнее запоминать только дни.
Но в 99.9...% случаев мы будем иметь и секунды и минуты и часы ... Тогда такое применение будет наоборот проигрывать.
Напоминаю: имеем два типа таймеров:
а) real - это секунды. В игре могут применяться для установки до 'часов'.
б) game - минуты, часы, дни
Если кто-то считает, что этих двух типов мало или их диапазоны должны/могут быть востребовано расширены - плз. аргументировать.
И кстати о CTime:
Неважно что и как принимается/возвращается, используется все тот же набор байтов:
local M, D, h, m, s, ms = p:r_u8(), p:r_u8(), p:r_u8(), p:r_u8(), p:r_u8(), p:r_u16()
т.е. 5+2 = 7. Т.е. стринг типа '00000000000000' будет занимать такое же кол-во байтов, а менее длинные - будут уже 'экономить'!
P.S. подразумеваю, что блок таймеров не сам по себе должен быть 'оптимален' во всех отношениях, а конечно применительно к игре и базироваться на адекватности применения со стороны модмейкера. Что имею ввиду, к примеру:
Если мы и имеем ограничение целочисленных секунд (97 дней) - то это ж как нужно применять секундный таймер, чтобы взводить его в начале игры и чтобы он "тикал" три игровыз месяца? :-)
Если микроскопом и можно забивать гвозди, это не означает, что к нему стоит приделывать поудобнее ручку и закаливать/углеродить 'боек'.
Ограничения порою играют и 'воспитательную' роль, заставляя модмейкера думать и находить бОлее оптимальные решения, чем решения 'в лоб'.
Пример:
Всем известный фикс радала (исключающий проход на Припять без отключения Выжигателя) ставится на апдейт актору и ... жрет потихоньку ресурсы почти всю игру, пока игрок не дойдет собственно до Радара.
а) Что мешает запускать этот фикс только тогда, когда игрок ступил наРадар?
б) Что мешает отключать этот фикс когда игрок зашел в Припять?
Ответ: мешает инертность, просмотрев применяемые коды, внести несложные условия/проверки, которые сэкономят копеечное растранжиривание ресурсов игры. Капля в море - вроде как ... но в какой-то момент из подобных капель возникает уже ощутимый отток и приходится экономить уже на 'живых' скриптах/алгоритмах ...
Применительно к таймерам: Не сложно просчитать в алгоритме обязательные начальные условия, которые отсекут месяцы/дни от необходимого старта нужного таймера.
Закладываться на неразумное применение таймеров ИМХО неразумно(!) (сорри за тавтологию). Самоцель сделать блок таймеров по принципу:'самый-самый-самый' - обречена на создание или невостребованного блока или восстребованного теми, кто не привык и не хочет думать.
"Раздал военным ПКМ, а они ими что-то не очень хотят пользоваться -стреляют одиночными хоть ты тресни. И так крутил конфиг оружия, и так -не хотят. Тут вспомнил как
kwendy крутил параметры weapon_min_queue_size_far и weapon_max_queue_size_far. Незадача,
если этот параметр выкрутить в m_stalker.ltx, то все НПС будут стрелять как сумасшедшие.
Рискнул засунуть эти параметры в конфиг ПКМ'а в следующем виде:
weapon_min_queue_size_far = 15
weapon_max_queue_size_far = 15
weapon_min_queue_interval_far = 500
weapon_max_queue_interval_far = 700
weapon_min_queue_size_medium = 30
weapon_max_queue_size_medium = 30
weapon_min_queue_interval_medium = 400
weapon_max_queue_interval_medium = 600
weapon_min_queue_size_close = 100
weapon_max_queue_size_close = 100
weapon_min_queue_interval_close = 300
weapon_max_queue_interval_close = 500
Опа! Военные стали из ПКМ шмалять именно с такими настройками -на дальних дистанциях
очередями по 15, на средних -по 30, а на близких весь цинк в 100 патронов расстреливать за раз. При этом на других сталкеров этот параметр не влияет -они стреляют так как прописано в m_stalker.ltx
Так что таким способом можно задавать логику использования каждого оружия на разных дистанциях."
Всем привет!! Пара вопросов.
1.При получении ГГ дозы радиации,чтобы не подохнуть он использует антирад.Так вот меня интересует сам механизм каким образом антирад убирает радиацию.Какие файлы надо рассмотреть.
2.Киньте ссылку на логику вертолётов.А то мой вертолет не хочет летат по моим координатом:-) а летает метрах в 20 от них.
Большая Земля - это часть Зоны Отчуждения и наоборот.
Vich2010 На счёт антирада. Действие при его использовании устанавливается в его конфигурации: "gamedata/config/misc/items.ltx"
секция: [antirad]:identity_immunities
параметры действия при использовании: eat_health = 0
eat_satiety = 0
eat_power = 0 eat_radiation = -1.0 ;уменишить радиацию на 1.0 wounds_heal_perc = 0
eat_portions_num = 1
Проект "Mobile Manager" закрыт, в связи со стечениями неблагоприятных обстоятельств, и последующей потерей всех файлов и справок текущего проекта.
singapur22, сорри, но дополню тебя, а то подобным образом заданные вопросы порой самим же задающим мозги замусоривают ... Vich2010
1. "механизм каким образом антирад убирает радиацию" - прописан в движке игры и только разрабам игры известен. Мы же можем только оперировать изменениями в конфигах объектов соответствующего параметра, который влияет на этот "механизм".
2. Параметр, отвечающий за "убивание радиации", а точнее на изменение уровня радиактивной зараженности ГГ, указал singapur22 выше.
3. Этот параметр может быть прописан в конфигах (а точнее почти всегда есть) у объектов типа 'eatable item' (то бишь жратвы). Так что и водкой во многих модах можно "убивать радиацию".
(спешу, поэтому дам только кратко)
В своих ковыряниях на подобную тему как минимум столкнулся с тем фактом, что попытки работать с файловой системой и методами для нее - проблемы возникают в директории 'gamedata\config' и далее. В корне геймдаты, в иных директориях (для сэйвов и т.п.) проблем гораздо меньше.
Ощущение такое, что папки конфигов открыта на чтение движком и попытки параллельно читать/изменять натыкаются на ... При ограничении области видимых файлов (исключая субдиректории) ошибок/проблем становится меньше. Так же есть зависимость от применяемых сходных методов класса FS.
попытки работать с файловой системой и методами для нее - проблемы возникают в директории 'gamedata\config' и далее.
Кстати, забыл упомянуть. С несколько иной проблемой столкнулся при использовании данного класса, по пути "$game_textures$". А в частности при использовании метода FS:file_list_open(FS*, string, number). Задача заключалась в определении списка требуемых индексированных текстур. Происходило то, что полсе его использования, распакованная папка textures и всё, что в ней находилось (окромя db архивов) просто напросто терялись из виду игры.
И на счёт конфигов. У меня в настоящий момент прекрасно работает схема определения списка секций в указанном конфигурационном файле, и схема определения инклудов. Пока что работал только с двумя файлами, creatures/spawn_sections.ltx и system.ltx. Возможно, что это относится не ко всем файлам, и к некотрым просто нельзя таким образом обращаться.
Посмотрим, как будет реагировать на другие файлы в отдельности.
Проект "Mobile Manager" закрыт, в связи со стечениями неблагоприятных обстоятельств, и последующей потерей всех файлов и справок текущего проекта.
singapur22
Ты сколько байтов пытался считать из файла? У меня стабильно вылетало(или зависало - уж не помню точно) если размер файла превышал ~313 байт. Считывал через r_stringZ() в одну строку.
----------------------------------------------------------------------------------------------
Странно - а у меня больше никак не читалось. Глянь у меня в журнале раздел про FS - там примеры функций - может я че не так делал...
отредактировал(а) erlik: 16-05-2011 14:34 GMT3 час. Разработки: "Тотализатор","Kill-zone", "Mega-bomba", Mega_gravi",
"Рандомные тайники(а также декодер, мины+диалоговый аддон"), "Выбрасываемый рюкзак", "Аналоговые часики на худ"
erlik Эмммм... Я понятия не имею, сколько там было байтов, когда вылетало, но например файл spawn_sections.ltx имеет размер в ~16kb, а это гораздо больше, чем 313 b
И читаю его без проблем. А файл system.ltx и того больше.
Я щас сооружаю вьювер секций конфигурационных файлов, выводимых в порядке их инклудов (чисто для теста). Ладно, добавлю ту
отредактировал(а) singapur22: 16-05-2011 15:07 GMT3 час. Проект "Mobile Manager" закрыт, в связи со стечениями неблагоприятных обстоятельств, и последующей потерей всех файлов и справок текущего проекта.
;запрещение режима Sprint для Актера
sprint_allowed = false
;-----------------------------------------------------------------------------------
;params of weapon recoil
;dispersion_start = 2
fire_dispersion_base = 0.25 ; угол (в градусах) базовой дисперсии оружия (оружия зажатого в тисках)
;control_inertion_factor = 1.24f
;disp_rate = 1.88
;отдача
cam_relax_speed = 4.75 ;скорость возврата в исходное положение
;cam_relax_speed_ai = 120.75
cam_dispersion = 0.12 ;увеличения угла (в градусах) с каждым выстрелом
cam_dispersion_inc = 0.2 ;увеличениe cam_dispersion с каждым выстрелом (!!!!параметр используется, но его убирание не приводит к вылету!!!)
cam_dispertion_frac = 1.0 ;ствол будет подыматься на cam_dispersion*cam_dispertion_frac +- cam_dispersion*(1-cam_dispertion_frac) (!!!зависит от предыдущего!!!)
cam_max_angle = 10.0 ;максимальный угол отдачи
cam_max_angle_horz = 5.0 ;(degree) maximum shot horizontal degree
cam_step_angle_horz = 0.4 ;(degree) size of step camera moved in horizontal position while shooting
fire_dispersion_condition_factor = 8 ;увеличение дисперсии в процентах при максимальном износе
misfire_probability = 0.005 ;вероятность осечки при максимальном износе
misfire_condition_k = 0.5 ;при значении 0 осечка никогда не возникает, даже при полном износе. (!!!!параметр используется, но его убирание не приводит к вылету!!!). влияет на первый параметр)
condition_shot_dec = 0.0003 ;увеличение износа при каждом выстреле
;-----------------------------------------------------------------------------------
;direction = 0, 0, 1
fire_point = 0.3,-0.25,1.488 ; position (3rd person view) for particles of fire
flame_particles = weapons\heli_weapon
smoke_particles = weapons\generic_shells
;shell_point = 0.0, 0.129, 0.192
shell_dir = 0.0, 0.0, 0.4
shell_point = -0.1, 0.0, 1.50 ; position (3rd person view) for shell to throw out
;shell_dir = 0.0, -1.0, 0.0
shell_particles = weapons\generic_shells
use_aim_bullet = false ; Поддерживается ли первая суппер пуля
;time_to_aim = 1.0
hud = wpn_m_134_hud
;normal = 0, 0, 0
position = 0.06, -0.25, 0.41 ; position (offset) and orientation of the weapon in the hands of character. метрическая система измерений. 1 - лево/право относительно человека. 2 - вверх/вниз. 3 - вперёд/назад
orientation = 0, 0, 0 ; (3rd person view)
;--STRAP PARAMETERS-----------------------------------------------------------------
;под мишкой
strap_position = -0.25,0.0,0.3 ; position (offset) and orientation of the weapon when it is strapped. 1 - вперёд/назад относительно человека 2 - влево/вправо 3 - вверх/вниз
strap_orientation = -25,-189,65 ; (3rd person view in degrees)
strap_bone0 = bip01_spine2
strap_bone1 = bip01_spine1
;-----------------------------------------------------------------------------
;HUD offset in zoom mode (to all)
;(use CONSOLE: hud_adjust_mode 0,1,2, then keys WSADQE and P to show current value in console)
singapur22
Советую в подобных экспериментах, чреватых зависаниями и/или 'безлоговыми' вылетами, попробовать использовать LUA-перехватчик (by alpet). Он позволяет в большинстве случаев получить информацию, относящуюся к ошибке, как в своем лог-файле, так и в штатном логе, т.е. информация, которая попадала в лог-файл до момента вылета - сохраняется ы нем.
Ссылка: Перехватчик Lua
(в топике Симбион "Разработка" на 1-ой страничке есть ссылка на текущую версию для ТЧ с небольним реадми).
У меня, в подобных твоей ситуациях, ругань именно на метод 'r_close'. Вероятно все же, 'reader' для него - нечто иное, чем объект файла. К сожалению, разрабы практически не дали нам в ТЧ нормально работающего класса для работы с файлами.
(кстати, вышеупомянутый luacap может легко читать те же xml'ки)
АнархОПанк
Ты бы вначале в тему вник бы, почитав пред'историю ... Mehanik Yar
В очередной раз повторю: метод тыка в программировании не самый продуктивный и тем более почти не прибавляет знаний и навыков.
Вместо попыток распихать параметры в абы какие секции 'лишь бы заработало' - лучше вначале подумать ...
В твоих 'цифирьках' явный перекос (от фонаря не стОит их править). В ближнем бою твоим непсям предписано из пулемета строчить очередями по 100...500 патрон с паузами по 5...5 милисекунд - не считаешь ли это явным перебором? ;-)
Может вначале попробовать вменяемые значения?
;--/ на дальних дистанциях стрелять очередями по 10...15 с паузами 500...800 ms
weapon_min_queue_size_far = 10
weapon_max_queue_size_far = 15
weapon_min_queue_interval_far = 500
weapon_max_queue_interval_far = 800
;--/ на средних дистанциях стрелять очередями по 20...30 с паузами 400...600 ms
weapon_min_queue_size_medium = 20
weapon_max_queue_size_medium = 30
weapon_min_queue_interval_medium = 400
weapon_max_queue_interval_medium = 600
;--/ на ближних дистанциях стрелять очередями по 50...100 с паузами 300...500 ms
weapon_min_queue_size_close = 50
weapon_max_queue_size_close = 100
weapon_min_queue_interval_close = 300
weapon_max_queue_interval_close = 500
Эта тема закрыта, публикация новых сообщений недоступна.
Продолжая пользоваться сайтом, вы соглашаетесь с использованием файлов cookie. Страницы сайта могут содержать информацию, запрещенную для просмотра посетителям младше 18 лет. Авторское право на серию игр «S.T.A.L.K.E.R» и используемые в ней материалы принадлежит GSC Game World.