Développement
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
- Listes
- Traiter les erreurs OTTD
- Tramways
- Bibliothèques de l'IA
- Forum
- FAQ du forum
- Comportement de l'IA
IAs
Tous les articles de la catégorie NonIAOpenTTD est un jeu en temps réel; donc aucun programme ne peut prédire si une certaine action planifiée échouera ou non, jusqu'à ce qu'elle soit exécutée. En laissant l'IA construire des ponts, des véhicules, rediriger des avions, il y a des chances que ces commandes échouent pour une raison ou une autre. Les avions peuvent s'écraser, il peut y avoir besoin de plus d'argent, et d'autres concurrents peuvent interférer avec ces plans. Dorénavant, NonIA peut indiquer quand une commande a été exécutée avec succès; cependant, si une commande a échoué, il ne peut pas indiquer pourquoi. Cette page est un manuel à la fois pour les auteurs d'IA, car il fournit des directives de codage, et pour les développeurs qui veulent aider à améliorer cette fonctionnalité et corriger les erreurs.
Code
Chaque code d'erreur dans OpenTTD a son propre ID (StringID) et est utilsié pour traduire l'erreur dans uns des diverses langues pour avertir l'utilisateur via un message sur l'IHM. Afin de traduire ces erreurs, nous devons traduire ces StringIDs en messages d'erreur et les exposer via l'API NonIA. Le dernier message d'erreur peut être obtenu en appelant AIError.GetLastError()
, et els messgaes d'erreur vérifiés par:
if (!AIAirport.BuildAirport(...)) { switch(AIError.GetLastError()) { case AIError.ERR_NOT_ENOUGH_CASH: // Obtenir un peu plus d'argent ... break; case AIError.ERR_LOCAL_AUTHORITY_REFUSES: // Corrompre! ... break; case AIError.ERR_LAND_SLOPED_WRONG: // Aménager le terrain ... break; ... default: AILog.Warning("Exception non gérée: " + AIError.GetLastErrorString()); break; } }
En interne, les messages d'erreur correspondent à la fois à des constantes énumérées (comme AIError.ERR_NOT_ENOUGH_CASH
) et à une représentation sous forme de chaîne. Celle-ci peut être obtenue en appelant AIError.GetLastErrorString
et correspondra au nom de la constante énumérée; notez qu'elle n'est prévue que pour une utilisation dans un but de débogage! La documentation de l'API liste toutes les erreurs qui peuvent survenir, par méthode, lors de leur invocation. Il y a cependant quelques exceptions; les erreurs suivantes ne seront pas listées, car elles s'appliquent à (presque) toutes les méthodes:
-
AIError.ERR_UNKNOWN
: Il y a eu une erreur qui n'a pas de correspondance dans NonIA. Cela peut vouloir dire deux choses: il n'y a pas de StringID pour cette erreur, ou bien nous avons oublié de lui donner une correspondance. Dans ce dernier cas, merci de soumettre un rapport de bogue et nous en parler pour que nous puissions le corriger. -
AIError.ERR_PRECONDITION_FAILED
: Vous avez violé une des préconditions de la méthode; aucun appel au système sous-jacent n'a été fait. -
AIError.ERR_NEWGRF_SUPPLIED_ERROR
: Cette erreur est spécifique à NewGRF et nous ne pouvons pas la tracer ni lui donner une correspondance. -
AIError.ERR_NOT_ENOUGH_CASH
: Vous n'avez pas assez d'argent pour l'action correspondante. Cette erreur est toujours vérifiée après les autres conditions d'erreur. Cela veut dire que l'opération aurait réussi si les fonds avaient été disponibles.
La signification des autres messages d'erreur peut être trouvée dans l'API.