Сейчас 05:10:06 Пятница, 29 марта, 2024 год
[ x ] Главная ⇒ Форум ⇐ RSS Файлы Cтатьи Картинки В о й т и   или   з а р е г и с т р и р о в а т ь с я


[ Новые сообщения · Участники · Правила форума · Поиск · RSS ]
  • Страница 3 из 3
  • «
  • 1
  • 2
  • 3
Модератор форума: PUVer, SirNikolas, Ty3uK  
Форум о Warcraft 3 » Раздел для картостроителей » GUI / Jass » Интересная задачка!
Интересная задачка!
DuosoraДата: Пятница, 29 Марта 2013, 21:03:42 | Сообщение # 1
The cats never sleep...
Группа: Ветераны
Сообщений: 6734
Награды: 10
Репутация: 2161
Блокировки:
Взято из урока JASS на The Hive Workshop. Автор - Nestharus.
Тому, кто её решит, могу дать +20 в репутацию. Задача того стоит. Если Николас поддержит, то сделаем награду выше.
edit: SirNikolas подкинет ещё +20.
edit2: Ty3uK ещё +10 выдаст.

Ваше задание - сделать следующие чатовые команды:
"-create (имя боевой единицы) [номер игрока]" - содержимое круглых скобок - обязательный параметр, содержимое квадратных - опциональный (но самих скобок в строке нет). Если номер игрока не указан, она создаётся для красного игрока (игрок 0). Боевых единиц надо создавать в координатах (0; 0) и как угол указывать 270 градусов. Пример: "-create peasant 11" должен создать работника для коричневого игрока.
"-remove [all|random]" - содержимое квадратных скобок - опциональный параметр. Если указан флаг all, то удаляются все созданные боевые единицы. Если указан флаг random, то нужно удалить одну случайную боевую единицу. Если флаг не указан, то удалить всех выделенных игроком боевых единиц. Пример: "-remove all" удалит всех боевых единиц.

Заметьте: вы можете создать до 5 боевых единиц. Если создано уже 5 и игрок просит создать ещё одну, то заменить существующую боевую единицу на ту, которую игрок попросил создать командой в чате.
Если боевые единицы не удаляются, а только создаются, то на каждой позиции боевая единица будет заменяться раз в пять команд.

Вы можете создать только 4 свои собственные переменные. Переменные, описанные ниже, не входят в число этих четырёх.
  • Вы можете объявить дополнительную переменную для хранения подстрок типа string;
  • Вы можете объявить дополнительную переменную типа string, чтобы отловить вводимое сообщение;


Если игрок вводит сообщение, которое содержит вообще не чатовую команду или криво введённую чатовую команду, выводить ему сообщение такого вида:
"Введённый игроком текст*
-------------------------------------------------------------------
ERROR: Invalid Input
-------------------------------------------------------------------"
ERROR - красным цветом;
Введённый игроком текст - синим цветом;
всё остальное - зелёным цветом.

Когда вы сохраняете боевую единицу в переменную, поставьте её в координате X, отличающуюся на 128 от координаты предыдущей боевой единицы. Боевые единицы ставятся слева направо, максимум 5 боевых единиц.
Не должно быть "дырок"! Если в данный момент на карте находится 4 боевых единицы, то самая крайняя правая позиция должна быть пустой!
Используйте ClearTestMessages(), чтобы очистить экран от сообщений об ошибке.

Можно использовать только язык Jass2. Диалекты не допускаются.
Можно использовать только локальные переменные и условия, а также вызывать любые функции кроме SetUnitUserData, SetItemUserData и все функции, связанные с кэшем и хэш-таблицами.
Можно создать только одну переменную-массив!
Нельзя всё остальное, в том числе создавать циклы или писать собственные функции.

edit: Пояснение на вопрос от VasyaBaratrum: В игре находится только один игрок - красный!
edit2: Нет, я не дам решение.


Не зли других и сам не злись.
Мы - гости в этом мире.
И если что не так - смирись,
Будь поумнее - улыбнись,
Ведь в мире всё закономерно.
Зло, излучённое тобой,
К тебе вернётся непременно.
 

MuradorДата: Пятница, 05 Апреля 2013, 20:08:23 | Сообщение # 51
Группа: Проверенные
Сообщений: 1221
Награды: 1
Репутация: 446
Блокировки:
дуос, объясни, в чем сложность сей задачи?
может есть подвох которого я не вижу, но я раз 10 перечитал =\ и не нашел его
 

