Réunion du 26-10-2021
Bientôt la traduction suivie du journal.
Introduction
[11:00] Andrew Hellershanks : Bonjour, tout le monde. [11:00] Ubit Umarov : bonjour [11:00] Gavin.Hird @grid.xmir.org:8002 : Salut Andrew [11:00] Ubit Umarov : Les gars, si on si on plante, allez à Hurliman Plaza. [11:02] Selby.Evans @grid.kitely.com:8002 : bonjour à tous. [11:02] Ubit Umarov : Bonjour. [11:02] Andrew Hellershanks : Bonjour, Selby. [11:03] Andrew Hellershanks : Ubit, as-tu apporté des modifications au code ces dernières minutes ? [11:03] Vincent.Sylvester @hg.zetaworlds.com:8002 : Oui, j'ai corrigé un message de log et je lui ai envoyé le patch, alors nous l'avons corrigé à sa façon. [11:03] Ubit Umarov : oui je l'ai fait :p [11:03] Vincent.Sylvester @hg.zetaworlds.com:8002 : Maintenant nous attendons le démarrage [11:04] Ubit Umarov : donc oui la région peut faire la mise à jour automatique en nous sortant tous. [11:04] Ubit Umarov : ou pas... voyons voir [11:04] Ubit Umarov : pas sûr que Bill ait ajouté une heure de garde pour la réunion. [11:05] Gavin.Hird @grid.xmir.org:8002 : quelqu'un a mis une instruction de type "might do" dans ce script ? [11:05] Andrew Hellershanks : oui, j'étais sur le point de suggérer cela comme un ajout utile au script de mise à jour. [11:05] Ubit Umarov : "might do" ? [11:05] Gavin.Hird @grid.xmir.org:8002 : si le processeur peut être sollicité. [11:05] Andrew Hellershanks : C'est ce qui m'a rendu perplexe aussi, Ubit. [11:05] Gavin.Hird @grid.xmir.org:8002 : cela pourrait redémarrer la région. [11:06] Ubit Umarov : oui, il faut demander à Bill, comme vous le savez, cette région fonctionne sur une de ses machines. [11:06] Andrew Hellershanks : Voici Kayaker. [11:06] Andrew Hellershanks : Bonjour, Kayaker. [11:06] Kayaker Magic : Salut Andrew, et tous ! [11:06] Gavin.Hird @grid.xmir.org:8002 : Salut Kayaker [11:06] Ubit Umarov : il est possible qu'il ait déjà ajouté cela au script. [11:07] Ubit Umarov murmure : ce n'est pas la première fois que je fais un commit juste avant une réunion :) [11:07] Andrew Hellershanks hoche la tête.
Niveau de vie des NPC & Nettoyage de Mantis
[11:07] Vincent.Sylvester @hg.zetaworlds.com:8002 : Le plus gros changement de code de cette semaine était lié aux NPC lorsqu'ils n'ont plus de niveau de vie, maintenant, ils sont supprimés. [11:07] Ubit Umarov : vous pouvez blâmer Vincent.Sylvester pour cela. [11:07] Vincent.Sylvester @hg.zetaworlds.com:8002 : Je maintiens que c'est un changement assez radical, mais eh, question d'opinion je suppose. [11:08] Vincent.Sylvester @hg.zetaworlds.com:8002 : Quelques anciens bogues ont également été résolus [11:08] Andrew Hellershanks : C'est l'un des 6 rapports de mantis qui ont été traités par des changements de code la semaine dernière. [11:08] Vincent.Sylvester @hg.zetaworlds.com:8002 : J'ai déterré tout ce qui n'était pas sur un arbre à cinq, en essayant de résoudre ou de confirmer ce qui est encore ouvert. [11:09] Ubit Umarov : Oui, certains vieux rapports sont toujours d'actualité. [11:09] Ubit Umarov : quelques uns resteront en tant que "feature". [11:09] Vincent.Sylvester @hg.zetaworlds.com:8002 : Le but est d'obtenir une image plus claire de ce qui est encore cassé et des bogues les plus graves qui devraient être abordés à un moment donné. [11:10] Ubit Umarov : au moins pour la version 0.9.2. [11:10] Vincent.Sylvester @hg.zetaworlds.com:8002 : Un tas de choses sont trop complexes pour que je puisse les tester, je n'ai pas vraiment envie de réinstaller freeswitch juste pour tester ces tickets.
Bug des pièces jointes des notes groupe
[11:10] Ubit Umarov : un cas est celui des pièces jointes des notes de groupe. [11:10] Gavin.Hird @grid.xmir.org:8002 : est-ce qu'on cherche 22 ? [11:10] Andrew Hellershanks : Gavin, 22 quoi ? [11:10] Ubit Umarov : actuellement un attachement à une notification de groupe est fondamentalement lié à un élément dans l'inventaire de l'expéditeur. [11:11] Gavin.Hird @grid.xmir.org:8002 : 2022 pour la version 0.9.2. [11:11] Ubit Umarov : donc si l'expéditeur supprime cet élément, la pièce jointe disparaît. [11:11] Gavin.Hird @grid.xmir.org:8002 : faites la 0.9.22 au cas où. [11:11] Vincent.Sylvester @hg.zetaworlds.com:8002 : Je ne peux toujours pas reproduire l'erreur sur ce ticket sans, comme le dit Ubit, supprimer l'objet de l'inventaire. [11:11] Andrew Hellershanks : Le nombre passerait de 0,2 à 0,22. [11:12] Ubit Umarov : cela peut prêter à confusion, donc à l'avenir ces élements devraient être conservés ailleurs. [11:12] Ubit Umarov : comme par exemple un autre utilisateur du système :p [11:12] Vincent.Sylvester @hg.zetaworlds.com:8002 : J'ai fait un brainstorming sur ce qui pourrait être fait de mieux, en pensant à faire en sorte que os_groups_attachments copie essentiellement la ligne de l'article de l'inventaire de la table inventoryitems sur celle-ci afin que l'utilisateur original ne puisse pas supprimer l'article. [11:12] Ubit Umarov : d'une manière plus propre, un autre champ sur la base de données des notes. [11:12] Vincent.Sylvester @hg.zetaworlds.com:8002 : Nous n'effaçons actuellement rien automatiquement, ce qui pourrait ajouter beaucoup de charges supplémentaires. [11:13] Andrew Hellershanks : L'attachement de groupe pointe vers un élément d'inventaire ? J'aurais pensé qu'il devait pointer vers un asset. [11:13] Ubit Umarov : je suppose que cela se passe chez SL, de plus toutes les notes de plus de 30 jours y sont supprimés. [11:13] Vincent.Sylvester @hg.zetaworlds.com:8002 : Je le pensais aussi, mais il est en fait plus facile de réutiliser les méthodes de transfert d'inventaire que de créer un nouvel élément d'inventaire à partir de l'asset lui-même. [11:14] Vincent.Sylvester @hg.zetaworlds.com:8002 : Je peux voir pourquoi cela a été fait de cette façon [11:14] Andrew Hellershanks : J'avais un script fonctionnant dans une grille qui faisait expirer les anciens avis de groupe. [11:14] Ubit Umarov : oui, ces expirations doivent être faites par du code externe maintenant. [11:14] Ubit Umarov : directement sur la base de données. [11:14] Vincent.Sylvester @hg.zetaworlds.com:8002 : Tout est piloté par la base de données, donc le cron supprime essentiellement les anciennes lignes. [11:14] Andrew Hellershanks : maintenant ? Je pensais qu'ils devaient toujours être faits de cette façon. [11:15] Ubit Umarov : ( ceci pour les deux modules de nos groupes ) [11:15] Ubit Umarov : toujours inclus maintenant :p [11:15] Vincent.Sylvester @hg.zetaworlds.com:8002 : Robust pourrait probablement le faire avec une forme de minuterie vérifiant toutes les quelques minutes, mais si c'est vraiment mieux est discutable. [11:16] Ubit Umarov : bien, à moins que nous ne repérons un bug, je ne changerai pas cela pour la 0.9.2. [11:16] Andrew Hellershanks : Lorsque vous transférez un article, l'entrée DB dans la table inventory_items a un pointeur vers l'assetID, pourquoi n'est-il pas disponible pour les avis de groupe ? [11:17] Ubit Umarov : parce que le pointeur vers l'inv ID de l'expéditeur est utilisé. [11:18] Ubit Umarov : je veux dire que la pièce jointe est stockée sur la notification en tant que telle. [11:18] Gavin.Hird @grid.xmir.org:8002 : c'est logique. [11:18] Vincent.Sylvester @hg.zetaworlds.com:8002 : Parce qu'un asset n'est qu'un asset, pour qu'il se trouve dans l'inventaire en tant qu'item vous avez besoin de quelques autres choses aussi qui sont des choses que vous ne pouvez pas extraire ou définir facilement. Le simple fait de pointer vers un asset impliquerait de stocker tous les autres champs afin qu'un article d'inventaire puisse être créé à partir de celui-ci. [11:18] Vincent.Sylvester @hg.zetaworlds.com:8002 : Des choses comme le créateur et les permissions, des choses comme ça. [11:19] Vincent.Sylvester @hg.zetaworlds.com:8002 : Le fait qu'il soit présent en tant qu'élément d'inventaire pleinement qualifié signifie que vous pouvez simplement appeler les méthodes de transfert utilisées pour transférer les éléments d'inventaire, qui sont beaucoup plus simples à appeler qu'une méthode de reconstruction lourde pour créer un nouvel élément d'inventaire à partir de zéro. [11:19] Andrew Hellershanks : C'est vrai. Les bons vieux drapeaux de permission :)
Les NPCs
Points de vie des NPCs
[11:20] Ubit Umarov : à propos de ce changement, Vincent Sylvester a mentionné que le npc est en fait Damage control. [11:20] Ubit Umarov : Le cas des NPCs a été oublié sur une fonction de dommage ossl. [11:20] Vincent.Sylvester @hg.zetaworlds.com:8002 : J'ai proposé de renvoyer le NPC à la position à laquelle il a été créé et de fournir un moyen de définir si vous voulez que le NPC soit mortel ou non, je suppose que cela ajouterait beaucoup plus de complexité. [11:21] Ubit Umarov : donc quand la santé devient < 0, le code normal des avatars est exécuté. [11:21] Ubit Umarov : ie tp home etc. [11:21] Andrew Hellershanks : Cela pourrait rendre certains jeux plus faciles à coder. Je connais quelqu'un qui avait des zombies NPC dans un jeu. [11:21] Vincent.Sylvester @hg.zetaworlds.com:8002 : Eh bien oui et non [11:21] Ubit Umarov : mais ce chemin de code tp home est "undefined" pour les NPCs. [11:21] Vincent.Sylvester @hg.zetaworlds.com:8002 : Il est encore un peu difficile de comprendre qu'ils sont morts. [11:22] Andrew Hellershanks : Ubit, est-ce que tu voulais dire "<= 0" ? [11:22] Ubit Umarov : Je suppose que j'ai échoué quelque part après avoir gaspillé des ressources. [11:22] Ubit Umarov : j'ai donc appliqué un vieux patch proposé qui les tue. [11:22] Ubit Umarov : c'est ce qui est logique pour les NPCs. [11:23] Andrew Hellershanks hoche la tête. [11:23] Vincent.Sylvester @hg. zetaworlds.com:8002 : Je pense avoir laissé mon patch sur le ticket de mantis si quelqu'un veut l'utiliser. [11:23] Ubit Umarov : bien sûr, les zones de NPC sont aussi un bidouillage limité. [11:24] Ubit Umarov : donc par exemple le script de contrôle n'est pas informé que son NPC est parti. [11:25] Ubit Umarov : le contrôle des dommages de la région est aussi une chose limitée. [11:25] Ubit Umarov : les gens font des jeux, mais ne les utilisent pas. [11:25] Vincent.Sylvester @hg.zetaworlds.com:8002 : J'ai joué avec cette partie un peu plus en fait, puisque j'ai déjà ajouté un moyen pour les NPCs d'annoncer quand ils ont atteint leur movetotarget assigné, j'ai pensé à ajouter un moyen pour eux d'annoncer quand ils ont été retirés parce qu'ils sont morts. [11:25] Vincent.Sylvester @hg.zetaworlds.com:8002 : Ajouter cela est un peu plus de travail cependant [11:25] Vincent.Sylvester @hg.zetaworlds.com:8002 :De plus, dire à la région ce genre de choses n'est pas du tout élégant. [11:26] Ubit Umarov : bien sûr que ce n'est pas une solution :P [11:26] Jamie.Jordan @grid.kitely.com:8002 : Bonjour à tous [11:26] Andrew Hellershanks : Bonjour, Jamie. [11:26] Gavin.Hird @grid.xmir.org:8002 : Salut Jamie [11:26] Ubit Umarov : dans le schéma actuel des scripts, cela devrait être un événement. [11:27] Andrew Hellershanks : hm... Je ne pense pas que nous ayons un état on_derez dans les scripts. [11:27] Vincent.Sylvester @hg.zetaworlds.com:8002 : J'ai pensé à faire du script original ou plutôt de la prim qui appelle NpcCreate une partie de NpcAvatar comme champ pour qu'ils puissent faire un appel LinkMessage ou dataserver, mais je ne suis pas très versé dans le code événementiel donc je n'ai pas pris la peine de le faire. [11:27] Ubit Umarov : et si nous l'avions, cela signifierait d'autres choses... [11:27] Ubit Umarov : par exemple derez de la prim du script. [11:28] Andrew Hellershanks : Cela pourrait être utile pour les deux. [11:28] Ubit Umarov : la mort des npc pourrait être un changement. [11:28] Ubit Umarov : pas vraiment un "changement" mais ce serait bien :) [11:29] Ubit Umarov : bon... [11:29] Andrew Hellershanks : Oui. [11:29] Ubit Umarov : dans de nombreux cas, une seule boîte ou script contrôle une tonne de npcs. [11:29] Ubit Umarov : mais bon, c'est une chose à considérer pour l'avenir. [11:30] Vincent.Sylvester @hg.zetaworlds.com:8002 : L'autre considération est que si une prim a été fait l'"hôte" d'un NPC, mais vous avez en fait votre script de contrôleur dans un autre alors vous ne pouvez pas intercepter les appels non plus et faire un événement de diffusion générale disons npc(fields) envoyant à tous les scripts serait du suicide. [11:30] Ubit Umarov : comme je l'ai dit, je pense que la plupart des gens n'utilisent pas les dommages de région. [11:31] Ubit Umarov : nahh seulement le contrôleur peut capter l'événement. [11:31] Ubit Umarov : ou ce serait un spammeur de région. [11:31] Vincent.Sylvester @hg.zetaworlds.com:8002 : Il est étonnamment difficile de tuer des choses avec des dommages activés. [11:32] Ubit Umarov : facile... volez haut et tombez. [11:32] Ubit Umarov : :) [11:32] Andrew Hellershanks : L'événement "change" est-il appelé lorsqu'il y a eu un changement dans le niveau de santé ? [11:32] Vincent.Sylvester @hg.zetaworlds.com:8002 : Je l'ai fait tomber de 130 mètres et il est resté là à me regarder. [11:32] Andrew Hellershanks : Est-ce qu'il y a... [11:32] Ubit Umarov : Non, il n'y a pas d'événement. [11:32] Ubit Umarov : le code des dommages a été fait pour des avatars normaux. [11:33] Ubit Umarov : Le cas du kill a juste été ajouté plus tard. [11:33] Ubit Umarov : en fait, je l'ai aussi modifié maintenant, dans le module de combat. [11:33] Andrew Hellershanks : Ce serait une autre façon de le traiter s'il y avait une notification "change". [11:33] Ubit Umarov : cette notification de changement est quelque chose que j'ai proposé maintenant :p [11:34] Ubit Umarov : pas là... [11:34] Andrew Hellershanks : Si le kill case est déclenché avant que le NPC soit supprimé de la région, ce serait une autre façon de faire en sorte que le NPC dise au revoir. [11:34] Ubit Umarov : ( et discutable si cela fait partie de "change" )
Le système des NPCs
[11:34] Ubit Umarov : comme nous le savons, les NPCs ont aussi été ajoutés comme un hack. [11:34] Vincent.Sylvester @hg.zetaworlds.com:8002 : Andrew le problème est la portée, si vous voulez intercepter un NPC avec n'importe quel script sur la région alors ils doivent diffuser à tout, cela serait vraiment lourd. [11:34] Ubit Umarov : donc incohérent et limité. [11:35] Vincent.Sylvester @hg.zetaworlds.com:8002 : Les assigner au script qui les a fait naître n'est pas toujours ce que vous voulez lorsque vous utilisez une autre prim pour les contrôler et une autre pour les faire naître. [11:35] Ubit Umarov : ils ont juste obtenu telle ou telle fonctionnalité sans aucune planification. [11:35] Andrew Hellershanks : Le script pourrait faire ce qui est nécessaire pour notifier ce qui l'a rezzé ou juste notifier son propriétaire. [11:36] Vincent.Sylvester @hg.zetaworlds.com:8002 : Je veux dire que je suppose qu'il y aurait des moyens de détourner le contrôle d'un prim à un autre, mais cela poserait également des problèmes de sécurité. [11:36] Vincent.Sylvester @hg.zetaworlds.com:8002 : Devient vite complexe [11:36] Vincent.Sylvester @hg.zetaworlds.com:8002 : La beauté du système NPC est que tout bien considéré, il est assez léger. [11:37] Ubit Umarov : ( il semble que Bill ait ajouté un temps de garde sur la recompilation automatique :) ) [11:37] Ubit Umarov : oui, j'ai ignoré votre patch sur ce point, pour rester léger :p [11:37] Andrew Hellershanks : J'essaie de penser à des façons de gérer la notification qui ne nécessiteraient pas de changements importants dans la gestion des NPCs qui pourraient impliquer l'ajout de nouveaux états de script.
NPC et téléportation
[11:38] Ubit Umarov : nous n'avons pas besoin de osNPCTeleport par exemple. [11:38] Ubit Umarov : hmm je pense... [11:38] Vincent.Sylvester @hg.zetaworlds.com:8002 : Je n'ai pas vraiment ajouté l'ossl pour cela je pense. [11:38] Ubit Umarov : je l'ai vu sur ce patch. [11:38] Andrew Hellershanks : hm... cela pourrait être utile dans certaines situations. [11:39] Ubit Umarov : non, ça ne l'est pas. [11:39] Andrew Hellershanks : Probablement rarement nécessaire. [11:39] Vincent.Sylvester @hg.zetaworlds.com:8002 : Utilisez simplement teleportagent [11:39] Ubit Umarov : les tps ossl fonctionnent. [11:39] Ubit Umarov : les tps locaux, bien sûr. [11:39] Vincent.Sylvester @hg.zetaworlds.com:8002 : J'ai ajouté le suivi du home pour placer votre NPC et un moyen de changer cette position. [11:39] Vincent.Sylvester @hg.zetaworlds.com:8002 : Juste parce que pourquoi pas lol [11:40] Ubit Umarov : nous gardons déjà en mémoire les points de spaw des avatars. [11:40] Ubit Umarov : je pense que c'est le cas [11:40] Andrew Hellershanks : TeleportAgent fonctionnera avec les NPCs ? [11:40] Vincent.Sylvester @hg.zetaworlds.com:8002 : Oui [11:40] Ubit Umarov : non [11:40] Andrew Hellershanks : ok. Parfois Agent n'inclut pas les NPCs. [11:40] Ubit Umarov : seulement les téléports locaux. [11:41] Vincent.Sylvester @hg.zetaworlds.com:8002 : Eh bien oui, vous ne pouvez pas les déplacer dans une autre région, ce serait mauvais. [11:41] Gavin.Hird @grid.xmir.org:8002 : Peut-on les téléporter à l'intérieur d'une ligne d'interdiction ? [11:41] Andrew Hellershanks : oui. Un simple TP local pourrait avoir son utilité. [11:41] Ubit Umarov: lol [11:42] Andrew Hellershanks : Gavin, ils devraient être soumis aux mêmes règles qu'un avatar normal lorsqu'il s'agit de faire un TP. [11:42] Ubit Umarov : vous vous souvenez du problème de Fred. [11:42] Ubit Umarov : quand j'avais un créé un contrôle d'accès de parcelles aux npcs. [11:42] Ubit Umarov : ses jolis npcs se sont tous empilés à la frontière de la région. [11:43] Ubit Umarov : en faisant amusante grande pyramide de NPCs. [11:43] Ubit Umarov : vous vous souvenez de ça ? il l'a aussi ajouté à g++. [11:43] Ubit Umarov : pensez-y [11:43] Ubit Umarov : c'était si amusant :)
Limiter le nombre des NPCs
[11:43] Jagga Meredith : Je ne veux pas que des NPCs aléatoires débarquent dans ma région. C'est déjà assez difficile de s'en débarrasser comme ça. Est-ce qu'on peut les virer ? Il n'y a aucun moyen de les mettre sur une liste d'interdiction. Un bot pourrait les générer et inonder ma région. [11:44] Ubit Umarov : je pense que le kick va les tuer. [11:44] Ubit Umarov : sinon il devrait le faire [11:44] Gavin.Hird @grid.xmir.org:8002 : oui. [11:44] Vincent.Sylvester @hg.zetaworlds.com:8002 : Il y a un suivi de la position de départ dans NpcAvatar, mais il n'est utilisé nulle part. J'ai créé un objet liste pour le suivi de cette position afin de ne pas avoir à s'interfacer avec les objets eux-mêmes. [11:44] Ubit Umarov : ils ont maintenant le contrôle d'accès aux parcelles, etc. [11:45] Ubit Umarov : parce que rien n'en a vraiment besoin. [11:45] Vincent.Sylvester @hg.zetaworlds.com:8002 : La grande question est qu'en dehors de movetotarget et d'être tué, il n'y a pas vraiment beaucoup de choses qu'un NPC doit rapporter à un script, parce que vous ne pouvez pas vraiment faire beaucoup d'autres choses avec eux qui nécessitent un retour d'information. [11:46] Ubit Umarov : public virtual Vector3 StartPos est en fait un paramètre du client. [11:46] Ubit Umarov : les avatars normaux l'ont aussi. [11:46] Andrew Hellershanks : Déplacement, arrêtez les notifications de déplacement. [11:46] Ubit Umarov : nous n'avons encore que ceux de KFM. [11:46] Andrew Hellershanks : et commencer à bouger. [11:46] Ubit Umarov : c'est une "fonctionnalité". [11:47] Ubit Umarov : ajouter cela à n'importe quel mouvement est lourd. [11:47] Andrew Hellershanks : ok. Je pensais que les événements de mouvement étaient déclenchés à chaque fois que quelque chose commençait/arrêtait le mouvement. [11:47] Ubit Umarov : spécialement sur les pièces jointes. [11:47] Vincent.Sylvester @hg.zetaworlds.com:8002 : Je n'ajouterais ces choses que dans le cadre de constantes pour basculer ce comportement, sinon cela devient trop bavard quand on a quelques centaines de PNJs qui se baladent dans les environs. [11:48] Ubit Umarov : et il y a des choses non physiques. [11:48] Andrew Hellershanks : Start et stop seraient utiles car ils pourraient déclencher différentes animations. [11:48] Ubit Umarov : comme llSetPos. [11:48] Ubit Umarov : que ll wiki définit comme indéfini ? ? [11:48] Ubit Umarov : :) [11:48] Gavin.Hird @grid.xmir.org:8002 : quelques centaines... [11:48] Ubit Umarov : mais fait un bazar sur tout code de contrôle de mouvement. [11:48] Vincent.Sylvester @hg.zetaworlds.com:8002 : 'SL spec is moving start end works for attachments,' mais la façon dont c'est formulé ressemble plus à un bug transformé en fonctionnalité qu'autre chose. [11:49] Andrew Hellershanks : Vincent, ce n'est pas comme ça que beaucoup de fonctionnalités commencent ? ;) [11:49] Gavin.Hird @grid.xmir.org:8002 : le nombre de NPCs n'est-il pas limité par la limite du nombre d'agents dans la région? [11:49] Ubit Umarov : même les vieux scripts sl AO ne l'utilisent pas. [11:49] Ubit Umarov : ils utilisent le très lourd événement de collision et les timers. [11:49] Vincent.Sylvester @hg.zetaworlds.com:8002 : Oui, le nombre de NPC peut être limité, mais vous pouvez aussi simplement changer cette limite. [11:50] Ubit Umarov : Oui, Gavin, ils sont en dehors de cette limite. [11:50] Andrew Hellershanks : Il y a un événement "changed" que les AOs devraient utiliser. [11:50] Ubit Umarov : c'est un changement que j'ai fait il y a quelques semaines/mois ? [11:50] Andrew Hellershanks : En voyant la mention de llSetPos, j'ai trouvé un problème avec llSetRot. [11:50] Gavin.Hird @grid.xmir.org:8002 : où est configurée cette limite ? [11:50] Ubit Umarov : quelque part dans l'ini. [11:51] Ubit Umarov : et dans le monde [11:51] Gavin.Hird @grid.xmir.org:8002 : Donc si le propriétaire de la région fixe la limite d'agents à disons 10, quelqu'un peut venir et créer un tas de NPCs au-delà de cette limite ? [11:51] Ubit Umarov : Oui. [11:51] Gavin.Hird @grid.xmir.org:8002 : ouch [11:52] Ubit Umarov : la limite des npc devrait être ailleurs. [11:52] Ubit Umarov : TODO :p [11:52] Andrew Hellershanks : Quand je rezze un objet, il a une position de départ. Après qu'un script l'ait fait tourner au toucher, lorsqu'il s'agit de l'arrêter, il devrait revenir à sa rotation de départ mais ce n'est pas le cas. Lorsque je touche à nouveau l'objet pour redémarrer la rotation, il revient à sa position de départ et commence à tourner à partir de là. Une mise à jour n'est pas envoyée au viewer tout de suite. [11:52] Ubit Umarov : wle si ce n'est pas là quelque part je ne me souviens pas maintenant [11:52] Gavin.Hird @grid.xmir.org:8002 : manière de tuer les performances de la scène pour le viewer. [11:52] Gavin.Hird @grid.xmir.org:8002 : génère un tas de 2M tris NPCs. [11:53] Ubit Umarov : Je ne connais pas Andrew. [11:53] Ubit Umarov : il faut un objet de test pour le voir. [11:53] Gavin.Hird @grid.xmir.org:8002 : IMO ils ne devraient pas être en mesure de dépasser la limite d'agents de la région. [11:53] Andrew Hellershanks : Sous la version 0.8.2, l'orientation de départ était immédiatement rétablie. [11:53] Ubit Umarov : la limite de région est pour les humains. [11:53] Andrew Hellershanks : J'ai démonté un script pour faire un objet de test. [11:54] Gavin.Hird @grid.xmir.org:8002 : mais les NPCs peuvent réduire de manière significative les performances du côté du viewer. [11:54] Gavin.Hird @grid.xmir.org:8002 : en particulier si vous déversez des avatars en meshes chargés de merde. [11:54] Ubit Umarov : llSetRot n'a pas de démarrage, donc aucune idée de ce dont vous parlez andrew. [11:54] Ubit Umarov : oui, ils peuvent Gavin.Hird. [11:54] Jagga Meredith : Les NPC's tuent les performances de la région. [11:54] Gavin.Hird @grid.xmir.org:8002 : donc c'est aussi un vecteur de dégradation. [11:54] Kayaker Magic : Utiliser des animations sur un animesh Andrew ? [11:54] Gavin.Hird @grid.xmir.org:8002 : et [11:55] Ubit Umarov : je viens de découpler ces limites. [11:55] Jagga Meredith : c'est exactement ce que je veux dire. [11:55] Gavin.Hird @grid.xmir.org:8002 : si le propriétaire ne veut pas avoir plus de 10 agents dans la région, cela devrait être respecté, qu'ils soient avatars, npcs ou un mélange des deux. [11:55] Andrew Hellershanks : Ubit, j'ai dit que lorsque l'objet est rezzé, la première chose qu'il fait est d'enregistrer sa rotation. Cette valeur est utilisée pour réinitialiser la rotation de l'objet quand on lui demande d'arrêter de tourner. [11:55] Ubit Umarov : compte aussi [11:55] Ubit Umarov : non andrew [11:56] Gavin.Hird @grid.xmir.org:8002 : la limite est-elle un paramètre de la région ou un paramètre de opensimdefaults.ini ? [11:56] Andrew Hellershanks : qu'est-ce que tu veux dire par "non". [11:56] Vincent.Sylvester @hg.zetaworlds.com:8002 : Line 1214 of OpenSim.ini MaxNumberNPCsPerScene = 40 [11:56] Ubit Umarov : llSetRot définit juste la rotation. [11:56] Ubit Umarov : Ohh j'ai déjà ajouté une limite pour les npcs ? [11:57] Andrew Hellershanks : Oui, je n'ai pas dit que j'utilisais llSetRot pour obtenir la rotation. [11:57] Gavin.Hird @grid.xmir.org:8002 : cela devrait être fixé à un nombre plus bas pour que le propriétaire de la région ait délibérément à l'augmenter. [11:57] Objet : Script en cours d'exécution [11:58] Ubit Umarov : ... [11:58] Ubit Umarov : ;; nombre maximum de NPCs par scène par défaut : 40 ;; fixer à une valeur négative pour autoriser n'importe quel nombre ;; notez qu'un NPC est presque aussi lourd qu'un avatar normal, donc vous devriez les limiter ;; MaxNumberNPCsPerScene = 40 [11:58] Ubit Umarov : je l'ai fait :) [11:58] Vincent.Sylvester @hg.zetaworlds.com:8002 : C'est juste un NPC donc on ne compte que ceux-là [11:58] Ubit Umarov : oui, j'ai découplé les limites. [11:58] Vincent.Sylvester @hg.zetaworlds.com:8002 : Cela veut dire, je pense que vous pouvez toujours ajouter 40 avatars en plus. [11:58] Ubit Umarov : Oui. [11:59] Vincent.Sylvester @hg.zetaworlds.com:8002 : Donc tout le monde a un NPC) pour danser avec :) [11:59] Ubit Umarov : Ceux-ci ont dû être découplés. [12:00] Ubit Umarov : la limite de l'interface graphique ne concerne que les avatars normaux, c'est-à-dire les humains. [12:00] Vincent.Sylvester @hg.zetaworlds.com:8002 : De plus, il n'y avait pas de limite avant, donc même avec la limite d'agents par défaut, je pouvais simplement en créer plus. [12:00] Gavin.Hird @grid.xmir.org:8002 : l'avoir dans Opensim.ini signifie qu'il s'applique à toutes les régions du simulateur. [12:00] Gavin.Hird @grid.xmir.org:8002 : il faut que ce soit par région. [12:00] Vincent.Sylvester @hg.zetaworlds.com:8002 : 250 avant que la viewere ne plante la dernière fois que j'ai essayé. [12:00] Andrew Hellershanks : Ubit, je viens de t'envoyer un dispositif de test. Il est censé revenir à son angle de rotation initial à l'arrêt. [12:00] Ubit Umarov : duhhh [12:01] Ubit Umarov : c'est targetomega [12:01] Andrew Hellershanks : Et alors ? [12:01] Vincent.Sylvester @hg.zetaworlds.com:8002 : C'est par scène Gavin [12:01] Vincent.Sylvester @hg.zetaworlds.com:8002 : scene.GetRootNPCCount() >= m_MaxNumberNPCperScene [12:01] Ubit Umarov : qui sait ce que font les viewers ? [12:01] Gavin.Hird @grid.xmir.org:8002 : scène définie comme ? [12:01] Ubit Umarov : qui sait ? [12:02] Ubit Umarov : en fait le setrot ne devrait même pas être nécessaire à cet endroit. [12:02] Andrew Hellershanks : Ubit, oui. C'est pourquoi le script utilise llSetRot pour réinitialiser sa rotation après l'avoir empêché de tourner. [12:02] Ubit Umarov : sur les prims non physiques. [12:02] Vincent.Sylvester @hg.zetaworlds.com:8002 : la scène est la région dans ce cas. [12:02] Gavin.Hird @grid.xmir.org:8002 : c'est exact. [12:02] Gavin.Hird @grid.xmir.org:8002 : donc si vous avez un simulateur avec disons 4 régions, vous pouvez ajouter 160 NPCs à la charge du simulateur si vous voulez tester ses limites. [12:03] Ubit Umarov : et oui, je vois le problème. [12:03] Ubit Umarov : setrot n'envoie rien [12:03] Ubit Umarov : parce que la région n'a pas vu de changement de rotation. [12:03] Andrew Hellershanks : Ubit, ok bien. Attendez un peu avant de redémarrer la rotation. Vous verrez qu'elle revient à son angle de départ avant de recommencer à tourner. [12:04] Ubit Umarov : le décalage de rotation que vous continuez à voir est un faux du côté du viewer. [12:04] Andrew Hellershanks : Ce n'était pas un problème dans la 0.8.2 donc soit le code de la grille a changé, soit le code du viewer a changé. [12:04] Ubit Umarov : oui mais la 0.82 a envoyé une tonne de mises à jour inutiles. [12:05] Andrew Hellershanks : Pour moi, ce n'est pas une mise à jour inutile. [12:05] Ubit Umarov : que la 0.9 réduit [12:05] Vincent.Sylvester @hg.zetaworlds.com:8002 : Er n'y a-t-il pas une limite d'agents par scène/région ? [12:05] Andrew Hellershanks : Ubit, je veux que l'objet retourne à un état connu. [12:05] Ubit Umarov : demande au viewer :p [12:05] Gavin.Hird @grid.xmir.org:8002 : la limite d'agents est par région mais peut être définie individuellement dans le panneau de la région de la viewer. [12:06] Vincent.Sylvester @hg.zetaworlds.com:8002 : Je veux dire que je suppose que ce ne serait pas difficile d'ajouter une limite générale sans la partie PerScene. [12:07] Ubit Umarov : PerScene est ce que font les viewers. [12:07] Ubit Umarov : de quoi parlez-vous ? [12:07] Gavin.Hird @grid.xmir.org:8002 : stocké dans la table regionsettings comme agent_limit par région. [12:08] Ubit Umarov : Oui. [12:08] Ubit Umarov : et ? [12:08] Vincent.Sylvester @hg.zetaworlds.com:8002 : Il veut des limites par scène et par simulateur pour les agents et les npcs. [12:08] Gavin.Hird @grid.xmir.org:8002 : nous avons donc besoin de la même chose pour npc_limit. [12:08] Ubit Umarov : pourquoi ? il n'y a pas de gui pour la limite des npcs. [12:08] Ubit Umarov : cela pourrait arriver dans le futur. [12:08] Ubit Umarov : peut être [12:09] Gavin.Hird @grid.xmir.org:8002 : mettez-le dans regions.ini alors. [12:09] Ubit Umarov : c'est dans opensim.ini. [12:09] Gavin.Hird @grid.xmir.org:8002 : c'est un vecteur de griefing (dégradation) massif [12:09] Vincent.Sylvester @hg.zetaworlds.com:8002 : Des tonnes de choses dans OpenSim.ini s'appliquent à chaque scène. [12:09] Ubit Umarov : non, c'est maintenant. [12:09] Ubit Umarov : Ce n'est pas le cas. [12:09] Gavin.Hird @grid.xmir.org:8002 : particulièrement si vous utilisez plusieurs régions par simulateur comme beaucoup le font. [12:09] Jagga Meredith: '[[[[[[[[[[[[[ [12:10] Ubit Umarov : si vous gérez plusieurs régions par sim et que vous avez plusieurs propriétaires sur celles-ci, vous êtes suicidaire :) [12:10] Gavin.Hird @grid.xmir.org:8002 : les propriétaires n'ont rien à voir avec cela. [12:10] Gavin.Hird @grid.xmir.org:8002 : la limite est par région. [12:11] Vincent.Sylvester @hg.zetaworlds.com:8002 : Je comprends l'idée d'une limite par simulateur pour les agents et les NPCs d'une certaine manière, mais encore une fois, je n'ai jamais eu de gens qui ont utilisé cela pour essayer de tuer une région. [12:11] Ubit Umarov : bien pour le moment c'est une limite statique de sécurité dans opensim.ini. [12:11] Vincent.Sylvester @hg.zetaworlds.com:8002 : Un risque serait qu'il n'y ait pas de limite comme avant. [12:12] Gavin.Hird @grid.xmir.org:8002 : puis fixez la limite par défaut à un niveau très bas pour que le propriétaire de la région l'augmente délibérément en connaissant les conséquences. [12:12] Ubit Umarov : en fait je ne me souviens pas si le npc create le vérifie :p [12:12] Gavin.Hird @grid.xmir.org:8002 : Je parie qu'il ne le fait pas, hehe [12:12] Andrew Hellershanks : :) [12:12] Vincent.Sylvester @hg.zetaworlds.com:8002 : public UUID CreateNPC(string firstname, string lastname, Vector3 position, UUID agentID, UUID owner, string groupTitle, UUID groupID, bool senseAsAgent, bool candie, Scene scene, AvatarAppearance appearance) { if(m_MaxNumberNPCperScene > 0) { if(scene.GetRootNPCCount() >= m_MaxNumberNPCperScene) retourne UUID.Zero ; } [12:13] Ubit Umarov : ahh cool [12:13] Gavin.Hird @grid.xmir.org:8002 : J'aimerais que mon compte bancaire fonctionne comme ça [12:13] Vincent.Sylvester @hg.zetaworlds.com:8002 : Je veux dire qu'une vérification du nombre total de NPCs par simulateur avec un simple foreach ne serait pas difficile à ajouter non plus. [12:14] Vincent.Sylvester @hg.zetaworlds.com:8002 : Si vous êtes concerné, vous pouvez ajouter cela [12:14] Vincent.Sylvester @hg.zetaworlds.com:8002 : Ou simplement désactiver les NPCs, ces bougres effrayants de toute façon. [12:14] Gavin.Hird @grid.xmir.org:8002 : ils ont leur utilité. [12:14] Gavin.Hird @grid.xmir.org:8002 : mais ils peuvent aussi être sacrément ennuyeux. [12:15] Vincent.Sylvester @hg.zetaworlds.com:8002 : Mais même avec 4 régions on peut mettre 160, ce n'est pas suffisant pour faire planter un viewer, qui ne commence qu'à partir de 250 [12:15] Ubit Umarov : ne complique pas les choses :p [12:15] Vincent.Sylvester @hg.zetaworlds.com:8002 : En les faisant tous Ruth, vous pouvez vous en sortir avec 500 ou plus. [12:16] Gavin.Hird @grid.xmir.org:8002 : cela dépend de ce que porte le npc. [12:16] Ubit Umarov : comme l'a dit Gavin, il suffit de changer le paramètre dans regions.ini. [12:16] Ubit Umarov : cela le fait par scène. [12:16] Ubit Umarov : et changer les paramètres en lisant le code ici et là. [12:16] Gavin.Hird @grid.xmir.org:8002 : empilez plusieurs millions de tenues tris et le viewer commence à avoir du mal à fonctionner rapidement. [12:17] Ubit Umarov : pas de problème pour le moment. [12:17] Gavin.Hird @grid.xmir.org:8002 : regions.ini est un bon endroit pour l'avoir. [12:18] Ubit Umarov : ouais [12:18] Gavin.Hird @grid.xmir.org:8002 : super ! [12:18] Jagga Meredith : ouais [12:18] Vincent.Sylvester @hg.zetaworlds.com:8002 : Cela nécessiterait que le module NPC vérifie spécifiquement les paramètres des régions. [12:18] Ubit Umarov : je ne vais pas le faire maintenant :p [12:18] Gavin.Hird @grid.xmir.org:8002 : quoi ??! [12:18] Ubit Umarov : continuez à me le rappeler :)
Autres questions
[12:19] Kayaker Magic : Avant que la réunion ne se termine, j'essaie de configurer Robust et j'obtiens une erreur, est-ce que quelqu'un peut regarder ça et me dire où chercher ce que j'ai mal fait : [12:19] Kayaker Magic : 11:35:06 - [SERVER UTILS] : Erreur de chargement du plugin OpenSim.Services.Interfaces.IUserAgentService à partir de .dll. Exception : [UserAgentService] n'a pas pu analyser le gatekeeper uriSystem.Reflection.TargetInvocati rown by the target of an invocation. [12:19] Andrew Hellershanks : J'étais sur le point de demander si quelqu'un avait une question non liée aux NPCs. [12:19] Kayaker Magic: hehe [12:19] Jagga Meredith: i've got one too [12:20] Vincent.Sylvester @hg.zetaworlds.com:8002: "could not parse gatekeeper uri" [12:20] Vincent.Sylvester @hg.zetaworlds.com:8002: What did you set for that? [12:20] Andrew Hellershanks: The message states it is a bad URI. Have a look at the gatekeeper URI. Seems you have a syntax error in the file. [12:20] Andrew Hellershanks: Jagga, ok. You will be next. [12:20] Jagga Meredith: Faceboook is about to announce a name change due to their entry into the Metaverse, and will be hiring 80,000 people in Europe. Has anybody been approached? I'm not in Europe but I could use a job. [12:21] Kayaker Magic: there are several places in the example Robust.ini that talk about gatekeep3er, which one? [12:21] Andrew Hellershanks: Kayaker, which one have you changed? [12:21] Kayaker Magic: All of them, using constants, like: gatekeeper = ${Const|BaseURL}:${Const|PublicPort}/ [12:22] Kayaker Magic: That was in [FSASSETS] [12:22] Andrew Hellershanks: I can't find any reference to gatekeeper in robust.ini file. [12:22] Gavin.Hird @grid.xmir.org:8002: but it still use opensim.ini does it not? [12:23] Andrew Hellershanks: No. Robust doesn't use OS.ini [12:23] Gavin.Hird @grid.xmir.org:8002: ok [12:23] Gavin.Hird @grid.xmir.org:8002: and the files in config-include? [12:23] Ubit Umarov: ;# {GatekeeperURI} {Hypergrid} {The URL of the gatekeeper of this grid} {} ;; This is the address of the external robust server ;; that runs the Gatekeeper service, possibly this server. ;; For example http://myworld.com:8002 ;; This is a default that can be overwritten in some sections. ; GatekeeperURI = "${Const|BaseURL}:${Const|PublicPort}" ;# {GatekeeperURIAlias} {Hypergrid} {alternative hostnames (FQDN), or IPs of the gatekeeper of this grid and port (default 80 or 443 if alias starts with https://)} {} ;; comma separated list, ;; this is to allow this grid to identify this as references to itself ;; entries can be unsecure url (host:port) if using ssl, direct login url if different, old grid url, etc ; GatekeeperURIAlias = "login.osgrid.org" [12:23] Ubit Umarov: it is there [12:24] Kayaker Magic: Hmm. some have slashes at the end, some do not.... [12:25] Kayaker Magic: and I am using an IP address as the BaseURL for now, could that cause a problem? [12:25] Ubit Umarov: guess not [12:25] Andrew Hellershanks: Kayaker, in other ini files the gatekeeper URI doesn't end in a /. [12:25] Gavin.Hird @grid.xmir.org:8002: is it Robust.ini or Robust.HG.ini you have Kayaker? [12:25] Kayaker Magic: Started from .HG. [12:25] Gavin.Hird @grid.xmir.org:8002: ok [12:26] Gavin.Hird @grid.xmir.org:8002: GatekeeperServiceInConnector [12:27] Gavin.Hird @grid.xmir.org:8002: GatekeeperURI [12:27] Gavin.Hird @grid.xmir.org:8002: GatekeeperService [12:27] Gavin.Hird @grid.xmir.org:8002: are the 3 ones I have configured [12:28] Gavin.Hird @grid.xmir.org:8002: GatekeeperServiceInConnector = "8002/OpenSim.Server.Handlers.dll:GatekeeperServiceInConnector" [12:28] Andrew Hellershanks: Kayaker said it was the URI that has an error. [12:28] Gavin.Hird @grid.xmir.org:8002: GatekeeperURI = "http://grid.xmir.org:8002" [12:28] Kayaker Magic: After it prints that angry reqd message, it continues on and finishes starting up. [12:28] Gavin.Hird @grid.xmir.org:8002: gatekeeper = http://grid.xmir.org:8002 [12:29] Kayaker Magic: I tried removing that extra slash, same error. [12:29] Gavin.Hird @grid.xmir.org:8002: GatekeeperService = "OpenSim.Services.HypergridService.dll:GatekeeperService" [12:29] Kayaker Magic: I didn't change that line! [12:29] Andrew Hellershanks: Kayaker, Do you have any extra charactersin the Const declarations that could be causing trouble when it tries to put the pieces together? [12:30] Andrew Hellershanks: You can IM me the Const values [12:30] Andrew Hellershanks: Could it be a case of http vs https? [12:31] Kayaker Magic: BaseURL = "www.xxx.yyy.zzz" WebURL = "www.xxx.yyy.zzz" [12:31] Ubit Umarov: do you have GateKeeperURI defined? ( not GateKeeper) [12:31] Selby.Evans @grid.kitely.com:8002: must go -- bye all [12:31] Ubit Umarov: cya [12:31] Kayaker Magic: no.... [12:32] Ubit Umarov: GatekeeperURI = "${Const|BaseURL}:${Const|PublicPort}" [12:32] Gavin.Hird @grid.xmir.org:8002: you must have that one for it to work [12:32] Ubit Umarov: it is there on the example file [12:32] Andrew Hellershanks: Kayaker, you are missing the http:// part of BaseURL. [12:32] Kayaker Magic: Yes, lower case K in GatekeeperURI [12:33] Kayaker Magic: GatekeeperURI = "${Const|BaseURL}:${Const|PublicPort}" [12:33] Jamie.Jordan @grid.kitely.com:8002: I have to step out also. Have a great week yall [12:33] Andrew Hellershanks: ok, Jamie. See you next week. [12:33] Ubit Umarov: yeah http:// at start does help also :p [12:33] Gavin.Hird @grid.xmir.org:8002: does the ip address resolve isnde your fw? [12:34] Ubit Umarov: BaseURL = "http://www.xxx.yyy.zzz" [12:34] Kayaker Magic: I'll give that a try [12:34] Ubit Umarov: guess same for weburl [12:35] Andrew Hellershanks: yes. Same for weburl. [12:35] Andrew Hellershanks: The examples in the ini file show those settings starting with http:// [12:35] Kayaker Magic: YES! [12:35] Kayaker Magic: Starts with no errors now! [12:35] Jagga Meredith: woohoo [12:36] Kayaker Magic: Thank you! [12:36] Andrew Hellershanks: yw [12:36] Ubit Umarov: :) [12:36] Kayaker Magic: Jagga's turn!] [12:36] Andrew Hellershanks: I never questioned whether they should or should not start with http://. I just followed the example. [12:36] Ubit Umarov: better we end now before kayaker robust crashes elsewhere [12:36] Ubit Umarov: ;) [12:36] Andrew Hellershanks: Jagga, you can repeat your question as it was posted quite a while back now. [12:37] Jagga Meredith: agreed my questiion can wait a week [12:37] Jagga Meredith: Faceboook is about to announce a name change due to their entry into the Metaverse, and will be hiring 80,000 people in Europe. Has anybody been approached? I'm not in Europe but I could use a job. [12:37] Kayaker Magic: LOL, no my next crashes will be in OpenSim.ese.... [12:37] Ubit Umarov: ( i was kidding ) [12:37] Jagga Meredith: can of worms [12:37] Ubit Umarov: we have no relation with facebook [12:37] Andrew Hellershanks: I haven't been but I don't pay attention to Facebook. Don't use it. Have no interest in it. [12:37] Ubit Umarov: ask them [12:37] Jagga Meredith: ok, good [12:37] Jagga Meredith whispers: did that [12:38] Gavin.Hird @grid.xmir.org:8002: I'd use a variation of better dead than red about FB [12:38] Ubit Umarov: guess if they said europe workers that means europe [12:38] Jagga Meredith: yeah [12:39] Gavin.Hird @grid.xmir.org:8002: that creepy metaverse thing of FB of course requires you to be logged in to it all times [12:39] Ubit Umarov: they have a metaverse thing? [12:40] Ubit Umarov: :) [12:40] Gavin.Hird @grid.xmir.org:8002: that is why they will change the name and hire [12:40] Gavin.Hird @grid.xmir.org:8002: plus the Occulus mask [12:40] Gavin.Hird @grid.xmir.org:8002: requires FB login [12:40] Ubit Umarov: why not make a chip to put on babies brains? [12:40] Ubit Umarov: well we will be there.. one day [12:41] Ubit Umarov: or possible the baby just on a living tank [12:41] Ubit Umarov: ( yes i saw all the matrix movies ) [12:41] Gavin.Hird @grid.xmir.org:8002: the baby is actually redundant. just put the chip in the tank [12:41] Ubit Umarov: yeah :) [12:42] Gavin.Hird @grid.xmir.org:8002: wow [12:42] Ubit Umarov: that part of humans as energy source was.. bad :p [12:42] Andrew Hellershanks: We are at almost 15 minutes before the end of the second hour. Any last minute items before we wrap up todays meeting? [12:43] Ubit Umarov: machines can find a ton of things better than human bodies as energy source [12:43] Ubit Umarov: even if burning the bodies [12:43] Gavin.Hird @grid.xmir.org:8002: windmill? [12:44] Ubit Umarov: yeah that is better when ther is wind [12:44] Ubit Umarov: ( or humans blowing at it ) [12:44] Gavin.Hird @grid.xmir.org:8002: poor humans [12:44] Ubit Umarov: that may be a future job [12:44] Ubit Umarov: windmill blower [12:44] Jagga Meredith: kewl [12:44] Gavin.Hird @grid.xmir.org:8002: you know that each exhale has 40x the level of CO2 than the inhale [12:45] Andrew Hellershanks: I'd say we are done for today. Thank you all for coming. See you again next week.