 |
|
 |
|
Интересная задачка! |
Duosora | Дата: Пятница, 29 Март 2013, 21:03:42 | Сообщение # 1 |
The cats never sleep...
Группа: Ветераны
Сообщений: 6640
Награды: 10
Репутация: 2065
Блокировки: 
| Взято из урока 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 |
Группа: Проверенные
Сообщений: 3469
Награды: 0
Репутация: 932
Блокировки: 
| Цитата (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...
Группа: Ветераны
Сообщений: 6640
Награды: 10
Репутация: 2065
Блокировки: 
| lawson, Иди и сделай это в коде.
[ Русские триггеры ] Школа - это место, где шлифуют булыжники и портят алмазы. © Роберт Ингерсолл Те, кто читает книги, всегда будут управлять теми, кто смотрит телевизор. © В. Пелевин
|
|
|
| |
lawson | Дата: Пятница, 29 Март 2013, 21:36:30 | Сообщение # 4 |
Группа: Проверенные
Сообщений: 3469
Награды: 0
Репутация: 932
Блокировки: 
| Цитата (Duosora) Иди и сделай это в коде. Уважаемый, я редактор давно уже не открываю
Nic nie wiem bo mam chuj. редактирую посты! ВСЕ!
Сообщение отредактировал SirNikolas - Суббота, 30 Март 2013, 15:49:39 |
|
|
| |
Naturekid | Дата: Пятница, 29 Март 2013, 21:42:15 | Сообщение # 5 |
Группа: Проверенные
Сообщений: 4408
Награды: 3
Репутация: 2955
Блокировки: 
| Цитата (Duosora) Можно использовать только язык Jass2. Диалекты не допускаются. А чё, на гуях нельзя?
|
|
|
| |
Ty3uK | Дата: Пятница, 29 Март 2013, 21:42:42 | Сообщение # 6 |
Группа: КоМодераторы
Сообщений: 6092
Награды: 2
Репутация: 1561
Блокировки: 
| Naturekid, а ты сможешь? You're welcome!
|
|
|
| |
Duosora | Дата: Пятница, 29 Март 2013, 21:43:31 | Сообщение # 7 |
The cats never sleep...
Группа: Ветераны
Сообщений: 6640
Награды: 10
Репутация: 2065
Блокировки: 
| Цитата (Naturekid) А чё, на гуях нельзя? Цитата (Ty3uK) а ты сможешь? You're welcome! Ty3uK, Как насчёт подкинуть ещё 10 репы решившему?
[ Русские триггеры ] Школа - это место, где шлифуют булыжники и портят алмазы. © Роберт Ингерсолл Те, кто читает книги, всегда будут управлять теми, кто смотрит телевизор. © В. Пелевин
|
|
|
| |
Naturekid | Дата: Пятница, 29 Март 2013, 21:43:51 | Сообщение # 8 |
Группа: Проверенные
Сообщений: 4408
Награды: 3
Репутация: 2955
Блокировки: 
| Ty3uK, ну мб я просто настолько сонный, но вроде бы ничего неосуществимого не приметил. Пока что...
|
|
|
| |
Ty3uK | Дата: Пятница, 29 Март 2013, 22:34:24 | Сообщение # 9 |
Группа: КоМодераторы
Сообщений: 6092
Награды: 2
Репутация: 1561
Блокировки: 
| Duosora, без бэ, если по кд пройдет.
|
|
|
| |
Duosora | Дата: Пятница, 29 Март 2013, 23:38:02 | Сообщение # 10 |
The cats never sleep...
Группа: Ветераны
Сообщений: 6640
Награды: 10
Репутация: 2065
Блокировки: 
| Ty3uK, Вообще, Николас или Владика будет репут менять)
[ Русские триггеры ] Школа - это место, где шлифуют булыжники и портят алмазы. © Роберт Ингерсолл Те, кто читает книги, всегда будут управлять теми, кто смотрит телевизор. © В. Пелевин
|
|
|
| |
KingMaximax | Дата: Суббота, 30 Март 2013, 00:10:31 | Сообщение # 11 |
5 уровень
Группа: Проверенные
Сообщений: 108
Награды: 0
Репутация: 1333
Блокировки: 
| Что-то знакомое.
|
|
|
| |
Duosora | Дата: Суббота, 30 Март 2013, 00:17:39 | Сообщение # 12 |
The cats never sleep...
Группа: Ветераны
Сообщений: 6640
Награды: 10
Репутация: 2065
Блокировки: 
| Цитата (KingMaximax) Что-то знакомое. Возможно.
[ Русские триггеры ] Школа - это место, где шлифуют булыжники и портят алмазы. © Роберт Ингерсолл Те, кто читает книги, всегда будут управлять теми, кто смотрит телевизор. © В. Пелевин
|
|
|
| |
KingMaximax | Дата: Суббота, 30 Март 2013, 00:20:04 | Сообщение # 13 |
5 уровень
Группа: Проверенные
Сообщений: 108
Награды: 0
Репутация: 1333
Блокировки: 
| Цитата (Duosora) -create (имя боевой единицы) [номер игрока] это больше напомнило)) я думал, ну понял))) остальное обсудим в скупе.
|
|
|
| |
DragoN | Дата: Суббота, 30 Март 2013, 02:27:08 | Сообщение # 14 |
Инквизитор
Группа: Стримеры
Сообщений: 4304
Награды: 6
Репутация: 2695
Блокировки: 
| Цитата (Duosora) "-remove [all|random]" - содержимое круглых скобок - обязательный параметр, содержимое квадратных - опциональный. Если указан флаг all, то удаляются все созданные боевые единицы. Если указан флаг random, то нужно удалить одну случайную боевую единицу. Если флаг не указан, то удалить всех выделенных игроком боевых единиц. Пример: "-remove all" удалит всех боевых единиц. мсье, возможно у меня ухудшилось зрение, но я тут вижу только квадратные скобки
-"See? Not stars. They're doors." -"Doors to...?" -"To everywhere."
|
|
|
| |
Bru | Дата: Суббота, 30 Март 2013, 11:24:44 | Сообщение # 15 |
Gray
Группа: КоМодераторы
Сообщений: 3653
Награды: 2
Репутация: 1386
Блокировки: 
| Цитата (DragoN) мсье, возможно у меня ухудшилось зрение, но я тут вижу только квадратные скобки Очевидно, это условные обозначения, относящиеся ко всей статье.
ЗАКРЫЛ ОДНУ ТЕМУ УСТАНОВИЛ ТОТАЛИТАРНЫЙ РЕЖИМ 
|
|
|
| |
SirNikolas | Дата: Суббота, 30 Март 2013, 11:30:32 | Сообщение # 16 |
Группа: Модераторы
Сообщений: 5935
Награды: 1
Репутация: 1287
Блокировки: 
| Нет, просто Руслан копипейстил и забыл исправить.
|
|
|
| |
Duosora | Дата: Суббота, 30 Март 2013, 12:00:32 | Сообщение # 17 |
The cats never sleep...
Группа: Ветераны
Сообщений: 6640
Награды: 10
Репутация: 2065
Блокировки: 
| Цитата (SirNikolas) Нет, просто Руслан копипейстил и забыл исправить. Ох ёлки... Спасибо, эдитаю. Edit: Николасу большое спасибо за правку.
[ Русские триггеры ] Школа - это место, где шлифуют булыжники и портят алмазы. © Роберт Ингерсолл Те, кто читает книги, всегда будут управлять теми, кто смотрит телевизор. © В. Пелевин
|
|
|
| |
Naturekid | Дата: Суббота, 30 Март 2013, 14:31:43 | Сообщение # 18 |
Группа: Проверенные
Сообщений: 4408
Награды: 3
Репутация: 2955
Блокировки: 
| Почти готово, кидать в ЛС или в тему?
Добавлено (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 |
Группа: Модераторы
Сообщений: 5935
Награды: 1
Репутация: 1287
Блокировки: 
| Цитата (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 |
Группа: Модераторы
Сообщений: 5935
Награды: 1
Репутация: 1287
Блокировки: 
| Цитата (Duosora) Можно использовать только локальные переменные и условия, а также вызывать любые функции кроме SetUnitUserData, SetItemUserData и все функции, связанные с кэшем и хэш-таблицами.
|
|
|
| |
1201300 | Дата: Суббота, 30 Март 2013, 14:53:29 | Сообщение # 23 |
1 уровень
Группа: Пользователи
Сообщений: 1
Награды: 0
Репутация: 0
Блокировки: 
| Это верно.
|
|
|
| |
Naturekid | Дата: Суббота, 30 Март 2013, 15:00:13 | Сообщение # 24 |
Группа: Проверенные
Сообщений: 4408
Награды: 3
Репутация: 2955
Блокировки: 
| раз решения можно сюда кидать, то вот моё ): http://rghost.ru/44894698
|
|
|
| |
Duosora | Дата: Суббота, 30 Март 2013, 15:15:57 | Сообщение # 25 |
The cats never sleep...
Группа: Ветераны
Сообщений: 6640
Награды: 10
Репутация: 2065
Блокировки: 
| Naturekid, Что за фиготень ты намутил, позволь тебя спросить? SleepAction вообще здесь не нужен, как и пропуск оставшихся действий. Да ещё и забыл кое-что. И для кого я сказал, что циклы запрещены?Добавлено (30 Марта 2013, 15:15:57) ---------------------------------------------
Цитата (Duosora) Можно использовать только локальные переменные и условия, а также вызывать любые функции кроме SetUnitUserData, SetItemUserData и все функции, связанные с кэшем и хэш-таблицами. Цитата (Duosora) Можно создать только одну переменную-массив! Нельзя всё остальное, в том числе создавать циклы или писать собственные функции.
[ Русские триггеры ] Школа - это место, где шлифуют булыжники и портят алмазы. © Роберт Ингерсолл Те, кто читает книги, всегда будут управлять теми, кто смотрит телевизор. © В. Пелевин
|
|
|
|
|
|
 |
|
 |
|
|