BlackFoxiДата: Суббота, 06 Апреля 2013, 09:18:18 | Сообщение # 52
2 уровень
Группа: Пользователи
Сообщений: 23
Награды: 0
Репутация: 10
Блокировки:
Murador, подвох в том, что решение должно прославлять Дуоса. Написано что можно использовать call if else elseif endif local и нельзя все остальное, в том числе loop function set. А как же без set?
Решение с тремя переменными. Дуос лесом, интерес спортивный.
Код

function main takes nothing returns nothing
     local trigger trgInSz
     local unit array unitsz
     local group gAz
     if GetEventPlayerChatString() == null then
          set trgInSz = CreateTrigger()
          call TriggerRegisterPlayerChatEvent( trgInSz, Player(0), "", false )
          call TriggerAddAction( trgInSz, function main )  
     else
          set gAz = CreateGroup()
          call GroupEnumUnitsInRange(gAz,0.0,0.0,66.6,null)
          set unitsz[0] = FirstOfGroup(gAz)
          call GroupClear(gAz)
          call GroupEnumUnitsInRange(gAz,128.0,0.0,66.6,null)
          set unitsz[1] = FirstOfGroup(gAz)
          call GroupClear(gAz)
          call GroupEnumUnitsInRange(gAz,256.0,0.0,66.6,null)
          set unitsz[2] = FirstOfGroup(gAz)
          call GroupClear(gAz)
          call GroupEnumUnitsInRange(gAz,384.0,0.0,66.6,null)
          set unitsz[3] = FirstOfGroup(gAz)
          call GroupClear(gAz)
          call GroupEnumUnitsInRange(gAz,512.0,0.0,66.6,null)
          set unitsz[4] = FirstOfGroup(gAz)
          call DestroyGroup(gAz)
          set gAz = null
          call ClearTextMessages()
          if SubString(GetEventPlayerChatString(),0,8) == "-create " then
             if SubString(GetEventPlayerChatString(),StringLength(GetEventPlayerChatString()) - 3,StringLength(GetEventPlayerChatString()) -2) == " " then
                 set unitsz[5]=CreateUnitByName(Player(S2I(SubString(GetEventPlayerChatString(),StringLength(GetEventPlayerChatString())-2,StringLength(GetEventPlayerChat String())))), SubString(GetEventPlayerChatString(),8,StringLength(GetEventPlayerChatString())-3), 512., 0., 270.0)
             elseif SubString(GetEventPlayerChatString(),StringLength(GetEventPlayerChatString()) - 2,StringLength(GetEventPlayerChatString()) -1) == " " then
                 set unitsz[5]= CreateUnitByName(Player(S2I(SubString(GetEventPlayerChatString(),StringLength(GetEventPlayerChatString())-1,StringLength(GetEventPlayerChatS tring())))), SubString(GetEventPlayerChatString(),8,StringLength(GetEventPlayerChatString()) -2), 512.0, 0., 270.0)
             else
                 set unitsz[5]= CreateUnitByName(Player(0), SubString(GetEventPlayerChatString(),8,StringLength(GetEventPlayerChatString())), 512.0, 128., 270.0)
             endif
             if unitsz[5] != null then
                 call PauseUnit(unitsz[5],true)
                 if GetUnitTypeId(unitsz[4]) != 0 then
                     call RemoveUnit(unitsz[0])
                     call SetUnitX(unitsz[1],0.0)
                     call SetUnitX(unitsz[2],128.0)
                     call SetUnitX(unitsz[3],256.0)
                     call SetUnitX(unitsz[4],384.0)
                 elseif GetUnitTypeId(unitsz[0]) == 0 then
                     call SetUnitX(unitsz[5],0.0)
                 elseif unitsz[1] == null then
                     call SetUnitX(unitsz[5],128.0)
                 elseif unitsz[2] == null then
                     call SetUnitX(unitsz[5],256.0)
                 elseif unitsz[3] == null then
                     call SetUnitX(unitsz[5],384.0)
                 endif
                 call SetUnitY(unitsz[5],0.0)
                 set unitsz[5] = null
             else
                 call DisplayTextToPlayer(Player(0),0,0,"|cFF0000FF"+GetEventPlayerChatString()+"\n|cFF00FF00-----------------------------------------------------  --------------\n|cFFFF0000ERROR:|cFF00FF00 Invalid Input \n-------------------------------------------------------------------|r\n")
             endif
         elseif GetEventPlayerChatString() == "-remove all" then
             call RemoveUnit(unitsz[0])
             call RemoveUnit(unitsz[1])
             call RemoveUnit(unitsz[2])
             call RemoveUnit(unitsz[3])
             call RemoveUnit(unitsz[4])
         elseif GetEventPlayerChatString() == "-remove" then
             if IsUnitSelected(unitsz[0],Player(0)) then
                 call RemoveUnit(unitsz[0])
                 call SetUnitX(unitsz[1],0.0)
                 call SetUnitX(unitsz[2],128.0)
                 call SetUnitX(unitsz[3],256.0)
                 call SetUnitX(unitsz[4],384.0)
                 set unitsz[1] = unitsz[2]
                 set unitsz[2] = unitsz[3]
                 set unitsz[3] = unitsz[4]
             endif
             if IsUnitSelected(unitsz[1],Player(0)) then
                 call RemoveUnit(unitsz[1])
                 call SetUnitX(unitsz[2],128.0)
                 call SetUnitX(unitsz[3],256.0)
                 call SetUnitX(unitsz[4],384.0)
                 set unitsz[2] = unitsz[3]
                 set unitsz[3] = unitsz[4]
             endif
             if IsUnitSelected(unitsz[2],Player(0)) then
                 call RemoveUnit(unitsz[2])
                 call SetUnitX(unitsz[3],256.0)
                 call SetUnitX(unitsz[4],384.0)
                 set unitsz[3] = unitsz[4]
             endif
             if IsUnitSelected(unitsz[3],Player(0)) then
                 call RemoveUnit(unitsz[3])
                 call SetUnitX(unitsz[4],384.0)
             endif
             if IsUnitSelected(unitsz[4],Player(0)) then
                 call RemoveUnit(unitsz[4])
             endif
         elseif GetEventPlayerChatString() == "-remove random" then
             if GetUnitTypeId(unitsz[0]) != 0 then
                 if GetUnitTypeId(unitsz[1]) == 0 then
                     call RemoveUnit(unitsz[0])
                 elseif GetUnitTypeId(unitsz[2]) == 0 then
                     if GetRandomInt(0,1) == 0 then
                         call RemoveUnit(unitsz[0])
                         call SetUnitX(unitsz[1],0.)
                     else
                         call RemoveUnit(unitsz[1])
                     endif
                 elseif GetUnitTypeId(unitsz[3]) == 0 then
                     if GetRandomInt(0,2) == 0 then
                         call RemoveUnit(unitsz[0])
                         call SetUnitX(unitsz[1],0.)
                         call SetUnitX(unitsz[2],128.)
                     elseif GetRandomInt(0,1) == 0 then
                         call RemoveUnit(unitsz[1])
                         call SetUnitX(unitsz[2],128.)
                     else
                         call RemoveUnit(unitsz[2])
                     endif
                 elseif GetUnitTypeId(unitsz[4]) == 0 then
                     if GetRandomInt(0,3) == 0 then
                         call RemoveUnit(unitsz[0])
                         call SetUnitX(unitsz[1],0.)
                         call SetUnitX(unitsz[2],128.)
                         call SetUnitX(unitsz[3],256.)
                     elseif GetRandomInt(0,2) == 0 then
                         call RemoveUnit(unitsz[1])
                         call SetUnitX(unitsz[2],128.)
                         call SetUnitX(unitsz[3],256.)
                     elseif GetRandomInt(0,1) == 0 then
                         call RemoveUnit(unitsz[2])
                         call SetUnitX(unitsz[3],256.)
                     else
                         call RemoveUnit(unitsz[3])
                     endif
                 else
                     if GetRandomInt(0,4) == 0 then
                         call RemoveUnit(unitsz[0])
                         call SetUnitX(unitsz[1],0.)
                         call SetUnitX(unitsz[2],128.)
                         call SetUnitX(unitsz[3],256.)
                         call SetUnitX(unitsz[4],384.)
                     elseif GetRandomInt(0,3) == 0 then
                         call RemoveUnit(unitsz[1])
                         call SetUnitX(unitsz[2],128.)
                         call SetUnitX(unitsz[3],256.)
                         call SetUnitX(unitsz[4],384.)
                     elseif GetRandomInt(0,2) == 0 then
                         call RemoveUnit(unitsz[1])
                         call SetUnitX(unitsz[3],256.)
                         call SetUnitX(unitsz[4],384.)
                     elseif GetRandomInt(0,1) == 0 then
                         call RemoveUnit(unitsz[3])
                         call SetUnitX(unitsz[4],384.)
                     else
                         call RemoveUnit(unitsz[4])
                     endif
                 endif
             endif
         else
             call DisplayTextToPlayer(Player(0),0,0,"|cFF0000FF"+GetEventPlayerChatString()+"\n|cFF00FF00-----------------------------------------------------  --------------\n|cFFFF0000ERROR:|cFF00FF00 Invalid Input \n-------------------------------------------------------------------|r\n")
         endif
         set unitsz[0] = null
         set unitsz[1] = null
         set unitsz[2] = null
         set unitsz[3] = null
         set unitsz[4] = null  
     endif
endfunction
 

Ty3uKДата: Суббота, 06 Апреля 2013, 11:29:19 | Сообщение # 53
Группа: Ветераны
Сообщений: 6125
Награды: 2
Репутация: 1617
Блокировки:
Я думал, что cJASS и vJASS'овые хуки запрещены.
Я бы тогда сэкономил место в коде через препроцессорные циклы. :)


╭∩╮(︶︿︶)╭∩╮
"Ульта Тайда мне в жопу!" © k0fe1n
Статьи: MUI-1|MUI-2|Шрифт
Полезности: JASP|JNGP|Уголок библиотек
 

duos94Дата: Суббота, 06 Апреля 2013, 12:38:48 | Сообщение # 54
2 уровень
Группа: Пользователи
Сообщений: 34
Награды: 0
Репутация: 18
Блокировки:
Цитата (Duosora)
Нет, я не дам решение

И тут такой врыв Дуоса.
"Болваны! Вы просто вынуждаете меня открыть свое гениальное решение, иначе так будете постить непроходимый бред.
Написал же что писать функции нельзя. В JASS2 любые действия могут выполняться только в теле функции. Значит задача не имеет решений."
 

Капитан_ОчевидностьДата: Суббота, 06 Апреля 2013, 12:42:57 | Сообщение # 55
1 уровень
Группа: Пользователи
Сообщений: 13
Награды: 0
Репутация: 0
Блокировки:
На этом топик клоз.

