diff --git a/src/lang/croatian.txt b/src/lang/croatian.txt index 4ffa77d72c..4062e6aa17 100644 --- a/src/lang/croatian.txt +++ b/src/lang/croatian.txt @@ -960,6 +960,7 @@ STR_NEWS_NEW_VEHICLE_NOW_AVAILABLE :{BIG_FONT}{BLAC STR_NEWS_NEW_VEHICLE_TYPE :{BIG_FONT}{BLACK}{ENGINE} STR_NEWS_NEW_VEHICLE_NOW_AVAILABLE_WITH_TYPE :{BLACK}Novi {STRING} je sada dostupan! - {ENGINE} +STR_NEWS_SHOW_VEHICLE_GROUP_TOOLTIP :{BLACK}Otvori prozor grupe fokusiran na grupu odabranog vozila STR_NEWS_STATION_NO_LONGER_ACCEPTS_CARGO :{WHITE}{STATION} više ne prihvaća {STRING.aku} STR_NEWS_STATION_NO_LONGER_ACCEPTS_CARGO_OR_CARGO :{WHITE}{STATION} više ne prihvaća {STRING.aku} ili {STRING.aku} @@ -1404,6 +1405,8 @@ STR_CONFIG_SETTING_POPULATION_IN_LABEL :Prikaži broj s STR_CONFIG_SETTING_POPULATION_IN_LABEL_HELPTEXT :Prikaži broj stanovnika uz nazive gradova na karti STR_CONFIG_SETTING_GRAPH_LINE_THICKNESS :Debljina linija u grafikonima: {STRING} STR_CONFIG_SETTING_GRAPH_LINE_THICKNESS_HELPTEXT :Debljina linije u grafikonima. Tanja linija je preciznija za čitanje, deblja linija je lakša za vidjeti i boje su lakše za razabrati +STR_CONFIG_SETTING_SHOW_NEWGRF_NAME :Prikaži ime NewGRF-a u prozoru za izgradnju vozila: {STRING} +STR_CONFIG_SETTING_SHOW_NEWGRF_NAME_HELPTEXT :Dodaj redak u prozor izgradnje vozila koji će pokazati iz kojeg NewGRF-a dolazi odabrano vozilo. STR_CONFIG_SETTING_LANDSCAPE :Krajolik: {STRING} STR_CONFIG_SETTING_LANDSCAPE_HELPTEXT :Tereni određuju osnovne scenarije za igru s različitim teretima i preduvjetima za rast gradova. NewGRF-ovi i Skripte Igre omogućavaju detaljnije kontrole i postavke. @@ -1641,6 +1644,10 @@ STR_CONFIG_SETTING_NEWS_MESSAGES_FULL :Sve STR_CONFIG_SETTING_COLOURED_NEWS_YEAR :Vijesti u boji pojavljuju se: {STRING} STR_CONFIG_SETTING_COLOURED_NEWS_YEAR_HELPTEXT :Godina u kojoj će se novine početi izdavati u boji. Prije ove godine, koriste se crno/bijele novine STR_CONFIG_SETTING_STARTING_YEAR :Početna godina: {STRING} +STR_CONFIG_SETTING_ENDING_YEAR :Godina kraja bodovanja: {STRING} +STR_CONFIG_SETTING_ENDING_YEAR_HELPTEXT :Godina koje igra završava u smislu bodovanja. Na kraju ove godine, bilježe se bodovi kompanije i prikazuje se tablica najviših bodova ali igrači mogu nastaviti igru.{}Ako je ovo prije početne godine, tablica najviših bodova se nikada neće prikazati. +STR_CONFIG_SETTING_ENDING_YEAR_VALUE :{NUM} +STR_CONFIG_SETTING_ENDING_YEAR_ZERO :Nikada STR_CONFIG_SETTING_SMOOTH_ECONOMY :Uključi stabilno gospodarstvo (više manjih izazova): {STRING} STR_CONFIG_SETTING_SMOOTH_ECONOMY_HELPTEXT :Kada je uključeno, promjene u industrijskoj proizvodnji su češće ali u manjim rasponima. Ova postavka obično nema efekta ukoliko su industrije postavljene iz nekog NewGRF-a STR_CONFIG_SETTING_ALLOW_SHARES :Dopusti kupovanje udjela u drugim tvrtkama: {STRING} @@ -2254,6 +2261,7 @@ STR_NETWORK_ERROR_WRONG_PASSWORD :{WHITE}Pogrešn STR_NETWORK_ERROR_SERVER_FULL :{WHITE}Poslužitelj je pun STR_NETWORK_ERROR_SERVER_BANNED :{WHITE}Zabranjen ti je pristup ovom poslužitelju STR_NETWORK_ERROR_KICKED :{WHITE}Izbačen si iz igre +STR_NETWORK_ERROR_KICK_MESSAGE :{WHITE}Razlog: {STRING} STR_NETWORK_ERROR_CHEATER :{WHITE}Na ovome poslužitelju varanje nije dopušteno STR_NETWORK_ERROR_TOO_MANY_COMMANDS :{WHITE}Slali ste previše naredbi na server STR_NETWORK_ERROR_TIMEOUT_PASSWORD :{WHITE}Trebalo vam je previše vremena za unošenje lozinke @@ -2313,6 +2321,7 @@ STR_NETWORK_MESSAGE_GIVE_MONEY :*** {STRING} je STR_NETWORK_MESSAGE_GAVE_MONEY_AWAY :*** Dao si {1:STRING} {2:CURRENCY_LONG} STR_NETWORK_MESSAGE_SERVER_SHUTDOWN :{WHITE}Poslužitelj je zatvorio sesiju STR_NETWORK_MESSAGE_SERVER_REBOOT :{WHITE}Poslužitelj se ponovno pokreće...{}Molimo pričekajte... +STR_NETWORK_MESSAGE_KICKED :*** {STRING} je izbačen. Razlog: ({STRING}) # Content downloading window STR_CONTENT_TITLE :{WHITE}Preuzimanje sadržaja @@ -3489,6 +3498,10 @@ STR_INDUSTRY_DIRECTORY_ITEM_PROD2 :{ORANGE}{INDUST STR_INDUSTRY_DIRECTORY_ITEM_PROD3 :{ORANGE}{INDUSTRY} {STRING}, {STRING}, {STRING} STR_INDUSTRY_DIRECTORY_ITEM_PRODMORE :{ORANGE}{INDUSTRY} {STRING}, {STRING}, {STRING} i {NUM} više... STR_INDUSTRY_DIRECTORY_LIST_CAPTION :{BLACK}Imena industrija - za centriranje pogleda klikni na ime. Ctrl+klik otvara novi prozor sa lokacijom industrije +STR_INDUSTRY_DIRECTORY_ACCEPTED_CARGO_FILTER :{BLACK}Prihvaćeni teret: {SILVER}{STRING} +STR_INDUSTRY_DIRECTORY_PRODUCED_CARGO_FILTER :{BLACK}Proizvedeni teret: {SILVER}{STRING} +STR_INDUSTRY_DIRECTORY_FILTER_ALL_TYPES :Sve vrste tereta +STR_INDUSTRY_DIRECTORY_FILTER_NONE :Ništa # Industry view STR_INDUSTRY_VIEW_CAPTION :{WHITE}{INDUSTRY} @@ -4263,6 +4276,13 @@ STR_AI_LIST_ACCEPT_TOOLTIP :{BLACK}Odaberi STR_AI_LIST_CANCEL :{BLACK}Odustani STR_AI_LIST_CANCEL_TOOLTIP :{BLACK}Nemoj mijenjati skriptu +STR_SCREENSHOT_CAPTION :{WHITE}Napravi sliku zaslova +STR_SCREENSHOT_SCREENSHOT :{BLACK}Normalna snimka zaslona +STR_SCREENSHOT_ZOOMIN_SCREENSHOT :{BLACK}Maksimalno zumirana slika zaslona +STR_SCREENSHOT_DEFAULTZOOM_SCREENSHOT :{BLACK}Snimka ekrana sa zumom osnovne postavke +STR_SCREENSHOT_WORLD_SCREENSHOT :{BLACK}Slika cijele mape +STR_SCREENSHOT_HEIGHTMAP_SCREENSHOT :{BLACK}Slika visinske mape +STR_SCREENSHOT_MINIMAP_SCREENSHOT :{BLACK}Slika mini-mape # AI Parameters STR_AI_SETTINGS_CAPTION :{WHITE}{STRING} Parametri diff --git a/src/network/network.cpp b/src/network/network.cpp index 6e5f34add9..b770247580 100644 --- a/src/network/network.cpp +++ b/src/network/network.cpp @@ -940,7 +940,8 @@ void NetworkGameLoop() cp.reset(new CommandPacket()); int company; cp->text.resize(MAX_CMD_TEXT_LENGTH); - int ret = sscanf(p, "date{%x; %x; %x}; company: %x; tile: %x (%*u x %*u); p1: %x; p2: %x; cmd: %x; \"%[^\"]\"", &next_date, &next_date_fract, &next_tick_skip_counter, &company, &cp->tile, &cp->p1, &cp->p2, &cp->cmd, const_cast(cp->text.c_str())); + assert_compile(MAX_CMD_TEXT_LENGTH > 8192); + int ret = sscanf(p, "date{%x; %x; %x}; company: %x; tile: %x (%*u x %*u); p1: %x; p2: %x; cmd: %x; \"%8192[^\"]\"", &next_date, &next_date_fract, &next_tick_skip_counter, &company, &cp->tile, &cp->p1, &cp->p2, &cp->cmd, const_cast(cp->text.c_str())); /* There are 9 pieces of data to read, however the last is a * string that might or might not exist. Ignore it if that * string misses because in 99% of the time it's not used. */ diff --git a/src/news_gui.cpp b/src/news_gui.cpp index f963a876a4..01b69677e3 100644 --- a/src/news_gui.cpp +++ b/src/news_gui.cpp @@ -44,6 +44,7 @@ const NewsItem *_statusbar_news_item = nullptr; static uint MIN_NEWS_AMOUNT = 30; ///< preferred minimum amount of news messages +static uint MAX_NEWS_AMOUNT = 1 << 10; ///< Do not exceed this number of news messages static uint _total_news = 0; ///< current number of news items static NewsItem *_oldest_news = nullptr; ///< head of news items queue NewsItem *_latest_news = nullptr; ///< tail of news items queue @@ -729,6 +730,50 @@ static void MoveToNextNewsItem() } } +/** Delete a news item from the queue */ +static void DeleteNewsItem(NewsItem *ni) +{ + /* Delete the news from the news queue. */ + if (ni->prev != nullptr) { + ni->prev->next = ni->next; + } else { + assert(_oldest_news == ni); + _oldest_news = ni->next; + } + + if (ni->next != nullptr) { + ni->next->prev = ni->prev; + } else { + assert(_latest_news == ni); + _latest_news = ni->prev; + } + + _total_news--; + + if (_forced_news == ni || _current_news == ni) { + /* When we're the current news, go to the previous item first; + * we just possibly made that the last news item. */ + if (_current_news == ni) _current_news = ni->prev; + + /* About to remove the currently forced item (shown as newspapers) || + * about to remove the currently displayed item (newspapers) */ + MoveToNextNewsItem(); + } + + if (_statusbar_news_item == ni) { + /* When we're the current news, go to the previous item first; + * we just possibly made that the last news item. */ + _statusbar_news_item = ni->prev; + + /* About to remove the currently displayed item (ticker, or just a reminder) */ + MoveToNextTickerItem(); + } + + delete ni; + + SetWindowDirty(WC_MESSAGE_HISTORY, 0); +} + /** * Add a new newsitem to be shown. * @param string String to display @@ -777,6 +822,11 @@ void AddNewsItem(StringID string, NewsType type, NewsFlag flags, NewsReferenceTy ni->next = nullptr; _latest_news = ni; + /* Keep the number of stored news items to a managable number */ + if (_total_news > MAX_NEWS_AMOUNT) { + DeleteNewsItem(_oldest_news); + } + SetWindowDirty(WC_MESSAGE_HISTORY, 0); } @@ -844,50 +894,6 @@ CommandCost CmdCustomNewsItem(TileIndex tile, DoCommandFlag flags, uint32 p1, ui return CommandCost(); } -/** Delete a news item from the queue */ -static void DeleteNewsItem(NewsItem *ni) -{ - /* Delete the news from the news queue. */ - if (ni->prev != nullptr) { - ni->prev->next = ni->next; - } else { - assert(_oldest_news == ni); - _oldest_news = ni->next; - } - - if (ni->next != nullptr) { - ni->next->prev = ni->prev; - } else { - assert(_latest_news == ni); - _latest_news = ni->prev; - } - - _total_news--; - - if (_forced_news == ni || _current_news == ni) { - /* When we're the current news, go to the previous item first; - * we just possibly made that the last news item. */ - if (_current_news == ni) _current_news = ni->prev; - - /* About to remove the currently forced item (shown as newspapers) || - * about to remove the currently displayed item (newspapers) */ - MoveToNextNewsItem(); - } - - if (_statusbar_news_item == ni) { - /* When we're the current news, go to the previous item first; - * we just possibly made that the last news item. */ - _statusbar_news_item = ni->prev; - - /* About to remove the currently displayed item (ticker, or just a reminder) */ - MoveToNextTickerItem(); - } - - delete ni; - - SetWindowDirty(WC_MESSAGE_HISTORY, 0); -} - /** * Delete a news item type about a vehicle. * When the news item type is INVALID_STRING_ID all news about the vehicle gets deleted. diff --git a/src/script/api/script_company.cpp b/src/script/api/script_company.cpp index 873475f0aa..5769c97faa 100644 --- a/src/script/api/script_company.cpp +++ b/src/script/api/script_company.cpp @@ -27,11 +27,11 @@ /* static */ ScriptCompany::CompanyID ScriptCompany::ResolveCompanyID(ScriptCompany::CompanyID company) { if (company == COMPANY_SELF) { - if (!::Company::IsValidID((::CompanyID)_current_company)) return COMPANY_INVALID; + if (!::Company::IsValidID(_current_company)) return COMPANY_INVALID; return (CompanyID)((byte)_current_company); } - return ::Company::IsValidID((::CompanyID)company) ? company : COMPANY_INVALID; + return ::Company::IsValidID(company) ? company : COMPANY_INVALID; } /* static */ bool ScriptCompany::IsMine(ScriptCompany::CompanyID company) @@ -116,9 +116,9 @@ if (quarter > EARLIEST_QUARTER) return -1; if (quarter == CURRENT_QUARTER) { - return ::Company::Get((::CompanyID)company)->cur_economy.income; + return ::Company::Get(company)->cur_economy.income; } - return ::Company::Get((::CompanyID)company)->old_economy[quarter - 1].income; + return ::Company::Get(company)->old_economy[quarter - 1].income; } /* static */ Money ScriptCompany::GetQuarterlyExpenses(ScriptCompany::CompanyID company, uint32 quarter) @@ -128,9 +128,9 @@ if (quarter > EARLIEST_QUARTER) return -1; if (quarter == CURRENT_QUARTER) { - return ::Company::Get((::CompanyID)company)->cur_economy.expenses; + return ::Company::Get(company)->cur_economy.expenses; } - return ::Company::Get((::CompanyID)company)->old_economy[quarter - 1].expenses; + return ::Company::Get(company)->old_economy[quarter - 1].expenses; } /* static */ int32 ScriptCompany::GetQuarterlyCargoDelivered(ScriptCompany::CompanyID company, uint32 quarter) @@ -140,9 +140,9 @@ if (quarter > EARLIEST_QUARTER) return -1; if (quarter == CURRENT_QUARTER) { - return ::Company::Get((::CompanyID)company)->cur_economy.delivered_cargo.GetSum >(); + return ::Company::Get(company)->cur_economy.delivered_cargo.GetSum >(); } - return ::Company::Get((::CompanyID)company)->old_economy[quarter - 1].delivered_cargo.GetSum >(); + return ::Company::Get(company)->old_economy[quarter - 1].delivered_cargo.GetSum >(); } /* static */ int32 ScriptCompany::GetQuarterlyPerformanceRating(ScriptCompany::CompanyID company, uint32 quarter) @@ -152,7 +152,7 @@ if (quarter > EARLIEST_QUARTER) return -1; if (quarter == CURRENT_QUARTER) return -1; - return ::Company::Get((::CompanyID)company)->old_economy[quarter - 1].performance_history; + return ::Company::Get(company)->old_economy[quarter - 1].performance_history; } /* static */ Money ScriptCompany::GetQuarterlyCompanyValue(ScriptCompany::CompanyID company, uint32 quarter) @@ -162,9 +162,9 @@ if (quarter > EARLIEST_QUARTER) return -1; if (quarter == CURRENT_QUARTER) { - return ::CalculateCompanyValue(::Company::Get((::CompanyID)company)); + return ::CalculateCompanyValue(::Company::Get(company)); } - return ::Company::Get((::CompanyID)company)->old_economy[quarter - 1].company_value; + return ::Company::Get(company)->old_economy[quarter - 1].company_value; } @@ -173,7 +173,7 @@ company = ResolveCompanyID(company); if (company == COMPANY_INVALID) return -1; - return ::Company::Get((CompanyID)company)->money; + return ::Company::Get(company)->money; } /* static */ Money ScriptCompany::GetLoanAmount() @@ -250,7 +250,7 @@ company = ResolveCompanyID(company); if (company == COMPANY_INVALID) return INVALID_TILE; - TileIndex loc = ::Company::Get((CompanyID)company)->location_of_HQ; + TileIndex loc = ::Company::Get(company)->location_of_HQ; return (loc == 0) ? INVALID_TILE : loc; } @@ -264,7 +264,7 @@ company = ResolveCompanyID(company); if (company == COMPANY_INVALID) return false; - return ::Company::Get((CompanyID)company)->settings.engine_renew; + return ::Company::Get(company)->settings.engine_renew; } /* static */ bool ScriptCompany::SetAutoRenewMonths(int16 months) @@ -277,7 +277,7 @@ company = ResolveCompanyID(company); if (company == COMPANY_INVALID) return 0; - return ::Company::Get((CompanyID)company)->settings.engine_renew_months; + return ::Company::Get(company)->settings.engine_renew_months; } /* static */ bool ScriptCompany::SetAutoRenewMoney(Money money) @@ -292,7 +292,7 @@ company = ResolveCompanyID(company); if (company == COMPANY_INVALID) return 0; - return ::Company::Get((CompanyID)company)->settings.engine_renew_money; + return ::Company::Get(company)->settings.engine_renew_money; } /* static */ bool ScriptCompany::SetPrimaryLiveryColour(LiveryScheme scheme, Colours colour) diff --git a/src/station_cmd.cpp b/src/station_cmd.cpp index c94945ad6a..49a3c624e2 100644 --- a/src/station_cmd.cpp +++ b/src/station_cmd.cpp @@ -394,13 +394,10 @@ void Station::GetTileArea(TileArea *ta, StationType type) const case STATION_DOCK: case STATION_OILRIG: *ta = this->docking_station; - break; + return; default: NOT_REACHED(); } - - ta->w = 1; - ta->h = 1; } /**