Archives pour l'étiquette lua

L’OS 3.2 pour TI-Nspire est arrivé !

Salut à tous,

Bonnes nouvelles pour les programmeurs Lua Nspire, TI mis à jour le système d’exploitation Nspire en version 3.2, qui est une grande mise à jour pour la programmation Lua!

En effet, il apporte, en outre de quelques modifications de l’API, 2 choses principales:

– Un SDK intégré (Software Development Kit) pour le Logiciel Npire, qui vous permet de programmer en Lua directement dans le logiciel. Il dispose d’une certaine auto-complétion, coloration syntaxique, un débogueur, etc 🙂

Screenshot of the 3.2 Lua Script Editor
Lua Script Editor

– Un moteur physique … Oui! Vous allez maintenant être en mesure de créer des simulations et des jeux basées sur de la physique, sans avoir à tout coder à partir de zéro!

Nous vous encourageons à consulter le Wiki (nous sommes en train d’y détailler les nouvelles fonctions) qui dispose d’une page qui résume tous les changements de l’API en version 3.2, ainsi que la documentation officielle de TI.

« Have fun » !

Leçon 1 : Premiers pas avec le Lua sur TI-Nspire

Aujourd’hui, Inspired-Lua vous propose une traduction et adaptation du guide de Steve Arnold que vous pouvez retrouver en cliquant ici. Depuis l’OS 3.0, les Ti-Nspire possèdent une nouvelle fonctionnalité en matière de programmation : le Lua. Ce dernier est un langage de programmation à la fois moderne et rapide. Les scripts écrits en Lua avec un simple éditeur de texte peuvent être convertis en .tns (format des documents TI-Nspire) à l’aide de TI-Nspire Scripting Tool . De tels scripts donnent de nouvelles possibilités étonnantes et puissantes pour la création de documents TI-Nspire afin d’apprendre ou d’enseigner.

Avec un peu d’expérience, les programmeurs de Lua peuvent créer d’incroyables programmes, auxquels l’imagination est la seule limite. A titre d’exemple, voici un tableau périodique des éléments réalisé par l’équipe de TI-Planet. Comme vous pouvez le voir, les possibilités sont énormes. Toutefois, même les débutants peuvent profiter des particularités offertes par le Lua dans des conditions plus limitées mais qui restent quand même puissantes. Ce tutoriel pour débutants offre de bonnes bases grâce auxquelles les élèves comme les enseignants pourront commencer à créer leurs propres documents !

L’objectif ici sera de commencer le Lua en affichant du texte. Des graphiques et des images dynamiques suivront plus tard.

Leçon 1.1: Premiers pas avec le Lua sur TI-Nspire

Pour cette première leçon, nous utiliserons le programme Oclua (On Calc lua) développé par Olivier Armand. Commencez par télécharger l’archive Oclua d’après ce lien . Ensuite, décompressez l’archive et transférez le fichier .tns sur votre calculatrice.

Gif Oclua
Oclua fonctionne à la fois sur la calculatrice et sur le logiciel TI-Nspire. Pour commencer à utiliser Oclua, ouvrez tout d’abord le fichier, puis créer une nouvelle application dans le classeur. (CTRL+I) Choisissez l’éditeur mathématique. Vous pourrez écrire le code en Lua ici. Ensuite, pour l’exécuter, vous n’aurez qu’à copier ce code et à le coller dans le premier onglet. (CTRL+A pour tout sélectionner, CTRL+C pour le copier, et enfin CTRL+V pour le coller) Rapide et facile à prendre en main, Oclua est idéal pour commencer à utiliser le Lua. Cette procédure est expliqué à travers l’image en gif ci-contre (Ignorez les deux lignes horizontales, elles sont dues au logiciel utilisé pour enregistrer l’animation – elles n’apparaîtront pas sur votre version du document). Toutefois, nous verrons par la suite que de meilleures solutions existent.

Les choses sérieuses commencent : nous allons créer votre première fonction en Lua ! Mais ne vous inquiétez pas, rien de bien compliqué. Tout d’abord, nous allons apprendre comment afficher du texte en Lua. Insérez une page éditeur mathématique comme nous l’avons vue. Recopiez-y le code ci-dessous

function on.paint(gc)
  gc:drawString("hello world", 0, 20)
end

Notez que l’indentation (ajout d’espace/tabulation dans des scripts) n’est pas du tout obligatoire elle permet juste de mieux se retrouver dans de longues lignes de codes. (Ici elle n’a que peu d’intérêt mais il faut mieux prendre ces habitudes dès le départ)
Le Lua est un langage sensible à la casse c’est-à-dire que vous devez écrire exactement les fonctions comme montrées ici. Dans cet exemple, tout est en minuscules, excepté le « S » de String.
Vous devriez voir le texte « hello world » écrit en haut à gauche de la page. Voyons ce que l’on peut apprendre de cet exemple :

  • La structure pour définir une fonction est la même que dans beaucoup de langages.
function nom(argument)
  quelques instructions
end
  • Dans notre exemple, nous avons utilisé une fonction standard du Lua appelée « on.paint ». Vous la rencontrerez dans la plupart (si ce n’est tous) les scripts en Lua. Lorsque vous utilisez cette fonction, elle affiche le texte sur l’écran.
  • « gc » signifie « graphics context ». (Contexte graphique :P) Il est utilisé quand des éléments graphiques de n’importe quel type sont employés. Vous pouvez voir dans cette fonction, l’unique ligne de code est définie par ce terme gc. Ne vous inquiétez pas, vous vous y habituerez vite !
  • La ligne d’instruction de cette fonction est assez explicative : gc:drawString (“hello world”,0,20). Dans le contexte graphique (gc) on va afficher (draw, dessiner) la chaîne de caractère (String) qui est “hello world” à la position (0,20) sur la fenêtre
  • Il faut savoir que le système de coordonnées à pour origine le coin en haut à gauche de l’écran. Ainsi, les coordonnées ne doivent pas être négative pour afficher correctement du contenu graphique. Dans notre exemple, le point choisi est (0,20). Si l’ordonnée était inférieure, le texte serait coupé.
Vous devriez prendre quelques minutes pour découvrir cette première fonction et appliquer ce que vous venez d’apprendre. Essayez de déplacer le texte afin de comprendre le système de coordonnées. Essayez de centrer votre texte. Vous en apprendrez ainsi plus sur les dimensions de l’écran.
Cependant, vous verrez plus tard qu’un texte centré sur une plateforme (calculatrice, ordinateur) n’est pas forcément adapté à une autre. Mais alors, comment faire ? Nous allons voir cela dans la suite de notre cours ! En attendant, amusez-vous bien ! 🙂

Mais pourquoi ?

Il est peut-être temps de s’arrêter un instant et de se demander – Pourquoi s’ennuyer à faire cela ? Il y a d’autres façons beaucoup simples pour afficher du texte à l’écran.
Deux propriétés très importantes d’une fenêtre en Lua sur TI-Nspire, par opposition à une fenêtre classique dans l’éditeur mathématique :
  • Cliquez sur n’importe quelle fenêtre en Lua. Déplacez-la, essayez de l’éditer. C’est impossible. Le texte que vous affichez ne peut pas être édité par l’utilisateur du document. Dans l’éditeur mathématique, l’utilisateur peut bien sur changer – et en effet détruire – tout ce que l’auteur a pris le temps de faire. En plus, comme on peut le faire dans l’éditeur, le texte affiché peut être à la fois dynamique et statique. Donc on peut facilement créer de puissants outils d’apprentissage tout comme on peut le faire avec l’éditeur, mais dans un environnement plus sécurisé.
  • Dans la seconde partie de cette leçon, vous apprendrez à contrôler la taille de la police, la couleur et le style, et comment facilement centrer le texte sur une ligne, et même au centre de la fenêtre. En Lua, on a un contrôle significatif de la façon dont le texte est affiché – bien plus qu’en utilisant l’éditeur. En terme de couleurs, vous avez accés à des millions de couleurs !

Leçon 1.2: Un peu plus intéressant ?

Bon, retour au travail. Prêt pour la suite ?
Si vous n’êtes pas sur la page 1.2 d’Oclua, retournez-y. Nous allons ajouter quelques lignes à notre script on.paint.
function on.paint(gc)
  gc:setFont("sansserif", "b", 12)
  gc:setColorRGB(158, 5, 8)
  gc:drawString("Ceci est mon texte", 20, 20)
end
A nouveau, étudiez ces quelques lignes – essayez de modifier les différentes valeurs. Vous allez vite vous rendre compte que setFont possède trois entrées :
  • la famille : « serif » ou « sansserif »
  • le style : « b » pour bold (gras) ; « r » pour regular (normal) ; « i » pour italic (italique) ; « bi » pour bold italic (gras et italique)
  • la taille

setColorRGBpermet d’accéder simplement à une multitude de couleurs : RGB signifie Red (rouge ; 255,0,0) Green (vert ; 0,255,0) Blue (bleu ; 0,0,255). Il y a de nombreuses couleurs entre ces valeurs, ou vous pouvez accéder à la liste en ligne ou juste télécharger le PDF que j’utilise. Mes couleurs fétiches sont burgundy (158, 5, 8 )> et navy (20, 20, 138), et qui vont très bien ensemble ! C’est vraiment mieux qu’une simple palette de 9 à 15 couleurs actuellement disponible sur TI-Npire !Si vous n’êtes pas perdu en lisant ce cours, c’est que vous êtes sur la bonne voie ! Nous allons finir cette leçon par une notion importante en Lua : centrer le texte. Nous en profiterons pour introduire les variables locales et globales.

Le Lua dispose de toutes sortes de commandes très utiles, comme platform.window:heigth() et platform.window:width().

Comme vous pouvez le deviner, ces commandes permettent de récupérer les valeurs actuelles de la fenêtre. Ainsi, platform.window:heigth() permet de connaître la hauteur de l’écran tandis que platform.window:width(). permet d’en connaître la largeur. Une nouvelle fois, faites bien attention aux majuscules et aux espaces ! Ici, tout est en minuscules.
Si on stock ces valeurs dans des variables, que nous appellerons w et h (pour width et height respectivement), nous pourrons les réutiliser hors de la fonction et dans un script plus grand. Mais nous aurons l’occasion d’y revenir un peu plus tard.

Voici deux nouvelles fonctions tout aussi importantes : getStringHeight et getStringWidth. Comme leurs noms l’indiquent, elle permettent de déterminer la largeur et la hauteur d’une chaîne de caractères.

function on.paint(gc)
  local h=platform.window:height()
  local w=platform.window:width()
  gc:setFont("sansserif", "b", 12)
  gc:setColorRGB(158, 5, 8)
  local sw = gc:getStringWidth("Ceci est mon texte")
  local sh = gc:getStringHeight("Ceci est mon texte")
  gc:drawString("Ceci est mon texte", w/2 - sw/2, h/2 + sh/2)
end
On commence par définir les dimensions de la fenêtre avec w et h. On peut aussi obtenir les dimensions de la chaîne de caractères
Maintenant, pour centrer la chaîne :
  • Horizontalement : on prend le centre de la fenêtre (w/2) puis on recule de la moitié de la largeur de la chaîne de caractères (w/2 – sw/2).
  • Veritcalement : on suit la même procédure, à une différence près : verticalement, on compte à l’envers en Lua : plus on va bas, plus le nombre est grand ; plus on va haut, plus il est faible ! (h/2 + sh/2)

Et maintenant ?