Добавлено (06 Апреля 2013, 12:42:57)
---------------------------------------------
А Дуосу +50 за единственное правильное решение.

 

DuosoraДата: Суббота, 06 Апреля 2013, 13:12:34 | Сообщение # 56
The cats never sleep...
Группа: Ветераны
Сообщений: 6734
Награды: 10
Репутация: 2161
Блокировки:
Цитата (Капитан_Очевидность)
А Дуосу +50 за единственное правильное решение.

Выслал Нестарусу, соглашусь, что решение Алисы говно. :)

Добавлено (06 Апреля 2013, 13:12:34)
---------------------------------------------
[13-10-25] Nestharus: another thing is no collections obviously
[13-10-29] Nestharus: group is a collection
[13-10-32] Nestharus: so if they are using group.. lol
[13-10-39] Nestharus: hashtable is also a collection
[13-10-45] Nestharus: just no collections allowed :o
[13-11-34] Nestharus: well, they can use collections
[13-11-41] Nestharus: just not the native JASS collections..
[13-11-44] Nestharus: so like they can make thei rown, like a stack
[13-11-54] Nestharus: but they can't use group, hashtable, force, etc

Лисоньку затралили)


Не зли других и сам не злись.
Мы - гости в этом мире.
И если что не так - смирись,
Будь поумнее - улыбнись,
Ведь в мире всё закономерно.
Зло, излучённое тобой,
К тебе вернётся непременно.
 

Капитан_ОчевидностьДата: Суббота, 06 Апреля 2013, 13:28:40 | Сообщение # 57
1 уровень
Группа: Пользователи
Сообщений: 13
Награды: 0
Репутация: 0
Блокировки:
Выше писали, что задача от Дуоса отличается от задачи Nestharus, запретом GUI и глобальных переменных.

