Advertisement
Math_TM

Quizz Time V1.0.5

Jul 23rd, 2016
672
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Lua 32.97 KB | None | 0 0
  1. --[          Quizz Time          ]--
  2. --[  Module crée par Athesdrake  ]--
  3. --[ Topic: https://goo.gl/UzCeQ1 ]--
  4.  
  5. separteur = ";" --Vous pouvez le remplacer par un autre caractère (spécial) si vous préférez, mais il ne dois pas se retrouver dans vos questions/réponses
  6.  
  7. function main()
  8.     --vars:
  9.         maitreDuJeu = "" -- Mettez entre les guillemets le pseudo (avec l'hashtag !!!) du maître du jeu. Si rien n'est mis, la personne qui lance le Lua sera maître du jeu.
  10. --[         NE MODIFIEZ PAS LA SUITE        ]--
  11.         maitreDuJeu = tfm.get.room.playerList[maitreDuJeu] and maitreDuJeu or ({pcall(0)})[2]:match('(.-)%.')
  12.         game = nil
  13.         gamedef = nil
  14.         nbrPl = 0
  15.     --ids:
  16.         idType = 1
  17.         idImport = 7
  18.         --One
  19.         idHaut = 2
  20.         idModifRep = 3
  21.         idModifQuest = 4
  22.         idValidQuestRep = 5
  23.         idMemo = 6
  24.         --Four
  25.         idPlus = 2
  26.         idQuest = 3
  27.         idRep = 4
  28.         idValider = 5
  29.         idPoints = 6
  30.         idGA = 7
  31.         idSettings = 8
  32.         idDelete = 9
  33.         idStart = 10
  34.         idQuestionnaire = 11
  35.         idChargement = 12
  36.         idJoueurs = 13
  37.     --tables:
  38.         T = {
  39.             one = {
  40.                 question = "",
  41.                 reponse = "",
  42.                 lastReponse = "",
  43.                 last = 0,
  44.                 players = {},
  45.                 egaux = {},
  46.                 gagnant = "",
  47.                 temps = 0,
  48.                 fin = false,
  49.                 questnum = 1,
  50.                 questTot = 0,
  51.                 validerQuest = false,
  52.                 validerRep = false,
  53.                 finale = false,
  54.                 points = 1,
  55.                 separator = (separateur or ";"),
  56.                 separation = ".-"..(separateur or ";")
  57.             },
  58.             four = {
  59.                 numRep = 1,
  60.                 goodAns = 1,
  61.                 points = 1,
  62.                 modif = false,
  63.                 numQuest = 1,
  64.                 start = false,
  65.                 realTime = false,
  66.                 repTemp = {},
  67.                 questions = {},
  68.                 player = {},
  69.                 scoreboard = {},
  70.                 scoreboardText = "",
  71.                 chosen = "</font><font face='Segoe MDL2 Assets' size='10' color='#565656'></font><font size='12' color='#565656'> ",
  72.                 noChosen = "</font><font face='Segoe MDL2 Assets' size='10' color='#565656'></font><font size='12' color='#565656'> ",
  73.                 separator = (separateur or ";"),
  74.                 separation = ".-"..(separateur or ";")
  75.             }
  76.         }
  77.     --sytème:
  78.         for k,v in pairs({"AutoNewGame", "AutoShaman", "AutoTimeLeft", "AfkDeath", "AutoScore", "MortCommand"})do
  79.             tfm.exec["disable"..v](true)
  80.         end
  81.         table.foreach(tfm.get.room.playerList, function(v) eventNewPlayer(v) end)
  82.         system.bindKeyboard(maitreDuJeu, 77, true, true)
  83. end
  84.  
  85. function eventNewPlayer(name)
  86.     ui.mapName()
  87.     if gamedef and quizz.newPlayer then
  88.         quizz.newPlayer(name)
  89.     elseif maitreDuJeu=="" then
  90.         system.bindKeyboard(name, 77, true, true)
  91.     end
  92. end
  93.  
  94. function eventPlayerLeft(name)
  95.     ui.mapName()
  96.     if gamedef and quizz.playerLeft then quizz.playerLeft(name) end
  97. end
  98.  
  99. function eventPlayerDied(name) tfm.exec.respawnPlayer(name) end
  100.  
  101. function eventKeyboard(name, key)
  102.     if key==77 then
  103.         if maitreDuJeu=="" then
  104.             table.foreach(tfm.get.room.playerList, function(v) system.bindKeyboard(v, 77, true, false) end)
  105.             maitreDuJeu = name
  106.             ui.popup(idType, "1 Question → 1 Réponse\t", "1 Question → 4 Réponses", "Quel mode de jeu choisis-tu ?", maitreDuJeu)
  107.         else
  108.             if game then
  109.                 gamedef = game
  110.                 play()
  111.                 for i=idType*100, idType*100+12 do ui.removeTextArea(i, name) end;ui.removeTextArea(idType, name)
  112.             else
  113.                 main()
  114.                 table.foreach(tfm.get.room.playerList, function(v) system.bindKeyboard(v, 77, true, false) end)
  115.                 maitreDuJeu = name
  116.                 ui.popup(idType, "1 Question → 1 Réponse\t", "1 Question → 4 Réponses", "Quel mode de jeu choisis-tu ?", maitreDuJeu)
  117.                 maitreDuJeu = name
  118.             end
  119.         end
  120.     end
  121. end
  122.  
  123. function eventLoop() if gamedef and quizz.loop then quizz.loop() end end
  124.  
  125. function eventPopupAnswer(id, name, ans) if gamedef and quizz.popupAns then quizz.popupAns(id, name, ans) end end
  126.  
  127. function eventNewGame() ui.mapName();if gamedef and quizz.newGame then quizz.newGame() end end
  128.  
  129. function eventTextAreaCallback(id, name, call)
  130.     if gamedef and quizz.callback then quizz.callback(id, name, call)
  131.     elseif id==idType*100+8 or id==idType*100+11 then
  132.         local arg, txt = {}, ""
  133.         for word in call:gmatch(".-;") do
  134.             table.insert(arg, word:sub(0, #word-1))
  135.         end
  136.         game = arg[1]
  137.         ui.popup(tonumber(arg[2]), arg[3], arg[4], arg[5], name, arg[1]=="one", arg[1]=="four")
  138.         system.bindKeyboard(name, 77, true, true)
  139.     end
  140. end
  141.  
  142. function eventChatCommand(name,cmd) if gamedef and quizz.command then quizz.command(name, cmd) end end
  143.  
  144. ui.popup = function(id, choice1, choice2, txt, name, bouton1, bouton2)
  145.     local hauteur, largeur = 150, 250
  146.     local x, y = (800-largeur)/2, (400-hauteur)/2
  147.     local txt, ch1, ch2 = "<p align='center'>\n<font size='20'>"..txt, "<p align='center'><a href='event:one;"..id..";"..choice1..";"..choice2..";"..txt..";'>"..(choice1), "<p align='center'><a href='event:four;"..id..";"..choice1..";"..choice2..";"..txt..";'>"..choice2
  148.     ui.addTextArea(id*100+0 ," ", name, x-8             , y-8         , largeur+16  , hauteur+16, 0x2D211A, 0x2D211A, 0.8, true)
  149.     ui.addTextArea(id*100+1 ," ", name, x-7             , y-7         , largeur+14  , hauteur+14, 0x986742, 0x986742, 1  , true)
  150.     ui.addTextArea(id*100+2 ," ", name, x-4             , y-4         , largeur+8   , hauteur+8 , 0x171311, 0x171311, 1  , true)
  151.     ui.addTextArea(id*100+3 ," ", name, x-3             , y-3         , largeur+6   , hauteur+6 , 0x0C191C, 0x0C191C, 1  , true)
  152.     ui.addTextArea(id*100+4 ," ", name, x-2             , y-2         , largeur+4   , hauteur+4 , 0x24474D, 0x24474D, 1  , true)
  153.     ui.addTextArea(id*100+5 ," ", name, x-1             , y-1         , largeur+2   , hauteur+2 , 0x183337, 0x183337, 1  , true)
  154.     ui.addTextArea(id       ,txt, name, x               , y           , largeur     , hauteur   , 0x122528, 0x122528, 1  , true)
  155.  
  156.     if bouton1 and bouton2 then
  157.         error("<R>You can't push the two bouton in the same time</R>")
  158.     elseif bouton1 or bouton2 then
  159.         ui.addTextArea(id*100+12, "<p align='center'>Appuies sur 'M' pour confirmer", name, x, y-4, largeur, nil, 0x1, 0x1, 0, true)
  160.     end
  161.     ui.addTextArea(id*100+6 ," ", name, x+largeur*3/20-1+tonumber(bouton1 and 2 or "0"), y*2-y*0.36-1+tonumber(bouton1 and 2 or "0"), largeur*7/10, 22        , 0x5D7D90, 0x5D7D90, 1  , true)
  162.     ui.addTextArea(id*100+7 ," ", name, x+largeur*3/20+1-tonumber(bouton1 and 2 or "0"), y*2-y*0.36+1-tonumber(bouton1 and 2 or "0"), largeur*7/10, 22        , 0x11171C, 0x11171C, 1  , true)
  163.     ui.addTextArea(id*100+8 ,ch1, name, x+largeur*3/20  , y*2-y*0.36  , largeur*7/10, 22        , 0x324650, 0x324650, 1  , true)
  164.  
  165.     ui.addTextArea(id*100+9 ," ", name, x+largeur*3/20-1+tonumber(bouton2 and 2 or "0"), y*2-y*0.04-1+tonumber(bouton2 and 2 or "0"), largeur*7/10, 22        , 0x5D7D90, 0x5D7D90, 1  , true)
  166.     ui.addTextArea(id*100+10," ", name, x+largeur*3/20+1-tonumber(bouton2 and 2 or "0"), y*2-y*0.04+1-tonumber(bouton2 and 2 or "0"), largeur*7/10, 22        , 0x11171C, 0x11171C, 1  , true)
  167.     ui.addTextArea(id*100+11,ch2, name, x+largeur*3/20  , y*2-y*0.04  , largeur*7/10, 22        , 0x324650, 0x324650, 1  , true)
  168. end
  169.  
  170. ui.mapName = function()
  171.     nbrPl = 0;table.foreach(tfm.get.room.playerList, function() nbrPl=nbrPl+1 end);ui.setMapName(string.format("<VP>Quizz Time<BL> | <N>Souris: <V>%d<BL> | <N>Maître du jeu: <V>%s<BL> | <N>Créateur: <BV>Athesdrake\n", nbrPl, (maitreDuJeu=="" and "/"or maitreDuJeu)))
  172. end
  173.  
  174. function play()
  175.     if (not game) then print("<R>WARNING</R>: le type de jeu n'est pas défini !");return end
  176.     quizz = jeu[game]()
  177.     quizz.__init__(true)
  178. end
  179.  
  180. jeu = {
  181.     one = function()
  182.         local self, var = {}, T.one
  183.            
  184.         self.__init__ = function(bool)
  185.             ui.addPopup(1, 2, "Met le nombre de questions à poser.", maitreDuJeu, 150, 150, nil, true)
  186.             T.one.players = {}
  187.         end
  188.         self.setup = function()
  189.             table.foreach(tfm.get.room.playerList, function(v) eventNewPlayer(v) end)
  190.             tfm.exec.newGame("@4474417")
  191.             self.ask()
  192.         end
  193.         self.ask = function()
  194.             T.one.points = 1
  195.             ui.addTextArea(idHaut, "<p align='center'>Met la question et la réponse pour la question n°"..tostring(var.questnum).."\nPoints pour la question: <a href='event:modifPoint1'><font color='#00FF00'>1</font></a> <a href='event:modifPoint2'><font color='#FF0000'>2</font></a> <a href='event:modifPoint3'><font color='#FF0000'>3</font></a></p>", maitreDuJeu, 10, 30, 770, 50, 0x1, 0x1, 0)
  196.             ui.addTextArea(idModifRep, "<a href='event:reponse'><font color='#FF0000'>Modifier la réponse</font></a>", maitreDuJeu, 430, 75, nil, nil, 0x1, 0x1, 0)
  197.             ui.addTextArea(idModifQuest, "<a href='event:question'><font color='#FF0000'>Modifier la question</font></a>", maitreDuJeu, 250, 75, nil, nil, 0x1, 0x1, 0)
  198.             ui.addTextArea(idValidQuestRep, "<font color='#FF0000'>Valider</font>", maitreDuJeu, 375, 75, nil, nil, 0x1, 0x1, 0)
  199.             ui.addTextArea(idImport, "<a href='event:import'>Importer</a>", maitreDuJeu, 737, 26, nil, nil, 0x4A4B4C, 0x1)
  200.         end
  201.         self.gg = function()
  202.             T.one.last = 0
  203.             T.one.egaux = {}
  204.             T.one.gagnant = ""
  205.             T.one.temps = os.time()+10000
  206.             T.one.fin = true
  207.         end
  208.         self.goodAns = function(ans)
  209.             if string.lower(ans):gsub("%é", "e"):gsub("%è", "e")==string.lower(T.one.reponsedef):gsub("%é", "e"):gsub("%è", "e") then
  210.                 return true;
  211.             else
  212.                 return false;
  213.             end
  214.         end
  215.         self.newPlayer = function(name)
  216.             ui.mapName()
  217.             tfm.exec.setPlayerScore(name, 0)
  218.             tfm.exec.respawnPlayer(name)
  219.             table.insert(T.one.players, name)
  220.         end
  221.         self.popupAns = function(id, name, answer)
  222.             if id==1 then
  223.                 if answer~="" then
  224.                     if tonumber(answer:match("%d+"))~=0 then
  225.                         T.one.questTot = tonumber(answer:match("%d+"))
  226.                         self.setup()   
  227.                         return
  228.                     end
  229.                 end
  230.                 ui.addPopup(1, 2, "Met le nombre de questions à poser.", maitreDuJeu, 150, 150, nil, true)
  231.             end
  232.             if id==idQuest then
  233.                 T.one.question = answer
  234.                 ui.addTextArea(idModifQuest, "<a href='event:question'><font color='#18CD30'>Modifier la question</font></a>", maitreDuJeu, 250, 75, nil, nil, 0x4A4B4C)
  235.                 T.one.validerQuest = true
  236.                 if T.one.validerRep then
  237.                     ui.addTextArea(idValidQuestRep, "<a href='event:valider'><font color='#18CD30'>Valider</font></a>", maitreDuJeu, 375, 75.5, nil, nil, 0x4A4B4C)
  238.                 end
  239.             end
  240.             if id==idRep then
  241.                 T.one.reponse = answer
  242.                 ui.addTextArea(idModifRep, "<a href='event:reponse'><font color='#18CD30'>Modifier la réponse</font></a>", maitreDuJeu, 431, 75, nil, nil, 0x4A4B4C)
  243.                 T.one.validerRep = true
  244.                 if T.one.validerQuest then
  245.                     ui.addTextArea(idValidQuestRep, "<a href='event:valider'><font color='#18CD30'>Valider</font></a>", maitreDuJeu, 375, 75.5, nil, nil, 0x4A4B4C)
  246.                 end
  247.             end
  248.             if id==idHaut then
  249.                 if self.goodAns(answer) then
  250.                     tfm.exec.setPlayerScore(name, tfm.get.room.playerList[name].score+T.one.points)
  251.                     T.one.lastReponse = var.reponsedef
  252.                     tfm.exec.displayParticle(15, tfm.get.room.playerList[name].x+5, tfm.get.room.playerList[name].y, 0, -1, 0, 0)
  253.                     T.one.reponsedef = 1
  254.                     T.one.pop = false
  255.                     T.one.validerQuest = false
  256.                     T.one.validerRep = false
  257.                     ui.addTextArea(idHaut, "<p align='center'><font color='#BABD2F'>"..name.." a trouvé la réponse ! <br>Il(Elle) a gagné "..T.one.points.." point"..(T.one.points==1 and "" or "s").." !</font>\nLa réponse était: "..T.one.lastReponse..".</p>", all, 10, 30, 770,50, 0x1, nil, 0)
  258.                     ui.removeTextArea(idMemo, maitreDuJeu)
  259.                     if tonumber(T.one.questTot)==tonumber(T.one.questnum) then
  260.                         self.gg()
  261.                     else
  262.                         T.one.questnum = T.one.questnum+1
  263.                         self.ask()
  264.                     end
  265.                 elseif T.one.pop then
  266.                     ui.addPopup(idHaut, 2, "<p align='center'><font color='#FF0000'>\[Question "..tostring(T.one.questnum).."/"..tostring(T.one.questTot).."\]</font><br><font color='#009D9D'>"..T.one.question.."</font><br><font color='#BABD2F'>Si tu trouve la réponse, tu gagneras "..tostring(T.one.points).." point ! </font></p>", name, 306, 100)
  267.                 end
  268.             end
  269.             if id==idImport then
  270.                 local tbl = {}
  271.                 for arg in answer:gmatch(var.separation) do
  272.                     table.insert(tbl, arg:sub(0, #arg-1))
  273.                 end
  274.                 if tbl[1] then
  275.                     self.popupAns(idQuest, name, tbl[1])
  276.                 end
  277.                 if tbl[2] then
  278.                     self.popupAns(idRep, name, tbl[2])
  279.                 end
  280.                 badPrint(tbl[3])
  281.                 if tbl[3] and (tonumber(tbl[3])==1 or tonumber(tbl[3])==2 or tonumber(tbl[3])==3) then
  282.                     self.callback(id, name, "modifPoint"..tbl[3])
  283.                 end
  284.             end
  285.         end
  286.         self.callback = function(id, name, call)
  287.             if call=="question" then
  288.                 ui.addPopup(idQuest, 2, "Entre la question.", maitreDuJeu, 307, 100, 200)
  289.             end
  290.             if call=="reponse" then
  291.                 ui.addPopup(idRep, 2, "Entre la réponse.", maitreDuJeu, 307, 100, 200)
  292.             end
  293.             if call=="valider" then
  294.                 for _,v in pairs({idHaut, idModifQuest, idModifRep, idValidQuestRep}) do
  295.                     ui.removeTextArea(v, maitreDuJeu)
  296.                 end
  297.                 if T.one.finale then
  298.                     for k,v in pairs(T.one.egaux) do
  299.                         ui.addPopup(idHaut, 2, "<p align='center'><font color='#FF0000'>\[Question "..tostring(T.one.questnum).."/"..tostring(T.one.questTot).."\]</font><br><font color='#009D9D'>"..T.one.question.."</font><br><font color='#BABD2F'>Si tu trouve la réponse, tu gagneras "..tostring(T.one.points).." point ! </font></p>", v, 306, 100)
  300.                     end
  301.                 else
  302.                     ui.addPopup(idHaut,2, "<p align='center'><font color='#FF0000'>\[Question "..tostring(T.one.questnum).."/"..tostring(T.one.questTot).."\]</font><br><font color='#009D9D'>"..T.one.question.."</font><br><font color='#BABD2F'>Si tu trouve la réponse, tu gagneras "..tostring(T.one.points).." point ! </font></p>", all, 306, 100)
  303.                     T.one.reponsedef = T.one.reponse
  304.                     T.one.pop = true
  305.                     print(table.concat({var.question, var.reponse, var.points}, ";")..";")
  306.                     ui.addTextArea(idMemo, "La réponse est: "..T.one.reponsedef, maitreDuJeu, 60, 375, nil, nil, 0x4A4B4C)
  307.                 end
  308.             end
  309.             if call:sub(0,10)=="modifPoint" then
  310.                 local n, red, green = tonumber(call:sub(11)), "FF0000", "00FF00"
  311.                 T.one.points = n
  312.                 ui.updateTextArea(idHaut, "<p align='center'>Met la question et la réponse pour la question n°"..tostring(T.one.questnum).."\nPoints pour la question: <a href='event:modifPoint1'><font color='#"..(n==1 and green or red).."'>1</font></a> <a href='event:modifPoint2'><font color='#"..(n==2 and green or red).."'>2</font></a> <a href='event:modifPoint3'><font color='#"..(n==3 and green or red).."'>3</font></a></p>", maitreDuJeu)
  313.             end
  314.             if call=="import" then
  315.                 ui.addPopup(idImport, 2, "Syntaxe: Question"..var.separator.."Réponse"..var.separator.."Points"..var.separator)
  316.             end
  317.         end
  318.         self.loop = function()
  319.             if T.one.fin then
  320.                 if T.one.temps<=os.time() then
  321.                     for pl in pairs(tfm.get.room.playerList) do
  322.                         if tfm.get.room.playerList[pl].score>T.one.last then
  323.                             T.one.last = tfm.get.room.playerList[pl].score
  324.                             T.one.gagnant = pl
  325.                             T.one.egaux = {pl}
  326.                         elseif tfm.get.room.playerList[pl].score==T.one.last then
  327.                             table.insert(T.one.egaux, pl)
  328.                         end
  329.                     end
  330.                     if #T.one.egaux>1 then
  331.                         T.one.questnum = "LAST"
  332.                         T.one.questTot = "LAST"
  333.                         ui.addTextArea(idHaut, "<a>Le quizz n'est pas terminé, plusieurs candidats ont le même score!\nUne dernière question va les départagés!", all, 10, 30, 770, 50, 0x1, 0x1, 0)
  334.                         T.one.finale = true
  335.                         self.ask()
  336.                     else
  337.                         T.one.fin = false
  338.                         ui.addTextArea(idHaut, "<p align='center'>Le quizz est fini!\n Le gagnant (ou la gagnante) est ...\n<font color='#FF0000'>"..T.one.gagnant.."</font> !</p>", all, 10, 30, 770, 50, 0x1, 0x1, 0)
  339.                     end
  340.                 end
  341.             end
  342.         end
  343.         self.newGame = function() if tfm.get.room.xmlMapInfo.mapCode==4474417 then tfm.exec.movePlayer(maitreDuJeu, 410, 255) end end
  344.  
  345.         return {
  346.             newPlayer = self.newPlayer,
  347.             popupAns = self.popupAns,
  348.             callback = self.callback,
  349.             loop = self.loop,
  350.             newGame = self.newGame,
  351.             __init__ = self.__init__
  352.         }
  353.     end,
  354.  
  355.     four = function()
  356.         self, var = {}, T.four
  357.         self.__init__ = function(bool)
  358.             if bool then
  359.                 table.foreach(tfm.get.room.playerList, function(v) eventNewPlayer(v) end)
  360.             end
  361.             --variables
  362.             var.numRep = 1
  363.             var.goodAns = 1
  364.             var.points = 1
  365.             var.modif = false
  366.             var.questTemp = nil
  367.             --tables
  368.             var.repTemp = {}
  369.             --ajouter une question
  370.             ui.addTextArea(idPlus*100, "", maitreDuJeu, 700, 28, 96, 33, 0x53453d, 0x53453d, 1, true)
  371.             ui.addTextArea(idPlus*100+1, "", maitreDuJeu, 704, 32, 88, 25, 0xf2e5c5, 0xcab47b, 1, true)
  372.             ui.addTextArea(idPlus, "<a href='event:start'><font size='24' color='#848484'></a><a href='event:import'></a></font><a href='event:add'><font size='25' color='#848484'><b>+</b></font></a><a href='event:settings'><font size='25' color='#848484'></font></a>", maitreDuJeu, 700, 27, nil, nil, nil, nil, 0, true)
  373.         end
  374.         self.questRep = function(name, nbr)
  375.             if var.player[name].joue then
  376.                 var.player[name].text = ""
  377.                 local text = "<p align='center'><font size='25' color='#565656'><i><u>Question "..nbr.."</u></i></font></p>\n\n\t<font size='12' color='#565656'>"..var.questions[nbr].quest.."\n\n<a href='event:rep1'>"..var.noChosen.."Réponse 1: "..var.questions[nbr].ans1.."</a>\n<a href='event:rep2'>"..var.noChosen.."Réponse 2: "..var.questions[nbr].ans2.."</a>\n<a href='event:rep3'>"..var.noChosen.."Réponse 3: "..var.questions[nbr].ans3.."</a>\n<a href='event:rep4'>"..var.noChosen.."Réponse 4: "..var.questions[nbr].ans4.."</a>\n\n<p align='center'><a href='event:valider'>Valider</a></p>"
  378.                 ui.addTextArea(idQuestionnaire*100, "", name, 144, 44, 512, 312, 0xf2e5c5, 0x53453d, 0.8, true)
  379.                 ui.addTextArea(idQuestionnaire*100+1, "", name, 146, 46, 508, 308, 0x53453d, 0x53453d, 1, true)
  380.                 ui.addTextArea(idQuestionnaire*100+2, "", name, 148, 48, 504, 304, 0x53453D, 0x53453D, 1, true)
  381.                 ui.addTextArea(idQuestionnaire, text, name, 150, 50, 500, 300, 0xf2e5c5, 0xcab47b, 1, true)
  382.                 ui.addTextArea(idChargement, "<font size='8'></font>", name, 149, 340, nil, 300, nil, nil, 0, true)
  383.             end
  384.         end
  385.         self.testForEnd = function()
  386.             if var.start then
  387.                 local nbr, i = 0, 0
  388.                 for pl,_ in pairs(var.player)do
  389.                     nbr = nbr + 1
  390.                     if var.player[pl].finish or var.player[pl].joue==false then
  391.                         i = i +1
  392.                     end
  393.                 end
  394.                 if i==nbr then
  395.                     for i=1, nbr do
  396.                         local last, temp = -1, {}
  397.                         for k,v in pairs(var.player) do
  398.                             if var.player[k].joue then
  399.                                 if var.player[k].points>last and var.player[k].test then
  400.                                     T.four.scoreboard[i] = {name = k, points = var.player[k].points}; last = var.player[k].points
  401.                                 end
  402.                             end
  403.                         end
  404.                         T.four.player[var.scoreboard[i].name].test = false
  405.                     end
  406.                     local text = "<p align='center'><font size='25' color='#565656'><u><b>Scoreboard</b></u></font></p>\n<font color='#565656' size='12'>"
  407.                     for k, v in pairs(var.scoreboard) do
  408.                         local espace = ""
  409.                         for i=1,20-#var.scoreboard[k].name do
  410.                             espace = espace.." "
  411.                         end
  412.                         text = text..k..". "..var.scoreboard[k].name..espace..var.scoreboard[k].points.." points\n"
  413.                     end
  414.                     var.scoreboardText = text
  415.                     ui.addTextArea(idQuestionnaire*100, "", nil, 144, 44, 512, 312, 0xf2e5c5, 0x53453d, 0.8, true)
  416.                     ui.addTextArea(idQuestionnaire*100+1, "", nil, 146, 46, 508, 308, 0x53453d, 0x53453d, 1, true)
  417.                     ui.addTextArea(idQuestionnaire*100+2, "", nil, 148, 48, 504, 304, 0x53453D, 0x53453D, 1, true)
  418.                     ui.addTextArea(idQuestionnaire, text, nil, 150, 50, 500, 300, 0xf2e5c5, 0xcab47b, 1, true)
  419.                     ui.addTextArea(idQuestionnaire*100+3, "<font size='25' color='#FF0000'><a href='event:fermer'><b>x</b></a></font>", nil, 630, 37, nil, nil, 0x0, 0x0, 0, true)
  420.                     var.start = false
  421.                 end
  422.             end
  423.         end
  424.         self.loop = function()
  425.             if var.start then
  426.                 for k, v in pairs(var.player) do
  427.                     local txt = var.player[k].text
  428.                     if (not var.player[k].finish) and var.player[k].joue then
  429.                         if  #txt<100 then
  430.                             local teinte = var.player[k].rgb + 10.24
  431.                             local rouge = 0
  432.                             local vert = 0
  433.                             local couleur = 0
  434.                             txt = txt.."__"
  435.                             var.player[k].text = txt
  436.                             var.player[k].rgb = teinte
  437.                             if #txt<=50 then
  438.                                 rouge = string.format("%i", teinte)
  439.                                 vert = 255
  440.                             else
  441.                                 rouge = 255
  442.                                 vert = string.format("%i", 1024 - teinte)
  443.                             end
  444.                             couleur = string.format("%X", rouge)..(#tostring(string.format("%X", vert))==1 and ("0"..string.format("%X", vert)) or string.format("%X", vert)).."00"
  445.                             var.player[k].couleur = couleur
  446.                             ui.addTextArea(idChargement*100, "", k, 149, 345, 502, 5, 0x53453d, 0x53453d, 1, true)
  447.                             ui.addTextArea(idChargement, "<font size='8' color='#"..couleur.."'>"..txt.."</font>", k, 145, 340, nil, nil, nil, nil, 0, true)
  448.                         elseif #txt==100 then
  449.                             if var.player[k].repChoose==0 then
  450.                                 var.player[k].repChoose = 5
  451.                             end
  452.                             eventTextAreaCallback(idQuestionnaire, k, "valider")
  453.                         end
  454.                     end
  455.                 end
  456.             end
  457.         end
  458.         self.callback = function(id, name, call)
  459.             if id==idPlus then
  460.                 if call=="add" then
  461.                     ui.addTextArea(idPlus, "<font size='25' color='#FF0000'><a><b>+</b></a></font><a href='event:settings'><font size='25' color='#848484'></font></a>", maitreDuJeu, 737, 27, nil, nil, nil, nil, 0, true)
  462.                     --ui.addPopup(idQuest, 2, "Question"..var.numQuest..":", maitreDuJeu, nil, nil, nil, true)
  463.                     ui.addTextArea(idQuest*100, "", maitreDuJeu, 144, 44, 512, 312, 0xf2e5c5, 0x53453d, 0.8, true)
  464.                     ui.addTextArea(idQuest*100+1, "", maitreDuJeu, 146, 46, 508, 308, 0x53453d, 0x53453d, 1, true)
  465.                     ui.addTextArea(idQuest*100+2, "", maitreDuJeu, 148, 48, 504, 304, 0x53453D, 0x53453D, 1, true)
  466.                     local bool = (var.questTemp and var.repTemp[1] and var.repTemp[2] and var.repTemp[3] and var.repTemp[4])
  467.                     ui.addTextArea(idQuest, "<p align='center'><font size='25' color='#565656'><i><u>Question "..var.numQuest.."</u></i></font></p>\n<a href='event:modifQuest'>"..(var.questTemp and var.questTemp or "Modifier la question").."</a>\n\n\n\t\t\t<font size='12' color='#565656'><a href='event:modifPoints'>Nombre de points :"..var.points.."</a>\n\n\n<a href='event:modifGA1'>"..(var.goodAns==1 and var.chosen or var.noChosen).." Réponse 1:</a><a href='event:modifRep1'> "..(var.repTemp[1] and var.repTemp[1] or "Modifier la réponse").."</a>\n\n<a href='event:modifGA2'>"..(var.goodAns==2 and var.chosen or var.noChosen).." Réponse 2:</a><a href='event:modifRep2'> "..(var.repTemp[2] and var.repTemp[2] or "Modifier la réponse").."</a>\n\n<a href='event:modifGA3'>"..(var.goodAns==3 and var.chosen or var.noChosen).." Réponse 3:</a><a href='event:rep3'> "..(var.repTemp[3] and var.repTemp[3] or "Modifier la réponse").."</a>\n\n<a href='event:modifGA4'>"..(var.goodAns==4 and var.chosen or var.noChosen).." Réponse 4: </a><a href='event:modifRep4'>"..(var.repTemp[4] and var.repTemp[4] or "Modifier la réponse").."</a>\n\n<p align='center'>"..(bool and "<a href='event:valider'>Valider</a>" or "").."</p>", maitreDuJeu, 150, 50, 500, 300, 0xf2e5c5, 0xcab47b, 1, true)
  468.                 elseif call=="start" then
  469.                     self.command(maitreDuJeu, call)
  470.                 elseif call=="settings" then
  471.                     ui.addTextArea(idSettings, "Affichage des points en temps réel: <font color='#FF0000'><a href='event:realTime'>non</a></font><br><a href='event:joueurs'>Modifier les personnes qui peuvent jouer</a></font><br><br><br><p align='center'><a href='event:valider'>Valider</a></p>", maitreDuJeu, 532, 73, 263, 74, 0x324650, 0x0, 1, true)
  472.                 elseif call=="import" then
  473.                     ui.addPopup(idImport, 2, "Syntaxe: Question"..var.separator.."Réponse1"..var.separator.."Réponse2"..var.separator.."Réponse3"..var.separator.."Réponse4"..var.separator.."Bonne réponse"..var.separator.."Points"..var.separator.."\n<R>254 caractères max", maitreDuJeu, 100, 100, 400)
  474.                 end
  475.             end
  476.             if id==idSettings then
  477.                 if call=="realTime" then
  478.                     var.realTime = (not var.realTime)
  479.                     ui.addTextArea(idSettings, "Affichage des points en temps réel: <font color='#"..(var.realTime and "00FF00" or "FF0000").."'><a href='event:realTime'>"..(var.realTime and "oui" or "non").."</a></font><br><a href='event:joueurs'>Modifier les personnes qui peuvent jouer</a></font><br><br><br><p align='center'><a href='event:valider'>Valider</a></p>", maitreDuJeu, 532, 73, 263, 82, nil, nil, 1, true)
  480.                 end
  481.             end
  482.             if call:sub(0,7)=="joueurs" then
  483.                 if call:sub(8)~="" then
  484.                     var.player[call:sub(8)].joue = (not var.player[call:sub(8)].joue)
  485.                 end
  486.                 local txt = ""
  487.                 for pl in pairs(tfm.get.room.playerList) do
  488.                     txt = txt.."<a href='event:joueurs"..pl.."'><font color='#"..(var.player[pl].joue and "00FF00" or "FF0000").."'>"..pl.."</font></a>\n"
  489.                 end
  490.                 txt = txt.."\n<p align='center'><a href='event:valider'>Valider</a></p>"
  491.                 ui.addTextArea(idJoueurs, txt, maitreDuJeu, 532, 160, nil, nil, nil, nil, 1, true)
  492.             end
  493.             if call:sub(0,5)=="modif" then
  494.                 if call:sub(6)=="Quest" then
  495.                     self.popupAns(idQuest, maitreDuJeu, "")
  496.                 elseif call:sub(6,8)=="Rep" then
  497.                     var.numRep = tonumber(call:sub(9))
  498.                     self.popupAns(idRep, maitreDuJeu, "")
  499.                 elseif call:sub(6,7)=="GA" then
  500.                     var.goodAns = tonumber(call:sub(8))
  501.                     self.callback(idPlus, maitreDuJeu, "add")
  502.                 elseif call:sub(6,11)=="Points" then
  503.                     if call:sub(12)=="" then
  504.                         ui.addTextArea(idPoints, "<a href='event:modifPoints1'>1</a>\n<a href='event:modifPoints2'>2</a>\n<a href='event:modifPoints3'>3</a>", maitreDuJeu, nil, 200, nil, nil, nil, nil, 1, true)
  505.                     else
  506.                         ui.removeTextArea(idPoints, maitreDuJeu)
  507.                         var.points = tonumber(call:sub(12))
  508.                         self.callback(idPlus, maitreDuJeu, "add")
  509.                     end
  510.                 end
  511.             end
  512.             if call=="valider" then
  513.                 if id==idQuest then
  514.                     var.questions[var.numQuest] = {quest = var.questTemp, ans1 = var.repTemp[1], ans2 = var.repTemp[2], ans3 = var.repTemp[3], ans4 = var.repTemp[4], gA = var.goodAns, points = var.points}
  515.                     print(table.concat({var.questTemp, var.repTemp[1], var.repTemp[2], var.repTemp[3], var.repTemp[4], var.goodAns, var.points}, ";")..";")
  516.                     var.numQuest = var.numQuest + 1
  517.                     for _,v in pairs({idQuest, idQuest*100, idQuest*100+1, idQuest*100+2}) do
  518.                         ui.removeTextArea(v, maitreDuJeu)
  519.                     end
  520.                     self.__init__()
  521.                 elseif id==idSettings or id==idJoueurs then
  522.                     ui.removeTextArea(id, maitreDuJeu)
  523.                 elseif id==idQuestionnaire then
  524.                     local nbr = var.player[name].repChoose
  525.                     if nbr~=0 then
  526.                         if nbr==var.questions[var.player[name].num].gA then
  527.                             if var.realTime then
  528.                                 tfm.exec.setPlayerScore(name, var.questions[var.player[name].num].points + var.player[name].points)
  529.                             end
  530.                             var.player[name].points = var.questions[var.player[name].num].points + var.player[name].points
  531.                         end
  532.                         if var.player[name].num==#var.questions then
  533.                             ui.removeTextArea(idQuestionnaire, name)
  534.                             ui.removeTextArea(idQuestionnaire*100, name)
  535.                             ui.removeTextArea(idQuestionnaire*100+1, name)
  536.                             ui.removeTextArea(idQuestionnaire*100+2, name)
  537.                             ui.removeTextArea(idChargement, name)
  538.                             ui.removeTextArea(idChargement*100, name)
  539.                             var.player[name].finish = true
  540.                             self.testForEnd()
  541.                         else
  542.                             var.player[name].num = var.player[name].num + 1
  543.                             self.questRep(name, var.player[name].num)
  544.                         end
  545.                     end
  546.                 end
  547.             end
  548.             if call=="delete" then
  549.                 ui.addPopup(idDelete, 1, "Supprimer définitivement cette question?", maitreDuJeu, nil, nil, nil, true)
  550.             end
  551.             if call:sub(0,3)=="rep" then
  552.                 local nbr = tonumber(call:sub(4))
  553.                 var.player[name].repChoose = nbr
  554.                 local text = "<p align='center'><font size='25' color='#565656'><i><u>Question "..var.player[name].num.."</u></i></font></p>\n\n\t<font size='12' color='#565656'>"..var.questions[var.player[name].num].quest.."\n\n<a href='event:rep1'>"..(nbr==1 and var.chosen or var.noChosen).."Réponse 1: "..var.questions[var.player[name].num].ans1.."</a>\n<a href='event:rep2'>"..(nbr==2 and var.chosen or var.noChosen).."Réponse 2: "..var.questions[var.player[name].num].ans2.."</a>\n<a href='event:rep3'>"..(nbr==3 and var.chosen or var.noChosen).."Réponse 3: "..var.questions[var.player[name].num].ans3.."</a>\n<a href='event:rep4'>"..(nbr==4 and var.chosen or var.noChosen).."Réponse 4: "..var.questions[var.player[name].num].ans4.."</a>\n\n<p align='center'><a href='event:valider'>Valider</a></p>"
  555.                 ui.addTextArea(idQuestionnaire, text, name, 150, 50, 500, 300, 0xf2e5c5, 0xcab47b, 1, true)
  556.                 ui.addTextArea(idChargement*100, "", name, 149, 345, 502, 5, 0x53453d, 0x53453d, 1, true)
  557.                 ui.addTextArea(idChargement, "<font size='8' color='#"..var.player[name].couleur.."'>"..var.player[name].text.."</font>", name, 145, 340, nil, nil, nil, nil, 0, true)
  558.             end
  559.             if call=="fermer" then
  560.                 ui.removeTextArea(idQuestionnaire, name)
  561.                 ui.removeTextArea(idQuestionnaire*100, name)
  562.                 ui.removeTextArea(idQuestionnaire*100+1, name)
  563.                 ui.removeTextArea(idQuestionnaire*100+2, name)
  564.                 ui.removeTextArea(idQuestionnaire*100+3, name)
  565.                 ui.addTextArea(idPlus*100, "", name, 737, 28, 56, 33, 0x53453d, 0x53453d, 1, true)
  566.                 ui.addTextArea(idPlus*100+1, "", name, 741, 32, 48, 25, 0xf2e5c5, 0xcab47b, 1, true)
  567.                 ui.addTextArea(idPlus, "<a href='event:scoreboard'><font size='18' color='#848484'>Score</font></a>", name, 737, 27, nil, nil, nil, nil, 0, true)
  568.             end
  569.             if call=="scoreboard" then
  570.                 ui.removeTextArea(idPlus, name)
  571.                 ui.removeTextArea(idPlus*100, name)
  572.                 ui.removeTextArea(idPlus*100+1, name)
  573.                 ui.addTextArea(idQuestionnaire*100, "", name, 144, 44, 512, 312, 0xf2e5c5, 0x53453d, 0.8, true)
  574.                 ui.addTextArea(idQuestionnaire*100+1, "", name, 146, 46, 508, 308, 0x53453d, 0x53453d, 1, true)
  575.                 ui.addTextArea(idQuestionnaire*100+2, "", name, 148, 48, 504, 304, 0x53453D, 0x53453D, 1, true)
  576.                 ui.addTextArea(idQuestionnaire, var.scoreboardText, name, 150, 50, 500, 300, 0xf2e5c5, 0xcab47b, 1, true)
  577.                 ui.addTextArea(idQuestionnaire*100+3, "<font size='25' color='#FF0000'><a href='event:fermer'><b>x</b></a></font>", name, 630, 37, nil, nil, 0x0, 0x0, 0, true)
  578.             end
  579.         end
  580.         self.popupAns = function(id, name, answer, bool)
  581.             if id==idQuest then
  582.                 if answer=="" then
  583.                     ui.addPopup(idQuest, 2, "Question"..var.numQuest..":", maitreDuJeu, nil, nil, nil, true)
  584.                 else
  585.                     var.questTemp = answer
  586.                     if var.modif then
  587.                         eventPopupAnswer(idRep, maitreDuJeu, var.repTemp[var.numRep])
  588.                     elseif (not bool) then
  589.                         ui.addPopup(idRep, 2, "Réponse 1:", maitreDuJeu, nil, nil, nil, true)
  590.                     end
  591.                 end
  592.             end
  593.             if id==idRep then
  594.                 if answer=="" then
  595.                     ui.addPopup(idRep, 2, "Réponse "..var.numRep..":", maitreDuJeu, nil, nil, nil, true)
  596.                 else
  597.                     var.repTemp[var.numRep] = answer
  598.                     if var.numRep==4  or var.modif then
  599.                         var.modif = true--ui.addTextArea(idValider, "Question "..var.numQuest..": <a href='event:modifQuest'>"..var.questTemp.."</a>\nRéponse 1: <a href='event:modifRep1'>"..var.repTemp[1].."</a>\nRéponse 2: <a href='event:modifRep2'>"..var.repTemp[2].."</a>\nRéponse 3: <a href='event:modifRep3'>"..var.repTemp[3].."</a>\nRéponse 4: <a href='event:modifRep4'>"..var.repTemp[4].."</a>\nRéponse correcte: <a href='event:modifGA'>"..var.goodAns.."</a>\nNombre de points: <a href='event:modifPoints'>"..var.points.."</a>\n<p align='center'><a href='event:delete'>Supprimer la question</a>\t<a href='event:valider'>Valider</a></p>", maitreDuJeu, nil, nil, nil, nil, nil, nil, 1, true)
  600.                         self.callback(idPlus, maitreDuJeu, "add")
  601.                     else
  602.                         var.numRep = var.numRep + 1
  603.                         if (not bool) then
  604.                             ui.addPopup(idRep, 2, "Réponse "..var.numRep..":", maitreDuJeu, nil, nil, nil, true)
  605.                         end
  606.                     end
  607.                 end
  608.             end
  609.             if id==idDelete and answer then
  610.                 ui.removeTextArea(idValider, maitreDuJeu)
  611.                 self.__init__()
  612.             end
  613.             if id==idStart and answer=="yes" then
  614.                 var.start = true
  615.                 for pl in pairs(tfm.get.room.playerList) do
  616.                     self.questRep(pl, 1)
  617.                 end
  618.             end
  619.             if id==idImport then
  620.                 local tbl = {}
  621.                 var.numRep = 1
  622.                 for arg in answer:gmatch(var.separation) do
  623.                     table.insert(tbl, arg:sub(0, #arg-1))
  624.                 end
  625.                 if tbl[1] then self.popupAns(idQuest, name, tbl[1], true) end
  626.                 if tbl[2] then self.popupAns(idRep, name, tbl[2], true) end
  627.                 if tbl[3] then self.popupAns(idRep, name, tbl[3], true) end
  628.                 if tbl[4] then self.popupAns(idRep, name, tbl[4], true) end
  629.                 if tbl[5] then self.popupAns(idRep, name, tbl[5], true) end
  630.                 if tbl[6] and (tbl[6]=="1" or tbl[6]=="2" or tbl[6]=="3" or tbl[6]=="4") then self.callback(id, name, "modifGA"..tbl[6]) end
  631.                 if tbl[7] and (tbl[7]=="1" or tbl[7]=="2" or tbl[7]=="3") then self.callback(id, name, "modifPoints"..tbl[7]) end
  632.             end
  633.         end
  634.         self.command = function(name, cmd)
  635.             if name==maitreDuJeu then
  636.                 if cmd=="start" then ui.addPopup(idStart, 1, "<p align='center'>Commencer ?</p>", maitreDuJeu, 300, 167.5, 200, true) end
  637.             end
  638.         end
  639.         self.newPlayer = function(name)
  640.             T.four.player[name] = {temps = os.time(), num = 1, points = 0, repChoose = 0, finish = false, test = true, text = "", rgb = 0, couleur = "00FF00", joue = true}
  641.             if name==maitreDuJeu then self.__init__() end
  642.             if var.start then self.questRep(name, 1) end
  643.         end
  644.         self.playerLeft = function(name)
  645.             if var.start then
  646.                 var.player[name].joue = false
  647.                 self.testForEnd()
  648.             end
  649.         end
  650.  
  651.         return {
  652.             newPlayer = self.newPlayer,
  653.             popupAns = self.popupAns,
  654.             callback = self.callback,
  655.             loop = self.loop,
  656.             playerLeft = self.playerLeft,
  657.             command = self.command,
  658.             __init__ = self.__init__
  659.         }
  660.     end
  661. }
  662.  
  663. badPrint = print;print = function( ... ) badPrint(table.concat({...}, ",")) end
  664.  
  665. main()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement