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

_Sk8_AsTeR_

 НС
  • Число публикаций

    290
  • Регистрация

  • Последнее посещение

  • AMKoin

    614 [Подарить AMKoin]

Сообщения опубликованы _Sk8_AsTeR_

  1. @AndreySol ну я проверял опытным путём. Там оказалось всё хитрее даже, чем я предполагал. Те НПС, которые приходят из вне гулага, они регистрируются и спокойно проходят к тем вейпоинтам, которые заданы в path_walk, анимация отыгрывается верно.

    А вот если нпс уже занимался новой работой, мы сохранились и загрузились, то бывает такое что нпс по какой-то причине в момент загрузки сейва вдруг сместился на пару игровых метров в сторону. Но игра считает, то он стоит правильно и xr_gulag сразу же заставляет его работать ту работу, которой он занимался до сейвлоада.

    Я просто ковырял хр_гулаг и отключал обработку нпс во время загрузки сейва. В этом случае тот нпс, который при загрузке сместился, действительно отправился строго в ту точку, которую я прописал в path_walk, я отслеживал этот момент прям с точностью до ноль-десятых координат с помощью g_vertex_debug (OGSR). 

    Когда нпс приходит на точку он замирает, ожидая когда его обработает заранее мною отключенный xr_gulag. Ну, так и продолжает стоять. 

    Выходит что именно xr_gulag и заставляет всех нпс во время загрузки сейва моментально и без вариантов сразу приниматься за работу, не давая неписям даже шаг в сторону сделать (за исключением тех нпс. у кого в path_walk цепь вейпоинтов).

    Ну, по крайней мере я именно такое заключение для себя сделал, ковыряя всю эту систему. Если я где-то неправ, то поправь меня пожалуйста, буду очень признателен! :)

  2. @WinCap проблема оказалась весьма специфична. Когда мы грузим сейв, то xr_gulag сразу берёт на себя всех НПС, что были в работе гулага в момент сохранения. И сразу же выдаёт им работу при условии, что они не находятся дальше контрольной точки гулага больше чем на 50 игровых метров. В такмо случае все НПС в момент загрузки сейва моментально получают работу и начинают её выполнение, без возможности сдвинуться с места (за исключением патрульных, у которых зацикленный набор вейпоинтов). Пробовал отключать перехват xr_gulag'а, в таком случае нпс доходят до точных координат, но работу не начинают. Казалось бы - вот он, выход из ситуации, задать небольшой таймер, чтобы гулаг сразу не перехватывал неписей, а давал им возможность дойти до точной координаты, чтобы после красиво сесть на стульчик, например.

    Но в таком случае все те НПС, которые сидели у костра, вдруг начинают одновременно ломиться в одну единственную точку, толпой. Видимо именно поэтому в ЧН были введены смарткаверы, которые, судя по всему, имели приоритет над работами гулагов типа, не знаю.

    Эх

  3. @WinCap эх, если бы такие были :(

    Все оригинальные, соляночные. Такая проблема была и в 10 соли и в 16 на  огср, например. 

    Я лишь модифицирую state_lib и state_mngr_animations_list, регистрируя новые анимки, после чего в gulag_уровень добавляю новые работы

  4. @AndreySol именно с переключением схемы, например, по сигналу по достижению поинта - не пробовал. Пробовал делать 2 вейпоинта, где второй вейпоинт уже с флагом для патч_лука с анимацией. Всё равно садится тупо мимо периодически. Непонятно. Ну я делаю не ради одного нпс, а на каждой локе во многих лагерях новые работы с анимациями. 

    Не хотелось бы городить для каждой работы по нескольло переключаемых логик. Мне просто не понятно, почему так происходит в игре у нас. Если найдется способ просто ресетнуть работу, то было бы здорово

     

  5. Ребят, а как можно ресетнуть работу в гулаге конкретному неписю? Если он начал играть анимацию не в том месте, например. Пробовал в xr_gulag готовые фции типа resetjob, не работают, нпс продолжает играть анимацию не отрываясь. 

    Пробовал через xr_logic.initialize_obj, в этом случае нпс действительно выходит из анимации и идёт в правильный вертекс, но там останавливается и замирает, игнорируя path_look с анимацией. 

    Как можно его вновь взяться за работу? 

     

  6. А каким образом можно получить левел вертекс ид конкретного НПС?

    Хочу попробовать сравнить вертиксы текущей, где анимация играется в неправильной позиции и с тем, где она действительно должна играться. То есть хочу понять, считает ли игра в неправильной позиции что она всё делает правильно 

    PS разобрался. Пост удалить нельзя, поэтому извиняюсь :[

  7. Доброго времени! Есть вопрос по проигрыванию анимаций. Получилось НПС посадить на стул. НО с ними иногда происходят какие-то странности. НПС может либо сесть ровно в соответствии с подогнанными координатами, либо сесть мимо стула. Во втором случае если напугать НПС выстрелом под ноги, то он побегает и вернется, чтобы сесть на стул. И садится ровно. Есть мысли, что можно придумать? Есть варик, например, если НПС захочет проиграть определенный стейт, то перед этим заставить его сделать шаг вперед? Типа того, не знаю. То есть чтобы НПС перед тем как сесть (потенциально неправильно) сначала отошел от координат, чтобы затем вернулся и сел правильно.

    Такая же ерунда, кстати, в Баре у ПЫСов. Все НПС, проигрывая анимацию о барной стойки, стоят чуть дальше чем нужно и опираются о пустоту. Если их напугать, то они возвращаются на место и проигрывают анимацию уже как положено.

    Есть какие-нибудь мысли, как это пофиксить?

    • Согласен 1
  8. Привет! 

    Задаю анимацию в path_look, проигрывается. Берём анимацию сидения на стуле. А как по высоте анимку подогнать под стул? 

    Выходит что силячий нпс парит над стулом. Как ни ковырял координаты - все никак не выходит. Или высота строго задана в самой анимки и идёт отчёт высоты строго от вертекса на полу? 

  9. Господа, вопрос к знатокам логики нпс. 

    1) Возможно ли в логике нпс вызвать скриптовую функцию? Например по сигналу. 

    2) логику же можно переключать в зависимости от инфопорций. А можно переключать логику в зависимости от какого нибудь скриптового прекондишена, как это сделано в диалогах, например? 

  10. Господа, доброго времени! Возникла необходимость перманентно держать на экране определенную информацию. Решил использовать шаблон из туториала: "нажмите "клавиша" чтобы присесть"

    В конфиге имеем:

    Скрытый текст
    
    <item><!-- Для того чтобы пройти под невысоким препятствием - нажмите клавишу "ctrl" $$ACTION_CROUCH$$-->
    			<length_sec>5</length_sec>
    			<pause_state>off</pause_state>
    			<guard_key/>
    			<sound/>
    			<cursor_pos/>
    			<pda_section/>
    			<grab_input>0</grab_input>
    			<main_wnd>
    				<auto_static start_time="0" length_sec="5000" x="712" y="475" width="400" height="150" alignment="c" stretch="1"
    							light_anim="" la_cyclic="1" la_texture="1" la_alpha="1">
    					<window_name>w1</window_name>
    					<text font="graffiti22" r="225" g="225" b="250" a="255">crouch_tutorial</text>
    				</auto_static>
    			</main_wnd>
    		</item>

     

    <length_sec>5</length_sec> - время показа 5 секунд (если я правильно понял). А как сделать вывод информации бесконечным?

  11. Всем доброго. Вопрос такой - каким образом реализованы в игре вороны? Они ведь не обрабатываются скриптами вообще? Имею в виду их логику, траекторию. Это движковое? Есть ли возможность задать вектор движения вороне? 

  12. Доброго времени! Подскажите пожалуйста, каким образом можно сделать проверку, видит ли вражеский NPC нашего ГГ в процессе перестрелки? А также каким образом можно сделать проверку, что наш ГГ - приоритетный текущий враг для NPC?

  13. @dsh, огср, да

    Огромное спасибо, скоро проверю :)

    @dsh Метод работает! А есть ли способ проверить, нажал ли ГГ левую кнопку мыши, иначе говоря - выстрелил? 

    Нужно скриптово отследить момент, когда ГГ, удерживая зум, выстрелит, и вызвать ф-цию в момент выстрела...

  14. Прошу помощи :(

    Ест скрипт, убивающий всех ворон (или только на текущей локации?)

    Скрытый текст
    
    function kill_crow()
    	local lname = level.name()
    --			amk.send_tip("прошло", "прошло", 1, 15, "common_channel")
    	for id, sobj in alife():objects() do
    		local crow = level.object_by_id(id)
    		if crow and crow:section() == "m_crow"  then 
    			local hit = hit()
    				hit.direction = crow:direction()
    				hit.impulse = 1000
    				hit.draftsman = crow
    				hit.power = 1000
    				hit.type = hit.strike
    			crow:hit(hit)
    			local sobj = alife():object(id)
    			
    				alife():release(crow, true)
    			
    			ogse_st_mgr.start_gtimer(nil, math.random(150, 300), "ogse.release_crow", id)
    		end
    	end
    end

     

    Вопрос: А как мне убить всех ворон, но КРОМЕ текущей локации?

    А то на голову сыпятся, а нужно от них избавиться

  15. Доброго времени! Прошу помощи!

    Возникла идея - скриптово потушить лампу. Распаковав Алл.Спавн нашел у выбранной мною лампы параметр health = 100. Подозреваю, что дав параметру нуль - потушу лампу, хочу проверить. Хочу ковырять её через НетПакеты от Артоса. Вопрос, как мне прочитать нетпакет лампы?

    Скрытый текст
    
    [11509]
    
    ; cse_abstract properties
    section_name = lights_hanging_lamp
    name = yan_lamp6
    position = 24.0428810119629, -9.33421421051025, -271.800720214844
    direction = 9.42477798461914, 9.42477798461914, -7.85398149490356
    version = 118
    script_version = 6
    spawn_id = 3892
    
    ; cse_alife_object properties
    game_vertex_id = 1438
    level_vertex_id = 132308
    object_flags = 0xffffffaa
    custom_data = <<END
    [collide]
    ignore_static
    END
    
    ; cse_visual properties
    visual_name = physics\light\new_light\light_white_glass
    
    ; cse_ph_skeleton properties
    
    ; cse_alife_object_hanging_lamp properties
    main_color = 0xffffffff
    main_brightness = 1
    main_color_animator = light\light_omni_white_idle
    main_range = 8
    light_flags = 0x3a
    lamp_fixed_bones = link
    health = 100
    main_virtual_size = 0.1
    ambient_radius = 2.5
    ambient_power = 0.60000002
    main_bone = bone_lamp
    main_cone_angle = 2.0943952
    glow_radius = 0.69999999
    ambient_bone = bone_omni

     

    Пробую так:

    Скрытый текст
    
    function lampa()
    local sobj = alife():object(3892)
    local pk = get_netpk(sobj)
    if pk and pk:isOk() then
    	local data = pk:get()
    		amk.send_tip(tostring (data.name), "проверка имени", 1, 15, "common_channel")
        	amk.send_tip(tostring (data.health), "проверка жизни", 1, 15, "common_channel")
    --		data.health = 0
    --		pk:set(data)
    end	
    end

     

    Итого у меня возвращается параметр health = 100

    Но не возвращается data.name равно nil. Будто я не лампы нет-пакет вскрыл, а чего-то другого.

    Вопрос - правильно ли я определяю ID лампы? Если нет, то как правильно?

    Второй вопрос: возможно ли в принципе потушить лампу через данный параметр и через нет-пакет?

  16. Ребят, а как вообще реализована механика ворон в Сталкере? Насколько я понял - они спавнятся и "беспалева" преследуют ГГ по небу, имитируя бурную воронью деятельность. А есть возможность задать воронам вектор движения? По вызову скрипта, например, чтобы летела ворона от края до края локи?

AMK-Team.ru

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