![]() |
Здравствуйте, гость ( Вход | Регистрация )
![]() ![]() |
![]() |
![]()
Сообщение
#5051
|
|
Level 3 ![]() Класс: Бард Характер: Neutral Evil Раса: Человек ![]() |
Спасибо, работает. Существует ли способ определить школу волшебника-специалиста и применить к ней же какие либо бонусы, например +2 spellDC? Можно с nwnx, в 1.69 плагин nwnx_funcs, в NWN EE эта функция в плагине nwnx_creature. 1.69 /* Gets whether or not oCreature has a specialist school of wizardry. */ int GetWizardSpecialization (object oCreature); NWN EE // Gets whether or not creature has a specialist school of wizardry. int NWNX_Creature_GetWizardSpecialization(object creature); |
![]()
Сообщение
#5052
|
|
Level 3 ![]() Класс: Бледный Мастер Характер: Chaotic Neutral Раса: Человек ![]() |
задумал улучшить эпик самонов blackguard and shadowdancer. За это отвечает скрипт "X2_inc_summscale", который является инклюдом для NW_CH_AC1.
На родном существе x2_s_vrock (из x0_s2_fiend) у меня получилось изменить формулу: int nLevelTo = GetLevelByClass(CLASS_TYPE_BLACKGUARD, GetMaster(oServant))+10;//-4 (из X2_inc_summscale) Т.е. стало новый уровень врока = уровень БГ+10 (было уровень БГ-4). Но вот если заменить x2_s_vrock (из x0_s2_fiend) на собственное существо, скалирование не работает вообще. Стандартный моб со скриптами для призванного существа, в т.ч. и NW_CH_AC1. Может у этих самонов (врок и тень) какой из скриптов уникальный. Итого, как лучше реализовать скалирование самонов от уровня мастера? Как вариант нашел такой способ, основа из предыдущего сообщения: void main() { object oSummon = GetAssociate(ASSOCIATE_TYPE_SUMMONED); EmpowerMySummon(GetHitDice(OBJECT_SELF)-20,oSummon); } |
![]()
Сообщение
#5053
|
|
Level 3 ![]() Класс: Бард Характер: Neutral Evil Раса: Человек ![]() |
задумал улучшить эпик самонов blackguard and shadowdancer. За это отвечает скрипт "X2_inc_summscale", который является инклюдом для NW_CH_AC1. На родном существе x2_s_vrock (из x0_s2_fiend) у меня получилось изменить формулу: int nLevelTo = GetLevelByClass(CLASS_TYPE_BLACKGUARD, GetMaster(oServant))+10;//-4 (из X2_inc_summscale) Т.е. стало новый уровень врока = уровень БГ+10 (было уровень БГ-4). Но вот если заменить x2_s_vrock (из x0_s2_fiend) на собственное существо, скалирование не работает вообще. Стандартный моб со скриптами для призванного существа, в т.ч. и NW_CH_AC1. Может у этих самонов (врок и тень) какой из скриптов уникальный. Итого, как лучше реализовать скалирование самонов от уровня мастера? Как вариант нашел такой способ, основа из предыдущего сообщения: void main() { object oSummon = GetAssociate(ASSOCIATE_TYPE_SUMMONED); EmpowerMySummon(GetHitDice(OBJECT_SELF)-20,oSummon); } а той же функцией для левелапа хенчмана из X2_inc_summscale воспользоваться не пробовал? int SSMLevelUpCreature(object oCreature, int nLevelUpTo, int nClass = CLASS_TYPE_INVALID, int bReadySpells =TRUE) ____________ #include "X2_inc_summscale" void main() { object oSummon = GetAssociate(ASSOCIATE_TYPE_SUMMONED); SSMLevelUpCreature(oSummon,GetHitDice(OBJECT_SELF) ); } |
![]()
Сообщение
#5054
|
|
Level 3 ![]() Класс: Бледный Мастер Характер: Chaotic Neutral Раса: Человек ![]() |
В x0_s2_fiend меняю стандартного врока на своего, докидываю DelayCommand(4.0, ExecuteScript("z_sbuff_scale", OBJECT_SELF)); после ApplyEffectAtLocation...
CODE //z_sbuff_scale #include "X2_inc_summscale" void main() { object oSummon = GetAssociate(ASSOCIATE_TYPE_SUMMONED); SSMLevelUpCreature(oSummon,GetLevelByClass(CLASS_T YPE_BLACKGUARD, OBJECT_SELF)+10); SendMessageToPC(GetFirstPC(), "oSummon: " + GetName(oSummon)); //в игре oSummon: Самон Эпик Врок SendMessageToPC(GetFirstPC(), "oSummonlvl: " + IntToString(GetHitDice(oSummon)));//в игре oSummonlvl: 25 SendMessageToPC(GetFirstPC(), "BG+10lvl: " + IntToString(GetLevelByClass(CLASS_TYPE_BLACKGUARD, OBJECT_SELF)+10));//в игре BG+10lvl: 39 } Но Врок остается 25й лвл как и был. У него стандартный набор скриптов "nw_ch_ac%" |
![]()
Сообщение
#5055
|
|
Level 19 ![]() Класс: Воин Характер: Lawful Good Раса: Человек NWN: Скриптинг [PW] Gem of the North Край Лесов ![]() |
SSMLevelUpCreature возвращает 0 на ошибку, это стоит проверить.
Второй момент - чудеса внутри самой функции: Neverwinter Script int nLevel = LevelUpHenchman(oCreature,nClass,bReadySpells); // <-- первый ап oCreature // level me up until I the same level as my master (or something fails) <-- коммент врёт, нет проверки на уровень мастера (либо эта проверка вшита и её не обойти) while (nLevel < (nLevelUpTo) && nLevel != 0) { // level up to thenext level //PrintString(GetName(oCreature) + " is now level "+ IntToString(nLevel)); nLevel = LevelUpHenchman(OBJECT_SELF,nClass,bReadySpells); // <-- а тут внезапно в цикле OBJECT_SELF } Ещё он не просто так апает. У каждого класса есть пакет стандартных настроек, кажется, это всё в 2да. Тут тоже стоит проверить. |
![]()
Сообщение
#5056
|
|
Level 6 ![]() ![]() Класс: Волшебник Характер: Chaotic Good Раса: Человек ![]() |
Привет всем!
Уважаемые мастера, не могли бы вы подсказать, как правильно похоронить слона? В смысле, уничтожить одного очень упертого и несговорчивого непися. Непись так и называется "Мертвый слон". У него нет никаких скриптов, кроме единственного несложного, стоит на порождении (спавне): Neverwinter Script void main() { //object oNpc = OBJECT_SELF; SetIsDestroyable(FALSE,FALSE,FALSE); // ApplyEffectToObject(DURATION_TYPE_PERMANENT, EffectDeath(TRUE),oNpc); ApplyEffectToObject(DURATION_TYPE_INSTANT, EffectDeath(),OBJECT_SELF); SetCommandable(FALSE); } Собственно, и метода, и сам скрипт повзаимстовован с покойников Верхнего Хаспура, крушиморд и стражников, их там много. А проблема в том, что слон уничтожаться не желает. Джамповаться куда-нибудь на... на вейп в закрытой локе тоже не хочет. Вообще никаких команд не признает. Если я правильно понял, дестрою мешает строка: Neverwinter Script SetIsDestroyable(FALSE,FALSE,FALSE); Но именно эта строка держит чертову тварь в мире! Пробовал ее отключить - так слон исчезает мгновенно, без всяких команд на дестрой. Стоит только персонажу его просто увидеть. Пробовал чередовать FALSE и TRUE, перебрал все варианты - не помогает. В любых сочетаниях если первой стоит TRUE - слон исчезает сам, если FALSE - не выжжешь каленым железом! Пробовал вернуть все дефолтные скрипты на модельку - эффект нулевой. Собрался уже применить способ, который советовал уважаемый denis0k, то есть скопировать локацию, в одной - мертвый слон, в копии - евонная могила. И джамповать туда персонажа. Но есть причины, по которым этого делать очень не хотелось бы. Может, кто-то вспомнит какой-нибудь более другой способ? Или удержать модельку до команды "дестрой" в диалоге, без строки "SetIsDestroyable..." или все-таки уничтожить тварь невзирая на целых три FALSE-а? Заранее спасибо и прошу простить за многабукафф. Привет всем! Уважаемые мастера, не могли бы вы подсказать, как правильно похоронить слона? В смысле, уничтожить одного очень упертого и несговорчивого непися. Непись так и называется "Мертвый слон". У него нет никаких скриптов, кроме единственного несложного, стоит на порождении (спавне): Neverwinter Script void main() { //object oNpc = OBJECT_SELF; SetIsDestroyable(FALSE,FALSE,FALSE); // ApplyEffectToObject(DURATION_TYPE_PERMANENT, EffectDeath(TRUE),oNpc); ApplyEffectToObject(DURATION_TYPE_INSTANT, EffectDeath(),OBJECT_SELF); SetCommandable(FALSE); } Собственно, и метода, и сам скрипт повзаимстовован с покойников Верхнего Хаспура, крушиморд и стражников, их там много. А проблема в том, что слон уничтожаться не желает. Джамповаться куда-нибудь на... на вейп в закрытой локе тоже не хочет. Вообще никаких команд не признает. Если я правильно понял, дестрою мешает строка: Neverwinter Script SetIsDestroyable(FALSE,FALSE,FALSE); Но именно эта строка держит чертову тварь в мире! Пробовал ее отключить - так слон исчезает мгновенно, без всяких команд на дестрой. Стоит только персонажу его просто увидеть. Пробовал чередовать FALSE и TRUE, перебрал все варианты - не помогает. В любых сочетаниях если первой стоит TRUE - слон исчезает сам, если FALSE - не выжжешь каленым железом! Пробовал вернуть все дефолтные скрипты на модельку - эффект нулевой. Собрался уже применить способ, который советовал уважаемый denis0k, то есть скопировать локацию, в одной - мертвый слон, в копии - евонная могила. И джамповать туда персонажа. Но есть причины, по которым этого делать очень не хотелось бы. Может, кто-то вспомнит какой-нибудь более другой способ? Или удержать модельку до команды "дестрой" в диалоге, без строки "SetIsDestroyable..." или все-таки уничтожить тварь невзирая на целых три FALSE-а? Заранее спасибо и прошу простить за многабукафф. |
![]()
Сообщение
#5057
|
|
Level 19 ![]() Класс: Воин Характер: Lawful Good Раса: Человек NWN: Скриптинг [PW] Gem of the North Край Лесов ![]() |
Можно одной строкой, что именно нужно сделать? (IMG:style_emoticons/kolobok_light/smile.gif)
|
![]()
Сообщение
#5058
|
|
Level 6 ![]() ![]() Класс: Волшебник Характер: Chaotic Good Раса: Человек ![]() |
Можно одной строкой, что именно нужно сделать? (IMG:style_emoticons/kolobok_light/smile.gif) Нужно уничтожить непися. Команда " DestroyObject(GetObjectByTag("ELEFANT_DEATH"));" не срабатывает. Причины, как я их понял, описаны в предыдущем посту. Можно было бы еще убрать этого непися в закрытую локу. Но команда "JumpToObject" также игнорируется. Полагаю, по тем же причинам. То есть из-за строчки " SetIsDestroyable(FALSE,FALSE,FALSE);" в графе "Порожден" (спавн) тела непися. Но без этой строки непись исчезает сама, не дожидаясь команды. |
![]()
Сообщение
#5059
|
|
Level 19 ![]() Класс: Воин Характер: Lawful Good Раса: Человек NWN: Скриптинг [PW] Gem of the North Край Лесов ![]() |
Может перед дестроем сделать SetIsDestroyable(true)?
|
![]()
Сообщение
#5060
|
|
Level 6 ![]() ![]() Класс: Волшебник Характер: Chaotic Good Раса: Человек ![]() |
Может перед дестроем сделать SetIsDestroyable(true)? Пробовал в разных вариантах. Весь вечер и половину ночи. Исчезает невидимый плейс, с которым, собственно, и ведется диалог. (На саму непись нельзя кликнуть, как и задумано.) Но плейс-то легко уничтожить одной строчкой без всяких танцев с бубнами. А вот объяснить компилятору что применять SetIsDestroyable(true) надо не к плейсу, к этой чертовой неписи, я не сумел... Пробовал и другой путь: привязать SetIsDestroyable к переменным. Есть переменная - TRUE, а пока ее нет - FALSE. Если не трудно, взгляни на скрипт. Может, поймешь, в чем моя ошибка. На мой взгляд, ошибаться там просто нечему, но это взгляд дилетанта, не знающего английского. Neverwinter Script void main() { object oNpc = GetObjectByTag("ELEFANT_DEATH"); // Этот чертов слон ApplyEffectToObject(DURATION_TYPE_PERMANENT, EffectDeath(TRUE),oNpc); // Слон мертв. Лежит и не рыпается, кликнуть нельзя. SetCommandable(FALSE); if (GetLocalInt(oNpc, "SLON") != 1) // Переменной еще нет. SetIsDestroyable(FALSE,FALSE,FALSE); // Слона не расшибешь ядрен-батоном. if (GetLocalInt(oNpc, "SLON") == 1) // Переменная присвоена SetIsDestroyable(TRUE,TRUE,TRUE); // Слон должен исчезнуть сам или по команда скрипта - не важно. } Не исчезает, зараза! Плевал он на переменные. И что интересно, если строчку " ApplyEffectToObject(DURATION_TYPE_PERMANENT, EffectDeath(TRUE),oNpc);" переставить в любое другое место вниз, компилятор считает, что все правильно, а вот непись "оживает". Стоит на ножках, крутит башкой, кликнуть можно. Получаются не "похороны", а цирк какой-то. Скрипт стоит на порождении (OnSpawn) непися. Спасибо. |
![]()
Сообщение
#5061
|
|
Level 19 ![]() Класс: Воин Характер: Lawful Good Раса: Человек NWN: Скриптинг [PW] Gem of the North Край Лесов ![]() |
Цитата Исчезает невидимый плейс, с которым, собственно, и ведется диалог. Почему плейс-то? (IMG:style_emoticons/kolobok_light/smile.gif) Теги что ли одинаковые у плейса и нпс? Так надо разные, или тип объекта проверять.
|
![]()
Сообщение
#5062
|
|
Level 6 ![]() ![]() Класс: Волшебник Характер: Chaotic Good Раса: Человек ![]() |
Почему плейс-то? (IMG:style_emoticons/kolobok_light/smile.gif) Теги что ли одинаковые у плейса и нпс? Так надо разные, или тип объекта проверять. Извини, зря я вообще этот плейс приплел. Путаницу вношу. Просто слона невозможно кликнуть, он же лежит труп-трупом. Диалог ("Снять шкуру --- Вырыть яму --- Закопать слона") идет с невидимым плейсом под брюхом у непися. Теги у плейса и непися-слона, разумеется, разные. Просто в конце диалога перс типа хоронит слона, дестроятся оба, и слон и плейс. То есть должны дестроиться. С плейсом все ок, а со слоном-неписью... Просто беда... |
![]()
Сообщение
#5063
|
|
Level 19 ![]() Класс: Воин Характер: Lawful Good Раса: Человек NWN: Скриптинг [PW] Gem of the North Край Лесов ![]() |
Потому что действие дестрой вешается на плейс, и после его уничтожения некому уничтожать слона? Через assign можно дестрой на модуль повесить. Или слона сразу, а плейс - через секунду делэем.
|
![]()
Сообщение
#5064
|
|
Level 6 ![]() ![]() Класс: Волшебник Характер: Chaotic Good Раса: Человек ![]() |
В том то и проблема, что у меня не получается объяснить компилятору, что функцию "SetIsDestroyable(TRUE,TRUE,TRUE)" надо применять не к плейсу, ч которым диалог, а к объекту с другим тегом.
Потому что действие дестрой вешается на плейс, и после его уничтожения некому уничтожать слона? Через assign можно дестрой на модуль повесить. Или слона сразу, а плейс - через секунду делэем. Разумеется, я именно так и делал. Сначала дестрой слону, а потом, через пару строк, в самом конце диалога - плейсу. Разными скриптами. Иначе бы диалог просто прервался. Причем На последней строчке не только дестрой плейсу, а еще + переключение квеста, куча дебафов на перса, типа задолбался, реплика перса. Через акции. И все работает как часики. Кроме чертова слона!!! |
![]()
Сообщение
#5065
|
|
Level 19 ![]() Класс: Воин Характер: Lawful Good Раса: Человек NWN: Скриптинг [PW] Gem of the North Край Лесов ![]() |
Цитата у меня не получается объяснить компилятору, что функцию "SetIsDestroyable(TRUE,TRUE,TRUE)" надо применять не к плейсу, ч которым диалог, а к объекту с другим тегом. Через ассигн? Кстати, неплохо бы и SetCommandable(true) делать. Иначе ассигн не сработает. А зачем вообще там false делается в начале? Он же вроде невыделяем вообще, его блокировать не надо.
|
![]()
Сообщение
#5066
|
|
Level 6 ![]() ![]() Класс: Волшебник Характер: Chaotic Good Раса: Человек ![]() |
Через ассигн? Нет. Через ассинг у меня последний скрипт в диалоге. Но там иначе никак. Много всего: переключение квеста, анимация, затемнение, отсчет времени, крейт с палитры кучи мусора (могила слона) и т. д. Но этот скрипт как раз работает нормально. Все команды выполняются. А для "SetIsDestroyable(TRUE)" я пытался сочинить отдельный скрипт. Тоже в диалоге, парой строк раньше. Исключительно для нее. Где тупо, в лоб, желательно вообще одной строкой объяснить компилятору, что эту функцию надо применить к объекту с тегом "ELEFANT_DEATH". И не сумел. Понимаешь, я вообще впервые с этой функцией столкнулся. Нет примера перед глазами, как правильно сформулировать. На все попытки сформулировать по аналогии с другими функциями компилятор ругается. А сам сочинять я умею, увы, только на русском. |
![]()
Сообщение
#5067
|
|
Level 19 ![]() Класс: Воин Характер: Lawful Good Раса: Человек NWN: Скриптинг [PW] Gem of the North Край Лесов ![]() |
Как всё сложно. Нелегко ванговать, но могу предложить следующее:
SetCommandable(FALSE); - убрать. Кажется, оно ни на что не влияет, пациент дохлый. Для разрушения сделать в диалоге: Neverwinter Script AssignCommand("слон", SetIsDestroyable(TRUE));
AssignCommand(GetModule(), DestroyObject("слон")); |
![]()
Сообщение
#5068
|
|
Level 6 ![]() ![]() Класс: Волшебник Характер: Chaotic Good Раса: Человек ![]() |
Как всё сложно. Дык, я обычно и не прошу помощи пока сам не расшибу лоб апстену. (IMG:style_emoticons/kolobok_light/vava.gif) SetCommandable(FALSE); - убрать. Кажется, оно ни на что не влияет, пациент дохлый. В том то и беда, что влияет. И еще как. Без этого FALSE-а моделька исчезает совершенно самостоятельно. Без всяких диалогов-команд-дестроев. Стоит только персонажу ее просто увидеть. Даже подходить не обязательно. И не получается как раз отменить эту функцию через скрипт диалога. Ну, или заменить на SetCommandable(труЪ); - тот же арбуз, только сбоку. Кстати, я еще в первом посту на эту тему спрашивал: может, существует какой-то более другой способ удержать модельку? Без SetCommandable(FALSE); И тогда в нужный момент можно бы ее убрать простым дестроем, без танцев с бубнами. За "GetModule()," спасибо огромное! Мне эта идея почему-то не приходила в голову. А надо бы! Нутром чую, раз моделька так себя ведет, - это модульные заморочки. Пошел пробовать всякие варианты. Спасибо еще раз! denis0k, мой должок тебе, и без того немаленький, увеличился на порядок! Все работает! Мерзкая тварь исчезла. Больше того, я понял, почему компилятор ругался на мои прежние попытки. Я писал как в теле (на OnSpawn) непися, т. е. SetIsDestroyable(TRUE,TRUE,TRUE); Оказалось, в диалоге надо всего 1 раз. Я специально не писал, как для меня важен этот издевательский квест. А он не просто сюжетный, он ключевой. Понимаешь, мой Робинзон наконец-то добрал к людям, нашел деревушку с прекрасными туземками. Бежит к ним весь на крыльях, готовый спасать принцесс и побеждать драконов. А его все игнорят. И только старый ехидный шаман дает квест: иди как ты, геройский наш, закопай слона. Герой в ауте, но... куда деваться! В общем, прошу прощения за оффтоп и многабукв. denis0k, спасибо еще раз. Огромное! |
![]()
Сообщение
#5069
|
|
Level 19 ![]() Класс: Воин Характер: Lawful Good Раса: Человек NWN: Скриптинг [PW] Gem of the North Край Лесов ![]() |
Если нужно вырубать очередь, то можно её потом и включить: SetCommandable(TRUE, "слон").
|
![]()
Сообщение
#5070
|
|
Level 6 ![]() ![]() Класс: Волшебник Характер: Chaotic Good Раса: Человек ![]() |
Ага, спасибо. Щас попробую слепить оба скрипта в один, в конец диалога. Так будет правильней, а то он, гад, сразу исчезает. Пусть исчезает во время затемнения.
|
![]()
Сообщение
#5071
|
|
Level 3 ![]() Класс: Обыватель Характер: True Neutral Раса: Человек NWN: Модмейкер Сиала ![]() |
Ага, спасибо. Щас попробую слепить оба скрипта в один, в конец диалога. Так будет правильней, а то он, гад, сразу исчезает. Пусть исчезает во время затемнения. Получилось? Если нет, скинь модуль, я посмотрю и поправлю, а то разбираться на форуме дольше, чем сделать. |
![]()
Сообщение
#5072
|
|
Level 3 ![]() Класс: Бледный Мастер Характер: Chaotic Neutral Раса: Человек ![]() |
При копировании русского текста из тулсета вставляется в виде нечитабельных символов (Óðîâåíü(íè) Çàêëèíàòåëÿ). Русификатор для тулсета NWTSrus.rar не помогает. Как пофиксить?
Вот кстати сейчас когда редактировал один раз показало как нужно. Сообщение отредактировал zmeylsdn - Mar 4 2019, 18:12 |
![]()
Сообщение
#5073
|
|
Level 19 ![]() Класс: Воин Характер: Lawful Good Раса: Человек NWN: Скриптинг [PW] Gem of the North Край Лесов ![]() |
Попробуй в nwtoolset.ini шрифт сменить на Courier New Cyr, раньше что-то такое работало. Ещё можно попробовать вставлять в какой-нить крутой редактор типа notepad++ и баловаться с кодировками.
|
![]()
Сообщение
#5074
|
|
Level 11 ![]() Класс: Волшебник Характер: Neutral Good Раса: Фея NWN: Скриптинг [PW] Край Лесов ![]() |
Самый простой способ это переключить раскладку там где вы копируете и там куда копируете. Это реально работает.
Если раскладка разная будут кракозябры. Вроде надо рус / рус, чтобы было нормально Сообщение отредактировал Melisse - Mar 5 2019, 11:39 |
![]()
Сообщение
#5075
|
|
Level 3 ![]() Класс: Бледный Мастер Характер: Chaotic Neutral Раса: Человек ![]() |
-0-Это реально работает, спасибо)
-1-Есть ли способ, чтобы при достижении DAMAGE_BONUS_20 (вроде как предел для нвн без доп програм), добавлялся следующий тип урона например CODE #include "x2_inc_itemprop" /* int IPGetDamageBonusConstantFromNumber(int nNumber) { switch (nNumber) { case 1: return DAMAGE_BONUS_1; // здесь строки для 2-19 case 20: return DAMAGE_BONUS_20; //a)case 21: return DAMAGE_BONUS_20 дробящий +DAMAGE_BONUS_1 режущий вплоть до //case 40: return DAMAGE_BONUS_20 дробящий +DAMAGE_BONUS_20 режущий } } */ void EmpowerMySummon(int iBonus, object oSummon) { eSummonBonuses = EffectDamageIncrease(IPGetDamageBonusConstantFromN umber(iBonus), DAMAGE_TYPE_BLUDGEONING); //б)или здесь DAMAGE_TYPE_BLUDGEONING, DAMAGE_TYPE_SLASHING } в)Или может через два эффекта (EffectDamageIncrease()), но чтобы второй подключался только когда первый достигнет максимума г)По идее можно и так: eSummonBonuses = EffectDamageIncrease(IPGetDamageBonusConstantFromN umber(iBonus/2), DAMAGE_TYPE_BLUDGEONING); eSummonBonuses = EffectDamageIncrease(IPGetDamageBonusConstantFromN umber(iBonus/2), DAMAGE_TYPE_SLASHING); Тогда при iBonus=40 будет 20+20. -2-SSMLevelUpCreature не разобрался, сделал ап через эффекты EffectDamageIncrease(iBonus=GetHitDice) и т.п. Если у кого есть готовый пример поделитесь пож). |
![]() ![]() |
Текстовая версия | Сейчас: 28th April 2025 - 19:50 |