var listeQS = ["Pour vous, Scol c'est ..." [("keski scol c'lui-là !"::"1"::nil) ("du pain béni pour vos neurones"::"4"::nil) ("un programme pour draguer sur le net"::"3"::nil) ("du chinois !"::"0"::nil) ("passer de bons moments avec des gens du bout du monde"::"4"::nil) ]]:: ["Vous faîtes partie ... " [("du 2e âge"::"2"::nil) ("du club de bridge de la commune"::"1"::nil) ("des heureux possesseurs de la Carte Vermeil"::"3"::nil) ("d'un 'Rotary Club'"::"0"::nil) ("de la Compagnie des 'Joyeux Turlurons'"::"3"::nil) ]]:: ["La discussion sur le tchat dérape et devient 'hard'. Vous ..." [("quittez le tchat et envoyez un message aux administrateurs du site"::"0"::nil) ("rougissez devant votre écran"::"3"::nil) ("restez connecté et envoyez un message aux adminsitrateurs du site"::"0"::nil) ("en rajoutez une couche supplémentaire"::"3"::nil) ("ajoutez une bonne dose d'humour à la discussion"::"5"::nil) ]]:: ["'ObRegisterAction', c'est une ..." [("insulte"::"1"::nil) ("fonction permettant d'attribuer du code aux actions prédéfinies"::"5"::nil) ("partie d'un programme écrit en Scol, je pense"::"2"::nil) ("fonction réseau permettant de séparer les actions GET et POST d'une requête"::"0"::nil) ("... m'en fout ! Tschinnnn !"::"4"::nil) ]]:: ["Vous venez d'entrer dans un bar. Vous ..." [("faîtes demi-tour, c'est pas votre salon de thé habituel"::"0"::nil) ("vous asseyez et commandez"::"2"::nil) ("y restez l'après-midi et même la soirée si affinité"::"3"::nil) ("demandez au serveur 'Comment vas-tu ... yau de poêle ?!"::"0"::nil) ("vous concentrez pour tenter de cacher votre état lamentable"::"1"::nil) ]]:: ["Votre ami de toujours se décommande au dernier moment. Vous ..." [("partez rejoindre Clara-Charlotte à Cabourg"::"0"::nil) ("l'engueulez comme du poisson pourri"::"0"::nil) ("appelez des Scoliens pour une soirée 'live'"::"5"::nil) ("vous connectez pour délirer avec d'autres Scoliens"::"5"::nil) ("vous connectez pour confesser à tous votre tristesse"::"1"::nil) ]]:: ["Si on vous dit 'Cryo', vous pensez à ..." [("Cryopolis"::"5"::nil) ("une boite de jeux disparue"::"3"::nil) ("une marque de pneu pour votre Bentley"::"0"::nil) ("un célèbre chanteur mexicain des années 30"::"1"::nil) ("au dernier tube de Simon et Garfunkel"::"2"::nil) ]]:: ["Au bar, vous commandez ..." [("une bière"::"3"::nil) ("un Périer citron"::"1"::nil) ("un mojito"::"3"::nil) ("un jus de tomate, régime oblige"::"0"::nil) ("un rhum blanc"::"3"::nil) ]]:: ["Lorsque vous venez de vous connecter, vous dîtes ..." [("Bonjour !"::"1"::nil) ("Yop yop !"::"1"::nil) ("Bonsoir !"::"1"::nil) (" "::"0"::nil) ("asv svp !"::"0"::nil) ]]:: ["Pour vous votre travail, c'est ..." [("une insulte à l'espèce humaine"::"2"::nil) ("du 24/24 et 7j/7"::"0"::nil) ("35h par semaine et pas une heure de plus"::"2"::nil) ("se connecter à un site Scol"::"5"::nil) ("un moyen de gagner sa vie"::"1"::nil) ]]:: ["L'amitié, c'est ..." [("un bon moyen pour arriver aux galipettes sur le tapis du salon"::"0"::nil) ("inconnu"::"0"::nil) ("trop compliquée pour répondre"::"1"::nil) ("un bon moyen de boire à l'oeil"::"0"::nil) ("ce que je ressens pour tout le monde"::"0"::nil) ]]:: ["Votre clavier est ..." [("toujours propre"::"0"::nil) ("toujours sale"::"4"::nil) ("un clouvion"::"2"::nil) ("blanc avec les lettres en noir"::"1"::nil) ("posé sur vos genoux"::"1"::nil) ]]:: ["Vous rencontrez des Scoliens en live ..." [("souvent"::"4"::nil) ("parfois"::"2"::nil) ("pas encore"::"1"::nil) ("en aucune façon"::"0"::nil) ("dès que je pourrais"::"2"::nil) ]]:: ["Vous avez un avatar ..." [("par défaut"::"0"::nil) ("choisi parmi une des listes proposées"::"1"::nil) ("déniché sur le web"::"2"::nil) ("crée expres"::"4"::nil) ("unique"::"2"::nil) ]]:: ["Combien de pseudos différents avez-vous ?" [("un seul"::"0"::nil) ("deux ou trois"::"1"::nil) ("plus de dix"::"5"::nil) ("au moins cinq"::"3"::nil) ("je ne sais plus"::"4"::nil) ]]:: ["Combien de temps passez-vous sur des sites Scol ?" [("Trop de temps !"::"2"::nil) ("environ une à deux heures par jour"::"4"::nil) ("moins d'une heure par jour"::"1"::nil) ("quelques heures par semaines"::"1"::nil) ("quand j'y pense ..."::"0"::nil) ]]:: ["Vous connaissez Scol depuis ..." [("moins d'un mois"::"0"::nil) ("quelques mois"::"1"::nil) ("un an"::"2"::nil) ("deux ou trois ans"::"4"::nil) ("je suis né dedans"::"5"::nil) ]]:: ["Pour vous, Dieu, c'est ..." [("un imposteur"::"0"::nil) ("iri"::"5"::nil) ("le Créateur de l'Univers"::"0"::nil) ("un être immatériel"::"0"::nil) ("un non-sens"::"0"::nil) ]]:: ["Qu'est-ce-qui est carré, qui a le dos rouge et qui monte et qui descend ?" [("une libellule dans un couvent"::"1"::nil) ("un ascenceur"::"0"::nil) ("la bourse de Paris"::"0"::nil) ("un avatar"::"3"::nil) ("une araignée tricotant sa toile au plafond"::"1"::nil) ]]:: ["L''Être surnaturel' hante le site de ..." [("Cryopolis en figeant les Scoliens sur place"::"0"::nil) ("Sign en invitant les Scoliens dans sa demeure virtuelle"::"0"::nil) ("Alien, la huitième passagère"::"1"::nil) ("Cryopolis en envoyant les Scoliens en cage"::"3"::nil) ("l'association 'Scol-Technologies'"::"0"::nil) ]]:: ["Un visiteur vous lance un pic. Vous ..." [("répondez du tac au tac et applatissez ce malapris"::"3"::nil) ("vous déconnectez du site en jurant"::"0"::nil) ("répondez de manière sybilline"::"5"::nil) ("lui rendez la monnaie de sa pièce"::"5"::nil) ("vous effondrez en pleurant sur le lit"::"0"::nil) ]]:: ["Avec mon Scol Voy@ger, je sais ..." [("configurer mon proxy"::"5"::nil) ("ajouter un site dans mes favoris"::"2"::nil) ("me mettre en affichage SOFTWARE"::"2"::nil) ("rien faire du tout"::"0"::nil) ("faire les trois pemières options ci-dessus"::"5"::nil) ]]:: ["Sur les sites Scol, vous êtes plutôt ..." [("paranoïaque"::"1"::nil) ("schizophrène"::"1"::nil) ("timide"::"1"::nil) ("mégalomane"::"2"::nil) ("rien de tout cela"::"0"::nil) ]]:: ["Les 'Rendez-vous des Scolm@sters en Herbe' étaient animés par ..." [("Minablor"::"0"::nil) ("Inox"::"0"::nil) ("Neo-FX"::"5"::nil) ("Mykee"::"0"::nil) ("Bob le Gob"::"0"::nil) ]]:: ["Le site 'Sexypolis' a ..." [("été en ligne voici quelques années"::"5"::nil) ("été un projet avorté de Cryo-Networks"::"0"::nil) ("jamais existé"::"0"::nil) ("été inclus dans Cryopolis"::"0"::nil) ("été l'ancêtre de la Hell's Gate"::"0"::nil) ]]:: ["Un avatar surgit sur votre gauche. Vous ... " [("accélerez pour semer l'intrus"::"0"::nil) ("lui foncez dedans pour lui montrer qui est le maître"::"0"::nil) ("entamez une bonne bavette avec lui"::"3"::nil) ("vous l'ignorez complétement"::"0"::nil) ("faites connaissance"::"3"::nil) ]]:: ["L'adresse de Cryopolis est ..." [("scol://scol.cryopolis.com:cryopolis"::"1"::nil) ("scol://www.cryopolis.com:Cryopolis"::"0"::nil) ("scol://scol.cryopolis.com:Cryopolis"::"4"::nil) ("scol://scol.cryopolis.com/cryopolis"::"0"::nil) ("scol://www.cryopolis.com/Cryopolis"::"0"::nil) ]]:: nil;; /* [[S [[S r1] [S r1] [S r1] [S r1] [S r1]]] r1] */ var resultat = "Vous êtes un véritable Scolien, d'une trempe rare\nune entité qui hante les mondes virtuels\nnuit et jour et qui connait toutes leurs fééries\nsur le bout des doigts !\n\nVous êtes le Dark Vador du Scol Obscur !\nBravo !!":: "La perfection devient accessible !\nEncore un effort et vous obtiendrez le titre ultime !\n\nEn attendant, vous faîtes déjà partie du gratin.\nVous n'avez pas encore eu votre article dans 'Galag' ? ;-)":: "Vous avez encore plein de choses à apprendre\nmais vous êtes sur la bonne voie.\n\nContinuez et observez bien les Anciens ! :D":: "Vous débutez, ça se voit !!\nEt si ce n'est pas le cas, inquiétez-vous !\n\nVous auriez pu faire pire mais ce n'est pas une raison\n\nUn peu de nerf nan mais, vous êtes mou !!":: "Hmmm ... Que dire sinon que ce score est véritablement\n\LAMENTABLE ?\n\nVous n'avez vraiment rien de commun\navec un Scolien sinon la prétention !\n\nVous ne pouvez que faire mieux !":: nil;; typeof color = S;; typeof clis = [[CLIENT I I] r1];; /* client n°_question score */ typeof lScore = [S r1];; defcom Cerror = error I;; defcom CnewQuestion = newQuestion S S S S S S;; defcom Cfinal = final I S;; /* misc */ fun bycli(elt, p)= let elt -> [cli _ _] in cli == p;; fun searchbycli2(list, cli)= if list == nil then 0 else let list -> [[c n _] suite] in if cli == c then n else searchbycli2 suite cli;; fun searchLogin(list, s)= if list == nil then 1 else let list -> [elt suite] in let strextr elt -> [[login _] _] in if !strcmp login s then 0 else searchLogin suite s;; fun loginExist(cli)= let _DMSgetLogin cli -> login in searchLogin lScore login;; fun replaceClis(list, cli, line, score)= if list == nil then (_DMSsend this cli Cerror [2]; list) else let list -> [[c n s] suite] in if c == cli then [cli line score]::suite else [c n s]::replaceClis suite cli line score;; fun getScore(line, rep)= let nth_list listeQS line -> [_ [a b c d e]] in if rep == 0 then atoi nth_list a 1 else if rep == 1 then atoi nth_list b 1 else if rep == 2 then atoi nth_list c 1 else if rep == 3 then atoi nth_list d 1 else if rep == 4 then atoi nth_list e 1 else 0;; fun getScoreCli(list, cli)= if list == nil then (_DMSsend this cli Cerror [3]; 0) else let _DMSgetLogin cli -> login in let list -> [elt suite] in let strextr elt -> [[name l] _] in if !strcmp login name then let l -> [score _] in atoi score else getScoreCli suite cli;; fun chgLogin(list, login, old)= if list == nil then list else let list -> [elt suite] in let strextr elt -> [[name [n _]] _] in if !strcmp name old then set lScore = replace_in_list lScore elt strcat strcat login " " n else chgLogin suite login old;; /* dms */ fun logout(cli)= let search_in_list clis @bycli cli -> c in if c == nil then 0 else (set clis = remove_from_list clis c; 0);; fun chLogin(from, user, action, param, others, tag) = let _DMSgetLogin UtoC user -> login in chgLogin lScore login param; 0;; fun cbDestroy (from, user, action, param, others, tag) = let UtoC user -> cli in (_DMSdelClientDMI this cli; logout cli); 0;; fun cbShow(from, user, action, param, others, tag) = if (_DMSclientAlive UtoC user) then (_DMScreateClientDMI this UtoC user color; 0) else 0;; fun IniDMI (file)= let strextr _getpack _checkpack file -> l in set color = getInfo l "color"; set lScore = lineextr _getpack _checkpack "dms/games/quotientScolien/score.txt"; _DMSregister this @logout nil nil; _DMSdefineActions this ["show" @cbShow]:: ["destroy" @cbDestroy]:: ["!chgLogin" @chLogin]:: nil; 0;; fun sendQuestion(cli, line)= if line != (sizelist listeQS) then let nth_list listeQS line -> [question reponse] in let reponse -> [r1 r2 r3 r4 r5] in let r1 -> [s1 _] in let r2 -> [s2 _] in let r3 -> [s3 _] in let r4 -> [s4 _] in let r5 -> [s5 _] in _DMSsend this cli CnewQuestion [question s1 s2 s3 s4 s5] else let getScoreCli lScore cli -> score in let if score >= 106 then nth_list resultat 0 else if score > 85 then nth_list resultat 1 else if score > 65 then nth_list resultat 2 else if score > 38 then nth_list resultat 3 else nth_list resultat 4 -> res in (_createpack linebuild lScore _getmodifypack "dms/games/quotientScolien/score.txt"; _DMSsend this cli Cfinal [score res]);; fun createScore(cli, score)= let loginExist cli -> r in if r then (set lScore = (strcat (_DMSgetLogin cli) " 0")::lScore; sendQuestion DMSsender 0) else _DMSsend this cli Cerror [1];; fun updateScore(list, cli, score, line)= if list == nil then _DMSsend this cli Cerror [0] else let _DMSgetLogin cli -> login in let list -> [elt suite] in let strextr elt -> [[l [n _]] _] in if !strcmp l login then let score + atoi n -> new in (set lScore = replace_in_list lScore elt strcat strcat login " " itoa new; /* _showconsole; _fooSList lScore; */ 0) else updateScore suite cli score line;; fun __suite(val, rep)= if val then let search_in_list clis @bycli DMSsender -> c in if c == nil then (set clis = [DMSsender 0 0]::clis; createScore DMSsender 0; 0) else let searchbycli2 clis DMSsender -> n in let getScore n rep -> score in (set clis = replaceClis clis DMSsender n+1 score; updateScore lScore DMSsender score n+1; sendQuestion DMSsender n+1; 0) else (cbDestroy nil CtoU DMSsender nil nil nil nil; 0);;