TriviaBot (Don Leon Version)
 

News:

29 December 2022 - PtokaX 0.5.3.0 (20th anniversary edition) released...
11 April 2017 - PtokaX 0.5.2.2 released...
8 April 2015 Anti child and anti pedo pr0n scripts are not allowed anymore on this board!
28 September 2015 - PtokaX 0.5.2.1 for Windows 10 IoT released...
3 September 2015 - PtokaX 0.5.2.1 released...
16 August 2015 - PtokaX 0.5.2.0 released...
1 August 2015 - Crowdfunding for ADC protocol support in PtokaX ended. Clearly nobody want ADC support...
30 June 2015 - PtokaX 0.5.1.0 released...
30 April 2015 Crowdfunding for ADC protocol support in PtokaX
26 April 2015 New support hub!
20 February 2015 - PtokaX 0.5.0.3 released...
13 April 2014 - PtokaX 0.5.0.2 released...
23 March 2014 - PtokaX testing version 0.5.0.1 build 454 is available.
04 March 2014 - PtokaX.org sites were temporary down because of DDOS attacks and issues with hosting service provider.

Main Menu

TriviaBot (Don Leon Version)

Started by BrokenBrick, 22 October, 2003, 00:16:46

Previous topic - Next topic

0 Members and 1 Guest are viewing this topic.

BrokenBrick

Since old members have not returned, I decided to post this TriviaBot, though someone has already posted a different one. This is Don Leon's version that I took straight from my scripts folder, and it includes version 2.1 of the script, and version 2.2 of the default questions which is supposed to be less likely to crash hubs, though it crashes mine.  Also included is a trivia file that I stole from my old IRC triviabot which is much smaller and has a better chance of running on a hub without crashing it.  You can ask me for some support, but I wont be able to help much because I did not write this script, I'm just sharing the love :-p

Link
http://www33.brinkster.com/brokenbrick/
Indiecent Music
indiecent.no-ip.com:4141


Live the lonely life, walk the lonely path, die a lonely death

Str?m@p?gen?

I?ve got this message when i start script. Syntax Error: attempt to index local?local?curUser?(a nil value). Do yoy know what this is?

It is a great script, i like to work perfect :]

ralig

Ignore the initial error..It's nothing improtant...I can't remember exactly what caused it, although I think it was from the script either loading the questions or the scores from the file. It was a fairly easy fix, but it's been awhile since I've looked at that script.

Str?m@p?gen?


BrokenBrick

Yes, its not important.  If I remember correctly its because there are no players when the script is started initially.  I believe you could code it out, but it would be a hassle.  the error wont hurt you :)
Indiecent Music
indiecent.no-ip.com:4141


Live the lonely life, walk the lonely path, die a lonely death

BrokenBrick

If someone knows the whereabouts of Don Leon, or can edit this script to work in TestDrive4 without crashing, please post your comments, info, or fixes here
Indiecent Music
indiecent.no-ip.com:4141


Live the lonely life, walk the lonely path, die a lonely death

lazyj189

ya no kidding.  v2.2 locks up my hub EVERY time after about 10 minutes of playing.  it needs some serious work.  byw, I'm running 15.18debug
DivX Dominion Hub Owner
3 years running
DivX Dominion Hub

T???h?m?

#7
here i will post this version of the triviabot2.2 i have, this version enables you to have caps instead of the lower case and the error ?local?curUser?(a nil value).  is fixed and works perfectly, ok, i am posting this in 3 parts, where it ends in this post leave a gap, Eg:


function Main()
  frmHub:RegBot(BotName)
  ReloadQuestions()
  setlocale("swe")
  LoadScores()
end
                                                              <-------gap here
function NewUserConnected(curUser)
  if (boolAutoLogin) then
   if (not (playerArray[curUser.sName])) then
        playerArray[curUser.sName] = 1
  else

as you can see there is a gap, you will need to put a gap inbetween the first part i post and the last, hope it works!

T???h?m?

BotName = "Trivia"
ScriptVersion = "v2.2"
BotVersion = BotName.." "..ScriptVersion

-- This file is not needed it will be created if it not exists
strTrivScoreFile = "TriviaScores.dat"

-- This file is needed unless you want to run a Trivia with only two questions ;)
strDefTrivFile = "trivia.dat"
strTrivFile = strDefTrivFile
strQFile = "Questions.dat"

-- This char will be the global separator? (Make it one that is not used in nicknames nor questions ;)
strGSep = "*"

-- This char is used to mask the unrevealed chars
strCMask = "@"

-- Default startup mode of Trivia!
lngDefMode = 0 -- (0 = game is played in chat!, 1 = game is played in chat but questions only show for players, 2 = game is played in pm with players)
lngMode = lngDefMode

-- Max number of questions to show when a Operator ask to see list Questions 0 = 0, -1 = Disabled
lngMaxShowList = 5

-- Max no of Hints per word, and always hit on a hidden char
lngMaxHints = 4
boolHintAlwaysHitHidden = nil -- (nil = off, 1 = on)

-- How much time before a question end. Time in Trivia is measured in 15 seconds, 1 = 15 seconds, 2 = 30 seconds etc!
-- Rest is how long to rest after a question is solved depening on when the word is solved in the Timer loop it is ?15 secs to the setting!
lngMaxTime = 8 -- (Needs to be a multiple of 4   i.e. 4 / 8 / 12 / 16)
lngRestTime = 2
lngHintTime = lngMaxTime / 4

-- How often should the bot autosave the scores
boolAutoSaveScores = 1 -- (nil = off, 1 = on)
countSaveTurns = 10 -- After how many questions should the scores be saved

-- Should bot reveal the correct answer once time is up?
boolRevealAnswer = 1 -- (nil = off, 1 = on)

-- Should the bot display what guess made the word become a little clearer if played in PM!
boolShowGuessesInPM = 1 -- (nil = off, 1 = on)

-- Should the bot Auto Reveal Hints?
boolAutoHint = 1 -- (nil = off, 1 = on)

-- Should the bot auto login every user on connect ?
boolAutoLogin = 1 -- (nil = off, 1 = on)

-- Do you want users to be able to add questions ? Operators can always add questions.
boolAddQuestion = 1 -- (nil = No, 1 = Yes)

-- TriggStart is what char the commands should begin with I use ! but you can use # or whatever
TriggStart = "!"

-- Theese are the different triggers I've tried to name them so that one easily understand what they do!
-- I include TriggStart and then the word within "" this word is not casesensitive!
JoinTrigg = TriggStart.."tbjoin"
PartTrigg = TriggStart.."tbpart"
StartTrigg = TriggStart.."tbstart"
StopTrigg = TriggStart.."tbstop"
WordTrigg = TriggStart.."tbword"
QuizTrigg = TriggStart.."tbquestion"
RestartTrigg = TriggStart.."tbrestart"
PointTrigg = TriggStart.."tbpoints"
ScoreTrigg = TriggStart.."tbscores"
PlayerTrigg = TriggStart.."tbplayers"
QuestionsTrigg = TriggStart.."tbquestions"
ReloadTrigg = TriggStart.."tbreload"
HelpTrigg = TriggStart.."tbhelp"
ExtraHelpTrigg = TriggStart.."tbhelp+"
SaveTrigg = TriggStart.."tbsavescores"
LoadTrigg = TriggStart.."tbloadscores"
ModeTrigg = TriggStart.."tbmode"
HintTrigg = TriggStart.."tbhintme"
TopTrigg = TriggStart.."tbtopten"
AddTrigg = TriggStart.."tbaddquestion"

bcount = 0
scount = 0
sQuestion = ""
sAnswer = ""
guessArray = {}
lngGuessmax = 0
playerArray = {}
pointArray = {}
lngWord = 0
lngPassed = 0
lngHinted = 0
strWord = ""
strQuestion = ""
strSolved = ""
strBanner = "Type '"..StartTrigg.."' to start Trivia, '"..StopTrigg.."' to stop Trivia, type '"..JoinTrigg.."' to Join and '"..PartTrigg.."' to Part!"
strStart = "TriviaBot "..ScriptVersion.." started! "..strBanner
strStopp = "TriviaBot "..ScriptVersion.." stopped! "..strBanner

function Main()
  frmHub:RegBot(BotName)
  ReloadQuestions()
  setlocale("swe")
  LoadScores()
end

function NewUserConnected(curUser)
  if (boolAutoLogin) then
   if (not (playerArray[curUser.sName])) then
        playerArray[curUser.sName] = 1
  else
     playerArray[curUser.sName] = nil
  end
  end
end

function OpConnected(curUser)
  if (boolAutoLogin) then
   if (not (playerArray[curUser.sName])) then
        playerArray[curUser.sName] = 1
  else
     playerArray[curUser.sName] = nil
  end
  end
end

function UserDisconnected(curUser)
  playerArray[curUser.sName] = nil
end

function OpDisconnected(curUser)
  playerArray[curUser.sName] = nil
end
[GAP HERE THEN THE 2nd part OF THE SCRIPT]

T???h?m?

function DataArrival(curUser, data)
  local boolPlaydata = nil
  if (strsub(data, 1, 1) == "<") then
    data = strsub(data, 1, (strlen(data) - 1))
    if ((lngMode == 0) or (lngMode == 1)) then
      boolPlaydata = 1
    end
  elseif (strsub(data, 1, 4) == "$To:") then
    data = strsub(data, 1, (strlen(data) - 1))
    local _, _, whoTo = strfind(data,"$To:%s+(%S+)")
    if (whoTo == BotName) then
      data = strsub(data, (15 + strlen(BotName) + strlen(curUser.sName)))
      if (lngMode == 2) then
        boolPlaydata = 1
   local _, _, chat = strfind(data, "%b<>%s(.+)")
   SendChatToOthers(chat, curUser)
      end
    end
  end


  local _, _, firstWord = strfind(data, "%b<>%s+(%S+)")
 
  if (firstWord ~= nil) then
    if ((strlower(firstWord) == strlower(HelpTrigg)) or (strlower(firstWord) == strlower(ExtraHelpTrigg))) then
      showHelp(curUser)
    elseif (strlower(firstWord) == strlower(SaveTrigg)) then
      if (curUser.bOperator) then
        SaveScores(curUser)
      end
    elseif (strlower(firstWord) == strlower(LoadTrigg)) then
      if (curUser.bOperator) then
        LoadScores(curUser)
      end
    elseif (strlower(firstWord) == strlower(TopTrigg)) then
     TopTen(user)
    elseif (strlower(firstWord) == strlower(AddTrigg)) then
      if (boolAddQuestion) then
   s,e,sQuestion,sAnswer = strfind(data, "%b<>%s+%S+%s+(.+)#(.+)")   
     AddQuestion(curUser,sQuestion,sAnswer)
      elseif (curUser.bOperator) then
         s,e,sQuestion,sAnswer = strfind(data, "%b<>%s+%S+%s+(.+)#(.+)")   
     AddQuestion(curUser,sQuestion,sAnswer)
      else
     SendToPlayers("Questions cannot be added by users at this time")
      end
    elseif (strlower(firstWord) == strlower(ModeTrigg)) then
      if (curUser.bOperator) then
        local _, _, ModeDigit = strfind(data, "%b<>%s+%S+%s+(%d+)")
        if (ModeDigit ~= nil) then
          lngMode = tonumber(ModeDigit)
          if (lngMode == 0) then
            SendToPlayers("Game is played in chat")
          elseif (lngMode == 1) then
            SendToPlayers("Game is played in chat but Questions only show for players")
          elseif (lngMode == 2) then
            SendToPlayers("Game is played in PM with Players")
          else
            SendToPlayers("Errorous mode, mode set to default")
            lngMode = lngDefMode
          end
        end
      end
    elseif (strlower(firstWord) == strlower(JoinTrigg)) then
      if (not (playerArray[curUser.sName])) then
        playerArray[curUser.sName] = 1
        SendToPlayers(curUser.sName.." is now a player!")
      else curUser:SendPM(BotName, "You are already a player and you didn't know. Possibly because you were autologged in")
      end
    elseif (strlower(firstWord) == strlower(PartTrigg)) then
      if (playerArray[curUser.sName]) then
        SendToPlayers(curUser.sName.." is no longer a player!")
        playerArray[curUser.sName] = nil
      end
    elseif (strlower(firstWord) == strlower(RestartTrigg)) then
      if (curUser.bOperator) then
        SendToPlayers("TriviaBot restarted. All points etc are lost!")
        SendToPlayers("If Save is used now it will overwrite the old save!")
        pointArray = {}
        StopQuiz(1)
      end
    elseif ((strlower(firstWord) == strlower(PointTrigg)) and (playerArray[curUser.sName])) then
      if (pointArray[curUser.sName]) then
        SendToPlayers(curUser.sName.." you have "..pointArray[curUser.sName].." points!")
      else
        SendToPlayers(curUser.sName.." you have 0 points!")
      end
    elseif ((strlower(firstWord) == strlower(HintTrigg)) and (playerArray[curUser.sName])) then
      if ((lngWord ~= 0) and strfind(strSolved, strCMask, 1, plain)) then
        if (lngHinted < lngMaxHints) then
       for nn=1,bcount do
              local lngRepChar = random(1, strlen(strWord))
              while 1 do
                if (boolHintAlwaysHitHidden) then
                  if (strsub(strSolved, lngRepChar, lngRepChar) == strCMask) then
                    break
                  end
                else
                  break
                end
                lngRepChar = random(1, strlen(strWord))
              end
              local strTurn = ""
              for x=1, strlen(strWord) do
                if (x == lngRepChar) then
                 strTurn = strTurn..strsub(strWord, x, x)
                else
                  strTurn = strTurn..strsub(strSolved, x, x)
                end
         end
              strSolved = strTurn
     end
            lngHinted = lngHinted + 1
       lngHintTimeCount = lngHintTimeCount + lngHintTime
            SendToPlayers("Hint: "..strupper(strSolved))
       acount = ""
         else
            SendToPlayers("All hints used for this word!")
       end
      else
        SendToPlayers("No hint needed!")
      end
    elseif ((strlower(firstWord) == strlower(ScoreTrigg)) and (playerArray[curUser.sName])) then
      curUser:SendPM(BotName, "SCORES:")
      curUser:SendPM(BotName, "---------------------------------------------------------")
      for index, value in pointArray do
        curUser:SendPM(BotName, index.."'s points: "..value)
      end
      curUser:SendPM(BotName, "---------------------------------------------------------")
    elseif ((strlower(firstWord) == strlower(PlayerTrigg)) and (playerArray[curUser.sName])) then
      curUser:SendPM(BotName, "PLAYERS:")
      curUser:SendPM(BotName, "---------------------------------------------------------")
      for index, value in playerArray do
        curUser:SendPM(BotName, index)
      end
      curUser:SendPM(BotName, "---------------------------------------------------------")
    elseif (strlower(firstWord) == strlower(QuestionsTrigg)) then
      if (curUser.bOperator) then
        curUser:SendPM(BotName, "TOP "..lngMaxShowList.." QUESTIONS:")
        curUser:SendPM(BotName, "---------------------------------------------------------")
        local lngShowMax = lngMaxShowList
        for index, value in guessArray do
          if (lngShowMax == 0) then
            break
          end
          arrTmp = tokenize(guessArray[index], strGSep)
          strTmp = arrTmp[1]
          curUser:SendPM(BotName, "["..index.."] "..strTmp)
          lngShowMax = lngShowMax - 1
        end
        curUser:SendPM(BotName, "Total # of questions: "..lngGuessmax)
        curUser:SendPM(BotName, "---------------------------------------------------------")
        curUser:SendPM(BotName, " ")
      end
    elseif (strlower(firstWord) == strlower(StartTrigg)) then
      if (curUser.bOperator) then
        if (lngWord == 0) then
          playerArray[curUser.sName] = 1
          SendToAll(BotName, strStart)
          if (lngMode == 2) then
            SendToPlayers(strStart)
          end
          StopQuiz(1)
        else
          SendToAll(BotName, "There is already a game going on type "..JoinTrigg.." to join!")
        end
      else
   curUser:SendPM(BotName, "Only Operators can start the Trivia because it might be off for a reason.")
      end
    elseif (strlower(firstWord) == strlower(StopTrigg)) then
      if (curUser.bOperator) then
        HoldQuiz()
        StopQuiz()
        SendToAll(BotName, strStopp)
        if (lngMode == 2) then
          SendToPlayers(strStopp)
        end
      end
    elseif (strlower(firstWord) == strlower(WordTrigg)) then
      if ((lngWord ~= 0) and (playerArray[curUser.sName] == "Player")) then
        SendToPlayers("Current question is: "..strSolved.." ("..strlen(strSolved)..")")
      end
    elseif (strlower(firstWord) == strlower(QuizTrigg)) then
      if ((lngWord ~= 0) and (playerArray[curUser.sName])) then
        SendToPlayers("Question is: "..strQuestion)
      end
    elseif (strlower(firstWord) == strlower(ReloadTrigg)) then
      if (curUser.bOperator) then
        local _, _, secondWord = strfind(data, "%b<>%s+%S+%s+(%S+)")
        if (secondWord) then
        handle = openfile(secondWord, "r")
          if (handle) then
            closefile(handle)
            strTrivFile = secondWord
          end
        end
       
        HoldQuiz()
        ReloadQuestions()
      end
    else
   if ((lngWord ~= 0) and (boolPlaydata)) then
        if (playerArray[curUser.sName]) then
          local msg = strsub(data, (4 + strlen(curUser.sName)))
          if (strlen(msg) >= strlen(strWord)) then
            local boolDisc = nil
           
   local strTurn = ""
        if strlower(msg) == strlower(strWord) then
          strTurn = strWord
          boolDisc = 1
        else
          strTurn = strSolved
        end
 
           
            if (boolDisc) then
              strSolved = strTurn
            end
            if (boolDisc) then
              if (strlower(msg) ~= strlower(strWord)) then
                SendToOthers(curUser, msg)
                SendToPlayers("Answer is now: "..strSolved)
              end
            end
            if (strlower(msg) == strlower(strWord)) then
              if (not (pointArray[curUser.sName])) then
                pointArray[curUser.sName] = 0
              end
      if lngHinted == 3 then pointArray[curUser.sName] = pointArray[curUser.sName] + 1
      elseif lngHinted == 2 then pointArray[curUser.sName] = pointArray[curUser.sName] + 2
      elseif lngHinted == 1 then pointArray[curUser.sName] = pointArray[curUser.sName] + 3
      else pointArray[curUser.sName] = pointArray[curUser.sName] + 4
      end
              SendToPlayers("Answer was: "..strSolved)
              SendToPlayers("Answer was solved by: "..curUser.sName)
              SendToPlayers("Next question in "..(lngRestTime * 15).." (?15) Secs")
              lngPassed = lngMaxTime
              SendToPlayers(curUser.sName.."'s points: "..pointArray[curUser.sName])
              HoldQuiz()
            end
          end
        end
      end
    end
  end
end

function HoldQuiz()
  strWord = ""
  strQuestion = ""
  strSolved = ""
end

function StopQuiz(restart)
  lngWord = 0
  lngPassed = 0
  strWord = ""
  strQuestion = ""
  strSolved = ""
  StopTimer()
  if (restart) then
    StartQuiz()
  end
end

function StartQuiz()
  lngWord = random(1, lngGuessmax)
  QWarray = tokenize(guessArray[lngWord], strGSep)
  strQuestion = QWarray[1]
  strWord = QWarray[2]
  strSolved = ""
  for x=1, strlen(strWord) do
    if (strsub(strWord, x, x) == " ") then
      strSolved = strSolved.." "
    else
      strSolved = strSolved..strCMask
    end
  end
  lngPassed = 0
  lngHinted = 0
  lngHintTimeCount = lngHintTime
  if strlen(strWord) < 4 then
   bcount = random(1, 2)
  elseif strlen(strWord) >= 4 and strlen(strWord) <= 9 then
   bcount = random(1, 3)
  elseif strlen(strWord) >= 9 and strlen(strWord) <= 20 then
   bcount = random(2, 4)
  else
   bcount = random(3, 5)
  end
  SetTimer(15000)
  StartTimer()
  SendToPlayers("Question: "..strQuestion)
  SendToPlayers("Answer: "..strSolved.." ("..strlen(strSolved)..")")
