Скриптование - Страница 534 - Скрипты / конфиги / движок - 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/
28 minutes ago, Black_Raven_03 said:

relation_registry:set_community_goodwill

Скорее всего вот в этом. Разве relation_registry - это класс и у него есть метод set_community_goodwill?

  • Согласен 1

@dsh, в dialogs.script в НА7 вступление в Долг так же реализовано, потому решил использовать этот же метод для своего экстренно-читерского исправлятора отношений; собственно кусок скрипта:
 

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



-----------------------------------------------------------------------------------
-- Dolg Community
-----------------------------------------------------------------------------------
function actor_in_dolg(actor, npc)
	if db.actor then
		return db.actor:character_community() == "actor_dolg"
	end
	return false
end

function actor_not_in_dolg(actor, npc)
	return not actor_in_dolg(actor, npc)
end

function actor_set_dolg(actor, npc)
	printf("ACTOR NOW IN [DOLG] COMMUNITY")
	if db.actor then
		db.actor:set_character_community("actor_dolg", 0, 0)
		update_info_portions_dolg()

		if not db.actor:has_info("mil_leader_quest2_complete") then
			relation_registry.set_community_goodwill ("freedom", db.actor:id(), -5000)
		elseif relation_registry.community_goodwill("freedom", db.actor:id()) > 0 then
			relation_registry.set_community_goodwill ("freedom", db.actor:id(), 0)
		end
	end
	return true
end

function actor_clear_community(actor, npc)
	printf("ACTOR NOW IN [NEUTRAL] COMMUNITY")
	if db.actor then
		db.actor:set_character_community("actor", 0, 0)
	end
	return true
end

 

 

 

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

AMD Ryzen 5 3600, 32GB DDR4-3200, AFOX GeForce GTX1050Ti и нормально сталкерим в НА5.1, НА7, OGSE-0693, OGSR, НС2016, OLR, OFFLIFE, CoC, LADC, CoP Gunslinger, CoP SGM Gunslinger, ShoC GA, Legend Return, Anomaly, CS OGSM, ОП-2.2 ZC!

Мозг состоит на 80 процентов из жидкости, и мало того, что она тормозная, так многим еще конкретно не долили...@Denikius136
Black_Raven.gif
 

@dsh, или ты меня в двоеточие вместо точки ткнул? тут я мог накосячить ибо ЛУА после Паскаля воспринимается очень хреново...

Всем помогавшим - Спасибо! Нашёл, где накосячил

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

AMD Ryzen 5 3600, 32GB DDR4-3200, AFOX GeForce GTX1050Ti и нормально сталкерим в НА5.1, НА7, OGSE-0693, OGSR, НС2016, OLR, OFFLIFE, CoC, LADC, CoP Gunslinger, CoP SGM Gunslinger, ShoC GA, Legend Return, Anomaly, CS OGSM, ОП-2.2 ZC!

Мозг состоит на 80 процентов из жидкости, и мало того, что она тормозная, так многим еще конкретно не долили...@Denikius136
Black_Raven.gif
 

@Black_Raven_03, а может всё-таки db.actor? Я конечно не силён в lua, как @dsh но чувствую что нужно попробовать добавить

local relation_registry = db.actor

Хотя, могу и ошибаться, пусть мэтр меня поправит, если что.

  • Не согласен 1

 Моя нычкаНычка в арендованном у Опричника холодильнике  

Мы хорошие ребята, жаль патронов маловато:):ukostra:

UriZzz.gif

@UriZzz, неа, просто транслятор ЛУА ругался на двоеточие между relation_registry и методом set_community_goodwill, а там положено быть точке; всё равно спасибо и удаляюсь кодить дальше...

  • Спасибо 1
Скрытый текст

AMD Ryzen 5 3600, 32GB DDR4-3200, AFOX GeForce GTX1050Ti и нормально сталкерим в НА5.1, НА7, OGSE-0693, OGSR, НС2016, OLR, OFFLIFE, CoC, LADC, CoP Gunslinger, CoP SGM Gunslinger, ShoC GA, Legend Return, Anomaly, CS OGSM, ОП-2.2 ZC!

Мозг состоит на 80 процентов из жидкости, и мало того, что она тормозная, так многим еще конкретно не долили...@Denikius136
Black_Raven.gif
 

10 минут назад, Black_Raven_03 сказал:

 

Dell

Да, всё правильно db.actor тут не причем, это уже я тупанул.

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

 Моя нычкаНычка в арендованном у Опричника холодильнике  

Мы хорошие ребята, жаль патронов маловато:):ukostra:

UriZzz.gif

Доброго времени! Прошу помощи!

Возникла идея - скриптово потушить лампу. Распаковав Алл.Спавн нашел у выбранной мною лампы параметр health = 100. Подозреваю, что дав параметру нуль - потушу лампу, хочу проверить. Хочу ковырять её через НетПакеты от Артоса. Вопрос, как мне прочитать нетпакет лампы?

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

[11509]

; cse_abstract properties
section_name = lights_hanging_lamp
name = yan_lamp6
position = 24.0428810119629, -9.33421421051025, -271.800720214844
direction = 9.42477798461914, 9.42477798461914, -7.85398149490356
version = 118
script_version = 6
spawn_id = 3892

; cse_alife_object properties
game_vertex_id = 1438
level_vertex_id = 132308
object_flags = 0xffffffaa
custom_data = <<END
[collide]
ignore_static
END

; cse_visual properties
visual_name = physics\light\new_light\light_white_glass

; cse_ph_skeleton properties

; cse_alife_object_hanging_lamp properties
main_color = 0xffffffff
main_brightness = 1
main_color_animator = light\light_omni_white_idle
main_range = 8
light_flags = 0x3a
lamp_fixed_bones = link
health = 100
main_virtual_size = 0.1
ambient_radius = 2.5
ambient_power = 0.60000002
main_bone = bone_lamp
main_cone_angle = 2.0943952
glow_radius = 0.69999999
ambient_bone = bone_omni

 

Пробую так:

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

function lampa()
local sobj = alife():object(3892)
local pk = get_netpk(sobj)
if pk and pk:isOk() then
	local data = pk:get()
		amk.send_tip(tostring (data.name), "проверка имени", 1, 15, "common_channel")
    	amk.send_tip(tostring (data.health), "проверка жизни", 1, 15, "common_channel")
--		data.health = 0
--		pk:set(data)
end	
end

 

Итого у меня возвращается параметр health = 100

Но не возвращается data.name равно nil. Будто я не лампы нет-пакет вскрыл, а чего-то другого.

Вопрос - правильно ли я определяю ID лампы? Если нет, то как правильно?

Второй вопрос: возможно ли в принципе потушить лампу через данный параметр и через нет-пакет?

Здрасьте.

 

Равнозначны ли указанные ниже способы удаления переменной из pstor?

xr_logic.pstor_store(db.actor, name, nil)

db.storage[db.actor:id()].pstor[name] = nil

Мини-моды: ТЧ ЧН ЗП

Шпаргалка

@Norman Eisenherz

А к чему этот вопрос? Ты же код видишь, так вывод сам собой напрашивается.

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

Например, что-то вроде:  yes = loc_is_passed("l01_escape" ) 

11 минут назад, phalcor сказал:

ли простой метод определить

Вроде бы способ с инфопоршеном и так простой. Если был, то получил защитный инфо и больше не получишь))

  • Спасибо 1

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

Прошу помощи :(

Ест скрипт, убивающий всех ворон (или только на текущей локации?)

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

function kill_crow()
	local lname = level.name()
--			amk.send_tip("прошло", "прошло", 1, 15, "common_channel")
	for id, sobj in alife():objects() do
		local crow = level.object_by_id(id)
		if crow and crow:section() == "m_crow"  then 
			local hit = hit()
				hit.direction = crow:direction()
				hit.impulse = 1000
				hit.draftsman = crow
				hit.power = 1000
				hit.type = hit.strike
			crow:hit(hit)
			local sobj = alife():object(id)
			
				alife():release(crow, true)
			
			ogse_st_mgr.start_gtimer(nil, math.random(150, 300), "ogse.release_crow", id)
		end
	end
end

 

Вопрос: А как мне убить всех ворон, но КРОМЕ текущей локации?

А то на голову сыпятся, а нужно от них избавиться

53 минуты назад, _Sk8_AsTeR_ сказал:

а нужно от них избавиться

А просто удалить? Что б не сыпались.

Изменено пользователем mole venomous
  • Согласен 1

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

30.09.2020 в 21:04, HellRatz сказал:

Но все же советую делать такие вещи через СДК, подобные костыли — уровень 2007 года.

Хмм, а почему?

Какай в данном случае, применяется критерий для разделения "костыль / не костыль" - хотелось бы понять.

Мод, где не бывает одинаковых путей - Судьба Зоны. (Лучшее, что у меня получилось на 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.

7 часов назад, Zander_driver сказал:

а почему?

Зачем плодить сущности? Создавать ненужные секции, прописывать все в скрипты, вызывать спавн, когда это делается в разы проще и удобнее в СДК? Как минимум подгонка по координатам чего стоит, любая настройка делается в пару кликов. А перекомпиляция спавна занимает от силы пол минуты. Конечно можно вспомнить и Историю Прибоя, где даже здания спавнили, можно и так делать. Но для чего, когда есть редактор карт? Со спавном — аналогично.
ЗЫ: конечно, местами скриптовый спавн удобнее. Но вряд ли, если речь идет про физ. объекты, для которых нужно еще координаты бегать снимать и получать баги с проваливанием под террейн и прочие "развлечения".

  • Спасибо 1
Только что, HellRatz сказал:

Создавать ненужные секции

Вопрос был не об этом.

Только что, HellRatz сказал:

проще и удобнее в СДК?

Ну сделай рандомный спавн в СДК. Чтобы объект при каждом запуске игры спавнился в разных местах.

 

Только что, HellRatz сказал:

Но для чего, когда есть редактор карт?

Пардон, у меня на этом месте просто фейспалм :facepalm:

Для того чтобы местонахождение предмета, НЕ было прибито гвоздями на века, например.

Только что, HellRatz сказал:

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

Не нужно сочинять. Вопрос опять же был не об этом, в 2020 так никто не делает.

 

В общем я делаю занятные выводы... :rolleyes:

1) Что считать костылем, и что таковым НЕ считать, каждый мододел для себя определяет самостоятельно и субъективно. На основе собственных критериев, которые у разных людей могут быть разными, и даже противоположными и взаимоисключающими.

2) По всей видимости, распространенным мнением является, спавн всего и вся через СДК, как следствие - все прибито гвоздями к своим местам, Зона статична и неизменна. Никаких неожиданностей, никакого рандома во веки веков. Такой подход к моддингу полагается как "правильный". А все что делает спавн не-прибитым-гвоздями, несет в игру какие-то непредсказуемости, автоматом расценивается как костыль. Не зависимо от способа технической реализации.

Ну что ж, теперь я знаю, почему мой мод называют состоящим из костылей. Стало быть, из костылей он и будет, в такой трактовке. Теперь я несколько лучше понимаю, суть расхождения взглядов, моих/чужих. Спасибо за ответ.

Изменено пользователем Zander_driver
  • Согласен 3

Мод, где не бывает одинаковых путей - Судьба Зоны. (Лучшее, что у меня получилось на 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.

51 минуту назад, Zander_driver сказал:

Для того чтобы местонахождение предмета, НЕ было прибито гвоздями на века, например.

Ну, если есть необходимость перемещать здания/деревья по карте — то да, конечно. Прочитай кусок про Прибой Стори еще раз.

51 минуту назад, Zander_driver сказал:

Ну сделай рандомный спавн в СДК.

При чем тут он? Человек вроде хотел ящик заспавнить скриптами, а не написать систему, как их раскидать рандомно по карте. Суть вопроса ни к чему переворачивать. Физ. объекты, заспавненные через тонны кода — ничто иное как костылище 13-летней давности, когда в народе СДК был непостижимым (а когда-то и недоступным) инструментом. Вот когда будет вопрос про рандомный спавн, тогда и стоит его упоминать. Это совсем другие задачи и методы решения.

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

@HellRatz, "Ну, если есть необходимость перемещать здания/деревья по карте — то да, конечно" - Отличная идея для части моего мода, я что-то протупил с этим моментом. Мне требуется сделать две локации по принципу "параллельных миров" - что на них находится "до и после" определённого события. Возиться со вторыми экземплярами локаций для этой цели не хотелось бы, а вот сказанное тобой как раз мне подойдёт. Благодарю!

Только один вопрос - спавнить статические объекты можно так же, как и динамику, или нужно иначе? Я просто ещё не пробовал такого делать и, соответственно, не интересовался.

Изменено пользователем mdm64
1 час назад, Zander_driver сказал:

рандомный спавн

Ну, это не костыль, тут ясно что в СДК это не реализуешь. Тут как раз таки скриптовой метод. Вот если статично расположенный обжект, как тот же ящик, то тут я согласен - лучше СДК и не нагружать кэллбэки всякими глупостями.

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

Конечно можно вспомнить и Историю Прибоя, где даже здания спавнили, можно и так делать

Серьезно!? Здание как дин.обжект!?:shok2:

 Моя нычкаНычка в арендованном у Опричника холодильнике  

Мы хорошие ребята, жаль патронов маловато:):ukostra:

UriZzz.gif

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

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

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

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

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

Войти

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

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

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