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

СТАЛКЕР CS: Final stroke 0.9


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

 

 

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

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

Свои работы и совместные проекты: ИнструментOGSM CSFinal StrokeHARDWARMOD

Полезное: модули АртосаXML парсер

А разве трупы убираются не при переходе на другую локу? Что то я запамятовал...

При переходе убираются трупы мутантов, оружие, а также могут убираться трупы некоторых квестовых НПС.

Обычные же НПС при смерти помещаются в специальную сохраняемую таблицу. Затем, при смерти следующих НПС, идёт перебор этой таблицы, и если время, прошедшее с момента смерти записанного НПС, превышает определённую величину, тогда удаляется этот старый труп.

Так вот, можно добавить дополнительную проверку, чтобы такое удаление не происходило в то время, как открыто любое скриптовое окно.

К сожалению, я не знаю способа проверить принадлежность открытого инвентаря конкретному объекту. Поэтому только так.

Сделать?

Свои работы и совместные проекты: ИнструментOGSM CSFinal StrokeHARDWARMOD

Полезное: модули АртосаXML парсер

 

 

Сделать?

Думаю, что надо попробовать. Лишним не будет.

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

                                           С.Я. Маршак

https://yadi.sk/d/pqhjUPmsf35zc

Заодно слегка оптимизировал чистильщик OGSM.

 

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

Вторая задача - проверить отсутствие вылета во время уборки трупа, в инвентаре которого шарим. Но это сложнее поймать, так что как повезёт. В качестве условия можно принять то, что период «состаривания» трупа НПС в скрипте задан равным 15 минутам реального времени. Вот от этого можно и плясать.

Свои работы и совместные проекты: ИнструментOGSM CSFinal StrokeHARDWARMOD

Полезное: модули АртосаXML парсер

@Kirgudu, пойду проверять. По результату отпишусь.

Спасибо.

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

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

                                           С.Я. Маршак

Kirgudu, и это нормально, так и надо? В смысле "^" , что это означает то, и зачем оно?

 

---------------------------- Copyright 2010-2011 Minister -----------------------------
---------------- “борщик бесхозного оружиЯ и залежалых трупов мутантов ----------------
------------------------------- Last edit: 04.03.2015 ---------------------------------