end
[GAP HERE THEN 3rd PART OF THE SCRIPT]

T???h?m?

function OnTimer()
  lngPassed = lngPassed + 1
  if (lngPassed == lngMaxTime) then
    scount = scount + 1
    if scount == countSaveTurns then
      local handle = openfile(strTrivScoreFile, "w")
          for index, value in pointArray do
         write(handle,index..strGSep..value.."\r\n")
       end
         closefile(handle)
    scount = 0
    end
    if (boolRevealAnswer) then
      SendToPlayers("Answer was '"..strWord.."' and was not solved!")
    else
      SendToPlayers("Answer was not solved!")
    end
    SendToPlayers("Next question in "..(lngRestTime * 15).." Secs")
    HoldQuiz()
  elseif (lngPassed >= (lngRestTime + lngMaxTime)) then
    StopQuiz(1)
  elseif (lngPassed == lngHintTimeCount) then
    if (boolAutoHint) then
   for nn=1,bcount do
            local lngRepChar = random(1, strlen(strWord))
            while 1 do
              if (boolHintAlwaysHitHidden) then
                if (strsub(strSolved, lngRepChar, lngRepChar) == strCMask) then
                  break
                end
              else
                break
              end
              lngRepChar = random(1, strlen(strWord))
            end
            local strTurn = ""
            for x=1, strlen(strWord) do
              if (x == lngRepChar) then
               strTurn = strTurn..strsub(strWord, x, x)
              else
                strTurn = strTurn..strsub(strSolved, x, x)
              end
       end
            strSolved = strTurn
   end
            lngHinted = lngHinted + 1
       lngHintTimeCount = lngHintTimeCount + lngHintTime
            SendToPlayers("Hint: "..strupper(strSolved))
   end  
  end
