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

STALKER CS: Final stroke 0.9


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

Установил,_но сохранения не работают, вылет с жуком._Вернул файлы, которые заменил фикс,_сохранения все_равно не_работают.

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

Нарушение пункта 2.5 Правил форума, устное предупреждение.

Прошу не забывать про пробелы и знаки препинания.

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

 

 

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

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

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

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

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

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

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

Сделать?

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

https://yadi.sk/d/pqhjUPmsf35zc

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

 

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

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

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

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
Ссылка на комментарий

Отвечу вопросом на вопрос: каким образом этот фикс может быть включен в сборник фиксов от 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, этот тайник продаёт Бродяга, которого спасаешь по просьбе Волка. И мод ОГСМ или мой сборник тут совсем не причём, так с дефолта ещё идёт.

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

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

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

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

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

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

Войти

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

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

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

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