Город Мастеров
IPB

Здравствуйте, гость ( Вход | Регистрация )

 Правила этого форума ПРАВИЛА РАЗДЕЛА
147 страниц V  « < 81 82 83 84 85 > »   
Ответить в эту темуОткрыть новую тему
> Скрипты, Все вопросы и ответы по скриптам
Aiwan
сообщение Mar 8 2006, 05:47
Сообщение #2041


Миловидный Бегрюссунг
Иконки Групп

Класс: Воин
Характер: Chaotic Good
Раса: Человек
NWN: Модмейкер
Проклятие Левора
Порядок Времени



Я же говорил, надо через юзерДеф делать. каждая локалка - блок задач. У тебя не просто задачи, они сложные и просто ей не забъешь стек.

У тебя целый блок AI...

Попробуй так. Этот код верный на 100%. Все на актионах даже локалки в одном блоке. Должна успевать все понимать...
NSS
void ActionCreateObject(int nObjType, string sCreature, location lLoc, int iAnimation, string sNewTag="")
{
  CreateObject(nObjType, sCreature, lLoc, FALSE, sNewTag);
}
void CheckIsHere(object oTarget, string sOrder)
{
    object oSelf = OBJECT_SELF;

    if(GetDistanceBetween(oSelf, oTarget) < 4.0)
    {
        AssignCommand(oSelf, PlayAnimation(ANIMATION_LOOPING_GET_MID, 1.0, 1.0));
        CreateItemOnObject(sOrder, oTarget, 1);
        // Тут никакой блокировки не надо. Действия простые
    }
    else
    {
        SpeakString("Куда вы ушли??");
        AssignCommand(oSelf, ActionPlayAnimation(ANIMATION_LOOPING_GET_LOW, 1.0, 5.0));
        AssignCommand(oSelf, ActionCreateObject(OBJECT_TYPE_ITEM, sOrder, GetLocation(OBJECT_SELF), TRUE));
        AssignCommand(oSelf, ActionDoCommand(SetLocalInt(oSelf, "vir_waiter_busy", FALSE)));
        AssignCommand(oSelf, ActionDoCommand(SetCommandable(TRUE, oSelf)));
        DelayCommand(0.3, SetCommandable(FALSE, oSelf));
    }
}
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
virusman
сообщение Mar 8 2006, 11:47
Сообщение #2042


Level 17
Иконки Групп

Класс: Волшебник
Характер: Neutral Good
Раса: Человек
NWN: Скриптинг [PW]
Axistown SR 1.9
NWNX



CheckIsHere - это только одна из вложенных функций. Она вызывается после того, как официантка дошла до указанной локации:
NSS
void GoToPlayer(object oTarget, string sOrder, float fTimeout)
{
    ActionForceMoveToLocation(GetLocation(oTarget), TRUE, fTimeout);
    ActionDoCommand(SetFacingPoint(GetPosition(oTarget)));
    ActionDoCommand(CheckIsHere(oTarget, sOrder));

    //заблокировать и разблокировать очередь
    DelayCommand(0.2, SetCommandable(FALSE));
    AssignCommand(OBJECT_SELF, ActionDoCommand(SetCommandable(TRUE)));
}

По отдельности эта функция работать будет, но со вложенностью официантка дойдёт до точки, а функция CheckIsHere не выполнится. Там же из main вызывается GiveBottleTo, оттуда - GoToPlayer, а оттуда - уже CheckIsHere.
Ой, блин, не подумал. Может, просто разблокировку сделать перед вызовом функции. (IMG:style_emoticons/kolobok_light/smile.gif)
З.Ы. Не помогло..

Сообщение отредактировал virusman - Mar 8 2006, 12:08
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
Вишес
сообщение Mar 11 2006, 08:51
Сообщение #2043


Level 13
****

Класс: Ниндзя
Характер: Chaotic Evil
Раса: Танар'ри



Народ, существует ли скрипт, меняющий части тела? И если есть, то какой?
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
[MoF]Darth_Nick
сообщение Mar 11 2006, 10:32
Сообщение #2044


Level 6
Иконки Групп

Класс: Некромант
Характер: Chaotic Evil
Раса: Нежить
NWN: Скриптинг [PW]



у ПЦ через лето помойму можно, только не пойму - зачем?
проще целый апиренс изменить

Сообщение отредактировал [MoF]Darth_Nick - Mar 11 2006, 10:37
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
Lex
сообщение Mar 11 2006, 13:57
Сообщение #2045


Level 5
Иконки Групп