C’est tout pour cette leçon – à vous de jouer !
Pourquoi ne pas essayer d’aligner votre texte à droite ? Jetez un œil au centrage que nous venons de réaliser et inspirez-vous-en pour aligner le texte à droite et à gauche.
Et pour le placer en haut ou en bas ? Comment feriez vous ? Essayez différentes couleurs !Dans la prochaine leçon, nous apprendrons à donner vie à notre texte et à utiliser une table pour organiser plusieurs lignes de texte de façon structurée sur votre page !

Démarrer en Lua sur Nspire

Bonjour et bienvenue sur la page d’accueil des tutoriaux !

Vous avez plusieurs possibilités pour apprendre la programmation Lua sur TI-Nspire.

Inspired-Lua contient un certain nombre de tutoriaux, mais pointe aussi vers d’autres sites (comme celui de Steve Arnold).

Voici quelques liens utiles :

Nous vous conseillons de commencer… par le début, et pour cela, veuillez suivre ce lien pour des tutoriaux de A-à-Z.

Ce lien pointe vers une page où sont rédigées toute une série d’excellents tutoriaux mais en Anglais. Inspired-Lua a commencé à en traduire en Français (voir le lien quelques lignes plus tard sur les tutoriaux de « pratique »)

Si vous voulez vous plonger dans les tutoriaux théoriques sur la programmation Nspire Lua, clique ici !

Sinon, si vous voulez directement commencer par des tutoriaux de pratique, en apprenant par l’exemple, c’est par là que ça se passe.

 

Bonne programmation Lua sur TI-Nspire !

Comment avoir une petite fonction « input » bien sympa en Lua…

(improved version of Nick Steen’s website’s example)

Vous pourriez être très surpris par le fait qu’il n’y ait pas de manière native d’avoir une fonction d’entrée clavier (input) texte sur l’API Lua Nspire. En effet, c’est un peu bizarre car ce sont souvent utilisés pour de nombreux types de programmes (que ce soit dans les jeux pour taper le nom d’utilisateur, ou d’autres applications pour entrer des données utilisateur, etc.)

Quoi qu’il en soit, ne vous inquiétez pas, vous pouvez le programmer vous-même avec un petit bout de code à ajouter à votre script! Il capture en fait les touches appuyées avec la fonction on.charIn , et les enregistre ce que l’utilisateur tape dans une chaîne (concaténation). Il suffit ensuite d’afficher cette chaîne à l’écran, et c’est tout !

Si vous voulez que l’utilisateur sera en mesure de supprimer quelques lettres, il suffit d’ajouter du code pour la fonction on.backspaceKey, et c’est tout!

Dans l’exemple ci-dessous, nous avons fixé une limite de caractères à 25, mais vous pouvez ajuster cette valeur vous-même.

Bref, voilà le code dans sa totalité :

input = ""   
 
function on.paint(gc)
    gc:drawString(input,5,5,"top")  -- display string
end
 
function on.charIn(char)
    if string.len(input) <= 25 then   -- limit of 25 chars
        input = input..char   -- concatenate
        platform.window:invalidate()   --screen refreh
    end
end
 
function on.backspaceKey()
    input = string.usub(input,0,-2)  -- deleting last char
    platform.window:invalidate()  
end

Fin du concours Nspire Lua

Bonjour à tous et à toutes,

Il y a quelques temps déjà, nous vous annoncions un concours de programmation sur Nspire en Lua à grande échelle puisque la somme totale des lots s’estimait environ à 750 € , avec notamment 3 magnifiques TI-Nspire CX CAS à gagner !

Le concours est désormais terminé !

C’est avec donc pas moins de 14 programmes Lua que nous avons terminé ce concours, et nous pensons que c’est une belle réussite pour un langage si « nouveau » sur cette calculatrice !

Nous tenons donc à remercier vivement tous les participants, quels que soient leurs résultats !

