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

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

(изменено)

Новай скрипт "невидимость в костюме", изначальный скрипт содержит очень существеную ошибку, он устанавливает у ВСЕХ НПС и монстров видимость в 60 м что является большой гейплейной ошибкой. А я то думаю чего крысы прямо издалека нападают а снайперы довольно близко подпускают.


--Невидимость В Костюме
--Доработано Intro ака НаноБот
local con = get_console()
local function log(arg)
con:execute(string.gsub(tostring(arg), " ", "_"))
con:execute("flush")
end

local idle_time
local rangeMin = 1 -- видимость вне поля зрения НПСа
local rangeMax = 4 -- видимость в поля зрения НПСа
local update = 3000 -- частота обновления видимости у НПС
local lev_cond = 0.5 -- уровень изношености при которой маскхалат перестает быть рабочим (невидимым)
local invisible = false
local nowpn = 4294967296
local invisible_global = 1
local raz_wpn = true -- можно ли вытаскивать видимое оружие, если вытащили то стали видимым!

function set_invisible()
if invisible_global == 0 then return end
local outfit_act = db.actor:item_in_slot(6)
local ac_slot = db.actor:active_slot()
local wpn = db.actor:item_in_slot(ac_slot) -- активный слот
local wpn0 = db.actor:item_in_slot(0) -- ножевой слот
local wpn1 = db.actor:item_in_slot(1) -- пистолетный слот
local wpn2 = db.actor:item_in_slot(2) -- автоматный слот
local hud = get_hud()
local cs = hud:GetCustomStatic("cs_inviz")
if cs == nil then
hud:AddCustomStatic("cs_inviz", true)
cs = hud:GetCustomStatic("cs_inviz")
end
if (outfit_act == nil) then
if db.not_inviz == false then
idle_time = 1
invisible = false
db.game_time = game.get_game_time()
local msg = string.format("")
if cs ~= nil then
cs:wnd():SetText(msg)
cs = nil
end
bind_stalker.restore_weapon()
level.remove_pp_effector(1111)
db.not_inviz = true
db.make_inviz = false
end
else
if outfit_act:section()=="meceniy_outfit_new" and outfit_act:condition() > lev_cond then
if db.make_inviz == false then -- первый раз одели масхалат
--log("первый раз одели масхалат-time_global()-("..time_global()..")")
invisible = true
idle_time = 60*60
local msg = string.format("Невидимость вкл!")
if cs ~= nil then cs:wnd():SetText(msg) end
db.game_time = game.get_game_time()
level.add_pp_effector ("teleport.ppe", 1111, false)
level.set_pp_effector_factor(1111, 1.0)
db.make_inviz = true
db.not_inviz = false
db.tell_90_inviz = false
db.tell_finish_inviz = false
else -- масхалат одет, проверим оружие в руках.
--log("Active slot-("..tostring(ac_slot)..")")
if raz_wpn == false then
if (wpn and (wpn:section() == "wpn_bizon1" or wpn:section() == "mobile" or
wpn:section() == "wpn_m16a2_sk12" or wpn:section() == "wpn_knife_bak" or wpn:section() == "wpn_knif4")) then -- разрешеное ли оружие в активном слоте
bind_stalker.restore_weapon()
--log("Оружие разрешеное!")
else -- ищем разрешеное в слотах оружие
if (wpn2 and (wpn2:section() == "wpn_m16a2_sk12")) then
if ac_slot ~= nowpn then
db.actor:activate_slot(2)
end
bind_stalker.restore_weapon()
--log("Оружие разрешено, из автоматного слота!")
elseif (wpn1 and (wpn1:section() == "wpn_bizon1" or wpn1:section() == "mobile")) then
if ac_slot ~= nowpn then
db.actor:activate_slot(1)
end
bind_stalker.restore_weapon()
--log("Оружие разрешено, из пистолетного слота!")
elseif (wpn0 and (wpn0:section() == "wpn_knife_bak" or wpn0:section() == "wpn_knif4")) then
if ac_slot ~= nowpn then
db.actor:activate_slot(0)
end
bind_stalker.restore_weapon()
--log("Оружие разрешено, из ножевого слота!")
else -- если нету, то блокируем
--log("Оружие заблокировано!")
bind_stalker.hide_weapon()
end
end--]]
else
if ac_slot == nowpn or (wpn and (wpn:section() == "wpn_bizon1" or wpn:section() == "mobile" or
wpn:section() == "wpn_m16a2_sk12" or wpn:section() == "wpn_knife_bak" or wpn:section() == "wpn_knif4")) then -- разрешеное ли оружие в активном слоте
bind_stalker.restore_weapon()
invisible = true
local msg = string.format("Невидимость вкл!")
if cs ~= nil then cs:wnd():SetText(msg) end
--log("Оружие разрешеное!")
else -- вытащили оружие, стали видимы!
invisible = false
--db.game_time = game.get_game_time()
local msg = string.format("Невидимость необеспеченна!")
if cs ~= nil then
cs:wnd():SetText(msg)
end
end
end
end
else
if db.not_inviz == false then
idle_time = 1
invisible = false
db.game_time = game.get_game_time()
local msg = string.format("")
if cs ~= nil then
cs:wnd():SetText(msg)
cs = nil
end
bind_stalker.restore_weapon()
level.remove_pp_effector(1111)
db.not_inviz = true
db.make_inviz = false
end
end
end


if (db.make_inviz and not db.tell_finish_inviz and not db.not_inviz) then
local diff_sec = game.get_game_time():diffSec(db.game_time)

if not db.tell_90_inviz and diff_sec >= idle_time*0.9 then
local msg = string.format("Вас могут увидеть!")
if cs ~= nil then cs:wnd():SetText(msg) end
db.tell_90_inviz = true
--bind_stalker.restore_weapon()
end

if db.tell_90_inviz and diff_sec >= idle_time then
invisible = false
local msg = string.format("")
if cs ~= nil then cs:wnd():SetText(msg) end
cs = nil
db.tell_finish_inviz = true
bind_stalker.restore_weapon()
level.remove_pp_effector(1111)
end
end

--db.tormoz = db.tormoz + 1

if db.tormoz <= time_global() then -- обновляем видимость у НПСов раз в update сек
--[[local object_all
for id = 1,65534,1 do
object_all = level.object_by_id(id)
if object_all ~= nil and (IAmAStalker[object_all:clsid()] or IAmAMonster[object_all:clsid()]) then
object_all:set_range(range)
end
end]]
--log("Установка видимости--time_global()-("..time_global()..")")
local object_all
local range = 0
local ini = system_ini()
for id = 1,65534,1 do --for k, v in pairs (db.storage) do
object_all = level.object_by_id(id)
--if object_all and (IAmAMonster[object_all:clsid()] or IAmAStalker[object_all:clsid()] or IsGelezaka(object_all)) and object_all:alive() then
if object_all and object_all.health > 0 and object_all:alive() then
local section = object_all:section()
local eyer = 0
local eyev = 120
if ini:line_exist(section, "eye_range") then --
eyer = ini:r_u32(section, "eye_range")
if invisible == true then
eyev = ini:r_u32(section, "eye_fov")
range = math.floor(db.actor:position():distance_to(object_all:position())-5)
if range < rangeMax and look_angle(id) < eyev*0.5 then range = rangeMax end
if range < rangeMin then range = rangeMin end
if range > eyer then range = eyer end
else
range = eyer
end
object_all:set_range(range)
end
--log("Object-("..section..")name-("..object_all:name()..")range-("..range..")Видимость НПС по умолчанию-("..eyer..")")
end
end
db.tormoz = time_global() + update
end

end

function look_angle(npc_id)
local rostnpc = 1.8 -- высота глаз
local npc = level.object_by_id( npc_id )
local npc_pos = npc:position()
local dir = npc:direction()
npc_pos.y = npc_pos.y + rostnpc
local actor_pos = db.actor:position()
local npc_pos_dir = get_dir_to_obj(npc_pos, actor_pos) --npc:position())
local ugl = yaw_degree3d(npc_pos_dir, dir) -- угол взгляда на актора
--log("Угол-("..ugl..")")
return ugl
end

function get_dir_to_obj(self_pos,obj_pos)
return obj_pos:sub(self_pos):normalize()
end

Так же есть пара прозрачных ножей с которыми можно врагов скрытно убивать. Полный аддон залью попоже, сейчас качаю ЗП, да и доработать скрипт надо.http://yadi.sk/d/Y5jCp_iCBEZ4X

Аддон к «Народной солянки».

Новоя игра не нужна, но желательно что бы была где-то ближе к середины, так быстрей протестируюте аддон.

Исправил; если костюм повреждён ниже придела появляется надпись "Маскхалат повреждён", некоторые глюки в режиме raz_wpn = false, в этом же режиме при попытке достать видимое оружие вы будете видны врагам на три секунды, типа замечают мелькание оружие. Так же исправил защиту костюма, лучше защищает от пуль и порезов но быстро портится, особено от огня и хим. аномалий, броня просто кевларовая ткань без жёсткой защиты. Всё таки с этим аддоном вы будете часто воевать с врагом в этом костюме - 

http://yadi.sk/d/IQRtqHOSBMuUe

Невидимость в костюме, плюс два прозрачных ножа.

Полностью переделана невидимость, теперь радиус видимости NPC восстанавливается из файлов, а так же видимость обновляется раз в три секунды. Можно в любое время достать оружие, с видимым оружием вы сразу будете видны врагам, но если оно невидимо, то вы, то же будете невидимы, но если вы начнёте стрелять, то на три секунды будете видны NPC, они вас фиксируют по вспышкам. Так же добавлено два прозрачных ножа, пока их можете купить у Сахарова (потом можно придумать какой нибудь квест), с ними вы можете убивать противника, совершено скрытно. Но помните, минимальный радиус видимости вне поля зрения NPC 1 метр, в поле зрения это 4 метра, считается, что они вас распознают по слабым бликам на маскхалате, но боковым зрением не видят. Поэтому скрытно подбирайтесь к ним со спины стараясь не шуметь, не цеплять кусты и не которые предметы и т.д. Так же в скрипте можно заблокировать доставание видимого оружия, поменяйте значение raz_wpn = true на raz_wpn = false.
На счет проблем обращайтесь в личку. http://www.amk-team.ru/forum/index.php

Автор. НаноБот
Изменено пользователем BFG
  • Нравится 3

...в конце концов, важен лишь, машинный код.

СТАЛКЕР только для ПК!

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


Ссылка на сообщение
(изменено)

Новый скрипт невидимость в костюме.

https://yadi.sk/d/UOTNxBTdc5dfF

Скрипт полностью переделан, может легко использоваться в любом другом моде ТЧ. Для этого копируем конфиги в отдельные файлы и подключаем инклудами.

 

Аддон к «Народной солянки».

Невидимость в костюме, с интегрированым прозрачным ножом. v2.14

 

Версия 1.03. Полностью переделана невидимость, теперь радиус видимости NPC восстанавливается из файлов, а так же видимость обновляется раз в три секунды. Можно в любое время достать оружие, с видимым оружием вы сразу будете видны врагам, но если оно невидимо, то вы, то же будете невидимы, но если вы начнёте стрелять, то на три секунды будете видны NPC, они вас фиксируют по вспышкам. Так же добавлено два прозрачных ножа, пока их можете купить у Сахарова (потом можно придумать какой нибудь квест), с ними вы можете убивать противника, совершено скрытно. Но помните, минимальный радиус видимости вне поля зрения NPC 1 метр, в поле зрения это 4 метра, считается, что они вас распознают по слабым бликам на маскхалате, но боковым зрением не видят. Поэтому скрытно подбирайтесь к ним со спины стараясь не шуметь, не цеплять кусты и не которые предметы и т.д. Так же в скрипте можно заблокировать доставание видимого оружия, поменяйте значение raz_wpn = true на raz_wpn = false. При этом при попытке достать видимое оружие оно будет автоматически убираться, но так же как и при выстреле, вы будете видны врагам на три секунды, типа замечают мелькание видимого оружия. При износе маскхалата меньше 50% появляется надпись "Маскхалат повреждён!" и вы будете видны врагам, считается повреждённый маскхалат не может обеспечить полную не видимость, так же маскхалат имеет низкую прочность, особенно от огня и химических аномалий, так что берегите его.

 

Дополнения для новой версии!!!!!!!!!!!

Версия 2.14. Полностью переделан скрипт, сделан на основе биндера костюма, скрипт полностью не зависим.

ВНИМАНИЕ!!! СТАРЫЙ СКРИПТ ДОЛЖЕН БЫТЬ ОТКЛЮЧЁН!

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

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

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

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

 

На счет проблем, обращайтесь в личку. http://www.amk-team.ru/forum/index.php?showuser=25391

 

Автор. НаноБот 12.102014 г.

 

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

При одетом костюме вы невидимы 6 мин, пока есть в батареи энергия, при снятом костюме батарея полностью заряжается за 2 мин. Все эти значения можно менять.

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

 

 

Дополнено:

Указанная сверху ссылка заблокирована!

Новая ссылка: https://yadi.sk/d/nPSGU3oMc5frk

Перекомпоновал файлы для лучшей совместимости с модами.

Работает с солянкой, и плюс ОП-1, возможно будет работать и с ОП-2.

Меняет файлы в оригинальной солянке:

scripts\meceniy_work.script

config\misc\Strange_Zone_mod\meceniy_outfits.ltx

config\text\rus\st_meceniy.xml

С ОП-2 будет работать сразу, если указанные файлы не изменены.

Интегрированный нож не требует описания в mp_ranks.ltx, и при потере сразу удаляется.

Так же для совместимости с сохранениями от 1.03 оставлены файлы:

w_knif4.ltx

w_knife_bak.ltx

Это просто дубликаты Тан-то нож и нож киллера, если не используете их (сохранения от 1.03), то лучше удалить.

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

...в конце концов, важен лишь, машинный код.

СТАЛКЕР только для ПК!

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


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

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

AMK-Team.ru

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