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

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

if outfit and outfit:section() == "my_super_duper_outfit" then db.actor.power = db.actor.power + 0.1 end

power это же свойство. Получается к уже прибавленному 0.1, будет прибавляться текущее значение выносливости. Надо писать db.actor.power = 0.1.
Ссылка на комментарий

 

 

power это же свойство

, я думал что db.actor.power это собственно силы гг - то есть полоска выносливости.

Следовательно получится что мы сделаем ее рамной 0.1 - то  есть 10% сил у гг будет.

Я не прав ?


, прошу прощения. Теперь я понял.

db.actor.power у нас это то что отнимается или добавляется к силам гг в зависимости от знака. Может быть от 0 (нет смысла включать) до 1, где 1 - 100% сил.

То есть если  db.actor.power = -1 и зацикленно в апдейте - гг не может двигаться (в NLC - жадинка. там нашел).

Зная это - можно придумать и свою формулу. Это именно то что я искал.

Ну а power_restore_speed - это просто значение к которому движок приравнивает db.actor.power.

То есть общая скоросто восстановления(или убытка) сил считается по формуле db.actor.power = power_restore_speed(от артефактов - движок) + power_restore_speed(костюма).

Вот на выходе и получается то что нужно. И все это в сумме не должно превышать 1.

Сталкер: Когда человек родится, он слаб и гибок, когда умирает, он крепок и черств. Когда дерево растет, оно нежно и гибко, а когда оно сухо и жестко, оно умирает. Черствость и сила спутники смерти, гибкость и слабость выражают свежесть бытия. Поэтому что отвердело, то не победит.

из фильма 1979 года режиссёра Андрея Тарковского по сценарию братьев Стругацких.

Мои звуки и прочее для dsh_modМои звуки АК, Модифицирование NLC 6 Long Way Mod,   Умное выпадение запчастей мутантов для ОП-2

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

Интересно, только я вижу здесь странное (xr_meet.script):

function Cmeet_manager:get_key_from_distance(t)
	local key
	for k,v in pairs(t) do
		if v.dist >= self.dist then key = k
		else return key
	end	end
	return key
end
или ни кто сложной логики типа 40|something1, 20|something2, 10|something3 - никогда не писал, а потом не удивлялся результату ?

Все всегда пишут 5|... , 10|... , 20|... ?

 

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

 


2 BlooderDen, да, просто я забыл за давностью лет: при чтении получаем текущее значение, а при записи - записанное суммируется с текущим.

 

Повесить на выполнение, скажем, раз в пять секунд вывод в лог что-то типа

log( "test", "actor.power = %s", actor.power )

actor.power = 0.1

log( "test", "actor.power > %s", actor.power )

- все будет вполне наглядно - вместо того, чтобы упало до 0.1 - второй раз будет то же значение, а после завершения текущего апдейта - добавится вот этот самый 0.1.

 

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

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

 

 

при чтении получаем текущее значение, а при записи - записанное суммируется с текущим.

Огромное спасибо - два в одном(). Это круто и очень удобно =)

 

 

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

Так и думал проверить подобным образом. Не успел - разжевали все до пыли и в рот положили =)

Спасибо огромное всем-всем!

Сталкер: Когда человек родится, он слаб и гибок, когда умирает, он крепок и черств. Когда дерево растет, оно нежно и гибко, а когда оно сухо и жестко, оно умирает. Черствость и сила спутники смерти, гибкость и слабость выражают свежесть бытия. Поэтому что отвердело, то не победит.

из фильма 1979 года режиссёра Андрея Тарковского по сценарию братьев Стругацких.

Мои звуки и прочее для dsh_modМои звуки АК, Модифицирование NLC 6 Long Way Mod,   Умное выпадение запчастей мутантов для ОП-2

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

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

 

@Dniwe, В оригинале ТЧ к примеру этим заведует treasure_manager.script.

сколько в нем не ковырял, нужного не нашёл... Знаю что задаётся переменная, которой присваивается список нужных тайников. И через Math. random используется Изменено пользователем Dennis_Chikin
Добавлено Dennis_Chikin,

В прозекторской лежит "соляночный", там все откомметировано и приведено в читаемый вид. Можно посмотреть нужные подробности.

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

Через алл.спавн например.

Мод, где не бывает одинаковых путей - Судьба Зоны. (Лучшее, что у меня получилось на X-Ray) На базе модифицированного движка OGSR Engine.