Добавлено (06 Апреля 2013, 13:28:40)
---------------------------------------------
Разные задачи - разные решения.

 

duos94Дата: Среда, 10 Апреля 2013, 18:01:00 | Сообщение # 58
2 уровень
Группа: Пользователи
Сообщений: 34
Награды: 0
Репутация: 18
Блокировки:
Цитата (Duosora)
затралили

Значит цель топана троллинг? Нужно перенести в общалку?
Где мои +50? Задача решена верно.
Цитата (duos94)
Написал же что писать функции нельзя. В JASS2 любые действия могут выполняться только в теле функции. Значит задача не имеет решений.
 

H_A_PKДата: Понедельник, 15 Апреля 2013, 12:10:43 | Сообщение # 59
Быдлокодер
Группа: Проверенные
Сообщений: 2605
Награды: 1
Репутация: 822
Блокировки:
тема говно

проклятье ляжет на любого
кто дочитает до конца
нет не дочитывай не надо
остановись ну всё капец
 

ВолчачкаДата: Вторник, 16 Апреля 2013, 01:10:49 | Сообщение # 60
САЙТ УМЕР ППЦ
Группа: Проверенные
Сообщений: 1361
Награды: 0
Репутация: 2165
Блокировки:
Это просто пример create, но ещё над remove подумаю, и то есть это всё в один триггер и в одну функцию затолкать?
Код
function Trig_chat_Actions takes nothing returns nothing
local string s = GetEventPlayerChatString()
local string a = ""
local integer b = 1
local integer i = StringLength( s )
set b = S2I( SubString( s, i - 2, i) )
if b < 10  and b > 0 then
set a=SubString( s, 8, i - 2)
else
if b > 9 and b < 13 then
set a = SubString( s, 8, i - 3 )
else
set a = SubString( s, 8, i)
endif
endif
if b!=0 then     
call CreateUnit( Player( b - 1 ), UnitId( a ), 0., 0., GetRandomReal( 0., 360. ) )
else
call CreateUnit( Player( 0 ), UnitId( a ), 0., 0., GetRandomReal( 0., 360. ) )
endif
endfunction

//===========================================================================
function InitTrig_chat takes nothing returns nothing
        set gg_trg_chat = CreateTrigger(  )
        call TriggerRegisterPlayerChatEvent( gg_trg_chat, Player(0), "-create", false )
        call TriggerAddAction( gg_trg_chat, function Trig_chat_Actions )
endfunction

Ага, теперь я понял всю хитрость, как сделать с -remove и -create вместе. и всё в один триггер.
Норм прикол.


Сообщение отредактировал Волчачка - Вторник, 16 Апреля 2013, 01:54:53
 

NetДата: Четверг, 13 Июня 2013, 21:51:40 | Сообщение # 61
2 уровень
Группа: Пользователи
Сообщений: 30
Награды: 0
Репутация: 11
Блокировки:
А в профиле Дуоса на The Hive Workshop есть ответ Nestharus на решение самого Дуоса:
01-14-2013 06:18 PM Nestharus
Re: Project 3
Код
Failed ; )

you removed incorrectly

your creation was also very poor : O

the lessons show of a better way to check if something is a digit

it also limits how many vars you create I believe if you read the instructions

look at the pics and you'll see what I meant about removing incorrectly

Jass:
*   You may only declare 4 of your own variables.
*       Variables provided do not count towards your 4.

Jass:
*   You may declare one additional variable for storing *substrings* of type string
*
*   You may declare one additional variable for getting player input of type string
*       This variable may also be used to store *substrings*

so that's 4 of your own and 2 strings

you declared 7 there (2 strings and 5 of your own)

BJs are also not allowed
GroupPickRandomUnit(udg_UnitGroup)

that's a general rule (introduced in an earlier lesson)  
 

ВолчачкаДата: Пятница, 14 Июня 2013, 01:23:50 | Сообщение # 62
САЙТ УМЕР ППЦ
Группа: Проверенные
Сообщений: 1361
Награды: 0
Репутация: 2165
Блокировки:
Net, я понял, как это решается, но это просто лишняя трата времени на многочисленные if endif и substring + манипуляция с массивом. Вкратце эта задачка некий тонко-эластичный троллинг Дуоса и не более. Ломать голову из-за какой-то ерунды. А если юнитов будет 40 или 100? конечно без цикла не обойтись никак. А так при 5 юнитов - "Ерунда © Волчий всадник".

