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

Внимание. На форуме проводятся технические работы с боковым меню.

_Val_ _Val_

Скриптование


Svoboда

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

22.10.2023 в 22:02, Colder сказал:

section.id

section тут - это строка, видимо? Нужно что-то вроде

local obj = creare_anom(....

level.map_add_object_spot_ser(obj.id, .....

Ну, и функция  create_anom должна возвращать заспавненный объект.

22.10.2023 в 22:02, Colder сказал:

метка ставится на гг

Потому что первый аргумент в level.map_add_object_spot_ser равен nil

Изменено пользователем naxac
  • Спасибо 1
  • Нравится 1

Аддон для ОП-2.09.2: Яндекс/Google/GitHub/Тема на AP-PRO

naxac.gif

Поделиться этим сообщением


Ссылка на сообщение

@Colder , можно: вместо break сделай return, а сразу после цикла поставь спавн этого мешка. Получится, если в цикле return не сработал, значит дистанция больше, значит спавним мешок обратно.

  • Спасибо 1
  • Нравится 1
  • Согласен 1

Аддон для ОП-2.09.2: Яндекс/Google/GitHub/Тема на AP-PRO

naxac.gif

Поделиться этим сообщением


Ссылка на сообщение
53 минуты назад, Balavnik сказал:

координатах, на которые наведён прицел?

Что-то вроде device().cam_pos:add( device().cam_dir:mul( level.get_target_dist() ) )

Но это неточно, в векторах не силён)

  • Нравится 2
  • Полезно 1

Аддон для ОП-2.09.2: Яндекс/Google/GitHub/Тема на AP-PRO

naxac.gif

Поделиться этим сообщением


Ссылка на сообщение
28.07.2024 в 04:06, Labadal сказал:

чтобы это значение "1", сохранялось в переменной, даже если я начну новую игру?

Можно  записывать переменные в файл (пример). Только для этого нужно в скриптах иметь рабочее пространство имён io.

Если же io нет, то можно использовать разные "костыли" - например, создать специальный файл, в названии которого сохранять нужные данные (пример).

Изменено пользователем naxac
добавил примеры
  • Спасибо 1
  • Нравится 1

Аддон для ОП-2.09.2: Яндекс/Google/GitHub/Тема на AP-PRO

naxac.gif

Поделиться этим сообщением


Ссылка на сообщение
6 часов назад, Labadal сказал:

помню, что в СДК игрался

Доигрался - виснет логика у нпс. Попробуй откатить изменения.

  • Согласен 1

Аддон для ОП-2.09.2: Яндекс/Google/GitHub/Тема на AP-PRO

naxac.gif

Поделиться этим сообщением


Ссылка на сообщение
31.07.2024 в 13:39, Labadal сказал:

Запускаю игру - опять получаю безлоговый вылет

Была у меня когда-то давно такая история при сборке спавна с помощью xrAI. Проблема, насколько я понял тогда, в самом xrAI. Есть, вроде как, какая-то правленая версия, но я тогда её так и не нашёл - перешел на АСДС.

Аддон для ОП-2.09.2: Яндекс/Google/GitHub/Тема на AP-PRO

naxac.gif

Поделиться этим сообщением


Ссылка на сообщение

@Labadal , там весь скрипт переделывать надо, в том числе и в тех местах, где создаются уникальные id для фраз. Возьми просто родной скрипт от 6-го патча.

Изменено пользователем naxac
  • Нравится 1
  • Полезно 2

Аддон для ОП-2.09.2: Яндекс/Google/GitHub/Тема на AP-PRO

naxac.gif

Поделиться этим сообщением


Ссылка на сообщение
1 час назад, Labadal сказал:

это ведь не решение

У тебя стоит какой-то мод, предназначенный для 4 патча, а движок - 6 патча. Отсюда и все проблемы с зависанием нпс, и вот эта трабла с диалог_менеджером тоже.

  • Спасибо 1
  • Нравится 1
  • Согласен 1

Аддон для ОП-2.09.2: Яндекс/Google/GitHub/Тема на AP-PRO

naxac.gif

Поделиться этим сообщением


Ссылка на сообщение
19 часов назад, Капрал Хикс сказал:
if task_status == 0 then

В lua_help есть такой класс:

C++ class task {

    const completed = 2;
    const fail = 0;
    const in_progress = 1;
    const task_dummy = -1;

};

Из названий констант, думаю, понятно, какая что значит.

Аддон для ОП-2.09.2: Яндекс/Google/GitHub/Тема на AP-PRO

naxac.gif

Поделиться этим сообщением


Ссылка на сообщение

@Капрал Хикс , все верно, ведь это не id таска, а секция в конфиге. Если тебе нужно проверить состояние конкретного цикличного квеста, нужно это делать в task_manager.script

  • Полезно 2

Аддон для ОП-2.09.2: Яндекс/Google/GitHub/Тема на AP-PRO

naxac.gif

Поделиться этим сообщением


Ссылка на сообщение

@Balavnik , попробую погадать на кофейной гуще. У тебя платформа ТЧ, скрипт оригинальный. Тогда вылет связан с тем, что группировка непися не добавлена в death_manager.script, либо не прописана в конфигах death_manager'a.

  • Нравится 4
  • Смешно 1

Аддон для ОП-2.09.2: Яндекс/Google/GitHub/Тема на AP-PRO

naxac.gif

Поделиться этим сообщением


Ссылка на сообщение

@Norman Eisenherz , твои изменеия будут действовать только для тех артов, в конфиге у которых стоит класс SCRPTART (см. скрипт class_registrator).

  • Полезно 2

Аддон для ОП-2.09.2: Яндекс/Google/GitHub/Тема на AP-PRO

naxac.gif

Поделиться этим сообщением


Ссылка на сообщение

@Norman Eisenherz , ты используешь переменную клиентского актера db.actor. В момент появления серверного объекта артефакта клиентского объекта актера ещё нет. Используй либо серверный объект актера alife():actor(), либо проверку на наличие db.actor.

@Капрал Хикс , может быть, на net_destroy какое-нибудь непотребство происходит? В какой-нибудь схеме сбой, или в каком-нибудь биндере?... Ещё, вроде, что-то такое было, если не убрать перед дестроем статик с экрана, добавленный через AddDialogToRender.

Изменено пользователем naxac
  • Полезно 3

Аддон для ОП-2.09.2: Яндекс/Google/GitHub/Тема на AP-PRO

naxac.gif

Поделиться этим сообщением


Ссылка на сообщение

@Капрал Хикс , если self.start_btn - это статик, а не кнопка, то у него есть метод SetTextST("string_id"), которому game.translate_string не нужно, он автоматически транслирует строку.

  • Нравится 2

Аддон для ОП-2.09.2: Яндекс/Google/GitHub/Тема на AP-PRO

naxac.gif

Поделиться этим сообщением


Ссылка на сообщение

@Stalkersof , для того, чтобы вывести нужный индикатор, тебе надо знать, сколько проспал ГГ. И в переменной "sleep_time" лучше хранить не время начала отсчёта, а само прошедшее время. Для этого нужно, напрмер, на net_spawn загружать эту переменную, а на save - сохранять.

Скрытый текст
local hud = get_hud()
local sleep_sound = xr_sound.get_safe_sound_object([[actor\sleepy]])
local sleep_z,sleep_g,sleep_k = 0,0,0

-- Время в минутах, через которое показываем индикаторы
local time_z = 12 * 60 -- зеленый индикатор 
local time_g = 14 * 60 -- желтый индикатор. 
local time_k = 16 * 60 -- красный индикатор. 

--=========================================================================
-- удаление пробелов по краям строки
string.trim = function (s)
	return (string.gsub(s, "^%s*(.-)%s*$", "%1"))
end
-- разбивка строки по символу
string.explode = function ( str, div, clear )
	local ret = {}
	for s in string.gmatch( str, "([^"..div.."]+)" ) do
		ret[ #ret+1 ] = ( clear and string.trim( s ) or s )
	end
	return ret
end
-- Функции времени из АМК - чтобы не сбивалось время при смене месяца
local StartTime
function getStartTime()
	if StartTime == nil then
		local t = string.explode(system_ini():r_string("alife", "start_time"), ":", true)
		local d = string.explode(system_ini():r_string("alife", "start_date"), ".", true)
		StartTime = game.CTime()
		StartTime:set( tonumber(d[3]), tonumber(d[2]), tonumber(d[1]),	-- year.month.day
			tonumber(t[1]), tonumber(t[2]), tonumber(t[3]), 0 )			-- hours:minutes:seconds:milliseconds
	end
	return StartTime
end

function game_milliseconds()
	if StartTime == nil then
		getStartTime()
		if StartTime == nil then
			return 0
		end
	end
	local gtime = game.get_game_time()
	local seconds = gtime:diffSec(StartTime)
	local y,m,d,h,min,sec,ms = gtime:get()
	return (seconds * 1000 + ms)
end

function game_seconds()
	if StartTime == nil then
		getStartTime()
		if StartTime == nil then
			return 0
		end
	end
	return game.get_game_time():diffSec(StartTime)
end

function game_minutes()
	return math_floor(game_seconds() / 60)
end

function game_hours()
	return math_floor(game_seconds() / 3600)
end

function game_days()
	return math_floor(game_seconds() / 86400)
end
--=========================================================================

local sleep_time
local last_time = 0

-- вызывается из функции actor_binder:update(?)
function update()
	--log1 (sleep_time)
    -- текущее время в минутах
	local time_now = game_minutes()
	if last_time ~= 0 then
		sleep_time = sleep_time + time_now - last_time
	end

	if sleep_time > time_k then
	--log1("k")
		db.actor.power = - 0.005
		add_sleep_static("red")-- red
		if sleep_k == 0 then 
		    sleep_sound:play(db.actor, 0, sound_object.s2d) 
			sleep_k = 1 
			level.add_pp_effector("peace_fade.ppe", 1973, false) 
		end
	elseif sleep_time > time_g then
	--log1("g")
		db.actor.power = - 0.003
		add_sleep_static("yellow")-- yellow
		if sleep_g == 0 then 
		    sleep_sound:play(db.actor, 0, sound_object.s2d) 
			sleep_g = 1 
		end
	elseif sleep_time > time_z then
	--log1("z")
		db.actor.power = - 0.001
		add_sleep_static("green")-- green
		if sleep_z == 0 then 
		    sleep_sound:play(db.actor, 0, sound_object.s2d) 
			sleep_z = 1 
		end
	end

	last_time = time_now
end

-- вызывается из функции actor_binder:net_spawn
function net_spawn()
	getStartTime()
	sleep_time = (ogsr_vars.get_value_safe( "sleep_time" )) or 0
end
-- вызывается из функции actor_binder:save - вызов надо ставить в самое начало функции
function pre_save()
	ogsr_vars.set_value( "sleep_time", sleep_time)
end

-------------------------------------------------------------------------------------------------
local current_color
local colors = {
	green = GetARGB(255,76,255,0),
	yellow = GetARGB(255,255,216,0),
	red = GetARGB(255,255,0,0)
}
function add_sleep_static(clr)
	if current_color == clr then return end -- чтобы постоянно не обновлялось одно и то же
	local w = hud:AddCustomStatic("can_sleep_static", true):wnd()
	w:SetColor( colors[clr] )
	current_color = clr
end

-- Функция запускается из скрипта сна по окончании
-- Сюда надо передать время в минутах, которое проспали
function remove_sleep_static(sleep_minutes)
	if hud:GetCustomStatic("can_sleep_static") then
		hud:RemoveCustomStatic("can_sleep_static")
	end
	sleep_time = math.max(sleep_time - sleep_minutes, 0)
	sleep_z = 0
	sleep_g = 0
	sleep_k = 0
	current_color = nil
end

-- Функция скрытия индикатора. Вызывается из скрипта
-- Скрытия индикаторов при использовании бинокля и опт. прицела
function remove_static()
	if hud:GetCustomStatic("can_sleep_static") then
		hud:RemoveCustomStatic("can_sleep_static")
		current_color = nil
	end
end

 

Ничего не проверял, но вроде должно работать. Ещё бы интервал обновления задать, чтобы не апдейтилось постоянно.

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

Аддон для ОП-2.09.2: Яндекс/Google/GitHub/Тема на AP-PRO

naxac.gif

Поделиться этим сообщением


Ссылка на сообщение

@mmindwork , если объекты из all.spawn, то у них есть уникальное имя, тогда можно получить объект:

local obj = alife():object("object_name")

А потом вертексы:

local lv, gv = obj.m_level_vertex_id, obj.m_game_vertex_id

Если есть story_id, то объект можно получить:

local obj = alife():story_object(story_id)

А затем и вертексы: см. выше.

Перемещается он или нет, роли не играет. 

  • Спасибо 1
  • Нравится 2

Аддон для ОП-2.09.2: Яндекс/Google/GitHub/Тема на AP-PRO

naxac.gif

Поделиться этим сообщением


Ссылка на сообщение
28.07.2026 в 00:24, ziken сказал:

как через скрипт использовать предмет

Использовать предмет - это значит съесть его:

db.actor:eat( db.actor:object("antirad") )

  • Полезно 1

Аддон для ОП-2.09.2: Яндекс/Google/GitHub/Тема на AP-PRO

naxac.gif

Поделиться этим сообщением


Ссылка на сообщение
  • Недавно просматривали   0 пользователей

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