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


[ Новые сообщения · Участники · Правила форума · Поиск · RSS ]
  • Страница 2 из 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: Нет, я не дам решение.


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

-=FoX=-Дата: Суббота, 30 Марта 2013, 15:19:41 | Сообщение # 26
1 уровень
Группа: Пользователи
Сообщений: 10
Награды: 0
Репутация: 0
Блокировки:
Не Jass
Игроки считаются от 1, а не от 0
Не работает -remove

Добавлено (30 Марта 2013, 15:19:41)
---------------------------------------------

Цитата (Duosora)
циклы запрещены?

где????
Цитата (Duosora)
Нельзя всё остальное,

хренасе
 

DuosoraДата: Суббота, 30 Марта 2013, 15:22:31 | Сообщение # 27
The cats never sleep...
Группа: Ветераны
Сообщений: 6734
Награды: 10
Репутация: 2161
Блокировки:
Цитата (-=FoX=-)
где????

В первом посте, по условию.


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

NaturekidДата: Суббота, 30 Марта 2013, 15:26:24 | Сообщение # 28
Группа: Заблокированные
Сообщений: 4982
Награды: 3
Репутация: 3347
Блокировки:
Цитата (Duosora)
И для кого я сказал, что циклы запрещены?

Цитата (Duosora)
Можно использовать только локальные переменные и условия, а также вызывать любые функции кроме SetUnitUserData, SetItemUserData и все функции, связанные с кэшем и хэш-таблицами.

что за пое... туфта?
А для чего это, стесняюсь спросить?
Нет я могу убрать цикл и поставить вместо него столько же действий, тех, что в цикле.
Цитата (Duosora)
SleepAction вообще здесь не нужен, как и пропуск оставшихся действий

ну не нужен так не нужен, забыл убрать.
По крайней мере если игрок ввёл что-то не так - триггер не будет проверять дальше.


 

SirNikolasДата: Суббота, 30 Марта 2013, 15:34:52 | Сообщение # 29
Группа: Модераторы
Сообщений: 6729
Награды: 1
Репутация: 1867
Блокировки:
Duosora, где сказано, что нельзя использовать "Skip remaining actions"? Это же просто return.

 

DuosoraДата: Суббота, 30 Марта 2013, 15:38:20 | Сообщение # 30
The cats never sleep...
Группа: Ветераны
Сообщений: 6734
Награды: 10
Репутация: 2161
Блокировки:
Цитата (SirNikolas)
где сказано, что нельзя использовать "Skip remaining actions"? Это же просто return.

Ну, когда давалась эта задачка, функции "ещё не были пройдены", поэтому return не допускается.


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

NaturekidДата: Суббота, 30 Марта 2013, 15:43:39 | Сообщение # 31
Группа: Заблокированные
Сообщений: 4982
Награды: 3
Репутация: 3347
Блокировки:
чушь собачья
теперь понятно почему одни выигрывают конкурсы со знанием всего лишь ГУИ, а другие ливают с него с позором.
Потому что играются со всякими функциями, вместо решения задачи по делу.

Цитата (Duosora)
Что за фиготень ты намутил

Цитата (Duosora)
SetUnitUserData, SetItemUserData и все функции, связанные с кэшем и хэш-таблицами.

=
Цитата (Duosora)
фиготень

вот так.

жмоты и чепушилы.




Сообщение отредактировал Naturekid - Суббота, 30 Марта 2013, 16:24:42
 

BlackFoxiДата: Суббота, 30 Марта 2013, 15:52:23 | Сообщение # 32
2 уровень
Группа: Пользователи
Сообщений: 23
Награды: 0
Репутация: 10
Блокировки:
Если нельзя ВСЕ остальное, то нельзя также глобалки. Переменная триггера сдохнет через конечное время вместе с потоком. Придется предположить, что созданные юниты никуда не смещаются, а посторонние не создаются.
Если же еще и return нельзя, то будет наращиваться количество потоков и вайтов.
Цитата (Duosora)
Можно использовать только язык Jass2.

Никаких ГУИ.
 

NaturekidДата: Суббота, 30 Марта 2013, 15:55:33 | Сообщение # 33
Группа: Заблокированные
Сообщений: 4982
Награды: 3
Репутация: 3347
Блокировки:
Что за решальниики набежали? hmm
специально зарегистрировались, чтобы задачу решить?


 

