justshurik
Nov 29 2012, 09:38
подскажите пожалуйста как установить в магазине скриптом цену на вещь, отличную от той, что генерируется автоматически?
Melisse
Nov 29 2012, 10:31
Цены на предметы в магазине можно менять только через функцию
Neverwinter Script
void OpenStore( object oStore, object oPC, int nBonusMarkUp = 0, int nBonusMarkDown = 0);
где nBonusMarkUp - это повышение/понижение цены ( % ) на продажу
магазином игроку предметов, а nBonusMarkDown - повышение/понижение цены ( % ) на скупку
магазином у игрока предметов. (Если я не ошибаюсь

, может быть, наоборот)
Если вы поставите nBonusMarkUp = 10, а nBonusMarkDown = 5
То при открытие магазина цена всех предметов (от процента, изначально установленного в свойствах магазина в ячейке "повысить") повыситься на 10%, и цена скупки магазином предметов (от процента, изначально установленного в свойствах магазина в ячейке "понизить") будет на 5% больше
Можно ставить и отрицательные числа, например, nBonusMarkUp = -10, nBonusMarkDown = -5, то при открытие магазина цена всех предметов в нем понизиться на 10% и цена скупки тоже упадет на 5%.
justshurik
Nov 29 2012, 10:50
QUOTE (Melisse @ Nov 29 2012, 11:31)

Цены на предметы в магазине можно менять только через функцию
Neverwinter Script
void OpenStore( object oStore, object oPC, int nBonusMarkUp = 0, int nBonusMarkDown = 0);
где nBonusMarkUp - это повышение/понижение цены ( % ) на продажу
магазином игроку предметов, а nBonusMarkDown - повышение/понижение цены ( % ) на скупку
магазином у игрока предметов. (Если я не ошибаюсь

, может быть, наоборот)
Если вы поставите nBonusMarkUp = 10, а nBonusMarkDown = 5
То при открытие магазина цена всех предметов (от процента, изначально установленного в свойствах магазина в ячейке "повысить") повыситься на 10%, и цена скупки магазином предметов (от процента, изначально установленного в свойствах магазина в ячейке "понизить") будет на 5% больше
Можно ставить и отрицательные числа, например, nBonusMarkUp = -10, nBonusMarkDown = -5, то при открытие магазина цена всех предметов в нем понизиться на 10% и цена скупки тоже упадет на 5%.
то есть свою цену на вещь принудительно установить нельзя вообще никак кроме как через эту функцию?
Melisse
Nov 29 2012, 11:08
Можно... используя NWNX. (nwnx.org)
Там есть функция что-то типа SetItemGoldValue, которой устанавливается цена конкретного итема.
Flaristan
Nov 29 2012, 18:15
Цену на вещь принудительно установить можно, но обычным способом – только выше номинальной. Для этого в окне свойств предмета в тулсете есть окошко «дополнительной стоимости» под окном зарядов предмета.
Необычным способом можно например установить цены во всех магазинах НПС 1% от номинала и регулировать стоимость предмета добавочной стоимостью в «копейках». Тогда можно добиться например того, что вещь с параметрами на 50 000 гп будет стоить 525 гп., а «полная пластинчатая броня» что-то вроде 20 золотых.
Еще можно применить совсем необычный способ и торговать через конвертации что тоже может дать кучу преимуществ для манипуляций равно как и неудобств в игре.
justshurik
Nov 29 2012, 18:46
я понял. Здесь задача немного другая. имеется вещь. стоит вещь около 1 золотых. Мне нужно поднять стоимость вещи до нескольких сотен тысяч или миллионов золотых. Просто это скриптовый артефакт. Игра оценивает его стоимость как 1 золотой, но скрипт, который на нем висит делает стоимость артефакта около миллиона.
denis0k
Nov 29 2012, 20:37
В тулсете в свойствах итема есть пункт типа additional cost, можно накрутить цену вверх. Насчёт ограничений не в курсе, никогда не хотел поднимать цены, только опускать

Чтобы у каждого крестьянина не было по мешку золота.
Оффтоп: самые дорогие артефакты в дмг 3.5 - около 200к. Это либо крутой посох, либо крутое кольцо c 10ю кругами заклинаний, либо меч +10 (или эквивалент ему). Сложно даже представить, что за шмотка за лям

Это либо меч +22, либо доспех +31, либо кольцо 6 желаний
Melisse
Nov 29 2012, 20:44
или я туплю или речь шла о том, чтобы скриптом установить цену, а не в тулсете... не?
denis0k
Nov 30 2012, 08:25
Да, в первом посту есть слово "скрипт"

Зато последнее описание говорит о том, что скрипт вовсе не нужен.
justshurik
Dec 2 2012, 21:55
QUOTE (denis0k @ Nov 29 2012, 21:37)

В тулсете в свойствах итема есть пункт типа additional cost, можно накрутить цену вверх. Насчёт ограничений не в курсе, никогда не хотел поднимать цены, только опускать

Чтобы у каждого крестьянина не было по мешку золота.
Оффтоп: самые дорогие артефакты в дмг 3.5 - около 200к. Это либо крутой посох, либо крутое кольцо c 10ю кругами заклинаний, либо меч +10 (или эквивалент ему). Сложно даже представить, что за шмотка за лям

Это либо меч +22, либо доспех +31, либо кольцо 6 желаний

нет. немного не так. Есть предмет. На этом предмете есть свойство - Активировать предмет. При активации предмета срабатывает скрипт, ну скажем, во всей локации на некоторое время перестает полностью работать магия. Так вот, игра оценивает такую вещь в 1 золотой, но по смыслу понятно, что дешево такая вещь стоить не может. Через дополнительную стоимость увеличить цену получается только на 32.5 К, а нужно гораздо больше.
Есть конечно задумка реализовать через систему диалогов, но это уж очень будет муторно, потому что подобного рода уникальных артефактов (скриптовых) около 70 и прописывать для каждого индивидуальный диалог будет очень долго.
denis0k
Dec 2 2012, 22:37
В baseitems.2da на каждый тип есть базовая цена. Сделай новый тип, поставь цену.
Цитата(justshurik @ Dec 3 2012, 05:55)

нет. немного не так. Есть предмет. На этом предмете есть свойство - Активировать предмет. При активации предмета срабатывает скрипт, ну скажем, во всей локации на некоторое время перестает полностью работать магия. Так вот, игра оценивает такую вещь в 1 золотой, но по смыслу понятно, что дешево такая вещь стоить не может. Через дополнительную стоимость увеличить цену получается только на 32.5 К, а нужно гораздо больше.
Есть конечно задумка реализовать через систему диалогов, но это уж очень будет муторно, потому что подобного рода уникальных артефактов (скриптовых) около 70 и прописывать для каждого индивидуальный диалог будет очень долго.
или напихай какихнибуть дорогих свойств помимо активации
denis0k
Dec 3 2012, 07:29
Для неэкипируемого итема там только спеллы, и если возможно напихать спеллов на миллион, то только монотонно добавляя все. В смысле вообще все, и то не факт, что на миллион наберётся. Зато, если итем будет иметь на себе все спеллы, никакая больше плюшка не нужна
Anakondar
Dec 3 2012, 17:41
Миллион очень быстро набирается. К слову, у 24 левел рекваймент уже 1 000 000. А среди стандартных айтемов есть даже те, что 61 уровень требуют.
Сделай стандартное повышение стоимости на 32767 и продавай её в магазине с sell mark up 1000. А магазин открывай OpenStore (oStore, oPC, -100, 100); вот тебе вещь 360+ тысяч. Только выстави, чтоб магазин ничего не покупал.
Можно это без магазина сделать: давать или забирать эту вещь в диалоге. Там ты сам сможешь поставить любую сумму. Только не забудь поставить проверку наличия данной суммы не только при появлении строки диалога, но и непосредственно перед даванием айтема. И не нужно кучу диалогов, достаточно одного + кастомные токены. Заполнять их можно из констант в самом скрипте или из локалок.
Ну и ещё один вариант - не нужно ничего менять. У меня целая куча айтемов с активацией предмети или уникальной силой. Естественно в магазины за 1 их никто не продаёт. Если вдруг такой айтем вдруг тебе стал не нужен, ты можешь продать его другому игроку, по той цене, на которой договоритесь.
Ilerien
Dec 3 2012, 18:10
Проще всего сделать кастомное свойство, которое ничего, кроме повышения цены предмета, не делает.
justshurik
Dec 3 2012, 19:17
QUOTE (Ilerien @ Dec 3 2012, 19:10)

