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

Внимание. На форуме проводятся технические работы с боковым меню.

_Val_ _Val_

Скриптование


Svoboда

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

@abr

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

 

Попробуй так:

 

 

Нужно изменить функцию set_weapon_drop_condition следующим образом:

local community_condition = {
	["stalker"]  = {min = 0.1, max = 0.9},
	["dolg"]     = {min = 0.1, max = 0.9},
	["freedom"]  = {min = 0.1, max = 0.9},
	["bandit"]   = {min = 0.1, max = 0.9},
	["army"]     = {min = 0.1, max = 0.9},
	["zombied"]  = {min = 0.1, max = 0.9},
	["ecolog"]   = {min = 0.1, max = 0.9},
	["killer"]   = {min = 0.1, max = 0.9},
	["monolith"] = {min = 0.1, max = 0.9} }

function set_weapon_drop_condition(item, community)
	local condition  = math.random(community_condition[community].min, community_condition[community].max)
	item:set_condition(condition)	
end

А после изменить вызов этой функции:

	if isWeapon(item) and not(get_clsid(item)==clsid.wpn_grenade_rgd5_s or get_clsid(item)==clsid.wpn_grenade_f1_s) then
		set_weapon_drop_condition(item, character_community(npc))
		return
	end

 
Написано на скорую руку, так что могут быть ошибки.

 

S.T.A.L.K.E.R. CoP Objects  >200 шт  (upd 21.05.26) - Скачать  (Яндекс-диск)

Поделиться этим сообщением


Ссылка на сообщение

Также меня беспокоит эта секция, не нужно ли её менять тоже?

 

Эти строки закоментированы.

 

Ошибка возникает потому что параметр community=nil.

Нужно выяснить почему или обработать это исключение, например так:

 

 

function set_weapon_drop_condition(item, community)
	if community == nil then community = "stalker" end
	local condition  = math.random(community_condition[community].min, community_condition[community].max)
	item:set_condition(condition)	
end

 

 

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

S.T.A.L.K.E.R. CoP Objects  >200 шт  (upd 21.05.26) - Скачать  (Яндекс-диск)

Поделиться этим сообщением


Ссылка на сообщение

Да, зависает вот лог:

 

Проверил, работает.

Вот окончательный вариант:

 

 

local community_condition = {
	["stalker"]  = {min = 10, max = 90},
	["dolg"]     = {min = 10, max = 90},
	["freedom"]  = {min = 10, max = 90},
	["bandit"]   = {min = 10, max = 90},
	["army"]     = {min = 10, max = 90},
	["zombied"]  = {min = 10, max = 90},
	["ecolog"]   = {min = 10, max = 90},
	["killer"]   = {min = 10, max = 90},
	["monolith"] = {min = 10, max = 90} }

function set_weapon_drop_condition(item, community)
	if community == nil then community = "stalker" end
	local condition  = math.random(community_condition[community].min, community_condition[community].max) / 100
	item:set_condition(condition)	
end 

 

 

S.T.A.L.K.E.R. CoP Objects  >200 шт  (upd 21.05.26) - Скачать  (Яндекс-диск)

Поделиться этим сообщением


Ссылка на сообщение

А что совет Bak'а в другой теме не помог?

 

попробуй менять число 400 вот в этих строках cf = cf-(delta/400) cf = cf+(delta/400)

 

S.T.A.L.K.E.R. CoP Objects  >200 шт  (upd 21.05.26) - Скачать  (Яндекс-диск)

Поделиться этим сообщением


Ссылка на сообщение

Не раз уже говорил, и всегда недоумевал от столь бесполезного кода

 

Я придерживаюсь другого мнения.

Параметр community может принимать ряд заранее известных строковых значений, которые корректно обрабатываются функцией.

Если он не определен, т.е. nil, в данном случае, наверное, это допустимо, и я определяю его сам.

А если он вдруг благодаря “Аркелийским лучам смерти” станет равен false...

То я просто обязан словить вылет и разобраться с этими Аркелийцами.

S.T.A.L.K.E.R. CoP Objects  >200 шт  (upd 21.05.26) - Скачать  (Яндекс-диск)

Поделиться этим сообщением


Ссылка на сообщение
Благодаря этой фразе:

Ну, во-первых, он может принимать "ряд" любых типов значений lua кроме nil.

стала понятна причина нашего недопонимания - мы говорим о разных вещах.
 
Со своей точки зрения ты абсолютно прав, спорить не буду. Я расскажу про свой подход, который, надеюсь, тоже имеет право на существование.
 
В Lua существует большое множество A всех типов и их значений.
Поскольку этот язык имеет динамическую типизацию, любая переменная действительно может иметь любой тип и значение из множества A. А поскольку параметр функции является обычной переменной для него это тоже в полной мере справедливо.
 
И вот тут начинается самое интересное. Для параметра функции из всего множества A я выделяю два подмножества:
это B - все типы и значения, которые функция может принимать
и C - все типы и значения, которые могут быть переданы в функцию.
Для меня B и C не одно и то же.
 
Подмножество B определяется назначением функции, той задачей, которую она выполняет, тем, зачем вообще этой функции нужен параметр.
Подмножество C определяется тем, как и где функция вызывается. Функция может быть локальной, глобальной, методом класса, перегруженной и т.д. и т.п. В каждом месте кода, где происходит вызов функции, подмножество C дополняется новыми типами и значениями.
Теперь есть два возможных варианта:
1) B содержит или равно C. В этом случае в функции пишется только обработка значений. Ни в чем не сомневаемся, ничего не проверяем, просто используем параметр и все.
2) B меньше C (т.е. C содержит и НЕ равно B). В этом случае в функции сначала пишется проверка значений, при которой множество C приводится к B, а уже после этого пишется обработка значений.
 
В рассматриваемом примере функция вызывается только в одном месте:
set_weapon_drop_condition(item, character_community(npc))

Значит для параметра community множество C определяется возвращаемым значением функции character_community(), а это точно строки и не абы какие, а те, что используются в игре (можно посмотреть в [communities_relations]),а также неопределенное значение nil (куда же без него). И поскольку для данной функции C равно B, в ней нет никаких проверок, только обработка значений.

Поэтому такой код кажется "нелепым":
if community == nil then community = "stalker" end

Но это НЕ проверка, а ОБРАБОТКА одного из допустимых для функции значений.

 
Кстати мне очень интересно, в каких случаях character_community() возвращает nil? Неужели бываю NPC без community, или он в offline'е коньки отбросил?
  • Полезно 1

S.T.A.L.K.E.R. CoP Objects  >200 шт  (upd 21.05.26) - Скачать  (Яндекс-диск)

Поделиться этим сообщением


Ссылка на сообщение

@TIGER_VLAD,

Я тоже пытался реализовать функцию полета через db.actor:set_actor_position() и получил такой же результат как у Вас.

Скорее всего, это происходит из-за того что функция set_actor_position() корректирует передаваемые ей координаты на коллизию с объектами, что при малых значениях delta и дает наблюдаемый нами эффект.

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

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

S.T.A.L.K.E.R. CoP Objects  >200 шт  (upd 21.05.26) - Скачать  (Яндекс-диск)

Поделиться этим сообщением


Ссылка на сообщение

@Dmitriy88kk

Если делать без привязки к реально надетой на NPC броне, то проще прописать нужные броники в death_items_by_communities.ltx.

  • Нравится 1

S.T.A.L.K.E.R. CoP Objects  >200 шт  (upd 21.05.26) - Скачать  (Яндекс-диск)

Поделиться этим сообщением


Ссылка на сообщение

@Dmitriy88kk

Попробуй следующий код:

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

В начале файла death_manager.script после всех локальных таблиц (т.е. перед функцией init_drop_settings()) нужно добавить таблицу:


