Jump to content

[Урок] Простая математическая викторина


Recommended Posts

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

Задача: через определенные промежутки времени предлагать игроками сложить в уме два случайных числа. Ответ пишется в чат. Первый, кто напишет верный ответ, получит 1000$. Все очень просто.

3002256m.jpg

Для начала нам нужен таймер, который будет запускать викторину:

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 by Guest
Link to comment
  • Other Languages Moderators

Молодец, всё чётко и понятно.

if RESULT == message then 

Переменная RESULT это число, а переменная message это строка. Условие не будет выполняться.

Link to comment

Спасибо за поправку, в начальной версии я это учел, но потом некорректный тест убедил меня что это не обязательно :) Пост обновлен

Link to comment

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 account

Sign in

Already have an account? Sign in here.

Sign In Now
  • Recently Browsing   0 members

    • No registered users viewing this page.
×
×
  • Create New...