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

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

@_Sk8_AsTeR_, когда создаётся новый объект, ему присваивается свободный id. 

Диапозон id от 0 до 65535, что ограничивает число одновременно существующих объектов.

При этом 0 - actor, 65535 - ничей, имеет специальное значение. 

 

  • Спасибо 1
  • Полезно 2
Ссылка на комментарий
В 17.04.2019 в 00:36, Overfirst сказал:

local text = obj:character_name()

function npc()
	for i = 1, 65535 do
		local obj = alife():object(i)
		if obj and IsStalker(obj) then
			
			local text = obj:character_name() -- тут и есть имя сталкера  ? 			
		end
	end
	amk.send_tip(text, "123", 2, 15, "common_channel") -- выводим на экран значение переменной text
end

Спасите - помогите! :( 

Цитата

attempt to call method 'character_name' (a nil value)

 

Ссылка на комментарий
47 minutes ago, _Sk8_AsTeR_ said:

obj:character_name

Это клиентский метод. То есть имена можно получить только для НПЦ которые сейчас в online

Для серверного - только через net packet для оригинального движка.

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

@lordmuzer, Черт, в нетпакетах я слаб...

Есть мыслишки, как можно через нетпакеты перебрать всех живых нпс в игре, чтобы дёрнуть имя рандомного?

 

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

Перебирать их нужно точно так же - циклом: 

for i = 1, 65535 do

А дальше, берем например https://github.com/OGSR/OGSR-Engine/blob/main/Game/Resources_SoC_1.0006/gamedata/scripts/m_netpk.script (и связанные с скриптом файлы) подключаем к себе в мод.

А дальше пример так:

local pk = get_netpk( sobj )
if pk and pk:isOk() then
	local data = pk:get()
	local charname = data.character_name
end

Так же подойдет любой другой скрипт для чтения нет пакетов.

Изменено пользователем lordmuzer
  • Полезно 2
Ссылка на комментарий

Добрый день!
Подскажите, по каким причинам НПС могут самостоятельно переходить в оффлайн, находясь при этом в радиусе switch_distance актора?

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

  for a = 1, 65535 do
    local obj = alife():object( a )
    if obj then
      local obj_name = obj:name()
      if string.find( obj_name, "esc_vagon_wounded" ) then
        log3( "~ [%s]: found [%s]", script_name(), obj_name )
        alife():set_switch_online( obj.id, true )
        alife():set_switch_offline( obj.id, false )
      end
    end
  end

Но ничего не выходит.

Важнейшая задача цивилизации - научить человека мыслить.

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

Добрый вечер, уважаемые !

Подскажите почему не выводятся на экран сообщения отсюда:

 

			if dik == DIK_keys.DIK_HOME then
				level.set_time_factor(300)
				news_manager.send_tip(db.actor, "Ускорение времени ВКЛ.", nil, nil, 5000)
			elseif dik == DIK_keys.DIK_END then
				level.set_time_factor(5)
				news_manager.send_tip(db.actor, "Ускорение времени ВЫКЛ.", nil, nil, 5000)				
			end

 

Ссылка на комментарий
57 minutes ago, Fenrir02 said:

по каким причинам НПС

НПЦ может быть под гулагом, а у гулага свои правила когда кто выходит в онлайн.

18 minutes ago, Space.Marine said:

Подскажите почему не выводятся на экран сообщения отсюда:

Где сей код находится?

  • Спасибо 1
Ссылка на комментарий
1 час назад, Fenrir02 сказал:

переходить в оффлайн, находясь при этом в радиусе switch_distance актора

Если такое происходит на граничной дистанции, то это нормально: там есть гистерезис на вход/выход.

Отношения между людьми- главная ценность в человеческом обществе.
Любая полученная информация- это только повод для размышлений, а не побуждение к действию.
Это должен знать каждый: уроки боевой подготовки Дяди Саши https://yadi.sk/d/60Ec2B06goLAE
Накопано и накнопано:https://yadi.sk/d/mzVY5jQEspwpt

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

Попробуй без

Ну а на кой оно мне без функции времени... В принципе, ничего важного в сообщении, просто хотелось... Видать чой-то из-за того, что я худ правил, уже не помню где... В любом случае, благодарю.

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

граничной дистанции

Я имел ввиду, что подхожу к НПС вплотную, а его нет в онлайне вообще, но знаю, что он существует, так как метку на него можно поставить.

Важнейшая задача цивилизации - научить человека мыслить.

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

 

@lordmuzer, дружище, огромное тебе спасибо! Ты помог мне реализовать мечту не первого года...

Осталось задебажить, и сразу вопрос к тебе, как к спасителю.

При вызове функции игра подвисает на некоторые секунды, считывая нетпакеты. При повторном вызове функции ловлю лог:


LUA error: not enough memory.

И вот вопрос: как можно ограничить количество циклов выполнения функции? Он мне выводит сразу кучу имён сталкеров, а достаточно 5-6 имен, например... Ну и еще мне нужно придумать как обновляться, чтобы память не кончалась, но по поводу последнего наверно что-то сам придумаю...

 

Не смекну как стереть более неактуальное сообщение, так что просто спрячу его под спойлер. До всего допетрил сам.

@lordmuzer, брат, братишка. огромное тебе спасибо! Около года я мозговал как это реализовать!

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

@Fenrir02, в кастом-дате нпс может быть секция spawner, в которой прописаны условия перехода в онлайн/оффлайн. Также, если непись под гулагом, то в этом гулаге могут быть прописаны условия перехода в онлайн. Обрабатываются эти условия в функции can_switch_online непися, и если она возвращает false, то никакие alife():set_switch_... непися из оффлайна не вытащат.

  • Спасибо 1
  • Согласен 1
  • Полезно 2

Аддон для ОП-2.09.2: Яндекс/Google/GitHub

naxac.gif

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

Господа, подскажите пожалуйста, в бинд сталкер куда вставлять вызов функции, чтобы она вызывалась только при каждой загрузке сейва или локи? Вроде можно было...

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

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

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

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

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

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

Войти

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

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

AMK-Team.ru

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