[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 минут
Парни, какой фал отвечает за насзвание клавиш в игре.
отредактировал(а) Cos: 18-07-2010 15:54 GMT3 час. СВОБОДА вперет!!!!! СВОБОДА!!!!! СВОБОДУ не остановить!!!!! СВОБОДУ ВСЕМ ДАРОМ!!!!!!
Hola kost - Лысый вождь
Hеrhelyafan - так говорят испанцы
Проблемы Вождя - Народ не волнуют
Ленин сбежа
Колотун
Хватит мучать логику. Давай лучше пом**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 час. project S.I.P
Byurrer
Неправильно понял, хотя тебе 2 раз**50016ea8aab1bb10eeba** = alife():create(...)
npc.health = 0[/code]
Трупом станет не мгновенно, но для глаза незаметно.Если он не дальше 150 метров (дальность устанавливается в alife.ltx, switch_distance) от тебя, то в онлайне.Ты имеешь ввиду вывести список названий итемов из рюкзака в окно?
отредактировал(а) Darien Fx: 18-07-2010 11:20 GMT3 час.
Люди помогите скачал локу Припять из ЗП с вашего сайта а он вылетает с логом что ему нужны деревья. Из какой задницы я ему эти деревья достану?!?!?!??!?!!
Darien Fx ну можно и так, но вот я щас делаю апгред оружия (по реалистичным параметрам мне его один мастер военного дела дал) дак вот я хочу чтоб можно было открыть инвентарь полностью со всеми вещами!
Ребят, вопрос у меня имеется. Как сделать так, чтобы в начале игры, после видеоролика, игра начиналась с эффекта головокружения (типа как перед сном в лабораториях).
Я вернулся в мир "Сталкера", чтобы сделать то, что так дано задумал - мод, соизмеримый с полноценной игрой! (19.05.13)
Вопрос по скриптам. Хочу написать скрипт, чтобы при выкидывании постолета из рук (кнопочкой "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" встал в слот пистолета. Просьба помочь!
end
end
end
end
.— Должны были, да не приняли… Сказали, мол, раз сняли наклейку, то на глянце теперь «микроцарапины». Я обрадовался, что не «наноцарапины», и пошел домой.
aqraccy
1. Чтобы не нагружать игру излишними вызовами, удобнее вставить твою проверку в 'on_item_drop' (function actor_binder:on_item_drop (obj)). Т.о. твоя проверка будет вызываться только при потере какого-либо предмета актором.
2. Проверив потерю именно пистолета (например по class_id для потерянного obj), и проверив наличие какого-либо пистолета (например из таблицы или итерацией инвентаря) у актора - выбрать(запомнить) желаемый пистолет.
3. Вставить выбранный пистолет в слот можно, удалив его у актора и заспавнив его обратно в рюкзак актора. Пистолет автоматом встанет в пустой слот.
Прим: При вызове из апдейта актора - при любом выкладывании предмета из пистолетного слота (т.е. слот пустой) у тебя будет автоматом вкладываться в слот имеющийся ... Тебе это надо?
Да, именно так. Это может пригодиться во время затяжной перестрелки. Например я сижу за укрытием, опрокинутой колонной например. Стреляю из Автомата, патроны кончились, беру пистолет, патроны кончились. У меня есть запасной, но пока я его вытащу, пройдет уйма времени. Да и нажать клавишу i при этом удерживая Shift + C, да плюс мышью выбрать пистолет... В общем было бы удобно.
Как я уже говорил, скрипты я особо не умею писать. Если не трудно, напиши примерный текст кода. Если не трудно)
Огромное спасибо за отзыв!
.— Должны были, да не приняли… Сказали, мол, раз сняли наклейку, то на глянце теперь «микроцарапины». Я обрадовался, что не «наноцарапины», и пошел домой.
Кто подскажет : как "прикрутить" звук ( ogg ешку) сервомоторов к экзоскелету при хождении ГГ в нём?
при беге конечно же звук (т.к. идёт нагрузка) должен меняться .
XP SP3/AMD Athlon64 X2 6000+, MSI K9A2 CF-F 790X, MSI (Retail) GTX 260 OC 896MB, Память 2 DDR по 2Гб 800 МГц Dual Channel
в '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
А в чем загвоздка?
Проверяешь в апдейте актора надетость именно экзы и запускаешь периодически проигрыш нужного звука ...
.— Должны были, да не приняли… Сказали, мол, раз сняли наклейку, то на глянце теперь «микроцарапины». Я обрадовался, что не «наноцарапины», и пошел домой.
aqraccy
Неписи и так безмозглы, и экономя время актора на обязательных для реальной ситуации операциях (достать из рюкзака запасное оружие), ты их еще более делаешь уязвимыми ...
Любые изменения, искусственно облегчающие прохождение игры - чит.
P.S. Кобура - это и есть пистолетный слот. Не может быть в руках пистолет и в кобуре - запасной!
'Разгрузка' - это уже иное ...
Раз ставил сам точность НПС 95%, вроде как усложняя игру, то ... странновато выглядит 'облегчение' от рутинных операций.
Ну да это уже - на вкус и цвет ... Не вижу повода для флуда.
Хм, Сяк еще не сделал NLC6, а к моду уже аддоны ваяют ... :-)
У меня просто стоит вероятность попадания НПС 95%. Это и есть их мозги :). А пистолет запасной у меня в кобуре на бедре)
Кстати видел NLC 6 разгрузку. Так вот можно сделать так, чтобы если положить запасной пугач, то тогда бы срабатывал мой апдейт, точнее твой. :) Тогда по честному!
Но ведь можно носить две кобуры. Или в карман класть.
А мы люди такие)
отредактировал(а) aqraccy: 18-07-2010 19:35 GMT3 час. .— Должны были, да не приняли… Сказали, мол, раз сняли наклейку, то на глянце теперь «микроцарапины». Я обрадовался, что не «наноцарапины», и пошел домой.
Эта тема закрыта, публикация новых сообщений недоступна.
Продолжая пользоваться сайтом, вы соглашаетесь с использованием файлов cookie. Страницы сайта могут содержать информацию, запрещенную для просмотра посетителям младше 18 лет. Авторское право на серию игр «S.T.A.L.K.E.R» и используемые в ней материалы принадлежит GSC Game World.