AIInfo
Framework NonIA

Page principale NonIA

Développement

Jalons de développement
Suggestion de changements de l'API

Programmation de l'IA

Documentation API
Introduction
Fichier info.nut
Fichier main.nut
Principes de base
Détermination de chemin routier
Détermination de chemin ferroviaire
Sauver / Charger des données
Choses à savoir
Squirrel
Page principale
Erreurs courantes
Listes
Traiter les erreurs OTTD
Tramways
Bibliothèques de l'IA
Forum
FAQ du forum
Comportement de l'IA

IAs

TestAI
WrightAI
Convoy
Voir le forum
Voir BaNaNaS
Tous les articles de la catégorie NonIA

info.nut est un fichier dans lequel vous indiquez à NonIA les informations de base de votre IA. C'était auparavant une partie de main.nut, mais il en a été séparé pour rendre le débogage plus facile (voyez ici si les détails vous intéressent).

Voyez aussi http://noai.openttd.org/docs/trunk/classAIInfo.html pour une meilleure description (et plus complète) de toutes les fonctions.

Contents

Structure de info.nut

La structure interne de info.nut est très simple et suit un modèle présenté ci-dessous.

class MaNouvelleIA extends AIInfo 
{
  function GetAuthor()        { return "Auteur d'IA débutant"; }
  function GetName()          { return "MaNouvelleIA"; }
  function GetDescription()   { return "Un exemple d'IA en suivant le tutoriel du wiki"; }
  function GetVersion()       { return 1; }
  function MinVersionToLoad() { return 1; }
  function GetDate()          { return "17/03/2007"; }
  function GetShortName()     { return "MonIA"; }
  function CreateInstance()   { return "MaNouvelleIA"; }
  function GetAPIVersion()    { return "1.0"; }
}

/* Indique au cœur que nous sommes une IA */
RegisterAI(MaNouvelleIA());

où, bien entendu, vous devez changer les noms comme vous voulez appeler tout. N'oubliez simplement pas le RegisterAI(), ni d'étendre AIInfo. Si quelque chose se passe mal, vérifiez si vous avez bien mis: RegisterAI(MaNouvelleAI()). Vérifiez le () après le MaNouvelleIA!

Paramètres

Il est possible de permettre aux utilisateurs de modifier les paramètres dans votre IA. La seule obligation est que vous devez leur indiquer quels paramètres. Vous pouvez le faire en modifiant votre info.nut de la manière suivante:

class MaNouvelleIA extends AIInfo 
{
  function GetAuthor()      { return "Auteur d'IA débutant"; }
  function GetName()        { return "MaNouvelleIA"; }
  function GetDescription() { return "Un exemple d'IA suivant le tutoriel sur http://wiki.openttd.org/"; }
  function GetVersion()     { return 1; }
  function MinVersionToLoad() { return 1; }
  function GetDate()        { return "17/03/2007"; }
  function GetShortName()   { return "MonIA"; }
  function CreateInstance() { return "MaNouvelleIA"; }
  function GetAPIVersion()  { return "1.0"; }
  
  function GetSettings() 
  {
    AddSetting({name = "NomDuParametre", description = "Description du paramètre", min_value = 0, max_value = 10, easy_value = 10, medium_value = 5, hard_value = 0, custom_value = 5, flags = 0});
    AddLabels("NomDuParametre", {_0 = "C'est maintenant désactivé", _10 = "Maximum"});
  }
}

/* Indiquer au cœur que nous sommes une IA */
RegisterAI(MaNouvelleIA());

Les nouvelles lignes, bien entendu, sont celles concernant les paramètres. Dans SetSetting, il est important de définir toutes les propriétés. Sinon, une erreur sera renvoyée. Maintenant, dans une IHM de votre IA, il y aura une option pour modifier NomDuParametre entre les valeurs 0 à 10, avec une valeur prédéfinie si vous avez un paramètre de difficulté différent de 'Personnalisé'. IA:TestAI montre aussi des exemples simples utilisant des paramètres booléen (on/off).

Paramètres disponibles pour AddSetting:

Nom Type Obligatoire Description
name string oui Le nom du paramètre que vous référencez dans votre IA dans this.GetSetting(name) (membre de AIController). Les caractères ',' et '=' sont interdits.
description string oui Une description de ce que fait le paramètre. Visible pour l'utilisateur dans la fenêtre des paramètres de l'IA.
min_value integer Seulement si les drapeaux ne contiennent pas AICONFIG_RANDOM. La valeur minimale du paramètre.
max_value integer Seulement si les drapeaux ne contiennent pas AICONFIG_RANDOM. La valeur maximale du paramètre.
easy_value integer oui La valeur par défaut du niveau de difficulté facile.
medium_value integer oui La valeur par défaut du niveau de difficulté intermédiaire.
hard_value integer oui La valeur par défaut du niveau de difficulté difficile.
custom_value integer oui La valeur par défaut du niveau de difficulté personnalisé.
random_deviation integer non, interdit si les drapeaux contiennent AICONFIG_RANDOM Quand le jeu est démarré, la valeur du paramètre sera choisie aléatoirement entre user_specified_value - random_deviation et user_specified_value + random_deviation.
step_size integer non L'incrément duquel la valeur est modifiée chaque fois que l'utilisateur clic sur un des boutons.
flags bitset oui Vous pouvez spécifier les drapeaux suivants (combinés avec l'opérateur ou binaire): AICONFIG_RANDOM, AICONFIG_BOOLEAN et AICONFIG_INGAME. Voyez ci-dessous pour une description de ce qu'ils font.

Drapeaux

Drapeau Description
AICONFIG_BOOLEAN Fait du paramètre un choix booléen. Si vous positionnez ce drapeau, ne spécifiez pas min_value ou max_value. Toutes les valeurs de easy_value, medium_value, hard_value et custom_value doivent être 0 ou 1 (pas false/true).
AICONFIG_RANDOM Les utilisateurs ne fixeront pas explicitement la valeur, ils obtiendront une valeur aléatoire entre min_value et max_value.
AICONFIG_INGAME Seuls les paramètres avec ce drapeau pourront être modifiés en cours de jeu.

Il est possible de combiner ensemble deux ou plus paramètres. Par exemple, cela produit un booléen aléatoire: flags = AICONFIG_BOOLEAN | AICONFIG_RANDOM

AddLabels

AddLabels accepte deux paramètres; le premier est le nom du paramètre pour lequel les libellés sont définis, et le second une table avec une correspondance entre valeurs et libellés. Comme les identifiants ne peuvent pas commencer par un chiffre, le premier caractère est ignoré (le souligné, dans l'exemple). Le reste de l'identifiant devrait être un nombre pour lequel vous définissez un libellé. Si jamais vous ne définissez aucun libellé, le nombre sera affiché comme tel. Ces libellés servent uniquement pour les utilisateurs; dans votre IA, vous n'aurez que les valeurs numériques, si vous utilisez GetSetting().

Lire les valeurs de paramètre

Maintenant, dans votre IA, vous pouvez demander la valeur de ce paramètre, en écrivant:

MaNouvelleIA.GetSetting("NomDuParametre");

Il y a quelques choses à se souvenir: