Перейти к содержанию

Lego_Chubzik

Игрок
  • Постов

    180
  • Зарегистрирован

  • Посещение

  • Победитель дней

    4

Весь контент Lego_Chubzik

  1. Доказательств больше нет, игрок с тех пор так и не зашёл ни разу на сервер. Тему можете закрывать
  2. Новый радар это вообще нечто
  3. 1. Cannondale 2. 22:54 3 - 4 . Данный персонаж несколько раз попадался на мои глаза. Он летал на какой-то нереальной скорости в кит старте, хотя только появился в игре, но это меня не настораживало (техномагик как никак 😀), пока он не начал предлагать людям пвп. Я просто из любопытства решил глянуть на него в пвп, в итоге он начал попадать по мне, хотя я в инвизе. Я тепнулся на базу и обдумал всё это. Этот момент я не записал. После я пришёл к выводу, что чел нечистый, включил запись и повторил эксперимент. На видео видно, что я подлетаю сзади него. Пока он в сундуке - киллаура не работает, как только он выходит из него - начинается "крутилочка" с попытками попасть по мне, хотя я в инвизе. Видимо увидев, что он бьет меня в инвизе он спешно отключил киллауру. Также у него из под ног всегда исходят такие частицы, но это скорее не доказательство, а просто интересное наблюдение. Я когда играл с читами на хайпикселе функция Auto Sprint давала такой же результат Предлагаю уделить данному игроку чуточку больше внимания. Видео с киллаурой ?- А вот еще интересный момент (на ваш суд):
  4. Всем привет, гуляя по базам игроков заметил, что у каждого второго нарушены ограничения по мониторам хранения. Сейчас ограничение стоит на 8 штуках. Оправдано ли такое жёсткое ограничение ? Предлагаю расширить этот лимит до 10 - 16 шт, т.к 8 не хватает.
  5. Считаю, что тема не актуальна. Авторекламу сделали очень дорогой,теперь её могут позволить только топ варпы и сообщения появляются редко, что делает её намного менее раздражающей. А по поводу отметы, опять же - зачем? Я могу за пару минут написать скриптик для авторекламы и настроить автозаход на сервер. Тем более эта флудилка будет в разы надоедливее той, что есть сейчас в плагине. Для чего мучать людей на сервере и мой компьютер? Если у человека есть деньги - пусть покупает
  6. Тут же видно, что регион удалился в ходе кривоватой очистки, а не грифа
  7. Полазь по разделам, возможно открылось еще 1 изучение, после того, как ты открыла ихор. У меня такое было - изучил ихор, потом открылось исследование эфирного цветка и ихор закрылся. Изучил эфирный цветок - он опять открылся 🙂
  8. Глава 8. Эмуляция методов Это скорее всего будет последняя глава. Если я сейчас не отправлю это сообщение - то боюсь оно улетит далеко и будет неудобно читать гайд. Если у хеда есть возможность перенести это сообщение выше - то пожалуйста, сделайте это. Когда дойду до этой темы - напишу.
  9. Никогда не мешали дырки от шахт. На начальном этапе игры бегаешь себе и ресы нужные отколупываешь со стенок. На средних стадиях - просто зажимаешь буст на гравике и ЛКМ со стаффом. На последней стадии стоишь в афк и фармишь ресы
  10. Глава 7. Модули 7.1 О модулях И так - гайд по программированию позади. Теперь нас ждёт "подарок" 🙂 . Это тема модулей. Кратко говоря - модули это пользовательские аддоны для мода, которые каждый пользователь может установить себе. Модуль может расширять функциональность мода, добавляя новый функционал, команды, события, встроенные переменные и т.д. Модули хранятся в папке: %AppData%\Roaming\.simplemc\[Ваш сервер]\liteconfig\common\macros\modules Для работы модуля сюда нужно закинуть его файлы и перезапустить игру 7.2 Модуль SUtils Данный модуль был сделан специально под проект SMC и предоставляет большое количество дополнительных возможностей, включая радар игроков, автореконнект и т.д. подробнее о модуле в официальном Discord Канале: https://discord.gg/hw2M2tfNhE 7.3 Модуль SignText (описание с офф. источника) Источник: MinecraftForum допишу потом 🙂
  11. 1. Kadurov 2. Заметил 08.01.2021 01:54. 3. 3.0.1 Реакторы 9/8 4. Координаты видны в чате
  12. Глава 6. Массивы 6.1 О массивах Тема массивов очень обширная и очень нужная. Для начала нужно разобраться что это такое. Массив представляет набор однотипных данных, которые объединены одним именем. Массив может быть любого типа: #int (целочисленный), &string (строковый), bool (логический). Объявление массива похоже на объявление переменной за тем исключением, что после указания типа ставятся квадратные скобки. Для лучшего понимания устройства массива я приложу рисунок: Выше представлен целочисленный #int массив, состоящий из пяти элементом. Каждый элемент имеет свой номер (индекс), по которому к нему можно обратиться. Обратите внимание, что нумерация массива начинается с 0. Т.е. первый элемент имеет номер(индекс) 0, а последний имеет индекс 4. 6.2 Создание массивов Есть несколько способов создать массив. Какой из них вы используете, зависит от того, что вы делаете с массивом. Самый простой способ его создать - инициализировать каждый элемент массива следующим образом: &arr[0] = "text1" &arr[1] = "hello" Если такой массив &arr[] представить графически, то получится: Этот массив имеет тип &string т.е. хранит в себе элементы аналогичного типа. Второй способ создать массив - использовать функцию push(массив, значение). Она добавляет переменную в конец массива, если он не пустой, или создаёт массив, присваивая первому элементу массива и указанное в параметрах функции значение . В параметрах функции необходимо указать имя массива, а после запятой указать значение, которое следую добавить в конец массива. Ниже я создам точно такой же массив, как и выше, а после пропишу функцию push() &arr[0] = "text1" &arr[1] = "hello" push (&arr[], "World") Вместо команды push можно прописать &arr[2] = "World". Однако, чтобы это сделать нужно знать индекс элемента, идущего после последнего. Вот так этот массив будет выглядеть графически: Аналогично можно все присваивания заменить функцией push(). Эта функция умеет автоматически создавать массив, если он не создан до этого. push (&arr[], "text1") push (&arr[], "hello") push (&arr[], "World") Однако. Нужно понимать, что функция push() записывает значение в конец массива. Если запустить такую программу 1 раз, $${ push(&arr[],"text1") }$$ то после завершения работы скрипта мод создаст в файле .vars, находящемся в папке с макросами, запись. Эта запись описывает созданный массив. Вот запись: <array key="arr" type="string"> <element pos="0">text1</element> </array> Тут указано, что массив &arr содержит 1 элемент string. Из этого мы должны понять, что после завершения работы скрипта массив никуда не пропадает, а остаётся в памяти. Если запустить этот же скрипт еще раз, то функция push(&arr[],"text1") уже не будет создавать массив &arr, а возьмет его из файла .vars и прибавит к его концу элемент "text1". Массив будет иметь уже 2 элемента, а запись будет выглядеть вот так: <array key="arr3" type="string"> <element pos="0">text1</element> <element pos="1">text1</element> </array> Это нужно понимать, чтобы не было удивлений на подобие "откуда в моей программе взялся полный массив?". Но, это можно обойти. Для этого нужно очищать память массива перед окончанием работы скрипта. По этому поводу нам следует познакомиться с функцией UNSET(переменная), которая удаляет из памяти указанную переменную/массив. С этой командой всё максимально просто: $${ push(&arr[],"text1") //... //Действия с массивом и др. //... unset(&arr[]) }$$ В скрипте выше мы вызываем функцию push(), которая создаёт массив &arr[] и добавляет в его конец(начало) значение "text1". После этого мы можем осуществлять любые нужные нам действия с этим массивом, однако в конце следует прописать unset(&arr[]). Эта функция удалит из файла .vars вышеупомянутый массив. При следующем запуске программа опять создаст массив, т.к в файле его нет, присвоит ему значение "text1", проделает те же самые действия, а по окончанию опять удалит его из памяти. Также создать массив можно с помощью функции SPLIT(). Для начала нужно познакомиться с ней: SPLIT(разделитель, источник, вывод[]) Позволяет разделить текстовую строку, используя разделитель, при этом разделенные элементы превращает в массив. Например у нас есть текстовая строка: "red, orange, yellow, green". Нам нужно создать массив, каждый элемент которого будет определенным цветом. Эти слова разделяются запятыми, ее мы и будем передавать в качестве параметра в функцию. Вот как будет выглядеть код &str = "red, orange, yellow, green" split(", ",%&str%,&arr[]) В результате мы получим массив arr[] из четырёх элементов, вот его графическое представление: У функции split() есть полная противоположность - функция JOIN(соединитель, массив, &вывод). Эта функция принимает массив и превращает его в строку, слепленную из элементов массива. Между этими элементами в строке будет стоять "соединитель". Вот пример работы: $${ &str = "red, orange, yellow, green" split(", ",%&str%,&arr[]) join(":",&arr[],&colors) log(%&colors%) unset(&arr[]) }$$ Тут сначала создаётся массив &arr[] из строки, а потом из этого массива создаётся строка &colors. Результат работы кода: red:orange:yellow:green 6.3 Чтение массивов На этом моменте мы умеем создавать массивы. Но как же вывести в чат или как вообще обратиться к его элементам. Сделать это не сложно, достаточно обратиться к элементу по его индексу. Допустим у нас есть такой массив &arr[]: Чтобы вывести в чат третий элемент массива в чат - нужно прописать log(%&arr[2]%) Обратиться к элементу массива можно и с помощью переменной: $${ &str = "red, orange, yellow, green" split(", ",%&str%,&arr[]) #number = 2 log(%&arr[%#number%]%) unset(&arr[]) }$$ Результат: yellow Также для чтения массива существует интересная функция POP(). Кратко говоря - это функция, обратная функции PUSH(). Разница в том, что PUSH() добавляет элемент в конец массива, а функция POP() заносит значение последнего элемента массива в переменную и удаляет ее с массива. Вот синтаксис и краткое пояснение функции POP: POP(массив[], переменная) Удаляет последнюю запись из хвоста массива и сохраняет ее в outvar Пример использования: $${ &str = "red, orange, yellow, green" split(", ",%&str%,&arr[]) pop(&arr[],&last) log(%&last%) unset(&arr[]) }$$ Результат: green. Массив: &arr[0] = "red", &arr[1] = "orange", &arr[2] = "yellow" 6.3 Перебор массивов Автоматический перебор элементов массива осуществляется циклом. Для этого может подойти любой цикл, но я предпочитаю использовать цикл for->next либо цикл foreach(), о нем поговорим далее. 6.4 Цикл foreach() С циклом foreach() в этом гайде мы знакомимся впервые, хоть глава с циклами уже была. Я разместил его в этом разделе, т.к без знания темы массивов этот цикл понятен не будет. Цикл foreach предназначен для перебора элементов в массивах. Перебор массива в таком цикле осуществляется с помощью переменной-итератора. Каждую итерацию этого цикла переменной-итератору будет присваиваться следующее значение массива. Формальное объявление цикла foreach(): $${ foreach(имя_массива[],имя_итератора) //... // Действия //... next }$$ Вот пример использования цикла foreach(): $${ &str = "red, orange, yellow, green" split(", ",%&str%,&arr[]) foreach(&arr[],&a) log("it: %&a%") next UNSET(&arr[]) }$$ Тут я создаю строковый массив &arr[] из строки &str. Далее я создаю цикл foreach(), куда в параметры передаю имя массива и переменную-итератор. В данном случае этой переменной является &a. Массив &arr[] состоит из четырёх элементов - это значит, что у цикла foreach будет 4 итерации, на первой итерации переменная &a будет равна "red", на второй - "orange" и т.д. Итератор &a может использоваться только для чтения информации. Результат: red orange yellow green Плюсы foreach(): 1) Не требуется самому определять конечный индекс массива 2) Простота использования 3) Не требуется переменная-счетчик Минусы foreach(): 1) Переменная-итератор доступна только для чтения. Изменять массив через foreach неудобно и не особо-то и возможно. 2) Отсутствие переменной счетчика 6.4 Встроенные массивы и итераторы В macro keybind присутствует такая вещь, как встроенные массивы. Вот их список: Доступ ко встроенным массивам и итераторам осуществляется только через цикл foreach(). Вот пример: $${ foreach(players) log(%PLAYERNAME%) next }$$ Данный скрипт выведет никнеймы всех игроков на сервере. Цикл будет перебирать элементы массива players, который содержит в себе никнеймы всех игроков онлайн. Итератор тут создавать не требуется, т.к для массива players уже встроен итератор PLAYERNAME. Вот еще пример использования цикла foreach() для доступа ко встроенным массивам: $${ foreach(enchantments) log("%ENCHANTMENT%") next }$$ Результатом работы этого цикла будет вывод в чат информации о зачарованиях предмета, который вы держите в руках, вот скриншот работы: 6.5 Цикл FOR->NEXT для перебора элементов массива Как мы уже знаем, foreach() сам определяет конец массива, в этом его удобство. Цикл FOR->NEXT работает по диапазону чисел. Нижний предел диапазона мы знаем - это 0 - первый индекс любого массива. А как узнать последнее число диапазона (индекс последнего элемента массива)? Для этого существует команда ARRAYSIZE(массив,#переменная). Она сохраняет размер указанного массива в переменную, переданную в параметры. Единственный нюанс - размер массива не равен последнему числу диапазона (индексу последнего элемента), т.к. нумерация индексов начинается с нуля. Вот простой простой пример перебора массива с помощью цикла FOR->NEXT: $${ &str = "red, orange, yellow, green" split(", ",%&str%,&arr[]) arraysize(&arr[],#max) dec(#max) for(#i,0,%#max%) log("%&arr[%#i%]%") next UNSET(&arr[]) }$$ Тут всё должно быть ясно. Скрипт создаёт массив из строки. С помощью функции создаёт переменную целочисленного типа #max, которая принимает значение размера массива, затем она уменьшается на 1, чтобы ее значение превратилось в значение последнего индекса массива. Затем запускается цикл в диапазоне от 0, до последнего индекса массива (3). В цикле будет 4 итерации, Результат выполнения: red, orange, yellow, green В отличие от цикла foreach в цикле FOR->NEXT мы можем изменять значения элементов массива, т.к обращаемся к ним через индекс, а не через переменную-итератор Вот например я создам массив с помощью цикла FOR->NEXT из пяти элементов. Значение каждого элемента массива будут равны своему индексу, умноженному на 2: $${ for(#i,0,5) #arr[%#i%] = #i * 2 log("%#arr[%#i%]%") next UNSET(&arr[]) }$$ Сразу же после создания элемента в массиве я вывожу его через log(). Результат работы: 0 2 4 6 8 10 6.6 Поиск в массиве с функцией INDEXOF Данная функция принимает в себя массив и значение для поиска. На выходе она выдаёт индекс элемента массива, содержащего указанное значение в параметрах функции. Пример использования: $${ &str = "red, orange, yellow, green" split(", ",%&str%,&arr[]) INDEXOF(&arr[],#index,"yellow") log("index of yellow element is %#index%") UNSET(&arr[]) }$$ Результат: 2
  13. Глава 5. Циклы 5.1 О циклах Циклы являются управляющими конструкциями, позволяя в зависимости от определенных условий выполнять некоторое действие множество раз. Каждое выполнение действий внутри цикла называется итерацией. В этом разделе мы познакомимся со следующими командами, организующими циклы: 5.2 Цикл FOR-> NEXT Данный цикл является довольно простым, т.к он просто перебирает числа в заданном нами числовом диапазоне, для этого в его параметрах нужно указать: имя переменной-счетчика(та переменная, которой каждую итерацию будет присваиваться значение из диапазона), начало диапазона, конец диапазона. Вот так выглядит синтаксис цикла FOR-> NEXT: $${ for(#имя_переменной,начало_счёта,конец_счёта) //.. //Тело цикла(код) //.. next }$$ Цикл ниже объявляет внутри себя переменную счетчик #i. Работать она будет в указанном нами диапазоне от 0 до 5, включая оба числа. Это значит, что цикл сработает ровно 6 раз: нулевой, первый, второй, третий, четвертый, пятый. Команда next не только завершает итерацию, проверяя условие, но еще и изменяет переменную-счетчик на 1. В данном случае - увеличивает. Выходит, что в первую итерацию значение счетчика #i будет 0, во вторую - 1, в третьею - 2 и т.д. $${ for(#i,0,5) log(%#i%) next }$$ Результат выполнения такого цикла: 0 1 2 3 4 5 Цикл FOR-> NEXT не обязательно должен работать в заданном нами диапазоне по возрастанию. Вот пример того, как начальное значение больше конечного. В этом случае команда next уменьшает значение переменной-счетчика на 1 каждую итерацию, пока оно не будет равно нулю. $${ for(#i,5,0) log(%#i%) next }$$ Результат выполнения такого цикла: 5 4 3 2 1 0 Задавать значение диапазона можно и с помощью переменных, пример: $${ #low = -2 #hight = 2 for(#i,%#low%,%#hight%) log(%#i%) next }$$ Результат выполнения такого цикла: -2 -1 0 1 2 Внутри цикла так-же могут присутствовать условие конструкции(кликабельно). В данном примере цикл будет работать в диапазоне от 1 до 5. Условные выражения будут проверять больше ли переменна-счетчик, чем 2 или нет $${ for(#i,1,5) if(#i < 2) log("Число %#i% меньше чем 2") else log("Число %#i% больше чем 2") endif next }$$ Еще примеры использования цикла for с объяснением: Преимуществом такого цикла является то, что не требуется самому создавать переменную-счетчик и изменять ее значение, цикл и команда next сделает это за нас. Минусами такого цикла является то, что диапазон можно указать только при этапе создания кода, что делает его очень статичным. 5.3 Цикл DO-> LOOP Данный цикл является самым простым. Всё, что он делает - выполняет код внутри себя столько раз, сколько мы укажем. Его синтаксис выглядит вот так: $${ do(Количество выполнений) //... //Тело цикла(код) //... }$$ Данный цикл не проверяет никаких условий и не создает переменных-счетчиков. Но это не мешает нам создать свою переменную счетчик. Вот пример создания переменной счетчика в цикле DO->LOOP: $${ #i = 0 do(5) log("%#i%") inc(#i,2) loop }$$ Тут создан цикл DO->LOOP с пятью повторениями (итерациями). Каждую итерацию переменная #i увеличивается на 2 функцией inc(). Результат: 0 2 4 6 8 Задать количество выполнений цикла можно и с помощью переменной, пример: $${ #i = 0 #count = 5 do(%#count%) log("%#i%") inc(#i) loop }$$ Результат: 0 1 2 3 4 Цикл DO->LOOP можно сделать бесконечным. Т.е он будет выполнятся до момента его ручного отключения. Чтобы в ручную отключить его - нужно нажать клавишу ~ и затем нажать на красный крестик исполняющегося скрипта Вот пример бесконечного цикла: $${ do() log("Hello") loop }$$ Данный скрипт будет бесконечно писать в чат строку "Hello", т.к в do() не указано количество выполнений 5.4 Цикл DO-> WHILE Цикл DO-> WHILE будет выполнятся до тех пор пока выполняется условие внутри while(). Синтаксиc цикла выглядит вот так: $${ do() //... //Тело цикла(код) //... while(Условное выражение) }$$ Пример использования: $${ #i = 0 do() log("%#i%") inc(#i) while(#i < 5) }$$ В скрипте выше я создаю переменную-счетчик #i. В while я указываю условие, что цикл должен выполняться до тех пор, пока #i меньше пяти. В самом цикле я инкриминирую(увеличиваю на 1) значение переменной-счетчика. Результат: 0 1 2 3 4 Частями условного выражения может стать любая переменная, значения которой может меняться по ходу выполнения скрипта. Например: $${ #i = 5 #d = 10 do() log("%#i%") inc(#i) while(#i < #d) }$$ Тут цикл будет выполняться до тех пор, пока #i < #d. Если #i никогда не станет > #d, то цикл никогда не завершиться и отключать такой скрипт придётся в ручную. Результат: 5 6 7 8 9 5.5 Цикл DO-> UNTIL Цикл DO-> UNTIL Является противоположностью цикла DO-> WHILE и на самом деле не особо-то и нужен за имением вышеупомянутого цикла. Данный цикл будет выполнятся до тех пор пока не выполняется условие внутри until(). Синтаксиc цикла выглядит вот так: $${ do() //... //Тело цикла(код) //... until(Условное выражение) }$$ Пример использования: $${ #i = 0 do() log("%#i%") inc(#i) until(#i > 5) }$$ В скрипте выше я создаю переменную-счетчик #i. В until я указываю условие, что цикл должен выполняться до тех пор, пока #i не больше пяти. В теле цикла я инкриминирую значение переменной-счетчика. Результат: 0 1 2 3 4 5 5.6 Оператор BREAK Иногда возникает ситуация, когда требуется выйти из цикла, не дожидаясь его завершения. В этом случае мы можем воспользоваться оператором break. Пример: $${ #i = 0 do() if(#i == 5) break endif log(%#i%) inc(#i) loop }$$ Хотя в условии цикла сказано, что цикл будет выполняться бесконечно, в реальности цикл сработает 5 раз. Так как при достижении переменной #i значения 5, сработает оператор break, и цикл завершится. 5.7 Конструкция unsafe() endunsafe В Macro Keybind у всех циклов есть особенность - после каждого выполнения кода внутри себя(итерации) они делают небольшую паузу, примерно равную одному тику. Для того, чтобы это обойти нужно использовать конструкцию unsafe()...endunsafe. После заключения цикла в эту конструкцию он будет выполняться максимально быстро. Для того, чтобы ей воспользоваться нужно до начала цикла прописать unsafe(), а после цикла прописать endunsafe. Пример записи конструкции unsafe()...endunsafe для цикла: $${ #i = 0 unsafe() do(20) log("%#i%") inc(#i,2) loop endunsafe }$$ Наглядный пример работы данной конструкции: Однако нужно быть очень осторожным с unsafe, т.к он может вызывать серьезные лаги, особенно если цикл бесконечный
  14. Глава 4. Условные конструкции 4.1 О логических конструкциях Условные конструкции - один из базовых компонентов программирования, которые направляют работу программы по одному из путей в зависимости от определенных условий. В языке Macro Keybind mod используются следующие условные конструкции: if..elseif..else..endif. В конце каждой конструкции if должно стоять endif Конструкция if проверяет истинность некоторого условия и в зависимости от результатов проверки выполняет определенный код. После ключевого слова if ставится условие. И если это условие выполняется, то срабатывает код, который помещен далее в блоке if. В качестве условий выступают ранее рассмотренные операции сравнения. В данном случае у нас первое число больше второго, поэтому выражение #x1> #x2 истинно и возвращает true, следовательно, управление переходит к строке log("Число %#x1% больше числа %#x2%") Но что, если мы захотим, чтобы при несоблюдении условия также выполнялись какие-либо действия? В этом случае мы можем добавить блок else: Но при сравнении двух чисел мы можем насчитать три состояния: первое число больше второго, первое число меньше второго и числа равны. Используя конструкцию elseif, мы можем обрабатывать дополнительные условия: Также мы можем соединить сразу несколько условий, используя логические операторы:
  15. Глава 3. Условные выражения и логические операции 3.1 О условных выражениях Отдельный набор операций представляют условные выражения. Такие операции возвращают логическое значение, то есть значение типа bool: true, если выражение истинно, и false, если выражение ложно. К подобным операциям относятся операции сравнения и логические операции. 3.2 Операции сравнения В операциях сравнения сравниваются два операнда и возвращается значение типа bool - true, если выражение верно, и false, если выражение неверно. Операция == Сравнивает два операнда на равенство. Если они равны, то операция возвращает true, если не равны, то возвращается false: != Сравнивает два операнда и возвращает true, если операнды не равны, и false, если они равны. < Операция "меньше чем". Возвращает true, если первый операнд меньше второго, и false, если первый операнд больше второго: > Операция "больше чем". Сравнивает два операнда и возвращает true, если первый операнд больше второго, иначе возвращает false: <= Операция "меньше или равно". Сравнивает два операнда и возвращает true, если первый операнд меньше или равен второму. Иначе возвращает false. >= Операция "больше или равно". Сравнивает два операнда и возвращает true, если первый операнд больше или равен второму, иначе возвращается false: Операции <, > <=, >= имеют больший приоритет, чем == и !=. 3.3 Логические операции Также в Macro Keybind mod определены логические операторы, которые также возвращают значение типа bool(true или false). В качестве операндов они принимают значения типа bool. Как правило, применяются к отношениям и объединяют несколько операций сравнения. Операция Или || Операция логического сложения или логическое ИЛИ. Возвращает true, если хотя бы один из операндов возвращает true. Операция И && Операция логического умножения. Возвращает true, если оба операнда одновременно равны true. Операция НЕ ! Операция логического отрицания. Производится над одним операндом и возвращает true, если операнд равен false. Если операнд равен true, то операция возвращает false.
  16. Глава 2. Переменные и типы данных 2.1 О переменных Для хранения данных в программе применяются переменные. Переменная представляет именованную область памяти, в которой хранится значение определенного типа. Переменная имеет тип, имя и значение. Тип определяет, какого рода информацию может хранить переменная. прим: числовой тип данных хранит только числа. Имя переменной может содержать любые цифры, буквы и символ подчеркивания, при этом первый символ в имени должен быть буквой или символом подчеркивания. В имени не должно быть знаков пунктуации и пробелов. 2.2 Типы данных В Macro Keybind mod существует только 3 типа данных: int - хранит целое число от -2137483648 до 2137483647. Обозначается как: #имя_переменной string - текстовый тип данных. Переменная этого типа может хранить в себе некоторую строку. Обозначается как: &имя_переменной bool - логический тип данных. Переменная этого типа может принимать в себя только 2 значения: True или False (да или нет) Macro Keybind mod не имеет типа данных для вещественных (дробных) чисел. т.е число 3.1415 он хранить не может Зато массивы он хранить умеет, но сейчас их трогать еще очень рано Ниже я показываю, как работают переменные, с моими комментариями (Рекомендую посмотреть) 2.3 Преобразование и взаимодействие типов данных Взаимодействие между типом данных bool и #int Преобразование типов #int и bool в &string Преобразование типа &string в #int Для преобразования типа &string в тип #int существует функция SET(). SET(переменная, значение) Устанавливает для цели указанное значение или TRUE, если значение не указано) Пример использования функции: $${ &c = -10 set(#x, %&c%) log(%#x%) }$$ Результат: -10 2.4 Встроенные переменные Macro Keybind mod имеет в распоряжении множество встроенных переменных, каждая из которых предоставляет определенную информацию в игре. В эти переменные нельзя передавать значения, они сами меняются в зависимости от определенных действий по ходу игры. Для того, чтобы обратится ко встроенной переменной достаточно просто написать ее имя большими буквами. Если записывать в &string переменную встроенную переменную, то ее имя необходимо окружить знаками процента %ИМЯ% Список встроенных переменных: 2.4 Глобальные переменные Помимо типа данных, переменная может быть локальной (она будет доступна только в том скрипте, где была создана) и глобальной (после ее создания она будет записана в файл .globalvars.xml и станет доступна для любого другого скрипта). Для того, чтобы объявить глобальную переменную нужно перед ее типом поставить знак @. Например при компиляции следующей строки "@#a = 10" будет инициализирована глобальная переменная a со значением 10. Чтобы обратится к этой переменной (например через log()) нужно писать %@#a%. Пример объявления и вызова глобальной переменной описан ниже: 2.5 Управляющие последовательности Если испугались названия, то можете пропустить эту подглаву, а тем кто хочет знать "всё" предлагаю ознакомится с управляющими последовательностями. На самом деле в них ничего сложного нет. Управляющая последовательность представляет символ, перед которым ставится обратный слеш. И данная последовательность интерпретируется определенным образом. Наиболее часто используемые последовательности: \n - перевод строки - символ перехода на новую строку \t - табуляция - символ табуляции (примерно 5 пробелов ) \ - обратный слеш - служит для того, чтобы в Строковый литерал возможно было добавить определенные символы, например: / " * Пример использования управляющих последовательностей: 2.6 Арифметические операции В Macro Keybind mod используется большинство операций, которые применяются и в других языках программирования. Операции представляют определенные действия над операндами - участниками операции. В качестве операнда может выступать переменной или какое-либо значение (например, число). Операции бывают унарными (выполняются над одним операндом), бинарными - над двумя операндами и тернарными - выполняются над тремя операндами. Рассмотрим все виды операций. Бинарные арифметические операции: Операция + Я думаю, всем, кто дочитал до этого момента, очевидно, что делает плюс Операция - Операция Умножения * Операция Деления / Тут есть 1 нюанс. Если вы были внимательны и хорошо прочитали подглаву 2.2, то уже знаете, что в Macro Keybind mod нет вещественных чисел. Результат деления будет Унарные арифметические операции: Операция (Инкремента) выполнена через функцию INC(#var). Инкремент - очень простая операция, она увеличивает переменную на 1 Операция (Декремента) выполнена через функцию DEC(#var). Декремент обратен инкременту и уменьшает переменную на 1 При выполнении сразу нескольких арифметических операций следует учитывать порядок их выполнения. Приоритет операций от наивысшего к низшему: 1) Умножение, деление 2) Сложение, вычитание 2.7 Ассоциативность операторов Звучит страшно, но по факту каждый это проходил в 3-ем классе. Операции умножения и деления имеют один и тот же приоритет, но какой тогда результат будет в выражении: #x = 10 / 5 * 2 Стоит нам трактовать это выражение как (10 / 5) * 2 или как 10 / (5 * 2)? Ведь в зависимости от трактовки мы получим разные результаты. Все операторы в Macro Keybind правоассоциативные, то есть выполняются справа на лево, по крайней мере должны Результат вычислений 10/5*2 будет 1, т.к 2*5/10 = 1. Чтобы это исправить, нужно руками поставить скобки, получится выражение (10 / 5) * 2, результат этих вычислений будет 4.
  17. Вступление Всем привет. Этот гайд я пишу в дополнение к теме Гайд: Macro KeyBind от @nagibqwe, т.к. мне показалось, что в ней плохо раскрыта тема скриптинга. Перед чтением этой темы настоятельно рекомендую ознакомится с гайдом выше. Для удобства я разделю эту тему по основным главам. Гайд будет дополнятся по мере моего познания этой темы). Глава 1. Структура программы 1.1 Общие сведения. Основы основ. Для начала нужно знать, что любой скрипт в Macro Keybind mod должен быть заключен в такую конструкцию: $${//Ваш скрипт }$$. Эта конструкция указывает, что введенные в нее строки должны не выводится в чат, а обрабатываться компилятором. Скрипт может быть написан в поле редактирования макроса( в одну строку),или в текстовый файл. Вариант расположения скрипта в текстовом файле предпочтителен для длинных и/или сложных программ, где легко запутаться в синтаксисе и допустить ошибку. Тут скрипт написан в одну строку для клавиши <DOWN>. О содержимом скрипта мы обязательно узнаем. А тут скрипт написан в текстовом файле. Как мы видим - скрипты состоят из определенных команд (функций). Их список будет описан позже. На данный момент нам нужно знать только функцию log("текст"). Эта функция выводит в чат информацию, которая в нее передаётся, например текстовая строка. Причем видеть эту информацию в чате сможет только сам игрок. Важным моментом является то, что если писать несколько команд (функций) в одну строку, то между ними обязательно ставить точку с запятой ";", в противном случае скрипт будет работать некорректно. Однако если поставить точку с запятой после единственной команды в строке, то ничего страшного не случится и скрипт будет работать, это даже будет являться хорошей практикой. Пример записей команд(функций) в текстовом файле: Макрос не обязательно должен являться скриптом. Если все, что нам надо от макроса сводится к вводу команд/сообщений в чат, прим: бинд клавиши /home на кнопку, то можно обойтись без написания скрипта с конструкцией $${//код}$$. После нажатия на забинженую клавишу, или после активации события, все, что вы написали в поле редактирования макроса напишется от вашего имени в чат. Если написать такой макрос в качестве бинда на клавишу: То при нажатии на клавишу в чат будет выведено сообщение от вашего имени: Если вы хотите отправить более одного сообщения/игровой команды в чат и не хотите их оформлять это как скрипт, то вам нужно разделить эти сообщения символом | На картинке выше представлен бинд клавиши COMMA, который при нажатии на клавишу, телепортирует игрока домой и пишет в локальный чат от его имени: "Привет дом!" Скрипт из текстового файла также можно забиндить на клавишу или на событие. Для этого в поле нужно ввести: $$<Название.txt> в поле редактирования макроса Написанные скрипты и прочие текстовые файлы будут хранится по следующему адресу с форматом .txt: %AppData%\Roaming\.simplemc\Ваш сервер\liteconfig\common\macros Также можно обратить внимание и на другие файлы, находящиеся в этой же папки, для общего развития ) Например файл .globalvars.xml хранит в себе глобальные переменные (это переменные доступные для любого скрипта), подробнее о них рассказывается в главе 2. Файл .gui.xml хранит в себе информацию о настройке внутриигрового интерфейса. Файл .vars.xml по моим наблюдениям является неким хранилищем локальных переменных. Для каждого скрипта этот файл хранит отдельные локальные переменные, подробнее о них в главе 2. Папка logs хранит в себе текстовые файлы, создающиеся в ходе использования команды logto(). 1.2 Регистрозависимость В этом языке в некоторых случаях регистр имеет значение, а в некоторых случаях не имеет. Поэтому, лучше всего, на мой взгляд - называть свои переменные и т.п. маленькими буквами, при вызове также использовать их имя в нижнем регистре. Функции можно вызывать в любом регистре. Между log() и LOG() нет никакой разницы. 1.3 Комментарии Важной частью программного кода являются комментарии. Они не являются частью программы, при компиляции они игнорируются. Тем не менее комментарии делают код программы более понятным, помогая понять те или иные его части. В данном языке существует только 1 тип комментариев: Однострочный. Однострочный комментарий размещается на одной строке после двойного слеша // Пример комментария: Между командой и комментарием также требуется точка с запятой ";". Если писать комментарий в отдельной строке, то он будет выделятся зеленым цветом. Следует обратить внимание на то, что внутренний редактор файлов не поддерживает Отображение русского языка, но если передавать русский текст в качестве параметра в функцию, прим: log("Привет мир"), то это будет работать. 1.4 Встроенные параметры Для лучшего понимание того, что будет написано дальше лучше будет сначала прочитать главу 2. Кратко говоря, большинство параметров, кроме двух - это запрос пользовательского ввода, через "подсказку". Если требуется в ходе выполнения программы запросить от пользователя ввести определённые данные, то параметры для этого идеально подойдут. Список встроенных параметров: $$? Запрашивает у пользователя ввод текста (строки). Возвращает значение типа &string - где &string это введенный нами текст (строка). О том, что такое значение типа &string и др. написано в главе 2. $$[name] Запрашивает у пользователя ввод строки с названием name, название строки должно быть на английском языке. В данном случае name это STROKA. Возвращает значение типа &string - где &string это введенный нами текст (строка) $$i или $$i:d Запрашивает у пользователя ввести название любого предмета. При этом открывается окошко с их списком. Осторожно, на серверах с модами может вызывать краши клиента. Команды возвращают значения типа &string. Различия в том, что первая команда возвращает только название предмета, а вторая возвращает название предмета и через двоеточие его урон. $$u Запрашивает у пользователя ввести никнейм любого игрока или выбрать его в списке. Список отображает всех игроков онлайн, кроме тех, кто использует /v. Возвращает значение типа &string - где &string это никнейм выбранного игрока $$f Запрашивает у пользователи ввести никнейм друга или выбрать его в списке. Список можно редактировать и добавлять в него друзей внутри игры. Возвращает значение типа &string - где &string это никнейм выбранного игрока $$t, $$h, $$w. Запрашивают у пользователя ввести название города, дома, варпа соответственно, или выбрать его в списке. Список аналогичный с $$f, его можно также редактировать. Параметры возвращают значения типа &string, где &string - название города, дома, варпа $$p Запрашивает у пользователя выбор местоположения (Метки) из списка. Список можно редактировать и добавлять в него местоположения внутри игры. У каждого местоположения есть 3 координаты: X Y Z. Возвращает значение типа &string, где $string - строка, содержащая координаты X, Y, Z через запятую. $$px, $$py, $$pz Параметры запрашивают у пользователя выбор местоположения (Метки) из списка. Список тот же, что и при вызове $$p. Единственное, что меняется - тип возвращаемого значения. $$px, $$py, $$pz возвращают значения типа #int - где #int это числовое представление координаты: X для $$px, Y для $$py, Z для $$pz. $$pn Параметр запрашивает пользователя выбрать в списке местоположение (Метку). Список тот же, что и при вызове $$p. Возвращает значение типа &string - где &string это название метки $$0 - $$9 Эти параметры отображают страницы со строками текста, которые мы вводим сами. Эти строки можно редактировать, удалять и добавлять. Строки на страницах $$1 , $$2 , $$3 и т.д. отличаются, что даёт доступ к хранению большого количества разнообразного текста. Однако есть большое НО: текст можно хранить только на английском языке. Параметры возвращают значения типа &string - где &string это выбранная игроком строка текста. $$<filename.txt> Этот параметр ничего не запрашивает у игрока. Он скорее запрашивает информацию у текстового файла, расположенного в папке с макросами. Этот параметр считывает только первую строку текстового файла. Возвращает значение типа &string, где $string - строка, которая была считана с первой строки файла. //Если испугались этого кода - прочитайте сначала главу 2, а потом вернитесь к этому месту $${ &a = $$<texts.txt> log(%&a%) }$$ Содержимое файла texts.txt: Hello World Text1 Text2 Результат: Hello World $$m Запрашивает у пользователя выбор файла. Этот параметр можно много где применить. И то, что он будет делать зависит от того, как его вызывать. Пример использования: $$! Параметр для дампа, останавливает компиляцию кода в том моменте, где был вызван и выгружает содержимое последнего сообщения в чат, чтобы вы могли его редактировать Пример работы: $${ &b = "Hello World" #a = 2 $$! log(%&a%) }$$ В результате работы данного кода произойдёт следующее: В поле чата будет введен текст "#a = 2", а из-за того, что компиляция кода остановлена, то последующие команды, после $$! будут просто писаться в чат
  18. 1. Kadurov 2. Заметил 05.01.2021 17:12 3. 3.0.1 Реакторы 12/8 4. Координаты видны в чате Прошу отметить, что это не первое нарушение игроком правила 3.0.1. Ниже видно, как на нём 2021-01-03 висел пред за нарушения огранов на опреснители.
  19. Какой большой текст ты написал, жаль, что зря) Перечитай сообщение хеда ещё разок
  20. 1. Kadurov Rocs 2. 17:15 - 17:30 3. 1.3 2.0 4. Развели балаган в чате. Крайне некультурные и бестактные личности На скрине ниже представлены их сообщения: 17:24, 17:25 x2. На сообщениях 17:25 Kadurov открыто намекает, что у меня неполная семья. Rocs утверждает, что мне для разговора с людьми требуется дополнительный мужчина )
  21. Поставь, если не стоит, или убери, если стоит, эту галочку и проверь результат. Если не поможет - попробуй поиграться с другими настройками лаунчера. И не выделяй больше 6 ГБ ОЗУ.
  22. Очень хороший гайд, все фичи в одном месте )
  23. Нашёл на каком-то форуме. Не ручаюсь, что способ рабочий, но можешь попробовать. Athreos карта - ваша сетевая карта.
  24. Мне нравится ТМ, т.к геймплей на высоком уровне развития похож на факторию ))
  • Последние посетители   0 пользователей онлайн

    • Ни одного зарегистрированного пользователя не просматривает данную страницу
×
×
  • Создать...