Бывший мододел на X-Ray / Начинающий игродел на Unreal Engine. Программист.

AMD Ryzen 9 7950X (16 ядер, 32 потока, 5.75 ГГц); RTX 3080; 128 ГБ DDR5; Arctic Liquid Freezer II-420; 3 ТБ SSD PCIe 4.0; 4ТБ HDD.

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

Если уж в скриптовании, то в bind_stalker.script после

if self.bCheckStart then

...

_G.g_start_avi = true

дописать self.object:set_actor_position( куда надо )

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

Посмотри в ui_mm_main.xml

 

Мать: ASRock X470 Master SLI. Процессор: AMD Ryzen 9 3900X 12-Core(4200 MHz).
Память: Patriot Memory 3200 C16 Series. DDR4-3200(1600МГц), 16Гбх2(32Гб).
Видео: GeForce GTX 1060 6GB. Блок питания: CoolerMaster 750 Вт. Корпус: Zalman i3 Edge.

Химера конечно сильный хищник, а все держится дома. Чего же ты пришел к ней домой и пытаешься её убить? © Болотный Доктор

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

Здравствуйте, собственно, появилась одна нерешаемая для меня задачка:

 

if self.tt if gi and gi:parent()==nil then


items_value = 0
gi:iterate_inventory(function (d,item)
if lootable_table[item:section()] == true then
if items_value < 100 then
items_value = items_value+item:cost()*item:condition()/30
end
gi:transfer_item(item,npc)
end
if items_value >= 100 then
self.st.block_search=true
xr_sound.set_sound_play(self.object,"corpse_loot_good")
elseif items_value > 0 and math.random(items_value) < 50 then
self.st.block_search=true
xr_sound.set_sound_play(self.object,"corpse_loot_bad")
end
end, nil)
corpse_checked[gi:id()]=false
end
clearGObject(self.st)
end
end

()>

 

Привел часть модифицированного кода из скрипта обыска трупов. Проблема состоит в том, что при наличии более одного трупа рядом с НПС (учитывается также и бесхозное оружие) он обрывает звук (выдрал фразы НПС из ЗП, когда они после обыска радуются или злятся, в зависимости от ценности трофеев) Пробовал ставить задержки (я в этом слабоват, поэтому так и не понял как нормально поставить задержку на действие). Чем можно исправить этот недочет? (А да, на всякий случай - скрипт для ТЧ от Red75)

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

Всем здравствуйте!

Вопрос: копал торговлю и подумал что ведь есть наверное функция удаления предметов из ивентаря нпс, "торговцев", при продаже ему чего либо, заодно бы убрать полотна после [generic_sell] оставив только то чем он торгует, ведь ассортимент минимален по сравнению с тем что тама понаписано. В поиске по инету нашел только строчку actor_binder: on_item_take(obj), но самой функции нету, если не трудно подскажите.

----------

Хотя простых неписей лучше не трогать, а то не вооружить не приодеть не получится.

Изменено пользователем перегар

Все мы могли бы быть разными, если не были бы так одинаковы.
Нам что водка, что пулемёт - лишь бы с ног валило.

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

Вот та самая ссылка, которая в голосовалке зачем-то - в ей все и есть.

 

    str = pick_section( actor, npc, tt.buy_supplies )

    if ( tt.current_buy_supplies ~= str ) or ( not tt.resuply_time ) or tt.resuply_time < game.get_game_time() then

        npc:buy_supplies( tt.config, str )   -- здесь все и удаляется.

 

Кстати, поправил вчера вот как раз чтоб get_game_time() сравнивалось, а не глобальное.

А ежели buy_supplies нету - оно до этого момента и не добирается.

 

Ну и таки да, все полотна про 15700 костюмов с мигающими красным ПНВ все нормальные люди из всех конфигов посносили лет 5 назад, потому что по дефолту все прекрасно берется из system.ltx

[trade]

buy_price_factor_hostile = ; коэффициент покупки при goodwill = -100

buy_price_factor_friendly = ; коэффициент покупки при goodwill = 100

sell_price_factor_hostile = ; коэффициент покупки при goodwill = -100

sell_price_factor_friendly = ; коэффициент покупки при goodwill = 100

Изменено пользователем Dennis_Chikin
  • Спасибо 1
Ссылка на комментарий

Ребята, как сделать таймер без вывода на худ, время которого подойдет к концу и выдается инфопоршень?
Я делаю мод на АМК

Изменено пользователем BoBaH_671

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

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

как сделать таймер без вывода на худ, время которого подойдет к концу и выдается инфопоршень?

local timer = 0

function твоя_функция(delta)
	if not has_alife_info("твоя_инфо_порция") then 	--// если в игре нет инфо, то
		timer = timer+delta
		if timer>2000 then			--// устанавливаем промежуток времени. сейчас 2 секунды
			db.actor:give_info_portion("твоя_инфо_порция") --// выдаем инфо
		end
	end
end
Вешать на апдейт актора в bind_stalker.script

--// после строки
function actor_binder:update(delta)
--// добавить свой вызов
твой_скрипт.твоя_функция(delta)
  • Согласен 2
 

10.png

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

Ребят, напиши в лс. 
Как зарегистрировать новые анимации НПС? Чтоб сталкер мог их использовать при помощи логики.

  • Согласен 1

svarog2741.gif

 

НС - шлак, солянки - шлак.

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

Выкладываю все накопившиеся скриптовые правки, т.к. времени на доработку всё меньше. Может понадобится кому.

http://rghost.ru/59995539

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

 

Небольшое описание того, что я там накодил и зачем это может понадобиться (вчера времени хватило только на readme, поэтому пишу сейчас).

В архиве лежит папка с правлеными скриптами оригинала ТЧ 1.0006 со скриптами от мода "AI вертолётов" (тоже правлеными).

Изменения:

 

 

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

Скрипты серверных объектов:

Класс гулагов (который в оригинале вынесен в файл xr_gulag) объединён с серверным классом самого smart_terrain.

Переписан механизм выбора смартов и назначения работ.

Хранение npc_info и индексов работ перенесено в серверные объекты классов se_stalker и se_monster.

Хранение информации о логике людей и зверюшек (секция логики, активная секция и т.д.) также перенесено в их серверные объекты. Изменены условия для наполнения "рейдовых" работ.

 

Скрипты клиентских объектов:

В state_mgr полностью вырезана обработка "animstate", вместо которых введена возможность добавлять переходы из одной анимации в другую (минуя into/out анимации).

Можно добавлять параметры at и dt, которыми можно задать произвольное время attach/dettach предметов после начала анимации.

Добавлена возможность ставить непрерывные последовательности из нескольких анимаций для отыгрывания случайных анимаций.

Восстановлены кое-какие старые анимации.

И самое главное - все скриптовые действия обрабатываются отдельным планировщиком, в motivation_action_manager ничего постороннего добавлять нельзя.

move_mgr не нужно обновлять искусственно, для установки целевого пути или вершины уровня достаточно вызвать set_movement или reset.

 

Прочее:

Небольшие изменения task_manager'а. Теперь для заданий на защиту и уничтожения лагеря надо указывать защищаемых или зачищаемых группировок во избежание путаницы.

 

Из дополнительных скриптов (которых нет в оригинале) используется:

- Offline alife, динамические аномалии и выброс от amk

- Обход аномалий (своя реализация)

- Подбор предметов (из билда AMKII)

- Скрипты от мода "AI вертолётов" от Kirag.

Из существенного вроде всё, остальное - правка багов, оптимизация и правки для упрощения отладки.

 

 

Некоторые правки ещё сыроваты, требуют тестирования и доработки. К ним можно отнести:

1) Совместимость механизма обхода аномалий с выбросом - хоть я и везде поставил удаление рестрикторов при уходе game_object в оффлайн, иногда всё же могут проявляться вылеты. Либо я где-то чего-то не доглядел, либо это баг в движке.

2) "Рейдовые" работы и их использование в заданиях на защиту лагеря надо ещё потестировать, правка относительно свежая.

3) Кое-какие восстановленные анимации надо переназначить на другие состояния/слоты анимации, или отключить.

 

Из известных недоработок - вырезана пси-раненность и использование схемы xr_detector. Первое планировалось заменить на полноценную схему поведения, второе убирал для тестов, а вспомнил об этом только после того, как выложил. :)

Вырезано управление переходом online/offline со стороны работ, но это не баг - так и планировалось сделать после добавления amk offline alife. Впрочем, если это для кого-то критично, не сложно вернуть обратно.

 

 

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

Что можно просто взять и перетащить к себе в мод почти без адаптации:

- скрипт для добавления и удаления меток (файл mapspots.script и строки в bind_stalker.script с отсылками к нему)

- файл class_registrator.script - намного упрощает поиск названий серверных и клиентских классов, а также их clsid и конфиговых имён.

- функции check_gvid и validate_accessibility из файла move_mgr

- функции add_call_source_marker и remove_call_source_marker и используемые в них таблицы - для отлавливания зависших вызовов и измерения времени работы вызываемых функций.

Изменено пользователем BFG
  • Спасибо 2
  • Нравится 1
Ссылка на комментарий

Господа присяжные заседатели !

А не может ли кто-нибудь либо кинуть ссылко на статеечку, либо написать собственно эту самую статеечку про схемы, а конкретно вот про такую черную магию:

evid_see_stuff	= 6931
-- evid_near_stuff	= evid_see_stuff + 1
-- evid_see_body	= evid_see_stuff + 1 -- 2
-- evid_position_corrected = evid_see_stuff + 3

actid_reach_item = evid_see_stuff

function add_to_binder( npc, ini, scheme, sect, st )
	local manager = npc:motivation_action_manager()

	local prop_idlecombat = xr_evaluators_id.state_mgr + 3
	local prop_contact = xr_evaluators_id.stohe_meet_base + 1

	manager:add_evaluator( evid_see_stuff, ev_see_stuff( st, "ev_see_stuff" ) )

	action = act_reach_item( "act_reach_item", st )
	action:add_precondition( world_property( stalker_ids.property_alive, true ) )
	action:add_precondition( world_property( stalker_ids.property_enemy, false ) )
	action:add_precondition( world_property( stalker_ids.property_danger, false ) )
	action:add_precondition( world_property( prop_contact, false ) )
	action:add_precondition( world_property( xr_evaluators_id.sidor_wounded_base, false ) )
	action:add_precondition( world_property( blowout_scheme.evid_anomaly, false ) )
	action:add_precondition( world_property( blowout_scheme.evid_blowout, false ) )
	action:add_precondition( world_property( evid_see_stuff, true ) )
	-- action:add_precondition( world_property( evid_near_stuff, false ) )
	action:add_precondition( world_property( prop_idlecombat, true ) )
	-- action:add_effect( world_property( evid_near_stuff, true ) )

	action:add_effect( world_property( evid_see_stuff, false ) )
	manager:add_action( actid_reach_item, action )

	action = manager:action( xr_actions_id.alife )
	action:add_precondition( world_property( evid_see_stuff, false ) )
	-- action = manager:action( stalker_ids.action_danger_planner )
	-- action:add_precondition( world_property( evid_see_stuff, false ) )
end

- ну, это я тут позакомментировал ненужного мне, поскольку переписано со сносом over 2/3 исходного, но собственно вопросы по черной магии:

 

evid_see_stuff = 6931 -- откуда берется сия магическая цифра ?

actid_reach_item = evid_see_stuff -- почему должна быть она же, а не какая другая.

 

local prop_idlecombat = xr_evaluators_id.state_mgr + 3 -- для чего здесь и далее вот это

local prop_contact = xr_evaluators_id.stohe_meet_base + 1 -- и откуда оно опять таки берется.

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

Но а по-русски это все как сказать ?

 

И, опять же, по-русски - почему недостаточно просто

action = manager:action( xr_actions_id.alife )

action:add_precondition( world_property( evid_see_stuff, false ) )

 

Наконец, самое интересное, это вот это магическое сочетание:

action:add_effect( world_property( evid_see_stuff, false ) )

manager:add_action( actid_reach_item, action )

- где add_effect со значением false не понятен даже и интуитивно, хотя вполне нагляден, если и его закомментировать. Ну или в оригинале примерно ту же функцию выполняет эквилибристика с evid_near_stuff.

 

 

Не, если я это сам начну расписывать - то даже и сам же потом не пойму. ;)

А кому-то, глядишь, могла бы и польза выйти. Да и себе бы сегодня день сэкономил на вспоминание "кто на ком стоял", если бы статеечка была.

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

Та самая статья, про которую я где то уже упоминал. Там вроде все тобой спрошенное описано. Там вообще вся скриптовая логика описана :)

ТЧ 1.0004. SAP и Trans mod

github

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

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

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

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

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

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

Войти

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

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

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