Ticket #42993

Wonders needlessly hard-coded to override the building upkeep specified in the ruleset.

Eröffnet am: 2021-10-07 19:09 Letztes Update: 2023-09-06 23:52

Auswertung:
Verantwortlicher:
(Keine)
Typ:
Status:
Offen
Komponente:
Meilenstein:
Priorität:
5 - Mittel
Schweregrad:
5 - Mittel
Lösung:
Keine
Datei:
Keine

Details

This bug was probably never found because the vast majority of wonders have 0 upkeep.

However, rulesets allow the ruleset designer to set the upkeep for any building or wonder. There is no need for the server to hard-code 0 upkeep for wonders to override the ruleset values.

file: city.js function: int city_improvement_upkeep(const struct city *pcity, const struct impr_type *b)

blamed lines:

if (is_wonder(b)) {
return 0;
}

Ticket-Verlauf (3/12 Historien)

2021-10-07 19:09 Aktualisiert von: lexxie9952
  • New Ticket "Wonders needlessly hard-coded to override the building upkeep specified in the ruleset." created
2021-10-07 22:22 Aktualisiert von: cazfi
Kommentar

When ever I've seen that part of the code, I've assumed that it's there for never ending to a situation where a Wonder would get sold for lack of funds. I've meant to check if server could nowadays handle selling of a wonder so that we could lift this restriction that wonders have no upkeep. It probably could - wonders just provide effects, and as those same effects could come from other sources more likely to disappear, the server must be prepared for their disappearance. The check here is ancient - predates introduction of the effects system in freeciv-2.0, probably even ruleset provided buildings data.

2021-10-07 22:38 Aktualisiert von: cazfi
Kommentar

As a quick test I removed the check, set Colossus upkeep to 50 so it would drain my balance to negative in a couple of turns, started game, founded my first city, set Colossus there in the editor, did "Turn Done" twice -> client shows negative balance for me, and server crashed.

2021-10-08 00:58 Aktualisiert von: ihnatus
Kommentar

Well, to allow wonders to have upkeep we should either make them sellable or handle negative treasury. I think we should have a special flag or even genus of "semi-wonders" that are unique for a player in a given moment but may be sold (like commercial Civ* Palace) or require upkeep. Alternatively, we could just have buildings count requirement somehow.

2021-10-08 01:29 Aktualisiert von: cazfi
Kommentar

So, the check is there for a reason and *not* needless. There is an issue with the current implementation that this override is silent, not warning ruleset author about the fact that things don't work quite like s/he expects. Will open a new ticket about that. Keeping this ticket for any future development to allow nonzero wonder upkeep.

2021-10-08 01:34 Aktualisiert von: cazfi
Kommentar

Reply To cazfi

There is an issue with the current implementation that this override is silent, not warning ruleset author about the fact that things don't work quite like s/he expects. Will open a new ticket about that.

-> #42994

2021-12-06 22:00 Aktualisiert von: None
Kommentar

I removed it and now can happily make upkeep for wonders. In this case, negative upkeep as a bonus for a certain wonder.

2022-01-06 02:45 Aktualisiert von: cazfi
Kommentar

First step towards this is #43556

2022-01-06 06:03 Aktualisiert von: lexxie9952
Kommentar

So this seems to be angled toward not allowing upkeep unless a building is sellable.

I am not sure if this is following a plan for compatibility with FCW and MP2 rulesets.

In particular, we have a wonder with negative upkeep (Hoover Dam) which relieves upkeep for other buildings in its own city.

I believe I see the case that bothers you. Someone has negative upkeep and here is no other building to sell that's left except a wonder.

Disallowing wonder upkeep for this almost never occurring case, it's not ideal. But I suppose you are thinking a special flag for wonders with upkeep that if they have positive upkeep they must be sellable. As ruleset designer I should have liked a discussion on where we might go with it.

2022-01-15 20:21 Aktualisiert von: cazfi
Kommentar

Reply To lexxie9952

In particular, we have a wonder with negative upkeep (Hoover Dam) which relieves upkeep for other buildings in its own city.

Could that particular use-case be achieved with Output_Bonus_Absolute (#43593), or is there some semantic reason it wouldn't work? I would think that it would work only better (not disabled by A.Smith, AI would evaluate the effect correctly)
That "building sellable" development has uses other than this ticket, so I think it should go forward even if we don't accept it as something that resolves this particular ticket. While the first step might be just a boolean, further development could be three-state definition; not sellable / only force-sellable by server / sellable also by user. In any case, we can't accept any solution that causes server to crash.
2022-01-16 17:29 Aktualisiert von: lexxie9952
Kommentar

It would then not be upkeep removal, but would turn to a profit in cities that don't have another other building upkeep.

We modified the return statement in this function /**********************************************************************//**

Returns the total amount of gold needed to pay for all buildings in the city.

**************************************************************************/ int city_total_impr_gold_upkeep(const struct city *pcity) {

int gold_needed = 0;
if (!pcity) {
return 0;
}
city_built_iterate(pcity, pimprove) {
gold_needed += city_improvement_upkeep(pcity, pimprove);
} city_built_iterate_end;
// Negative upkeep buildings provide infrastructural support on the // upkeep of other buildings but can't result in negative gold_needed: return gold_needed > 0 ? gold_needed : 0;

}

The effect is it reduces upkeep by up to that amount but never turns into a profit.

I don't mind doing some other way that creates the same result. But it is clearly not meant to be a profit, but a "removal of up to X from the sum of upkeeps of other buildings".

2023-09-06 23:52 Aktualisiert von: cazfi
  • Meilenstein Update from (Keine) to S3_2 d3f
  • Komponente Update from (Keine) to General

Dateianhangliste

Keine Anhänge

Bearbeiten

You are not logged in. I you are not logged in, your comment will be treated as an anonymous post. » Anmelden