BlackFoxiДата: Суббота, 30 Марта 2013, 15:59:38 | Сообщение # 34
2 уровень
Группа: Пользователи
Сообщений: 23
Награды: 0
Репутация: 10
Блокировки:
Чтобы репа не пошла на мейн.
 

SirNikolasДата: Суббота, 30 Марта 2013, 16:01:43 | Сообщение # 35
Группа: Модераторы
Сообщений: 6729
Награды: 1
Репутация: 1867
Блокировки:
Цитата (BlackFoxi)
Если нельзя ВСЕ остальное, то нельзя также глобалки.
Да, нельзя.
Цитата (BlackFoxi)
Переменная триггера сдохнет через конечное время вместе с потоком.
Переменная сдохнет, а триггер останется.
Цитата (BlackFoxi)
Придется предположить, что созданные юниты никуда не смещаются, а посторонние не создаются.
Пожалуй, здесь ты прав.
Цитата (BlackFoxi)
Если же еще и return нельзя, то будет наращиваться количество потоков и вайтов.
?
Функция завершается естественным образом, при достижении endfunction.

Добавлено (30 Марта 2013, 16:01:43)
---------------------------------------------

Цитата (Naturekid)
Что за решальниики набежали?
Это Алиса.


 

DuosoraДата: Суббота, 30 Марта 2013, 16:17:27 | Сообщение # 36
The cats never sleep...
Группа: Ветераны
Сообщений: 6734
Награды: 10
Репутация: 2161
Блокировки:
Цитата (SirNikolas)
Это Алиса.

И я надеюсь, что Алиса меня не разочарует :]


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

Владыка-МираДата: Суббота, 30 Марта 2013, 16:23:41 | Сообщение # 37
1 уровень
Группа: Пользователи
Сообщений: 2
Награды: 0
Репутация: -46
Блокировки:
Цитата (Duosora)
Алиса

Она
наглое рыжее
бестия

Duosora,
Сколько
локальных
переменных
можно?


http://warcraft3ft.info/index/8-60262 - это я, признаюсь.
Извините товарищ супер-модератор, больше не буду мультики создавать.
vladyka - пидор
NatureKid - няшка
 

NaturekidДата: Суббота, 30 Марта 2013, 16:24:59 | Сообщение # 38
Группа: Заблокированные
Сообщений: 4982
Награды: 3
Репутация: 3347
Блокировки:
[уйти]

 

FOX840Дата: Суббота, 30 Марта 2013, 16:27:36 | Сообщение # 39
1 уровень
Группа: Пользователи
Сообщений: 2
Награды: 0
Репутация: 0
Блокировки:
Цитата (Duosora)
И я надеюсь, что Алиса меня не разочарует

На деньги спорил?


FOX
 

Владыка-МираДата: Суббота, 30 Марта 2013, 16:37:47 | Сообщение # 40
1 уровень
Группа: Пользователи
Сообщений: 2
Награды: 0
Репутация: -46
Блокировки:
FOX840,
не надоело
взламывать
?


http://warcraft3ft.info/index/8-60262 - это я, признаюсь.
Извините товарищ супер-модератор, больше не буду мультики создавать.
vladyka - пидор
NatureKid - няшка
 

FOX840Дата: Суббота, 30 Марта 2013, 16:48:51 | Сообщение # 41
1 уровень
Группа: Пользователи
Сообщений: 2
Награды: 0
Репутация: 0
Блокировки:
Надоело и что?
Blizzard.j подгружается пустой; дамми запрещены. Да?
Цитата (FOX840)
На деньги спорил?


FOX
 

DuosoraДата: Суббота, 30 Марта 2013, 18:39:13 | Сообщение # 42
The cats never sleep...
Группа: Ветераны
Сообщений: 6734
Награды: 10
Репутация: 2161
Блокировки:
Цитата (FOX840)
Blizzard.j подгружается пустой; дамми запрещены. Да?

Именно.

Добавлено (30 Марта 2013, 18:39:13)
---------------------------------------------

Цитата (FOX840)
На деньги спорил?

Нет, тут просто явно Naturekid vs Alice


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

Fres2Дата: Суббота, 30 Марта 2013, 18:47:36 | Сообщение # 43
1 уровень
Группа: Пользователи
Сообщений: 1
Награды: 0
Репутация: 0
Блокировки:
Тогда
Код

