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

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


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

malandrinus

Сорри за свой некорректный вопрос, совсем замодился ...

Т.к. мы в топике '[SoC] Ковыряемся в файлах' - то и не'посчитал обязательным уточнять для какого именно варианта игры (ТЧ/ЧН/ЗП).

Сам же выдрал этот класс (Z_CFIRE) из ЧН и приделал к костровому пламени (zone_flame_small) в ТЧ и подзабыл.

Более точный вопрос таков:

В классе/массиве 'clsid' (ТЧ/SoC) имеется под неизвестным мне ключом массива - 'class_id' (числовое значение поля в массиве), который соответствует костровому пламени в ЧН/ЗП (класс Z_CFIRE или скрипт-класс 'clsid.zone_campfire').

Прямой перебор массива показывает, что класс имеется и в чистой игре, но не задействован.

При присвоении секции [zone_flame_small] класса Z_CFIRE (вместо Z_MBALD) и в ТЧ появляется возможность легко отличить костры от аномалий (по class_id), однако напрямую (по ключу) этот класс недоступен из массива 'clsid'.

Каков этот ключ или как его определить? Иначе: каков скриптовой класс (в ТЧ!) для полученного таким образом объекта?

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

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

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

Полтергейст,

кто-нибудь знает, что это за действия в stalker_ids?

action_solve_zone_puzzle

detect_anomaly

action_accomplish_task

и работают ли они?

action_solve_zone_puzzle - это очевидно действие по "решению загадки Зоны" из "того самого Сталкира", который был сделан с полной симуляцией и потом благополучно выброшен на помойку за полной неиграбельностью =) В старых интервью можно почитать, что там должны были делать неписи. Кажется найти и толкнуть торговцу последовательность артов. Осталось ли от этого что-то сейчас, сложно сказать. Даже если и осталось, то работать скорее всего не будет.

detect_anomaly - мне кажется, где-то даже видел оживление этого действия в ТЧ. Неписи машут детектором и пытаются определить наличие аномалии. Говорили вроде, что глючит страшно.

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

 

Artos,

В классе/массиве 'clsid' (ТЧ/SoC) имеется под неизвестным мне ключом массива - 'class_id' (числовое значение поля в массиве), который соответствует костровому пламени в ЧН/ЗП (класс Z_CFIRE или скрипт-класс 'clsid.zone_campfire').

Прямой перебор массива показывает, что класс имеется и в чистой игре, но не задействован.

При присвоении секции [zone_flame_small] класса Z_CFIRE (вместо Z_MBALD) и в ТЧ появляется возможность легко отличить костры от аномалий (по class_id), однако напрямую (по ключу) этот класс недоступен из массива 'clsid'.

Каков этот ключ или как его определить? Иначе: каков скриптовой класс (в ТЧ!) для полученного таким образом объекта?

Я честно тебя не понимаю. Объясни мне, что ты с делал в ТЧ с классом Z_CFIRE? Потому что в ТЧ нет движкового класса для костров, нет никакого Z_CFIRE и мне непонятно, что именно ты сделал.

Список всех классов для всех версий у меня давно валяется. Хотел сделать статью в теме справочника, да всё руки не доходят.

 

Плагины Total Commander для работы с игровыми архивами:

Архиваторный плагин (для работы с одиночным архивом): link1 link2

Системный плагин (для распаковки установленной игры): link1 link2

 

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

malandrinus

В общем то сейчас после попытки доформулировать/пояснить сделанное - разобрался (почти) ...

 

Пояснение (может кому пригодится):

 

В ТЧ костры (точнее пламя, которое и дает хиты) приходится отлавливать (во многих модах) по их секции (zone_flame_small) и по системному имени, отсекая лишнее маской (типа: "flame_small").

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

б) Костры попадают в один ряд с аномалиями других типов, и приходится дополнительно фильтровать в 'аномальных' алгоритмах, например при дин.респавне. Тоже съедает ресурсы.

в) Поведенческие схемы также имеют мешанину, т.е. камперам вроде как не требуется шарахаться от "аномального костра" перед которым и воседает/распи(е)вает ...

 

В ЧН/ЗП костры уже выделены в отдельный класс (Z_CFIRE => clsid.zone_campfire), что облегчает работу с ними.

 

Ничего не мешает вроде как сделать подобное и в ТЧ(!).

Находим в конфиг-файле '\gamedata\config\misc\zone_kampfire.ltx' искомую секцию [flame_small] и меняем в ней строку/параметр^

'class = Z_MBALD' на 'class = Z_CFIRE'.

Костры по прежнему остаются кострами, которые и горят и жгутся (для неписей и актора) ... но уже перестали определяться аномальными скриптами(!).

 

Моя заморочка, которая и породила вопрос: В массиве 'clsid' исходной игры имеем 187 полей для различных зарегестрированных в игре классов.

Но(!), в рабочем моде, т.е. при добавлении доп.классов, одно поле 'clsid.??? = 185' оказалось пропущенным (пустым) и мне не удалось его определить. Получилась 'дырка'.

Предположив, что это (дырка) и есть поле для кострового пламени (глупое конечно предположение), я и искал неизвестный мне ключ для прямого доступа к классу полученного вышеописанным способом объекту.

 

В общем в итоге: При изменении класса Z_MBALD на Z_CFIRE для 'zone_flame_small' получаем прямой доступ к объектам кострового пламени как:

zone_flame_small=[Z_CFIRE] = clsid.zone_dead = 178 (в чистой игре!). Быстро, удобно и не им еем коллизий (вроде) с чем-то другим. :-)

 

===

(Вот только ... что же за дырка с 185-ым классом(?) не дает покоя :-) )

;--/ userdata 'clsid' (ClassID)
clsid.art_bast_artefact       =   0
clsid.art_black_drops         =   1
clsid.art_gravi_black         =   2
clsid.art_dummy               =   3
clsid.art_electric_ball       =   4
clsid.art_faded_ball          =   5
clsid.art_galantine           =   6
clsid.art_gravi               =   7
clsid.art_mercury_ball        =   8
clsid.art_needles             =   9
clsid.art_rusty_hair          =  10
clsid.art_thorn               =  11
clsid.art_zuda                =  12
clsid.bloodsucker             =  13
clsid.boar                    =  14
clsid.burer                   =  15
clsid.cat                     =  16
clsid.controller              =  17
clsid.crow                    =  18
clsid.dog_black               =  19
clsid.psy_dog_phantom         =  20
clsid.psy_dog                 =  21
clsid.dog_red                 =  22
clsid.flesh                   =  23
clsid.flesh_group             =  24
clsid.fracture                =  25
clsid.pseudo_gigant           =  26
clsid.graph_point             =  27
clsid.chimera                 =  28
clsid.phantom                 =  29
clsid.poltergeist             =  30
clsid.snork                   =  31
clsid.stalker                 =  32
clsid.script_stalker          =  33
clsid.trader                  =  34
clsid.script_trader           =  35
clsid.tushkano                =  36
clsid.zombie                  =  37
clsid.wpn_ammo                =  38
clsid.artefact                =  39
clsid.wpn_ammo_m209           =  40
clsid.wpn_ammo_og7b           =  41
clsid.wpn_ammo_vog25          =  42
clsid.game_cl_artefact_hunt   =  43
clsid.game_cl_deathmatch      =  44
clsid.game_cl_LastStanding    =  45
clsid.game_cl_single          =  46
clsid.game_cl_team_deathmatch =  47
clsid.helicopter              =  48
clsid.script_heli             =  49
clsid.car                     =  50
clsid.device_pda              =  51
clsid.device_detector_simple  =  52
clsid.device_torch            =  53
clsid.equ_exo                 =  54
clsid.equ_military            =  55
clsid.equ_scientific          =  56
clsid.equ_stalker             =  57
clsid.equ_stalker_s           =  58
clsid.wpn_grenade_f1          =  59
clsid.wpn_grenade_fake        =  60
clsid.level                   =  61
clsid.game                    =  62
clsid.wpn_grenade_rgd5        =  63
clsid.wpn_grenade_rpg7        =  64
clsid.hud_manager             =  65
clsid.obj_antirad             =  66
clsid.obj_attachable          =  67
clsid.obj_bandage             =  68
clsid.obj_bolt                =  69
clsid.obj_bottle              =  70
clsid.obj_document            =  71
clsid.obj_explosive           =  72
clsid.obj_food                =  73
clsid.obj_medkit              =  74
clsid.level_changer           =  75
clsid.main_menu               =  76
clsid.mp_players_bag          =  77
clsid.online_offline_group    =  78
clsid.actor                   =  79
clsid.obj_breakable           =  80
clsid.obj_climable            =  81
clsid.hanging_lamp            =  82
clsid.inventory_box           =  83
clsid.obj_physic              =  84
clsid.script_phys             =  85
clsid.projector               =  86
clsid.switcher                =  87
clsid.obj_phys_destroyable    =  88
clsid.obj_phskeleton          =  89
clsid.respawn                 =  90
clsid.script_zone             =  91
clsid.artefact_s              =  92
clsid.car_s                   =  93
clsid.script_object           =  94
clsid.smart_terrain           =  95
clsid.smart_zone              =  96
clsid.bloodsucker_s           =  97
clsid.boar_s                  =  98
clsid.burer_s                 =  99
clsid.cat_s                   = 100
clsid.chimera_s               = 101
clsid.controller_s            = 102
clsid.psy_dog_phantom_s       = 103
clsid.psy_dog_s               = 104
clsid.dog_s                   = 105
clsid.flesh_s                 = 106
clsid.gigant_s                = 107
clsid.fracture_s              = 108
clsid.poltergeist_s           = 109
clsid.pseudodog_s             = 110
clsid.snork_s                 = 111
clsid.tushkano_s              = 112
clsid.zombie_s                = 113
clsid.hlamp_s                 = 114
clsid.space_restrictor        = 115
clsid.script_restr            = 116
clsid.spectator               = 117
clsid.game_sv_artefact_hunt   = 118
clsid.game_sv_deathmatch      = 119
clsid.game_sv_LastStanding    = 120
clsid.game_sv_single          = 121
clsid.game_sv_team_deathmatch = 122
clsid.device_torch_s          = 123
clsid.turret_mgun             = 124
clsid.game_ui_artefact_hunt   = 125
clsid.game_ui_deathmatch      = 126
clsid.game_ui_single          = 127
clsid.game_ui_team_deathmatch = 128
clsid.wpn_ak74_s              = 129
clsid.wpn_binocular_s         = 130
clsid.wpn_bm16_s              = 131
clsid.wpn_groza_s             = 132
clsid.wpn_hpsa_s              = 133
clsid.wpn_knife_s             = 134
clsid.wpn_lr300_s             = 135
clsid.wpn_pm_s                = 136
clsid.wpn_rg6_s               = 137
clsid.wpn_rpg7_s              = 138
clsid.wpn_scope_s             = 139
clsid.wpn_shotgun_s           = 140
clsid.wpn_svd_s               = 141
clsid.wpn_svu_s               = 142
clsid.wpn_usp45_s             = 143
clsid.wpn_val_s               = 144
clsid.wpn_vintorez_s          = 145
clsid.wpn_walther_s           = 146
clsid.wpn_ak74                = 147
clsid.wpn_binocular           = 148
clsid.wpn_bm16                = 149
clsid.wpn_fn2000              = 150
clsid.wpn_fort                = 151
clsid.wpn_grenade_launcher    = 152
clsid.wpn_groza               = 153
clsid.wpn_hpsa                = 154
clsid.wpn_knife               = 155
clsid.wpn_lr300               = 156
clsid.wpn_mounted             = 157
clsid.wpn_pm                  = 158
clsid.wpn_rg6                 = 159
clsid.wpn_rpg7                = 160
clsid.wpn_scope               = 161
clsid.wpn_shotgun             = 162
clsid.wpn_silencer            = 163
clsid.wpn_stat_mgun           = 164
clsid.wpn_svd                 = 165
clsid.wpn_svu                 = 166
clsid.wpn_usp45               = 167
clsid.wpn_val                 = 168
clsid.wpn_vintorez            = 169
clsid.wpn_walther             = 170
clsid.wpn_wmagaz              = 171
clsid.wpn_wmaggl              = 172
clsid.zone_bfuzz_s            = 173
clsid.zone_electra_s          = 174
clsid.zone_galant_s           = 175
clsid.zone_ice_s              = 176
clsid.zone_mbald_s            = 177
clsid.zone_mincer_s           = 178
clsid.zone_zharka_s           = 179
clsid.zone_acid_fog           = 180
clsid.ameba_zone              = 181
clsid.zone_bfuzz              = 182
clsid.zone_dead               = 183;--/#!# Z_CFIRE
clsid.zone_galantine          = 184
clsid.<NOT_Found!>            = 185;--/#?#
clsid.zone_mosquito_bald      = 186
clsid.zone_mincer             = 187
clsid.zone_mines_s            = 188
clsid.nogravity_zone          = 189
clsid.zone_radioactive        = 190
clsid.zone_rusty_hair         = 191
clsid.team_base_zone          = 192
clsid.torrid_zone             = 193
clsid.zone                    = 194

 

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

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

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

Artos,

Находим в конфиг-файле '\gamedata\config\misc\zone_kampfire.ltx' искомую секцию [flame_small] и меняем в ней строку/параметр^

'class = Z_MBALD' на 'class = Z_CFIRE'.

Костры по прежнему остаются кострами, которые и горят и жгутся (для неписей и актора) ... но уже перестали определяться аномальными скриптами(!).

Я понял. Так делать в общем нельзя. Класса Z_CFIRE в ТЧ нет, а сделать его (или точнее не его, а скриптовый сет с таким именем) можно только зарегистрировав его в class_registrator.script.

 

Теперь, что происходит у тебя. Здесь нужны некоторые пояснения. Движок, когда ему даёшь конфиговое имя сета (типа Z_MBALD) вычисляет на основе этого имени некий внутренний идентификатор, который затем по определённому алгоритму преобразуется в скриптовый номер класса (то, что мы получаем функцией clsid). Есть несколько моментов:

Первое. Всего может быть не больше 256 таких скриптовых номеров. Нумерация начинается от нуля и идёт без разрывов.

Второе. Конкретный номер можно зарегистрировать только в скрипте class_registrator.script (кроме уже зарегистрированных в движке).

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

Четвёртое. В силу такого принципа работы есть строковые идентификаторы, которые в итоге дают одинаковые числовые значения.

 

