MagicBuzz a écrit :
Effectivement, ici le uint16 n'avait aucun intérêt.
A la base j'étais parti sur ce type car je pensais avoir besoin de le stocker ensuite en mémoire dans une struct donc le nombre d'occurence peut atteindre plusieurs centaines de milliers (5000 véhicules de chacun des 4 types, et pour chacun des types de cargaisons -actuellement limité à 8, mais dont la limite va sauter avec un patch à venir permettant d'utiliser de nouveaux types d'industries, donc potentiellement au moins 256 types de cargo différents puisque j'imagine que le type de cargo sera stocké dans un byte -contre actuellement 3 bits d'un flag partagé-)
Mais bon, finalement je suis retourné au type byte, puisque de toute façon les valeurs > 255 ne m'intéressent pas, car le jeu ne fait pas de différence dans le prix de transport des cargaisons dépassé cette valeur
Index: src/economy.cpp
===================================================================
--- src/economy.cpp (revision 10550)
+++ src/economy.cpp (working copy)
@@ -1169,10 +1177,12 @@
{
const CargoSpec *cs = GetCargo(cargo_type);
byte f;
+ /* If playing with daylength correction, then take in account the real transit_days */
+ byte new_transit_days = min(transit_days * EconomyMultiplier(), 0xFF);
/* Use callback to calculate cargo profit, if available */
if (HASBIT(cs->callback_mask, CBM_CARGO_PROFIT_CALC)) {
- uint32 var18 = min(dist, 0xFFFF) | (min(num_pieces, 0xFF) << 16) | (transit_days << 24);
+ uint32 var18 = min(dist, 0xFFFF) | (min(num_pieces, 0xFF) << 16) | (new_transit_days << 24);
uint16 callback = GetCargoCallback(CBID_CARGO_PROFIT_CALC, 0, var18, cs);
if (callback != CALLBACK_FAILED) {
int result = GB(callback, 0, 14);
@@ -1192,23 +1202,29 @@
dist = 0;
f = 255;
- if (transit_days > cs->transit_days[0]) {
- transit_days -= cs->transit_days[0];
- f -= transit_days;
+ if (new_transit_days > cs->transit_days[0]) {
+ new_transit_days -= cs->transit_days[0];
+ f -= new_transit_days;
- if (transit_days > cs->transit_days[1]) {
- transit_days -= cs->transit_days[1];
+ if (new_transit_days > cs->transit_days[1]) {
+ new_transit_days -= cs->transit_days[1];
- if (f < transit_days) {
+ if (f < new_transit_days) {
f = 0;
} else {
- f -= transit_days;
+ f -= new_transit_days;
}
}
}
if (f < 31) f = 31;
+ /* If playing with daylength correction, then take in account the fact we do more transports */
+ return BIGMULSS(dist * f * num_pieces, _cargo_payment_rates[cargo_type], 21) / EconomyMultiplier();
}
static void DeliverGoodsToIndustry(TileIndex xy, CargoID cargo_type, int num_pieces)
|
Anyway De toute façon comme expliqué ici http://www.tt-forums.net/viewtopic [...] 54#p607654 et http://www.tt-forums.net/viewtopic [...] 73#p607773 mon approche est foireuse lorsqu'on a un grand coeff multiplicateur de temps :
-> Avec un temps multiplié par 30 (valeur maximale du patch que je tentais de corriger) si un véhicule met en temps normal 31 jours pour faire le trajet, alors le patch va me dire "2 jours" puisqu'il ne va incrémenter le jour que tous les 30 DayTicks. Du coup, avec mon calcul, je me retrouve avec 60 jours. Hors, entre 60 et 31 jours, l'écart de tarif peut être monstrueux, ce qui fait que le jeu se comporte vraiment très différement, et devient vraiment plus difficile. Il faudrait donc baser mon calcul non pas sur le nombre de jours, mais le nombre de ticks. Hors, après étude du code, deux choses ressortent : 1/ cela nécessiterait la réécriture de pas mal de code -trop pour moi, je suis une merde en C++, donc y'a pas moyen que je passe 10 jours à me rendre compte que je ne m'en sors pas- 2/ en plus, vu que je suis une quiche en C++, j'arrive même pas à trouver un point d'entrée pour l'appel de cette fonction : impossible de trouver où le calcul du nombre de jours de transport des cargaisons se fait... plus exactement j'ai plus ou moins trouvé, mais j'ai rien pigé, ils sont chiant à utiliser sans arrêt une fonction "DoCmd()", qui prend en paramètre un certain nombre de constantes qui font déterminer quelle fonction lancer... moi je suis paumé et j'arrive pas à suivre. Vu que mon VC++ refuse de tourner en mode débug pas à pas, je suis baisé pour trouver à coup sûr toutes les parties du code à modifier
Du coup le patch est mis de côté, et c'est le owner de la version "integrated" -version contenant tous les patchs intéressants candidats au tronc- qui va s'en occuper 
|