local outfit_from_visual = {
	["actors\\stalker_bandit\\stalker_bandit_3"]					= "novice_outfit",
	["actors\\stalker_bandit\\stalker_bandit_3_face_1"]				= "novice_outfit",
	["actors\\stalker_bandit\\stalker_bandit_3_face_2"]				= "novice_outfit",
	["actors\\stalker_bandit\\stalker_bandit_3_face_3"]				= "novice_outfit",
	["actors\\stalker_bandit\\stalker_bandit_3_mask"]				= "novice_outfit",
	["actors\\stalker_bandit\\stalker_bandit_4"]					= "novice_outfit",
	["actors\\stalker_dolg\\stalker_dolg_1_face_1"]					= "novice_outfit",
	["actors\\stalker_dolg\\stalker_dolg_2_face_1"]					= "novice_outfit",
	["actors\\stalker_dolg\\stalker_dolg_3_face_1"]					= "novice_outfit",
	["actors\\stalker_freedom\\stalker_freedom_1_face_1"]			= "novice_outfit",
	["actors\\stalker_freedom\\stalker_freedom_2_face_1"]			= "novice_outfit",
	["actors\\stalker_freedom\\stalker_freedom_2_face_2"]			= "novice_outfit",
	["actors\\stalker_freedom\\stalker_freedom_3"]					= "novice_outfit",
	["actors\\stalker_freedom\\stalker_freedom_3_face_1"]			= "novice_outfit",
	["actors\\stalker_hero\\stalker_hero_1"]						= "novice_outfit",
	["actors\\stalker_hero\\stalker_hero_cs_heavy"]					= "novice_outfit",
	["actors\\stalker_hero\\stalker_hero_dolg_1"]					= "novice_outfit",
	["actors\\stalker_hero\\stalker_hero_dolg_2"]					= "novice_outfit",
	["actors\\stalker_hero\\stalker_hero_exo"]						= "novice_outfit",
	["actors\\stalker_hero\\stalker_hero_freedom_1"]				= "novice_outfit",
	["actors\\stalker_hero\\stalker_hero_freedom_2"]				= "novice_outfit",
	["actors\\stalker_hero\\stalker_hero_military"]					= "novice_outfit",
	["actors\\stalker_hero\\stalker_hero_neutral_nauchniy"]			= "novice_outfit",
	["actors\\stalker_hero\\stalker_hero_novice_1"]					= "novice_outfit",
	["actors\\stalker_hero\\stalker_hero_specops"]					= "novice_outfit",
	["actors\\stalker_hero\\stalker_hero_stalker_1"]				= "novice_outfit",
	["actors\\stalker_monolith\\stalker_monolith_1_face_1"]			= "novice_outfit",
	["actors\\stalker_nebo\\stalker_nebo_2_face_1"]					= "novice_outfit",
	["actors\\stalker_neutral\\stalker_neutral_1_face_1"]			= "novice_outfit",
	["actors\\stalker_neutral\\stalker_neutral_1_face_2"]			= "novice_outfit",
	["actors\\stalker_neutral\\stalker_neutral_1_face_3"]			= "novice_outfit",
	["actors\\stalker_neutral\\stalker_neutral_2_face_1"]			= "novice_outfit",
	["actors\\stalker_neutral\\stalker_neutral_2_face_2"]			= "novice_outfit",
	["actors\\stalker_neutral\\stalker_neutral_2_face_3"]			= "novice_outfit",
	["actors\\stalker_neutral\\stalker_neutral_2_face_4"]			= "novice_outfit",
	["actors\\stalker_neutral\\stalker_neutral_2_face_5"]			= "novice_outfit",
	["actors\\stalker_neutral\\stalker_neutral_2_face_6"]			= "novice_outfit",
	["actors\\stalker_neutral\\stalker_neutral_2_face_7"]			= "novice_outfit",
	["actors\\stalker_neutral\\stalker_neutral_3_face_1"]			= "novice_outfit",
	["actors\\stalker_neutral\\stalker_neutral_nauchniy_face_1"]	= "novice_outfit",
	["actors\\stalker_neutral\\stalker_neutral_nauchniy_face_2"]	= "novice_outfit",
	["actors\\stalker_neutral\\stalker_neutral_nauchniy_face_3"]	= "novice_outfit",
	["actors\\stalker_soldier\\stalker_soldier_1"]					= "novice_outfit",
	["actors\\stalker_soldier\\stalker_soldier_1_face_1"]			= "novice_outfit",
	["actors\\stalker_soldier\\stalker_solider_2"]					= "novice_outfit",
	["actors\\stalker_soldier\\stalker_solider_2_face_1"]			= "novice_outfit",
	["actors\\stalker_soldier\\stalker_solider_3_face_1"]			= "novice_outfit",
	["actors\\stalker_soldier\\stalker_solider_ecolog_face_1"]		= "novice_outfit",
	["actors\\stalker_ucheniy\\stalker_ucheniy_1_face_1"]			= "novice_outfit",
	["actors\\stalker_ucheniy\\stalker_ucheniy_1_face_2"]			= "novice_outfit",
	["actors\\stalker_zombied\\stalker_zombied_1"]					= "novice_outfit",
	["actors\\stalker_zombied\\stalker_zombied_3"]					= "novice_outfit",
	["actors\\stalker_bandit\\stalker_bandit_1"]					= "novice_outfit",
	["actors\\stalker_bandit\\stalker_bandit_2"]					= "novice_outfit",
	["actors\\stalker_dolg\\stalker_dolg_1"]						= "novice_outfit",
	["actors\\stalker_dolg\\stalker_dolg_2"]						= "novice_outfit",
	["actors\\stalker_dolg\\stalker_dolg_2_face_2"]					= "novice_outfit",
	["actors\\stalker_dolg\\stalker_dolg_2_mask"]					= "novice_outfit",
	["actors\\stalker_dolg\\stalker_dolg_3"]						= "novice_outfit",
	["actors\\stalker_dolg\\stalker_dolg_4"]						= "novice_outfit",
	["actors\\stalker_freedom\\stalker_freedom_1"]					= "novice_outfit",
	["actors\\stalker_freedom\\stalker_freedom_2"]					= "novice_outfit",
	["actors\\stalker_freedom\\stalker_freedom_2_mask"]				= "novice_outfit",
	["actors\\stalker_freedom\\stalker_freedom_4"]					= "novice_outfit",
	["actors\\stalker_hero\\stalker_hero_stc_strelok"]				= "novice_outfit",
	["actors\\stalker_lesnik\\stalker_lesnik_1"]					= "novice_outfit",
	["actors\\stalker_merc\\stalker_merc_2"]						= "novice_outfit",
	["actors\\stalker_merc\\stalker_merc_4"]						= "novice_outfit",
	["actors\\stalker_monolith\\stalker_monolith_1"]				= "novice_outfit",
	["actors\\stalker_monolith\\stalker_monolith_2"]				= "novice_outfit",
	["actors\\stalker_monolith\\stalker_monolith_3"]				= "novice_outfit",
	["actors\\stalker_monolith\\stalker_monolith_4"]				= "novice_outfit",
	["actors\\stalker_nebo\\stalker_nebo_1"]						= "novice_outfit",
	["actors\\stalker_nebo\\stalker_nebo_2"]						= "novice_outfit",
	["actors\\stalker_nebo\\stalker_nebo_2_face_2"]					= "novice_outfit",
	["actors\\stalker_nebo\\stalker_nebo_2_face_3"]					= "novice_outfit",
	["actors\\stalker_nebo\\stalker_nebo_2_face_4"]					= "novice_outfit",
	["actors\\stalker_nebo\\stalker_nebo_2_mask"]					= "novice_outfit",
	["actors\\stalker_nebo\\stalker_nebo_3"]						= "novice_outfit",
	["actors\\stalker_nebo_2_face_1_pn_hm"]							= "novice_outfit",
	["actors\\stalker_nebo_2_face_hm"]								= "novice_outfit",
	["actors\\stalker_nebo_2_face_pn"]								= "novice_outfit",
	["actors\\stalker_neutral\\stalker_neutral_1"]					= "novice_outfit",
	["actors\\stalker_neutral\\stalker_neutral_2"]					= "novice_outfit",
	["actors\\stalker_neutral\\stalker_neutral_2_mask"]				= "novice_outfit",
	["actors\\stalker_neutral\\stalker_neutral_3"]					= "novice_outfit",
	["actors\\stalker_neutral\\stalker_neutral_4"]					= "novice_outfit",
	["actors\\stalker_neutral\\stalker_neutral_nauchniy"]			= "novice_outfit",
	["actors\\stalker_soldier\\stalker_ecolog_military"]			= "novice_outfit",
	["actors\\stalker_soldier\\stalker_soldier_2"]					= "novice_outfit",
	["actors\\stalker_soldier\\stalker_soldier_2_face_1"]			= "novice_outfit",
	["actors\\stalker_soldier\\stalker_soldier_3"]					= "novice_outfit",
	["actors\\stalker_soldier\\stalker_soldier_3_face_1"]			= "novice_outfit",
	["actors\\stalker_soldier\\stalker_soldier_4"]					= "novice_outfit",
	["actors\\stalker_soldier\\stalker_soldier_ecolog_face_1"]		= "novice_outfit",
	["actors\\stalker_trader\\stalker_trader_1"]					= "novice_outfit",
	["actors\\stalker_ucheniy\\stalker_ucheniy_1"]					= "novice_outfit",
	["actors\\stalker_zombied\\stalker_zombied_2"]					= "novice_outfit",
	["actors\\stalker_zombied\\stalker_zombied_4"]					= "novice_outfit"
}

только броники нужные прописать.

 

Далее в конце функции drop_manager:create_release_item() добавить код:


    local outfit = alife():create(outfit_from_visual[self.npc:get_visual_name()],
								  self.npc:position(),
								  self.npc:level_vertex_id(),
								  self.npc:game_vertex_id(),
								  self.npc:id())
	level.client_spawn_manager():add(outfit.id, 0, function (id,obj) obj:set_condition((math.random(40)+40)/100) end)

В принципе все работает, только на счет способа вызвать set_condition() я не уверен, подсмотрел здесь на форуме. 

 

S.T.A.L.K.E.R. CoP Objects  >200 шт  (upd 21.05.26) - Скачать  (Яндекс-диск)

Поделиться этим сообщением


Ссылка на сообщение

@BossBoroda

Если строка задается непосредственно в Lua скрипте, то нужно писать так:

news_manager.send_tip(db.actor, "Привет\\nнегры", 2, "default", 6000)

 

S.T.A.L.K.E.R. CoP Objects  >200 шт  (upd 21.05.26) - Скачать  (Яндекс-диск)

Поделиться этим сообщением


Ссылка на сообщение

@BossBoroda

В XML файле описывается строка:

<string id="st_test">
	<text>Привет\nнегры.</text>
</string>

А в скрипте пишется:

news_manager.send_tip(db.actor, "st_test", 2, "default", 6000)

 

S.T.A.L.K.E.R. CoP Objects  >200 шт  (upd 21.05.26) - Скачать  (Яндекс-диск)

Поделиться этим сообщением


Ссылка на сообщение

@Space.Marine 

Мне кажется слот проверять совершенно не нужно. Попробуй в варианте от @Graff46 оставить в условии только наличие итема в таблице:

if explosive_weapons[section] ~= nil then

 

  • Спасибо 1

S.T.A.L.K.E.R. CoP Objects  >200 шт  (upd 21.05.26) - Скачать  (Яндекс-диск)

Поделиться этим сообщением


Ссылка на сообщение
13 часов назад, power-cat сказал:

В чём может быть причина?

 

В xr_logic.script перед строкой 943 впиши следующий код:

if src == nil then
	abort_syntax_error_in_cond(npc, section, field)
end

Будет понятно какой конфиг вызывает вылет.

  • Нравится 1

S.T.A.L.K.E.R. CoP Objects  >200 шт  (upd 21.05.26) - Скачать  (Яндекс-диск)

Поделиться этим сообщением


Ссылка на сообщение

@power-cat 

Странно, что в лог не выводится имя секции...

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

local fi = io.open("game_log.lxt", "a")
if fi ~= nil then 
	fi:write(string.format("object '%s', section '%s', field '%s' \n", tostring(npc and npc:name()), tostring(section), tostring(field)))
	fi:close()
end

В последней строчке будет указана проблемная секция.

  • Полезно 1

S.T.A.L.K.E.R. CoP Objects  >200 шт  (upd 21.05.26) - Скачать  (Яндекс-диск)

Поделиться этим сообщением


Ссылка на сообщение
1 час назад, Metro_Rus сказал:

всегда выдает только первый предмет

Break прерывает цикл j.

 

1 час назад, Metro_Rus сказал:

нужно, чтобы он выдавал случайно

local rnd = math.random(1, #esc_b2_give_random_table[i])
dialogs.relocate_item_section_to_actor(first_speaker, second_speaker, esc_b2_give_random_table[i][rnd].item[1])
Изменено пользователем WinCap
  • Спасибо 1

S.T.A.L.K.E.R. CoP Objects  >200 шт  (upd 21.05.26) - Скачать  (Яндекс-диск)

Поделиться этим сообщением


Ссылка на сообщение

@Egor4ikModMaker

function andrew_at_map()
	local obj = alife():object("es_andrew")
	if obj then
		level.map_add_object_spot(obj.id, "green_location", "Андрюха")
	end
end

 

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

S.T.A.L.K.E.R. CoP Objects  >200 шт  (upd 21.05.26) - Скачать  (Яндекс-диск)

Поделиться этим сообщением


Ссылка на сообщение

@buffy, на первой итерации smart_terrain.exclusives[name] == nil, поэтому сработает or 0, а на второй итерации smart_terrain.exclusives[name] уже будет равен 1. На третей 2 т.д.

S.T.A.L.K.E.R. CoP Objects  >200 шт  (upd 21.05.26) - Скачать  (Яндекс-диск)

Поделиться этим сообщением


Ссылка на сообщение

@vampirnik77, Что бы код стал равносильным нужно второй вариант изменить на:

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

local IndTbl = {}
	IndTbl[0] = "00:00:00"
	IndTbl[1] = xr_statistic.actor_statistic.surges
	IndTbl[2] = xr_statistic.actor_statistic.completed_quests
	IndTbl[3] = xr_statistic.actor_statistic.killed_monsters
	IndTbl[4] = xr_statistic.actor_statistic.killed_stalkers
	IndTbl[5] = xr_statistic.actor_statistic.artefacts_founded
	IndTbl[6] = xr_statistic.actor_statistic.founded_secrets

function get_stat(index) -- index= int        return string
	if IndTbl[index] then
		return tostring(IndTbl[index])
	end
end

 

Как мне кажется, второй вариант не только "читабельнее", но и быстрее.

  • Спасибо 1
  • Сомнительно 1

S.T.A.L.K.E.R. CoP Objects  >200 шт  (upd 21.05.26) - Скачать  (Яндекс-диск)

Поделиться этим сообщением


Ссылка на сообщение

@Norman Eisenherz, вот ещё один стандартный вариант:

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

local array = {
	["a"] = true,
	["b"] = true,
	["c"] = true,
	["d"] = true}

if array["a"] then
    -- строка в массиве есть
else
    -- строки в массиве нет
end

 

 

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

S.T.A.L.K.E.R. CoP Objects  >200 шт  (upd 21.05.26) - Скачать  (Яндекс-диск)

Поделиться этим сообщением


Ссылка на сообщение

@Norman Eisenherz, 

-- проверка 2: тип брони для другого/этого мастера
        if not armor_kuz[sect] then

S.T.A.L.K.E.R. CoP Objects  >200 шт  (upd 21.05.26) - Скачать  (Яндекс-диск)

Поделиться этим сообщением


Ссылка на сообщение
  • Недавно просматривали   0 пользователей

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