end

function tokenize (inString,token)
  _WORDS = {}
  local matcher = "([^"..token.."]+)"
  gsub(inString, matcher, function (w) tinsert(_WORDS,w) end)
  return _WORDS
end

function ReloadQuestions()
  guessArray = {}
  lngGuessmax = 0
  local boolRestart = nil
  if (lngWord ~= 0) then
    SendToPlayers("Reloading questions, game will be shut down!")
    StopQuiz()
    boolRestart = 1
  end
  handle = openfile(strTrivFile, "r")
  if (handle) then
    local line = read(handle)
   
    while line do
      if ((line ~= "") and (strfind(line, strGSep, 1, plain))) then
        tinsert(guessArray, line)
        lngGuessmax = lngGuessmax + 1
      end
      line = read(handle)
    end
  closefile(handle)
  end
  if (lngGuessmax < 1) then
  guessArray = {
    "The finest car there is?"..strGSep.."Honda CRX del Sol",
    "Who brought you this TriviaBot"..strGSep.."Leon a.k.a. Don Leon"
  }
  lngGuessmax = 2
  end
  if (boolRestart) then
    SendToPlayers("Reloaded questions, game will be restarted! Current # of questions: "..lngGuessmax)
    StartQuiz()
  end
  strTrivFile = strDefTrivFile
end

function SaveScores(curUser)
  local handle = openfile(strTrivScoreFile, "w")
  for index, value in pointArray do
    write(handle,index..strGSep..value.."\r\n")
  end
  curUser:SendData(BotName,"Scores saved")
  closefile(handle)
end

function LoadScores(curUser)
  local handle = openfile(strTrivScoreFile, "r")
  if (handle) then
    local line = read(handle)
    while line do
      local arrTmp = tokenize(line, strGSep)
      if ((arrTmp[1] ~= nil) and (arrTmp[2] ~= nil)) then
        pointArray[arrTmp[1]] = tonumber(arrTmp[2])
      end
      line = read(handle)
    end
  if curUser ~= nil then  
  curUser:SendData(BotName,"Scores Loaded")
  end
  closefile(handle)
  end
end

function AddQuestion(curUser, sQuestion, sAnswer)
  local handle = openfile(strQFile, "a")
  write(handle,"Submitted by <"..curUser.sName.."> "..sQuestion..strGSep..sAnswer.."\r\n")
  SendToPlayers(curUser.sName.." Has added the question "..sQuestion)
  curUser:SendPM(BotName,curUser.sName.." you gave the answer as "..sAnswer)
  closefile(handle)
end

function SendToPlayers(msg)
  if ((lngMode > 2) or (lngMode < 0)) then
    lngMode = lngDefMode
  end
 
  if (lngMode == 0) then
    SendToAll(BotName, msg)
  elseif (lngMode == 1) then
    for index, value in playerArray do
      SendToNick(index, "<"..BotName.."> "..msg)
    end
  elseif (lngMode == 2) then
    for index, value in playerArray do
      SendPmToNick(index, BotName, msg)
    end
  end
end

function SendToOthers(msg, curUser)
  if ((lngMode == 2) and (boolShowGuessesInPM)) then
    for index, value in playerArray do
      if (index ~= curUser.sName) then
        SendPmToNick(index, BotName, "<"..curUser.sName.."> "..msg)
      end
    end
  end
end

function SendChatToOthers(chat, curUser)
  if (lngMode == 2) then
    for index, value in playerArray do
      if (index ~= curUser.sName) then
   SendToNick(index, "$To: "..index.." From: "..BotName.." $<"..curUser.sName.."> "..chat)
      end
    end
  end
end

