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

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

Доброго времени!

Задался вопросом, чтобы ставить мины противопехотные и/или противопехотные усиленные (при наличии их в рюкзаке) по направлению взгляда спереди.

За основу взял key_handlers.script из правки на установку турели  "Тайфун" Стрелка по направлению взгляда без выхода в меню по ESC (если не ошибаюсь от слава70).

Там присутствует следующее:

Скрытый текст

[DIK_keys.DIK_NUMPAD4]={
                    func=function()
                        local dir = db.actor:direction()
            local turret_fast = db.actor:object("strelok_turret")
            if turret_fast then
            amk.remove_item(turret_fast)
            local ap = db.actor:position()
            local lv = db.actor:level_vertex_id()
            local gv = db.actor:game_vertex_id()
            local turret = create_car("turret_to_strelok",xyz(ap.x+dir.x, ap.y, ap.z+dir.z), lv, gv, "scripts\\technics\\strelok_turret.ltx") --спереди
            map_spot(turret.id, "red_location", "Моя туррель")
            else
            meceniy_in_hell.horror_sound()
            end
            end
        },

Сделал примерно следующее:  (bomba_mina_n - противопехотная,  bomba_mina_b - противопехотная усиленная. Тут только пока про простую речь. Допилить на оба типа потом нет проблема.)

Скрытый текст

[DIK_keys.DIK_NUMPAD9]={
                    func=function()
                        local dir = db.actor:direction()
            local bomb_fast_n = db.actor:object("bomba_mina_n")
            if bomb_fast_n then
            amk.remove_item(bomb_fast_n)
            local ap = db.actor:position()
            local lv = db.actor:level_vertex_id()
            local gv = db.actor:game_vertex_id()
            local turret = create_car("bomba_mina_n",xyz(ap.x+dir.x, ap.y, ap.z+dir.z), lv, gv, "") --спереди
            
            else
            meceniy_in_hell.horror_sound()
            end
            end
        },

Так вот, что-то не фурычит... Можешь тыкнуть пальцем что не так делаю?
ЗЫ: указание на файл "scripts\\technics\\strelok_turret.ltx" убрал т.к. ИМХО для бомбы оно не к чему...

ЗЫЗЫ: что-то редактирование сообщения тут не нашел... Вот автор вышеупомянутой правки @слава70.

Voland-Li.gif

Страшно смотреть, как на жестком диске прямо на глазах уменьшается место.

Но еще страшнее смотреть, когда оно прямо на глазах увеличивается. :facepalm:

Вангую. Скоро попросят правку:"Меченый появляется на Кордоне. Телепорт к Монолиту. Загадывает Желание. THE END."

Ссылка на комментарий
Только что, Voland-Li сказал(а):

local turret = create_car

Полагаю, причина где-то тут

Мод, где не бывает одинаковых путей - Судьба Зоны. (Лучшее, что у меня получилось на 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.

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

@Zander_driver мм... ну да... Упустил этот момент...  Но в принципе переменная то локальная, пофигу ж как она там называется?

local bomb_fast_n = create_car("bomba_mina_n",xyz(ap.x+dir.x, ap.y, ap.z+dir.z), lv, gv, "") --спереди

Так чтоль?

Или вы имеете в виду, что не create_car а create ?

Ах, да... Реакции НОЛЬ на нажатие НУМПАД9...

1 час назад, Voland-Li сказал(а):

local bomb = create_car(

вот так точнее. 

Voland-Li.gif

Страшно смотреть, как на жестком диске прямо на глазах уменьшается место.

Но еще страшнее смотреть, когда оно прямо на глазах увеличивается. :facepalm:

Вангую. Скоро попросят правку:"Меченый появляется на Кордоне. Телепорт к Монолиту. Загадывает Желание. THE END."

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

@Voland-Li 

Вы серьезно думаете, что ф-ция create_car может заспавнить любой объект? Мины, в ТЧ к примеру - это аномалии. Соответственно, надо создать объект, затем заполнить его нет-пакет необходимыми данными. А по названию ф-ции можно догадаться, что она спавнит что-то связанное с транспортом.

  • Спасибо 1
Ссылка на комментарий

@AndreySol понял... просто спавном не занимался ни разу... как говориться на новые грабли наступаю... За наводку спасибо.

ЗЫ: а на счет нулевой реакции на клавишу не подскажете ничего?

Voland-Li.gif

Страшно смотреть, как на жестком диске прямо на глазах уменьшается место.

Но еще страшнее смотреть, когда оно прямо на глазах увеличивается. :facepalm:

Вангую. Скоро попросят правку:"Меченый появляется на Кордоне. Телепорт к Монолиту. Загадывает Желание. THE END."

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

@Colder , а "отсечку" сделать? :spiteful:

function take_item_from_box(box, box_story_id)
    local box_name = box:name()
    if (math.random() < 0.75) then --* вот туточки
--* Вариант 1: по имени
if not string.find(box_name, 'уникальная часть имени нашего рюкзака') 
and (math.random() < 0.75) then
--* Вариант 2: по секции
if box:section() ~= 'наименование секции нашего рюкзака'
and (math.random() < 0.75) then
    axr_sounds.play_sound([[weapons\generic_checkout]])
    mine_box = box
    mine_timer = time_global()+3000
end
end
end

 

  • Спасибо 1
  • Согласен 1
  • Полезно 2
Ссылка на комментарий

@Купер Спасибо большое! 

Добавил так:

    if not string.find(box_name, "active_ruck")
    and not string.find(box_name, "active_box")
    and not string.find(box_name, "active_system")
    and (math.random() < 0.75) then

Ещё бы добавить что бы с кусачками, снижался шанс заминировании тайника!

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

Как проверить характеристику бронежилетая надетого на гг в скрипте? Например, мне нужно проверить радиозащиту, и если она меньше то прибавлять гг радиацию. И сходу следующий вопрос: как сделать бесконечный таймер, по истечении которого прибавлялась бы эта радиация? (Из этого всего знаю только как прибавить радиацию)

  • Нравится 1
Ссылка на комментарий
1 час назад, ARTLantist сказал(а):

Как проверить характеристику бронежилетая надетого на гг в скрипте?

Привет. Если я не перепутал что-нибудь, и если речь идет об оригинальном движке, то, как то так.

local outfit = db.actor:item_in_slot(6) -- получаем объект комбеза, если есть
if outfit then
  local ocond = outfit:condition() -- выясняем состояние комбеза
  local ltx = system_ini()
  local osec = outfit:section() -- выясняем секцию конфига надетого комбеза
  local rdef = ltx:r_float(osec, "radiation_protection") -- читаем, на сколько этот комбез защищает от радиации
  local real_def = rdef * ocond -- вычисляем действующую защиту с учетом износа
  if real_def < 0.5 then
    db.actor.radiation = 0.1 -- например так)
  end
end

Надеюсь, пригодится для чего-нибудь :)

