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

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

@Graff46, с оригинальным движком скорее всего никак. Там одни места берут имя из серверного объекта и его теоретически можно поменять через нетпакет, а другие места берут имя из клиентской части и туда доступа вроде нет.

 

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

Никто не подкинет функцию скриптового спавна по story id (ТЧ, если важно)? Искал и не нашел подобных упоминаний такой функции нигде. Может где-то в модах есть, но не знаю где. Беда в том, что скриптовым спавном, в отличие от олл.спауна, к имени объекта добавляются еще цифры и некоторые функции перестают работать т.к не могут обработать это имя. Может быть спавн по "сид-у", а не имени секции, решит эту проблему?

Ссылка на комментарий
7 минут назад, dsh сказал:

ты вот это имеешь ввиду

Возможно. Надо попробовать. Сейчас проверю.

 

@dsh, нет, не совсем. Это спавн уже зашитого объекта в спаун (только заранее удаленного), я так понимаю? А мне надо по координатам без участия олл.спауна.

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

@HellRatz, каким макаром? story_id имеет отношение к уже существующему объекту, либо в игровом мире, либо в all.spawn. Т.ч. что бы обратиться по story_id, объект должен уже быть в одном из этих мест или в обоих.

 

5 minutes ago, HellRatz said:

А мне надо по координатам.

Ну, можно сначала переспаунить из all.spawn, как я показал, а потом телепортировать на нужные координаты, если у тебя хотя бы xray extensions.

 

Ссылка на комментарий
4 минуты назад, dsh сказал:

Т.ч. что бы обратиться по story_id, объект должен уже быть в одном из этих мест или в обоих.

В общем суть. Есть, допустим, npc_1, заспавненный через олл.спаун, которого обрабатывает скрипт. Именно по этому имени. Если заспавнить его через скрипт, то его имя внутри игры уже будет не npc_1, а, какой-нибудь npc_1_20945, следовательно скрипт уже не может подхватить этого НПСа с таким именем.

То есть я так понимаю, заспавнить объект по стори_айди, без его предварительного вшивания в спавн, - не реально?

 

Тогда плохо. Ладно. @dsh, напишу в личку тогда в чем суть проблемы, дабы тут не разводить? Может быть глянешь мельком, поможешь. А сей вопрос тогда отменяется.

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

@HellRatz, если грамотно написать пакет для спаунящегося, то будет всё работать и со спауном из скрипта.

За нпс, не знаю, а вот с техникой проблем нет. Хотя, если спавн нпс сделать персональным на уровне корня класса, то тоже должно проканать.

andreyholkin.gif

rod_cccp.gif

 

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

Например (ЗП) спавн техники для скрипта. Как в ТЧ будет работать незнаю...

[zat_boat_car_3]                                    
GroupControlSection   = spawn_group
discovery_dependency  =
$spawn                = "vehicles\zat_boat_car_3"
cform                 = skeleton
class                 = HELCAR
visual                = physics\vehicles\boat\boat_car.ogf
actor_visual          = physics\vehicles\boat\boat_car.ogf
cost              = 250000
ef_equipment_type     = 3
ph_mass              = 10000
wallmark_section      = explosion_marks
script_binding        = bind_physic_object_helcar.init
story_id           = zat_boat_car_3

 

Например как в ЗП спавнят Сидоровича-нпса скриптом:


[sidor]:m_trader
$spawn            = "respawn\esc_trader_test"
character_profile = obj_trader
spec_rank         = master
community         = trader
story_id = obj_trader
custom_data = scripts\escape\esc_trader.ltx
 

andreyholkin.gif

rod_cccp.gif

 

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

Всем добрый день! Такой вопрос: может ли ЛУА получать текстовые значения из конфига .xml. Например, в коде у меня есть надпись " RU", а в xml файле 

 

<string id="st_currency">
        <text>RU</text>
    </string>


как получить эту самую ссылку из скрипта? Заранее признателен.

Изменено пользователем Den “Angry Wolf” Koslov
Ссылка на комментарий
3 часа назад, Den “Angry Wolf” Koslov сказал:

удалять все объекты из инвентаря ГГ определенного класса, сразу одним махом?

Можно все что невозможно, Зона жеж...
Как одна из кучи возможностей:

db.actor:inventory_for_each(function(item)
if item:section() == "секция_обжекта" then
alife():release(item, true)
end
end)

Ну или так:

if db.actor:object("секция_обжекта") ~= nil then
local obj = alife():object(db.actor:object("секция_обжекта"):id())
if obj then
alife():release(obj)
end
end

Вариации самих Разрабов можно отыскать в файле xr_effects.script для Арены хотя бы.
Ну а если правильно описать зачем это Вам и для каких условий, то точно подскажут верное решение.
А удалять по классу немного нелепо имхо - ибо один класс может содержать множество построенных на его настройках обжектов.

  • Согласен 1
Ссылка на комментарий
10 часов назад, gam сказал:

А удалять по классу немного нелепо имхо

Спасибо большое за примеры кода. Дело в том, что я создаю новый класс через движок, специально для этой цели. Идея заключается в следующем. Хотел реализовать, что-то на подобии команды  "удалить весь хлам в инвентаре" при этом хламу дать свой класс, чтобы не перечислять секции item'ов, так как мне нужно сделать так, чтобы остальные предметы снаряжения в рюкзаке оставались на своих местах. Хлам - это фишка геймплея.Так что я не совсем уверен если подойдут имена секций. По моему так скрипт будет игру сильнее нагружать ради проверки на весь хлам. 

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

2 вопроса:

1. Можно-ли через скрипты получать\устанавливать опьянение ГГ в ТЧ с X-Ray extension

2. Почему не работает db.actor:set_actor_position(ya_old) Отсюда:

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

function effct() -- ЭТА ВЫЗЫВАЕТСЯ НИЖЕ!
local npc = level_object_by_sid(926) 
	local pos, dir = npc:position(), npc:direction()
	local v = vector():set(pos)
	v.x = pos.x + 3 * math.cos(dir:getH())
	v.z = pos.z + 3 * math.cos(dir:getH())	
	db.actor:object('device_torch'):switch_torch(true)
	db.actor:set_actor_position(v)
	db.actor:set_actor_direction(-npc:position():sub(v):getH() )
end

function pred_mon(act, npc) -- ВЫЗЫВАЕМАЯ Ф-ЦИЯ!
	function _off () -- ВЛОЖЕННАЯ Ф-ЦИЯ! ВЫЗЫВАЕТСЯ НИЖЕ!
		local npc = level_object_by_sid(926)
		db.actor:set_actor_position(ya_old) -- НЕ РАБОТАЕТ, НО ОШИБОК НЕ ВЫЗЫВАЕТ
		ya_old = nil
		switch_offline_id(npc:id())
	end

	local a = db.storage[npc:id()].enemy
	if (a) and (a:section() == "dv_nom_x18_attack" or a:id() == 0) then
		_G.ya_old = vector():set(db.actor:position())
		effct() -- ОНА ВВЕРХУ
		nt.timer(2000, _off) -- ТУТ ВЫЗЫВАЕТСЯ (ЧЕРЕЗ 2 СЕК) ВЛОЖЕННАЯ Ф-ЦИЯ
		return true
	end
end

Функция из таймера вызывается корректно (НПС в оффлайн переходит и таймер "проверенный"), но возвращаться ГГ на своё место ни как не хочет!

 

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

Это не нужно заворачивать в вектор:

_G.ya_old = db.actor:position()

Не?

Изменено пользователем Overfirst

Ранее был известен под ником BoBaH_671.

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

@Overfirst На всякий случай. Таким способом создаём новый вектор с параметрами заданного, что бы после манипуляций с исходным векторам не получилось неожиданностей. В луа переменные хранят ссылки на объекты и если объект где-то изменился - то и значение переменной после этого тоже изменится, такая трабла с таблицами бывает бесит. Также смотри как тут, у разрабов, utils.vector_copy_by_val()

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

[ЗП, СоС]

Как заставить нпс скриптом перезарядить оружие, которое держит в руках (с анимацией и прочим)?

Смотрел как сделано у @Bak в AI Additions, но так до конца и не понял.

Вроде используется такая штука, после кучи проверок:

    npc:set_item(object.aim_force_full1,wpn)

Пытаюсь сделать по аналогии, типа так:

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

-- добавление недостающих команд для оружия
if not object.aim_force_full1 then
    object.aim_ready1 = object.drop+1                   -- eObjectActionAimReady1 = 12
    object.aim_ready2 = object.aim_ready1+1             -- eObjectActionAimReady2 = 13
    object.aim_force_full1 = object.aim_ready2+1        -- eObjectActionAimForceFull1 = 14
    object.aim_force_full2 = object.aim_force_full1+1   -- eObjectActionAimForceFull2 = 15
end


local target_obj    = level.get_target_obj()
local npc           = target_obj
local wpn           = npc and npc:active_item()
if npc and wpn then
    log("reloading wpn -- start --")


    -- 1 -- Либо так: --
    -- npc:set_item( object.reload, wpn )
    -- npc:set_item( object.reload1, wpn )
    -- npc:set_item( object.reload2, wpn )


    -- 2 -- или так:
    npc:set_item( object.aim_force_full1, wpn )


    log("reloading wpn -- end --")
end

 

Ничего "не выходит" - нпс просто стоит "как ни в чем не бывало".

Или парой строк скрипта не обойтись (нужно писать схему поведения, добавлять в планировщик и т.д.)?

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

Возможно кому-то известно как динамически менять текстуру для модели оружия? Предположим есть 3 текстуры калаша: новый, ржавый и сильно ржавый в зависимости от состояния. Есть ли возможность как-то менять текстуру через скрипт?

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

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

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

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

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

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

Войти

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

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

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