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

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


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

@mole venomous , спасибо за ответ! Уже находил этот код на другом сайте с тем же readme, но до конца не понял. Раз тут посоветовали, то сел дальше его изучать и заметил, что он использует методы, которые, если я правильно понял, не являются стандартными для чистого SoC без модов.

Например в строке "amk.convert_npc[id] = true". Поиск метода convert_npc по файлам gamedata папок, которые я сейчас использую ("config", "scripts", "sounds", "spawns", "textures") не дал результата. То же самое и с методами "read_stalker_params", "write_stalker_params".

 

Не нашёл в lua_help.script:

  •     updhealth;
  •     killerid;
  •     game_death_time[number];
  •     skeleton_flags;

Стандартные:

  •  heart:parent() - насколько я понял, возвращает родителя для объекта (артефакта). Если он лежит в трупе, то это мёртвый NPC. class game_object {}.
  •  function id() - class game_object {} по lua_help.script, возвращает id объекта.
  •  level.main_input_receiver() - возвращает текущее активное окно.
  •  alife() - класс alife_simulator - получаем сам объект класса alife_simulator.
  •  function set_switch_online(number, boolean) - class alife_simulator {} - видимо установить статус онлайн объекта с идентификатором id при boolean = true (перевести объект в онлайн).
  •  set_switch_offline(id, boolean) - class alife_simulator {} - установить статус оффлайн объекта с идентификатором id при boolean = true (перевести объект в оффлайн).
  •  level.object_by_id(number) - клиентский объект по его id. Возвращает nil, если объект не в онлайне или не существует. Пространство имён level.
  •  function object() - class entity_action {} - ???
  •  property health - class game_object {} - параметр "здоровье" объекта?..
  •  function log(string) - ?.. (логирование куда-то?)

@AndreySol понял. all.spawn уже распакованным болтается, но через него манипуляций пока не пробовал проводить, только изучал структуру.

Получается, мне нужен файл, полученный из all.spawn, с префиксом "alife_", далее номер уровня и имя нужной локации с NPC ("alife_l05_bar.ltx"). В нём я уже находил секцию Петренко. Вот её код.

Скрытый текст
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

[7212]

; cse_abstract properties
section_name = stalker_trader
name = bar_dolg_petrenko
position = 207.565994262695, 0.429977655410767, 60.4622344970703
direction = 0, 1.57078814506531, 0
id = 65535
version = 118
script_version = 6
spawn_id = 3434

; cse_alife_trader_abstract properties
money = 5000
character_profile = bar_dolg_petrenko

; cse_alife_object properties
game_vertex_id = 1203
distance = 9.8000002
level_vertex_id = 50435
object_flags = 0xfffffff7
custom_data = <<END
[smart_terrains]
none = true

[logic]
cfg = scripts\bar_petrenko.ltx
END
story_id = 506

; cse_visual properties
visual_name = actors\dolg\stalker_do_balon_3

; cse_alife_creature_abstract properties
g_team = 0
g_squad = 5
g_group = 4
dynamic_out_restrictions = 
dynamic_in_restrictions = 

; cse_alife_monster_abstract properties
equipment_preferences = 2, 0, 2, 1, 1
main_weapon_preferences = 2, 2, 2, 0

; cse_ph_skeleton properties

; se_stalker properties
upd:health = 1
upd:timestamp = 0
upd:creature_flags = 0
upd:position = 207.565994262695, 0.429977655410767, 60.4622344970703
upd:o_torso = 1.57078814506531, 0, 0
upd:g_squad = 5
upd:g_group = 4

; cse_alife_human_stalker properties
upd:start_dialog = 

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

 

 

И в таком случае номером секции будет являться число в квадратных скобках "[]" = 7212? Думал, что это служебный ID, который присваивает перепаковщик, чтобы корректно запаковывать потом all.spawm обратно и сама игра про него не знает. Файл "alife_l05_bar.ltx" нужно куда-то подсовывать игре, или в директории игры вообще может не быть распакованного "all.spawn", и игра уже знает про номер секции, хоть этот ID и не имеет отношения к ID объекта?

 

