AndreySol 215 Опубликовано 29 Января 2012 Поделиться Опубликовано 29 Января 2012 Подскажите, пожалуйста логику работы Разгрузки. Имеется в виду, то, что оружие может отстрелять только то кол-во патронов, которое положено в Разгрузку. Пытался подсмотреть в NLC 6, но не нашел в каком из скрипт-файлов это реализуется. Ссылка на комментарий
Molphar 109 Опубликовано 29 Января 2012 Поделиться Опубликовано 29 Января 2012 Доброго времени суток. Подскажите пожалуйста как в ЗП сделать динамический level changer как в НЛС ( т.е. при поднятии ПДА или другого иного предмета спаунился переход с одной локации на другую ) ? Ссылка на комментарий
KD87 718 Опубликовано 29 Января 2012 Поделиться Опубликовано 29 Января 2012 (изменено) Molphar, делаешь переход (неважно, через скрипт или all.spawn), а дальше манипулируешь им методом enable_level_changer(bool val) класса game_object, то есть применяешь метод к клиентскому объекту. enable_level_changer(true) включит переход, enable_level_changer(false) - выключит. Работает только в ЧН и ЗП. Изменено 29 Января 2012 пользователем KD87 Ссылка на комментарий
SkyLoader 53 Опубликовано 30 Января 2012 Поделиться Опубликовано 30 Января 2012 Такие вопросы появились: 1. Как надо записать ф-ции в таблицу, чтобы можно было их потом вызвать? Например: ... [12] = func() spawn(), ... 2. Как можно проверить, что гг зашел в аномалию с определенной секцией? Есть ли у них биндер, чтобы проверить? Или надо его создавать? Ссылка на комментарий
SibireaStalker 0 Опубликовано 30 Января 2012 Поделиться Опубликовано 30 Января 2012 (изменено) Попробовал создать что-то вроде idle-звука в ЗП по тутору, но ничего не работает. Никто не подскажет, в чём проблема? создаете скрипт: имя_файла.script туда пишете function use_snd(obj) local obj_sect = obj:section() local snd if obj_sect == 'ваш предмет' then snd = [[Путь_до_звука_относительно_папки_sounds]] elseif obj_sect == 'ваш предмет' then snd = [[Путь_до_звука_относительно_папки_sounds]] elseif obj_sect == 'ваш предмет' then snd = [[Путь_до_звука_относительно_папки_sounds]] elseif obj_sect == 'ваш предмет' then snd = [[Путь_до_звука_относительно_папки_sounds]] end if snd then local snd_obj = xr_sound.get_safe_sound_object(snd) snd_obj:play_no_feedback(db.actor, sound_object.s2d, 0, vector(), 1.0) end end сохраняем открываем bind_stalker.script и в функцию function actor_binder:net_destroy() пишем self.object:set_callback(callback.use_object, nil) и в функцию actor_binder:reinit() пишем код: self.object:set_callback(callback.use_object, self.use_object, self) и в этом же файле создаем функцию: function actor_binder:use_object(obj) имя_вашего_скрипта.use_snd(obj) end Изменено 30 Января 2012 пользователем Artos Выводы модмейкера: 1)Вылетает - это хорошо. Значит, работает 2) Если хочешь сделать что-то хорошо, делай сам! 3) Если падёшь духом, падёт и мод. 4) Он живой... Ссылка на комментарий
Nazgool 250 Опубликовано 30 Января 2012 Поделиться Опубликовано 30 Января 2012 1. Как надо записать ф-ции в таблицу, чтобы можно было их потом вызвать? Например: ... [12] = func() spawn(), ... Т.е. у тебя есть некоторое количество функций. В таблице записаны различные наборы из этого количества, выполняемые при определенных условиях? Объясни детальнее чего ты хочешь, может и решение изменится. Ссылка на комментарий
Artos 99 Опубликовано 30 Января 2012 Поделиться Опубликовано 30 Января 2012 (изменено) SibireaStalker 1. В ЗП уже имеется озвучка используемых предметов ... 2. В ЗП уже имеется коллбэк на использование предметов. Т.о. твои попытки впихнуть второй коллбэк на тоже самое событие ни к чему хорошему не приведет. Или спользуй имеющийся (use_object), или отключай его и используй свой. Аналогично и с озвучкой, с той разницей, что не стоит создавать какофонию, т.к. будут и твои и уже имеющиеся ... Добавлено через 6 мин.: SkyLoader, ответ собственнно в твоем вопросе, хотя код, который приведен тобоою никак к нему не относится, т.к. в таблицу включаешь не сами функции, а ключам присваиваешь уже результат некоей внешней функции. Пишем в таблицу напрямую: my_table = { [1] = function(arg) return arg end, ... [N] = function(arg) return not arg end, ... } Можно функции задать отдельно, а линки на них (т.е. имена функций) включить в таблицу: my_func1 = function(arg) return arg end ... my_funcN = function(arg) return not arg end ... my_table = { [1] = my_func1, ... [N] = my_funcN, ... } т.е. ничего сложного ... Изменено 30 Января 2012 пользователем Artos "Но иногда найдется вдруг чудак, этот чудак все сделает не так ..."© Машина времени Ссылка на комментарий
SkyLoader 53 Опубликовано 30 Января 2012 Поделиться Опубликовано 30 Января 2012 (изменено) Gun12, у меня идет временно перебор таблицы, в котором ключ - время в секундах, значение - некоторые ф-ции, которые в эту секунду должны выполниться. Просто таких таблиц я хочу сделать много. А, вот еще вспомнил: можно ли из стринговой строки, например, local t = "four_table", сделать такую строку, чтобы можно делать так: for k,v in pairs(t) do? Если да, то как? Artos, я хочу сделать, чтобы функции в значениях выполнялись (например спавн, запуск звука, и тд.), а не что-то возвращали, т.е. если время = ключ, то делаем спавн. Изменено 30 Января 2012 пользователем SkyLoader Ссылка на комментарий
Unnamed Black Wolf 4 Опубликовано 30 Января 2012 Поделиться Опубликовано 30 Января 2012 SkyLoader, Таймер+функция с fastcall, или чего-нить в этом духе.. Ссылка на комментарий
Nazgool 250 Опубликовано 30 Января 2012 Поделиться Опубликовано 30 Января 2012 SkyLoader 1 my_func1 = function() return 1 end my_func2 = function() return 2 end my_func3 = function() return 3 end my_table = { [12] = {my_func2, my_func3}, -- заключить линки на функции в таблицы [21] = {my_func1, my_func2, my_func3}, [33] = {my_func3, my_func1} } for k,v in pairs(my_table) do -- где-то парсим if any_time == k then -- если время совпало с ключем... for i=1,#v do v[i]() -- вызываем каждую из функций таблицы функций end end end 2 four_table = {3,4,5} -- таблицу задавать только глобально в текущем контексте -- при локальном объявлении нужно использовать debug local t = "four_table" for k,v in pairs(_G[t]) do -- если таблица находится в глобальном контексте -- если в модуле, то вместо _G[t] пиши имя_файла[t] -- action end Ссылка на комментарий
*Shoker* 322 Опубликовано 2 Февраля 2012 Поделиться Опубликовано 2 Февраля 2012 Существует ли способ скриптово поменять предмету из ивненторя его name или description? Ну вообщем имя и описание. Можно просто Shoker, форум АМК съел моё старое имя и не хочет отдавать о_О Мастер аномалий на свою заднюю точку. Ссылка на комментарий
Капрал Хикс 524 Опубликовано 2 Февраля 2012 Поделиться Опубликовано 2 Февраля 2012 *Shoker*, незаметно убрать этот предмет, а взамен заспавнить в инвентарь точно такой же, но с другим описанием. Ссылка на комментарий
Tris 9 Опубликовано 2 Февраля 2012 Поделиться Опубликовано 2 Февраля 2012 Капрал Хикс, А именно изменить нельзя? • Dead Forgetting Zone • Мои работы. Обновление: 24.08.2012 Ссылка на комментарий
*Shoker* 322 Опубликовано 2 Февраля 2012 Поделиться Опубликовано 2 Февраля 2012 Капрал Хикс Тогда мне придётся продублировать в игре всё оружие и всю броню Можно просто Shoker, форум АМК съел моё старое имя и не хочет отдавать о_О Мастер аномалий на свою заднюю точку. Ссылка на комментарий
Desertir 202 Опубликовано 2 Февраля 2012 Поделиться Опубликовано 2 Февраля 2012 Нужно перепаковывать нет-пакет, но, на сколько мне подсказали, там нет того, что есть в конфигах (возможно малая часть и есть). Так что только подменой. *Shoker*, не обязательно дублировать, если имя будет меняться 2-3 раза, думаю, не так уж и затратно написать еще несколько наследуемых секций, где будет изменяться только имя и описание. Хотя если у тебя пара сот стволов... ТЧ 1.0004. SAP и Trans mod github Ссылка на комментарий
Artos 99 Опубликовано 2 Февраля 2012 Поделиться Опубликовано 2 Февраля 2012 (изменено) *Shoker*: Существует ли способ скриптово поменять предмету из ивненторя его name или description? Довольно "детский" вопрос ... Что мешает скриптеру НЕ использовать штатные способы получения имени и описания объекта, а написать свои и ими пользоваться в зависимости от ситуации/потребностей? Если предмет один и тот же - то и имя ему и описание должны в игре быть одними и теми же. Возникла потребность - ну так и формируй условие и выводи по этому условию свои имена/описания! Если же предмет сменился - то соответственно и имя меняется (в любом случае!, метяя как минимум числовой суффикс). Пора б научиться задавать вопросы так, чтобы их смысл был понятен, а не писать "детские" похотелки для погадалок ... Изменено 2 Февраля 2012 пользователем Artos "Но иногда найдется вдруг чудак, этот чудак все сделает не так ..."© Машина времени Ссылка на комментарий
Malandrinus 615 Опубликовано 2 Февраля 2012 Поделиться Опубликовано 2 Февраля 2012 Artos, Довольно "детский" вопрос ... Что мешает скриптеру НЕ использовать штатные способы получения имени и описания объекта, а написать свои и ими пользоваться в зависимости от ситуации/потребностей? Ох и тяжелый у тебя характер =) Сразу в лоб: "детский вопрос". Совсем не детский! На стандартные движковые значения завязаны много стандартных же движковых вещей. К примеру часть интерфейса инвентаря, окна диалогов, торговли. Можно конечно завести свои скриптовые значения со смыслом "имя", "описание" и т.п., но в этих движковых диалогах так просто будет не подменить. Выходов из этого есть потенциально несколько, как минимум два. Первый, на самом деле завести чисто свои скриптовые значения. В диалогах придется закрывать поля с движковыми значениями своими окошками со своими строками. Выгода - это чисто скриптовый способ. Недостаток - хлопотная реализация с потенциальными проблемами стабильности работы. Кроме того, если поразмыслить, то это не везде сработает. К примеру, как отследить, что в инвентаре выбран некий предмет, чтобы установить его описание? Второй способ, заменять движковые значения. Штатных средств для этого нет, поэтому это можно делать только модификацией движка. Мы говорим в основном о значениях системного имени, описания предмета, имени персонажа. Все это скриптами доступно только на чтение. Для записи нужно добавлять функции для записи, иногда также в серверный объект. Кроме того, описание с объектом не сохраняется, а каждый раз читается из секции. Поэтому, кроме функции записи, для описания потребуется также некоторая скриптовая обвязка, которая сохраняет это значение в нетпакете объекта и при загрузке прописывает его заново. Достоинства этого пути - это вполне реально и не очень сложно. Недостаток, требуются модификации движка со всеми вытекающими. Плагины Total Commander для работы с игровыми архивами: Архиваторный плагин (для работы с одиночным архивом): link1 link2 Системный плагин (для распаковки установленной игры): link1 link2 Ссылка на комментарий
Artos 99 Опубликовано 2 Февраля 2012 Поделиться Опубликовано 2 Февраля 2012 (изменено) malandrinus, не люблю излишних расшаркиваний и дипломатии там, где чистая логика рулит ... и простое правило: "Правильно заданный вопрос содержит половину ответа". Сам вопрос задан именно по "детски" (заметь, ставлю определение в кавычки, дабы каждый сам мог подразумевать то, о чем думает ...). Что подрузумевается под именем в контексте вопроса? Системно имя типа: wpn_ak7412345(?), имя секции объекта: medkit(?), имя из профиля: Ванька Иванов (?) иль еще какое? Бум гадать и выдавать вариации ответов? Что-то меняется запросто, что-то, как ты правильно пишешь - только если модификацией движка может возможно добиться, но это уже не в тему скриптов иль логики. По-любому вопрос или практически факовый (как заменить профильное имя сталкеру) или достоин темы ковыряния в движке. Если же вопрос о том, как в скриптах заменить одно отображение имени/описания на иное - то опять же и не дано исходных данных о 'где и что требуется менять', и ответ уже дан: что мешает написать код желаемого? На стандартные движковые значения завязаны много стандартных же движковых вещейИ почти каждый прожженый игрок и тем более модмейкер об этом знает. Хочется чтобы валяющийся автомат при наведении на него курсора отображался иным именем? Ну так и иконка вероятно потребуется другая и пр ... И заморачиваться на ожидании правленного движка врядли имеет смысл. Ответ уже дан: хочешь подменить - переспавни нужным предметом с нужным именем/описанием. Все же топик и тема по модификации игры и базируется на имеющихся на сегодня возможностях. Совершенно не хочется поднимать тут тему использования внешних примочек и модифициорованных библиотек - это все же отдельные темы с их (использованиями) достоинствами и недостатками. Если по каждому такому вопросу заворачивать на возможности редактирования движка, то ... можно на любой вопрос дать положительный ответ, вот только ... нет ответа: "Кто, когда и в каком объеме выполнит потребную модификацию" и ... а имеют ли другие игроки в такой мод возможность и желание устанавливать сторонние примочки. И по любому: каждый объект имеет в игре свое эксклюзивное имя. Замена системного имени - это замена на другой предмет! (ИМХО) и никакие модификации движков не могут тут быть надежнее и правильнее простого переспавна предмета на подходящий. Тем более все это доступно уже вчера и даже малоопытному модмейкеру. Каждая секция (объекта) имеет свое описание. Захотелось изменить - заменяй собственно записи в конфиге. Захотелось именно данному предмету заменить - опять же ничего не мешает сделать для этого предмета свою эксклюзивную секцию и именно ее использовать. Оправдание тем, что мол "сотни стволов" - не стану тут обсуждать вкусы, но если захотелось сотню добавить - то и потрудись эту сотню описать, а не возлагать на некие скрипты/движек, которые за тебя это сделают автоматом. Все одно они (скрипты/движек) откуда-то должны прочитать то, что модмейкер захотел отобразить. Добавлено через 147 мин.: =========================================== Написал простенький, но эффективный (ИМХО) переключатель 'online->offline->online' для объектов: --/ ----------------------------------------------------------------- --/ Helper: switchings 'online->offline->online' --/ ----------------------------------------------------------------- local switchings_active = false --/ флаг запущенного коллбэка переключений local tbl_switches = {} --/ ID-массив флагов/счетчиков для переключений local sim = alife() local execute_switchings = function() local can_switch = next(tbl_switches) ~= nil --/ flag: exist switches if can_switch then for id,v in pairs(tbl_switches) do can_switch = sim:object(id) ~= nil --/ flag: exist server_object? if can_switch then --/ exist server_object? if not v.cnt then v.cnt = 0 end if level.object_by_id(id) then --/ object in 'online' if v.flg == false then --/ flag: need swith 'offline->online' if v.cnt == 0 then v.flg = true --/ change flag --/ set switches 'online->offline' sim:set_switch_online(id, false) sim:set_switch_offline(id, true) else --/ swithes finished can_switch = false --/ done -> clear end else --/ phase-1: expectation of transition in 'offline' v.cnt = v.cnt +1 can_switch = v.cnt < 48 --/ limit is exceeded -> clear end else --/ object in 'offline' if v.flg == true then --/ flag: need swith to 'online' v.flg = false --/ change flag --/ set switches 'offline->online' sim:set_switch_online (id, true) sim:set_switch_offline(id, false) else --/ phase-2: expectation of transition in 'online' v.cnt = v.cnt +1 can_switch = v.cnt < 96 --/ limit is exceeded -> clear end end end if not can_switch then --/ clear: tbl_switches[id] = nil end end can_switch = next(tbl_switches) --/ flag: to exit? end return not can_switch --/> end function Add_ToSwitchings(id) if type(id) ~= 'number' then return end --/> --/ added to table 'offline->online' tbl_switches[id] = {flg = not level.object_by_id(id), cnt = 0} --/ start callback for 'offline->online' if not switchings_active then switchings_active = true --/ set flag level.add_call(execute_switchings, function() switchings_active = false end) end end --/ ----------------------------------------------------------------- Просто кидаем нужный ID-объекта ( Add_ToSwitchings(id) ) и ожидаем выхода объекта в он-лайн (в среднем ~20 тактов). - доп.переключений или привязок к адейтам биндеров не требуется; - встроен ограничитель времени (тактов) переключения, дабы объект(ы) не зависал(и) в состоянии переключений. Версия модуля работы с нет-пакетами (m_netpk) со встроенным 'переключателем on-off-on-line' (для работы с 'abstract'): Ссылка на народ.ру (~26.2 кБ) Изменено 11 Марта 2012 пользователем Artos "Но иногда найдется вдруг чудак, этот чудак все сделает не так ..."© Машина времени Ссылка на комментарий
*Shoker* 322 Опубликовано 2 Февраля 2012 Поделиться Опубликовано 2 Февраля 2012 (изменено) Artos Может мне ещё скриншоты прикладывать и выделять там красным для непонятливых? Стоит простой вопрос - можно ли изменить инвентарному предмету его имя и описание. А ты тут какие то статьи не пойми про что пишешь. Специально для этого дописал name и descriotion в своём посте, какой description у имени персонажа или профиля может быть? malandrinus К сожалению цель не стоит таких усилий. Раз нет штатного способа значит нет, спс. за разьяснение. Изменено 2 Февраля 2012 пользователем *Shoker* Можно просто Shoker, форум АМК съел моё старое имя и не хочет отдавать о_О Мастер аномалий на свою заднюю точку. Ссылка на комментарий
Artos 99 Опубликовано 2 Февраля 2012 Поделиться Опубликовано 2 Февраля 2012 (изменено) *Shoker*, вот поэтому первоначально и дал короткое определение: "детский" вопрос. Любому, кто ковырялся хотя бы в конфигах, известно, что name и descriotion, задаваемые в каждой секции предметов - читаются движком и их заменить скриптами "штатно" невозможно. Также известно, что из конфигов/скриптов только user.ltx в игре подвергается "штатно" изменениям. Ну а "недопонятки" ... как то не допускал мысли, что такой простой ответ не приходит в голову уже немало ковырявшемуся в кодах игры и, делаю предположение, что вопрос все же о нечто бОльшем/сложном ... Сорри, буду теперь в отношении тебя более "понятливым" и менее назойливым с пространными ответами. Изменено 3 Февраля 2012 пользователем Artos "Но иногда найдется вдруг чудак, этот чудак все сделает не так ..."© Машина времени Ссылка на комментарий
Рекомендуемые сообщения
Создайте аккаунт или авторизуйтесь, чтобы оставить комментарий
Комментарии могут оставлять только зарегистрированные пользователи
Создать аккаунт
Зарегистрировать новый аккаунт в нашем сообществе. Это несложно!
Зарегистрировать новый аккаунтВойти
Есть аккаунт? Войти.
Войти