Проще всего сделать кастомное свойство, которое ничего, кроме повышения цены предмета, не делает.
Можно ли немного поподробней об этом? не очень понял как это сделать
Ilerien
Dec 3 2012, 21:01
Цитата(justshurik @ Dec 3 2012, 19:17)

Можно ли немного поподробней об этом? не очень понял как это сделать
Добавить новое свойство в itempropdef.2da и itemprops.2da, сделать для него собственную таблицу ценности. Это довольно геморно, но результат будет лучше любых костылей с навешиванием существующих свойств.
Спецификация.
Проще всего посмотреть на примерах. В СЕР'е, скажем, это реализовано - там есть свойства Value Increase / Decrease.
Альтернатива - добавить специальное заклинание в spells.2da, которое будет выполнять нужный скрипт, и соответствующее свойство с большой ценой в iprp_spells.2da.
Anakondar
Dec 3 2012, 22:08
Альтернатива проще и правильнее. А кастомные свойства даже не нужны, в 1.69 есть ничего не дающие свойства, такие как качество. Просто делаешь ему ненулевую стоимость (собственно, зависящую от уровня "качества") и покрываешь все диапазоны цен.
Ilerien
Dec 4 2012, 07:40
Цитата(Anakondar @ Dec 3 2012, 22:08)

Альтернатива проще и правильнее. А кастомные свойства даже не нужны, в 1.69 есть ничего не дающие свойства, такие как качество. Просто делаешь ему ненулевую стоимость (собственно, зависящую от уровня "качества") и покрываешь все диапазоны цен.
Неправда. Свойство Quality - пустышка, совершенно ничего, кроме присутствия, не делает. Даже цену не меняет.
Anakondar
Dec 4 2012, 23:44
Так в том-то и дело. Назначаешь ему цену в 2дашках и всё.
Давно не заходил юда.
Возможно ли сделать в предмете (допустим - щит) динамичное описание?
Например:
Мы одеваем щит и ботинки. В описании щита нам пишут: "На вас одето 1) Такой-то щит 2) Такие-то ботинки"
Ilerien
Dec 5 2012, 23:08
Цитата(Anakondar @ Dec 4 2012, 23:44)

Так в том-то и дело. Назначаешь ему цену в 2дашках и всё.
Окей, неправильно понял. Но всё равно костыль, лучше отдельное свойство завести.
Цитата
Возможно ли сделать в предмете (допустим - щит) динамичное описание?
Например:
Мы одеваем щит и ботинки. В описании щита нам пишут: "На вас одето 1) Такой-то щит 2) Такие-то ботинки"
SetDescription() и соответствующие эвенты.
Anakondar
Dec 6 2012, 20:06
Цитата(Ilerien @ Dec 6 2012, 00:08)

Но всё равно костыль, лучше отдельное свойство завести.
1. Зачем заводить ничего не дающее свойство, если оно итак уже есть?
2. Вовсе не костыль, от качества зависит стоимость - абсолютно логично.
У меня нет такой функции о.о. Можнт это из-за версии 1.66?
denis0k
Dec 7 2012, 23:41
Нужна 1.69.
Anakondar
Dec 8 2012, 00:44
Смотря для чего. Если для добавления ненужного свойства, то необязательно. Ну а вообще рекомендую обновиться
Жаль, что нужна 1.69. Она мне не понравилась почему-то. При смерти героя мне почему-то дают какой-то левый предмет в инвентарь, что раздражает.
А так, я хотел сделать комплект волшебных доспехов. (как в Titan Quest)
И когда напялены 2 или более предмета, то в описание объекта добавляется: "Вы надели: ботинки, щит. Увеличина атака на +1, броня на +10"
Ilerien
Dec 8 2012, 22:15
Цитата
Жаль, что нужна 1.69. Она мне не понравилась почему-то. При смерти героя мне почему-то дают какой-то левый предмет в инвентарь, что раздражает.
Это легко пофиксить.
SKleer
Dec 12 2012, 13:39
Может 2 вопроса будут не уместны в данной теме, но есть ли способ заменить непонятные символы (кирилицу) в редакторе, на русские символы? На виндовс ХР всё было нормально.

