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

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

Тема для обсуждения скриптов всего и всех в серии игр STALKER.


Задавая вопрос (!):
1. Внимательно изучите суть вопроса. Вопрос должен соответствовать выбранной Вами темы. Это поможет сохранить порядок и читабельность темы, а также облегчит поиск и понимание сего;
2. Изучите то, что уже есть в теме (пролистайте "руками", воспользуйтесь поиском на форуме);
3. Изучите информацию которая может вам помочь:

 
 

Stalkerin. Там есть много хороших статей касательно данной темы.
Уроки по модостроению. Есть рабочие примеры готовых скриптов различного назначения.

 

Справочное руководство по языку Lua 5.1
https://www.mediawiki.org/wiki/Extension:Scribunto/Lua_reference_manual/ru
Справочник по функциям и классам. Собрано много информации по функциям и классам, не всем, но по основные сведения предоставлены.

4. Дабы не превращать обсуждение в "кашу" разной информативной направленности, задавайте несколько вопросов по порядку (в разных постах) после того, как получите ответ на предыдущий вопрос;
5. "Спасибо" и тому подобное - будьте так любезны в ПМ. Если не любите писать в ПМ, в конце вопроса напишите фразу: "Заранее спасибо!" - или что-то в этом духе;
6. ПОЖАЛУЙСТА! Указывайте, для какой игры Вам необходима информация (ТЧ, ЧН, ЗП), если стоит мод - укажите название мода;
7. Если Вы что-то сделали и результат не такой, какой Вами задумывался, то, пожалуйста, приводите коды которые Вы изменяли/писали целиком! Это поможет другим правильно ответить на Ваш вопрос, а также оградит Вас от лишней писанины.
8. Оформляйте сообщение. Пользуйтесь тегами для того, чтобы отделить код от текста. Пишите грамотно - ПОЛЬЗУЙТЕСЬ ЗНАКАМИ ПРЕПИНАНИЯ.
9. И помните: «Правильно заданный вопрос – половина ответа».

 

Какие вопросы следует задавать, а какие нет...

 

Задавайте вопросы, которые касаются непосредственно скриптов и их работы, т.е. Вы что-то делаете, а у Вас что-то не получается, при этом у Вас на руках должен быть хотя бы какой-то код, свидетельствующий о Вашей причастности к вопросу.

 

Вопросы которые будут удалятся, следовательно их задавать не нужно:
-- Где находится та или иная функция?
Для ответа используем поиск по словам среди файлов оригинальной игры или мода, если объект поиска относится к нему, при помощью программы, которая Вам наиболее симпатизирует;
-- Как сделать что-то/то-то?
С подобными вопросами, либо в "ковырялки", где Вам вероятнее всего так же не ответят, либо выдвигаем мысли, подкреплённые теорией, практикой (идеальный вариант) и здравым рассудком;
-- Вопросы со смыслом: "сделайте", "совместите" и подобными глаголами повелительного наклонения.
-- К тому же удалению будут подвергаться вопросы, в которых масштабно не используются теги, для отделения кода и цитат от основного текста, а также не вписан в спойлер код размером превышающие семь строк.
Ответ на возможно возникший вопрос: В какую тему можно обратиться по поводу логики и спавна объектов?
В тему "ковырялок" соответствующей версии игры, для которой Вы задаёте вопрос.

И последнее: очень рекомендовано к прочтению Правила форума
 


  • Спасибо 1
  • Полезно 2
Ссылка на комментарий

@_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

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

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

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

Вопрос относительно блокировки доступа к инвентарю. Даже целых три. Весьма понравились идеи из ОП-2.1 и НА-6, где нельзя открыть инвентарь в движении (вернее, ГГ остановится) и при перезарядке оружия. Кроме того, пытался реализовать автозакрытие инвентаря при поедании медикаментов/еды (с блокировкой доступа до истечения времени использования), но ничего не вышло. Если есть подобные методы, скриптово реализуемые, буду признателен.

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

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

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

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

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

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

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

Войти

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

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

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