Скриптование - Страница 489 - Скрипты / конфиги / движок - AMK Team
Перейти к контенту

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

Тема для обсуждения скриптов всего и всех в серии игр 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
Ссылка на комментарий
https://www.amk-team.ru/forum/topic/6185-skriptovanie/
В 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 сказал:

Попробуй без

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

Так ясно дело что незачем)

Ну что бы найти причину сначала с 

news_manager.send_tip

Но ок.

  • Спасибо 2
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/Тема на AP-PRO

naxac.gif

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

2 часа назад, _Sk8_AsTeR_ сказал:

чтобы она вызывалась только при каждой загрузке сейва или локи?

В actor_binder:net_spawn попробуй.

  • Спасибо 1

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

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

@_Sk8_AsTeR_, объявить таковую в одном скрипте и обратиться в другом. Объявлять без служебного слова local. Пример - db.script с известным множеством таблиц, которые много откуда читаются и используются в некоторых целях.

 

Объявление:

zone_by_name = {}

А в каком-нибудь xr_conditions.script:

function actor_in_zone(actor, npc, p)
    local zone = db.zone_by_name[p[1]]
    return utils.npc_in_zone(db.actor, zone)
end

 

Изменено пользователем Overfirst
  • Спасибо 1

Ранее был известен под ником BoBaH_671.

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

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

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

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

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

Войти

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

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

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