All pastes #817963 Raw Edit

Someone

public text v1 · immutable
·published 2007-12-16 00:10 UTC
rendered paste body
include('TBQuestions.lua')
local TB = {}
TB.QTimeLimit = 25
TB.MaxQuest = 20
function TB.Init(ply, txt)
	if string.lower(txt) == "/tb start" then
		if !ply:IsAdmin() then return end
		TB.Running = true
		TB.QuestCount = 1
		TB.CurQuestNum = 0
		TB.CurQuest = ""
		TB.CurAns = ""
		TB.PrevQuests = {}
		for k,v in pairs(player.GetAll()) do
			v:ChatPrint("[TriviaBot]: Trivia Bot initialized! " .. TB.QTimeLimit .. " Seconds for each question, " .. TB.MaxQuest .. " Question round!" )
			v:ChatPrint("[TriviaBot]: First question coming up in 10 seconds!")
			v:ChatPrint("[TriviaBot]: Get ready!")
			v.CorrectAns = 0
		end	
		timer.Create("TBInitTimer", 10, 1, TB.Generate)
	end
end 
hook.Add("PlayerSay", "StartTriviaBot", TB.Init)

function TB.Settings(ply, cmd, args)
	if !ply:IsAdmin() then return end
	if TB.Running then
		Msg("[TiviaBot]: Cannot change settings while game is in progress!")
		return
	end
	if string.lower(args[1]) == "time" then
		TB.QTimeLimit = tonumber(args[2])
		Msg("[TriviaBot]: Question time limit set to " .. args[2] .. ".\n")
	end
	if string.lower(args[1]) == "mquest" then
		TB.MaxQuest = tonumber(args[2])
		Msg("[TriviaBot]: Max questions set to " .. args[2] .. ".\n")
	end
end
concommand.Add("TBSettings", TB.Settings)

function TB.Generate()
	if !TB.Running then return end
	local rand = math.random(1, #TB_QUESTIONS)
	if table.HasValue(TB.PrevQuests, rand) then
		rand = math.random(1, #TB_QUESTIONS)
	end
	TB.CurQuestNum = rand
	TB.CurQuest = TB_QUESTIONS[rand]
	TB.CurAns = TB_ANSWERS1[rand]
	for k,v in pairs(player.GetAll()) do
		v:ChatPrint("[TriviaBot]: Question " .. TB.QuestCount)
		v:ChatPrint("[TriviaBot]: " .. TB.CurQuest)
	end
	timer.Create("TBQuestionTimer", TB.QTimeLimit, 1, TB.NextQuestion)
end

function TB.Advance()
	if !TB.Running then return end
	TB.QuestCount = TB.QuestCount + 1
	if TB.QuestCount > TB.MaxQuest then
		TB.End()
		return
	end
	timer.Create("TBNextQuestionTimer", 5, 1, function() 
						for k,v in pairs(player.GetAll()) do
							v:ChatPrint("[TriviaBot]: Next question coming up in 5 seconds.")
						end
						timer.Create("TBAdvanceTimer", 5, 1, TB.Generate)
					end
				)
end

function TB.NextQuestion()
	if !TB.Running then return end
	for k,v in pairs(player.GetAll()) do
		v:ChatPrint("[TriviaBot]: No correct answer was given.")
		v:ChatPrint("[TriviaBot]: The correct answer is: " .. TB.CurAns)
	end
	TB.Advance()
end

function TB.Skip(ply, txt)
	if !TB.Running then return end
	if !ply:IsAdmin() then return end
	if string.lower(txt) == "/tb skip" then
		for k,v in pairs(player.GetAll()) do
			v:ChatPrint("[TriviaBot]: Question skipped.")
			v:ChatPrint("[TriviaBot]: The correct answer is: " .. TB.CurAns)
		end
		TB.Advance()
	end
end
hook.Add("PlayerSay", "TBSkipQuestion", TB.Skip)

function TB.CorrectAns(ply, txt)
	if !TB.Running then return end
	if ((string.lower(txt) == string.lower(tostring(TB_ANSWERS1[TB.CurQuestNum]))) or
        (TB_ANSWERS2[TB.CurQuestNum] and string.lower(txt) == string.lower(tostring(TB_ANSWERS2[TB.CurQuestNum]))) or
        (TB_ANSWERS3[TB.CurQuestNum] and string.lower(txt) == string.lower(tostring(TB_ANSWERS3[TB.CurQuestNum])))) then
		ply.CorrectAns = ply.CorrectAns + 1
		timer.Remove("TBQuestionTimer")
		for k, v in pairs(player.GetAll()) do
			v:ChatPrint("[TriviaBot]: Correct answer given by " .. v:Nick .. "!")
			v:ChatPrint("[TriviaBot]: The correct answer was: " .. TB_ANSWERS1[TB.CurQuestNum] .. ".")
		end
		TB.Advance()
	end
end
hook.Add("PlayerSay", "CorrectTBAnswer", TB.CorrectAns)

function TB.End()
	timer.Remove("TBQuestionTimer")
	timer.Remove("TBAdvanceTimer")
	timer.Remove("TBInitTimer")
	for k, v in pairs(player.GetAll()) do
		v:ChatPrint("[TriviaBot]: Game Over.")
		v:ChatPrint("[TriviaBot]: Final Scores:")
		for j, n in pairs(player.GetAll()) do
			v:ChatPrint("[TriviaBot]: " .. n:Nick() .. ": " .. n.CorrectAns)
		end
	end
	TB.Running = false
end

hook.Add("PlayerSay", "EndTBGame", function(ply, txt) if ply:IsAdmin() then if string.lower(txt) == "/tb end" then TB.End() end end end)