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

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

@AndreySol, прошу прощения. ТЧ, народная солянка. Что делал - действительно не подскажу, делал кучу всего. И с нет пакетами баловался, и с погодой, и с скриптоваными шейдерами... Вот думал подскажут люди добрые где в солянке рыться, чтобы статические места отдыха починить. Там ещё на шкале времени выбирать нужно во сколько просыпаться планируешь... 

  • Сомнительно 1

Подарки

  • Ссылка на комментарий
    В 05.08.2019 в 11:24, _Sk8_AsTeR_ сказал:

    где в солянке рыться

    Тогда берём araxis и сравниваем файлы оригинальной соли и свои. Для начала, файлы со скриптами сна .

     

    Здесь могла быть ваша реклама.


    Подарки

  • 5
  • 5
  • 4
  • 3
  • Ссылка на комментарий

    Значит взялся я ремкомплекты "отсебятские" делать для ТЧ. Логика такая:

       +Юзаем комплект - в инвентарь спавнится открытый ремкомплект.

       +Юзаем открытый ремкомплект - открывается окно с вариантами "Починить" и "Закрыть".

     

    Всё бы ничего, но почему-то после использования закрытого ремкомплекта колбэк use_object ломается. Подскажет кто в чём проблема?
     

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


    
    --FUNCTION TO CHECK USED ITEM
    function mod_func_check_used_item(obj)
    	mod_dbg("something used")
    	
        if(obj~=nil) then 
    		local t_s_sect = obj:section()
    		
    		mod_dbg("cond now "..l_n_repairkit_cond)
    		
    		if(l_n_repairkit_cond==-1) then
    			if(string.sub(t_s_sect,1,9)=="repairkit") then
    				mod_func_respawn_kit(obj,true)
    			elseif(string.sub(t_s_sect,1,16)=="opened_repairkit") then
    				mod_func_respawn_kit(obj,true)
    				
    				local t_u_rep_act = ui_repairkit.mod_repair_action_ui(get_hud())
    				level.start_stop_menu(t_u_rep_act, true)
    			end
    		end
        end
    end
    
    
    
    
    
    
    
    
    
    --REPAIR FUNCTION
    function mod_func_repair_item(i_kit,n_slot)
    	local t_i_repair = db.actor:item_in_slot(n_slot)
    	
    	local t_s_kittype = i_kit:section()
    	
    	local t_n_repairkit_cond = i_kit:condition()
    	
    	
    	
    	if(t_i_repair~=nil) then
    		local t_s_sound = [[interface\inv_ruck]]   --предмет сильно сломан
    		--[[interface\inv_belt]]     --звук пополнения
    		
    		local t_n_cond = t_i_repair:condition()
    		local t_n_repaircond = 1-t_n_cond
    		local t_n_newcond = 1
    		
    		if(t_n_cond>0.26) then
    			if(n_slot==6) then
    				t_s_sound = [[interface\inv_belt]]   --броня починена
    			else
    				t_s_sound = [[interface\inv_attach_addon]]   --предмет починен
    			end
    			
    			if(t_n_repairkit_cond<t_n_repaircond) then
    				t_n_newcond = t_n_cond+t_n_repairkit_cond
    				t_n_repairkit_cond = 0
    			else
    				t_n_repairkit_cond = t_n_repairkit_cond-t_n_repaircond
    			end
    			
    			t_i_repair:set_condition(t_n_newcond)
    		end
    		
    		local snd_obj = xr_sound.get_safe_sound_object(t_s_sound)
    		snd_obj:play_no_feedback(db.actor, sound_object.s2d, 0, vector(), 1.0)
    	end
    end
    
    
    
    
    
    
    
    
    
    --SET NEW REPAIRKIT CONDITION
    function mod_set_newkit_condition(n_id)
    	local t_i_newkit = level.object_by_id(n_id)
    	
    	if(t_i_newkit~=nil) then
    		t_i_newkit:set_condition(l_n_repairkit_cond)
    	else
    		l_i_mod_repairkit = nil
    	end
    	
    	l_n_repairkit_cond = -1
    end
    
    
    
    function mod_func_respawn_kit(obj,open)
    	l_n_repairkit_cond = obj:condition()
    	
    	local t_s_sect = obj:section()
    	
    	if(open==true) then
    		t_s_sect = "opened_"..t_s_sect
    	end
    				
    	l_i_mod_repairkit = alife():create(t_s_sect, db.actor:position(), db.actor:level_vertex_id(), db.actor:game_vertex_id(), db.actor:id())
    	level.client_spawn_manager():add(l_i_mod_repairkit, -1, mod_set_newkit_condition)
    end


     

     

    Простите я забыл в спойлер код запихнуть, но сайт мне не позволяет отредактировать :D

    Ах да забыл! Вот это написано ещё в самом начале (чтобы не было лишних вопросов):

    Скрытый текст
    
    function mod_dbg(fmt,...)
    	local con = get_console()
    	con:execute(string.gsub(string.format(fmt,...), " ", "_"))
    	con:execute("flush")
    end
    
    l_i_mod_repairkit = nil
    l_n_repairkit_cond = -1

     

     

    Добавлено  Опричник,

    Портянки под спойлер. Кнопка с "Глазом" на панели инструментов.

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

    Методом тыка выяснил, что проблему вызывает колбэк на вход в онлайн комплекта:

    level.client_spawn_manager():add(l_i_mod_repairkit, -1, mod_set_newkit_condition)

    Видимо я не правильно записал сам колбэк? Не понимаю что не так.

    Изменено пользователем Full Noob
    Ссылка на комментарий
    12 часов назад, Full Noob сказал:

    Методом тыка выяснил, что проблему вызывает колбэк на вход в онлайн комплекта:

    Ну так выясняй дальше, у тебя в ф-ции кэллбэка всего 7 строк кода. Закомментил одну - проверил, и так пока не найдешь ошибку.

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

    @AndreySol, не помогло. Я закомментил весь колбэк, но ничего не поменялось. Спасает только закомменчивание самой строчки "заведения" колбэка, но мне без него никак, так как при попытке сделать set_condition происходит краш:

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

    [error]Expression    : fatal error
    [error]Function      : CScriptEngine::lua_error
    [error]File          : E:\stalker\sources\trunk\xr_3da\xrGame\script_engine.cpp
    [error]Line          : 73
    [error]Description   : <no expression>
    [error]Arguments     : LUA error: ...l.k.e.r\gamedata\scripts\secretsmod_functions.script:123: attempt to call method 'set_condition' (a nil value)

     

    Изменено пользователем Full Noob
    Ссылка на комментарий
    6 часов назад, Full Noob сказал:

    так как при попытке сделать set_condition происходит краш:

    А ты уверен что имеется такая экспортирования ф-ция: "set_condition"? 

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

    @AndreySol, всмысле? Если ты имеешь в виду "а можно ли НЕ на оружии применить set_condition", то я отвечу: да, можно. Только что поменял запуск функции спавна открытого комплекта на простой obj:set_condition(0.5). Это сработало.

    Если имелось в виду "можно ли получить condition НЕ оружия и перенести на другое НЕ оружие", то я уверен, что да (но это не точно). Но я попробовал написать так:

    Скрытый текст
    
    l_i_mod_repairkit = alife():create(t_s_sect, db.actor:position(), db.actor:level_vertex_id(), db.actor:game_vertex_id(), db.actor:id())
    l_i_mod_repairkit:set_condition(0.5)

     

    Результат можешь почитать в моём предыдущем посте.

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

    Сильно пахнет маразмом. Появилась кое-какая мысль и я решил попробовать в конец колбэка на выход в онлайн дописать level.client_spawn_manager():remove(n_id,-1)

    Получил довольно экзотический вылет:

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

    stack trace:

    0023:03C9D16A xrGame.dll
     
    [error][     183]    : Невозможно создать файл, так как он уже существует.

     

    Ещё эксперементировал с вторым ИД (который -1 сейчас). Пробовал и 0 и db.actor:id() (вроде что 0 что актор ид одинаковые насколько я знаю, но я так на всякий).

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

    Всем добрый день. Вопрос по restriction_stock. Возможно ли к фиксированной InvMax добавлять числовые значения, полученные из функции через массив. Т.е имеем функцию проверки, одет ли костюм и если да, то какой. Отсюда находим кол-во дополнительного места для рюкзака и прибавляем к InvMax. Или же нужно оперировать в самой функции restriction_of_stock(ItemObj,Fix)?(Где я и застрял, т.к. при каждом вызове функции InvMax постоянно увеличивается). Моих знаний здесь не хватает... 

    Здесь могла быть ваша реклама.


    Подарки

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

    Здрасьте.

     

    ТЧ 1.0006.

    Есть мод с выводом статиков на HUD. Требуется поймать начало/конец катсцены и нажатие клавиш [Num +/-], чтобы временно скрыть статики. Как отследить указанные события? Может, есть проверка вроде hud_off() == true/false или отслеживание действия level.hide_indicators?

    Мини-моды: ТЧ ЧН ЗП

    Шпаргалка

    Ссылка на комментарий
    3 часа назад, Norman Eisenherz сказал:

    Требуется поймать начало/конец катсцены

    Любая кат-сцена откуда-то запускается, из логики какого-то объекта. Там и добавь скрытие индикаторов.

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

    [COP] Мне нужно создать скрипт для поиска рандомного пустого смарта.Уже 3 неделю бъюсь. Помогите плз.

    Добавлено  Murarius,

    Перемещено.

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

    Всем привет. Есть функция, которая при нажатии на кнопку на gui начинает выполнять много других весёлых функций (с вероятностью 0,8 телепортировать актора в нужное место, после чего высчитывать вероятность, за сколько он до этого места "добрался"; с вероятностью 0,2 забрасывать его по другим координатам, где его ждут бандиты. Вдовесок - затемнение экрана, перемотка времени, сообщения о том, что актор добрался за N часов и т.п.

     

    Практически всё работает хорошо, но, как говорится, есть нюанс: 
    1) Иногда актора просто телепортирует в локацию (куда выставлена вероятность 0,8) без сообщения и без перемотки времени; 
    2) Иногда эктора телепортирует в нужную локацию, но приходят два сообщения (например, "вы добрались за 2 часа" и "вы добрались за 3 часа") и время отматывается ажно на 5 часов вперёдт.

    Вопрос: как это можно пофиксить? Я не ахти какой скриптер, так что, пожалуйста, подскажите, может, я что-то не дописал или ошибся в расчётах вероятности. Заранее спасибо!

     

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

    function ui_map:button3_button_clicked()
    if math.random(1,100) < 80 then
    xr_effects.teleport_actor(nil, nil, {"way_to_f","look_to_f"})
    level.add_pp_effector("black.ppe", 150, false)
    if math.random(1,10) <= 3 then
    news_manager.send_tip(db.actor, "arrived_to_farm_1_hour", 0, "default", 5000)
    xr_effects.forward_game_time(nil, nil, {1}) 
    end
    if math.random(1,10) < 6 then
    news_manager.send_tip(db.actor, "arrived_to_farm_2_hour", 0, "default", 5000)
    xr_effects.forward_game_time(nil, nil, {2}) 
    end
    if math.random(1,10) >= 6 then
    news_manager.send_tip(db.actor, "arrived_to_farm_3_hour", 0, "default", 5000)
    xr_effects.forward_game_time(nil, nil, {3}) 
    end
    else
    xr_effects.teleport_actor(nil, nil, {"random_event_vodokachka_way","random_event_vodokachka_look"})
    news_manager.send_tip(db.actor, "arrived_to_vodokachka", 0, "default", 5000)
    level.add_pp_effector("black.ppe", 150, false)
    xr_effects.forward_game_time(nil, nil, {4})
    end
    self:HideDialog()
    end

     

    Ссылка на комментарий
    3 hours ago, Дмитрий Зверев said:

    1) Иногда актора просто телепортирует в локацию (куда выставлена вероятность 0,8) без сообщения и без перемотки времени; 

    Это потому что все 3 условия для сообщения отдельно вычисляют "вероятность". Може так выйти что не одно не сработает.

    3 hours ago, Дмитрий Зверев said:

    2) Иногда эктора телепортирует в нужную локацию, но приходят два сообщения (например, "вы добрались за 2 часа" и "вы добрались за 3 часа") и время отматывается ажно на 5 часов вперёдт.

    А это уже потому что с таким кодом может сработать больше одного условия для сообщения.

     

    Исправленный пример:

    Spoiler
    
    function ui_map:button3_button_clicked()
    	if math.random(1,100) < 80 then
    		xr_effects.teleport_actor(nil, nil, {"way_to_f","look_to_f"})
    		level.add_pp_effector("black.ppe", 150, false)
    
    		local rnd = math.random(1,10)	-- считаем "вероятность" один раз
    
    		if rnd <= 3 then
    		news_manager.send_tip(db.actor, "arrived_to_farm_1_hour", 0, "default", 5000)
    		xr_effects.forward_game_time(nil, nil, {1}) 
    		elseif rnd < 6 then
    		news_manager.send_tip(db.actor, "arrived_to_farm_2_hour", 0, "default", 5000)
    		xr_effects.forward_game_time(nil, nil, {2}) 
    		elseif rnd >= 6 then
    		news_manager.send_tip(db.actor, "arrived_to_farm_3_hour", 0, "default", 5000)
    		xr_effects.forward_game_time(nil, nil, {3}) 
    		end
    
    	else
    		xr_effects.teleport_actor(nil, nil, {"random_event_vodokachka_way","random_event_vodokachka_look"})
    		news_manager.send_tip(db.actor, "arrived_to_vodokachka", 0, "default", 5000)
    		level.add_pp_effector("black.ppe", 150, false)
    		xr_effects.forward_game_time(nil, nil, {4})
    	end
    
    	self:HideDialog()
    end

     

    Изменено пользователем lordmuzer
    • Нравится 1
    • Согласен 1
    Ссылка на комментарий

    Мужики! Вот, проигрывается , для примера, любой звук:

    local path = "characters_voice\\human_03\\stalker\\talk\\labux\\labux_28" -- string
    local so = sound_object( path ) -- userdata
    local pso = so:play_no_feedback(db.actor, sound_object.s2d, 0, vector(), 1.0) -- nil

    ВОПРОС: как узнать, что этот звук в данный момент проигрывается и остановить его принудительно?

    Что-то типа -->

    если звук SO сейчас проигрывается то ОСТАНОВИТЬ проигрывание

    Типа такого, но так, естественно, не работает...

    if so:playing() then so:stop() end

     

    Мы, вчера, соседям сказали, что материализация - состоялась, чтобы ваш авторитет не уронить. Вот, мол, было изваяние, а теперь - стала Марья Ивановна. Многие верят ... ©

    Ссылка на комментарий
    2 часа назад, Kirgudu сказал:

    @Баба ЯГА

    local pso = so:play(db.actor, 0, sound_object.s2d) if pso:playing() then pso:stop() end

    
    local pso = so:play(db.actor, 0, sound_object.s2d)
    if pso:playing() then pso:stop() end

     

    не пойдёт, pso возвращает nil , увы. Я написал это в первом своём посте, так не будет работать.

    Мы, вчера, соседям сказали, что материализация - состоялась, чтобы ваш авторитет не уронить. Вот, мол, было изваяние, а теперь - стала Марья Ивановна. Многие верят ... ©

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

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

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

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

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

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

    Войти

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

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

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

    AMK-Team.ru

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