LoveFist Posted June 24, 2012 Share Posted June 24, 2012 (edited) Привет, друзья! В этом уроке мы с Вами сделаем простой скрипт викторины для сервера. Задача: через определенные промежутки времени предлагать игроками сложить в уме два случайных числа. Ответ пишется в чат. Первый, кто напишет верный ответ, получит 1000$. Все очень просто. Для начала нам нужен таймер, который будет запускать викторину: DELAY = 60 -- количество секунд через которые будет запущена следующая викторина setTimer(victorina, DELAY*1000, 0) -- таймер который будет запускать викторину через DELAY секунд Таймер должен запускаться при старте ресурса, поэтому добавим функцию initScript(), которая будет срабатывать при событии onResourceStart: function initScript() setTimer(victorina, DELAY*1000, 0) -- таймер который будет запускать викторину через DELAY секунд end addEventHandler("onResourceStart", resourceRoot, initScript) Теперь добавим функцию victorina(), которая будет запускаться по таймеру. RESULT = nil -- правильный ответ function victorina() -- запуск викторины numb1, numb2 = math.random(1,200),math.random(1,200) -- генерируем два случайных числа от 1 до 200 RESULT = numb1 + numb2 -- получаем правильный ответ outputChatBox('ВИКТОРИНА: Посчитай '..numb1..'+'..numb2..' и получи 1000$') -- делаем анонс викторины в чат end В ней мы генерируем два случайных числа и запоминаем правильный ответ в глобальной переменной RESULT. После того как игроки увидят задание они начнут писать в чат свои варианты. Нам нужно сравнивать их сообщения в правильным ответом и, в случае успеха, завершить викторину и наградить победителя: function victorinaCheck(message) -- проверка сообщений игроков if not RESULT then return end -- если викторина не активна, то нечего проверять if RESULT == tonumber(message) then playerWin(source) end -- если ответ верный, то награждаем победителя end addEventHandler("onPlayerChat", root, victorinaCheck) function playerWin(player) -- функция награждения победителя outputChatBox('ВИКТОРИНА: Правильный ответ - '..RESULT..'. Быстрее всех справился '..getPlayerName(player)) -- выводим сообщение в чат RESULT = nil -- делаем викторину неактивной givePlayerMoney(player,1000) -- выдаем награду end В итоге наш скрипт будет выглядеть следующим образом: DELAY = 60 -- количество секунд через которые будет запущена следующая викторина RESULT = nil -- правильный ответ function initScript() setTimer(victorina, DELAY*1000, 0) -- таймер который будет запускать викторину через DELAY секунд end addEventHandler("onResourceStart", resourceRoot, initScript) function victorina() -- запуск викторины numb1, numb2 = math.random(1,200),math.random(1,200) -- генерируем два случайных числа от 1 до 200 RESULT = numb1 + numb2 -- получаем правильный ответ outputChatBox('ВИКТОРИНА: Посчитай '..numb1..'+'..numb2..' и получи 1000$') -- делаем анонс викторины в чат end function victorinaCheck(message) -- проверка сообщений игроков if not RESULT then return end -- если викторина не активна, то нечего проверять if RESULT == tonumber(message) then playerWin(source) end -- если ответ верный, то награждаем победителя end addEventHandler("onPlayerChat", root, victorinaCheck) function playerWin(player) -- функция награждения победителя outputChatBox('ВИКТОРИНА: Правильный ответ - '..RESULT..'. Быстрее всех справился '..getPlayerName(player)) -- выводим сообщение в чат RESULT = nil -- делаем викторину неактивной givePlayerMoney(player,1000) -- выдаем награду end Edited June 24, 2012 by Guest Link to comment
Kenix Posted June 24, 2012 Share Posted June 24, 2012 Молодец, всё чётко и понятно. if RESULT == message then Переменная RESULT это число, а переменная message это строка. Условие не будет выполняться. Link to comment
LoveFist Posted June 24, 2012 Author Share Posted June 24, 2012 Спасибо за поправку, в начальной версии я это учел, но потом некорректный тест убедил меня что это не обязательно Пост обновлен Link to comment
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now