И, получается, раз есть функция для спавна по номеру секции, если про него знает игра, то возможно есть функция спавна по имени объекта (name = bar_dolg_petrenko)?

Как только попробую оба способа, отпишусь.

Ссылка на комментарий
5 часов назад, LunInFog сказал:

не являются стандартными для чистого SoC без модов

Да, тебе нужна скриптовая база АМК, а именно файл amk.script.

оригинальный

  • Полезно 1

Здесь могла быть ваша реклама.

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

@LunInFog 

В описании из Справочника по ф-циям и классам кажись ошибка - не номер секции нужен, а параметр spawn_id = ххх. Проверь, у меня такой спавн работает без проблем:

local obj = alife():create(389) -- 389 - spawn_id какой-то псины на кордоне

  • Полезно 1
Ссылка на комментарий

Подскажите, как в АМК 1.4.1 вернуть выбросы во фриплее? Код ниже в файле amk_mod.script комментировал (по совету ранее в теме), но выбросов так и не появилось. Хотя судя по коду в условии прописаны выбросы когда игрок на территории ЧАЭС.

if bt==2 and amk.load_variable("freeplay",0)~=2 then return end

 

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

misfire_probability и misfire_condition_k позволяют настроить конфиг оружия вплоть до осечки при каждом выстреле. 

  • Согласен 1

Отношения между людьми- главная ценность в человеческом обществе.
Любая полученная информация- это только повод для размышлений, а не побуждение к действию.
Это должен знать каждый: уроки боевой подготовки Дяди Саши https://yadi.sk/d/60Ec2B06goLAE
Накопано и накнопано:https://yadi.sk/d/mzVY5jQEspwpt

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

@killersan6 из того, что помню прямо сейчас: если состояние >= 0.95, то осечка даже не считается. Если меньше, то используется хитрая формула, которую я без поиска по исходниками не скажу.

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

@aromatizer 
Да я знаю, меня формула расчета интересует.

@dsh 
Если будет в свободное время возможность посмотреть в сурцах - буду крайне признателен!

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

@killersan6 ,

Скрытый текст


float CWeapon::GetConditionMisfireProbability() const
{
    if( GetCondition()>0.95f ) return 0.0f;
    float mis = misfireProbability+powf(1.f-GetCondition(), 3.f)*misfireConditionK;
    clamp(mis,0.0f,0.99f);
    return mis;
}


 

Не оно? Weapon.cpp

И дальше выборка рандом:

Скрытый текст

 

BOOL CWeapon::CheckForMisfire    ()
{
    if (OnClient()) return FALSE;

    float rnd = ::Random.randF(0.f,1.f);
    float mp = GetConditionMisfireProbability();
    if(rnd < mp)
    {
        FireEnd();

        bMisfire = true;
        SwitchState(eMisfire);        
        
        return TRUE;
    }
    else
    {
        return FALSE;
    }
}

 

 

Изменено пользователем Купер
Ссылка на комментарий
2 минуты назад, killersan6 сказал:

меня формула расчета интересует.

Какой результат хочешь получить в игре?

Отношения между людьми- главная ценность в человеческом обществе.
Любая полученная информация- это только повод для размышлений, а не побуждение к действию.
Это должен знать каждый: уроки боевой подготовки Дяди Саши https://yadi.sk/d/60Ec2B06goLAE
Накопано и накнопано:https://yadi.sk/d/mzVY5jQEspwpt

Ссылка на комментарий
1 час назад, killersan6 сказал:

Частоту поломок хочу грамотно увеличить.

Тогда надо еще и condition_shot_dec править.

Отношения между людьми- главная ценность в человеческом обществе.
Любая полученная информация- это только повод для размышлений, а не побуждение к действию.
Это должен знать каждый: уроки боевой подготовки Дяди Саши https://yadi.sk/d/60Ec2B06goLAE
Накопано и накнопано:https://yadi.sk/d/mzVY5jQEspwpt

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

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