Класс: Обыватель
Характер: Lawful Neutral
Раса: Человек
NWN: Модмейкер
Проклятие Левора
Порядок Времени



QUOTE(Вишес @ Mar 11 2006, 08:51) [snapback]72284[/snapback]
Народ, существует ли скрипт, меняющий части тела? И если есть, то какой?

в 1.67 будут такие функции. Сейчас только целиком.
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
Nuprahtor
сообщение Mar 12 2006, 12:02
Сообщение #2046


Level 3
*

Класс: Некромант
Характер: Chaotic Neutral
Раса: Человек



Большое спасибо Azathoth`у и Zirrex`у.
Скрипт заработал.

Еще вопрос.
Как сделать, чтобы зомби сначала лежали на земле (Анимация смерти) а потом вставали и дралисьс чаром.
Спасибо за внимание.
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
StalkerDtN
сообщение Mar 12 2006, 13:33
Сообщение #2047


Level 5
Иконки Групп

Класс: Волшебник
Характер: Chaotic Good
Раса: Дракон
NWN: Скриптинг [Sn]



Nuprahtor, попробуй так:
на зомби на onSpawn
NSS
SetIsDestroyable(FALSE, TRUE, FALSE);
    effect eDeath = EffectDeath();
    ApplyEffectToObject(DURATION_TYPE_INSTANT, eDeath, OBJECT_SELF);

далее смотря через что, допустим это триггер, тогда на onEnter добавь строчки
NSS
object oDead = GetObjectByTag("ZOMBI");
    effect eRes  = EffectResurrection();
    effect eHeal = EffectHeal(GetMaxHitPoints(oDead));
    ApplyEffectToObject(DURATION_TYPE_INSTANT, eRes, oDead);
    ApplyEffectToObject(DURATION_TYPE_INSTANT, eHeal, oDead);
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
Артём
сообщение Mar 12 2006, 13:33
Сообщение #2048


Level 5
**

Класс: Друид
Характер: Neutral Good
Раса: Человек



Скрипт незнаю но область с зомби которые ожывают могу сделать.
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
Nuprahtor
сообщение Mar 12 2006, 13:42
Сообщение #2049


Level 3
*

Класс: Некромант
Характер: Chaotic Neutral
Раса: Человек



Может на OnPerception?
Зомби просто лежат, чар к ним подходит они встают и драка.
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
[MoF]Darth_Nick
сообщение Mar 12 2006, 15:16
Сообщение #2050


Level 6
Иконки Групп

Класс: Некромант
Характер: Chaotic Evil
Раса: Нежить
NWN: Скриптинг [PW]



повесь на спаун кат_сцен паралайз или иммобилиз...или и то и то, когда надо удали

Сообщение отредактировал [MoF]Darth_Nick - Mar 12 2006, 15:16
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
Lorendroll
сообщение Mar 12 2006, 22:31
Сообщение #2051


Level 9
***

Класс: Волшебник
Характер: Neutral Good
Раса: Эльф



Если зомби всегда будут лежать на одних и тех же местах (или может это убитые на случайном месте персонажи?) то имхо, легче всего нарисовать тригер со скриптом на OnEnter.
Если нет, можно убить чара на спауне (не забыв поставить нон-дестроибл) а на хертбите организовать подобие персепшена: как увидел игрока лечиться и делаться хостайлом (при мертвом персонаже персепшен работать вроде не будет). Кстати можно сделать так чтобы зомби не просто вскакивал, а поднимался с анимацией. Точно не знаю, но для этого похоже нужно его заставить либо "использовать" самого себя либо идти на локацию где он лежал. Надо выяснять эксперементально (IMG:style_emoticons/kolobok_light/smile.gif)
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
StalkerDtN
сообщение Mar 13 2006, 06:32
Сообщение #2052


Level 5
Иконки Групп

Класс: Волшебник
Характер: Chaotic Good
Раса: Дракон
NWN: Скриптинг [Sn]



Lorendroll
QUOTE
Если нет, можно убить чара на спауне (не забыв поставить нон-дестроибл) а на хертбите организовать подобие персепшена


Не смотря на то, что тушка зомби не исчезла, формально для движка зомби мертв, а потому не один эвент с него не сработает, в тч и ХБ.
Имхо удобнее в данной ситуации все же триггер, соответственно всю анимацию туда же...какую - на вкус автора модуля, я бы предложил туже что и при закле воскрешения. (IMG:style_emoticons/kolobok_light/smile.gif)
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
Zirrex
сообщение Mar 13 2006, 10:26
Сообщение #2053


Level 9
Иконки Групп

Класс: Друид
Характер: True Neutral
Раса: Эльф
NWN: Скриптинг [PW]
Амен