И возможно сделать, чтобы видеоролики отображались без установки патча 1.69?
Заранее спасибо.
Melisse
Dec 12 2012, 14:12
В настройках редактора скриптов выбери шрифт Courier
Не используй кириллицу в названиях переменных, только для имен и описания существ, локаций, предметов..
SKleer
Dec 12 2012, 16:53
О! Спасибо. У меня стоял Courier new.
Цитата
Не используй кириллицу в названиях переменных, только для имен и описания существ, локаций, предметов..
Да это всё равно скрин из моего заброшенного модуля. Я сейчас другой делаю.
Ollone5
Dec 29 2012, 10:15
И так, меня долго не было и по этому накопились вопросы:
1) Подскажите, как мне заставить бить ловушку только по врагам? Или заставить вылетать из конкретной точки снаряды в враждебных мне нпс, наступивших на триггер?
2) Возможно ли с помощью скриптов, прямо в игре, заменить один тайл на другой. Конкретно - у меня есть тайл обычной стены, стену разбили монстры и там образовалась дыра.
3) Можно ли для всех установленных хаков написать один tlk?
4) Я скачал пак на средневековые доспехи и оружие, при попытке создать половину из предложенного оружия у меня вылетает тулсет, а у доспехов появляется слишком много пустых слотов. Это нормально? Есл нет, то как с этим бороться?
5) Патч вирусмена от палочек не помог, не могу им воспользоваться из-за "закрытого" реестра. Реестр я вправил и запустил этот файлик. Пишет что всё добавлено, но в самом тулсете никаких изменений.
Это не всё, решу эти - буду задавать новые. Мой модуль не стоит! Скоро выложу скрины в соответствующей теме.
Flaristan
Dec 30 2012, 18:16
1) Стандартные ловушки если не ошибаюсь считают врагом всех кто не в отряде того кто ее поставил. Скриптом через «ГетИзЭними» и «ГетИзНеарПС» (или как-то так).
2) На моей памяти только эффекты менять (включая эффекты поверхностей). Трюк с изменением тайлов можно осуществить через альтернативные локации, но лучше сделать разбиваемую стену и дыру взаимозаменяемыми респавном активными объектами (при наличие фантазии можно весьма неплохо это изобразить с имеющейся стандартной палитрой объектов, комбинированной с аналогичными тайлами).
Остальное хз.
gennady
Dec 31 2012, 12:41
Цитата(Ollone5 @ Dec 29 2012, 10:15)

Подскажите, как мне заставить бить ловушку только по врагам? Или заставить вылетать из конкретной точки снаряды в враждебных мне нпс, наступивших на триггер?
это у меня стоит на катапультах, может что возмешь на вооружение
Neverwinter Script
void main()
{
object oPC = GetFirstPC();
object oBal = OBJECT_SELF;
object oZel = GetNearestObjectByTag("ZEL_BAL");//Объект на который должен быть скастован спелл.
if (GetIsObjectValid(oZel) && GetDistanceToObject(oZel) <= 50.0f
&& GetLocalInt(oBal,"BALL") != 1)
{
SetLocalInt(oBal,"BALL",1);
PlaySound("as_cv_winch1");
DelayCommand(15.3, SetLocalInt(oBal,"BALL",FALSE));
if (GetTag(oBal) == "CATAPULTA")
AssignCommand(oBal,ActionCastSpellAtObject(SPELL_F
IREBALL,oZel));
else
switch (Random(2)+1)
{
case 1:
AssignCommand(oBal,ActionCastSpellAtObject(SPELL_F
LAME_ARROW,oZel));
break;
case 2:
AssignCommand(oBal,ActionCastSpellAtObject(SPELL_M
ELFS_ACID_ARROW,oZel));
break;
}
}
}
Flaristan
Jan 16 2013, 10:29
Цитата(Ilerien @ Jan 4 2012, 23:20)

Поставить dialog.tlk от 1.69.
Русскую версию (правда, я бы советовал английскую)
отсюда (переименовать в dialog.tlk и бросить в корень игры).
Недавно решил попробовать перевести модуль в 1.69 из 1.67 которую использовал изначально из-за этой ошибки с "пурпурным драконом": сделал как было посоветовано, создал модуль чтоб проверить - вылезло с первого раза вместо старой ошибки это...

...больше ничего вроде не произошло и со второго раза ошибка уже не выскакивает. Этого стоит опасаться и пилить бэкапы или забить?
Melisse
Jan 16 2013, 12:29
Что за ошибка с пурпурным драконом?
Проблемы при переходе со старых версий на новые бывают в 2да. В каталоге с игрой есть файл, где помечено сколько строк нужно зарезервировать, при создании своих 2да.
Если 2да файлы заполнялись с конца последней строки - в более новых версиях могут быть наслоения и часть новых штук просто исчезнет, от чего могут быть всякие ошибки.
Другие ошибки не встречались при переходе с одной версии на другую. Обычно после критикал ребилд 1.69 не может быть ошибок, разве что не совместимость видеокарты или звука.
denis0k
Jan 16 2013, 17:14
Это драйвер OpenGL.
Flaristan
Jan 16 2013, 23:22
Цитата(Melisse @ Jan 16 2013, 13:29)

Что за ошибка с пурпурным драконом?
Сохраняющая авторство цитата, в отличает от сделанной вручную, содержит в заглавие ссылку на сообщение откуда была взята. Там сообщением ранее задавался вопрос который описывает полностью последствия ошибки класса пурпурного дракона которая местами возникает после перевода НВН в 1.69 версию и не дает тулсету работать с модулями корректно.
Хых видеокарта? Странно... Ну, будем надеяться не заразно.
denis0k
Jan 16 2013, 23:41
Цитата
Хых видеокарта? Странно... Ну, будем надеяться не заразно.
После покупки железа 2012 года оба нвна у меня почили. Нвн1 неправильно определяет видеокарту (цепляется к драйверу удалённого рабочего стола, такая проблема у некоторых людей чуть ли не с релиза вин7, судя по гуглу), находит 255 процессоров и чуть ли не петабайты оперативки и вылетает при любом чихе. Нвн2 в тулсете при создании второго окна рендера (свойства итема, плейса и т.п.) выбрасывает исключение, что смахивает на старые грабли, тянущиеся из тулсета нвн1, который именно из-за этих дочерних окон с определённой версии перестал работать в линуксе под вайном
Melisse
Jan 17 2013, 08:42
Я думаю эти проблемы решаются людьми как-то. Играют же. Вопрос в желании и нужности.
denis0k
Jan 17 2013, 19:16
Да. Схожие проблемы у многих игр. Например, у котора - его пофиксили фанаты. У дивайн дивинити - его пофиксили разработчики. А также: дум/квейк/анреал/бардс тейл (фанаты), oni (разработчик), ну и т.п., каждый тут может что-то написать. При попытке нагуглить решение для нвн выдаёт что-то типа "да, не повезло, чувак, попробуй драйвера поменять или режим совместимости включить, авось поможет"

К слову, вместе с нвн и котором некие проблемы и у биоварских же масс эффектов - первый видит отрицательное число оперативки, но серьёзно не глючит, а второй просто вылетает, работает только третий, но эт понятно - его регулярно патчат из-за мультиплеера.
Когда основная масса нвнщиков обновит свои компы, может фанатский фикс и будет, а так оно нафиг никому не надо.
Flaristan
Jan 21 2013, 20:16
Это что за хрень??

Melisse
Jan 22 2013, 09:46
Flaristanвозможно, в анимации проблемы.

Дело в том что в 1.69 добавили новые анимации и новые фенотипы.
Возможно, происходит конфликт, если у вас в хак паке есть анимации.
Анимации в нвн это жестокость для моделера, не знаю так ли во всех других играх, но чтобы сделать новую одежду, приходится подгонять ее для всех видов фенотипов (7рас*2 (худой и толстый + для кояшек (7*2)) = 28 видов (без турнирных) только одного элемента броньки, например, туловища)А вообще чего вы не проверите хакпаки на конфликты? Там же в тулсете есть эта тема. Он вам прям список ресурсов кофликтных выдаст.
П.С. Возможно, еще что-то и дело не в том, что я думаю.
Flaristan
Jan 22 2013, 14:04
Цитата(Melisse @ Jan 22 2013, 10:46)