function showHelp(curUser)
  curUser:SendData(" ")
  curUser:SendData(" "..BotVersion.." commands:")
  curUser:SendData(" ")
  if (lngMode == 0) then
    curUser:SendData("    "..BotVersion.." is set to be played in chat")
  elseif (lngMode == 1) then
    curUser:SendData("    "..BotVersion.." is set to be played in chat (hidden)")
  else
    curUser:SendData("    "..BotVersion.." is set to be played in PM")
  end
  curUser:SendData("    "..HelpTrigg.." - Displays this help")
  curUser:SendData("    "..JoinTrigg.." - Joins you to Trivia")
  curUser:SendData("    "..PartTrigg.." - Parts you from Trivia")
  curUser:SendData("    "..WordTrigg.." - Shows current word (answer)")
  curUser:SendData("    "..QuizTrigg.." - Shows current question")
  curUser:SendData("    "..PointTrigg.." - Shows your points only")
  curUser:SendData("    "..ScoreTrigg.." - Shows everyones score")
  curUser:SendData("    "..PlayerTrigg.." - Shows all players in current game")
  curUser:SendData("    "..HintTrigg.." - Reveals a char in current word")
  curUser:SendData("    "..TopTrigg.." - Shows top ten scores")
  curUser:SendData("    "..AddTrigg.." - Adds a question to the Trivia Questions File. Type the question, then separate the answer with a #")
  curUser:SendData("    EXAMPLE : tbquestion How fast does a bird fly?#Dont know")
  if (curUser.bOperator) then
    curUser:SendData(" ")
    curUser:SendData("    "..BotVersion.." Operator commands:")
    curUser:SendData("    "..StopTrigg.." - Stops the TriviaBot")
    curUser:SendData("    "..RestartTrigg.." - Restarts the bot, reseting all scores!")
    curUser:SendData("    "..QuestionsTrigg.." - Shows all questions in current game")
    curUser:SendData("    "..ReloadTrigg.." () - Reloads questions from "..strDefTrivFile)
    curUser:SendData("    "..ModeTrigg.." - To change mode of the game (0-2)!")
    curUser:SendData("    "..SaveTrigg.." - Saves scores into "..strTrivScoreFile)
    curUser:SendData("    "..LoadTrigg.." - Loads scores from "..strTrivScoreFile)
    curUser:SendData("    "..StartTrigg.." - Starts the TriviaBot and automatically adds you as a player")
    curUser:SendData(" ")
    curUser:SendData("    "..BotVersion.." Modes:")
    curUser:SendData("    ".."0 = Game is played in chat!")
    curUser:SendData("    ".."1 = Game is played in chat but Questions only show for players")
    curUser:SendData("    ".."2 = Game is played in PM with Players")
  end
end

function TopTen(user)
   local index = {n=0}
   foreach(pointArray, function(nick, score) tinsert(%index, nick) end)
   local func = function(a, b) return %pointArray[a] > %pointArray end
   sort(index, func)

   x = x or 10 if x > index.n then x = index.n end
   local result = "\r\nTop "..x.." Trivia scores in this hub..\r\n Pos\t Score\t\t Nick\t\r\n"
   for i = 1, x do result = result.."\r\n "..i..".\t"..pointArray[index].."\t\t"..index end
   msg = result
   SendToPlayers(msg)
end

and finally this is the end, but make sure that you leave one gap between each part when putting it in a lua file, thnx all hope this works for ya, and sorry about spamming the thread but i thought u might like it

lazyj189

is there a way that the script can have everyone play in main chat without having to log them in and weat up all that memory?  cause it'll log in everyone who connects which can get VERY big.
DivX Dominion Hub Owner
3 years running
DivX Dominion Hub

T???h?m?

HI again, well i actually have no probs with memory and i run it constantly getting redirects from other hubs! so i have users constantly connecting and never makes any differance
but if you would like the dat. trivia files i have to go with the script feel free, i will post them to u or you can download them from me the choise is yours, i might have other scripts here that you may like, lua scripts from the old forum, im a bit of a horder and cant bare to part with my luvly lua files haha, but i will share them if required!

let the dc spirit live on ;)

SteffJay

I need a trivia that anyone can start and auto login !!  Any ideas ????  TIA.
:))

L8rz

SteffJay

night_hawk

looking for a trivia that can run in main and have lots of questions i have a trivia but for some reason it takes for ever to save scores and the other verion i have just keeps saying the same questions over and over...

SMF spam blocked by CleanTalk