|
|
|
|
Интересная задачка!
|
|
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
Блокировки:
| В первом посте, по условию.
Не зли других и сам не злись. Мы - гости в этом мире. И если что не так - смирись, Будь поумнее - улыбнись, Ведь в мире всё закономерно. Зло, излучённое тобой, К тебе вернётся непременно.
|
|
|
|
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 и все функции, связанные с кэшем и хэш-таблицами. = вот так. жмоты и чепушилы.
Сообщение отредактировал 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
Блокировки:
| Что за решальниики набежали? специально зарегистрировались, чтобы задачу решить?
|
|
|
|
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, Сколько локальных переменных можно?
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 Это же не оговорено в условии
|
|
|
|
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
Блокировки:
| сия фигня спокойно пишется на ГУИ при чём для выполнения требуемых условий - отказа от циклов, потребуется создать кучу маленьких триггеров.
но задание не коректно, потому что не указаны все типы создаваемых боевых единиц.
Зачем делать для других новые карты... ... лучше устроить коту божественный почесон. :)
|
|
|
|
Duosora | Дата: Пятница, 05 Апреля 2013, 18:35:44 | Сообщение # 50 |
The cats never sleep...
Группа: Ветераны
Сообщений: 6734
Награды: 10
Репутация: 2161
Блокировки:
| Цитата (vov68) потребуется создать кучу маленьких триггеров. Можно создать только один триггер ЗЫ: задание корректно, я его свободно выполнял.
Не зли других и сам не злись. Мы - гости в этом мире. И если что не так - смирись, Будь поумнее - улыбнись, Ведь в мире всё закономерно. Зло, излучённое тобой, К тебе вернётся непременно.
|
|
|
|
|
|
|
|
|
|
|