1 час назад, ARTLantist сказал(а):

как сделать бесконечный таймер, по истечении которого

Бесконечный, по истечении которого... почему-то мне кажется это словосочетание, странным.

В биндерах многих объектов (И актора, т.е. в bind_stalker, тоже), есть метод update. А туда передается, в качестве входящего аргумента, переменная delta.

Которая численно равна, количеству миллисекунд прошедших с прошлого вызова этого update. Может быть, это будет полезно для того, что на самом деле имелось в виду... А может быть, я "угадал" неправильно.

А вообще, смотри тут: https://www.amk-team.ru/forum/topic/7450-spravochnik-po-funkciyam-i-klassam/

Много полезного найдешь.

  • Согласен 1
  • Полезно 4

Мод, где не бывает одинаковых путей - Судьба Зоны. (Лучшее, что у меня получилось на 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.

Ссылка на комментарий
17 минут назад, Zander_driver сказал(а):

 





local outfit = db.actor:item_in_slot(6) -- получаем объект комбеза, если есть
if outfit then
  local ocond = outfit:condition() -- выясняем состояние комбеза
  local ltx = system_ini()
  local osec = outfit:section() -- выясняем секцию конфига надетого комбеза
  local rdef = ltx:r_float(osec, "radiation_protection") -- читаем, на сколько этот комбез защищает от радиации
  local real_def = rdef * ocond -- вычисляем действующую защиту с учетом износа
  if real_def < 0.5 then
    db.actor.radiation = 0.1 -- например так)
  end
end

Надеюсь, пригодится для чего-нибудь :)

Бесконечный, по истечении которого... почему-то мне кажется это словосочетание, странным.

Извиняюсь, сам щас прочёл и не понял, что написал, заработался просто немного?

Я хотел сказать, один таймер, длинною, например, одну секунду, по истечении которой будет происходить функция и этот таймер будет запущен заново, и так бесконечно. Как-то так. 

А как правильно работать с этой delta? Уже долго голову ломаю, что это за переменная такая. Во многих модах её используют, а как она используется, разобраться никак не получается.

Изменено пользователем ARTLantist
Добавлено  Опричник,

Изучите "Правила цитирования". https://www.amk-team.ru/forum/topic/13514-obyavleniya/

Устное предупреждение.

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

@Zander_driver, большое пребольшое спасибо, теперь понятно всё!

а как реализовать объединение и разъединение двух предметов в один, например, как сделано в Мизери с контейнерами артов? Мы наводим арт на контейнер и он туда кладётся. Потом нажимаем по контейнеру с артом ПКМ и у нас высвечивается окно "извлечь", нажимаем, и арт извлекается. Мне интересен именно такой способ, по большей части - как высветит это окно "извлечь".

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

"Вывести окно извлечь" Если не ошибаюсь это движковая правка.

Скрытый текст

function start_repair_out(cond,num)
    local itm = db.actor:item_in_slot(num)
    local kit = kits[num]
    local s = cond-2
    local sect = obj:section()
    local name = tostring(system_ini():r_string(obj:section(),"inv_name_short"))

    if itm ~= nil then
    axr_effects_data.devices_anim()
    alife():release(alife():object(itm:id()), true)
    axr_sounds.play_sound([[item_sounds\inv_repair_sewing]])

    send_tip("%c[d_green]"..game.translate_string("st_dis_text_7").." "..game.translate_string(tostring(name)))
    create_repkit(kit..s)
    else
    send_tip("[d_red]Разбор невозможен!\\nОтсутствует объект для разбора!")
    create_repkit(kit..cond)
end
end

Парни помогите вывести Сообщение разобраного обьекта!

Сообщение не приходит а вылетает с "attempt to index global 'obj' (a nil value)"

Ссылка на комментарий
4 часа назад, Colder сказал(а):

local sect = obj:section()
    local name = tostring(system_ini():r_string(obj:section(),"inv_name_short"))

obj:section() Это что и откуда? мне не понятно и движку тоже, вот он и ругается

 

Скрытый текст

function start_repair_out(cond,num)
	local itm = db.actor:item_in_slot(num)
	local kit = kits[num]
	local s = cond-2
	local sect = itm:section()
	local name = tostring(system_ini():r_string(sect,"inv_name_short"))

	if itm ~= nil then
		axr_effects_data.devices_anim()
		alife():release(alife():object(itm:id()), true)
		axr_sounds.play_sound([[item_sounds\inv_repair_sewing]])
		send_tip("%c[d_green]"..game.translate_string("st_dis_text_7").." "..game.translate_string(tostring(name)))
		create_repkit(kit..s)
	else
		send_tip("[d_red]Разбор невозможен!\\nОтсутствует объект для разбора!")
		create_repkit(kit..cond)
	end

 

так попробуй

  • Спасибо 1
Ссылка на комментарий

Да работает спасибо!

@ted.80 А нет! Не работает!

Скрытый текст

Arguments     : LUA error: ...ü ×åðíîáûëÿ\gamedata\scripts\bind_stalker_ext.script:62: attempt to index global 'axr_sewing' (a nil value)

Когда обьекта в слоте нету

Ругаеться на сам скрипт

Ой не то вот вылет Arguments     : LUA error: ... - Òåíü ×åðíîáûëÿ\gamedata\scripts\axr_sewing.script:39: attempt to index local 'itm' (a nil value)

69 строка "

if itm ~= nil then

"

  • Нравится 2
Ссылка на комментарий
Только что, DMT сказал(а):

заданных размеров бокс, защищающий от выброса ?

Вообще-то, это зависит от местной реализации выброса в "там, о чем вы спрашиваете"

Мод, где не бывает одинаковых путей - Судьба Зоны. (Лучшее, что у меня получилось на 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.

Ссылка на комментарий
3 минуты назад, Zander_driver сказал(а):

Вообще-то, это зависит от местной реализации выброса в "там, о чем вы спрашиваете"

Маленькое уточнение: вопрос о том, как вкрутить спавн бокса в оригинал ЗП.

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

К посту.

И ведь не поправит никто. Все сидят, ржут мило улыбаются.

Детский сад, штаны на лямках. Но... вот из принципа! :biggrin:

Вызвали мы функцию start_repair_out(cond,num) . Отлично. А дальше... А дальше пытаемся получить секцию и инвентарное наименование для объекта... 

local sect = itm:section()

local name = tostring(system_ini():r_string(sect,"inv_name_short"))

которого в слоте нет :biggrin:

Идеологически верное решение:

Скрытый текст

function start_repair_out(cond,num)
    local itm = db.actor:item_in_slot(num)
	local kit = kits[num]
    if itm ~= nil then
        local s = cond-2
        local sect = itm:section()
        local name = tostring(system_ini():r_string(sect,"inv_name_short"))
        ...
    else
        ...
    end
end

 

 

  • Нравится 1
  • Смешно 1
Ссылка на комментарий
3 часа назад, Купер сказал(а):

И ведь не поправит никто. Все сидят

Ну откуда же нам знать - может, у человека этот obj глобальный. Там еще неплохо бы убедиться, что это именно клиентский объект получен, т.к. емнип, у серверных это читается через section_name(), а :section() - для клиентских.

А во-вторых, @ted.80  - как раз на один такой пример указал, там уже и ежики догадаются )
По-хорошему - неплохо бы  _в начале_  функции проверять даже наличие и тип переданных  в нее параметров.
И на время отладки - все это в лог выводить. 
Мало ли - может передается совсем не то, что ожидается. 

  • Согласен 2

След от кругов на воде - это тоже след (с)

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

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

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

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

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

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

Войти

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

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

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