Модостроение. Общие вопросы и ответы
|
|
denis2000 | Дата: Сб, 15.06.2013, 11:51 | Сообщение # 1 |
Полевой исследователь
Ученые сталкеры
Сообщений: 2399
| Помощь тем кто хочет знать больше о игре и модах Если у вас появились вопросы по модостроению в игре S.T.A.L.K.E.R. Задавайте их в этой теме - умные головы, модосторители и просто разбирающиеся в программировании люди вам ответят.
Много интересного материала здесь (wiki), Lua_help.script, Help из SDK 0.7
Сборник модостроения ЗП v10.10.11 (автор: XOBAH): *.CHM, *.HTML [cut noguest=Если у вас не открывается файл CHM]Если у вас не открывается файл: 1. Запустите [Пуск]=>[Выполнить] (либо хот-кей [WIN]+[R]) 2. Введите команду (без кавычек) "regsvr32 %windir%\system32\hhctrl.ocx" 3. Если вылезло окно об успешном завершении вы все сделали правильно и можете перезагружать компьютер (а может и не надо) Также: файлы МОГУТ не открываться если в пути к файлу есть: символы кириллицы, "_", "#" Также: есть не стандартные программы-просмоторщики CHM файлов. Например: FBReader[/cut] [cut=Где найти лог игры после вылета]Что такое LOG ошибки, и как мне его найти? Это система отладки происходивших вылетов, которая подается игрой в форме текста, хотя не всегда. Для того чтоб найти LOG необходимо зайти вот сюда:
В Win хр лог находится:
C:\Documents and Settings\All Users\Документы\S.T.A.L.K.E.R. - Зов Припяти\logs
Затем открываете первый файл в формате TXT, и в нем отбираете с низу 25 строчек. После кидаете эти 25 строчек в сообщение на форум.
В Win7 лог находится C:\Users\Public\Documents\S.T.A.L.K.E.R. - Зов Припяти\logs
Путь к папке с логом можно найти открыв файл fsgame.ltx который находится в корневой директории ЗП, за это отвечает строка: ... $app_data_root$ = true | false| $fs_root$| users\(тут мы указываем что папка пользователя, будет хранится рядом с Fsgame.ltx) ... $logs$ = true| false| $app_data_root$| logs\(а тут мы указываем что в папке пользователя, в подпапке Logs будут храниться наши логи) ... [/cut][cut=Получение более подробной информации о вылете (ХОВАН)] Открываем файл _g.script и ищем такую функцию: function abort(fmt, ...) Там есть заккомментированная строчка "--error_log(reason)", ее и надо расскомментировать, должно получиться вот так: Код function abort(fmt, ...) local reason = string.format(fmt, ...) error_log(reason) end Вот для примера два одинаковых вылета, первый с функцией по умолчанию, второй - с поправленной функцией
Первый: Код Expression : !m_error_code Function : raii_guard::~raii_guard File : D:\prog_repository\sources\trunk\xrServerEntities\script_storage.cpp Line : 748 Description : ....a.l.k.e.r. - Зов Припяти\gamedata\scripts\_g.script:478: bad argument #2 to 'format' (string expected, got nil) Второй: Код Expression : 0 Function : ErrorLog File : D:\prog_repository\sources\trunk\xrServerEntities\script_engine_script.cpp Line : 49 Description : 'Attempt to read a non-existant string field 'path_walk' in section 'walker@mechanic' [/cut]
Перед тем, как задать вопрос в этой теме, прочтите все предыдущие страницы, статьи в wiki по ссылке из шапки и соседнюю тему "Курс молодого бойца", возможно Ваш вопрос уже рассматривался.
Если произошел вылет - выкладываем лог! Вопрос ставим четко, не забываем указывать версию игры, установленные моды их версии, установленные фиксы модов и подробно ваши правки. Помните чем подробнее вопрос, тем точнее ответ.
Посты, для которых есть свои категории, из этой темы будут удаляться или перемещаться в соответсвующую тему. Персональных извещений в ЛС о переносе\удалении поста не будет, ищите сами. Учитывайте, что в системах Ucoz тема не обновляется в статистике при переносе поста. Посты, написанные здесь-же после переноса, будут расцениваться как кросспостинг, со всеми вытекающими
[cut noguest=Первый юбилей нашей темы] Здравствуйте господа модостроители, и все так или иначе причастные к этому. Нашей теме исполнился 1 год. От души поздравляю Всех Вас дорогие друзья, творческих успехов. Хочу так же выразить отдельную благодарность denis2000 и ХОВАН. tracker 23.06.11
[/cut]
|
|
|
Эти 0 пользователя(ей) поблагодарили denis2000 за это полезное сообщение: |
|
|
a4927860 | Дата: Сб, 05.07.2014, 13:04 | Сообщение # 496 |
Новичок
Пользователи
Сообщений: 81
| Добрый день! Решил вот пока выходные заняться сталкером.
Есть идея как усложнить жизнь игоку придав реализма: 1) реалистичные магазины ввести новые предметы магазины для всех видов оружия, при этом магазины при использовании не тратяться а пустеют как оно должно выглядеть - имеем 2 предмета в инвентаре по использованию предмета магазин - проверяем наличие предмета патроны - если есть - заряжаем магазин (удаляем магазин пустой - создаем полный) - тут все приблезительно понятно вот только дальше возникают трудности... как считать количество патронов в магазине например? как сделать чтобы они были не стакающиеся между собой?
2) реалистичный рюкзак ограничить количество места (клеток) в рюкзаке и ввести предмет Рюкзак - бокс который можно таскать с собой и который весит как свой вес + вес всех предметов внутри себя. при использовании предмета рюкзак мы на 5 сек делаем игрока непередвигаемым и не используем предметы - это как делать тоже понятно... Но вот как ограничить рюкзак теперешний? как сделать чтобы предметы складывались в бокс и менялся его вес?Добавлено (05.07.2014, 13:04) --------------------------------------------- Ну и раз уж написал - в SGM есть телохранители (по умолчанию они в сквады не добавлены) 3) как добавить нпс в сквад скриптом? или как сделать сквад активным если один из нпс этого сквада уже создан? 4) как сделать нпс бессмертным, но не просто бессмертным а так чтобы присмерти он падал прося аптечку и становился бессмертным (нельзя было его добить)?
|
|
|
Эти 0 пользователя(ей) поблагодарили a4927860 за это полезное сообщение: |
|
|
denis2000 | Дата: Сб, 05.07.2014, 13:34 | Сообщение # 497 |
Полевой исследователь
Ученые сталкеры
Сообщений: 2399
| реалистичные магазины Это давно сделано в моде "Магазинное питание оружия" для ТЧ. Я делал адаптацию этого мода для текущей версии мода "Время альянса". реалистичный рюкзак Но вот как ограничить рюкзак теперешний? - а что тут сложного, итерируешся по предметам рюкзака и считаешь объем, если больше заданного - варианты действий: выкинуть последний добавленный предмет под ноги или обездвижить ГГ (например добавлением в рюкзак невидимого предмета с огромным весом). как сделать чтобы предметы складывались в бокс и менялся его вес Такой бокс есть в моде Смерти вопреки. Одним днем живу (там есть контейнер для артефактов с такими свойствами). А вес можно регулировать так, как это сделано в том же "Магазинном питании" - черная материя, предмет не отображающийся в рюкзаке но имеющий вес (в моде это оружие которое не имеет веса, но которое можно зарядить патронами которые весят 1кг или 0.1 кг, для регулировки веса) как добавить нпс в сквад скриптом? Обсуждалось совсем недавно - не ленитесь читать темы. как сделать сквад активным если один из нпс этого сквада уже создан? Если есть хоть один НПС в скваде, то он активен (или вы какую-то другую активность имеете ввиду). как сделать нпс бессмертным, но не просто бессмертным а так чтобы присмерти он падал прося аптечку и становился бессмертным (нельзя было его добить)? Элементарно - есть логика вашего НПС в ней делайте его бессмертным, например так: Код invulnerable = {=is_wounded} true, false Но вероятно в таком виде полного бессмертия добиться не получиться.
"Он ловко выхватил из-под себя табуретку и очень метко и сильно бросил ее в докладчика..." (Чугунный всадник)
|
|
|
Эти 0 пользователя(ей) поблагодарили denis2000 за это полезное сообщение: |
|
|
a4927860 | Дата: Сб, 05.07.2014, 17:32 | Сообщение # 498 |
Новичок
Пользователи
Сообщений: 81
| Спасибо за ответ!
1) Скачиваю - попробую разобраться.
2) На сколько я понял мне нужно: 2.1 перерисовать интерфейс так часть рюкзака была закрыта так как мне нужно 2.2 подсчитывать объем всех предметов в рюкзаке и складывать его (0_о а как его считать то?)
3) Телохранители: в SGM есть проводники и есть телохранители скрипт проводников настроен так что работает только с сквадами, телохранители в сквады не входят. если я делаю сквад (добавляю его в файлы) но не делаю его спавн (оставляю спавн телохранителей) то при запросе сквада телохранителя скрипт выдает nil (нпс есть а сквада нет) (добавление нпс в сквад скриптом искал в скриптах и в учебнике (КМБ) - пусто, но я еще раз пересмотрю)
4) спасибо - понял, применю
[cut=сожаление, страдание, боль]Ох жеж... это есть там а это есть там а этого всего столько...... на самом деле это проблема сталкера которая не разрешаема (по крайней мере я не видел ниодной реализации) во всех офлайновых популярных рпг уже давно есть прелоадеры модов. Если бы такой прелоадер появился для сталкера, или хотябы сделали прелоадер с указанием как делать моды чтобы он мог их кушать - то ресурс и сам Сталкер стали бы в разы популярнее... Сейчас же тонны матерьяла которые нельзя обьединять ни как кроме как руками.[/cut]
|
|
|
Эти 0 пользователя(ей) поблагодарили a4927860 за это полезное сообщение: |
|
|
denis2000 | Дата: Сб, 05.07.2014, 18:46 | Сообщение # 499 |
Полевой исследователь
Ученые сталкеры
Сообщений: 2399
| 1. Смотрите в личке. 2. Цитата a4927860 ( ) а как его считать то? Например так: [cut] Прописать в секцию каждому объекту параметр amount - равный объему предмета в литрах или дм^3. В скрипте bind_stalker.script в функции actor_binder:on_item_take (obj) вписать в самом начале Код amount.actor_inventory_control(obj) В скрипте amount.script вписать функцию: Код function actor_inventory_control(object) local ini = system_ini() local V = 0 local function V_object_item(item) if ini:line_exist(item:section(),"amount") then V = V + ini:r_float(item:section(),"amount") end end actor:inventory_for_each(V_object_item) if V > 100 then --Объем рюкзака например 100 л --Действие на превышение объема с учетом того что object - последний добавленный предмет end end [/cut] 3. Цитата a4927860 ( ) Телохранители: в SGM есть проводники и есть телохранители а. Зачем вам телохранителия в сквадах? б. Если вы описали секцию сквада и не спавнили сквад, то сквада нет (nil) - все закономерно! в. Не так уж и трудно найти: Добавить НПС в сквад
"Он ловко выхватил из-под себя табуретку и очень метко и сильно бросил ее в докладчика..." (Чугунный всадник)
|
|
|
Эти 0 пользователя(ей) поблагодарили denis2000 за это полезное сообщение: |
|
|
a4927860 | Дата: Сб, 05.07.2014, 20:37 | Сообщение # 500 |
Новичок
Пользователи
Сообщений: 81
| denis2000, Спасибо большое!
Еще раз понял что делать то в чем не разбираешься очень грустно и печально. Придумывать - вот это моя стезя.
Телохранителя в сквад чтобы можно было отрабатывать travel_manager смысл в том что телохранитель "всегда" с тобой (если не умер и не заглючил) соответственно заплатить ему за переход по локации (он то должен её как свои пять пальцев знать) гораздо логичнее чем вместе с ним бежать искать какого нибудь чудака который по локации идет.Добавлено (05.07.2014, 20:35) --------------------------------------------- сделал, потестил... 1) invulnerable = {=is_wounded} true, false не работает (или работает не так как я ожидаю) - телохранитель все равно мрет от вытрела любым тяжелым оружием (например гранатометом) вместо того чтобы упасть и грустить пока я не предложу ему аптечку
2) добавил в тревел вот такой вот костыль if get_object_squad(npc) == nil then %=create_squad(bodyguard_1:zat_a1)% %=create_squad_member(npc:bodyguard_1)% end Он при проверке игра вылетает без лога. Чувствую что должен был чтото добавить в то что написано - но без понятия что
%= % убирать пробовал... Добавлено (05.07.2014, 20:37) --------------------------------------------- Смысл то был таков - добавить существующего стоящего передо мной телохранителя в сквад чтобы он мог пройти проверки тревела...
|
|
|
Эти 0 пользователя(ей) поблагодарили a4927860 за это полезное сообщение: |
|
|
denis2000 | Дата: Сб, 05.07.2014, 22:02 | Сообщение # 501 |
Полевой исследователь
Ученые сталкеры
Сообщений: 2399
| Цитата a4927860 ( ) телохранитель все равно мрет от вытрела любым тяжелым оружием 200% работает! Что-то делали не так. Эта строка у меня добавлена во все секции bodyguard@*** и как только НПС переключился на секцию wonded то убить его невозможно. Да и еще если вы редактируете текущую рабочую секцию логики НПС, то изменения в ней вступят в силу только после перезагрузки секции (в общем случае увольте телохранителя и наймите его снова).
Цитата a4927860 ( ) добавил в тревел вот такой вот костыль Вы функции из логики применяете в скриптах! В скриптах нужно писать совершенно не так: Код xr_effects.create_squad(nil,nil,{"bodyguard_1","zat_a1"})
Цитата a4927860 ( ) добавить существующего стоящего передо мной телохранителя в сквад чтобы он мог пройти проверки тревела... Вообще телохранитель способен телепортироваться к ГГ при большом удалении от него, не помню точно работает ли это при телепортировании самого ГГ (посмотрел функции в принципе не должен он просто уйдет в офлайн и логика не сработает). Если не работает может не изобретать адский велосипед и просто доработать телепортацию телохранителя даже при таких скачках?
"Он ловко выхватил из-под себя табуретку и очень метко и сильно бросил ее в докладчика..." (Чугунный всадник)
|
|
|
Эти 0 пользователя(ей) поблагодарили denis2000 за это полезное сообщение: |
|
|
a4927860 | Дата: Сб, 05.07.2014, 22:25 | Сообщение # 502 |
Новичок
Пользователи
Сообщений: 81
| denis2000, я вам верю на слово - потому как при проверке он у меня умирает. нужно ли его переспаунивать для того чтобы применилась логика? может перейти на другую локацию и вернуться обратно?
Цитата denis2000 ( ) Вы функции из логики применяете в скриптах! В скриптах нужно писать совершенно не так: Код xr_effects.create_squad(nil,nil,{"bodyguard_1","zat_a1"})
простите - я не прав. но проблемы это не решает. я понял что очень плохо объясняю - так что попробую еще раз
в SGM 2.2 все вольно гуляющие сквады (их лидеры) могут быть проводниками и это замечательно, но мне нужно чтобы мой телохранитель тоже стал проводником, диалог я ему добавил, но он не проходит по тревел менеджеру потому что он не состоит в скваде. Мне нужно его (телохранителя) добавить в сквад для того чтобы он мог водить меня по локации. Добавить его я могу только в скрипте - и возникает вопрос как в скрипте добавить живого нпс конкретный пустой только что заспауненый для него сквад
|
|
|
Эти 0 пользователя(ей) поблагодарили a4927860 за это полезное сообщение: |
|
|
denis2000 | Дата: Сб, 05.07.2014, 23:02 | Сообщение # 503 |
Полевой исследователь
Ученые сталкеры
Сообщений: 2399
| Цитата a4927860 ( ) нужно ли его переспаунивать для того чтобы применилась логика? Можно и переспавнить, а можно и то что я предложил выше. Цитата a4927860 ( ) может перейти на другую локацию и вернуться обратно? Это не сменит текущую логику.
Цитата a4927860 ( ) я понял что очень плохо объясняю - так что попробую еще раз Я понял что вы имеете ввиду. Но геморой со сквадом я категорически не поддерживаю, о чем вам и сказал постом выше. [cut]Попробуйте в файле travel_manager.script в функции traveling() после Код local position = patrol(traveler_squad_path):point(0) traveler_squad:set_squad_position(position) teleport_flag = true добавить Код for k,v in pairs(xr_bodyguard.bodyguards_config) do if get_story_object_id(k)~=nil and xr_bodyguard.bodyguards_config[k].avail_teleport==true then if has_alife_info(k.."_pursue") and dont_has_alife_info(k.."_stop") and dont_has_alife_info(k.."_stand_and_fire") then sgm_flags.table_mod_teleports[k]={} sgm_flags.table_mod_teleports[k].x=point:point(0).x sgm_flags.table_mod_teleports[k].y=point:point(0).y sgm_flags.table_mod_teleports[k].z=point:point(0).z end end end [/cut]
"Он ловко выхватил из-под себя табуретку и очень метко и сильно бросил ее в докладчика..." (Чугунный всадник)
|
|
|
Эти 0 пользователя(ей) поблагодарили denis2000 за это полезное сообщение: |
|
|
a4927860 | Дата: Сб, 05.07.2014, 23:14 | Сообщение # 504 |
Новичок
Пользователи
Сообщений: 81
| denis2000, спасибо, а что вы можете мне посоветовать с точки зрения телохранитель=проводник? или вы считаете что данная схема не логична?
|
|
|
Эти 0 пользователя(ей) поблагодарили a4927860 за это полезное сообщение: |
|
|
denis2000 | Дата: Сб, 05.07.2014, 23:24 | Сообщение # 505 |
Полевой исследователь
Ученые сталкеры
Сообщений: 2399
| a4927860, Ну почему если вы серьезно допилите логику xr_bodyguard.script, то вполне возможно, только зачем если многие сквады могут провести да плюс guidebook есть.
"Он ловко выхватил из-под себя табуретку и очень метко и сильно бросил ее в докладчика..." (Чугунный всадник)
|
|
|
Эти 0 пользователя(ей) поблагодарили denis2000 за это полезное сообщение: |
|
|
alex_xp_77 | Дата: Вс, 06.07.2014, 15:09 | Сообщение # 506 |
Научный сотрудник.
Ученые сталкеры
Сообщений: 242
| Доброго всем дня!! тестил готовые локи, произошел вылет на базе бандосов, такого тип:[error]Expression : ai().level_graph().valid_vertex_id(vertex->data().level_vertex_id()) [error]Function : CPatrolPathManager::select_point [error]File : E:\stalker\patch_1_0004\xr_3da\xrGame\patrol_path_manager.cpp [error]Line : 164 [error]Description : patrol path[pri_stalker_46_walk], point on path [name00],object [terrain_baza_stalker_0015] Непонятно, никогда не вылетало, а тут на тебе , может виновата синяя лента в колючку, я ферму обставил бордером, что бы попасть можно было только с главного входа, и еще маленький вопросик, в логе появился новый файл название: xray_Администратор, при переходе на другую локу, он высвечивается первый, хотя до этого его не было, был как обычно мой один лог:xray_алекс, не понятно от куда он взялся, и как повлияет на дельнейшее прохождение игры!! Подскажите пожалуйста , как это лечить!Заранее весьма благодарен!!
|
|
|
Эти 0 пользователя(ей) поблагодарили alex_xp_77 за это полезное сообщение: |
|
|
denis2000 | Дата: Пн, 07.07.2014, 09:00 | Сообщение # 507 |
Полевой исследователь
Ученые сталкеры
Сообщений: 2399
| Цитата alex_xp_77 ( ) может виновата синяя лента в колючку, я ферму обставил бордером А АИ-сетка после такого была приведена в адекватное состояние? И вообще насколько корректна АИ-сетка, не стоят ли на ней статические объекты? Не обделили ли лагерь графпоинтом, а еще желательно чтобы там несколько их было.
Цитата alex_xp_77 ( ) xray_Администратор, при переходе на другую локу, он высвечивается первый, хотя до этого его не было, был как обычно мой один лог:xray_алекс, не понятно от куда он взялся, и как повлияет на дельнейшее прохождение игры! Без коментариев!
"Он ловко выхватил из-под себя табуретку и очень метко и сильно бросил ее в докладчика..." (Чугунный всадник)
|
|
|
Эти 0 пользователя(ей) поблагодарили denis2000 за это полезное сообщение: |
|
|
a4927860 | Дата: Пн, 07.07.2014, 13:57 | Сообщение # 508 |
Новичок
Пользователи
Сообщений: 81
| denis2000, Доброе утро Я кажеться понял в чем у меня проблема с не бессмертными телохранителями invulnerable = {=is_wounded} true, false не срабатывает просто потому что у них не работает параметр is_wounded - они ни при каких условиях не падают в отключку - пробовал на разных - сносил им все хп и оставлял истекать %стекать кровью - умирают стоя. в m_stalker.ltx поставил бодигвардам can_be_wounded = true но ни чего не поменялось - может еще где этот параметр можно добавить/убрать?
Проверьте секции этих НПС, там can_be_wounded = false. denis2000
если вы имеете ввиду секцию бодигвардов в m_stalker то я её изменил
[cut=секция бодигвардов] [stalker_bodyguard]:stalker $spawn = "stalkers\stalker_bodyguard" Health = 75 combat_exit_delay = false corpse_detection = false can_be_wounded = true wounded_detection = true gather_detection = false avoid_mines = true max_ignore_distance = 30.0 immunities_sect = stalker_bodyguard_immunities[/cut]
или вы имеете ввиду чтото другое?
Да, например [zat_stalker_bodyguard]. denis2000
И еще - может ли быть что условия которые я использую в логике вообще не принимаются?
[cut=Условия которые сейчас пытаюсь использовать] invulnerable = {=health_le(0.1)} true, false move_state_when_center = {=health_le(0.3)} wounded_heavy hp_state = {=health_le(0.3)} 20|wounded_heavy@help_heavy hp_state_see = {=health_le(0.3)} 20|wounded_heavy@help_heavy [/cut]
Они почти все не принимаються, поскольку xr_move.scropt о них понятия не имеет. denis2000
у меня нет секции zat_stalker_bodyguard в m_stalker....
А я и не говорил, что она там. Поиск в помощь: spawn_sections_extended_stalkers.ltx denis2000
|
|
|
Эти 0 пользователя(ей) поблагодарили a4927860 за это полезное сообщение: |
|
|
mistofat | Дата: Пн, 07.07.2014, 16:13 | Сообщение # 509 |
Новичок
Пользователи
Сообщений: 83
| [off]Добрый день.Вновь решил заняться ковырянием в файлах и модостроительством. Только на этот раз решил сделать свой мод(не выкладывая публично,ибо будут заимствованы конфиги с SGM'a(с разрешением конечно же и указанием в любом случае настоящего автора) ну и возможно других модов[/off] 1.Можно ли перенести все аномалии с Припяти,Юпитера и Затона,если да,то дайте руководство по этому 2.Как сделать устойчивость к аномалиям у НПС такую же,как у меня(А то они бессмертны) 3.Как сделать такую же устойчивость к пулям у меня,как у нпс?(а то я какой то уж бессмертный выходит) Править конфиги брони или конфиги иммунитета? 4.Можно ли править конфиги брони в определённых местах? Ну хотелось бы сделать экзо,чтобы выдерживал пули(немного) но кроме секции глаз 5.Можно ли полностью убрать HUD на экране и отключить вывод сообщений на экран? 6.И можно ли сделать,чтобы свойства артефактов были лишь временные: К примеру медуза(радиация -2) действовал нуу минут 25(реальных) а потом как бы некоторое время была перезарядка
[cut=Извинения (немного флуда) ]Прошу прощение за столь много вопросов,но просто таких конфигов я ещё не касался,а работал лишь по мелочи,надеюсь на ваше понимание и на вашу помощь. Так же буду признателен о консультациях и помощи в лс[/cut]
Тег "spoiler" не поддерживает скобки. Заменил на "cut". FantomICW
|
|
|
Эти 0 пользователя(ей) поблагодарили mistofat за это полезное сообщение: |
|
|
FantomICW | Дата: Пн, 07.07.2014, 16:33 | Сообщение # 510 |
Лидер «Свободы»
Свобода
Сообщений: 4438
| mistofat, рекомендую скачать сборник модостроения от Хована (см. шапку темы). Там даны ответы на многие подобные вопросы. 1. О каких аномалиях идет речь? 5. Элементы худа можно отключить так: Код function hide_hud() level.disable_input() level.hide_indicators_safe() local hud = get_hud() hud:HideActorMenu() hud:HidePdaMenu() end Есть и альтернативные варианты, безусловно. В частности, уже готовые функции из xr_effects.script: Код function disable_ui(actor, npc, p) function disable_ui_only(actor, npc)
|
|
|
Эти 0 пользователя(ей) поблагодарили FantomICW за это полезное сообщение: |
|
|
|