Перейти к контенту

Рекомендуемые сообщения

*Shoker*

Так и есть нпс точно двигаются сквозь текстуры к ближайшей сетке. И с анимацией движения как положенно но думаю на локациях есть места где сетка присутствует. Одно такое место в баре за забором где старая дорога чуть дальше узкая полоска с сеткой вот на ней и сделал первый этап. Причем интересный момент нпс даже без логики (со стандартной не уходят с этой тропы так как им просто некуда идти. Думаю и на других локах есть места которые не задействовали разработчики буду искать. Также можно попробывать и крыши домов.

Изменено пользователем Stalkersof
Ссылка на комментарий

Порылся в поиске, не нашел ничего похожего.

Хочу написать скрипт для системы автоматического приема медикаментов. На Wiki есть такая статья, но уж больно там убогая система, принимает по 5 аптечек за раз, и не использует бинты. Хотелось бы ее более гибкой сделать.

Вот сама статья:

Ссылка на комментарий

Ulman

Хотел подробнее?...

Оператор for определяет цикл, который выполняет блок кода, до тех пор, пока переменная(ые) этого цикла не достигнет некоего значения (об этом ниже).

В lua существует две формы записи оператора for.

 

1. Простая форма. Блок кода выполняется до тех пор, пока переменная цикла, изменяющаяся в арифметической прогрессии, не достигнет установленного порога

for i=1,10,1 do
...
end

for - оператор, определяющий начало цикла.

 

i - переменная цикла. Эта переменная является локальной для данного цикла. Т.е обьявлять её специально (local i) не нужно. Из того как ты задал вопрос скажу, что имя этой переменной можно задавать абсолютно любое, хоть матом, но только согласно синтаксиса Lua.

 

1,10,1 - для переменной i устанавливаются пороги значений

1 - счёт начинается с единицы

10 - счёт заканчивается при достижении значения 10 (включительно)

1 - шаг счёта В данном примере переменной i будет последовательно присвоены все значения от 1 до 10, т.е. цикл отработает 10 раз. Если установить шаг, например, в значение 2, то переменной i, при каждом обороте цикла будет присваиваться каждое второе значение,относительно предыдущего. Т.е. значения переменной будут равны 1,3,5,7 и 9 - цикл отработает 5 раз. Если это значение не указать (for i=1,10 dо), то оно по умолчанию будет равно 1.

 

do - начало блока

 

end - конец блока

 

... - То, что между do и end называется телом блока. Это тело, собственно, и будет выполняться столько раз, сколько указано в пределах значений. Например если в данном примере вместо "..." записать alife():create(bla_bla), то этих самых "bla_bla" заспавниться 10 штук.

 

Считать можно и в обратном порядке. Например от 10 до 1 :

for i=10,1,-1 do
...
end

В этом случае шаг (-1) указывать обязательно

 

2. Расширенная форма (твой вопрос). На каждом обороте для получения нового значения переменной цикла вызывается функция-итератор. Цикл заканчивается, когда итератор возвратит nil.

for var in func() do
...
end

for - оператор, определяющий цикл

var - переменная цикла (локальная для данного цикла)

func() - любая функция, которая возвращает функцию-итератор, находящуюся внутри неё.

 

На каждом шаге этого цикла вызывается входящая в func() функция-итератор, которая в свою очередь возвращает некоторое значение или nil. Если возвращенное значение – nil, то выполнение цикла прекращается, в противном случае значение записывается в переменную цикла (var). Затем выполняется тело блока, и весь процесс повторяется.

Функция-итератор может возвращать и множество значений (столько, сколько заложил в неё программист), поэтому правильнее записать так :

for var1, var2, ..., varN in func() do
...
end

Функцию func() можно написать и самому, но в стандартной библиотеке lua уже есть готовые функции для работы с таблицами (pairs, ipairs, insert и т.д.)

В твоём вопросе используется одна из таких функций - pairs.

Эта функция возвращает функцию-итератор next (которая, кстати, тоже входит в состав стандартной библиотеки lua).

Вот эта самая next и присваивает найденные значения переменным var1...varN.

Сама функция next при каждом обороте возвращает только два значения, соответствующие ключу и значению в некой, передаваемой в функцию pairs, таблице.

Поэтому после for и пишутся две переменные. Не важно как ты их назовёшь, главное чтобы они были :

for k, v
for n, c
for inum, infop

В первую указанную переменную записывается ключ таблицы, во вторую её значение.

Если, к примеру, тебе нужны будут только ключи таблицы, то вторую переменную можно не указывать.

for key in pairs(t) do
...
end

Дальше в качестве факультатива. Покажу эту спрятанную функцию-итератор.

Для итерирования по элементам массива существует стандартная функция ipairs

Она перебирает элементы таблицы начиная с ключа под номером 1.

local t = {'a', 'b', 'c'}
for k,v in ipairs(t) do
    print(k,v)
end

Данный код напечатает следующее :

1 a
2 b
3 c

Напишем итератор, который будет перебирать элементы в обратном порядке :

function bpairs(table)
    local count = #table + 1
    return  function ()
                count = count - 1
                if table[count] then
                    return count, table[count]
                end
            end
end

Как видишь функция bpairs возвращает (return) анонимную функцию. Она и есть итератор.

Теперь проверим :

for k,v in bpairs(t) do
    print(k,v)
end

В результате :

3 c
2 b
1 a

 

 

 

Изменено пользователем Gun12
Ссылка на комментарий

1)Что надо добавить в логику кемпера чтоб НПС сидел, как у костра? И чтоб сидел на кортачках?