Les juges (Levak, Critor et moi-même) allons procéder à l’analyse de tout ce que vous nous avez fait, dans les prochains jours, et les résultats devraient être là prochainement :)

En attendant, voici la liste (juste Nom + Screenshot) des participations reçues.
(certains ne sont pas disponibles en téléchargement pour le moment, mais celà ne saurait tarder….)

Nous rappelons que ces programmes, sauf mention contraire sur la page de téléchargement, sont soumis à la licence CC BY-SA 2.0. Ne pas respecter les termes de cette licence entraînera des conséquences légales. Les auteurs des programmes respectifs peuvent changer cette attribution à leur souhait en nous contactant par e-mail, bien évidemment.

Jeux: 7


Bobby Carrot – – – – Loïc P.

Image
Labyrinthe – – – – David L.


Reversi (Othello) – – – – Deep Thought.

Image
MasterMind – – – – Nick V.


TI-Cran – – – – Julien R.


Nspired Phoenix Lua – – – – Florent D.


Tactical Wars CX – – – – Rehn C.

Mathématiques: 4


TabVar 3 – – – – JayTe.


LuaCS – – – – Jonathan L.


LogoMagic – – – – Jim B.


ABA Logique – – – – Loulou54.

Physique-Chimie: 3


Planétarium – – – – Bastien V.

Image
FormulaOne – – – – Naji A.

Image
Formules de Chimie – – – – Paul J.

Bref, en attendant les résultats officiels de ce concours, testez ces programmes et faites-nous part de vos commentaires !

Encore une fois Bravo à tous, et que les meilleurs gagnent !

TabVar v3, l’ultime programme de tableau de variations !

Bonjour à tous,

Aujourd’hui est un grand jour !

En effet, pour les possesseurs de Nspire avec un OS >= 3, JayTe nous a concocté un programme combinant la simplicité du TI-Basic à la puissance de Lua, pour notre grand plaisir…
Je vous présente … TabVar 3 !
Oui, le fameux programme qui étudie toutes vos fonctions en profondeur et vous trace un magnifique tableau de variations !

« Ben ou mais ca existe, non ? », me direz-vous.
Certes. L’idée n’est pas nouvelle.
Chronologiquement, on a en effet eu celui d’Adriweb, le premier pour Nspire, et par la suite, TabVar v1 et v2, par JayTe, dont le moteur est basé à l’origine sur le programme d’Adriweb, mais le tout a été poussé bien plus loin en intégrant beaucoup plus de fonctions plus poussées d’analyse de fonctions.

Ce programme dépasse largement tous ses concurrents, et autres .tns pouvant espérer le rivaliser.

La grande particularité de cette version est que ce programme en exclusivité sur TIPlanet profite et exploite vraiment les fonctionnalités que propose l’OS 3 en intégrant un script dynamique Lua pour un affichage optimal du tableau de variations, qui devient pour le coup totalement graphique. Plus besoin d’astuces [foireuses] pour afficher correctement un tableau de variation digne de ce nom…

Nous n’allons pas vous faire plus attendre pour vous faire découvrir une copie d’écran de TabVar :
Image
et le détail des calculs préliminaires (clic pour l’image en grand) :
Image

A ce jour, vous ne trouverez pas plus fiable au niveau du moteur utilisé (même si rien n’est parfait, bien sûr ; les fonctions de grande complexité peuvent être incomplètement étudiées…)
Vous pouvez par exemple, tester des fonctions assez complexes, comme des polynomiales, rationelles, avec ou sans asymptote(s) et avec ou sans comportements étranges aux limites…
Bref, pour un lycéen (ou autre !), c’est plus que parfait :-)

Lien de téléchargement : http://tiplanet.org/forum/archives_voir.php?id=3751

Merci Qui ?
Merci JayTe !