Сообщение отредактировал Волчачка - Пятница, 14 Июня 2013, 01:24:09
 

Ty3uKДата: Пятница, 14 Июня 2013, 11:08:43 | Сообщение # 63
Группа: Ветераны
Сообщений: 6125
Награды: 2
Репутация: 1617
Блокировки:
#for
...
#endfor
trollface


╭∩╮(︶︿︶)╭∩╮
"Ульта Тайда мне в жопу!" © k0fe1n
Статьи: MUI-1|MUI-2|Шрифт
Полезности: JASP|JNGP|Уголок библиотек
 

NetДата: Пятница, 14 Июня 2013, 14:13:34 | Сообщение # 64
2 уровень
Группа: Пользователи
Сообщений: 30
Награды: 0
Репутация: 11
Блокировки:
А три точки, это на каком языке можно? Я так тоже хотю.
 

Ty3uKДата: Пятница, 14 Июня 2013, 15:00:30 | Сообщение # 65
Группа: Ветераны
Сообщений: 6125
Награды: 2
Репутация: 1617
Блокировки:
Net, Brainfuck? :)

╭∩╮(︶︿︶)╭∩╮
"Ульта Тайда мне в жопу!" © k0fe1n
Статьи: MUI-1|MUI-2|Шрифт
Полезности: JASP|JNGP|Уголок библиотек
 

lawsonДата: Пятница, 14 Июня 2013, 18:13:53 | Сообщение # 66
Группа: Проверенные
Сообщений: 3482
Награды: 0
Репутация: 974
Блокировки:
как можно на яве произвести загрузку всех файлов в определенной папке?

Добавлено (14 Июня 2013, 18:13:53)
---------------------------------------------
ну тоесть по типу?


Nic nie wiem bo mam chuj.
редактирую посты! ВСЕ!
 

SirNikolasДата: Пятница, 14 Июня 2013, 19:33:19 | Сообщение # 67
Группа: Модераторы
Сообщений: 6729
Награды: 1
Репутация: 1867
Блокировки:
Цитата (Net)
А три точки, это на каком языке можно? Я так тоже хотю.
C.
В C++ есть еще второй способ применения.
А в стандарте 11 года добавили и третий.
Цитата (Ty3uK)
Net, Brainfuck? :)
lol




Сообщение отредактировал SirNikolas - Пятница, 14 Июня 2013, 19:34:01
 

Ty3uKДата: Пятница, 14 Июня 2013, 20:06:24 | Сообщение # 68
Группа: Ветераны
Сообщений: 6125
Награды: 2
Репутация: 1617
Блокировки:
SirNikolas, дык ведь так и есть. :)

╭∩╮(︶︿︶)╭∩╮
"Ульта Тайда мне в жопу!" © k0fe1n
Статьи: MUI-1|MUI-2|Шрифт
Полезности: JASP|JNGP|Уголок библиотек
 

ВолчачкаДата: Суббота, 15 Июня 2013, 01:18:18 | Сообщение # 69
САЙТ УМЕР ППЦ
Группа: Проверенные
Сообщений: 1361
Награды: 0
Репутация: 2165
Блокировки:
Тема превратилась во флудильню и оффтопню, предлагаю её закрыть. Полный ответ так и никто и не дал.
 

Ty3uKДата: Суббота, 15 Июня 2013, 09:35:22 | Сообщение # 70
Группа: Ветераны
Сообщений: 6125
Награды: 2
Репутация: 1617
Блокировки:
Согласен.

╭∩╮(︶︿︶)╭∩╮
"Ульта Тайда мне в жопу!" © k0fe1n
Статьи: MUI-1|MUI-2|Шрифт
Полезности: JASP|JNGP|Уголок библиотек
 

Форум о Warcraft 3 » Раздел для картостроителей » GUI / Jass » Интересная задачка!
  • Страница 3 из 3
  • «
  • 1
  • 2
  • 3
Поиск:

Copyright © 2006 - 2024 Warcraft3FT.info При копировании материалов c сайта ставьте, пожалуйста, активную обратную ссылку на нас • Design by gReeB04ki ©
Хостинг от uCoz