Гайд по Macro/Keybind mod или как привязать команды к кнопкам в майнкрафте.

Тема в разделе "Руководства", создана пользователем Black_falcon, 7 янв 2015.

  1. damix_pro

    damix_pro
    Архитектор
    370
    149
    313
    ну я включил свою великолепную дедукцию и понял что ты про картошку морковку и пшеницу) (Так как цветы и трава не растут по времени!)
    Ну так вот:
    do; //(луп) выполняем код которы находится между словом do и loop построчно
    unset(w); //обнуляешь w
    if(%HITID% = "potatoes"); // если смотришь на картоху то..
    set(w); // делаешь w = true
    endif;

    if(%HITID% = "wheat"); //...
    set(w); // ...
    endif;

    if(%HITID% = "carrot");
    set(w);
    endif;

    if(w); // если w = true (то есть если хоть одно из растений включило w)
    //то
    if(%HIT_AGE% = 7); // если хит_Эйджь = 7 (вырасло)
    setlabel(seeds,"%HITNAME% уже созрел!",); // устанавливаем метке с названием "seeds", текст %название% бла бла бла
    else; // иначе (если меньше 7)
    setlabel(seeds,"%HITNAME% еще только поспевает!",); // ну вы поняли
    endif;

    else; // иначе (если мы не смотрим на растние и флаг w все еще не включен после unset)

    setlabel(seeds,"",); // ну делаем чтобы та метка была пустой
    endif; // эта штучка закрывает IFы
    loop; // тут кончается луп (цЫкл)

    Качай файлик который приложил, скидывай в ..\macros (очень не хочу снова путь писать.. надеюсь знаешь куда если что выше посмотри)
    в игре на событие (тоже выше есть все события ) "OnJoinGame" добавляй этот код:
    (ЕСЛИ ТАМ У ТЕБЯ ПУСТО[smile] $${exec(seedinf.txt,Seed Info)}$$
    (ЕСЛИ У ТЕБЯ ТАМ УЖЕ ЕСТЬ СКРИПТ[smile] $${exec(seedinf.txt,Seed Info); ....Остальное.....}$$

    Теперь на Экран ставь метку И в первом пункте (Название ее) пиши: seeds;
    обязательно смотри чтобы эта метка была на игровом экране ingame как туда попасть, я вроде видео заливал
    Просто сейчас это как-то лениво показывать )) на Словах не получится)
    Ну в общем первая строчка seeds вторая и третья пустые; перезайди на сервер
     

    Вложения:

    • seedinf.txt
      Размер файла:
      879 байт
      Просмотров:
      911
    humanother, John_Locke и Emerson нравится это.
  2. damix_pro

    damix_pro
    Архитектор
    370
    149
    313
    таксс... что значит тех.. я на простой майн делел..
     
  3. Emerson

    Emerson
    Подрядчик
    14
    6
    248
    Адский нарост растёт ещё по стадиям, но у него их три. А так, супер )
     
  4. Black_falcon

    Black_falcon
    Архитектор
    1.895
    793
    438
    Обновленная пара скриптов на вход и выход игроков, с исключением NPC.
    Для установки открываем настройки макросов (по-умолчанию shift+Ё), переходим на вкладку события.
    Далее на событие onJoinGame прописываем $${exec(left.txt,left_players)}$$ и на событие onPlayerJoined прописываем $${$$<enter.txt>}$$

    Не забываем поместить файлы скриптов в папку мода, а именно в \.minemoscow\*\liteconfig\common\macros
     

    Вложения:

    • enter.txt
      Размер файла:
      162 байт
      Просмотров:
      647
    • left.txt
      Размер файла:
      715 байт
      Просмотров:
      851
  5. John_Locke

    John_Locke
    Градостроитель
    1.177
    1.092
    463
    Зачем так усложнять то?
    Код:
    if(%JOINEDPLAYER% == "Стражник");
    elseif(%JOINEDPLAYER% == "Стражник-маг");
    elseif(%JOINEDPLAYER% == "Страж-лучник");
    elseif(%JOINEDPLAYER% == "Почтальон Михаил");
    elseif(%JOINEDPLAYER% == "Ярослав");
    elseif(%JOINEDPLAYER% == "Татьяна");
    elseif(%JOINEDPLAYER% == "Хранитель моста");
    elseif(%JOINEDPLAYER% == "Капитан Андрей");
    elseif(%JOINEDPLAYER% == "Диакон Тихомир");
    elseif(%JOINEDPLAYER% == "Виталий");
    elseif(%JOINEDPLAYER% == "Николай");
    elseif(%JOINEDPLAYER% == "Альберт");
    elseif(%JOINEDPLAYER% == "Влад");
    elseif(%JOINEDPLAYER% == "Андрей");
    elseif(%JOINEDPLAYER% == "Женя");
    
    else();
    wait(100ms);
    
    log("&2[Macro] &4 %JOINEDPLAYER% -- зашёл в игру");
    
    endif;
     
  6. Black_falcon

    Black_falcon
    Архитектор
    1.895
    793
    438
    А теперь сравни с этим:
    Код:
    if(%JOINEDPLAYER%!=%&join%);
        IFMATCHES(%JOINEDPLAYER%,"о|а|е|н|л|и");
        else;
            log(&2%JOINEDPLAYER% &eвошел в игру);
            &join=%JOINEDPLAYER%;
        endif;
    endif;
    Просто, это для удобства выведено в отдельный файл, и все.
     
  7. Black_falcon

    Black_falcon
    Архитектор
    1.895
    793
    438
    При этом тут не надо добавлять каждого непися вручную, достаточно все гласные в список добавить и все.
     
  8. John_Locke

    John_Locke
    Градостроитель
    1.177
    1.092
    463
    Не скажу, что мой вариант идеален, но мне подходит для работы именно он[smile]. Отсеивает не только русскоязычные ники, но и всё что вздумается. Недостаток - нужно вводить ник скрытия из чата, но это разовая настройка.
     
  9. damix_pro

    damix_pro
    Архитектор
    370
    149
    313
    вы когда такими скиловыми стали эй o_O
     
    Filter, Black_falcon и John_Locke нравится это.
  10. danila115

    danila115
    Подрядчик
    82
    66
    253
    ну ты же (я надеюсь) временно отсратранился от дела
     
  11. Black_falcon

    Black_falcon
    Архитектор
    1.895
    793
    438
    Давно ничего не выкладывал, а что выложить есть.
    1. Простенький индикатор баланса, а так последних изменений в нем.
    Из недостатков - невозможность отличить обычный мир от ивентового мира, поэтому при использовании автоматического обновления баланса, его лучше отключать при переходе на ивент, иначе показания собьются. Если это не так важно для вас, то можно оставить как есть.
    Для установки сначала выбираем GUI экран, где будет индикатор, у меня это основной игровой экран, и добавляем туда 2 индикатора с такими настройками:
    [​IMG]
    В строке метка "%%" означает положение значения, строку Привязать менять нельзя.
    Аналогичным образом настраивается второй индикатор:
    [​IMG]
    После этого в фильтр чата добавляем следующие строки, которые при проверке баланса забирают текущий баланс, находят разницу с предыдущим значением, если оно отличается и скрывают из чата сообщение с выводом баланса.
    Код:
    IFMATCHES(%CHATCLEAN%,"Balance: (.+?)\.");
    MATCH(%CHATCLEAN%,"Balance: (.+?)\.",{#new_money});
    if(%#new_money% != %@#money%);
    @#last_money=%#new_money%-%@#money%;
    @#money=%#new_money%;
    endif;
    FILTER;
    endif;
    Так же для того, что бы все время быть в курсе текущего баланса и не вводить все время команду самому, можно установить простенький скрипт, добавив к событию onJoinGame запуск скрипта exec(money.txt,money).
    Этот скрипт раз в 30 секунд отправляет в чат команду /money, при желании частот отправления можно изменить, заменив в скрипте значение в строке wait()

    2. Это переводчик фраз написанных с неправильной раскладкой, когда человек написал что-то длинное, и интересно, что он написал, или если так написали вы, то скрипт скопирует исправленную версию в буфер обмена, если установлен соотвествующий модуль

    Для установки как обычно помещаем сам скрипт в папку макросов и на событие onChat вставляем фразу $${$$<translate.txt>}$$
    Если модуля нет, то можете загрузить его отсюда и поместить в по адрессу */macros/modules
     

    Вложения:

    • money.txt
      Размер файла:
      36 байт
      Просмотров:
      596
    • translate.txt
      Размер файла:
      3,7 КБ
      Просмотров:
      962
    humanother нравится это.
  12. Black_falcon

    Black_falcon
    Архитектор
    1.895
    793
    438
    Только щас заметил, что переводчик реагирует и на ссылки, чуть позже добавлю в исключения и выложу обновленную версию.
     
  13. useigor

    useigor
    Подрядчик
    28
    26
    223
    Простой скрипт, который 10 раз попытается выложить товар в руках в МИ по указанной цене (при запуске скрипт попросит вести цену)

    • &cost = $$?
    • do(10)
      • echo(/ws add %&cost%)
    • loop

    Поскольку меня с этим скриптом ни разу не выкидывало с сервера, то я не стал ставить задержку.

    P.S. Возможно, подобный скрипт уже где-то был выложен, но я не нашёл.

    Правка 1:
    С соблюдением рекомендации подождать 10 сек
    • &cost = $$?
    • do(10)
      • echo(/ws add %&cost%)
      • wait(10)
    • loop
     

    Вложения:

    • AddToUS.txt
      Размер файла:
      49 байт
      Просмотров:
      486
    Последнее редактирование: 22 май 2016
  14. squirrel

    squirrel
    Заслуженный градостроитель
    3.239
    3.319
    558
    Администрация не несет ответственности за потерю рессов при их выкладывании без соблюдения рекомендаций, а именно "подождать 10 секунд" [biggrin]
     
    John_Locke нравится это.
  15. Black_falcon

    Black_falcon
    Архитектор
    1.895
    793
    438
    В интернете уже есть вариант изменения чата, но я тут сделал свой, на ваш суд собственно:

    1. Изменил вид на лички на новый, теперь она выглядит так:
    [​IMG]
    2. Так же теперь изменен вид основных каналов. Добавлено время написания сообщений, убрано форматирование с ников (цвета, префиксы). Цвета оставил как были, но их теперь легко сменить:
    [​IMG]
    При желании легко вид изменить.

    Для установки просто добавьте текст из спойлера ниже в свой chat filter, и положите файл clear_nick в папку макросов.
    Дополнительный файл служит "модулем" для очистки ника от форматирования. Если вы хотите видеть ник со всеми префиксами - просто не скачивайте этот файл и уберите из скрипта строчку $$<clear_nick.txt>;
    Код:
    ifmatches(%CHATCLEAN%,"http:|https");
    else;
       ifmatches(%CHATCLEAN%,"\[(.+?)\] (.+?): (.+?)");
         match(%CHATCLEAN%,"\[(.+?)\] (.+?): (.+$)",{&ch,&nick,&msg});
         $$<clear_nick.txt>;
         if(&ch="G");
           modify(&2[%TIME%] [%&ch%] &f%&nick%: &2%&msg%);
         elseif(&ch="L");
           modify(&e[%TIME%] [%&ch%] &f%&nick%: &e%&msg%);
         elseif(&ch="S");
           modify(&c[%TIME%] [%&ch%] &f%&nick%: &c%&msg%);
         elseif(&ch="M");
           modify(&6[%TIME%] [%&ch%] &f%&nick%: &6%&msg%);
         endif;
         
         unset(&ch);
         unset(&nick);
         unset(&msg);
         unset(&null);
       endif;
    endif;
    
    ifmatches(%CHATCLEAN%,"http:|https");
    else;   
       ifmatches(%CHATCLEAN%,"From (.+?): (.+?)");
         match(%CHATCLEAN%,"From (.+?): (.+$)",{&nick,&msg});
         $$<clear_nick.txt>;
         modify("&5[%TIME%] &6<-- &5%&nick%: &6%&msg%");
         
         unset(&nick);
         unset(&msg);
         unset(&null);
       endif;
    endif;
    
    ifmatches(%CHATCLEAN%,"http:|https");
    else;   
       ifmatches(%CHATCLEAN%,"To (.+?): (.+?)");
         match(%CHATCLEAN%,"To (.+?): (.+$)",{&nick,&msg});
         $$<clear_nick.txt>;
         modify("&5[%TIME%] &6--> &5%&nick%: &6%&msg%");
         
         unset(&nick);
         unset(&msg);
         unset(&null);
       endif;
    endif;
    

    Скрипт состоит из 3 частей:
    основной части отлавливающей сообщения из каналов;
    части отлавливающий входящие личные сообщения;
    части отлавливающий исходящие личные сообщения;

    Для изменения формата личных сообщений изменить строчки
    modify("&6[%TIME%] <-- &5%&nick%: &6%&msg%");
    modify("&6[%TIME%] --> &5%&nick%: &6%&msg%");
    для входящих и исходящих сообщения соотвественно.
    &6, &5, &a и прочие - отвечают за цвет и стиль сообщение. Список всех цветов и стилей:
    [​IMG]
    %TIME% - переменная отвечающая за текущее время.
    %&nick% - ник.
    %&msg% - сообщение.
    Сами эти переменный менять нельзя, можно лишь переставлять их.


    Теперь к основной части:
    if(&ch="G");
    modify(&2[%TIME%] [%&ch%] &f%&nick%: &2%&msg%);
    elseif(&ch="L");
    modify(&e[%TIME%] [%&ch%] &f%&nick%: &e%&msg%);
    elseif(&ch="S");
    modify(&c[%TIME%] [%&ch%] &f%&nick%: &c%&msg%);
    elseif(&ch="M");
    modify(&6[%TIME%] [%&ch%] &f%&nick%: &6%&msg%);
    endif;

    Здесь для каждого канала можно задать свой вид сообщений.
    переменная %&ch% отвечает за тег канала, и от нее зависит какие настройки надо применить.
    Для добавления своих каналов просто добавьте перед строкой endif; строки вида:
    elseif(&ch="ваш тэг");
    modify(&6[%TIME%] [%&ch%] &f%&nick%: &6%&msg%); - ваши настройки.

    Строки unset() отвечают за обнуление ненужных переменных, и используются чисто для "красоты".

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

    Вложения:

    • clear_nick.txt
      Размер файла:
      172 байт
      Просмотров:
      570
    Последнее редактирование: 15 июн 2016
  16. Black_falcon

    Black_falcon
    Архитектор
    1.895
    793
    438
    Обновил скрипт на чат, что бы, если в сообщении содержится ссылка, то сообщение не изменялось, ибо при изменении кликабельность ссылки пропадает.
     
  17. squirrel

    squirrel
    Заслуженный градостроитель
    3.239
    3.319
    558
    Я думаю все кто в данной теме отписался и не только, успел ощутить всю прелесть биндов. Поэтому было бы печально, если бы мод биндов попал в запрещенные, лично я этого не хочу [smile]
    Что я имею ввиду, а то что скрипты которые делаете, должны быть не только удобными, но и практичными в плане взаимодействия с сервером. Вы же пишите скрипты и выкладываете тут не только для себя, но и для всех желающих. А теперь представьте что какой-то коряво написанный скрипт начнут юзать многие игроки. Корявый потому что работает не правильно! (не в плане достижения результата, а в плане взаимодействия с сервером).

    Теперь конкретней. Разберем скрипт мониторинг баланса. Вы спамите командой /money. В итоге эта команда обрабатывается на стороне сервера каждые 30 сек, зачем? Вы, (обращаюсь к биндописателям) настолько глупы что не понимаете что есть решение лучше чем "спамить-напрягать" сервер?
    Ваш баланс меняется, и его можно проверять когда:
    1. передаете/получаете деньги от игрока
    2. продаете в админскуп
    3. пишите команду /ichk
    4. вводите команду /money

    Во всех этих случаях вы можете проверять чат на предмет соответствующих ключей. И только тогда слать запрос баланса. Еще можно добавить проверку баланса при своем входе на сервер, мало ли может вы через сайт купили пока были офлайн а при входе в игру вам товар пришел и писать команду /ichk не понадобилось.

    Как часто вы используете что-то из вышеперечисленного? Так зачем лишний рас напрягать сервер? Дилетанты с фразами "докупите больше ОЗУ" - могут не напрягаться чтоб написать сообщение.
    Более того когда в чате молчание и вы просто бегаете или строите - то в мониторинге баланса и вовсе нет необходимости!

    Может для кого-то открою секрет, но хороший скрипт, это скрипт который не просто работает, но и содержит максимально минимальное количество кода и потребляет минимум ресурсов.

    P.S. Если мое сообщение не будет услышано - будут приняты меры.
     
    humanother, Fraik_rus и John_Locke нравится это.
  18. Black_falcon

    Black_falcon
    Архитектор
    1.895
    793
    438
    Ну я задумывался над тем, что спам командой все же не есть хорошо, но не сильно об этом размышлял, поэтому не знал как улучшить. За подсказку спасибо, в ближайшее время выложу обновленную часть.
     
  19. squirrel

    squirrel
    Заслуженный градостроитель
    3.239
    3.319
    558
    Так же настоятельно прошу учитывать мое сообщение и при следующих написаниях скриптов. Если у вас ОЗУ много - то пишите какие угодно скрипты, но взаимодействие скриптов с сервером должны быть максимально минимальны!
     
    humanother нравится это.
  20. useigor

    useigor
    Подрядчик
    28
    26
    223
    Ничего нового. Скрипт для показа списка нужных игроков, которые есть в игре. Он основан на скрипте для показа выходящих игроков, поэтому его нужно использовать вместо, так как он совмещает обе задачи

    В самом начале кода есть список, где через пробел нужно перечислить нужных игроков. Переменную @&mylist нужно поставить себе в ГИП. Например так:
    mylist1.png

    А вот так уже выглядит в игре (как видно, Fraik_rus нету в нашем списке, так как он не в сети):
    mylist2.png

    Код:
    &mylist = Fraik_rus useigor gasuaska
    split( ,%&mylist%,&mylist)
    
    unsafe(100)
    unset(&prev[])
    foreach(players)
        &prev[] = %PLAYERNAME%
    next
    endunsafe
    
    unsafe(500)
    do
        wait(100ms)
        unset(&curr[])
        foreach(players)
            &curr[] = %PLAYERNAME%
        next
        #max = arraysize(&prev)
        #max = #max - 1
        for(#i,0,%#max%)
            indexof(&curr,#n,%&prev[%#i%]%)
            if(#n = -1)
                ifmatches(%&prev[%#i%]%,[А-я])
                else
                    log(&c%&prev[%#i%]%&e нету в списке)
                endif
            endif
        next
    
        unset(&templist[])
        #max = arraysize(&mylist)
        #max = #max - 1
        for(#i,0,%#max%)
            indexof(&curr,#n,%&mylist[%#i%]%)
            if(#n != -1)
                &templist[] = %&mylist[%#i%]%
            endif
        next
        join(", ",&templist,@&mylist)
    
        unset(&prev[])
        join(",",&curr,&str)
        split(",",%&str%,&prev)
        unset(&str)
    loop
    endunsafe
    
    Короче код. Игроков нужно перечислять через | (этот знак используется в условии и обозначает "или")
    Код:
    &mylist = Fraik_rus|useigor|gasuaska
    
    unsafe(100)
    unset(&prev[])
    foreach(players)
        &prev[] = %PLAYERNAME%
    next
    endunsafe
    
    unsafe(500)
    do
        wait(100ms)
        unset(&templist[])
        unset(&curr[])
        foreach(players)
            &curr[] = %PLAYERNAME%
            ifmatches(%PLAYERNAME%,%&mylist%)
                &templist[] = %PLAYERNAME%
            endif
        next
        join(", ",&templist,@&mylist)
      
        #max = arraysize(&prev)
        #max = #max - 1
        for(#i,0,%#max%)
            indexof(&curr,#n,%&prev[%#i%]%)
            if(#n = -1)
                ifmatches(%&prev[%#i%]%,[А-я])
                else
                    log(&c%&prev[%#i%]%&e нету в списке)
                endif
            endif
        next
    
        unset(&prev[])
        join(",",&curr,&str)
        split(",",%&str%,&prev)
        unset(&str)
    loop
    endunsafe
    
     

    Вложения:

    • igraki_ydxod.txt
      Размер файла:
      805 байт
      Просмотров:
      613
    Последнее редактирование: 18 июн 2016
    squirrel нравится это.