N’oubliez-pas qu’à ce jour, c’est ce programme qui est de loin le plus fiable et le plus agréable à la lecture pour les études de fonctions..
Une petite capture d’écran pour marquer le coup ?
(Exemple de TabVar v3 contre un concurrent pour la même fonction f(x)=1/x)
Image
Hé oui, pour ne pas avoir une mauvaise note, ne faites pas confiance aux imitations !

TI-Planet, LE site de référence pour trouver tout ce dont vous avez besoin et ce dont vous rêvez!

Tableau d’avancement (Nspire Lua)

Décidément, nous vous gâtons.
Encore une exclusivité TI-Planet aujourd’hui !

Notre cher membre Adriweb, après avoir sorti son programme de tableau d’avancement pour TI-83+/84+, nous a programmé hier son équivalent Nspire ! C’est une grande première sur cette calculatrice, d’autant plus que celui-ci profite, comme TabVar 3, de la nouveauté principale qu’offre l’OS 3, le Lua.

Le document se compose en fait de deux parties :
-> Vous lancez le programme (Basic) avancement() et suivez les étapes pour donner les informations sur la réaction chimique à étudier.
-> Allez dans l’onglet suivant et admirez le tableau d’avancement tracé en détail et en couleur (Nspire CX uniquement) !

Un petit screenshot ?

Image

Ce programme est open-source et sous licence Creative Commons 2.0 BY-SA.

Lien du topic sur TIPlanet (téléchargement ….) : http://tiplanet.org/forum/viewtopic.php?f=43&t=8385

TI-Planet : le site qui crée des programmes intelligents !

Au passage, joyeux halloween ;-)

Grand Concours TI-Nspire Lua 2011

Le concours est mainteannt  terminé, merci à tous d’avoir participé !

 

Les sites Inspired-Lua et TI-Planet, en partenariat avec R. JARRETY (où vous pouvez commander des calculatrices à prix spéciaux TI-Planet), organisent un nouveau concours d’une ampleur encore jamais atteinte !

Tout d’abord, pour la première fois dans l’histoire de notre site, le concours franchit les frontières de l’hexagone et vous pouvez tous participer, quelque soit votre pays de résidence !

Ensuite, la dotation est absolument sans précédent: 3 TI-Nspire CX CAS, pour trois fois plus de chances de gagner!

Non, vous ne rêvez pas !

Il vous suffit donc de créer un programme Lua pour TI-Nspire, en rapport avec l’une des 3 catégories suivantes:

  • Mathématiques
  • Physique-Chimie
  • Jeux

Vous aurez donc besoin d’un OS ou logiciel Nspire 3.0 ou ultérieur.

La seule condition est que Votre programme soit utilisable pour un utilisateur francophone. Si votre programme affiche du texte, l’utilisation isolée de mots courants en langue étrangère est tolérée.

Pour participer, il vous suffit tout simplement d’envoyer un email à info @ tiplanet . org d’ici le 7 novembre 2011 à 23h59 GMT+2 (heure d’été française):

  • vos nom et prénoms
  • votre adresse complète
  • une adresse email valide
  • la catégorie choisie
  • une archive en fichier attaché

L’archive attachée devra contenir:

  • le programme au format ‘tns’
  • le code source
  • une description dans un fichier ‘lisezmoi.txt’
  • éventuellement, une documentation (format et contenu libres)

Vous ne pouvez soumettre qu’un seul programme pour le concours, et donc vous ne pouvez participer que dans une seule catégorie. Choisissez-la bien !

Toutefois, il vous est parfaitement possible de mettre à jour un programme déjà soumis ou même de changer de programme ou de catégorie en envoyant tout simplement un nouvel email de participation, puisque seul le dernier reçu sera pris en compte.

Bonne chance à tous!

Liens:

Règle Officielles
Inspired-Lua (documentation & Lua ressources)
TI-Planet (aide & échanges)
Générateur Lua, « Luna »
OS 3.0.2 pour TI-Nspire
OS 3.0.2 pour TI-Nspire CAS
OS 3.0.2 pour TI-Nspire CX
OS 3.0.2 pour TI-Nspire CX CAS
TI-Nspire 3.0.2 Software « student » pour PC (free for 30 days)
TI-Nspire 3.0.2 Software « student » pour Mac (free for 30 days)
TI-Nspire 3.0.2 Software « teacher » pour PC (free for 90 days)
TI-Nspire 3.0.2 Software « teacher » pour Mac (free for 90 days)

Enregistre un record (ou autre) sans possibilité de triche !

Dans ce tutoriel nous allons voir une notion assez intéressante du framework de la TI-Nspire en Lua : enregistrer et restaurer des données dans un format quelconque directement en Lua ce qui permet par exemple de se souvenir d’un record pour un jeu, ou une quelconque configuration pour un programme plus évolué.

Mise en situation : Nous venons de réaliser un jeu génial. Nous voulons que nos camarades puissent se mesurer à notre record, mais comment faire ?

La première méthode consiste à utiliser l’API var et d’appeler var.store(). Ainsi, on sauvegarde le record dans le classeur comme variable globale.

Votre système de record est en place ! Hum, pas si vite : un de vos camarades a réussi à faire un score de 10 000 000 ! Comment est-ce possible ?? Il a simplement édité la variable qui vous sert de record. Etant donné qu’elle est accessible via une application Calcul et modifiable à souhait cela n’est pas compliqué !

La deuxième méthode utilise la première, à ceci près que nous disposons de math.eval() qui nous permet d’exécuter n’importe quelle commande du TI-Basic, comme la commande Lock par exemple. Ainsi, si nous faisons :

math.eval("Unlock highscore")
var.store("highscore", highscore)
math.eval("Lock highscore")

Notre variable est protégée contre l’écriture. Seulement, étant donné que Lock est une commande présente dans le TI-Basic, elle peut très bien être exécutée à l’extérieur du programme Lua. Donc cela ne fait que repousser le problème.

Et si nous nous tournions vers le Lua en lui même ? En effet, il existe var.monitor() qui permet de poser une sentinelle qui vérifie si la variable pointée va être changée. Si oui, alors l’évènement on.varChange() est appelé. L’intérêt d’utiliser cette technique est qu’elle permet de contrôler la modification de la variable. En effet :

function on.create()
  if not var.recall("highscore") then
    highscore = 0
    var.store("highscore", highscore)
  end
  var.monitor("highscore")
end
 
function on.varChange(list)
  for k, v in pairs(list) do
    if k == "highscore" then
      if var.recall(k) ~= highscore then
        return 1 -- it is an external change, block modifications
      else
        return 0 -- it is an internal change, allow modifications
      end
    end
  end
  return 0 -- allow modifications of other monitored variables if any
end

Ce code empêchera toute modification extérieure de record par un message d’erreur :

Changement non autorisé : Entrée non valide.

Seulement voilà … C’est une méthode lourde et répétitive si on doit le faire pour plusieurs données, telle des données de configuration … C’est là que l’on regarde la documentation et qu’on aperçoit deux évènements qui pourraient paraître banals à première vue : on.save() et on.restore(). En réalité, ce couple d’évènement gère ce que nous essayons de faire depuis le début !

En effet, lorsque le widget est fermé (on ferme le classeur, on copie/coupe le widget), l’évènement on.save() est appelé. on.save() doit être écrit de telle sorte qu’il puisse renvoyer une donnée quelconque (booléen, nombre, chaîne de caractères, table etc …).
Lorsque le widget sera ouvert la prochaine fois (on ouvre le classeur, on colle le widget), l’évènement on.restore() sera appelé avec en paramètre cette donnée que nous avions renvoyé depuis on.save() !

Ainsi, plus de prise de tête :

function on.save()
  return highscore
end
 
function on.restore(data)
  if type(data) == "number" then
    highscore = data
  end
end
 
function on.create()
  if not highscore then
    highscore = 0 -- first time we initialize highscore
  end
end