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


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


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

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!


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

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, ну мб я просто настолько сонный, но вроде бы ничего неосуществимого не приметил.
Пока что... :D


 

Ty3uKДата: Пятница, 29 Марта 2013, 22:34:24 | Сообщение # 9
Группа: Ветераны
Сообщений: 6125
Награды: 2
Репутация: 1617
Блокировки:
Duosora, без бэ, если по кд пройдет.

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

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
Репутация: 1950
Блокировки:
Цитата (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)
Можно создать только одну переменную-массив!
Нельзя всё остальное, в том числе создавать циклы или писать собственные функции.


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

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

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