Урок #2: Переменные
В прошлом уроке мы познакомились с массивами, и узнали, что массивы - это “ящик”, с помощью которого вы можете хранить данные о игроке / мире и т.д
В этом уроке, я познакомлю вас с переменными, переменные, очень похожи на массивы, но в чем-же их отличее? А отличее их в том, что в массиве вы можете хранить только целое число, а в переменных вы можете хранить целые числа, десятичные дроби, текст, и возможно что-то еще о чем я не в курсе ;D
Так-же, в мире всего 99 переменных для игрока и мира, а слотов массива для игрока 26, а для сервера 50
И еще одно очень важное их отличее это то, что изначально массив начинается с 0, а переменная начинается с пустоты.
Для начала, я расскажу вам о командах с помощью которых вы сможете взаимодействовать с перенными
На тренинге переменные хранятся только у игроков и серверов, нету такого большого разнообразия как с массивами.
Команды ниже:
/pvarlist - Посмотреть список всех созданных переменных
/pvar [ ID игрока ] - Посмотреть список переменных игрока
/varlist - Посмотреть список всех переменных мира
Итак, давайте для начала немного поговорим о переменных игрока, открыв список переменных игрока ( /pvarlist )
Вы увидите что-то наподобии такого:
Очень страшно, а где переменные?! А их нету! Ведь они еще не созданы! Для того, чтобы создать новую переменную, вы должны тыкнуть на любую строку чтобы создать или изменить название переменных.
Хотелось-бы заранее сказать, что в этом уроке, для примера, я создам систему KD
*Сокращение от англ. Kills/Deaths — переменная, отражающая отношение количество убийств к количеству смертей в шутерах.
Для этого, я создам 3 переменных, с названиеми: kill, death, killdeath
Для создания переменных используйте латиниский алфавит, иначе возможны ошибки!
Хотелось-бы обратить Ваше внимание на то, что создав две переменные “kiLl”, “kilL”, вы создадите две разных переменные, то-есть, создание переменных введется с РеГиСтРоМ бУкВ!
Как я сказал ранее, что переменные начинаются буквально с пустоты, а не 0 как с массивами, и по этому, если вы попытаесь так-же выдать наркотики игроку используя переменную где у игрока пустота - ничего не выйдет, по этому, при заходе в ваш мир вы должны устанавливать переменную игроку со значением “0”, сделать это можно следуйщий способом:
Вы должны создать новую переменную “reg”, “register”, “lobby”, название - не имеет смысла, просто для примера.
В моем случае будет вот так:
Далее, вы заходите /tb, ( о нем поговорим чуть позже ), и заходите в любой свободный триггер-блок ( N/A )
И устанавливаете ему любое название используя латиниский алфавит
В моем случае будет - P_spawn, число сравнений: 20
Далее, мы создаем командный блок с радиусом в 9999, и активацией “Спавн игрока”
Заходим в настройку условий, выбираем любое свободное условие, и в данном пункте выбираем “Свое значение” - самое последнее.
После, мы вписываем в неё возращаемую функцию с которой хотим сверить значение переменной
В нашем случае - #pvar(НазваниеВашейПеременной)#,
В условии ставим не равно
В значении 1
Выглядить будет примерно так:
Далее, мы заходим в действие 1, выбираем строчку “Массивы”, и действие “Вызвать триггер блок”
В данную строку, мы вписываем название триггерблока который мы создали ранее, так-же с учетом регистра букв, после названия ОБЪЯЗАТЕЛЬНО ставим запятую, и пишем 0
Выглядить будет примерно так:
В действии номер 2 мы вновь заходим в массивы, и выбираем действие “Установить Переменную Игроку”
Далее, мы вписываем по форме, а именно: #playerid#, НазваниеНашейПеременной, 1
Вот так это должно будет выглядить, не считая названия переменной!
Теперь мы вновь заходим в триггер блок используя /tb, заходим в наш ранее созданный триггерблок, и повторяем процедуру с выставлением значение переменных, тоесть, мы должны установить нужным нам переменным значение “0”, для начала, 20 переменных вам вполне хватит
Пример:
Что-ж, теперь я объясню, что мы только что сделали, а сделали мы вот что:
При заходе в мир, у игрока, который впервые спавнится в вашем мире впервые, ведь устанавливается переменная lobby только один раз, и сделано условие что игрок не спавнился до этого, тоесть, переменная lobby не равна одному. Далее вызывается триггерблок, в котором мы устанавливаем значение нашим переменным 0, в будущем, вы будете работать с данными переменными, и если вы хотите использовать их для арефметических задачек, вы объязательно должны сделать данную процедуру, иначе, то что вы будете добавлять к переменной - не будет туда записывать, так как там нету ничего, пустота! Там нету даже 0!
Мы идем дальше, что это за #playerid# такой?! Что туда еще можно вписывать?!
#playerid#, это id игрока который вызвал этот блок, как и #retval(0)#, вместо #playerid# туда можно подставлять массивы/переменные, #retval(1)#, #retval(2)#, #retval(3)#, тоесть ящики в которых тоже хранятся ID какого-либо игрока, чуть далее мы поговорим об этом более подробно.
А мы идем дальше! Ведь нам еще предстоит создать систему КД, мы уже сделали так, чтобы переменные игрока превращались из пустоты в 0 при первом заходе в мир, далее, мы создаем новый командный блок, с радиусом в 9999, и активацией на убийство. в действии номер 1, мы опять заходим в строку “массивы”, и устанавливаем переменную игроку, далее, мы вписываем туда: #playerid# - id игрока который совершил убийство, переменную, в которую мы будем записать что-либо, в моем случае это переменная называется kill
и далее, мы пишем простенькую арефметику, для того, чтобы сервер понял, что мы желаем выполнить арефметическое действие, мы должны открыть скоку, и записываем первое слагаемое, далее пишем что мы хотим сделать, ( сложить, вычесть, умножить, разделить ), и записать второе слагамое, после этого мы закрываем скобочку.
Вот то, что у нас должно получится:
#playerid#, kill, (#pvar(kill)# + 1)
Обратите внимание на данный список символов, если вы желаете не только складывать переменные!
+ - Сложить
- - Вычесть
`* - Умножить
/ - Разделить
Так-же еще приведу несколько примеров:
#playerid#, b, (#pvar(a)# + #pvar©#)
#playerid#, g, (#pvar(a)# / #pvar(b)#)
#playerid#, f, (#pvar(g)# - #Pvar(b)#)
#playerid#, h, (#pvar(f)# - #pvar(g)#)
Далее, мы повторяем похожию процедуру, только вместо действия “Убийство”, мы устанавливаем действие “Смерть”, и Устанавливаем Значение Переменной
#playerid#, death, (#pvar(death)# + 1)
Получится должно примерно следуйщее:
Что-ж, основу мы сделали, теперь, мы должны показывать игроку его общую статистику, для этого, я буду показывать игроку диалог, в котором будет видна его статистика, но перед этим, мы установим ему переменную killdeath, ввиде десятичных дробей, как это сделать?! Сейчас покажу!
Для начала, мы создаем новый Командный Блок, лично я буду делать активацию ввиде аллиаса.
как вы помните, если вы желаете сделать активацию только ввиде аллиаса, вы ставите активацию “Ввод диалога”, и радиус активации 0.10, 1.00
Далее мы заходим в действие номер 1, строка “массивы”, и выбираем действие Установить Переменную игроку
Для того, чтобы получить значение переменной ввиде десятичной дроби, я буду использовать функцию floatnum
, которая складывает слагаемые выдает очень точный ответ ввиде десятичных дробей, так-же заодно, я расскажу вам о под функции.
Мы пишем: #playerid#, killstats, #floatnum(`pvar(kill)` / `pvar(death)`)#
*Итак, давайте разберем то, что я сделал, для начала, я записал переменную в которую мы получим значение переменных которые мы хотим разделить, в вашем случае это может быть не killstats, а kd допустим, т.е пишите название Вашей переменной а не моей, иначе будет ошибка. Так-же забыл сказать, что если вы попытаетесь установить значение в переменной которой нету в /pvarlist, вы получите ошибку!
Идем далее! Я использовал функцию, о которй рассказал чуть выше, но пчему я написал не #pvar(kill)# а `pvar(kill)`?! Всё довольно просто! Ведь мы, cделали еще одну под функцию, тоесть, мы не можем записать внутри функции еще одну обычную под функцию, иначе мы получим ошибку, вместо “#” мы должны использовать “`”
Правильно: #floatnum(`pvar(kill)` / `pvar(death)`)#
НЕ ПРАВИЛЬНО: #floatnum(#pvar(kill)# / #pvar(death)#)#
Так-же хотел-бы предупредить, что внутри под функции мы не можем записать еще одну подфункцию, так-же нельзя писать внутри скобок еще одни скобки!!!
Вот пример:
#floatnum(`(`pvar(a)` + pvar(b)\
) / `pvar(death)`)#
КАК НАПИСАЛ ВЫШЕ ВОТ ТАК ВОТ ВЫ НЕ ДЕЛАЕТЕ, ОШИБКА!
Далее, вторым действеем мы показываем информационный диалог в котором будет видна статистика нашего игрока.
Мы вызываем случайный пустой блок ( который был создан! Важно! ), в котором ничего нету, не советую вызывать самого себя, т.к вы не сможете закрыть диалог нажимая Enter, лучше непожалеть лишний блок, как говорится - скупой платит дважды, далее, оформляем диалог как вам душе угодна, используя #pvar(kill)#, #pvar(death)#, #pvar(killstats)#, пример:
На этом, я думаю завершить наш урок, к сожалению не успеваю познакомить вас с переменными мира, но там очень даже и похоже, так-же создаете переменную и записываете туда нужное значение, но я думаю, мы их рассмотрим в уроке под номером 3, надеюсь, всё что было написано в этом уроке вам было понятно, если вы что-то не поняли или у вас есть дополнительные вопросы - пишите сюда, желаю вам Удачи!