[stalker_vision_danger]
min_view_distance = 0.7 ; коэффициент, который множится на eye_range, в зависимости от угла
max_view_distance = 1.0 ; коэффициент, который множится на eye_range, в зависимости от угла
visibility_threshold = 120.0 ; значение, при достижении суммой которого объект считается видимым
always_visible_distance = 0.2
time_quant = 0.001
decrease_value = 0.01 ; значение, на которое уменьшается вес, если объект попал в фрустум, но отсёкся по каким-то причинам
velocity_factor = 0.5
luminocity_factor = 0.5 ; фактор освещения (только для Актёра)
transparency_threshold = 0.4 ; 0.25
чуваки помогите плиз хочу сделать чтоб можно было у торговцев деньги в долг брать , как в амк можно вытащить метку и рюкзак , как мне поставить метку на карте на какого нить персонажа или просто в любом месте на карте!!!
--' Ключем является группировка персонажа. Значением является таблица, содержашая имена секций предметов.
local item_by_community = {}
--' Зависимости в спауне предметов. Предмет спауниться только если есть хотя бы один из зависимых.
local item_dependence = {}
--' Множители и минимаксы для выпадения вещей в зависимости от уровня
local mul_by_level = {}
local count_by_level = {}
--' Предметы, которые нельзя удалять (квестовые например)
local always_keep_item = {}
--' Предметы, относящиеся к патронам. Их надо спаунить другим методом.
local ammo_sections = {}
local death_ini = ini_file("misc\\death_generic.ltx")
function init_drop_settings()
local community_list = { "stalker", "dolg", "freedom", "bandit", "military", "zombied", "ecolog", "killer", "monolith", "arena_enemy", "actor_dolg" , "dark_stalker" }
for k,v in pairs(community_list) do
--' Необходимо заполнить таблицу
item_by_community[v] = {}
if death_ini:section_exist(v) then
local n = death_ini:line_count(v)
local id, value = "", ""
for i=0,n-1 do
result, id, value = death_ini:r_line(v,i,"","")
item_by_community[v][id] = 100*tonumber(value)
end
end
end
--' Заполняем таблицу зависимостей
local n = death_ini:line_count("item_dependence")
local id, value = "", ""
for i=0,n-1 do
result, id, value = death_ini:r_line("item_dependence",i,"","")
item_dependence[id] = {}
local vvv = parse_names(value)
for k,v in pairs(vvv) do
item_dependence[id][v] = true
end
end
--' Множители и минимаксы для выпадения вещей в зависимости от уровня
local level_name = level.name()
if not death_ini:section_exist(level_name) then
level_name = "default"
end
local n = death_ini:line_count(level_name)
local id, value = "", ""
for i=0,n-1 do
result, id, value = death_ini:r_line(level_name,i,"","")
mul_by_level[id] = tonumber(value)
end
local item_count_section = "item_count_" .. level.get_game_difficulty()
local n = death_ini:line_count(item_count_section)
for i=0,n-1 do
result, id, value = death_ini:r_line(item_count_section,i,"","")
--' Нужно распарсить value в два значения
local t = parse_nums(value)
if t[1] == nil then
abort("Error on [death_ini] declaration. Section [%s], line [%s]", item_count_section, tostring(id))
end
local min = t[1]
local max = t[2]
if max == nil then
max = min
end
if mul_by_level[id] == nil then
mul_by_level[id] = 0
end
min = tonumber(min) * mul_by_level[id]
max = tonumber(max) * mul_by_level[id]
count_by_level[id] = {min = min, max = max}
end
--' Предметы, которые нельзя удалять (квестовые например)
local n = death_ini:line_count("keep_items")
for i=0,n-1 do
result, id, value = death_ini:r_line("keep_items",i,"","")
if value == "true" then
always_keep_item[id] = true
end
end
--' Предметы, относящиеся к патронам. Их надо спаунить другим методом.
ammo_sections = {}
local n = death_ini:line_count("ammo_sections")
local id, value = "", ""
for i=0,n-1 do
result, id, value = death_ini:r_line("ammo_sections",i,"","")
ammo_sections[id] = true
end
end
class "drop_manager"
function drop_manager:__init(npc)
self.npc = npc
self.dropped = false
end
function drop_manager:save(packet)
packet:w_bool(self.dropped)
end
function drop_manager:load(packet)
self.dropped = packet:r_bool()
end
function drop_manager:create_release_item()
if self.dropped == true then
return
end
self.dropped = true
--' Запускаем итератор на удаление предметов
self.npc:iterate_inventory(keep_item, self.npc)
--' Проверка на отсутствие спауна лута
local ini = self.npc:spawn_ini()
if ini and ini:section_exist("dont_spawn_loot") then
return
end
--' Доспавниваем необходимое количество итемов:
--' Необходимо составить список объектов которые могут быть заспавнены для персонажа
local spawn_items = item_by_community[self.npc:character_community()]
for k,v in pairs(spawn_items) do
--' По каждому объекту необходимо получить зависимости
if check_item_dependence(self.npc, k) == true then
--' По каждому объекту необходимо получить количество
local number = math.ceil(math.random(count_by_level[k].min, count_by_level[k].max))
--' Необходимо заспавнить нужное количество.
create_items(self.npc, k, number, v)
end
end
end
--' Функция вызывается для каждого предмета, если вернет false то предмет удалится.
function keep_item(npc, item)
local section = item:section()
if section == "bolt" then
return
end
if always_keep_item[section] == true then
return
end
local item_id = item:id()
local item_in_slot = npc:item_in_slot(1)
if item_in_slot ~= nil and
item_in_slot:id() == item_id
then
item:unload_magazine()
--' Тут надо уменьшить кондишн оружия
item:set_condition((math.random(15)+75)/100)
return
end
item_in_slot = npc:item_in_slot(2)
if item_in_slot ~= nil and
item_in_slot:id() == item_id
then
item:unload_magazine()
--' Тут надо уменьшить кондишн оружия
item:set_condition((math.random(15)+75)/100)
return
end
npc:mark_item_dropped(item)
alife():release(alife():object(item:id()), true)
end
--' Функция спавнит необходимое число предметов
function create_items(npc, section, number, rnd)
--'printf("create %s of %s", tostring(number), tostring(section))
if ammo_sections[section] == true then
if number > 0 then
se_respawn.create_ammo(section,
npc:position(),
npc:level_vertex_id(),
npc:game_vertex_id(),
npc:id(),
number)
end
else
for i=1,number do
--' Проверяем вероятность появить каждый объект в отдельности
if math.random(100) <= rnd then
alife():create(section,
npc:position(),
npc:level_vertex_id(),
npc:game_vertex_id(),
npc:id())
end
end
end
end
--' Функция проверяет есть ли хоть один из зависимых объектов у персонажа
function check_item_dependence(npc, section)
if item_dependence[section] == nil then
return true
end
local d_flag = true
for k,v in pairs(item_dependence[section]) do
local obj = npc:object(k)
if obj ~= nil and npc:marked_dropped(obj) ~= true then
return true
end
d_flag = false
end
return d_flag
end
добавлено спустя 12 минут
Парни, какой фал отвечает за насзвание клавиш в игре.
Колотун
Хватит мучать логику. Давай лучше пом**50036ea8aab1bb10eeba**[2217]
...
section_name = stalker
...[/code]
Заметь, stalker.
Всех торговцев брать не буду, для простоты понимания посмотри какая секция у того же Петренко?
А секция называется
[code]section_name = stalker_trader
[/code]
Смотрим файл m_stalker.ltx. Там есть две интересные для тебя записи.
Вот что записано для секции stalker:
[code][stalker]:common_ph_friction_params_on_npc_death
...
can_select_items = on
...
use_single_item_rule = on
...
[/code]
А вот что для секции stalker_trader :
[code][stalker_trader]:stalker
...
use_single_item_rule = off
can_select_items = off[/code]
Делай выводы.:mailpishu:
КerYa
Зачем нужно было писать такой длинный отчет по всем файлам, когда я попросил только файл death_manager!
Ну да ладно! В death_manager у тебя вроде все в порядке прописал новую группировку.
А вот интересен мне еще один файл который ты возможно упустил - это xr_statistic.script
Чтобы при убийстве непися новой группировки игра не вылетала в xr_statistic.script,
Попробуй должно помочь!
P.S. Когда пишешь что то объемное кидай все под спойлер!
добавлено спустя 7 минут
Gun12
Спасибо огромное! Я этого даже не приметил! Хотя...
была такая мысля заменить секцию. Но потом подумал, что вряд ли это поможет так как я окончательно его снес! Буду нового делать именно так и поступлю! Уверен это обязательно поможет!:ye)
Еще раз огромное спасибо!
отредактировал(а) Колотун: 18-07-2010 05:29 GMT3 час.
Колотун этот лог значит что: shadow of chernobyl\gamedata\scripts\xr_logic.script в этом скрипте на 868 строчке аргумент 'gfind' не получил никакое зн**50316ea8aab1bb10eeba**
отредактировал(а) Byurrer: 18-07-2010 09:47 GMT3 час.
Byurrer
Неправильно понял, хотя тебе 2 раз**50016ea8aab1bb10eeba** = alife():create(...)
npc.health = 0[/code]
Трупом станет не мгновенно, но для глаза незаметно.Если он не дальше 150 метров (дальность устанавливается в alife.ltx, switch_distance) от тебя, то в онлайне.Ты имеешь ввиду вывести список названий итемов из рюкзака в окно?
отредактировал(а) Darien Fx: 18-07-2010 11:20 GMT3 час.
Люди помогите скачал локу Припять из ЗП с вашего сайта а он вылетает с логом что ему нужны деревья. Из какой задницы я ему эти деревья достану?!?!?!??!?!!
Darien Fx ну можно и так, но вот я щас делаю апгред оружия (по реалистичным параметрам мне его один мастер военного дела дал) дак вот я хочу чтоб можно было открыть инвентарь полностью со всеми вещами!
Ребят, вопрос у меня имеется. Как сделать так, чтобы в начале игры, после видеоролика, игра начиналась с эффекта головокружения (типа как перед сном в лабораториях).
Вопрос по скриптам. Хочу написать скрипт, чтобы при выкидывании постолета из рук (кнопочкой "g" иди из инвентаря командой "Выбросить"), при условии, что у ГГ есть еще один пистолет, то он брал новый пистолет в руки автоматически.
Вот попытался набросать что-то типа (xD). Некоторые строки могут быть неправильными, т.к не на своем компе, пишу команды по памяти, но основные момент учтены.
В общем в bind_stalker.script написал колбэк (вроде так называется) на свой мод, чтобы работал всегда.
Прописал строку aqra_mod:aqra_update(delta) (куда именно я знаю, но за неимением сталкера, сделаю этот шаг позже. Если что не так, просьба исправить.
Дальше сам скрипт:
local aqra = 0
function aqra.update(delta)
aqra = 1
if aqra == 1 then aqra_mod
end
end
function aqra_mod()
local pistol = db.actor:item_in_slot(2)
return pistol ~= nill and db.actor:object("table") ~= nill
local table = {
"wpn_pm"
"wpn_pb"
"wpn_beretta"
"wpn_hpsa"
"wpn_fort"
}
if true then -- я нупка в скриптах, можно ли так, я не знаю. В общем здесь нужна команда, чтобы в слот пистоля вставился один из пистолов из таблы "table".
local pistol_change = math.random(table.getn(table))
--Здесь нужна команда чтобы переменная "pistol_change" встал в слот пистолета. Просьба помочь!
aqraccy
1. Чтобы не нагружать игру излишними вызовами, удобнее вставить твою проверку в 'on_item_drop' (function actor_binder:on_item_drop (obj)). Т.о. твоя проверка будет вызываться только при потере какого-либо предмета актором.
2. Проверив потерю именно пистолета (например по class_id для потерянного obj), и проверив наличие какого-либо пистолета (например из таблицы или итерацией инвентаря) у актора - выбрать(запомнить) желаемый пистолет.
3. Вставить выбранный пистолет в слот можно, удалив его у актора и заспавнив его обратно в рюкзак актора. Пистолет автоматом встанет в пустой слот.
Прим: При вызове из апдейта актора - при любом выкладывании предмета из пистолетного слота (т.е. слот пустой) у тебя будет автоматом вкладываться в слот имеющийся ... Тебе это надо?
отредактировал(а) Artos: 18-07-2010 18:30 GMT3 час.
Да, именно так. Это может пригодиться во время затяжной перестрелки. Например я сижу за укрытием, опрокинутой колонной например. Стреляю из Автомата, патроны кончились, беру пистолет, патроны кончились. У меня есть запасной, но пока я его вытащу, пройдет уйма времени. Да и нажать клавишу i при этом удерживая Shift + C, да плюс мышью выбрать пистолет... В общем было бы удобно.
Как я уже говорил, скрипты я особо не умею писать. Если не трудно, напиши примерный текст кода. Если не трудно)
Кто подскажет : как "прикрутить" звук ( ogg ешку) сервомоторов к экзоскелету при хождении ГГ в нём?
при беге конечно же звук (т.к. идёт нагрузка) должен меняться .
в 'bind_sta**50016ea8aab1bb10eeba** ...
aqra.update(obj)
end[/code]
в 'aqra.script' вставляем что-то типа:[code]function update(oItem)
if obj and isWeapon(obj) then --/ проверка потери именно оружия
if not db.actor:item_in_slot(2) then --/ проверка пустого пистолетного слота
--/ итерация по списку пистолетных секций
for k,v in pairs({"wpn_pm","wpn_pb","wpn_beretta","wpn_hpsa","wpn_fort"}) do
if db.actor:object(v) then --/ проверка имеет ли данный пистолет
local obj_se = alife():jbject(db.actor:object(v):id) --/ серверный объект
if obj_se then
alife():release(obj_se, true) --/ удаляем
alife():create(v, db.actor:positiom(), db.actor:level_vertex_id(), db.actor:game_vertex_id(), db.actor:id()) --/ спавним в рюкзак актору
end
end
end
end
end
end[/code]
Естественно НЕ проверял на оЧепятки и на корректность...
waran
А в чем загвоздка?
Проверяешь в апдейте актора надетость именно экзы и запускаешь периодически проигрыш нужного звука ...
отредактировал(а) Artos: 18-07-2010 19:24 GMT3 час.
aqraccy
Неписи и так безмозглы, и экономя время актора на обязательных для реальной ситуации операциях (достать из рюкзака запасное оружие), ты их еще более делаешь уязвимыми ...
Любые изменения, искусственно облегчающие прохождение игры - чит.
P.S. Кобура - это и есть пистолетный слот. Не может быть в руках пистолет и в кобуре - запасной!
'Разгрузка' - это уже иное ...
Раз ставил сам точность НПС 95%, вроде как усложняя игру, то ... странновато выглядит 'облегчение' от рутинных операций.
Ну да это уже - на вкус и цвет ... Не вижу повода для флуда.
Хм, Сяк еще не сделал NLC6, а к моду уже аддоны ваяют ... :-)
У меня просто стоит вероятность попадания НПС 95%. Это и есть их мозги :). А пистолет запасной у меня в кобуре на бедре)
Кстати видел NLC 6 разгрузку. Так вот можно сделать так, чтобы если положить запасной пугач, то тогда бы срабатывал мой апдейт, точнее твой. :) Тогда по честному!
Но ведь можно носить две кобуры. Или в карман класть.
А мы люди такие)
отредактировал(а) aqraccy: 18-07-2010 19:35 GMT3 час.