Jump to content

Recommended Posts

aromatizer    2,213
1 час назад, Fenrir02 сказал:

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

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


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

Share this post


Link to post
Share on other sites
Space.Marine    268
10 минут назад, lordmuzer сказал:

Попробуй без

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

Share this post


Link to post
Share on other sites
lordmuzer    722

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

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

news_manager.send_tip

Но ок.

  • Thanks 2

Share this post


Link to post
Share on other sites
Fenrir02    196
1 час назад, aromatizer сказал:

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

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


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

Share this post


Link to post
Share on other sites
_Sk8_AsTeR_    2
Скрытый текст

 

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

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

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


LUA error: not enough memory.

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

 

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

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

Edited by _Sk8_AsTeR_

Share this post


Link to post
Share on other sites
naxac    1,334

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

  • Thanks 1
  • Согласен 1
  • Полезно 2

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

naxac.gif

Share this post


Link to post
Share on other sites
_Sk8_AsTeR_    2

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

Share this post


Link to post
Share on other sites
AndreySol    100
2 часа назад, _Sk8_AsTeR_ сказал:

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

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

  • Thanks 1

Share this post


Link to post
Share on other sites

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

Share this post


Link to post
Share on other sites
_Sk8_AsTeR_    2

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

Share this post


Link to post
Share on other sites
Overfirst    610

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

 

Edited by Overfirst
  • Thanks 1

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

Share this post


Link to post
Share on other sites
Graff46    417

@_Sk8_AsTeR_, можно ещё написать ф-цию которая возвращает значение нужной переменной, в другом скрипте создаете переменную с приравниванием к вызову ф-ции.

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

-- файл скрипта, например my_script.script --
local a = 5 -- переменная

function get_a()
	return a
end
--------------------------------

--- файл скрипта 2 "не важно имя файла" --

local a = my_script.get_a() -- теперь у нас в этом скрипте есть переменная "а" такая же как в "my_script.script"
 
-----------------------------------------

 

 

  • Thanks 1

fe2f085fa6ec930af82f5856df7e561b.jpg

Share this post


Link to post
Share on other sites
Fenrir02    196

@mole venomous
Закрыть инвентарь при использовании чего-либо можно так:
 

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


local objects = {
  [ "medkit" ] = true,
}


function on_use( obj )
  if objects[ obj:section() ] then
    local input = level.main_input_receiver()
    if input then
      level.start_stop_menu( input, true )  -- Закрываем инвентарь
    end
  end
end

-- Только такой способ знаю
function on_block_inventory()
  cmd( "unbind inventory" )
end

function cmd( scmd, ... )
  local args = { ... }
  if #args > 0 then
    scmd = scmd .. ' ' .. table.concat( args, ' ' )
  end
  get_console():execute( scmd )
end

 

 

  • Полезно 1

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

Share this post


Link to post
Share on other sites

Всем привет, вот такой словил ЛОГ вылета на Сталкер ЧН, думаю что из-за "не найденных анимаций" в HD Моделе NPC
 

Expression    : motion_ID.valid()
Function      : CKinematicsAnimated::ID_Cycle
File          : E:\priquel\sources\engine\Layers\xrRender\SkeletonAnimated.cpp
Line          : 208
Description   : ! MODEL: can't find cycle: 
Arguments     : idle

Нужна помощь как можно решить, или в чем проблема

Share this post


Link to post
Share on other sites

Подскажите пожалуйста, возможно ли такое реализовать на движке COP/COC, и если да, то какие могут быть подводные камни?

У меня появилась идея усложнить систему фаст тревала, когда ГГ может попросить НПС-проводника провести его к определенной точке. А именно: ГГ с проводником могут попасть в засаду реальных НПС и мутантов, которые находились "по маршруту" фаст тревела.

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

Пример: ГГ в деревне новичков просит НПС сопроводить его до определенного места в темной долине. В это время на АТП находятся бандиты, которые враждебны ГГ. ГГ и проводник телепортятся возле АТП и вступают в бой с бандитами

