1. Этот сайт использует файлы cookie. Продолжая пользоваться данным сайтом, Вы соглашаетесь на использование нами Ваших файлов cookie. Узнать больше.
  2. Вы находитесь в сообществе Rubukkit. Мы - администраторы серверов Minecraft, разрабатываем собственные плагины и переводим на различные языки плагины наших коллег из других стран.
    Скрыть объявление
Скрыть объявление
В преддверии глобального обновления, мы проводим исследования, которые помогут нам сделать опыт пользования форумом ещё удобнее. Помогите нам, примите участие!

В разработке PowerTower - Многофункциональные башни

Тема в разделе "Разработка плагинов для новичков", создана пользователем DPOH-VAR, 6 май 2014.

  1. Автор темы
    DPOH-VAR

    DPOH-VAR Старожил Пользователь

    Баллы:
    153
    Skype:
    dpohvar
    Добрый день!

    Хочу поделиться нашим новым проектом:
    PowerTower
    Авторы: @DPOH-VAR , @MYXOMOPX
    Идея заключается в создании конструкций из блоков (башен), каждая из которых будет выполнять какую-то функцию.
    Видео для ознакомления:

    Тут представлен только один вид башен, который стреляет лазером по всем живым существам.

    Каждая башня сохраняется в файл
    PowerTower/towers/%UUID_башни%.yml
    В этом файле записывается класс башни а также дополнительные параметры (жизни, броня, энергия и т.д.)
    У игроков будет возможность построить или купить собственные башни, настраивать их, возможно прокачивать, создавать оборонные конструкции и так далее. Это добавит в игру элементы стратегии, а также новые цели для игроков.

    Необходимые плагины:
    VarScript 0.6.x - ядро PowerTower написано на Groovy. Без варскрипта тут никак)
    HoloAPI - для отображения показателей башен: жизней, энергии и т.д.
    PowerNBT 0.7.x - нужен только в том случае, если будет использоваться запись уникальных метаданных в предметы

    Установка:
    - Установить VarScript и Groovy к нему
    - забросить PowerTower.jar в папку lib
    - настроить воркспейс (одним скриптом, инструкция будет позже прилагаться к исходникам)
    - готово!

    Проект будет с открытым исходным кодом на гитхабе (как только мы его заведем ;) )

    Башня, стреляющая лазером - это круто, но этого не достаточно.
    Поэтому ждем ваших идей!

    Для разработчиков:

    Можно очень простым способом создать свой тип башен, или расширить существующий.
    Достаточно создать класс своей башни, завернуть в jar-архив и кинуть в папку lib.
    Что-то вроде такого:
    Код:
    class MyTower extends SimpleBlockTower{
        @TowerData('Healing') double healValue = 2.0
        private long trigger = -1
    
        @TowerStart def 'on start' (Workspace workspace) {
            trigger = workspace.addPeriod({
                location.world.players.find {
                    it.location.distance(location) < 5
                } ?.health += healValue
            },20)
        }
    
        @TowerStop def 'on stop' (Workspace workspace) {
            workspace.stopPeriod trigger
        }
    }
    Эта башня будет каждую секунду лечить игрока в радиусе 5 блоков на 2 hp.
    Причем это значение будет сохраняться в yaml:
    class: MyTower
    Healing: 2
    Я привел пример на груви, никто не запрещает писать на чистой java.
    документация к API будет вместе с исходниками.
     
    zuma2, Gentalion, fromgate и 7 другим нравится это.
  2. Hephest

    Hephest Старожил Пользователь

    Баллы:
    153
    Skype:
    hephest1904
    Идеи от @Hephest

    FreezyTower: башня, в основе лежит блок льда. Второй блок - дроппер, направленный вверх. Каждый период (от 5 до 10 секунд) выпускает particles белого цвета круглой формы. После этого, игроки, попавшие в радиус действия FreezyTower, получают замедление на 3 секунды. Радиус действия и размер "снежного шара" взаимосвязаны. Т.е. радиус действия 3 блока - шар визуально достигает 2,5 блока

    CreepyTower: башня, в основе которой лежит блок песка душ. Второй блок - голова скелета-иссушителя. Каждый период воспроизводится анимация летящей головы иссушителя (та, которой он стреляет), визуально выглядит, что каждый период голова "активируется" (увеличивается/изменяет цвет, т.к. entity головы иссушителя имеет несколько другую цветовую гамму). После анимации, спавнит в направлении игрока зомби и скелетов, причём в рандомном количестве и соотношении. Максимальное кол-во мобов ограничивается в конфиге

    WitchTower: башня, в основе которой лежит блок адского кирпича. Второй блок - котёл, без воды. Каждый период выпускает "луч" чёрных particles от феерверка и спустя 1 секунду в "зону поражения" падают зелья урона, отравления и слабости (в рандомном кол-ве и порядке). Зелья представляют собой entity, начинают спавнится на высоте 3-х блоков над котлом. "Зона поражения" - площадка с радиусом действия, указанная в конфиге.

    CannonTower: башня, в основе которой лежит блок железа. Второй блок - наковальня. Каждый период, если игрок находится в радиусе действия, башня "издаёт" звуки зажигания и взрыва динамита. Во время звучания взрыва, из наковальни вылетает фаербол гаста в направлении игрока. радиус опять же указывается в конфиге.

    SkyTower: башня, в основе которой лежит блок кварца. Второй блок - паутина. При обнаружении игрока в радиусе действия, башня будет откидывать игрока с регулируемой силой в направлении, противоположном к направлению движения игрока. При откидывании, с паутины "выстреливает" луч белых particles.

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

    MageTower: башня, в основе которой лежит блок книжного шкафа. Второй блок - зачаровальня. При обнаружении игрока в радиусе действия, воспроизводиться particles букв со стола зачарования в виде взрыва сферы из этих же букв. После этого, в игрока ударяет молния.
     
    Последнее редактирование: 7 май 2014
    NazikTV, MYXOMOPX, Reality_SC и 2 другим нравится это.
  3. Автор темы
    DPOH-VAR

    DPOH-VAR Старожил Пользователь

    Баллы:
    153
    Skype:
    dpohvar
    Думаю, что лучше сюда. Одним постом на форуме удается лучше сформулировать мысль, чем в том самом уютном.
    Я завтра распишу свои идеи)
     
    Hephest нравится это.
  4. sgoldik

    sgoldik Старожил Пользователь

    Баллы:
    103
    Вау, продолжайте!
    Думаю нужно сделать чтобы около башни накладывался эффект замедления, слабости, иссушения.
     
  5. ql_Nik_lp

    ql_Nik_lp Старожил Девелопер Пользователь

    Баллы:
    173
    Skype:
    q-nik-p
    Имя в Minecraft:
    ql_Nik_lp
    Идея отличная, хотелось бы увидеть картинок :)
     
  6. MYXOMOPX

    MYXOMOPX Активный участник Пользователь

    Баллы:
    78
    Skype:
    MYXOMOPX
    Имя в Minecraft:
    MYXOMOPX
    Идеи неплохие. И, кстати, башни не обязательно должны быть их двух блоков.
     
  7. Hephest

    Hephest Старожил Пользователь

    Баллы:
    153
    Skype:
    hephest1904
    Таки это в корне меняет дело! Как только освобожусь - напишу ещё идей
     
  8. Автор темы
    DPOH-VAR

    DPOH-VAR Старожил Пользователь

    Баллы:
    153
    Skype:
    dpohvar
    Ха! По идее возможны башни вообще без блоков. Например, в виде энтитей, летающих блоков, сгустка эффектов и т.д. Но для простоты пока что рассматриваем башни как конструкции из обычных блоков.


    Мои идеи, как обещал:

    1) Башни (не все, но многие) будут иметь запас энергии. За каждый выстрел или какое-то действие тратится энергия.
    2) Башни-генераторы. Они будут генерировать энергию в зависимости от чего-либо
    (например от солнечного света, на дровах, высасывая жизни из энтитей и др. варианты)
    Генератор может передать свою энергию другим башням, но имеет ограничение на скорость передачи
    3) Башни-накопители. Аналогичны генераторам, но сами не создают энергию. Могут накапливать в себе большое количество энергии.
    4) Генератор щита. Его можно установить на некоторые башни. При получении повреждения башня сначала тратит очки щита. Для восстановления щита требуется энергия, причем щит восстанавливается достаточно медленно.
    5) Башни-цитадели. Описание ниже.

    Теперь то, что стоит обдумать в первую очередь:

    1. Как игроки будут строить башни?

    Идея №1.1: Для постройки башни требуется уникальный предмет (блок). Когда ставим этот блок на землю, на этом месте разворачивается башня. В мета-информации блока записан тип башни, а также какие-то дополнительные параметры. Эти блоки можно где-то купить (например в лаборатории у жителей) или скрафтить.
    Недостатки: требуется PowerNBT для чтения мета-информации у предмета. В режиме Creative мета у предметов иногда сбрасывается.

    Идея №1.2: Сначала необходимо построить конструкцию башни, а затем провести ритуал. Например, ритуал - клик компасом по верхнему блоку. Компас тратится, башня начинает работать.
    Недостатки: Цена каждой башни определяется блоками, из которых она состоит. ИМХО для таких башен это слишком дешево. Еще в данном случае придется фиксировать набор блоков, из которых состоит башня.

    Идея №1.3: Существуют большие башни-цитадели. Строить другие башни можно только в определенном радиусе от цитадели. Чтобы создать башню, нужно как-то указать цитадели, какой тип башни и где нужно построить. /** C&C Red Alert **/ После этого башня связана с цитаделью. При разрушении цитадели башня перестает функционировать.
    Недостатки: Сложно, много тонкостей, которые нужно продумать. Но мне кажется, что это самый интересный вариант.

    2. Распознавание свой-чужой
    Для атакующих башен очень важно определять цель, союзников и врагов.
    Вот, что я думаю по этому поводу:

    Идея 2.1: У каждой башни будет что-то похожее на список пермитов для игроков. Пусть сохраняется таблица вида <Игрок, Уровень доступа>
    Уровень доступа - целое число.
    Игрок, который поставил башню, является ее владельцем (имеет уровень 10)
    Владелец может выставлять уровни другим игрокам с помощью команд.
    например /tower userlevel MYXOMOPX 5 - добавить игрока MYXOMOPX в список союзников.
    Уровень 0 игрок является врагом. Башня атакует его
    Уровень 1-3 игрок нейтрален. Его не нужно атаковать, если он сам первый не начнет.
    Уровень 4-5 игрок - союзник. Ему можно оказывать поддержку. Например, лечить (если башня умеет)
    Уровень 6-7 игрок - пользователь. Он может выполнять какие-то команды башни. Например, включить/отключить щит.
    Уровень 8-9 допустим, игрокам позволены более продвинутые команды.
    Уровень 10 - игрок - владелец, и может назначать уровни другим игрокам.
    Недостатки: Каждой башне необходимо настраивать эти уровни. Утомительно, долго. При изменении состава команды - придется перенастраивать все башни.

    Идея 2.2, при наличии цитаделей: Те же самые списки пермитов хранятся в цитадели. Башня проверяет уровень доступа игрока, обращаясь к своей цитадели.

    Идея 2.3: Формировать команды (группы игроков). Башня принадлежит какой-то конкретной команде. В команде есть точно такая же таблица уровней доступа <Игрок, Уровень доступа>, а может быть что-то более подробное, аналогичное PEX. Тогда в этом случае можно каждой команде игроков дать имя, это имя отображать над башней. Игрок может быть одновременно в нескольких командах, и иметь в них разные пермиты. Эта идея мне кажется лучшей на данный момент

    3. Управление башнями:
    У многих башен будут некоторые параметры, которые доступны для владельцев/пользователей
    К примеру: режим огня, включение щита, апгрейды, настройка уровней доступа
    Вот варианты реализации:

    Идея 3.1: С помощью команд. Смотрим на башню и вводим команду. Примеры ниже, просто без описания
    /tower shield enable
    /tower userlevel DPOHVAR 15
    /tower upgrade cannon
    /tower ammo ice
    /tower supply other-tower
    /tower disable
    Это уже было реализовано, см. видео
    С точки зрения API добавить команду очень просто:
    Код:
    @OnCommand(value="ammo", level=8) cmd(Player sender, String ammo){
        if (ammo==null) sender.sendMessage "ammo is $weapon.ammo"
        else weapon.setAmmo(ammo)
    }
    PS: команды у каждого типа башен свои.
    /tower [команда башни] [аргументы]
    Явный недостаток - игрокам нужно будет запоминать эти команды.
    Но можно выводить список команд и их описание при вызове /tower без аргументов

    Идея 3.2: Инвентарь-меню. Этот способ мне сильно не нравится. К тому же, таким способом нельзя будет передать кастомные параметры. Но возможно есть преимущества, о которых я еще не знаю.

    Идея 3.3: Отображать меню башни с помощью HoloAPI над ней или около.
    Чтобы выбрать пункт, придется кликнуть по нему. Возможно это будет красиво. Насколько удобно - не знаю.
    Недостаток как у предыдущего - можно только выбирать из предложенных вариантов, нельзя ввести свои данные.


    Теперь о печальном, про сроки :D...
    Это долгосрочный проект, я займусь им вплотную только летом. Сейчас им занимается @MYXOMOPX
    Попробовать, проверить, посмотреть и протестировать - пожалуйста, на нашем тестовом сервере, по предварительной договоренности. Можно собрать из исходников и поставить на свой. За работоспособность снапшотов я не отвечаю, к тому же, на данный момент есть только наброски API.
     
  9. AlexGL

    AlexGL Старожил Пользователь

    Баллы:
    123
    Ты как обычно в ударе)) лойс
    С таким плагином можно реализовать тааакое, если бы знать его досконально и не лень.))
     
    fromgate нравится это.
  10. fromgate

    fromgate Старожил Пользователь

    Баллы:
    173
    Имя в Minecraft:
    fromgate
    Класс!!! Отличная вещь! Мои лазеры стали стационарными ;) Кусаю локти - как я сам не додумался ;)

    Кстати, надписи висящие чем делались? Это уже тоже есть в Varscript?
     
  11. Hephest

    Hephest Старожил Пользователь

    Баллы:
    153
    Skype:
    hephest1904
     
    fromgate нравится это.
  12. fromgate

    fromgate Старожил Пользователь

    Баллы:
    173
    Имя в Minecraft:
    fromgate
    Вопрос цены можно лечить стоимостью предмета которым нужно кликнуть для "ритуала", если это компас - то пусть у него будет изменено название и Lore. Тогда, во-первых, MCPatcher'ом и соотвествующим ресурс-паком ему можно будет будет придать какой-то новый внешний вид (это возможно, возможно даже в зависимости от энчантов по-разному отрисовывать ;))

    Если говорить о RedAlert, то это нормальная идея. Но вообще, стрельба должна быть "потребляемой". В RedAlert'е (я говорю про первый, потому что всё остальное - это не RedAlert а отстой самый настоящий ;)) нормальной тактикой было построить кучу башен Tesla и... вобщем-то не беспокоиться о нападающих.

    Т.е. если тут поставить в ряд несколько башен, то как я понимаю игрок не сможет даже мимо пробежать (особенно если стрялять они будут вразнобой и предсказать кто и когда выстрелит будет нельзя). Соотвественно нужна настройка на ограничение. Допустим 1 башня на 10 метров (радиус) или же башня должна жрать какой-то ресурс (дрова или уголь - даёшь стимпанковские лазеры!!! ;)


    Мне кажется слишком заморачиваться с уровнями не нужно. Должно быть главное: свой-чужой. Всё. Причем в идеале должна быть возможность увязаться с: пермишенами/группами, а также (по возможности) с какими-то популярными плагинами: Factions, Towny, WorldGuard (или что там позволяет регионами торговать).

    Андрей, ты не играл случайно в Team Fortress 2? Мне сейчас мысль пришла. Там игрок-инженер ставил туррель, а потом апгрейдил её тарабаня по ней монтировкой.

    Может и тут что-то подобное предусмотреть? Лично я был бы счастлив, встретив такую фишку на каком-нибудь сервере :)
    И это кстати, даст элемент защиты: в пылу боя никто не будет развертывать туррель, если не позаботился об этом заранее: пока игрок будет колотить по туррели монтировкой, его десять раз зарежут супостаты ;)
     
    Gentalion, AlexGL и Hephest нравится это.
  13. AlexGL

    AlexGL Старожил Пользователь

    Баллы:
    123
    Главное, чтоб команда хайпикселя не добралась до ВарСкрипта. Они: Мы только узнали и увидели функционал ВарСкрипта и тут понеслась.
    Будет ли возможность:
    - башни 100% попадают по игроку
    - скорость атаки и урон башен
     
    Tarock12 и Hephest нравится это.
  14. Автор темы
    DPOH-VAR

    DPOH-VAR Старожил Пользователь

    Баллы:
    153
    Skype:
    dpohvar
    Сейчас ВарСкрипт - это всего лишь мост, соединяющий функционал плагина и Java Scripting API (JSR223)
    Отличие от других плагинов [1] [2] [3] [4] в том, что я разработал идею изолированных воркспейсов. И к тому же варскриптом пользоваться намного удобнее с точки зрения разработчика. В целом же
    Я мог бы выбрать Java для написания PowerTower в виде отдельного плагина, тогда исходного кода было бы в ~5 раз больше.

    Планируется, что это будет проект с открытым исходным кодом и доступным API. Любой может скачать его с гитхаба, скомпилировать (школьники пусть учат мавен), и установить себе. А также написать парочку дополнительных классов башен (еще пусть учат java/groovy) и сделать свой сервер уникальным.
    Хайпиксель на это дело не возьмется. А если и прознает, то сделает с нуля и по-своему.

    Исходники опубликую к тому моменту, как хотя бы будет спланирован и готов API. Дальше каждый может модернизировать башни под себя.
    Именно эти лазеры и подали мне идею стреляющих башен.
    Видимо, я просто вынесу процесс постройки башен из API. На деле - пусть у каждой башни будет это по своему.
    ИМХО - если все равно используются уникальные предметы, почему бы не сделать постройку башен как посадку деревьев? кликнул - и появилась готовая структура из блоков. Игрокам не нужно будет запоминать, из чего строить башни, а того хуже - рыться по форумам и искать строительные чертежи.
    Ресурс - это энергия башен.
    Я очень нагло тырю идею отсюда: И не только идею! Даже название! .

    Вот это истина!

    Я хотел, чтобы постройка башен и апгрейды занимали очень длительное время.
    Например,
    постройка обычной башни = 5-15 минут,
    апгрейд башни = ближе к часу,
    постройка цитадели или какой-то очень важной башни = 2-3 часа
    апгрейд цитадели = заходи завтра, будет готово)
    При постройке башня не функционирует и очень уязвима, но находиться с ней рядом не нужно.
    При апгрейде - башня тоже перестает функционировать, однако апгрейд можно экстренно отменить. Голограммы тут очень кстати - писать прогресс постройки/апгрейда.

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

    Я специально делал, чтобы башни могли промахиваться. Т.е. перед наведением на цель и выстрелом проходит около двух тиков. Это дает возможность игроку сбежать от выстрела, но если башен много - от всех не скроешься. Изначальный вариант башни просто искал цель и отнимал у нее жизни - это же скучно!
    Скорость атаки и урон мб пусть апгрейдятся. Но варианты апгрейдов еще надо продумать. А перед этим и варианты самих башен.
     
  15. Hephest

    Hephest Старожил Пользователь

    Баллы:
    153
    Skype:
    hephest1904
    Можно добавить особые цитадели. Вроде комбинаций: построишь правильную комбинацию - цитадель получает +n к защите/жизням/атаке или получает баффы
     
  16. Автор темы
    DPOH-VAR

    DPOH-VAR Старожил Пользователь

    Баллы:
    153
    Skype:
    dpohvar
    Есть еще одна мысль, которую просто озвучу. Реализовывать не собираюсь

    Привязать PowerTower к DynMap
    И будет вам браузерная стратегия из майнкрафта! :D
    Особенно весело тем, у кого 2 монитора.
    В браузере можно будет включать/отключать/прокачивать башни, распределять энергию, следить за состоянием базы. Еще, например, если будут дальнобойные башни (артиллерия) - им задавать цель для атаки.
    Это скорее всего не будет реализовано потому что:
    - долго разрабатывать
    - нужно комплексное тестирование
    - не многим понравится идея управлять башнями в браузере.
    - будьте добры выделить отдельный порт для работы HTTP службы, использующей AJAX
    - я криворукий в плане веб-дизайна и JavaScript
    Хак, который даёт +100 к защите:
    обстроить башню обсидианом. Пока его пробьешь - тебя зажарят остальные башни.
     
    Hephest нравится это.
  17. Hephest

    Hephest Старожил Пользователь

    Баллы:
    153
    Skype:
    hephest1904
    Например, комбинация "Ортханк" - спавнит 4 зомби каждые 3 секунды. Или "Барад-Дум" - при попадании луча центральной башни в игрока, игрок слепнет.

    Да, я поклонник творчества Толкиена. И да, обсидиан - слишком жестоко :С
     
    Gentalion нравится это.
  18. fromgate

    fromgate Старожил Пользователь

    Баллы:
    173
    Имя в Minecraft:
    fromgate
    Да, что-то подобное я и имел в виду, когда упоминал TF2. Но наверное лучше будет так: установил предмет для апгрейда - апгрейд длится, допустим, 3 минуты. Но если стоять и кликать, то апгрейд произойдёт быстрее.
     
    Gentalion нравится это.
  19. Hephest

    Hephest Старожил Пользователь

    Баллы:
    153
    Skype:
    hephest1904
    Так и мышку сломать можно :D
     
  20. AlexGL

    AlexGL Старожил Пользователь

    Баллы:
    123
    Просто есть идея, пусть у игрока будет шанс уклониться от башни, но опять у него должен быть такой предмет, а на счет башни: пусть она 100% попадает, т.е. чтоб была возможность это настроить. Пусть даже снаряд ганялся за героем.
     

Поделиться этой страницей