Хостинг серверов Minecraft playvds.com
  1. Вы находитесь в русском сообществе Bukkit. Мы - администраторы серверов Minecraft, разрабатываем собственные плагины и переводим на русский язык плагины наших собратьев из других стран.
    Скрыть объявление

Плагин [ADMN/DEV/FUN] VarScript 1.2 - Пишем скрипты на Groovy

Тема в разделе "Релизы плагинов", создана пользователем DPOH-VAR, 29 сен 2012.

  1. ApaDoctor

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

    Баллы:
    103
    зато теперь можно будет говорить:
    "Мы прокачали твой плагин установив в него еще один плагин, чтобы когда работает твой плагин - работал и наш;)"
     
  2. Хостинг MineCraft
    <
  3. Insafka16

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

    Баллы:
    76
    Skype:
    Evgeniy_Hilton
    Имя в Minecraft:
    Insafka16
    Хмм, нормально.
     
  4. ApaDoctor

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

    Баллы:
    103
    Уважаемые форумчане,
    кто-то сталкивался с проблемой выполнения кода на питоне?
    простейший пример:
    [].
    Код:
    import time
    block = me.getTargetBlock(None,32)
    # for x in xrange(1, 10): пришлось убрать xrange, а то блок вообще не изменялся
    #time к слову тоже вызывает Exception, через время, конечно
    
    idList = [1, 2, 3, 4, 5, 6, 7, 8, 9]
    
    for x in idList:
         block.typeId = x
         time.sleep(1)
    [DOUBLEPOST=1406057018,1406056908][/DOUBLEPOST]зы: что случилось с редактором текста???
     
    Последнее редактирование: 23 июл 2014
  5. Автор темы
    DPOH-VAR

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

    Баллы:
    153
    Skype:
    dpohvar
    Вместо time.sleep нужно использовать чедулер буккита.
    А для данного случая подойдет период:
    Код:
    periodId = workspace.addPeriod(лямбда,период,задержка)
    Способ остановить период:
    Код:
    workspace.stopPeriod(periodId)
    Питоном не пользуюсь, так что если напишу не так, сильно не пинайте:
    Код:
    block = me.getTargetBlock(None,32)
    
    idList = [1, 2, 3, 4, 5, 6, 7, 8, 9]
    periodId = workspace.addPeriod(lambda:
        block.typeId = idList.pop(0)
        if not idList:
            workspace.stopPeriod(periodId)
    ,20,0)
    или такой способ (создать заранее несколько таймеров, если массив небольшой)
    Код:
    block = me.getTargetBlock(None,32)
    
    idList = [1, 2, 3, 4, 5, 6, 7, 8, 9]
    
    interval = 20
    delay = interval
    for id in inList: 
        workspace.addDelay(lambda:
            block.typeId = id
        ,delay)
        delay = delay + interval
     
  6. ApaDoctor

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

    Баллы:
    103
    Спасибо огромное, все оперативно, сейчас попробуем)[DOUBLEPOST=1406065642,1406063273][/DOUBLEPOST]Проверил второй способ.
    Задержка во втором случае не работает, итератор мгновенно проскакивает все значения, плагин и игра не могут обработать с такой скоростью события - и как результат на выходе последнее значение(последний элемент списка)

    В первом способе - я так понимаю ошибка.
    Дабы было читабельнее убрал лямбду.
    Получил вот эту прелесть
    Код:
    def animatioN():
       block = me.getTargetBlock(None,32)
       idList = [1, 2, 3, 4, 5, 6, 7, 8, 9]
    
       def getBlockID(iList, Block):
         Block.typeId = iList.pop(0)
    
       periodId = workspace.addPeriod(getBlockID(idList, block),20,0)
       if not iList:
         workspace.stopPeriod(PeriodId)
    
    Да, именно она словила Exception :D
    Великолепный код, дабы повалить сервак!
    Пора спать!
     
    Последнее редактирование: 23 июл 2014
  7. Bonedon

    Bonedon Активный участник Пользователь Заблокирован

    Баллы:
    88
    Skype:
    Ybral_ot_Daynov
    Имя в Minecraft:
    Bonedon
    Просто невозможно!
    Какая работа была проделана!
    Красава!
    Очень полезный плагин для мини игр!
     
  8. Автор темы
    DPOH-VAR

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

    Баллы:
    153
    Skype:
    dpohvar
    Действительно, заметил.
    Да простят мне классический косяк функционального программирования :lol:
    Во втором случае нужно использовать замыкание вокруг переменной id:
    Код:
    block = me.getTargetBlock(None,32)
    idList = [1, 2, 3, 4, 5, 6, 7, 8, 9]
    
    def changeBlockIdTask (id):
        def inner ():
            block.typeId = id
        return inner
    
    interval = 20
    delay = interval
    for id in idList:
        workspace.addDelay(changeBlockIdTask(id), delay)
        delay += interval
    if not iList: workspace.stopPeriod(PeriodId)
    Это нужно проверять при каждом проходе периода. Т.е. внутри него.
    periodId = workspace.addPeriod(getBlockID(idList, block),20,0)
    для функции addPeriod первым аргументом нужно передавать лямбду или ссылку на функцию. В таком виде это работать не будет.

    UPD:
    В груви, например, нет проблем с замыканием переменных по циклу.
    Если применять .each(Closure)
    Код:
    block = me.getTargetBlock(null,32)
    idList = 1..9
    
    def delay = 0
    idList.each { id ->
        workspace.addDelay({block.typeId = id},delay += 20)
    }
     
    Последнее редактирование: 23 июл 2014
  9. ApaDoctor

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

    Баллы:
    103
    Я пытался добиться проверки внутри функции, но ловил ексепшн. Глаза слипались, но я уж очень хотел добить этот скриптик.[DOUBLEPOST=1406128668,1406106310][/DOUBLEPOST]Заработало![DOUBLEPOST=1406144464][/DOUBLEPOST]
    Надобно будет приглядеться поближе к груви:)[DOUBLEPOST=1406153767][/DOUBLEPOST]А DarkRuna вы на новую версию переводите?
    Или забросили ее?
     
  10. Автор темы
    DPOH-VAR

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

    Баллы:
    153
    Skype:
    dpohvar
    Ближайший на очереди стоит PowerTower, но на него слишком много планов, соответственно и много работы. В общем, медленно движется.
    DarkRuna в текущем виде не планируется. Был вариант - сделать альтернативную похожую мини-игру, сильно упростить ее до трех действий: собрал руну, шмальнул в противника, уклонился от его атаки.
    Всё в долгом ящике.
     
  11. Bonedon

    Bonedon Активный участник Пользователь Заблокирован

    Баллы:
    88
    Skype:
    Ybral_ot_Daynov
    Имя в Minecraft:
    Bonedon
    Чел, почему тебя в девелоперы не перевели?
    За такую работу я думаю это стоит сделать.
     
  12. ApaDoctor

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

    Баллы:
    103
    прекрасно понимаю:)
    Много идей, мало ресурсов(людей, времени)
    Насчет PowerTower читал, если копать в нужную сторону - это может выйти очень эффектная вещь!

    ты не первый, кто задался этим вопросом;)
     
    Последнее редактирование: 24 июл 2014
  13. cyber_lis

    cyber_lis Активный участник Девелопер Пользователь

    Баллы:
    68
    Имя в Minecraft:
    eadasdasdasdafasdf
    А можно пример скрипта на python. Человек заходит на сервер и ему пишут в чат: "Добропожаловать, %username%"
     
  14. Artem0001

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

    Баллы:
    78
    Имя в Minecraft:
    eWaster
    Python!!!!
     
    Последнее редактирование: 12 авг 2014
  15. EternalHuman

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

    Баллы:
    88
    Если говорить грамотным языком, то Python
     
  16. cyber_lis

    cyber_lis Активный участник Девелопер Пользователь

    Баллы:
    68
    Имя в Minecraft:
    eadasdasdasdafasdf
    :cry::cry::cry::cry::cry::cry::cry:
    Ахахаххахахха. Это кажется называется выпендрился
     
  17. Artem0001

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

    Баллы:
    78
    Имя в Minecraft:
    eWaster
    а так)))0
     
  18. cyber_lis

    cyber_lis Активный участник Девелопер Пользователь

    Баллы:
    68
    Имя в Minecraft:
    eadasdasdasdafasdf
    А можно пример скрипта на python. Человек заходит на сервер и ему пишут в чат: "Добропожаловать, %username%"
     
  19. Artem0001

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

    Баллы:
    78
    Имя в Minecraft:
    eWaster
    Хех я щас в Турции, приеду напишу
     
  20. Автор темы
    DPOH-VAR

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

    Баллы:
    153
    Skype:
    dpohvar
    Код:
    import org.bukkit.event.player.PlayerLoginEvent
    PlayerLoginEvent=org.bukkit.event.player.PlayerLoginEvent
    
    def greeter (event):
        player = event.getPlayer()
        player.sendMessage("Добропожаловать, "+player.getName())
    
    workspace.addEvent(greeter,PlayerLoginEvent)
    
     
  21. cyber_lis

    cyber_lis Активный участник Девелопер Пользователь

    Баллы:
    68
    Имя в Minecraft:
    eadasdasdasdafasdf
    Спасибо ^___^
     

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