Возможно, происходит конфликт, если у вас в хак паке есть анимации.
А вообще чего вы не проверите хакпаки на конфликты?
Потому что их нет.
Melisse
Jan 22 2013, 14:39
Цитата
Потому что их нет.
Видимо тогда видеокарта, как и в предыдущем случае.
Вроде ATI Radeon плохо переваривают neverwinter? если у вас такая
denis0k
Jan 22 2013, 17:27
Я с 2007го (т.е. с момента, как сам стал компы собирать) на радеонах, никаких проблем с актуальными играми. У Флэра, судя по скринам выше, вроде как интегрированная интел. Если бажащий плейс стандартный, то проблема с видяшкой. Не знаю, как в нвн, но вообще анимация обычно аппаратно обрабатывается на гпу. Если в более современных 3д-играх нормально, то мои поздравления в связи с вступлением в клуб "без нвн по причинческим технинам"
P.S. Первый ведьмак на интел хд3000+ идёт.
Flaristan
Jan 22 2013, 18:17
Карта вроде бы да интеловская но не суть, потому что:
1) если проблема была бы с видеокартой vs toolset 1.69 – ошибка не появилась бы «внезапно», а сразу же после перехода на 1.69 версию (а до нее я успел уже поработать в новой версии чуть ли не неделю);
2) экспериментальным путем удалось выяснить, что игре действительно не нравится обелиск (хаков нет, все стандартное же) подпадающий под указанные приметы (морской обелиск в общем – стул не понятно каким боком там) – причем что самое интересное не нравится он исключительно(!) находясь в точке старта модуля (в других местах они стоят себе нормально, что так же совершенно неадекватно, учитывая тот факт что до этого в точке старта эти же самые обелиски никаких ошибок не вызывали и стояли там всегда);
3) подобную ошибку я встречал ранее еще работая в 1.67 версии тулсета (причиной тогда внезапно стал аппеаренс зомби если я правильно помню) – ошибка не приводила ни к чему (разве что иногда к подвисанию загрузки модуля) и поэтому была благополучно проигнорирована и в последствии пропала так же как и появилась;
4) теперь я не уверен что эти вещи связаны, но в результате всего этого балагана модуль стал подглючивать и выкидывать странные штуки при редактировании вроде произвольной замены данных из устаревших бэкапов(???) – скрипт на уникальную силу предмета толи переполнился, толи просто не хочет работать с новыми изменениями, работая по старому варианту (хотя не совсем понятно как это физически возможно если в модуле в скрипте написано одно, а работает он по-другому – так как было написано до этого)… изменения объектов в локации меняются самопроизвольно по тому же принципу… может быть в модуле появилась избранная крыса?
Melisse
Jan 22 2013, 19:45
Надо билдить переодически.
А еще лучше, когда начинаются проблемы переносить все в новый контейнер модуля. Помогает.
Цитата
в клуб "без нвн по причинческим технинам"
да-да. Не верю, что технические причины могут остановить

А вот нежелание/ненужность - да. Можно приводить кучу примеров, да.. но выхода нет, когда его не ищут
Flaristan
Jan 22 2013, 20:15
Бэкапить в смысле? Это-то конечно есть. Только что проверил бэкапы старых и очень старых версий - у меня на компе стоит куча клиентов под НВН, потому что свой родной клиент либо битый либо еще что (имеет врожденный баг с белыми текстурами), так что есть еще чужой клиент на котором этого бага нет: на НВН 1.67 - ошибок нет; 1.69 (свой родной клиент) - ошибок нет включая последние версии модуля; 1.69 (чужой клиент) - выдает ошибки даже на очень старых версиях под 1.67. Так что с модулями все в порядке - проблема в клиенте, причина только не понятна.
Сейчас еще потестю глюки со скриптами на разных версиях.
P.S.: Что значит переносить в новый контейнер - создавать модуль заново и делать полный экспорт всего?
update: Походу это клиент навернулся, потому что его исходная копия (клиента) воспринимает модуль без ошибки.
А вот скрипт продолжает глючить на других клиентах - я так подразумеваю есть какой-то предел для числа строк в скрипте или может для ответвлений "if" в его теле? Мой содержит 30 блоков класса
Neverwinter Script
if (GetTag(oItem)==". . .")
{
//. . .
return;
}
в общей сложности на 2702 строки.
Melisse
Jan 22 2013, 21:04
Не бэкапить,а билдить модуль "Строить модуль"
Цитата
А вот скрипт продолжает глючить на других клиентах - я так подразумеваю есть какой-то предел для числа строк в скрипте или может для ответвлений "if" в его теле? Мой содержит 30 блоков класса
посмотри ai скрипты в 10к строк
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста,
нажмите сюда.