Третье руководство по скриптингу в Multi Theft Auto: DeathMatch
Скрипт этой недели показывает систему случайного изменения одежды. В этом примере мы будем устанавливать интервал изменения в 2 секунды, но имейте в виду, что будет происходить небольшая пауза при смене одежды. Большие интервалы советуем избегать, чтобы не прерывать геймплей.
Сначала, мы собираемся рассчитать, сколько штук в каждой категории, и сохранят счет в этой таблице:
local count = {}
Мы имеем 18 типов одежды, для проверки (они будут зарегистрированы вместе с остальной частью ID в релизе):
fortype = 0, 17do--инициализация счетчикаlocal clothes = 0-- Мы увеличиваем счетчик до тех пор пока не получим любой неправильный IDwhile getClothesByTypeIndex (type, clothes ) ~= falsedo clothes = clothes + 1end-- помните, что последний не существует: мы должны удалить его -- от счета, сохраняя его
count[type] = clothes - 1end
Создание функции изменения одежды
Теперь мы создадим функцию, изменяющую непосредственно одежду. Должно быть взято несколько вещей в аккаунт, которые будут записываться в один момент. Декларация начинается здесь:
function doChangeClothes ()
Теперь мы собираемся запустить это для каждого присоединяемого игрока. Это делается восстановлением таблицы каждого игрока на сервере, затем перекрутить через таблицу и поменять их одежду. Сначала мы восстановим таблицу наших игроков:
local players = getElementsByType ("player")
Затем мы используем Lua для (for) прокрутки, чтобы пройти каждого игрока в этой таблице.
for i, player in players do
Сначала, мы должны выбрать случайный тип, используя Lua math.random. Мы оставим татуировки (тип ID 4-12), потому что они не видимы с одеждой в любых случаях:
local accessory = math.random(0, 1)if accessory == 1then--выберите дополнительный типtype = math.random(13, 17)else--выберите тип причесок/рубашек/брюк/ботинокtype = math.random(0, 3)end
Полные костюмы (тип ID 17) применены сверху рубашек и брюк, таким образом, мы хотели бы их удалить, если любой из них будет выбран:
Теперь, когда мы имеем наш тип, мы должны выбрать случайную часть одежды в пределах этого:
local clothing = math.random(0, count[type])
Только добавление этой одежды игроку оставляем, чтобы сделать.
--мы получаем текстуру и модель через getClothesByTypeIndex
texture, model = getClothesByTypeIndex (type, clothing )--и мы добавляем эту часть одежды игроку.
addPlayerClothes ( player, texture, model, type)
Мы не должны забывать закрывать "для" ("for") прокрутки, и декларации функции.
endend
Запуск функции
Наконец, мы неоднократно вызовем нашу функцию, когда этот скрипт "ресурс" ("resource") (о нём будут объяснено позже) начат.
Наша функция clothesStart должна быть вызвана только, когда этот (this) скрипт загрузится. Следующая линия заставляет скрипт игнорировать любые загрузки ресурса кроме него собственного:
if resourcename ~= getThisResource()thenreturnend
Наконец, мы будем использовать функцию setTimer, как в прошлом руководстве, для того чтобы вызывать функцию каждые две секунды.
--0 подразумевает бесконечное время, пока таймер не будет закончен
setTimer ("doChangeClothes", 2000, 0)end
Вот и всё на этой неделе. Следите за дальнейшими обновлениями на нашем сайте.