// Script devine - Nombre de 1 à 99 var nombre; // nombre a deviner (pour le jeu devine) var dev_score[50], dev_pseudo$[50]; var limite_dev_semaine$; //______________________________________________________________________ func fq$ () // changer la couleur et le style d'écriture { return chr$(1,0,0,128) // couleur bleue claire (voir chapitre macros) + chr$(2,5,4,0); // font "Courier New", style gras } func red$ () { return chr$(1,255,0,0); // couleur rouge } func green$ () { return chr$(1,0,255,0); // couleur vert } func blue$ () { return chr$(1,0,0,255); // couleur bleue } //______________________________________________________________________ proc welcome_dev () { print (blue$()+"Bienvenue au jeu *DEVINE* Tapes "+red$()+"!devine start"+blue$()+" pour jouer à devine, "+red$()+"!devine score"+blue$()+" pour voir les Scores de devine"); } //______________________________________________________________________ proc compute_newdev_limite () { var wd; wd = weekday(now$()); limite_dev_semaine$ = add_date$ (left$(now$(),11) + "05:00:00", (8-wd) * 86400 ); store ("dev-semaine", limite_dev_semaine$); } // charger scores dans le tableau proc charger_dev_scores () { var i; for (i=0; i<=50; i++) { dev_score[i] = val("0" + fetch$ ("dev-score" + str$(i))); dev_pseudo$[i] = fetch$ ("dev-pseud" + str$(i)); } limite_dev_semaine$ = fetch$ ("dev-semaine"); if (len(limite_dev_semaine$) == 0) compute_newdev_limite (); } // enregistrer un score dans la database */ proc cumul_dev_score (i, point, pseudo$) { store ("dev-score" + str$(i), str$(point)); store ("dev-pseud" + str$(i), pseudo$); } // effacer les scores proc effacer_dev_scores () { var i; for (i=0; i<=50; i++) { dev_score[i] = 0; dev_pseudo$[i] = ""; cumul_dev_score (i, 0, ""); } } // ajoute des points dans le tableau dev_score[] proc ajoute_dev_points (userid$) { var i, j, u$; // cherche le userid$ dans le tableau dev_pseudo$[] // ou bien cherche une case vide dans le tableau for (i=0; i<50; i++) { if (dev_pseudo$[i] == userid$ || dev_pseudo$[i] == "") break; } // remplir la case et augmenter le score dev_pseudo$[i] = userid$; dev_score[i]++; // ajouter 1 point au score cumul_dev_score (i, dev_score[i], dev_pseudo$[i]); // remonter le joueur dans le tableau des scores // s'il a dépassé des joueurs avant lui while (i > 0 && dev_score[i] > dev_score[i-1]) { j = dev_score[i]; dev_score[i] = dev_score[i-1]; dev_score[i-1] = j; u$ = dev_pseudo$[i]; dev_pseudo$[i] = dev_pseudo$[i-1]; dev_pseudo$[i-1] = u$; cumul_dev_score (i, dev_score[i], dev_pseudo$[i]); cumul_dev_score (i-1, dev_score[i-1], dev_pseudo$[i-1]); i--; } } // imprime les 9 premiers scores du tableau // ainsi que le userid$ même s'il est après les 9 premiers proc affiche_dev_scores (userid$) { var i, score$; print (fq$() + "SCORES DEVINE"); print (fq$() + "*************"); for (i=0; i<50; i++) { if (dev_pseudo$[i] == "") break; if (i < 9 || userid$ == dev_pseudo$[i]) { score$ = str$(dev_score[i]); if (len(score$) < 4) score$ = dup$(" ",4-len(score$)) + score$; print (fq$() + str$(i+1) + ". " + score$ + " " + dev_pseudo$[i]); } } print (fq$() + "*************"); } //______________________________________________________________________ proc demarre_devine () { print ("devine un nombre de 1 à 99"); nombre = random (1,99); if (now$() >= limite_dev_semaine$) { print ("effacement des scores de la semaine ..."); effacer_dev_scores (); compute_newdev_limite (); } } proc joue_devine (dev_word$,userid$) { var last, first, n; // enlève les blancs à la fin last = len(dev_word$); while (last >= 1 && asc(dev_word$,last) == 32) last--; // collecte tous les chiffres à la fin first = last; while (first >= 1 && asc(dev_word$,first) >= 48 && asc(dev_word$,first) <= 57) first--; if (first == last) // pas de chiffres return; n = val (mid$(dev_word$,first+1,last-first)); if (n < nombre) print (blue$ ()+"ha non, "+red$ ()+"trop petit !"); else if (n > nombre) print (blue$ ()+"hé non, "+red$ ()+"trop grand !"); else { print (green$ ()+"Bravo "+userid$+", c'était bien " +red$ ()+ str$(nombre)); ajoute_dev_points (userid$); nombre = 0; } } // nettoye la ligne line$ en remplaçant toutes les icones par des blancs, // en convertissant tous les mots en minuscules, // et en entourant tous les mots par des blancs. func clean$ (line$) { var last, r$, i, c; i = 1; last = len(line$); while (i <= last) { c = asc (line$,i); if (c <= 9) // séquence spéciale { i += 4; // passer 4 caractères if (c > 5) i += 4; c = 32; // remplacer par un blanc } else // caractère normal { if (c >= 65 && c <= 90) // si entre A et Z c += 32; // convertir en minuscules i++; } r$ = r$ + chr$(c); } return r$ + " "; } proc event (session_key, userid$, sex$, has_photo, age, is_away, admin, cam_on, is_bot, toc_capab, signature$, action, is_myself, line$) { var dev_word$; dev_word$ = clean$(line$); // nettoye la ligne pour pouvoir y chercher des mots if (action == 128) // arrivée en salle { welcome_dev(); } if (is_bot) // c'est moi le BOT { charger_dev_scores (); if (pos (dev_word$, " !devine reset ")) // contient !devine reset (avec 2 blancs autour, attention !) { effacer_dev_scores (); } } if (action == 0) // ligne de texte normale { if (!is_myself) // ce n'est pas moi-même { if (pos (dev_word$, " !devine start " )) // contient !devine start(avec 2 blancs autour, attention !) demarre_devine (); else if (pos (dev_word$, " !devine score ")) // contient !devine score (avec 2 blancs autour, attention !) affiche_dev_scores (userid$); if (nombre > 0) // le jeu devine est actif joue_devine (dev_word$, userid$); } } }