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

[SoC] Ковыряемся в файлах


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

n6260, как думаешь, ее реально восстановить? Просто, по моему был спад интереса к сталкеру, а сейчас многие возвращаются, может приживется. Изменено пользователем Andrey07071977
Ссылка на комментарий
Здравствуйте.У меня есть вопрос:

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

 

 

Добавлено через 18 мин.:

Сталкер версии 1.0004

Можно поверх иконки "выведенной движком" выводить свою скриптово. По каким вздумается условиям, хотите такую же, хотите - другую.

В помощь - любой мод где производятся скриптовые манипуляции с текстурами на худе.

Мод, где не бывает одинаковых путей - Судьба Зоны. (Лучшее, что у меня получилось на X-Ray) На базе модифицированного движка OGSR Engine.

Бывший мододел на X-Ray / Начинающий игродел на Unreal Engine. Программист.

AMD Ryzen 9 7950X (16 ядер, 32 потока, 5.75 ГГц); RTX 3080; 128 ГБ DDR5; Arctic Liquid Freezer II-420; 3 ТБ SSD PCIe 4.0; 4ТБ HDD.

Ссылка на комментарий
Можно поверх иконки "выведенной движком" выводить свою скриптово. По каким вздумается условиям, хотите такую же, хотите - другую.

В помощь - любой мод где производятся скриптовые манипуляции с текстурами на худе.

В FS это совершенно по другому. Там происходит подмена профиля ГГ, так можно и сделать смену имени ГГ.

 

А у меня такой вопрос - как пользоваться едитбоксом?

Что я хочу сделать - некое подобие отсыла сообщений по алгоритму - нажимаешь на ТАВ, появляется окошко, вводишь надпись, нажимаешь "отправить" - с помощью сенд_тип выводиться сообщение с нашим набранным текстом.

https://www.youtube.com/embed/U0no-6tCxhU

Канал на "Трубе"

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

ColR_iT, почитал детальный разбор и ... готов поспорить и доказать, что ты заблуждаешься, по крайней мере относительно цифры в строке condlist.

 

1. Вероятно нет смысла рассматривать чисто оригинальные значения конфигов тайников, т.к. мы не в теме по разбору оригинальной игры, а в теме моддинга ее, т.е. подразумевается, что хотя бы какие-то цифры моддмейкер собирается менять/добавлять.

Т.е. если захотел выдать тайник со 100% вероятностью и без каких либо условий - то такой тайник и будет выдан без доп.условий на совпадение с community.

 

2.

Дальше, проверка на равенство (120) переменной tr_sum и ноля (такое произойдёт, если за блоком condilst будет стоять значение 100), а также проверяется вернула ли функция math.random значение меньше 65 или нет... вчитайтесь внимательно - функция math.random.

Если что-то одно вернёт true, то тайник выдан не будет

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

Если заданы вероятности для одного/нескольких тайников - то что-либо будет выдано с вероятностью не более 35%.

Это можно очень даже объяснить: Если для трупов со статусом "новичек" доступны к выдаче 10...20...50 и каждый с вероятностью, например, в 5 %, то суммарная вероятность будет 50...100...250% ! Т.е. хоть какой либо тайник будет выдаваться с почти каждого трупа!?

Вот и сделали разработчики - ввели общее условие: Вероятность выдачи любого тайника не более 35%, а какой конкретно - зависит от его параметра в конфиге ...

 

3. Если тайник не 100%-ый к выдаче и общее условие Невыдачи не отсекло дальнейшый выбор к выдаче тайника, то начинается из общего массива доступных к выдаче тайников выбор конкретного.

Следует все же внести ясность, что "цифирька" в параметре condlist = 5 не является именно вероятностью в процентах(!), а это некий весовой коэффициент вероятности. Вспомним про респавнеры(!), где тоже НЕ вероятность спавна задается, а весовой коэффициент вероятности.

Т.е. это цифра, которая определяет скоько частей из общей вероятности для всех тайников приходится на данный тайник.

Далее, по циклу выбора из суммарной "вероятности" (суммы весовых коэффициентов) рандомно выбирается тот тайник, которому повезло. Чем больше его весовой коэффициент вероятности - тем больше шансов этот тайник имеет в выдаче.

 

В итоге, цифирька в конфиге тайников condlist = N действительно НЕ вероятность, которая выражается в процентах, а ее весовой эквивалент, который будучи суммированным с остальными аналогичными - и определяет вероятность выдачи именно этого тайника. Упрощенно - это все же "вероятность выдачи тайника" с общей поправкой - вероятнсть не более 45%.

 

