SkyLoader
Пауза - это просто остановка выполнения программы - к slow_motion (замедлению) это отношения не имеет. На клавиатуре тоже есть кнопка pause(можно загрузку винды остановить) - метод device():pause(true) из сталкера делает то же самое - ставит выполнение игры на паузу.
--------------------------------------------------------------------------------------------
Функция для спавна оружия в мультиплее и в скрипты экспортирована - можно попробовать проверить как она работает:
local SpawnMP= game_sv_mp () --// получим ссылку на класс
SpawnMP:SpawnWeaponForActor(number, string, boolean, boolean, boolean); - первый аргумент наверно айдишка игрока, string - что спавнить, ну а дальше только гадать остается.
Разработки: "Тотализатор","Kill-zone", "Mega-bomba", Mega_gravi",
"Рандомные тайники(а также декодер, мины+диалоговый аддон"), "Выбрасываемый рюкзак", "Аналоговые часики на худ"
erlik, ну все же мне кажется, что можно порыться и поискать, может у разрабов что-нибудь есть подобное. (я вроде слышал, что они об этом давно заикались, но отказались от слоумоу). Хотя может они все повырезали давно.
За ф-цию спасибо, буду смотреть, что там за аргументы еще нужны.
как сделать чтобы нпс, ну скажем новички на кордоне возле сидоровича после моего выполнения квеста начали идти на блокпост военных. я вот в алл.спавне им в скрипт писал:
[smart_terrains]
esc_lager = {-мой инфопоршень}
esc_blokpost = {+мой инфопоршень}
но ничего не происходило, они по прежнему стояли в лагере..
Сделал курение по тутору с wiki вроде все правильно, но при использовании сигареты сброс таймера не происходит и здоровье по прежнему уменьшается
вот основной скрипт, помогите пожалуйста разобраться
-- Проверяем нужно ли покурить. Вызывается каждые 6 игровых минут
function test_for_need_kur()
_red_ff.save_variable("kur",_red_ff.load_variable("kur",0)+1)
_red_ff.g_start_timer("kur",0,0,6)
kur_reduce_health()
end
-- Уменьшение здоровья, если долго не курил
function kur_reduce_health()
local tmp = _red_ff.load_variable("kur",0)
if tmp > 15 then
if db.actor.health > 0.15 then
db.actor.health = - 0.005
end
end
end
-- Курение
function kur_item(oid, time)
if alife():object(oid)==nil then
local tmp = _red_ff.load_variable("kur",0) - time*10
if tmp < 0 then tmp = 0 end
_red_ff.save_variable("kur", tmp)
kur_reduce_health()
end
end
Я тут подумал, а если два телепата начнут читать мысли друг друга одновременно... Они умрут от переполнения стека?
VOva-VIP а путь кто им будет делать? Они же сами по себе пойдут. И вообще не понятно в чем заключена логика твоих НПС, когда им можно сделать логику на поршень, по отыгрыванию которого они идут по пути, заданному в спавне.
За_Плесне_велый Делай так как сказано в стать. Ссылку тебе далsingapur22 поищи статья называется "Изменение текстур" ну или как то так. Только тебе еще худ надо будет править. Ну если задался цель, то вперед!!!
Artos, врятли понадобится :). Так можно перебор по айди на апдейт поставить - будут такие же тормоза.
__________
Такой вопрос: будут ли тормоза в игре, если я сохраню около 300 пстор переменных и буду их обновлять каждую секунду. И будет ли дольше сохраняться игра от этого?
SkyLoader
Похоже для тебя все едино - и 'пауза' и 'тормоза' ... Ну не пригодится, так и ладно. ;-)
SkyLoader: ... будут ли тормоза в игре, если я сохраню около 300 пстор переменных ...
Ma$ter: Может проверять, изменилось ли значение переменной или нет ...
Во-первых, pstor'ов не один в игре, почти каждый непись/монстр его имеет. СтОит уточнять неявное!
Во-вторых, значения бывают самые разные. Портянка текста - тоже может быть значением переменной. Не считаешь, что субъективное понятие 'тормоза' может зависет и от контента?! Для акторского стораджа - я бы не из-за возможных тормозов, а из-за возможного переполнения больше волновался бы.
В-третьих, как уже заметил Ma$ter , зачем обновлять то, что не изменялось?
Но(!) он предложил вариант с перепроверкой, а это - 'читаем+сравниваем', что порою может быть более продолжительным процессом (особенно со строками), чем просто '(пере)записать'.
Если подумать немного, то может вспомнится, что 'pstor' - субтаблица, которая помимо обычных табличных свойств, читается из сэйва при загрузке объекта и записывается в сэйв при сохранении.
Простая мысль: Скопировать уже загруженный 'pstor' в легкодоступное место в локальную табличку и работать с нею. А когда настанет время сохранения в сэйв - так и добавить/актуализировать ее в 'pstor'е ...
Так что ... и 30 переменных могут тормознуть, и ... 30х30 - можно не замечать в игре - все зависит от ... 'головою' ли алгоритм и код написаны или 'копипастом'.
При моде BlowoutMod 1.0 от DEXXX
У меня НПС Ведут себя как то странно .
Вот скрин.
http://4pu**5001618d69873ce82a42**alk] in inaccessible for object [esc_blokpost_soldier9]
как заспавнить трупа НПС и как сделать чтобы при первом появлении на Свалке начинался мой квест?
и ещё как убрать сообщения от Волкодава и экологов в Дикой территории и чтоб с Кругловым вообще квест не начинался
SkyLoader
Ну а какой смысл в твоем вопросе? Ты вроде как не новичок в модах и сам можешь в кодах посмотреть ...
Берем, например, многим известный 'amk.script', в котором ежесекундно вызывается 'function check_timers()', напрямую сканирующая в сторадже актора 100+100 переменных (реал- и гейм- таймеров).
Если взять '_m.script' из Симбиона, то аналогичное (100+100) выполняется с локалной копией массива таймеров.
Судя по твоему уточнению, ты собрался к каждому нужному тебе объекту прикручивать таймер.
Без контекста невозможно судить о корректности/правильности намерения, но проверку параметров из pstor'а легко делать в апдейте непосредственно непися (в биндере), что на тормоза мало повлияет.
Если взглянуть в 'xr_wounded.script', то можно увидеть, что почти у всех неписей сканируются/перезаписываются 4 строковых параметра из pstor'а ...
Так что моя последняя фраза из предыдущего поста остается актуальной.
По вопросу таймеров.
Тут конечно может существовать много НО и ЕСЛИ.
Вот один из примеров.
Есть 5 таймеров. На момент считывания из рstоr-а имеющих значения, скажем, - 5, 15, 50, 70 и 150 секунд.
Т.е. первый закончит свою работу через 5 сек., последний через 150.
Это что же получается, для отработки всех таймеров нужно 150 раз вызывать чтение и перезапись.
Чудовищно нерационально.
Можно ведь вычислить минимальное значение (5 в данном случае), и произвести действия по истечению этого срока. Т.е. обработать "последствия" завершения работы таймера, вычесть это значение (при первом обороте 5) из полученных значений всех остальных таймеров, сохранить текущее время игры, снова вычислить минимальное и ... т.д.
При сохранении получать текущее время игры, из него вычесть сохраненное и уже эту разницу вычесть из показаний каждого таймера, сохранить.
Другими словами количество циклов перезаписи будет всего лишь равно количеству таймеров.
Примерно такой вот алгоритм.
#SkyLoader :
Дело в том, что я хочу сделать таймеры для n-ого кол-ва объектов в игре. И каждую секунду отнимаю 1 от переменной (числовые переменные).
А не проще сохранять не просто числовые значения, а глобальное время в момент начала отсчёта.
Я так понимаю, что тебе нужно производить отсчёт периода времени для каждого определённого объекта, с одному тебе известному началу отсчёта.
Если делаешь чтото подобное, то ты идёшь не по тому пути. Достаточно запоминать время, в момент начала отсчёта, и в последствии просто производить сравнение с заранее установленным периодом, по истечении которого вызывать то, или иное действие.
Допустим, создали некую аномалию, при попадании в которую нпс заражается неким вирусом, который в свою очередь, убивает непися через определённый промежуток времени. Естественно, для каждого объекта время начала отсчёта будет произвольным.
Действия просты:
1. запоминаем время попадания в зону аномалии (время начала отсчёта) сложенное с установленным периодом.
2. каждую секунду, или даже каждый цикл апдейта, производим сравнение запомненного времени с текущим временем.
3. если текущее время больше запомненного, то производим нужное действие (убиваем непися).
Собственно ничего сложного. А производить постоянную перезапись не рацианально. Всегда можно найти наиболее оптимальное решение.
Проект "Mobile Manager" закрыт, в связи со стечениями неблагоприятных обстоятельств, и последующей потерей всех файлов и справок текущего проекта.
Artos
Я ни минуты не сомневался кто именно найдет эту идею практичной и, главное, реализует её :)
Забыл только написать что, как ты правильно заметил выше, все эти изменения производятся в локальной таблице.
А реальные чтение/запись делать только при загрузке/сохранении.
Приветствую всех, у меня несколько вопросов:
Для чего в СДК ключ -editor и что он дает
Как запустить локацию из батника
зачем нужна подгрузка (Дискетка мелькающая) и как ее убрать!
и как добиться нормального освещения от партиклов установленых в level editor
Эта тема закрыта, публикация новых сообщений недоступна.
Продолжая пользоваться сайтом, вы соглашаетесь с использованием файлов cookie. Страницы сайта могут содержать информацию, запрещенную для просмотра посетителям младше 18 лет. Авторское право на серию игр «S.T.A.L.K.E.R» и используемые в ней материалы принадлежит GSC Game World.