--

зы: язык Lua для меня новый и я только собираюсь его начать изучать, чтобы реализовать подобный скрипт

Edited by blackburn1489

Share this post


Link to post
Share on other sites

Здрасьте.

 

Слепил уборщик бесхозного оружия:

• вызов из [scripts\bind_stalker.script] actor_binder:net_spawn(data);

• удалять все, кроме списка исключений;

• на текущей локации удалять, если рядом нет трупов;

• на других локациях удалять просто так.

 

Проблема: если вызывать скрипт каким-нибудь триггером (сброс бинта, например) в уже прогруженной локации, то ближайшие трупы учитываются и пушки, соответственно, лежат на месте. При вызове из "net_spawn" трупы в процессе прогрузки не обнаруживаются.

Вариант 1: https://drive.google.com/open?id=1-K5gPW3q3AUPN1bGXfEjBZ1Uj8kecjwh

 

Добавил задержку запуска через level.client_spawn_manager: трупы обнаруживаются и при вызове из "net_spawn", хотя задержка всего ничего.

Вариант 2: https://drive.google.com/open?id=1eEcuoF9Daw150FPWxpsAkXodliqAE2x1

 

Выходит, трупы на текущей локации загружаются чуть позже ГГ. Как это обойти без костылей?

Share this post


Link to post
Share on other sites
_Sk8_AsTeR_    2

Ребят, вопрос - загадка. С вашей помощью огромной наваял скриптец, благодаря которому через нетпакеты будут перебираться реально существующие НПС, их имена записаться в таблицу, и в итоге от их имени будут сообщения в чат приходить. И так случилось, что практически в начале игры (успел только АТП зачистить вначале) мне отписался Фанат. Официально он появляется после х-18, но он у меня отписался намного раньше.

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

function table_update_pda()
tab = {"пусто"}       -- обнуляем таблицу всех НПС
tab_newbIes = {"new"} -- обнуляем таблицу новичков

	for i = 1, 65535 do
		local sobj = alife():object(i)
		if (sobj) and IsNpcStalker(sobj) then  -- проверка на фракцию (только сталкер, долг, фридум, грин)
		
		local pk = get_netpk(sobj)
			if pk and pk:isOk() 
			then
				local data = pk:get()
				local charname = data.character_name
				table.insert(tab, charname)
					if (sobj) and is_npc_newbie(sobj) then  -- проверка на новичка
					table.insert(tab_newbIes, charname)	
					end
			end	

		end
	end
end

 

Так вот вопрос, игра где-то спавнит Фаната намного раньше, или я не понимаю как работает моя ф-ция? Помогите разобраться, ибо интрига!

Share this post


Link to post
Share on other sites
AndreySol    100
8 часов назад, Norman Eisenherz сказал:

Как это обойти без костылей?

Попробуй в апдейте биндера:

if device().precache_frame <= 1 then

     ....тут вызывай свой уборщик....

end

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

Официально он появляется после х-18, но он у меня отписался намного раньше.

Фанат прописан в all.spawn, по этому спавнится с самого начала НИ, но до момента "Х" сидит в офф-лайне. А в чем проблема? Типа, до появления в качестве замены Волку в ДН, Фанат лежит в анабиозе в секретной лаборатории? И по тому не может писать сообщения, как любой другой сталкер?

Share this post


Link to post
Share on other sites
naxac    1,334

@Norman Eisenherz, делай проверку не по клиентским объектам, а по серверным.

Я смотрю, у тебя получается в цикле на 65535 ещё один цикл на 65535, это же аццкий ад какой-то. Не лучше будет пройтись один раз по всем объектам, разложив их по таблицам, а потом по этим таблицам уже проверять расстояния, паренты и т.д.?..


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

naxac.gif

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.


AMK-Team.ru

×
×
  • Create New...