Отношения между людьми- главная ценность в человеческом обществе.
Любая полученная информация- это только повод для размышлений, а не побуждение к действию.
Это должен знать каждый: уроки боевой подготовки Дяди Саши https://yadi.sk/d/60Ec2B06goLAE
Накопано и накнопано:https://yadi.sk/d/mzVY5jQEspwpt

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

Главное - чтобы тебе нравилось... Даже если изобретаешь велосипед.)

 

Отношения между людьми- главная ценность в человеческом обществе.
Любая полученная информация- это только повод для размышлений, а не побуждение к действию.
Это должен знать каждый: уроки боевой подготовки Дяди Саши https://yadi.sk/d/60Ec2B06goLAE
Накопано и накнопано:https://yadi.sk/d/mzVY5jQEspwpt

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

Народ подскажите, как в ТЧ повысить иммунитет квестовым нпс, без ковыряние all.spawn, и конфинга Сахарова 

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

@андрей дронав в файле creatures\immunities.ltx есть секции, вырвал кусок кода для примера (не из оригинала):

Скрытый текст

;-- Секции иммунитетов сталкеров к повреждениям
;-- Различаются по степени защищённости, т.е. по одетому костюму
;-- Будет привязано к костюмам в config\models\capture\.ltx (а то, в свою очередь, прописано в меше самой модели)

[no_resistance]
burn_immunity                 = 0.0
strike_immunity             = 1.0
shock_immunity                 = 1.0
wound_immunity                = 1.0
radiation_immunity             = 1.0
telepatic_immunity             = 1.0
chemical_burn_immunity         = 1.0
explosion_immunity             = 1.0
fire_wound_immunity          = 1.0

[low_resistance]
burn_immunity                 = 0.0
strike_immunity             = 0.90
shock_immunity                 = 0.75
wound_immunity                = 0.90
radiation_immunity             = 0.0
telepatic_immunity             = 0.90
chemical_burn_immunity         = 0.75
explosion_immunity             = 0.90
fire_wound_immunity          = 0.90

[medium_resistance]
burn_immunity                 = 0.0
strike_immunity             = 0.81
shock_immunity                 = 0.60
wound_immunity                = 0.81
radiation_immunity             = 0.0
telepatic_immunity             = 0.81
chemical_burn_immunity         = 0.60
explosion_immunity             = 0.81
fire_wound_immunity          = 0.81

[high_resistance]
burn_immunity                 = 0.0
strike_immunity             = 0.72
shock_immunity                 = 0.0
wound_immunity                = 0.72
radiation_immunity             = 0.0
telepatic_immunity             = 0.72
chemical_burn_immunity         = 0.0
explosion_immunity             = 0.45
fire_wound_immunity          = 0.72

[monolit_resistance]
burn_immunity                 = 0.0
strike_immunity             = 0.64
shock_immunity                 = 0.0
wound_immunity                = 0.45
radiation_immunity             = 0.0
telepatic_immunity             = 0.0
chemical_burn_immunity         = 0.0
explosion_immunity             = 0.30
fire_wound_immunity          = 0.64

[immortal_resistance]
burn_immunity                 = 0.0
strike_immunity             = 0.0
shock_immunity                 = 0.0
wound_immunity                = 0.0
radiation_immunity             = 0.0
telepatic_immunity             = 0.0
chemical_burn_immunity         = 0.0
explosion_immunity             = 0.0
fire_wound_immunity          = 0.0

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

  • Спасибо 1
  • Полезно 1

Здесь могла быть ваша реклама.

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

Есть ещё вопрос. 

Заменил .ogf модель антирада. при покупке/спавне в рюкзак и выбрасывании на землю никаких проблем, модель та самая, но антирады которые спавнятся при НИ на открытой местности, используют старую модель. Например в кладовке Борова, лежат ПЫСовские модели. 

Такое не только с антирадами. 

Что я упустил? 

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

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

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

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

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

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

Войти

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

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

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