P.S. Если бы не было вероятности - то все тайники бы выдавались "по списку", который каждый раз был бы един для всех игр с данным конфигом тайников, т.е. и предсказуем и линеен. Мы же и в оригинальной игре имеем именно рандом выдачи тайников.

 

Резюме (относительно оригинального скрипта игры):

1. Если condlist = 100 - тайник будет выдан при первом удобном случае;

2. Если condlist = 0 (или отсутствует) - тайник НЕ будет выдан скриптом рандомных тайников ни при каких условиях;

3. Все тайники (у которых не 100) выдаются с вероятностью НЕ более 35% (грубо: каждые два из трех трупов - пусты);

4. Чем больше condlist = N - тем выше вероятность выдачи этого тайника из общего числа доступных к выдаче тайников.

Если condlist = 101 или более - тайник будет выдан из "общей кучи" с вероятностью менее 35%, но (!) с очень высокой вероятностью (близкой к 100% от общего числа доступных к выдаче тайников).

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

"Но иногда найдется вдруг чудак, этот чудак все сделает не так ..."© Машина времени

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

Artos

Моя первостепенная задача была выяснить, что за число в condlist и на кой ляд оно вообще нужно. И я выяснил...

По ходу итерации по таблице treasure_info, где проверялись условия condlist и community, переменная tr_sum хранит в себе сумму treasure_prob всех тайников прошедших валидность по условиям, а treasure_prob это и есть "наша" цифра.

А также в таблицу avail заносятся все тайник у которых подошёл community. Если подошёл и condlist, то prob равняется treasure_prob, иначе 0. Зачем было так без смысленно забивать таблицу, мне не понятно, но ...

В конце-концов таблица avail, при обыске трупа с которого я получил тайник, выглядит следующим образом:

avail = {
{k=esc_secret_anomaly_dead, prob=2},
{k=esc_secret_bandit_cross, prob=5},
{k=esc_secret_nice_place, prob=3},
{k=esc_secret_safe_farm, prob=2},
{k=gar_secret_box_blockpost, prob=3},
{k=esc_secret_village_rucksack, prob=3},
{k=val_secret_0008, prob=1},
{k=gar_secret_bandit_hiding, prob=3},
{k=esc_secret_kpp_tower, prob=2}
}

Все тайники с prob равным 0, я отсёк условием:

if treasure_prob ~= 0 then

ещё на этапе создания этой таблицы, поскольку таковые значения абсолютно ни на что не влияют.

Без такового условия, данная таблица имела бы следующий вид, т.е. по сути то, как она выглядет в оригинале:

avail = {
{k=esc_secret_anomaly_dead, prob=2},
{k=bar_secret_0010, prob=0},
{k=gar_secret_concrete_blocks, prob=0},
{k=val_secret_0026, prob=0},
{k=ros_secret_0011, prob=0},
{k=ros_secret_0006, prob=0},
{k=bar_secret_0002, prob=0},
{k=mil_secret_0028, prob=0},
{k=mil_secret_0012, prob=0},
{k=rad_secret_0004, prob=0},
{k=val_secret_0023, prob=0},
{k=val_secret_0022, prob=0},
{k=bar_secret_0006, prob=0},
{k=agr_secret_inventory_schlosser, prob=0},
{k=agr_secret_box_institute, prob=0},
{k=esc_secret_bandit_cross, prob=5},
{k=esc_secret_nice_place, prob=3},
{k=bar_secret_0005, prob=0},
{k=rad_secret_0002, prob=0},
{k=mil_secret_0000, prob=0},
{k=rad_secret_0000, prob=0},
{k=yan_secret_0000, prob=0},
{k=bar_secret_0007, prob=0},
{k=agr_secret_sewers, prob=0},
{k=ros_secret_0022, prob=0},
{k=agr_secret_rotted_log, prob=0},
{k=ros_secret_0020, prob=0},
{k=val_secret_0004, prob=0},
{k=val_secret_0017, prob=0},
{k=ros_secret_0015, prob=0},
{k=ros_secret_0021, prob=0},
{k=esc_secret_safe_farm, prob=2},
{k=gar_secret_metal_hiding, prob=0},
{k=mil_secret_0009, prob=0},
{k=agru_secret_mole_cave, prob=0},
{k=agr_secret_safe_bush, prob=0},
{k=val_secret_0005, prob=0},
{k=mil_secret_0004, prob=0},
{k=agr_secret_box_radiation, prob=0},
{k=yan_secret_0010, prob=0},
{k=val_secret_0003, prob=0},
{k=mil_secret_0003, prob=0},
{k=gar_secret_bus_rucksack, prob=0},
{k=yan_secret_0013, prob=0},
{k=mil_secret_0016, prob=0},
{k=gar_secret_bus_tube, prob=0},
{k=yan_secret_0012, prob=0},
{k=yan_secret_0011, prob=0},
{k=yan_secret_0009, prob=0},
{k=yan_secret_0008, prob=0},
{k=gar_secret_rucksack_noones, prob=0},
{k=yan_secret_0007, prob=0},
{k=bar_secret_0001, prob=0},
{k=yan_secret_0006, prob=0},
{k=bar_secret_0014, prob=0},
{k=gar_secret_south_safe, prob=0},
{k=yan_secret_0005, prob=0},
{k=esc_secret_refuge, prob=0},
{k=yan_secret_0004, prob=0},
{k=yan_secret_0003, prob=0},
{k=gar_secret_box_blockpost, prob=3},
{k=esc_secret_village_rucksack, prob=3},
{k=yan_secret_0002, prob=0},
{k=gar_secret_escavator, prob=0},
{k=yan_secret_0001, prob=0},
{k=rad_secret_0005, prob=0},
{k=agr_secret_agrosafe, prob=0},
{k=val_secret_0032, prob=0},
{k=gar_secret_north_tube, prob=0},
{k=pri_secret_0002, prob=0},
{k=gar_secret_east_tube, prob=0},
{k=bar_secret_0018, prob=0},
{k=agr_secret_cross, prob=0},
{k=bar_secret_0004, prob=0},
{k=val_secret_0025, prob=0},
{k=rad_secret_0003, prob=0},
{k=val_secret_0021, prob=0},
{k=val_secret_0015, prob=0},
{k=agru_secret_box_bloodsucker, prob=0},
{k=agr_secret_rucksack_window, prob=0},
{k=val_secret_0010, prob=0},
{k=agr_secret_safe_wall, prob=0},
{k=ros_secret_0016, prob=0},
{k=val_secret_0008, prob=1},
{k=x16_secret_0001, prob=0},
{k=val_secret_0006, prob=0},
{k=val_secret_0002, prob=0},
{k=pri_secret_0000, prob=0},
{k=agru_secret_bandit_obschak, prob=0},
{k=val_secret_0000, prob=0},
{k=bar_secret_0017, prob=0},
{k=gar_secret_bandit_hiding, prob=3},
{k=gar_secret_cistern_pipe, prob=0},
{k=ros_secret_0000, prob=0},
{k=bar_secret_0012, prob=0},
{k=mil_secret_0014, prob=0},
{k=gar_secret_forest_log, prob=0},
{k=mil_secret_0002, prob=0},
{k=mil_secret_0015, prob=0},
{k=ros_secret_0002, prob=0},
{k=ros_secret_0013, prob=0},
{k=agr_secret_roof_box, prob=0},
{k=bar_secret_0015, prob=0},
{k=ros_secret_0012, prob=0},
{k=x16_secret_0000, prob=0},
{k=ros_secret_0008, prob=0},
{k=agr_secret_safe_tree, prob=0},
{k=ros_secret_0007, prob=0},
{k=ros_secret_0009, prob=0},
{k=esc_secret_kpp_tower, prob=2},
{k=ros_secret_0001, prob=0},
{k=val_secret_0024, prob=0},
{k=bar_secret_0011, prob=0},
{k=rad_secret_0001, prob=0},
{k=agr_secret_gray, prob=0},
{k=mil_secret_0013, prob=0},
{k=agr_secret_box_stairs, prob=0},
{k=val_secret_0027, prob=0},
{k=pri_secret_0001, prob=0},
{k=val_secret_0001, prob=0},
{k=mil_secret_0005, prob=0},
{k=val_secret_0011, prob=0},
{k=pri_secret_0003, prob=0},
{k=bar_secret_0016, prob=0},
{k=mil_secret_0018, prob=0},
{k=bar_secret_0009, prob=0},
{k=ros_secret_0003, prob=0},
{k=gar_secret_car_hiding, prob=0},
{k=ros_secret_0017, prob=0},
{k=esc_secret_thief, prob=0},
{k=mil_secret_0017, prob=0},
{k=pri_secret_0004, prob=0},
{k=mil_secret_0007, prob=0},
{k=bar_secret_0000, prob=0},
{k=gar_secret_rotted_stump, prob=0},
{k=mil_secret_0011, prob=0},
{k=agr_secret_rucksack_laketube, prob=0},
{k=agr_secret_pipe_rucksack, prob=0},
{k=agr_secret_tree_rucksack, prob=0},
{k=mil_secret_0008, prob=0},
{k=mil_secret_0010, prob=0},
{k=gar_secret_avoska, prob=0},
{k=bar_secret_0008, prob=0},
{k=mil_secret_0001, prob=0},
{k=mil_secret_0006, prob=0},
{k=agr_secret_truck, prob=0},
{k=bar_secret_0003, prob=0},
{k=bar_secret_0019, prob=0},
{k=gar_secret_rucksack_ruins, prob=0},
{k=val_secret_0007, prob=0},
{k=agr_secret_box_zavhoz, prob=0},
{k=agr_secret_rucksack_blue, prob=0},
{k=ros_secret_0023, prob=0}
}