Есть один прекрасный скрипт, который создает скелетов из сложенных черепов. Работает не на основе триггера, а проверяет, есть ли рядом игрок, если есть, пересоздать объект. Также можно и тут. Лежат, к примеру, мертвые зомби (каламбур; куда уж мертвее), а проходящий мимо игрок их поднимает. Учуяли свежую кровь и душу (IMG:style_emoticons/kolobok_light/smile.gif)

самим зомби сделать в момент появления анимацию. Я так создавал Таннари. Вначале кидал на них эффект нулевого объекта, потом пересоздавал через 1-2 секунды в нормальном облике, чтобы монстры не тупили, а сразу шли в бой. В нашем случае это нужно, чтобы зомби положить на землю, а потом через анимацию их плавно поднять. Но необходимо так подгадать время исчезновения трупов, чтобы это не казалось пропущенными кадрами в плохом кино.
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
Nuprahtor
сообщение Mar 13 2006, 13:25
Сообщение #2054


Level 3
*

Класс: Некромант
Характер: Chaotic Neutral
Раса: Человек



Спасибо вам всем.Придется ставить на триггер.
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
helvene
сообщение Mar 13 2006, 13:55
Сообщение #2055


Mystery
Иконки Групп

Класс: Маг
Характер: Lawful Evil
Раса: Тварь
NWN: Контент
Амен



QUOTE(Zirrex @ Mar 13 2006, 10:26) [snapback]72517[/snapback]
Есть один прекрасный скрипт, который создает скелетов из сложенных черепов. Работает не на основе триггера, а проверяет, есть ли рядом игрок, если есть, пересоздать объект. Также можно и тут. Лежат, к примеру, мертвые зомби (каламбур; куда уж мертвее), а проходящий мимо игрок их поднимает. Учуяли свежую кровь и душу

Хм-хм... более того, есть такой объект среди стандартных, во вкладке Battlefield... даже два - Zombie Corpse и одна из Pile of Sculls. Они ровненько это и делают.

(скрипты там назначены на hb)
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
Артём
сообщение Mar 13 2006, 22:07
Сообщение #2056


Level 5
**

Класс: Друид
Характер: Neutral Good
Раса: Человек



КТО ЗНАЕТ ГДЕ МОЖНО НАЙТИ ЛЕКСИКОН РУССКОЙ ВЕРСИИ?
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
-fenix-
сообщение Mar 13 2006, 22:49
Сообщение #2057


Level 19
Иконки Групп

Класс: Воин
Характер: Lawful Good
Раса: Человек
NWN: Скриптинг [Sn]



QUOTE(Артём @ Mar 13 2006, 22:07) [snapback]72578[/snapback]
КТО ЗНАЕТ ГДЕ МОЖНО НАЙТИ ЛЕКСИКОН РУССКОЙ ВЕРСИИ?

НИ КТО НЕ ЗНАЕТ - НЕТ ЕГО!!! (IMG:style_emoticons/kolobok_light/biggrin.gif)

Есть на сайте перевод некоторых статей, а так - промт или сократ в руки и вперед. Я так лексикон и читаю, вроде успешно.
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
Артём
сообщение Mar 13 2006, 22:54
Сообщение #2058


Level 5
**

Класс: Друид
Характер: Neutral Good
Раса: Человек



То-что на сайте я давно скачал.Попробую абайтися переводчиком!
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
Zirrex
сообщение Mar 13 2006, 23:00
Сообщение #2059


Level 9
Иконки Групп

Класс: Друид
Характер: True Neutral
Раса: Эльф
NWN: Скриптинг [PW]
Амен



Артём, подобные вещи редко переводят, если только не нужно их пускать в большой тираж и знакомить множество людей с их тематикой. Но если человека интересует данный предмет, он сделает все, чтобы его изучить. Мне хватает английской версии, да и все познается экспериментальным путем.
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
gennady
сообщение Mar 14 2006, 12:06
Сообщение #2060


Level 9
Иконки Групп

Класс: Обыватель
Характер: Lawful Good
Раса: Человек
NWN: Модмейкер
Рыцарская Сага



QUOTE(mamuc @ Feb 27 2006, 09:33) [snapback]71143[/snapback]
Вот кусок скрипта официантки.
Нужно, чтобы она шла так, как нужно, и при этом не зависала и не прерывалась.
Попробовал делать блокировку/разблокировку очереди - официантка подбегает и ничего не делает.
(Скрипт висит на OnConversation)