2)Как полностью отключить респавн или сделать его очень редким? ~ раз в 96 часов

 

Ссылка на комментарий

Поставил себе мод Амуниция на поясе.Как исправить в скрипте, что бы если перебарщишь с патронами на поясе, не выкидывало с ссылкой, что нет свободного места?

Ссылка на комментарий

Сколько слотов под арты у тебя? В файле system.ltx ищи max_belt и после равно ставь циферку, которую ты насчитал)

Ссылка на комментарий

Это я все и сделал.Но когда лишнюю пачку патронов пытаешься повесить на пояс, выкидывает.Как сделать так, что бы не выкидывало?Я так понял, что нужно какую нибудь заглушку в inventory.script вставить,в функция определения предметов на поясе,да?

Изменено пользователем panzyuza
Ссылка на комментарий

Всем доброго времени суток.У меня есть вопрос.Как с помошью функции

function spawn_1()
local item = "esc_svoboda"
   alife():create(item,vector():set(-197.07116699219,-20.213090896606,-151.19735717773),54831,46)
end

, указать направление взгляда нпс?

Изменено пользователем nanshakov
Ссылка на комментарий

dragunof, например 2 страницы назад было

http://www.amk-team.ru/forum/index.php?s=&...st&p=618302

аналогично работать нужно\можно и с любым объектом, в данном случае с неписем

 

или смотреть скрипты амк, зен, симбион, ... еще чего то, это много где есть

Vita sine libertate, nihil

Vita sine litteris - mors est

Ссылка на комментарий

Ребята, помогите пожалуйста, у меня вот такой вылет:

Expression    : fatal error
Function      : CScriptEngine::lua_error
File          : E:\stalker\patch_1_0004\xr_3da\xrGame\script_engine.cpp
Line          : 73
Description   : <no expression>
Arguments     : LUA error: ... game$\s.t.a.l.k.e.r\gamedata\scripts\xr_kamp.script:265: table index is nil

Вот собственно 265 строка:

deadmansids[self.a.choosed_deadman]=nil

Чего это с ней не так, ведь такое значение вроде ей присваивается потому что действие надо отменить. Да и в других модах, видел эту строку и вылетов вроде не было... Как это исправить? Заранее большое спасибо.

 

Добавлено через 120 мин.:

И ещё такой вылет:

Expression    : fatal error
Function      : CScriptEngine::lua_error
File          : E:\stalker\patch_1_0004\xr_3da\xrGame\script_engine.cpp
Line          : 73
Description   : <no expression>
Arguments     : LUA error: ... game$\s.t.a.l.k.e.r\gamedata\scripts\xr_kamp.script:808: attempt to index field '?' (a nil value)

808 строка выглядит так:

self.npc[npc_id].states["eat_kolbasa"] = false

Изменено пользователем Ulman
Ссылка на комментарий
RvP, странно, а как это тогда исправить? И почему в других модах, да даже в Солянке, вроде так же всё написано и не вылетает?
Ссылка на комментарий

Скорее всего вылет от какого то другого скрипта, а тут просто "аукается", Первый вылет похож на утаскивание трупов от костра, а во второй уже вроде как с оригинала. Если ты xr_kamp ближаишее время не трогал, и вылет появился сам по себе, то придётся тебе опять искать причину, а она может быть любой.

Можно просто Shoker, форум АМК съел моё старое имя и не хочет отдавать о_О

Мастер аномалий на свою заднюю точку.

Ссылка на комментарий

*Shoker*, да спасибо, я и правда намудрил в одном скрипте, из за которого был такой вылет.

 

Я вот кажется нашел корень зла моего безлогового вылета, во первых это лагерь на свалке, там где сидит Серый, то есть все люди, которые сидят с ним у костра, а точнее виновник вылета похоже сталкер, которого надо вылечить, который валяется раненным. Проблема заключается в следующем, я его попытался вылечить, около 5ти раз пытался, но не вышло, так как я ему даю аптечку, он встаёт, благодарит и сразу же опять падает раненным на землю. Ну я его не стал трогать и ушел на Агропром, вернулся, только дохожу на расстояние метров 150(расстояние алайфа) после чего они переходят в онлайн и происходит вылет. Ну тут просто других предположений у меня нет. Так вот, правильно ли я думаю, это во первых, а во вторых, чего это он не лечится как надо? Толика и Лиса я нормально вылечил, они не выпендривались. Есть ли у кого то идеи?

 

P.S. У меня стоит медицинская резинка от Vergas`a(может полезная информация).

Ссылка на комментарий

Я заспавнил зомби, но при смерти такой вылет:

FATAL ERROR

 

[error]Expression : fatal error

[error]Function : CScriptEngine::lua_error

[error]File : E:\stalker\patch_1_0004\xr_3da\xrGame\script_engine.cpp

[error]Line : 73

[error]Description : <no expression>

[error]Arguments : LUA error: ....r. - shadow of chernobyl\gamedata\scripts\_g.script:20: bad argument #2 to 'format' (string expected, got no value)

 

 

Хотя в xr_statistic я всё прописал. В _g.script зомби уже были. При перезагрузке такой-же вылет.

Помогите!

 

Добавлено через 117 мин.:

можете помочь!прошу

Создаю глобальный мод с новыми локациямЭ

Ссылка на комментарий

Нужен совет знающих :rolleyes: Добавил в ЗП машины. Локаций уже больше за 50. Есть где понаситься. НО с локации на локации сидя в авто переехать не могу :unsure: Кто знает что делать. Или хотя бы подскажите в каком направлении рыть. ЗАРАНЕЕ СПАСИБО

Ссылка на комментарий

Ulman

А что мед-резинка делает?

 

Ave_L

А без машины переходит? Подробней опиши. Скорее всего это вырезано тоже.

Можно просто Shoker, форум АМК съел моё старое имя и не хочет отдавать о_О

Мастер аномалий на свою заднюю точку.

Ссылка на комментарий

Создайте аккаунт или авторизуйтесь, чтобы оставить комментарий

Комментарии могут оставлять только зарегистрированные пользователи

Создать аккаунт

Зарегистрировать новый аккаунт в нашем сообществе. Это несложно!

Зарегистрировать новый аккаунт

Войти

Есть аккаунт? Войти.

Войти
  • Недавно просматривали   0 пользователей

    Ни один зарегистрированный пользователь не просматривает эту страницу.

AMK-Team.ru

×
×
  • Создать...