function InitGlobals takes nothing returns nothing
     local trigger trgInSz
     local unit array unitsz
     local integer lIz
     local group gAz
     local string sAz
     local string sMessz
     set sMessz = GetEventPlayerChatString()
      
     if sMessz == null then
         set trgInSz = CreateTrigger()
         call TriggerRegisterPlayerChatEvent( trgInSz, Player(0), "", false )
         call TriggerAddAction( trgInSz, function InitGlobals )
     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)
         call GroupRemoveUnit(gAz,unitsz[0])
         set unitsz[1] = FirstOfGroup(gAz)
         call GroupClear(gAz)
         call GroupEnumUnitsInRange(gAz,256.0,0.0,66.6,null)
         call GroupRemoveUnit(gAz,unitsz[1])
         set unitsz[2] = FirstOfGroup(gAz)
         call GroupClear(gAz)
         call GroupEnumUnitsInRange(gAz,384.0,0.0,66.6,null)
         call GroupRemoveUnit(gAz,unitsz[2])
         set unitsz[3] = FirstOfGroup(gAz)
         call GroupClear(gAz)
         call GroupEnumUnitsInRange(gAz,512.0,0.0,66.6,null)
         call GroupRemoveUnit(gAz,unitsz[3])
         set unitsz[4] = FirstOfGroup(gAz)
         call DestroyGroup(gAz)
         set gAz = null
         call ClearTextMessages()
         if SubString(sMessz,0,8) == "-create " then
             set lIz = 8
             loop
                 exitwhen lIz == StringLength(sMessz)
                 exitwhen SubString(sMessz,lIz,lIz + 1) == " "
                 set lIz = lIz + 1
             endloop
             set sAz = SubString(sMessz,8,lIz)
             if UnitId(sAz) > 0 then
                 if lIz == StringLength(sMessz) then
                     set lIz = 0
                 else
                     set lIz=S2I(SubString(sMessz,lIz,StringLength(sMessz)))
                 endif
                 if lIz < 15 then
                     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)
                         call CreateUnitByName(Player(lIz), sAz, 512.0, 0, 270.0)
                     elseif GetUnitTypeId(unitsz[0]) == 0 then
                         call CreateUnitByName(Player(lIz), sAz, 0.0, 0, 270.0)
                     elseif unitsz[1] == null then
                         call CreateUnitByName(Player(lIz), sAz, 128.0, 0, 270.0)
                     elseif unitsz[2] == null then
                         call CreateUnitByName(Player(lIz), sAz, 256.0, 0, 270.0)
                     elseif unitsz[3] == null then
                         call CreateUnitByName(Player(lIz), sAz, 384.0, 0, 270.0)
                     else
                         call CreateUnitByName(Player(lIz), sAz, 512.0, 0, 270.0)
                     endif
                 endif
             endif
         elseif sMessz == "-remove all" then
             call RemoveUnit(unitsz[0])
             call RemoveUnit(unitsz[1])
             call RemoveUnit(unitsz[2])
             call RemoveUnit(unitsz[3])
             call RemoveUnit(unitsz[4])
         elseif sMessz == "-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 sMessz == "-remove random" then
             if GetUnitTypeId(unitsz[0]) == 0 then
                 set lIz = 0
             elseif GetUnitTypeId(unitsz[1]) == 0 then
                 set lIz = 1
             elseif GetUnitTypeId(unitsz[2]) == 0 then
                 set lIz = 2
             elseif GetUnitTypeId(unitsz[3]) == 0 then
                 set lIz = 3
             elseif GetUnitTypeId(unitsz[4]) == 0 then
                 set lIz = 4
             else
                 set lIz = 5
             endif
             if lIz > 0 then
                 set lIz = GetRandomInt(0,lIz-1)
                 call RemoveUnit(unitsz[lIz])
                 if lIz < 4 then
                     call SetUnitX(unitsz[lIz+1],I2R(lIz*128))
                     set lIz = lIz + 1
                 endif
                 if lIz < 4 then
                     call SetUnitX(unitsz[lIz+1],I2R(lIz*128))
                     set lIz = lIz + 1
                 endif
                 if lIz < 4 then
                     call SetUnitX(unitsz[lIz+1],I2R(lIz*128))
                     set lIz = lIz + 1
                 endif
                 if lIz < 4 then
                     call SetUnitX(unitsz[lIz+1],I2R(lIz*128))
                 endif
             endif
         else
             call DisplayTextToPlayer(Player(0),0,0,"|cFF0000FF"+GetEventPlayerChatString()+"\n|cFF00FF00----------------------------------------------------- --------------\n|cFFFF0000ERROR:|cFF00FF00 Invalid Input \n-------------------------------------------------------------------|r\n")
         endif
     endif
     set unitsz[0] = null
     set unitsz[1] = null
     set unitsz[2] = null
     set unitsz[3] = null
     set unitsz[4] = null