Теперь. Если не регистрировал, то происходит занятная вещь. По строке-имени класса вычисляется число и ты получаешь какой-то один из имеющихся идентификаторов (в пределах от 0 до максимального имеющегося). Но это не новый класс, а какой-то из имеющихся. Может быть и скриптовый и движковый. Это неважно, главное, что его строкове имя оказалось по алфавиту близко той строке, что ты указал в параметре class в секции. В данном случае ты указал Z_CFIRE, а этим самым фактически написал Z_DEAD. Это легко понять, если упорядочить имена сетов по алфавиту:

Z_BFUZZ

(Z_CFIRE)

Z_DEAD

Z_GALANT

Видно, что Z_CFIRE, если бы был, то встал бы между Z_BFUZZ и Z_DEAD и там и встаёт в ЧН. Но раз его в ТЧ нет, то вместо него вычисляется ближайший по алфавиту Z_DEAD. Так уж вышло, что это родственный класс, тоже некая зона. Поэтому сбоя не происходит.

 

Но ещё раз. Z_DEAD - это строкове имя в принципе другого, уже существующего класса. У него, как верно было подмечено, и законное скриптовое имя есть clsid.zone_dead.

 

Надеюсь, что объяснения были понятны, и почему так делать не стоит тоже надеюсь понятно. Правильным было-бы создать свой сет, как я описывал в статье в справочнике. Тогда получишь законное новое имя и в том числе в классе clsid.

 

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

Вдогонку

(Вот только ... что же за дырка с 185-ым классом(?) не дает покоя :-) )

clsid.zone_galantine = 184

clsid.<NOT_Found!> = 185;--/#?#

clsid.zone_mosquito_bald = 186

Вполне возможно, что это Z_MINES, скриптовый идентификатор тогда clsid.zone_mines_s. Мне не проверить, поскольку мод не установлен.

 

Плагины Total Commander для работы с игровыми архивами:

Архиваторный плагин (для работы с одиночным архивом): link1 link2

Системный плагин (для распаковки установленной игры): link1 link2

 

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

malandrinus

То, что 'так делать нельзя' - знаю, не новичок все же ... Но как говориться ... если лчень хотсА, то ... можно. :-)

Добавив подобным образом (вначале!) - не нашел никаких проблем/ошибок в игре - и использовал.

Одноко (еще раз спасибо твоему первому ответу!) сделал 'по-человечески', тем более это мне и так потребовалось.

 

Занес 'Z_CFIRE' с 'zone_campfire' в 'class_registrator.script', тем самым потеснив (как ты и сказал) 'clsid.zone_dead'.

Заодно конечно добавил обработчик "se_zones.se_zone_campfire", в котором теперь ловить все костры стало проще (чем перебором).

 

Однако с дыркой (теперь = 186) так и осталась непонятка. Твое предположение о 'Z_MINES' неверно, т.к. clsid.zone_mines_s есть в моей таблице (188), но ... буду искать (неспешно).

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

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

Где оружию присваивается класс и как создать новый класс, для использования в news_data?

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

Также хочу создать класс "Пулемёты", ну и соответствующие тексты для новостей.

Поиск не помог, извините, если вопрос задавался, 300 страниц этой темы я не осилю... был бы в шапку вынесен этот вопрос...

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

В желании выражается сущность человека.Я желаю всего и побольше :D
http://ltcraft.ru/r/f05bf7cd1c1cbe988a42c14bff48b060
Unreal_Sergey.gif

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

Unreal_Sergey

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

Freedom

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

Unreal_Sergey,

