9 posts :: Page 1 of 1
Par:    (Read 1318 times)  

Anonymous


Bonjour les accros :-)

Je sollicite vos lumières. En effet, j'ai une partie bien avancée sur OpenTTD 1.0.1. Je joue seul. Je suis en 2253. J'ai 230 trains, 84 navires et... 1593 véhicules. Le problème n'est pas tant dans le nombre de véhicules puisque je sais réhausser la limite, mais tient dans l'impossibilité qui m'est faite de donner un nouvel ordre à mon tout dernier tramway (le numéro 1593). Comme pour la vingtaine de tramways précédent et roulant sur la même ligne de ma deuxième grande ville (de 1.082.467 habitants), je cliquais sur "copier" l'itinéraire pour mettre le véhicule en service et l'itinéraire était vide. Je me suis vide rendu compte de l'erreur suivante :
"Impossible d'insérer un nouvel ordre... Plus de place pour les ordres".

Voilà, la partie est finie (pour l'instant). A moins que quelqu'un sache faire le réglage permettant d'allonger la base des listes d'ordres. Ce n'est pas un véhicule en particulier qui a trop d'ordres (les 20 trams précédents ont les mêmes). J'ai des lignes avec encore plus de stations. C'est qu'il n'y a tout simplement plus de place pour prendre d'ordres dans la partie.

Merci par avance pour vos lumières.

En récompense, je fournis ma dernière sauvegarde :-) Le compte est à 48 milliards de dollars ^^

Par:     

Anonymous


[quote author=yannzz link=topic=1247.msg13208#msg13208 date=1284494912]
"Impossible d'insérer un nouvel ordre... Plus de place pour les ordres".
[/quote]

PHP Formatted Code
<br />if (!Order::CanAllocateItem()) return_cmd_error(STR_ERROR_NO_MORE_SPACE_FOR_ORDERS);<br />...<br />FORCEINLINE bool CanAllocate(size_t n = 1)<br />{<br />&nbsp; &nbsp; &nbsp; &nbsp; return this->items <= Tmax_size - n;<br />}<br />


Il semblerait que tu ais touché le fond... La zone de stockage des ordres est pleine.

Par:     

Anonymous


Il me semble aussi, hélas ^^

Si quelqu'un sait comment agrandir cette zone, ce sera avec plaisir, et pour le grand confort du million d'habitants concerné =)

Par:     

Anonymous


Bravo Benoit pour la recherche.
Yannzz, il est "facile" d'augmenter la grosseur de la pool des ordres.
C'est un chiffre (64000) a changer dans  order_base.h, un des fichiers sources du programme.
Il y a surement d'autres endroits a visiter, je te dis sa rapidement...
Probleme : tu devras recompiler l'application.  Pas d'autres moyens

Par:     

Anonymous


Bonjour et merci pour vos recherches.

Toutefois, je ne sais pas où trouver le fichier "settings" dans lequel je dois trouver la rubrique "order_base.h". Je la vois bien sur internet, pour exemple, mais je ne trouve pas de document adéquat dans mes dossiers ? S'agit-il du fichier d'installation ?

Merci

Par:     

Anonymous


Non monsieur. il s'agit d'un des fichiers sources du programme.
C'est une des briques qui font OpenTTD.
Autrement dit, a moins de savoir compiler les sources (transformer un language "humain" en code machine), tu ne peut pas faire cette modification.

Par:     

Anonymous


c'est tout dans l'exe

Par:     

Anonymous


[quote author=Belugas link=topic=1247.msg13217#msg13217 date=1284572513]
C'est un chiffre (64000) a changer dans  order_base.h
[/quote]

Hop c'est ça :

PHP Formatted Code
typedef Pool<Order, OrderID, 256, 64000> OrderPool;<br />typedef Pool<OrderList, OrderListID, 128, 64000> OrderListPool;<br />


Si l'on change ceci dans son coin... on oublie les parties multi-joueurs  bbb

Ensuite vient le débat : Pourquoi une taille max et pas un truc qui s'auto-agrandit (rétrécit) quand il y en a besoin. Je n'ai pas encore dépioté le code de gestion d'un pool, mais il faut gérer les trucs détruits... Pourquoi ne pas utiliser les vecteurs du C++ (je ne sais pas non plus comment c'est géré...) ?

Par:     

Anonymous


Une limite de 64000 est une assez bonne limite déjà.  Très peu de gens ont réussi à se la taper.  Et si on  dis 128000, la même situation risque un jour de se produire.  Est-ce qu'il y aurait des impacts? DE quel ordre?  Est-ce qu'il n'y aurait pas lie de revoir les ordres de yannzz et de les optimiser?  Très possible, sans vouloir être baveux

Tu ne peux pas t'amuser à gérer les rétrécissements de ta pile si tes index sont toujours utilisés.  Imagines, index 10 dis : Vas a la station et décharge. Mais index 9 vient d’être détruit par l'usager, donc, 10 devient 9 et tu te retrouves avec un ordre invalide en 10.
De l'autre côté, oui, tu pourrais avoir une table de correspondance entre la nouvelle position et l'index fourni à l'objet initial.  Mais entre toi et moi, c'est pas un BD SQL qu'on gère, c'est une série d'ordres (entre autre).  Donc, ça risque de devenir pas mal trop complexe pour si peu de gain.

Je ne connais pas non plus toutes les finesses des pools.  Ce que je sais, c'est que sa prends des limites.
Si j'ai bonne souvenance, les pools ne sont pas statiques, dans le sens ou elles n'occupent pas l'espace maximum.  Les peuvent aller jusqu'à x valeurs (ici, c'est 64000).

Maintenant, pour ce qui est des vecteurs, on a essayé, je crois me souvenir.  Et à cause de certaines implémentations sous certaines plateformes, des bugs assez dérangeants apparaissaient ici et la.  Donc, vive les Memory Pools, version 2.
Maintenant, libre a toi de me prouver qu'une autre méthode pourrait faire mieux sous toutes les plateformes, sous tous les compilateurs.  J'ai rien contre.
Au contraire, je serais très intéressé.

P.S.: J'ai oublié... il y a aussi l'espace disponible à vérifier dans les functions commands qui processent les véhicules.  Je ne suis pas sur du tout (ironique) qu'elles prennent des valeurs infinies, ou du moins gigantesques...
Pas le temps de vérifier, en ce moment, mais je serais pas surpris de voir une relation entre 64000 et 65365, si tu vous ce que je veux dire...

9 posts :: Page 1 of 1