endfunction
 

-=FoX=-Дата: Суббота, 30 Марта 2013, 19:01:55 | Сообщение # 44
1 уровень
Группа: Пользователи
Сообщений: 10
Награды: 0
Репутация: 0
Блокировки:
Цитата (Duosora)
Нет, я не дам решение(не располагаю)
 

dredsssДата: Суббота, 30 Марта 2013, 20:42:58 | Сообщение # 45
7 уровень
Группа: Проверенные
Сообщений: 403
Награды: 1
Репутация: 50
Блокировки:
Что ответил Nestharus? Не судьба получить +50 от Nestharus?
Она наглое рыжее две
 

Ty3uKДата: Суббота, 30 Марта 2013, 22:21:58 | Сообщение # 46
Группа: Ветераны
Сообщений: 6125
Награды: 2
Репутация: 1617
Блокировки:
Я бы ворвался с #for #endfor
Это же не оговорено в условии trollface


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

DuosoraДата: Суббота, 30 Марта 2013, 22:26:37 | Сообщение # 47
The cats never sleep...
Группа: Ветераны
Сообщений: 6734
Награды: 10
Репутация: 2161
Блокировки:
Цитата (-=FoX=-)
Нет, я не дам решение(не располагаю)

Располагаю, но не дам. Не путай народ.
Цитата (dredsss)
Что ответил Nestharus? Не судьба получить +50 от Nestharus?
Она наглое рыжее две

Нестарус просто автор. Я решил задачу и решил выложить её на Инфо. Приз - +50.


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

dredsssДата: Суббота, 30 Марта 2013, 22:47:06 | Сообщение # 48
7 уровень
Группа: Проверенные
Сообщений: 403
Награды: 1
Репутация: 50
Блокировки:
Врешь ты все. Сколько раз уже обещал и не выполнял?
Еще интереснее было читать в оригинале.
В оригинале написано:
Код
Действия в JASS/vJASS называются функциями и нативками. Нативки - действия, определенные в Warcraft 3. Функции - действия определенные в JASS. И те и другие запускаются одинаково. Запуск действия в  JASS/vJASS требует ключевого слова call
Действие - это что-то, то выполняет какую-то задачу. GUI триггер имеет: События, Условия, Действия. Действия, по существу или запускают списки других дуйствий, или изменяют переменные.

И это все что есть про функции(то есть их действительно нельзя использовать, но нельзя также писать и внутри уже существующих), про триггеры в Jass и про триггеры в GUI.
Таким образом, задача должна решаться не на jass, а в GUI. И глобальные переменные можно(endglobals прошли).
Ну и, раз задачи получились разные, можно из моего решения убрать нехороший элемент: цикл можно заменит присваиванием. Каким?

Добавлено (30 Марта 2013, 22:47:06)
---------------------------------------------
Да, и где игнор? Обещанный, желанный и колумбовый и магелланный?

 

vov68Дата: Четверг, 04 Апреля 2013, 15:49:53 | Сообщение # 49
10 уровень
Группа: Проверенные
Сообщений: 1329
Награды: 3
Блокировки:
сия фигня спокойно пишется на ГУИ
при чём для выполнения требуемых условий - отказа от циклов, потребуется создать кучу маленьких триггеров.

но задание не коректно, потому что не указаны все типы создаваемых боевых единиц. :D :D


Зачем делать для других новые карты...
... лучше устроить коту божественный почесон. :)
 

DuosoraДата: Пятница, 05 Апреля 2013, 18:35:44 | Сообщение # 50
The cats never sleep...
Группа: Ветераны
Сообщений: 6734
Награды: 10
Репутация: 2161
Блокировки:
Цитата (vov68)
потребуется создать кучу маленьких триггеров.

Можно создать только один триггер :)
ЗЫ: задание корректно, я его свободно выполнял.


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

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

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