классы вшиты в движок, а оружие добавлять в новости - файл news_main.script, функция function get_weapon_type(weapon), дальше разберёшься, думаю.

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

в АМК 1.4 моде на ТЧ можно ставить собственные тайники. В самом начале Сидорович дает такую сумку за выполнение квеста в котором нужно артефакт принести. Подскажите пожалуйста что и куда нужно прописать чтобы торговец(Сидорович или Бармен) продавал эти сумки(тайники) которые при активации становятся стационарными тайниками.

З.Ы. Я надеюсь вы меня поняли :ny_ph34r_1:

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

http://www.amk-team.ru/forum/index.php?s=&...st&p=185514

Или надо еще рассказать как прописывать в продажу?

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

Доброго времени.

 

Хочу радикально снизить кол-во аномалий в народной солянке. Как понял, за это отвечает amk_anoms.script? Где можно почитать, как его править?

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

Gideon Vi,

Там всё очень просто: есть секции разных уровней.

В них прописаны координаты x,y и z и ещё, после запятой,

указан радиус зоны (в метрах), внутри которой не будут спавниться никакие аномалии.

Снял координату на местности, внёс в секцию нужной локации, указал радиус и всё.

 

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

И в результате все аномалии скопятся в "разрешённой" зоне. Количество их так не снизить, надо править список, "anoms_per_level" кажется.

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

antreg, но в таком случае не снизится их кол-во, а изменится ареал обитания? Меня не расположение, а кол-во напрягает: нравится изначальная концепция, когда аномалии были относительной редкостью.

Количество их так не снизить, надо править список, "anoms_per_level" кажется.

В ПМ посоветовали копать функцию function generate_anoms(). Пока добились того, что динамические аномалии совсем перестали спавниться:

while cnt < 0 do

Но есть желание просто уменьшить их объем в два-три раза.

 

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

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

Gideon Vi

Не ковыряй там, где не уверен ...

Смотришь табличку "level_anoms' в 'amk_anoms.script'.

 

На примере 1-ой строки таблицы (для АМК): l01_escape={100,150,1000,{mosquito_bald=60 ,mincer=30 ,witches_galantine=10}},

 

l01_escape - это уровень, для которого предназначены следующие параметры;

 

100,150,1000 - количества вномалий на локации: минимум. максимум, лимит;

Т.е. это именно то, что тебе нужно:

Минимум (100) - сколько минимально заспавнится аномалий на локацию при дин. (ре)спавне;

Максимум (150) - сколько максимум заспанится аномалий на локацию при дин. (ре)спавне;

Лимит(1000) - предел кол-ва аномалий для локации, т.е. аномалии более спавниться не будут.

Т.о. можешь управлять кол-вом аномалий на локациях, учитывая, что все предыдущие динамические аномалии при переходах/выбросах отключаются/удаляются.

 

Следующие данные - это процентное соотношение типов аномалий, которые будут рандомно спавниться. Сумма (60+30+10) должна обязательно быть равна 100(%). Так что можешь и ассортиментом аккуратно(побаловаться).

 

Прим: Для НС строки указанной таблицы отличаются значениями количеств и типами/названиями переменных для аномалий и их большим ассортиментом, а суть та же.

Изменено пользователем Artos
  • Спасибо 1

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

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

TRAMP14, в файле config\scripts\esc_trader_door.ltx убрать все и написать:

[logic]
active = ph_door@open

[ph_door@open]
closed = false
locked = false
snd_open_start = trader_door_open_start
snd_close_start = trader_door_close_start
snd_close_stop = trader_door_close_stop

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

Заспавнил Гг в другое место,начал новую игру ,дошёл до Сидора,а у него дверь закрыта!

Как сделать чтобы его дверь была открыта в самом начале игры?(Чтоб её можно было самому открывать\закрывать).

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

zoidberg123456789, пропиши ей такую логику

[logic]

active = ph_door@closed

 

[ph_door@locked]

locked = true

snd_open_start = trader_door_unlock

on_info = {+esc_trader_can_leave} ph_door@closed %=play_snd(device\door_servomotor)%

 

[ph_door@closed]

closed = true

locked = false

on_use = ph_door@open %-esc_close_door%

snd_open_start = trader_door_open_start

snd_close_start = trader_door_close_start

snd_close_stop = trader_door_close_stop

 

[ph_door@open]

closed = false

locked = false

on_use = ph_door@closed

on_info = {+esc_close_door} ph_door@closed

snd_open_start = trader_door_open_start

snd_close_start = trader_door_close_start

snd_close_stop = trader_door_close_stop

 

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

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

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

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

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

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

Войти

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

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

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