function clean()
local actor_loc = game_graph():vertex(alife():actor().m_game_vertex_id):level_id()
for i = 1, 65535 do
local obj = alife():object(i)
if obj then
local obj_loc = game_graph():vertex(obj.m_game_vertex_id):level_id()
if obj_loc ~= actor_loc then
-- if ((IsMonster(obj) and obj.alive and not obj:alive()) or
if (isWeapon(obj) and obj.parent_id == 65535 and try_to_release(obj))
or (IsStalker(obj) and try_to_release_special_npc(obj))
then
ogsm.dbglog("ogsm_cleaner_release_"..obj:name())
alife():release(obj, true)
end
end
end
end
end

local holy_objects = {
"^wpn_desert_eagle",
"^wpn_fn2000",
"^wpn_aps",
"^wpn_gsh18",
"^wpn_tt33",
"^wpn_fn57",
"^wpn_akm",
"^wpn_rpk",
"^wpn_ak101",
"^wpn_ak108",
"^wpn_ump45",
"^wpn_sig550sniper",
"^wpn_p90",
"^mar_wpn_mp5",
"^mar_wpn_ak74",
"^mar_wpn_ak74u",
"^mar_wpn_ak74u_0000",
"^mar_wpn_ak74u_0001",
"^mar_boar_weak",
"^mar_boar_strong",
"^mar_boar_weak_0000",
"^mar_boar_weak_0001",
"^mar_boar_weak_0002",
"^mar_wpn_vintorez",
"^gar_dog_normal_messenger_dead_1",
"^gar_dog_normal_messenger_dead_2",
"^gar_dog_normal_messenger_dead_3",
"^gar_dog_normal_messenger_dead_4",
"^gar_wpn_pm",
"^esc_wpn_ak74u",
"^esc_grenade_rgd5",
"^esc_grenade_rgd5_0000",
"^esc_grenade_rgd5_0001",
"^esc_grenade_rgd5_0002",
"^esc_grenade_rgd5_0003",
"^esc_dog_normal",
"^esc_dog_normal_0000",
"^esc_dog_normal_0001",
"^esc_dog_weak",
"^esc_dog_weak_0000",
"^esc_dog_strong",
"^esc_dog_strong_0000",
"^esc_wpn_wincheaster1300",
"^esc_grenade_rgd5_0004",
"^esc_wpn_fort",
"^esc_medkit",
"^agr_dog_strong",
"^agr_dog_strong_0000",
"^agr_dog_normal",
"^agr_dog_weak",
"^agr_dog_strong_0001",
"^agr_dog_weak_0000",
"^agr_dog_strong_0002",
"^agr_dog_strong_0003",
"^agr_dog_strong_0004",
"^agr_dog_normal_0000",
"^agr_dog_weak_0001",
"^agr_dog_normal_0001",
"^agr_dog_strong_0005",
"^agr_dog_normal_0002",
"^agr_dog_weak_0002",
"^agr_dog_weak_0003",
"^agr_bloodsucker_normal_0000",
"^agr_dog_normal_0003",
"^agr_dog_normal_0004",
"^agr_dog_strong_0007",
"^agr_dog_strong_0008",
"^agr_dog_weak_0004",
"^agr_dog_weak_0005",
"^agr_dog_normal_0005",
"^agr_tushkano_normal",
"^agr_tushkano_normal_0000",
"^agr_tushkano_normal_0001",
"^agr_tushkano_normal_0002",
"^agr_tushkano_normal_0004",
"^agr_tushkano_normal_0006",
"^agr_tushkano_normal_0007",
"^agr_wpn_walther",
"^agr_grenade_rgd5",
"^mil_bloodsucker_strong",
"^mil_wpn_ak74",
"^mil_wpn_ak74_0000",
"^mil_wpn_ak74_0001",
"^mil_wpn_ak74_0002",
"^mil_grenade_f1",
"^mil_grenade_f1_0000",
"^mil_grenade_f1_0001",
"^mil_wpn_abakan",
"^mil_wpn_abakan_0000",
"^mil_wpn_abakan_0001",
"^mil_wpn_abakan_0002",
"^red_wpn_rg%-6",
"^lim_wpn_rg%-6"
}

function try_to_release(obj)
local obj_name = obj:name()
for i = 1, #holy_objects do
if string.find(obj_name, holy_objects) then return false end
end
return true
end

function try_to_release_special_npc(obj)
-- экологи на Ѓолотах после первого перехода на другую локацию
if string.find(obj:name(), "^marsh_dead_ecolog") then return true end

-- бойцы —Ќ на Ѓолотах после посещениЯ Љордона
if has_alife_info("esc_visited_level") and string.find(obj:name(), "^mar_stalker") then return true end

-- бандиты на Љордоне после финального диалога с •алецким (или о •алецком с ‚алерьЯном?)
if has_alife_info("esc_prisoner_complete_dialog") and string.find(obj:name(), "^esc_bandit_dead") then return true end

-- сталкеры на ‘валке после перехода в ’Юмную долину
if has_alife_info("val_talked_to_blockpost_leader_complete") then
if string.find(obj:name(), "^gar_stalker_corpse") or string.find(obj:name(), "^gar_sim_default_digger") then return true end
end

-- бойцы ‘вободы в ’Юмной долине после перехода на Ђгропром
if has_alife_info("agr_garbage_end") then
if string.find(obj:name(), "^val_freedom_dead_blockpost") or string.find(obj:name(), "^val_stalker_corpse") then return true end
end

-- сталкеры на Ђгропроме после ???
if has_alife_info("agr_actor_inside_9") and string.find(obj:name(), "^agr_stalker_corpse") then return true end

-- сталкеры в ђыжем лесу после нахождениЯ телепорта
if has_alife_info("red_actor_find_teleport") and string.find(obj:name(), "^red_stalker_0001") then return true end
end

---------------- “борщик бесхозного оружиЯ и залежалых трупов мутантов ----------------
---------------------------- Copyright 2010-2011 Minister -----------------------------

 

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

@alex5773, что-то вроде, "если в X содержится y". Хотя я тоже не понимаю, зачем это в некоторых местах. Как по мне, то лишний наворот. Не везде он необходим.

Использование знака «^» при вызове метода string.find( a, b ) означает, что строка b должна найтись в самом начале строки a. Пример:

string.find("Слон может работать хоботом", "^Слон может") - вернёт 1, 10 (начало и конец найденного фрагмента)
string.find("Слон может работать хоботом", "^работать хоботом") - вернёт nil

Впрочем, давайте не оффтопить, это вопрос для темы «Скриптование».

 

А вот что я увидел - так это какую-то неправильную, судя по русскому тексту, кодировку файла. Возможно, Mac-кодировка затесалась. Поправлю и перешлю автору.

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

Свои работы и совместные проекты: ИнструментOGSM CSFinal StrokeHARDWARMOD

Полезное: модули АртосаXML парсер

 

 

По результату отпишусь.

Пока вылетов не обнаружено. Тестю дальше.

  • Нравится 2

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

                                           С.Я. Маршак

Фикс включен в сборник? Ну где вылет на агропроме?

Отвечу вопросом на вопрос: каким образом этот фикс может быть включен в сборник фиксов от 30.12.2014, если вылет на Агропроме был обнаружен уже после выпуска этой версии сборника? Ведь @monk выкладывал обязательный фикс (рабочая ссылка на предыдущей странице), а не перезаливал исправленную версию сборника.

Всё-таки словил вылет при обыске трупа... Ладно, тестю дальше.

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

                                           С.Я. Маршак

Хочу спросить у знатоков следующее: почему у тайников, наводки на которые продают NPC в баре на базе "Долга", указано community = duty?

 

[agr_duty_trader_secret_1]

target = agr_duty_trader_secret_1
name = agr_duty_trader_secret_1_name
description = agr_duty_trader_secret_1_descr
items = medkit_army, 1, antirad, 2
community = duty
condlist = {-agr_duty_trader_secret_1 +agr_duty_trader_secret_1_give} true
treasure_cost = 800
say_item_name = false
 
[agr_duty_bar_secret_1]
target = agr_duty_bar_secret_1
name = agr_duty_bar_secret_1_name
description = agr_duty_bar_secret_1_descr
items = ammo_vog-25, 4
community = duty
condlist = {-agr_duty_bar_secret_1 +agr_duty_bar_secret_1_give} true
treasure_cost = 300
say_item_name = false
 
[agr_duty_bar_secret_2]
target = agr_duty_bar_secret_2
name = agr_duty_bar_secret_2_name
description = agr_duty_bar_secret_2_descr
items = medkit_army, 1, ammo_m209, 2
community = duty
condlist = {-agr_duty_bar_secret_2 +agr_duty_bar_secret_2_give} true
treasure_cost = 900
say_item_name = false
 
[agr_duty_bar_secret_3]
target = agr_duty_bar_secret_3
name = agr_duty_bar_secret_3_name
description = agr_duty_bar_secret_3_descr
items = ammo_m209, 4
community = duty
condlist = {-agr_duty_bar_secret_3 +agr_duty_bar_secret_3_give} true
treasure_cost = 400
say_item_name = false
 
[agr_duty_bar_secret_4]
target = agr_duty_bar_secret_4
name = agr_duty_bar_secret_4_name
description = agr_duty_bar_secret_4_descr
items = medkit, 2, medkit_army, 1, antirad, 1
community = duty
condlist = {-agr_duty_bar_secret_4 +agr_duty_bar_secret_4_give} true
treasure_cost = 1200
say_item_name = false

Во первых, почему именно duty, а не dolg?
Во вторых, у прочих квестовых тайников не указана принадлежность к группировке. Насколько я понял, параметр community нужен для случайных тайников.

@Dimus, так как тайники покупные, то вообще не важно, что там написано дути или долг. Можешь написать хоть монолит, хоть вообще убрать - всё равно их будут продавать посетители бара Колобка.

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

                                           С.Я. Маршак

А как насчёт тайников типа "Сейф Валерьяна", "Тайник майора Халецкого", "Тайник Контрабандиста" и т.п.? Там нужно указывать параметр community?

@Dimus, не знаю. Но если убрать этот параметр у тайника Репкина или Сидора, то они не продают тайники. Можно поэкспериментировать с тайниками Валерьяна и Халецкого. Но вот скажи: зачем оно тебе? Всё работает? Работает. Так, как говорится, зачем чинить то, что не сломано?

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

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

                                           С.Я. Маршак

У кого и при каких условиях в моде OGSM со сборником фиксов можно получить на Кордоне наводку на тайник новичка?

[esc_treasure_novice_stalker] ;Тайник новичка

target = esc_treasure_novice_stalker
name = esc_treasure_novice_stalker_name
description = esc_treasure_novice_stalker_descr
items = ammo_5.45x39_ap, 180
community = stalker
condlist = false

Информация об остальных тайниках на этой локации (включая все случайные) уже получена.

@Dimus, этот тайник продаёт Бродяга, которого спасаешь по просьбе Волка. И мод ОГСМ или мой сборник тут совсем не причём, так с дефолта ещё идёт.

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

                                           С.Я. Маршак

Извини, но здесь ты неправ, потому что Бродяга продаёт наводку на другую нычку:

 

[esc_quest_treasure_9] ;Кейс за свалкой
target = esc_q9_t_a
name = st_esc_q9_t_a
description = st_esc_q9_t_a_descr
items = antirad, 5
condlist = {=check_npc_name(esc_stalker_novice) +esc_wolf_novice_3} true, false
treasure_cost = 1400
say_item_name = false

 

Спасённый из бандитского плена Пёс продаёт наводку на этот тайник:

 

[esc_quest_treasure_8] ;Ложная могила
target = esc_q8_n
name = st_esc_q8_n
description = st_esc_q8_n_descr
items = explosive_dinamit, 3
condlist = {=check_npc_name(wolf_brother) +esc_wolf_brother_3} true, false
treasure_cost = 1000
say_item_name = false

 

А Волк торгует информацией о тайнике другого новичка:

 

[esc_quest_treasure_7] ;Кейс под вагоном
target = esc_q7_n
name = st_esc_q7_n
description = st_esc_q7_n_descr
items = mutant_dog_tail, 2
condlist = {=check_npc_name(esc_wolf) +esc_wolf_novice_4} true, false
treasure_cost = 1600
say_item_name = false

 

Наводки на эти и все другие тайники на Кордоне (покупные и случайные), кроме esc_treasure_novice_stalker, у меня уже есть.

 

Ещё у меня есть пара вопросов:

1. Иногда при отсутствии радиоактивного заражения Шрам заявляет, что не может заснуть до тех пор, пока не закусит антирадом. Повторная попытка поспать без использования антирада работает без проблем. Почему это происходит?

2. Введённые в последнем сборнике фиксов задания вида "принести предметы" (оружие, патроны, гранаты, медикаменты и водку) не блокируют квесты "принести особый предмет" (уникальное оружие, особый артефакт и т.п.)? Потому что командиры отрядов чаще всего давали задания на захват определённой точки и доставку обычных предметов.


P.S.: конечно, я знаю о заблокированном случайном тайнике под тепловозом,

[esc_treasure_6] ;Под локомотивом

target = esc_treasure_6
name = st_esc_rucksack_01_pod_train
description = st_esc_rucksack_01_pod_train_descr
items = conserva, 4, vodka, 1, energy_drink, 2
community = stalker
condlist = {=actor_on_level(escape:garbage)} true, false

потому что на его месте по квесту "принести особый предмет" появляется

"волшебная" водка.

Изменено пользователем Dimus
  • Полезно 1

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

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

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

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

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

Войти

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

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

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

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