Нужно отделить мух от котлет. Не все команды станут в очередь, а тем более проверки идут мгновенно. Попробуй повесить подобный скрипт на ХБ официантки. Написан по твой идеи, для 4 персов. Блокировка на весь маршрут, но в конце можно поговорить с персом.
NSS
void GoToObject(object oTarget, object oPC)
{
AssignCommand(oPC, ActionMoveToObject(oTarget, FALSE));
AssignCommand(oPC, ActionSpeakString("Получите ваш заказ."));
AssignCommand(oPC, ActionPlayAnimation(ANIMATION_FIREFORGET_READ, 1.0, 3.0));
AssignCommand(oPC, ActionPlayAnimation(ANIMATION_LOOPING_GET_MID, 1.0, 2.0));
}
void WalkToObject(object oTarget, object oPC, vector vFace)
{
AssignCommand(oTarget, ClearAllActions());
AssignCommand(oTarget, SetFacingPoint(vFace));
DelayCommand(3.0, AssignCommand(oTarget, ActionSpeakString("Спасибо!")));
DelayCommand(5.0, AssignCommand(oTarget, ActionPlayAnimation(ANIMATION_FIREFORGET_DRINK, 1.0, 5.0)));
}
void main()
{
object oPC = OBJECT_SELF;
object oTarget = GetNearestObjectByTag("POSIT_1");
object oTarget2 = GetNearestObjectByTag("POSIT_2");
object oTarget3 = GetNearestObjectByTag("HOZYAIN");
vector vFace = GetPosition(oPC);
//================  МАРШРУТ ====================================================
if(GetLocalInt(OBJECT_SELF, "MARSH") != 1)
{
SetLocalInt(oPC,"MARSH",1);
AssignCommand(OBJECT_SELF, ClearAllActions());
DelayCommand(0.3, SetCommandable(FALSE, oPC)); // заблокировать очередь
GoToObject(oTarget, oPC);
GoToObject(oTarget2, oPC);
AssignCommand(oPC, ActionMoveToObject(oTarget3, FALSE));
AssignCommand(oPC, ActionSpeakString("Получите выручку. Ох, и жаркий денек!"));
AssignCommand(oPC, ActionPlayAnimation(ANIMATION_LOOPING_GET_MID, 1.0, 3.0));
DelayCommand(30.1,SetCommandable(TRUE,oPC)); // разблокировать очередь
DelayCommand(30.5, AssignCommand(oPC, SpeakString("Ох, жара!")));
DelayCommand(40.0,SetLocalInt(OBJECT_SELF,"MARSH",FALSE)); // длительность маршрута
}
//---------------- проверки каждый раунд ---------------------------------------
if (GetDistanceBetween(oTarget, oPC) < 3.0)
  WalkToObject(oTarget, oPC, vFace);
if (GetDistanceBetween(oTarget2, oPC) < 3.0)
  WalkToObject(oTarget2, oPC, vFace);
if (GetDistanceBetween(oTarget3, oPC) < 4.0)
   {
switch (Random(3)+1)
{
case 1:
AssignCommand(oPC, SpeakString("Ох, и жаркий денек!"));
AssignCommand(oTarget3, SpeakString("Давай работай!"));
AssignCommand(oTarget3, SetFacingPoint(vFace));
break;
case 2:
AssignCommand(oPC, SpeakString("Давай пива и рыбу, есть еще заказ."));
AssignCommand(oTarget3, SpeakString("Бойко торгуем!"));
AssignCommand(oTarget3, SetFacingPoint(vFace));
break;
case 3:
AssignCommand(oPC, SpeakString("Ноги уже не держат..."));
AssignCommand(oTarget3, SpeakString("Вперед и с песней!"));
AssignCommand(oTarget3, SetFacingPoint(vFace));
break;
}
}
}


Сообщение отредактировал gennady - Mar 15 2006, 06:05
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
Артём
сообщение Mar 19 2006, 10:34
Сообщение #2061


Level 5
**

Класс: Друид
Характер: Neutral Good
Раса: Человек



У меня вопрос.Как в он спаун одного непися, сделать анимацыю другого непися?
К примеру:После того как непись поздаровался (Аним преветствия) другой непись поклонился (Аним поклон)?
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
-fenix-
сообщение Mar 19 2006, 12:32
Сообщение #2062


Level 19
Иконки Групп

Класс: Воин
Характер: Lawful Good
Раса: Человек
NWN: Скриптинг [Sn]



Артём, тебе ведь уже писали.
NSS
object oNPC = OBJECT_SELF;//это тот на ком стоит скрипт
object oNPC1 = GetOBjectByTag("ТАГ");//это тот другой

//непись, нак отором стоит скрипт, что-то делает.
//2.0 - время, через которое нужно выполнить действие. Ставь скока там надо.
//AssignCommand - дать команду oNPC.
//ActionPlayAnimation - команда проиграть анимацию
DelayCommand(2.0, AssignCommand(oNPC, ActionPlayAnimation(ТУТ_НУЖНАЯ _АНИМАЦИЯ)));
//другая непись что-то делает
//2.0 - время, через которое нужно выполнить действие. Ставь скока там надо.
//AssignCommand - дать команду oNPC.
//ActionPlayAnimation - команда проиграть анимацию
DelayCommand(3.0, AssignCommand(oNPC1, ActionPlayAnimation(ТУТ_НУЖНАЯ _АНИМАЦИЯ)));


Читай на форуме тему по анимации! ТУТ

Сообщение отредактировал -fenix- - Mar 19 2006, 12:32
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
Артём
сообщение Mar 19 2006, 22:32
Сообщение #2063


Level 5
**

Класс: Друид
Характер: Neutral Good
Раса: Человек



Феникс я написал так как ты сказал.Но всеровно анимацыя второго неиграит.
NSS
void main()
{
object oNPC = OBJECT_SELF;
object oNPC1 = GetOBjectByTag("GAD_3");

DelayCommand(2.0, AssignCommand(oNPC, ActionPlayAnimation(ANIMATION_LOOPING_LISTEN,1.0,3.0f)));;
DelayCommand(0.5, SpeakString("?? ??… ??????? ????????, ??? ???? !"));
DelayCommand(PlaySound("vs_favhen5m_say")(IMG:style_emoticons/kolobok_light/wink3.gif) ;

DelayCommand(3.0, AssignCommand(oNPC1, ActionPlayAnimation(ANIMATION_LOOPING_LISTEN,1.0,3.0f)));
object oNPC=GetObjectByTag("GAD_3");
DelayCommand(3.5, AssignCommand(oNPC, SpeakString("? ??????? ??? ?? ?????? ????????!")));

DelayCommand(2.0, AssignCommand(oNPC, ActionPlayAnimation(ANIMATION_LOOPING_LISTEN,1.0,3.0f)));
DelayCommand(6.5, SpeakString("?? ??? ?????? ????? !"));
DelayCommand(PlaySound("vs_favhen5m_yes")(IMG:style_emoticons/kolobok_light/wink3.gif) ;
}
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
[MoF]Darth_Nick
сообщение Mar 19 2006, 22:58
Сообщение #2064


Level 6
Иконки Групп

Класс: Некромант
Характер: Chaotic Evil
Раса: Нежить
NWN: Скриптинг [PW]



QUOTE
DelayCommand(PlaySound("vs_favhen5m_say");

- неправельно

QUOTE
object oNPC = OBJECT_SELF;
...
object oNPC=GetObjectByTag("GAD_3");

- неправельно

QUOTE
object oNPC1 = GetOBjectByTag("GAD_3");

- неправельно

научись смотреть на ошибки компилятора..

1. DelayCommand, 1й аргумент всегда время через которое действие будет воспроизводится!
2. нельзя так делать..если хочеш переменой задать другое значение, то тип нельзя указывать( object oPC = GetEnteringObject(); ... oPC=GetExitingObject(); к примеру)
3. компилятор различает регистр..( GETENTERINGOBJECT() - неправельно, GetEnteringObject() - правельно.... )... GetObjectByTag надо...

З.Ы.
QUOTE
object oNPC = OBJECT_SELF;
необязательно

QUOTE

object oNPC = OBJECT_SELF;
object oNPC1 = GetOBjectByTag("GAD_3");
..
object oNPC=GetObjectByTag("GAD_3");


брет...

Сообщение отредактировал [MoF]Darth_Nick - Mar 19 2006, 23:10
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
Lex
сообщение Mar 20 2006, 00:11
Сообщение #2065


Level 5
Иконки Групп

Класс: Обыватель
Характер: Lawful Neutral
Раса: Человек
NWN: Модмейкер
Проклятие Левора
Порядок Времени



QUOTE(Артём @ Mar 19 2006, 22:32) [snapback]73339[/snapback]
Феникс я написал так как ты сказал.Но всеровно анимацыя второго неиграит.

а ЭТО скомпилировалось? (IMG:style_emoticons/kolobok_light/shok.gif)
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения

147 страниц V  « < 81 82 83 84 85 > » 
Ответить в эту темуОткрыть новую тему
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 



Текстовая версия Сейчас: 30th April 2025 - 08:28