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

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

40 минут назад, buffy сказал:

Вроде в тч никак, но в ЗП для этого вынесена функция.

Да ну? Расскажи-ка.

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

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

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

 

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

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

GTA 3 MAP X-Ray | NFS U:2 MAP X-Ray | RTCW MAP X-Ray | L2D | Куча раритетных модов на моем облаке — на память о былом.

JNCR — Coming Soon...

i5-10400F / RAM 16GB / GTX 1660 Super / 1TB HDD+256GB SSDm2 / Win 11 PRO x64 / Samsung Curved 27" x2


Подарки

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

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

    local spawn_id = alife():spawn_id( story_ids.yantar_chernomor )
    sobj = alife():create( spawn_id )

    или что-то другое?

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

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

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

     

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

    GTA 3 MAP X-Ray | NFS U:2 MAP X-Ray | RTCW MAP X-Ray | L2D | Куча раритетных модов на моем облаке — на память о былом.

    JNCR — Coming Soon...

    i5-10400F / RAM 16GB / GTX 1660 Super / 1TB HDD+256GB SSDm2 / Win 11 PRO x64 / Samsung Curved 27" x2


    Подарки

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

    @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, напишу в личку тогда в чем суть проблемы, дабы тут не разводить? Может быть глянешь мельком, поможешь. А сей вопрос тогда отменяется.

    GTA 3 MAP X-Ray | NFS U:2 MAP X-Ray | RTCW MAP X-Ray | L2D | Куча раритетных модов на моем облаке — на память о былом.

    JNCR — Coming Soon...

    i5-10400F / RAM 16GB / GTX 1660 Super / 1TB HDD+256GB SSDm2 / Win 11 PRO x64 / Samsung Curved 27" x2


    Подарки

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

    @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
    Ссылка на комментарий

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

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

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

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

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

    Войти

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

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

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

    AMK-Team.ru

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