Как можно заметить она существенно больше...

Причем таковая таблица, для одинаковых по рангу и группировке НПС, формируется идеинтичная, причем в непонятном для меня порядке, почему перебор идёт не в том порядке, в котором тайники прописаны в treasure_manager.ltx?

 

Дальше, у нас идёт условие выдачи тайника впринципе:

if tr_sum == 0 or
    math.random(100) < 65
then
    return
end

Как видно, тайник действительно выдастся с вероятностью 35%.

А вот далее идёт выбор самого тайника:

1:local tr_w = math.random(tr_sum)
2:for k,v in pairs(avail) do
3:      tr_w = tr_w - v.prob
4:      if tr_w <= 0 then
5:          --' Выдать тайник
6:          self:give_treasure(v.k)
7:          break
8:      end
9:end

Первая строчка данного кусочка кода, записывает в переменную tr_w случайное число от 1 до значения переменной tr_sum, которая, в свою очередь, хранит в себе сумму treasure_prob всех тайников прошедших валидность, или можно сказать, что tr_sum равна сумме всех prob, из таблице avail, это одно и тоже.

Затем ещё один цикл, в котором переменная tr_w уменьшается на значение prob, каждого тайника из таблицы. Как только эта переменная становиться отрицательной, то выдаём тайнкци с именем k, чей prob оказался последним (строки 4,6 приведённого "кусочка").

 

"Весовой эквивалент" - да, возможно так и есть. Поскольку таблица avail формируется одинаковая для одной и той же группировки, то впринципе, можно вычислить и процентное соотношение данного числа, естественно, что в разных случаях (ранг НПС, локация на которой мы сейчас) это соотношение будет разным, поэтому задать одинаковую вероятность для нескольких, вроде как, подходящих НПС, заранее неполучится...

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

ColR_iT, сорри, но пока какая-то чехарда из утверждений и неясен смысл именно для топика/для других читающих ... а вернее смысл как раз искажен:

Цифра в конце стоки condlist, в файле treasure_manager.ltx, задающая условие на выдачу тайника, не какая не вероятность и не колличество выполненых условий, как думал я, а это просто цифра, да-да именно цифра и ничего иначе.
Выводы...

Цифра в строке condlist не какая на хрен не вероятность, а просто цифра, и каково её значение особой роли не играет. Вообще GSC вероятно немного не правильно распределили эти цифры, в алгоритме просматривается процентные соотношения, но высчитать их, зная что работает функция random физически не реально.

Как уже выше показал, что имеется три ветви алгритма выдачи тайников:

1. 100% вероятность выдачи;

2. Запрет выдачи "безвероятностных" тайников и общее ограничение в 35% (только каждый третий труп может выдать тайник);

3. Выдача (из общего числа прошедших проверку на условие) тайника в зависимости от параметра его условной вероятности.

 

С первыми двумя все прозрачно и ясно. Третья ветвь, алгоритм которой встречается в том или ином виде не только для тайников, тоже достаточно ясен. Сумма (tr_sum) всех treasure_prob - это 100%. Каждая treasure_prob - это весовой коэффициент вероятности для каждого тайника прошедшего проверку и доступного для выдачи.

Если взяь твой пример с табличкой avail для тайников, то имеем: 2+5+3+2+3+3+1+2 = 21

т.е. общее число весовых коэффициентов 21 и это 100%.

Тогда имеем, что, например, тайник esc_secret_bandit_cross с его condlist = 5 будет иметь вероятность выдачи: 100*5/21 = 23,8%

 

В итоге, цифра в строке condlist отображает как раз вероятность (хотя и не в %) выдачи тайника с поправкой на условность и зависимость от общего кол-ва возможных к выдаче тайников и не является бессмысленной.

И, само собою, данный алгоритм НЕ предусматривает возможность задания одинаковой вероятности для чего бы то ни было (если конечно не для всех одинаковую), т.к. как только хотя бы один тайник выдан - то в дальнейшем он уже не учитывается и все вычисления вероятностей будут иметь совершенно иные значения. Это именно алгоритм РАНДОМНЫХ тайников, а не выдача по заведомо фиксированным значениям.

 

  • Полезно 2

"Но иногда найдется вдруг чудак, этот чудак все сделает не так ..."© Машина времени

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

Добрый вечер.

Скажите пожалуйста возможно ли сделать следующее:

Прописать какому либо предмету из items.ltx эффект свечения как у аномалий и артефактов.

Только чтобы это работало не касаясь скриптов - я в них совершенно не разбираюсь.

Если это возможно, то опишите что надо добавить в конфиг данного предмета, или дайте ссылочку на урок по данному вопросу.

Ссылка на комментарий
shahvkit, на классе артефакта только

S.T.A.L.K.E.R 1.004, Народная..Солянка от 19.04.10, дополнение 14.08.10, патч 3.09.10, DMX 1.3.5, Saruman addon 1.1

Vkontakte

Добавление нового транспорта в сталкер

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

Здравствуйте! Я никак немогу найти статью о добавлении нового монстра (не восстрановление вырезанного и не правка существующего). Пытался зделать сам, не получилось. Буду очень благодарен за пошаговую инструкцию.

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

Можете подсказать, как увеличить радиус при котором можно говорить с НПС?

Просто я сделал такой скрипт -

--[[
Свистоперделки.
Скрипт: Wookie
Спасибо: AMK, Stalk15
]]

-- Общаемся с Волком на расстоянии
-- Прикольно, но работает только прямо перед Волком
function wookie_radio_talk()
    local npc = level_object_by_sid(006) 
    db.actor:run_talk_dialog(npc)
end

function use(obj)
local obj_sect = obj:section()
if obj_sect == "racia" then
this.wookie_radio_talk() 
this.create_item("racia")
end
end

function create_item(spawn_item, npc)
  if npc==nil then 
    npc=db.actor 
  end
  return alife():create(spawn_item, 
      npc:position(),
      npc:level_vertex_id(),  
      npc:game_vertex_id(),
      npc:id())
end

function give_racia()
this.create_item("racia")
end

 

Сделал биндер юзанья в bind_stalker. Когда просто используешь рацию - ничего не происходит, а когда в зоне диалога - отлично работает.

https://www.youtube.com/embed/U0no-6tCxhU

Канал на "Трубе"

Ссылка на комментарий
Wookie, в теме "Справочник по функциям и классам" есть подробное описание скриптовой составляющей диалогов, в том числе в третьей части рассказывается и о расстоянии на котором можно открыть диалоговое окно: "Диалоги. Часть 3"
Ссылка на комментарий
_Призрак_, а поделиться информацией (что/где править)? "Финалок" ведь немало (по числу патчей игры), да и во многих модах движек со своими правками-примочками и ... единым переносом тут не обойтись.

"Но иногда найдется вдруг чудак, этот чудак все сделает не так ..."© Машина времени

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

Artos

Могу. В функции апгрейда окна диалога стоит проверка на то что один из регистров меньше 3.0. Меняем это число например на 150.0 (подходящее число есть в длл), идем в xr_meet.script и удаляем оттуда проверку на 3.0 метра

Wookie

Какой патч? В ЛС.

Изменено пользователем _Призрак_

Freedom

Ссылка на комментарий
Wookie, Так же как и любой другой предмет , через аллспавн или скрипт.Только есть одна тонкость, инвентори бокс не имеет визуала, он как бы невидимый - визуал прикрепляется отдельно(тоесть можно сделать тайник и в машине и просто в стене).Попробуй посмотреть как в АМК рюкзаки сделаны.
Ссылка на комментарий

Подскажите пожалуйста..... как из сталкер тени чернобыля вырезать старый сюжет "Убить Стрелка"???

Заранее благодарен!!! :)

Используй поиск по форуму и вообще по инету. Вопрос изъезжен вдоль и поперек. --/Artos

 

Добавлено через 57 мин.:

А можешь просто написать что удалить нужно что бы убрать старый сюжет и вступительный ролик......просто мене не нужен фриплей, я делать хочю глобальный мод и поетому фриплей не канает!.....можно както по другому?помогите......я не могу найти!!!( :wacko2:

Изменено пользователем Artos
Ссылка на комментарий

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

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

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

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

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

Войти

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

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

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