|
|
|
|
Интересная задачка!
|
|
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: Нет, я не дам решение.
Не зли других и сам не злись. Мы - гости в этом мире. И если что не так - смирись, Будь поумнее - улыбнись, Ведь в мире всё закономерно. Зло, излучённое тобой, К тебе вернётся непременно.
|
|
|
|
lawson | Дата: Пятница, 29 Марта 2013, 21:26:26 | Сообщение # 2 |
Группа: Проверенные
Сообщений: 3482
Награды: 0
Репутация: 974
Блокировки:
| Цитата (Duosora) "-create (имя боевой единицы) [номер игрока]" читаем переводом команду -create + " ", дальше читаем следующую строку, если эта строка совпадает с одним из, заранее созданным БДстрингов юнита, читаем строку дальше + " " читаем строку номера игрока. Кстати не помню как но я уже делал что если дальше строка отсутсвует то делать такие то действия. Цитата (Duosora) -remove [all|random]" - содержимое круглых скобок - где круглые скобки?
Добавлено (29 Марта 2013, 21:26:26) --------------------------------------------- В общем принцип тот же самый что и выше
Nic nie wiem bo mam chuj. редактирую посты! ВСЕ!
Сообщение отредактировал lawson - Пятница, 29 Марта 2013, 21:28:28 |
|
|
|
Duosora | Дата: Пятница, 29 Марта 2013, 21:29:40 | Сообщение # 3 |
The cats never sleep...
Группа: Ветераны
Сообщений: 6734
Награды: 10
Репутация: 2161
Блокировки:
| lawson, Иди и сделай это в коде.
Не зли других и сам не злись. Мы - гости в этом мире. И если что не так - смирись, Будь поумнее - улыбнись, Ведь в мире всё закономерно. Зло, излучённое тобой, К тебе вернётся непременно.
|
|
|
|
lawson | Дата: Пятница, 29 Марта 2013, 21:36:30 | Сообщение # 4 |
Группа: Проверенные
Сообщений: 3482
Награды: 0
Репутация: 974
Блокировки:
| Цитата (Duosora) Иди и сделай это в коде. Уважаемый, я редактор давно уже не открываю
Nic nie wiem bo mam chuj. редактирую посты! ВСЕ!
Сообщение отредактировал SirNikolas - Суббота, 30 Марта 2013, 15:49:39 |
|
|
|
Naturekid | Дата: Пятница, 29 Марта 2013, 21:42:15 | Сообщение # 5 |
Группа: Заблокированные
Сообщений: 4982
Награды: 3
Репутация: 3347
Блокировки:
| Цитата (Duosora) Можно использовать только язык Jass2. Диалекты не допускаются. А чё, на гуях нельзя?
|
|
|
|
Ty3uK | Дата: Пятница, 29 Марта 2013, 21:42:42 | Сообщение # 6 |
Группа: Ветераны
Сообщений: 6125
Награды: 2
Репутация: 1617
Блокировки:
| Naturekid, а ты сможешь? You're welcome!
|
|
|
|
Duosora | Дата: Пятница, 29 Марта 2013, 21:43:31 | Сообщение # 7 |
The cats never sleep...
Группа: Ветераны
Сообщений: 6734
Награды: 10
Репутация: 2161
Блокировки:
| Цитата (Naturekid) А чё, на гуях нельзя? Цитата (Ty3uK) а ты сможешь? You're welcome! Ty3uK, Как насчёт подкинуть ещё 10 репы решившему?
Не зли других и сам не злись. Мы - гости в этом мире. И если что не так - смирись, Будь поумнее - улыбнись, Ведь в мире всё закономерно. Зло, излучённое тобой, К тебе вернётся непременно.
|
|
|
|
Naturekid | Дата: Пятница, 29 Марта 2013, 21:43:51 | Сообщение # 8 |
Группа: Заблокированные
Сообщений: 4982
Награды: 3
Репутация: 3347
Блокировки:
| Ty3uK, ну мб я просто настолько сонный, но вроде бы ничего неосуществимого не приметил. Пока что...
|
|
|
|
Ty3uK | Дата: Пятница, 29 Марта 2013, 22:34:24 | Сообщение # 9 |
Группа: Ветераны
Сообщений: 6125
Награды: 2
Репутация: 1617
Блокировки:
| Duosora, без бэ, если по кд пройдет.
|
|
|
|
Duosora | Дата: Пятница, 29 Марта 2013, 23:38:02 | Сообщение # 10 |
The cats never sleep...
Группа: Ветераны
Сообщений: 6734
Награды: 10
Репутация: 2161
Блокировки:
| Ty3uK, Вообще, Николас или Владика будет репут менять)
Не зли других и сам не злись. Мы - гости в этом мире. И если что не так - смирись, Будь поумнее - улыбнись, Ведь в мире всё закономерно. Зло, излучённое тобой, К тебе вернётся непременно.
|
|
|
|
KingMaximax | Дата: Суббота, 30 Марта 2013, 00:10:31 | Сообщение # 11 |
5 уровень
Группа: Проверенные
Сообщений: 89
Награды: 0
Репутация: 1333
Блокировки:
| Что-то знакомое.
Не пытайся понять Кинга Максимакса умом, пытайся понять душой.
|
|
|
|
Duosora | Дата: Суббота, 30 Марта 2013, 00:17:39 | Сообщение # 12 |
The cats never sleep...
Группа: Ветераны
Сообщений: 6734
Награды: 10
Репутация: 2161
Блокировки:
| Цитата (KingMaximax) Что-то знакомое. Возможно.
Не зли других и сам не злись. Мы - гости в этом мире. И если что не так - смирись, Будь поумнее - улыбнись, Ведь в мире всё закономерно. Зло, излучённое тобой, К тебе вернётся непременно.
|
|
|
|
KingMaximax | Дата: Суббота, 30 Марта 2013, 00:20:04 | Сообщение # 13 |
5 уровень
Группа: Проверенные
Сообщений: 89
Награды: 0
Репутация: 1333
Блокировки:
| Цитата (Duosora) -create (имя боевой единицы) [номер игрока] это больше напомнило)) я думал, ну понял))) остальное обсудим в скупе.
Не пытайся понять Кинга Максимакса умом, пытайся понять душой.
|
|
|
|
DragoN | Дата: Суббота, 30 Марта 2013, 02:27:08 | Сообщение # 14 |
Инквизитор
Группа: Стримеры
Сообщений: 4348
Награды: 7
Репутация: 2776
Блокировки:
| Цитата (Duosora) "-remove [all|random]" - содержимое круглых скобок - обязательный параметр, содержимое квадратных - опциональный. Если указан флаг all, то удаляются все созданные боевые единицы. Если указан флаг random, то нужно удалить одну случайную боевую единицу. Если флаг не указан, то удалить всех выделенных игроком боевых единиц. Пример: "-remove all" удалит всех боевых единиц. мсье, возможно у меня ухудшилось зрение, но я тут вижу только квадратные скобки
El Psy Congroo
|
|
|
|
Bru | Дата: Суббота, 30 Марта 2013, 11:24:44 | Сообщение # 15 |
i<3bo4k@
Группа: Акулы
Сообщений: 4750
Награды: 2
Репутация: 1960
Блокировки:
| Цитата (DragoN) мсье, возможно у меня ухудшилось зрение, но я тут вижу только квадратные скобки Очевидно, это условные обозначения, относящиеся ко всей статье.
|
|
|
|
SirNikolas | Дата: Суббота, 30 Марта 2013, 11:30:32 | Сообщение # 16 |
Группа: Модераторы
Сообщений: 6729
Награды: 1
Репутация: 1867
Блокировки:
| Нет, просто Руслан копипейстил и забыл исправить.
|
|
|
|
Duosora | Дата: Суббота, 30 Марта 2013, 12:00:32 | Сообщение # 17 |
The cats never sleep...
Группа: Ветераны
Сообщений: 6734
Награды: 10
Репутация: 2161
Блокировки:
| Цитата (SirNikolas) Нет, просто Руслан копипейстил и забыл исправить. Ох ёлки... Спасибо, эдитаю. Edit: Николасу большое спасибо за правку.
Не зли других и сам не злись. Мы - гости в этом мире. И если что не так - смирись, Будь поумнее - улыбнись, Ведь в мире всё закономерно. Зло, излучённое тобой, К тебе вернётся непременно.
|
|
|
|
Naturekid | Дата: Суббота, 30 Марта 2013, 14:31:43 | Сообщение # 18 |
Группа: Заблокированные
Сообщений: 4982
Награды: 3
Репутация: 3347
Блокировки:
| Почти готово, кидать в ЛС или в тему?
Добавлено (30 Марта 2013, 14:14:08) --------------------------------------------- готово. Так что?
Добавлено (30 Марта 2013, 14:23:38) --------------------------------------------- Капец, 0 внимания
Добавлено (30 Марта 2013, 14:31:43) --------------------------------------------- Кинул решение в ЛС Дуосу. 4 переменные+1 переменная-массив. При желании можно сделать ещё на 2 переменные меньше.
Сообщение отредактировал Naturekid - Суббота, 30 Марта 2013, 14:31:55 |
|
|
|
11061998 | Дата: Суббота, 30 Марта 2013, 14:45:00 | Сообщение # 19 |
1 уровень
Группа: Пользователи
Сообщений: 1
Награды: 0
Репутация: 0
Блокировки:
| Чтоб не каждому. И можно в два массива, либо UnitUserData Код globals integer lIndz = 0 trigger trgChatCheatz unit array unitsz endglobals //-------- function chatCheatActz takes nothing returns nothing local string sMessz local string sAz local integer lIz //optional If units can dead set lIz = 0 loop if GetUnitTypeId(unitsz[lIz]) == 0 then if lIz < 4 and GetUnitTypeId(unitsz[lIz+1]) != 0 then set unitsz[lIz] = unitsz[lIz+1] set unitsz[lIz+1] = null elseif lIz < 3 and GetUnitTypeId(unitsz[lIz+2]) != 0 then set unitsz[lIz] = unitsz[lIz+2] set unitsz[lIz+2] = null elseif lIz < 2 and GetUnitTypeId(unitsz[lIz+3]) != 0 then set unitsz[lIz] = unitsz[lIz+3] set unitsz[lIz+3] = null elseif lIz < 1 and GetUnitTypeId(unitsz[lIz+4]) != 0 then set unitsz[lIz] = unitsz[lIz+4] set unitsz[lIz+4] = null else exitwhen true endif endif set lIz = lIz + 1 exitwhen lIz ==5 endloop if lIz < 4 then set lIndz = lIz endif //end optional call ClearTextMessages() set sMessz = GetEventPlayerChatString() 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[lIndz]) != 0 then call RemoveUnit(unitsz[lIndz]) set unitsz[lIndz] = null endif set unitsz[lIndz] = CreateUnitByName(Player(lIz), sAz, I2R(128*lIndz), 0, 270.0) set lIndz = lIndz + 1 if lIndz > 4 then set lIndz = 0 endif return endif endif elseif sMessz == "-remove" then set lIndz = 0 loop exitwhen GetUnitTypeId(unitsz[lIndz]) == 0 set lIndz = lIndz + 1 exitwhen lIndz > 4 endloop if lIndz > 0 then set lIndz = lIndz -1 endif set lIz = 0 loop exitwhen lIz > lIndz if IsUnitSelected(unitsz[lIz],GetLocalPlayer()) then call RemoveUnit(unitsz[lIz]) set unitsz[lIz]=unitsz[lIndz] set unitsz[lIndz] = null set lIndz = lIndz - 1 call SetUnitX(unitsz[lIz],I2R(lIz*128)) endif set lIz = lIz + 1 endloop if lIndz < 4 then set lIndz = lIndz +1 endif return elseif sMessz == "-remove all" then set lIndz = 4 loop call RemoveUnit(unitsz[lIndz]) set unitsz[lIndz] = null set lIndz = lIndz - 1 exitwhen lIndz < 0 endloop return elseif sMessz == "-remove random" then set lIz = 0 loop exitwhen GetUnitTypeId(unitsz[lIz]) == 0 set lIz = lIz + 1 exitwhen lIz > 4 endloop if lIz > 0 then set lIndz = lIz-1 set lIz = GetRandomInt(0,lIz) call RemoveUnit(unitsz[lIz]) set unitsz[lIz]=unitsz[lIndz] set unitsz[lIndz] = null call SetUnitX(unitsz[lIz],I2R(lIz*128)) endif return endif call DisplayTextToPlayer(GetLocalPlayer(),0,0,"|cFF0000FF"+GetEventPlayerChatString()+"\n|cFF00FF00---------------------------------------------- ---------------------\n|cFFFF0000ERROR:|cFF00FF00 Invalid Input \n-------------------------------------------------------------------|r\n") endfunction //----------------- function InitGlobals takes nothing returns nothing set lIndz = 4 loop set unitsz[lIndz] = null set lIndz = lIndz - 1 exitwhen lIndz < 0 endloop set trgChatCheatz = CreateTrigger( ) call TriggerRegisterPlayerChatEvent( trgChatCheatz, GetLocalPlayer(), "", false ) call TriggerAddAction( trgChatCheatz, function chatCheatActz ) endfunction
|
|
|
|
SirNikolas | Дата: Суббота, 30 Марта 2013, 14:50:24 | Сообщение # 20 |
Группа: Модераторы
Сообщений: 6729
Награды: 1
Репутация: 1867
Блокировки:
| Цитата (11061998) call TriggerRegisterPlayerChatEvent( trgChatCheatz, GetLocalPlayer(), "", false ) Ай-ай-ай, нехорошо давать десинхронизирующий код.
|
|
|
|
111115 | Дата: Суббота, 30 Марта 2013, 14:51:22 | Сообщение # 21 |
1 уровень
Группа: Пользователи
Сообщений: 1
Награды: 0
Репутация: 0
Блокировки:
| Цитата (Duosora) В игре находится только один игрок - красный!
|
|
|
|
SirNikolas | Дата: Суббота, 30 Марта 2013, 14:51:44 | Сообщение # 22 |
Группа: Модераторы
Сообщений: 6729
Награды: 1
Репутация: 1867
Блокировки:
| Цитата (Duosora) Можно использовать только локальные переменные и условия, а также вызывать любые функции кроме SetUnitUserData, SetItemUserData и все функции, связанные с кэшем и хэш-таблицами.
|
|
|
|
1201300 | Дата: Суббота, 30 Марта 2013, 14:53:29 | Сообщение # 23 |
1 уровень
Группа: Пользователи
Сообщений: 1
Награды: 0
Репутация: 0
Блокировки:
| Это верно.
|
|
|
|
Naturekid | Дата: Суббота, 30 Марта 2013, 15:00:13 | Сообщение # 24 |
Группа: Заблокированные
Сообщений: 4982
Награды: 3
Репутация: 3347
Блокировки:
| раз решения можно сюда кидать, то вот моё ): http://rghost.ru/44894698
|
|
|
|
Duosora | Дата: Суббота, 30 Марта 2013, 15:15:57 | Сообщение # 25 |
The cats never sleep...
Группа: Ветераны
Сообщений: 6734
Награды: 10
Репутация: 2161
Блокировки:
| Naturekid, Что за фиготень ты намутил, позволь тебя спросить? SleepAction вообще здесь не нужен, как и пропуск оставшихся действий. Да ещё и забыл кое-что. И для кого я сказал, что циклы запрещены?Добавлено (30 Марта 2013, 15:15:57) ---------------------------------------------
Цитата (Duosora) Можно использовать только локальные переменные и условия, а также вызывать любые функции кроме SetUnitUserData, SetItemUserData и все функции, связанные с кэшем и хэш-таблицами. Цитата (Duosora) Можно создать только одну переменную-массив! Нельзя всё остальное, в том числе создавать циклы или писать собственные функции.
Не зли других и сам не злись. Мы - гости в этом мире. И если что не так - смирись, Будь поумнее - улыбнись, Ведь в мире всё закономерно. Зло, излучённое тобой, К тебе вернётся непременно.
|
|
|
|
|
|
|
|
|
|
|