Merge branch 'house_placing' into jgrpp

This commit is contained in:
Jonathan G Rennison
2015-09-21 22:17:37 +01:00
13 changed files with 202 additions and 140 deletions

View File

@@ -174,6 +174,7 @@ install: bundle
$(Q)install -d "$(INSTALL_BINARY_DIR)"
$(Q)install -d "$(INSTALL_ICON_DIR)"
$(Q)install -d "$(INSTALL_DATA_DIR)/ai"
$(Q)install -d "$(INSTALL_DATA_DIR)/game"
$(Q)install -d "$(INSTALL_DATA_DIR)/baseset"
$(Q)install -d "$(INSTALL_DATA_DIR)/lang"
$(Q)install -d "$(INSTALL_DATA_DIR)/scripts"
@@ -184,6 +185,7 @@ else
endif
$(Q)install -m 644 "$(BUNDLE_DIR)/lang/"* "$(INSTALL_DATA_DIR)/lang"
$(Q)install -m 644 "$(BUNDLE_DIR)/ai/"* "$(INSTALL_DATA_DIR)/ai"
$(Q)install -m 644 "$(BUNDLE_DIR)/game/"* "$(INSTALL_DATA_DIR)/game"
$(Q)install -m 644 "$(BUNDLE_DIR)/baseset/"* "$(INSTALL_DATA_DIR)/baseset"
$(Q)install -m 644 "$(BUNDLE_DIR)/data/"* "$(INSTALL_DATA_DIR)/data"
$(Q)install -m 644 "$(BUNDLE_DIR)/scripts/"* "$(INSTALL_DATA_DIR)/scripts"

View File

@@ -3009,7 +3009,7 @@ STR_TOWN_VIEW_RENAME_TOWN_BUTTON :도시 이름
# Town local authority window
STR_LOCAL_AUTHORITY_CAPTION :{WHITE}{TOWN} 지역 당국
STR_LOCAL_AUTHORITY_COMPANY_RATINGS :{BLACK}회사 운송 성취도:
STR_LOCAL_AUTHORITY_COMPANY_RATINGS :{BLACK}회사에 대한 이 도시의 평판:
STR_LOCAL_AUTHORITY_COMPANY_RATING :{YELLOW}{COMPANY} {COMPANY_NUM}: {ORANGE}{STRING}
STR_LOCAL_AUTHORITY_ACTIONS_TITLE :{BLACK}가능한 행동:
STR_LOCAL_AUTHORITY_ACTIONS_TOOLTIP :{BLACK}이 도시에 할 수 있는 일 목록 - 상세 정보를 보시려면 클릭하세요

View File

@@ -512,7 +512,7 @@ STR_TOOLBAR_TOOLTIP_DISPLAY_LIST_OF_COMPANY_STATIONS :{BLACK}Monstrar
STR_TOOLBAR_TOOLTIP_DISPLAY_COMPANY_FINANCES :{BLACK}Monstrare res fiscales societatis
STR_TOOLBAR_TOOLTIP_DISPLAY_COMPANY_GENERAL :{BLACK}Monstrare facta generalia societatis
STR_TOOLBAR_TOOLTIP_DISPLAY_STORY_BOOK :{BLACK}Monstrare librum fabularum
STR_TOOLBAR_TOOLTIP_DISPLAY_GOALS_LIST :{BLACK}Monstrare indicem metarum
STR_TOOLBAR_TOOLTIP_DISPLAY_GOALS_LIST :{BLACK}Monstrare indicem propositorum
STR_TOOLBAR_TOOLTIP_DISPLAY_GRAPHS :{BLACK}Monstrare formulas graphicas
STR_TOOLBAR_TOOLTIP_DISPLAY_COMPANY_LEAGUE :{BLACK}Monstrare album foederis societatum
STR_TOOLBAR_TOOLTIP_FUND_CONSTRUCTION_OF_NEW :{BLACK}Industriam novam condere vel monstrare indicem industriarum
@@ -526,11 +526,11 @@ STR_TOOLBAR_TOOLTIP_BUILD_RAILROAD_TRACK :{BLACK}Struere
STR_TOOLBAR_TOOLTIP_BUILD_ROADS :{BLACK}Struere vias
STR_TOOLBAR_TOOLTIP_BUILD_SHIP_DOCKS :{BLACK}Struere navalia
STR_TOOLBAR_TOOLTIP_BUILD_AIRPORTS :{BLACK}Struere aeroportus
STR_TOOLBAR_TOOLTIP_LANDSCAPING :{BLACK}Monstrare terrae arcam ferramentorum qua potes terram augere/minuere, arbores serere, etc.
STR_TOOLBAR_TOOLTIP_LANDSCAPING :{BLACK}Monstrare terrae arcam instrumentorum qua potes terram augere/minuere, arbores serere, etc.
STR_TOOLBAR_TOOLTIP_SHOW_SOUND_MUSIC_WINDOW :{BLACK}Monstrare fenestram soni musicaeque
STR_TOOLBAR_TOOLTIP_SHOW_LAST_MESSAGE_NEWS :{BLACK}Monstrare nuntium novissimum sive optiones nuntii
STR_TOOLBAR_TOOLTIP_LAND_BLOCK_INFORMATION :{BLACK}Indicia terrae regionis, consola, emendatio scripti, imagines conspectus, de OpenTTD
STR_TOOLBAR_TOOLTIP_SWITCH_TOOLBAR :{BLACK}Mutare inter arcas ferramentorum
STR_TOOLBAR_TOOLTIP_SWITCH_TOOLBAR :{BLACK}Mutare inter arcas instrumentorum
# Extra tooltips for the scenario editor toolbar
STR_SCENEDIT_TOOLBAR_TOOLTIP_SAVE_SCENARIO_LOAD_SCENARIO :{BLACK}Servare scaenarium, legere scaenarium, relinquere scriptorium scaenarii, exire
@@ -1507,7 +1507,7 @@ STR_CONFIG_SETTING_TREE_PLACER_ORIGINAL :Originalis
STR_CONFIG_SETTING_TREE_PLACER_IMPROVED :Melior
STR_CONFIG_SETTING_ROAD_SIDE :Vehicula viaria: {STRING}
STR_CONFIG_SETTING_ROAD_SIDE_HELPTEXT :Eligere latus viae gubernandi
STR_CONFIG_SETTING_HEIGHTMAP_ROTATION :Circuitus tabulae altitudinum: {STRING}
STR_CONFIG_SETTING_HEIGHTMAP_ROTATION :Rotatio tabulae altitudinum: {STRING}
STR_CONFIG_SETTING_HEIGHTMAP_ROTATION_COUNTER_CLOCKWISE :Sinistrorsus
STR_CONFIG_SETTING_HEIGHTMAP_ROTATION_CLOCKWISE :Dextrorsus
STR_CONFIG_SETTING_SE_FLAT_WORLD_HEIGHT :Altitudo scaenario plano data: {STRING}
@@ -1518,8 +1518,8 @@ STR_CONFIG_SETTING_STATION_SPREAD :Spatium station
STR_CONFIG_SETTING_STATION_SPREAD_HELPTEXT :Area maxima in qua partes stationum possunt esse sita. Cave, numeris spatii magnis, ludus lentus sit
STR_CONFIG_SETTING_SERVICEATHELIPAD :Ministrare helicoptera automatice in helicopterariis: {STRING}
STR_CONFIG_SETTING_SERVICEATHELIPAD_HELPTEXT :Ministrare helicoptera post quemque appulsum, etsi non est tugurium portui
STR_CONFIG_SETTING_LINK_TERRAFORM_TOOLBAR :Connectere terrae arcam ferramentorum arcis ferriviariae/viariae/aquariae/aeriae ferramentorum: {STRING}
STR_CONFIG_SETTING_LINK_TERRAFORM_TOOLBAR_HELPTEXT :Cum arca ferramentorum constructionis aperitur, etiam plasmationis terrae arca ferramentorum aperitur
STR_CONFIG_SETTING_LINK_TERRAFORM_TOOLBAR :Connectere terrae arcam instrumentorum arcis ferriviariae/viariae/aquariae/aeriae instrumentorum: {STRING}
STR_CONFIG_SETTING_LINK_TERRAFORM_TOOLBAR_HELPTEXT :Cum arca instrumentorum constructionis aperitur, etiam plasmationis terrae arca instrumentorum aperitur
STR_CONFIG_SETTING_SMALLMAP_LAND_COLOUR :Color terrae in tabula adhibitus: {STRING}
STR_CONFIG_SETTING_SMALLMAP_LAND_COLOUR_HELPTEXT :Color terrae in tabula geographica parva
STR_CONFIG_SETTING_SMALLMAP_LAND_COLOUR_GREEN :Viridis
@@ -1756,8 +1756,8 @@ STR_CONFIG_SETTING_EXTRA_TREE_PLACEMENT_NONE :Nulla {RED}(rum
STR_CONFIG_SETTING_EXTRA_TREE_PLACEMENT_RAINFOREST :Modo in silvis plivualibus
STR_CONFIG_SETTING_EXTRA_TREE_PLACEMENT_ALL :Ubique
STR_CONFIG_SETTING_TOOLBAR_POS :Locus primariae arcae ferramentorum: {STRING}
STR_CONFIG_SETTING_TOOLBAR_POS_HELPTEXT :Locus horizontalis arcae ferramentorum primariae apud apicem fenestrae
STR_CONFIG_SETTING_TOOLBAR_POS :Locus primariae arcae instrumentorum: {STRING}
STR_CONFIG_SETTING_TOOLBAR_POS_HELPTEXT :Locus horizontalis arcae instrumentorum primariae apud apicem fenestrae
STR_CONFIG_SETTING_STATUSBAR_POS :Locus serae status: {STRING}
STR_CONFIG_SETTING_STATUSBAR_POS_HELPTEXT :Locus horizontalis serae status apud infimam partem fenestrae
STR_CONFIG_SETTING_SNAP_RADIUS :Radius fenestrae adhaerendae: {STRING}
@@ -2951,7 +2951,7 @@ STR_MAPGEN_BORDER_RANDOM :{BLACK}Fortuiti
STR_MAPGEN_BORDER_RANDOMIZE :{BLACK}Fortuiti
STR_MAPGEN_BORDER_MANUAL :{BLACK}Manu
STR_MAPGEN_HEIGHTMAP_ROTATION :{BLACK}Circuitus tabulae altitudinum:
STR_MAPGEN_HEIGHTMAP_ROTATION :{BLACK}Rotatio tabulae altitudinum:
STR_MAPGEN_HEIGHTMAP_NAME :{BLACK}Nomen tabulae altitudinum:
STR_MAPGEN_HEIGHTMAP_SIZE_LABEL :{BLACK}Magnitudo:
STR_MAPGEN_HEIGHTMAP_SIZE :{ORANGE}{NUM} x {NUM}
@@ -3236,16 +3236,16 @@ STR_LOCAL_AUTHORITY_ACTION_TOOLTIP_EXCLUSIVE_TRANSPORT :{YELLOW}Emere m
STR_LOCAL_AUTHORITY_ACTION_TOOLTIP_BRIBE :{YELLOW}Largiri auctoritatem vicinalem ut tua censio augeatur, at difficultas adest: forsitan animadvertaris et graviter puniaris.{}Pretium: {CURRENCY_LONG}
# Goal window
STR_GOALS_CAPTION :{WHITE}{COMPANY} Metae
STR_GOALS_SPECTATOR_CAPTION :{WHITE}Metae Globales
STR_GOALS_GLOBAL_TITLE :{BLACK}Metae globales:
STR_GOALS_CAPTION :{WHITE}{COMPANY} Proposita
STR_GOALS_SPECTATOR_CAPTION :{WHITE}Proposita Universalia
STR_GOALS_GLOBAL_TITLE :{BLACK}Proposita universalia:
STR_GOALS_TEXT :{ORANGE}{STRING}
STR_GOALS_NONE :{ORANGE}- Nullae -
STR_GOALS_SPECTATOR_NONE :{ORANGE}- Non applicabiles -
STR_GOALS_PROGRESS :{ORANGE}{STRING}
STR_GOALS_PROGRESS_COMPLETE :{GREEN}{STRING}
STR_GOALS_COMPANY_TITLE :{BLACK}Metae Societatis:
STR_GOALS_TOOLTIP_CLICK_ON_SERVICE_TO_CENTER :{BLACK}Preme in metam ut conspectus moveatur supra industriam/oppidum/tegulam. Ctrl+Preme ut nova fenestra conspectus aperiatur supra industriam/oppidum/tegulam
STR_GOALS_COMPANY_TITLE :{BLACK}Proposita Societatis:
STR_GOALS_TOOLTIP_CLICK_ON_SERVICE_TO_CENTER :{BLACK}Preme in propositum ut conspectus moveatur supra industriam/oppidum/tegulam. Ctrl+Preme ut nova fenestra conspectus aperiatur supra industriam/oppidum/tegulam
# Goal question window
STR_GOAL_QUESTION_CAPTION_QUESTION :Quaestio
@@ -3285,7 +3285,7 @@ STR_SUBSIDIES_TOOLTIP_CLICK_ON_SERVICE_TO_CENTER :{BLACK}Preme in
# Story book window
STR_STORY_BOOK_CAPTION :{WHITE}{COMPANY} Librum Fabularum
STR_STORY_BOOK_SPECTATOR_CAPTION :{WHITE}Librum Fabularum Globalis
STR_STORY_BOOK_SPECTATOR_CAPTION :{WHITE}Librum Fabularum Universale
STR_STORY_BOOK_TITLE :{YELLOW}{STRING}
STR_STORY_BOOK_GENERIC_PAGE_ITEM :Pagina {NUM}
STR_STORY_BOOK_SEL_PAGE_TOOLTIP :{BLACK}Salire ad quamdam paginam eligendo eam in hac indice
@@ -3293,7 +3293,7 @@ STR_STORY_BOOK_PREV_PAGE :{BLACK}Priorem
STR_STORY_BOOK_PREV_PAGE_TOOLTIP :{BLACK}Ire ad paginam priorem
STR_STORY_BOOK_NEXT_PAGE :{BLACK}Secundam
STR_STORY_BOOK_NEXT_PAGE_TOOLTIP :{BLACK}Ire ad paginam secundam
STR_STORY_BOOK_INVALID_GOAL_REF :{RED}Meta irrita
STR_STORY_BOOK_INVALID_GOAL_REF :{RED}Propositum irritum
# Station list window
STR_STATION_LIST_TOOLTIP :{BLACK}Nomina stationum - preme in nomen ut conspectus moveatur supra stationem. Ctrl+Preme ut nova fenestra conspectus aperiatur supra stationem
@@ -3555,7 +3555,7 @@ STR_GROUPS_CLICK_ON_GROUP_FOR_TOOLTIP :{BLACK}Greges -
STR_GROUP_CREATE_TOOLTIP :{BLACK}Preme ut grex creatur
STR_GROUP_DELETE_TOOLTIP :{BLACK}Delere gregem electam
STR_GROUP_RENAME_TOOLTIP :{BLACK}Renominare gregem electam
STR_GROUP_REPLACE_PROTECTION_TOOLTIP :{BLACK}Preme ut vehicula huius gregis custodiantur contra autocommutationem globalem
STR_GROUP_REPLACE_PROTECTION_TOOLTIP :{BLACK}Preme ut vehicula huius gregis custodiantur contra autocommutationem universalem
STR_QUERY_GROUP_DELETE_CAPTION :{WHITE}Gregem Delere
STR_GROUP_DELETE_QUERY_TEXT :{WHITE}Esne certus te velle delere hanc gregem eiusque descendentes?

View File

@@ -205,16 +205,16 @@ STR_UNITS_WEIGHT_SHORT_IMPERIAL :{COMMA}{NBSP}t
STR_UNITS_WEIGHT_SHORT_METRIC :{COMMA}{NBSP}t
STR_UNITS_WEIGHT_SHORT_SI :{COMMA}{NBSP}kg
STR_UNITS_WEIGHT_LONG_IMPERIAL :{COMMA}{NBSP}tonn{P "" er}
STR_UNITS_WEIGHT_LONG_METRIC :{COMMA}{NBSP}tonn{P "" er}
STR_UNITS_WEIGHT_LONG_IMPERIAL :{COMMA}{NBSP}tonn
STR_UNITS_WEIGHT_LONG_METRIC :{COMMA}{NBSP}tonn{P "" ""}
STR_UNITS_WEIGHT_LONG_SI :{COMMA}{NBSP}kg
STR_UNITS_VOLUME_SHORT_IMPERIAL :{COMMA}{NBSP}gal
STR_UNITS_VOLUME_SHORT_METRIC :{COMMA}{NBSP}l
STR_UNITS_VOLUME_SHORT_SI :{COMMA} m³
STR_UNITS_VOLUME_LONG_IMPERIAL :{COMMA}{NBSP}gallon{P "" er}
STR_UNITS_VOLUME_LONG_METRIC :{COMMA}{NBSP}liter{P "" er}
STR_UNITS_VOLUME_LONG_IMPERIAL :{COMMA}{NBSP}gallon
STR_UNITS_VOLUME_LONG_METRIC :{COMMA}{NBSP}liter
STR_UNITS_VOLUME_LONG_SI :{COMMA}{NBSP}m³
STR_UNITS_FORCE_IMPERIAL :{COMMA}{NBSP}lbf
@@ -1528,7 +1528,7 @@ STR_CONFIG_SETTING_FEEDER_PAYMENT_SHARE :Prosentandel av
STR_CONFIG_SETTING_FEEDER_PAYMENT_SHARE_HELPTEXT :Andel av inntekten gitt til de mellomliggende etapper i et overføringssystem, noe som gir mer kontroll over inntektene
STR_CONFIG_SETTING_DRAG_SIGNALS_DENSITY :Når du drar en linje, plasser signaler hver: {STRING}
STR_CONFIG_SETTING_DRAG_SIGNALS_DENSITY_HELPTEXT :Angi distansen for når signaler vil bli bygget på et spor frem til neste hinder (signal, kryss), hvis signaler blir dratt
STR_CONFIG_SETTING_DRAG_SIGNALS_DENSITY_VALUE :{COMMA} kartelement{P 0 "" s}
STR_CONFIG_SETTING_DRAG_SIGNALS_DENSITY_VALUE :{COMMA} kartelement{P 0 "" er}
STR_CONFIG_SETTING_DRAG_SIGNALS_FIXED_DISTANCE :Når du drar en linje, oppretthold fast avstand mellom signaler: {STRING}
STR_CONFIG_SETTING_DRAG_SIGNALS_FIXED_DISTANCE_HELPTEXT :Velg oppførselen til signalplassering ved Ctrl + dragning av signaler. Hvis deaktivert, blir signaler plassert ved tunneler eller broer for å unngå lange strekninger uten signaler. Hvis aktivert, blir signalene plassert for hver N ruter, noe som gjør justering av signaler på parallelle spor enklere
STR_CONFIG_SETTING_SEMAPHORE_BUILD_BEFORE_DATE :Bygg vingesignal automatisk før: {STRING}
@@ -1577,7 +1577,7 @@ STR_CONFIG_SETTING_STATUSBAR_POS :Statusbarens po
STR_CONFIG_SETTING_STATUSBAR_POS_HELPTEXT :Horisontal posisjon av status verktøylinjen på bunnen av skjermen
STR_CONFIG_SETTING_SNAP_RADIUS :Vinduers smekkeradius: {STRING}
STR_CONFIG_SETTING_SNAP_RADIUS_HELPTEXT :Avstanden mellom vinduer før vinduet som blir flyttet automatisk tilpasset nærliggende vinduer
STR_CONFIG_SETTING_SNAP_RADIUS_VALUE :{COMMA} piksel{P 0 "" s}
STR_CONFIG_SETTING_SNAP_RADIUS_VALUE :{COMMA} piks{P 0 el ler}
STR_CONFIG_SETTING_SNAP_RADIUS_DISABLED :Deaktivert
STR_CONFIG_SETTING_SOFT_LIMIT :Maksimalt antall flytende vinduer: {STRING}
STR_CONFIG_SETTING_SOFT_LIMIT_HELPTEXT :Antall ikke-klebrige åpne vinduer før gamle vinduer automatisk blir lukket for å gi plass til nye vinduer
@@ -3908,8 +3908,8 @@ STR_TIMETABLE_STAY_FOR_ESTIMATED :(opphold i {STR
STR_TIMETABLE_AND_TRAVEL_FOR_ESTIMATED :(reise for {STRING}, ikke oppsatt med rutetabell)
STR_TIMETABLE_STAY_FOR :og bli værende i {STRING}
STR_TIMETABLE_AND_TRAVEL_FOR :og reis i {STRING}
STR_TIMETABLE_DAYS :{COMMA}{NBSP}dag{P "" s}
STR_TIMETABLE_TICKS :{COMMA}{NBSP}tikk{P "" s}
STR_TIMETABLE_DAYS :{COMMA}{NBSP}dag{P "" er}
STR_TIMETABLE_TICKS :{COMMA}{NBSP}tikk
STR_TIMETABLE_TOTAL_TIME :{BLACK}Det vil ta {STRING} å fullføre rutetabellen
STR_TIMETABLE_TOTAL_TIME_INCOMPLETE :{BLACK}Det vil ta minst {STRING} å fullføre denne rutetabellen (rutetabell ikke fullstendig)

View File

@@ -844,7 +844,7 @@ STR_NEWS_VEHICLE_HAS_TOO_FEW_ORDERS :{WHITE}{VEHICLE
STR_NEWS_VEHICLE_HAS_VOID_ORDER :{WHITE}{VEHICLE}的调度计划中有无效调度命令
STR_NEWS_VEHICLE_HAS_DUPLICATE_ENTRY :{WHITE}{VEHICLE} 有重复调度命令
STR_NEWS_VEHICLE_HAS_INVALID_ENTRY :{WHITE}{VEHICLE}的调度计划有无效的车站
STR_NEWS_PLANE_USES_TOO_SHORT_RUNWAY :{WHITE}{VEHICLE} 的计划列表中有机场跑道太短不足及起降
STR_NEWS_PLANE_USES_TOO_SHORT_RUNWAY :{WHITE}{VEHICLE} 的计划列表中有一个机场跑道太短而不能起降
STR_NEWS_VEHICLE_IS_GETTING_OLD :{WHITE}{VEHICLE} 即将达到报废年限
STR_NEWS_VEHICLE_IS_GETTING_VERY_OLD :{WHITE}{VEHICLE} 已经达到报废年限

View File

@@ -1563,6 +1563,7 @@ STR_CONFIG_SETTING_TOWN_GROWTH_SLOW :langsaam
STR_CONFIG_SETTING_TOWN_GROWTH_NORMAL :gewoan
STR_CONFIG_SETTING_TOWN_GROWTH_FAST :snel
STR_CONFIG_SETTING_TOWN_GROWTH_VERY_FAST :Hiel snel
STR_CONFIG_SETTING_LARGER_TOWNS_VALUE :1 in {COMMA}
STR_CONFIG_SETTING_LARGER_TOWNS_DISABLED :Gjin
STR_CONFIG_SETTING_CITY_SIZE_MULTIPLIER :Begjin stêdgrutte fermenigfuldiger: {STRING}
@@ -1649,6 +1650,7 @@ STR_CONFIG_SETTING_QUERY_CAPTION :{WHITE}Feroarje
# Config errors
STR_CONFIG_ERROR_ARRAY :{WHITE}... flater in reeks '{STRING}'
STR_CONFIG_ERROR_INVALID_VALUE :{WHITE}... ûnjildige wearde '{STRING}' foar '{STRING}'
STR_CONFIG_ERROR_INVALID_GRF_NOT_FOUND :koe net fûn wurde
STR_CONFIG_ERROR_INVALID_GRF_INCOMPATIBLE :Dat strykt net mei dizze ferzje fan OpenTTD
STR_CONFIG_ERROR_INVALID_GRF_UNKNOWN :ûnbekind

View File

@@ -2875,6 +2875,10 @@ STR_SPRITE_ALIGNER_PREVIOUS_BUTTON :{BLACK}Corlun b
STR_SPRITE_ALIGNER_PREVIOUS_TOOLTIP :{BLACK}Mynd i'r corlun cyffredin blaenorol, gan hepgor unrhyw gorluniau ailliwio/ffont/llidgorluniau, ac amlapio o'r corlun cyntaf i'r olaf
STR_SPRITE_ALIGNER_SPRITE_TOOLTIP :{BLACK}Cynrychioliad o'r corlun a ddewiswyd. Fe anwybyddir yr aliniad wrth lunio'r corlun
STR_SPRITE_ALIGNER_MOVE_TOOLTIP :{BLACK}Symud y corlun, gan newid yr atredau X ac Y
STR_SPRITE_ALIGNER_RESET_BUTTON :{BLACK}Ailosod perthyniad
STR_SPRITE_ALIGNER_RESET_TOOLTIP :{BLACK}Ailosod y dodiadau perthynol
STR_SPRITE_ALIGNER_OFFSETS_ABS :{BLACK}Dodiad X: {NUM}, Dodiad Y: {NUM} (Absoliwt)
STR_SPRITE_ALIGNER_OFFSETS_REL :{BLACK}Dodiad X: {NUM}, Dodiad Y: {NUM} (Perthynol)
STR_SPRITE_ALIGNER_PICKER_BUTTON :{BLACK}Dewis corlun
STR_SPRITE_ALIGNER_PICKER_TOOLTIP :{BLACK}Dewis corlun o ynrhyw fan ar y sgrïn

View File

@@ -63,7 +63,6 @@ NetworkCompanyState *_network_company_states = NULL; ///< Statistics about some
ClientID _network_own_client_id; ///< Our client identifier.
ClientID _redirect_console_to_client; ///< If not invalid, redirect the console output to a client.
bool _network_need_advertise; ///< Whether we need to advertise.
uint32 _network_last_advertise_frame; ///< Last time we did advertise.
uint8 _network_reconnect; ///< Reconnect timeout
StringList _network_bind_list; ///< The addresses to bind on.
StringList _network_host_list; ///< The servers we know.
@@ -762,7 +761,6 @@ bool NetworkServerStart()
if (_network_dedicated) IConsoleCmdExec("exec scripts/on_dedicated.scr 0");
/* Try to register us to the master server */
_network_last_advertise_frame = 0;
_network_need_advertise = true;
NetworkUDPAdvertise();
@@ -1079,7 +1077,6 @@ void NetworkStartUp()
/* Network is available */
_network_available = NetworkCoreInitialize();
_network_dedicated = false;
_network_last_advertise_frame = 0;
_network_need_advertise = true;
_network_advertise_retries = 0;

View File

@@ -34,7 +34,6 @@ extern NetworkCompanyState *_network_company_states;
extern ClientID _network_own_client_id;
extern ClientID _redirect_console_to_client;
extern bool _network_need_advertise;
extern uint32 _network_last_advertise_frame;
extern uint8 _network_reconnect;
extern StringList _network_bind_list;
extern StringList _network_host_list;

View File

@@ -42,9 +42,9 @@ static ThreadMutex *_network_udp_mutex = ThreadMutex::New();
/** Session key to register ourselves to the master server */
static uint64 _session_key = 0;
static const uint ADVERTISE_NORMAL_INTERVAL = 30000; ///< interval between advertising in ticks (15 minutes)
static const uint ADVERTISE_RETRY_INTERVAL = 300; ///< re-advertise when no response after this many ticks (9 seconds)
static const uint ADVERTISE_RETRY_TIMES = 3; ///< give up re-advertising after this much failed retries
static const uint32 ADVERTISE_NORMAL_INTERVAL = 15 * 60 * 1000; ///< interval between advertising in ms (15 minutes)
static const uint32 ADVERTISE_RETRY_INTERVAL = 10 * 1000; ///< re-advertise when no response after this many ms (10 seconds)
static const uint32 ADVERTISE_RETRY_TIMES = 3; ///< give up re-advertising after this much failed retries
NetworkUDPSocketHandler *_udp_client_socket = NULL; ///< udp client socket
NetworkUDPSocketHandler *_udp_server_socket = NULL; ///< udp server socket
@@ -616,25 +616,37 @@ static void NetworkUDPAdvertiseThread(void *pntr)
*/
void NetworkUDPAdvertise()
{
static uint32 _last_advertisement = 0; ///< The time of the last advertisement (used to check for wrapping of time)
static uint32 _next_advertisement = 0; ///< The next time we should perform a normal advertisement.
static uint32 _next_retry = 0; ///< The next time we should perform a retry of an advertisement.
/* Check if we should send an advertise */
if (!_networking || !_network_server || !_network_udp_server || !_settings_client.network.server_advertise) return;
if (_network_need_advertise) {
if (_network_need_advertise || _realtime_tick < _last_advertisement) {
/* Forced advertisement, or a wrapping of time in which case we determine the advertisement/retry times again. */
_network_need_advertise = false;
_network_advertise_retries = ADVERTISE_RETRY_TIMES;
} else {
/* Only send once every ADVERTISE_NORMAL_INTERVAL ticks */
if (_network_advertise_retries == 0) {
if ((_network_last_advertise_frame + ADVERTISE_NORMAL_INTERVAL) > _frame_counter) return;
if (_realtime_tick <= _next_advertisement) return;
_network_advertise_retries = ADVERTISE_RETRY_TIMES;
} else {
/* An actual retry. */
if (_realtime_tick <= _next_retry) return;
}
if ((_network_last_advertise_frame + ADVERTISE_RETRY_INTERVAL) > _frame_counter) return;
}
_network_advertise_retries--;
_network_last_advertise_frame = _frame_counter;
_last_advertisement = _realtime_tick;
_next_advertisement = _realtime_tick + ADVERTISE_NORMAL_INTERVAL;
_next_retry = _realtime_tick + ADVERTISE_RETRY_INTERVAL;
/* Make sure we do not have an overflow when checking these; when time wraps, we simply force an advertisement. */
if (_next_advertisement < _last_advertisement) _next_advertisement = UINT32_MAX;
if (_next_retry < _last_advertisement) _next_retry = UINT32_MAX;
if (!ThreadObject::New(NetworkUDPAdvertiseThread, NULL)) {
NetworkUDPAdvertiseThread(NULL);

View File

@@ -483,7 +483,7 @@ static const NWidgetPart _nested_scen_edit_land_gen_widgets[] = {
NWidget(WWT_IMGBTN, COLOUR_GREY, WID_ETT_PLACE_DESERT), SetMinimalSize(22, 22),
SetFill(0, 1), SetDataTip(SPR_IMG_DESERT, STR_TERRAFORM_TOOLTIP_DEFINE_DESERT_AREA),
EndContainer(),
NWidget(WWT_IMGBTN, COLOUR_GREY, WID_ETT_PLACE_OBJECT), SetMinimalSize(23, 22),
NWidget(WWT_PUSHIMGBTN, COLOUR_GREY, WID_ETT_PLACE_OBJECT), SetMinimalSize(23, 22),
SetFill(0, 1), SetDataTip(SPR_IMG_TRANSMITTER, STR_SCENEDIT_TOOLBAR_PLACE_OBJECT),
NWidget(NWID_SPACER), SetFill(1, 0),
NWidget(WWT_IMGBTN, COLOUR_GREY, WID_ETT_PLACE_HOUSE), SetMinimalSize(23, 22),
@@ -634,7 +634,7 @@ struct ScenarioEditorLandscapeGenerationWindow : Window {
break;
case WID_ETT_PLACE_HOUSE: // Place house button
ShowBuildHousePicker(this);
ShowBuildHousePicker();
break;
case WID_ETT_INCREASE_SIZE:
@@ -702,10 +702,6 @@ struct ScenarioEditorLandscapeGenerationWindow : Window {
VpStartPlaceSizing(tile, VPM_X_AND_Y, DDSP_CREATE_DESERT);
break;
case WID_ETT_PLACE_HOUSE: // Place house button
PlaceProc_House(tile);
break;
default: NOT_REACHED();
}
}

View File

@@ -45,6 +45,8 @@
typedef GUIList<const Town*> GUITownList;
static void PlaceProc_House(TileIndex tile);
static const NWidgetPart _nested_town_authority_widgets[] = {
NWidget(NWID_HORIZONTAL),
NWidget(WWT_CLOSEBOX, COLOUR_BROWN),
@@ -1331,12 +1333,13 @@ public:
static HouseID _cur_house = INVALID_HOUSE_ID; ///< house selected in the house picker window
/** The window used for building houses. */
class HousePickerWindow : public PickerWindowBase {
class HousePickerWindow : public Window {
protected:
GUIHouseList house_list; ///< list of houses and house sets
uint house_offset; ///< index of selected house
int house_offset; ///< index of selected house
uint house_set; ///< index of selected house set
uint line_height; ///< height of a single line in the list of house sets
HouseID display_house; ///< house ID of currently displayed house
void RestoreSelectedHouseIndex()
{
@@ -1345,6 +1348,7 @@ protected:
if (this->house_list.Length() == 0) { // no houses at all?
_cur_house = INVALID_HOUSE_ID;
this->display_house = _cur_house;
return;
}
@@ -1360,6 +1364,16 @@ protected:
}
}
_cur_house = this->house_list.GetHouseAtOffset(this->house_set, this->house_offset);
this->display_house = _cur_house;
}
void SelectHouseIntl(uint new_house_set, int new_house_offset)
{
SetObjectToPlaceWnd(SPR_CURSOR_TOWN, PAL_NONE, HT_RECT, this);
this->house_set = new_house_set;
this->house_offset = new_house_offset;
_cur_house = this->house_list.GetHouseAtOffset(new_house_set, new_house_offset);
this->display_house = _cur_house;
}
/**
@@ -1367,14 +1381,13 @@ protected:
* @param new_house_set index of the house set
* @param new_house_offset offset of the house
*/
void SelectOtherHouse(uint new_house_set, uint new_house_offset)
void SelectOtherHouse(uint new_house_set, int new_house_offset)
{
assert(new_house_set < this->house_list.NumHouseSets());
assert(new_house_offset < this->house_list.NumHousesInHouseSet(new_house_set));
assert(new_house_offset < (int) this->house_list.NumHousesInHouseSet(new_house_set));
assert(new_house_offset >= 0);
_cur_house = this->house_list.GetHouseAtOffset(new_house_set, new_house_offset);
this->house_set = new_house_set;
this->house_offset = new_house_offset;
SelectHouseIntl(new_house_set, new_house_offset);
NWidgetMatrix *matrix = this->GetWidget<NWidgetMatrix>(WID_HP_HOUSE_SELECT_MATRIX);
matrix->SetCount(this->house_list.NumHousesInHouseSet(this->house_set));
@@ -1395,24 +1408,19 @@ protected:
}
public:
HousePickerWindow(WindowDesc *desc, Window *w) : PickerWindowBase(desc, w)
HousePickerWindow(WindowDesc *desc, WindowNumber number) : Window(desc)
{
this->CreateNestedTree();
/* there is no shade box but we will shade the window if there is no house to show */
this->shade_select = this->GetWidget<NWidgetStacked>(WID_HP_MAIN_PANEL_SEL);
NWidgetMatrix *matrix = this->GetWidget<NWidgetMatrix>(WID_HP_HOUSE_SELECT_MATRIX);
matrix->SetScrollbar(this->GetScrollbar(WID_HP_HOUSE_SELECT_SCROLL));
this->FinishInitNested(0);
this->FinishInitNested(number);
if (_cur_house != INVALID_HOUSE_ID) matrix->SetClicked(this->house_offset); // set clicked item again to make it visible
}
~HousePickerWindow()
{
DeleteWindowById(WC_SELECT_TOWN, 0);
}
virtual void OnInit()
virtual void OnInit() override
{
this->house_list.Build();
this->RestoreSelectedHouseIndex();
@@ -1437,88 +1445,122 @@ public:
NWidgetMatrix *matrix = this->GetWidget<NWidgetMatrix>(WID_HP_HOUSE_SELECT_MATRIX);
matrix->SetCount(this->house_list.NumHousesInHouseSet(this->house_set));
matrix->SetClicked(this->house_offset);
SelectHouseIntl(this->house_set, this->house_offset);
} else {
ResetObjectToPlace();
}
}
virtual void SetStringParameters(int widget) const
{
switch (widget) {
case WID_HP_CAPTION:
if (this->house_list.NumHouseSets() == 1) SetDParamStr(0, this->house_list.GetNameOfHouseSet(0));
break;
if (widget == WID_HP_CAPTION) {
if (this->house_list.NumHouseSets() == 1) SetDParamStr(0, this->house_list.GetNameOfHouseSet(0));
} else if (this->display_house == INVALID_HOUSE_ID) {
switch (widget) {
case WID_HP_CAPTION:
break;
case WID_HP_HOUSE_NAME:
SetDParam(0, GetHouseName(_cur_house));
break;
case WID_HP_HOUSE_ZONES:
for (int i = 0; i < HZB_END; i++) {
SetDParam(2 * i, STR_HOUSE_BUILD_HOUSE_ZONE_DISABLED);
SetDParam(2 * i + 1, i + 1);
}
break;
case WID_HP_HISTORICAL_BUILDING:
SetDParam(0, HouseSpec::Get(_cur_house)->extra_flags & BUILDING_IS_HISTORICAL ? STR_HOUSE_BUILD_HISTORICAL_BUILDING : STR_EMPTY);
break;
case WID_HP_HOUSE_YEARS:
SetDParam(0, STR_HOUSE_BUILD_YEARS_BAD_YEAR);
SetDParam(1, 0);
SetDParam(2, STR_HOUSE_BUILD_YEARS_BAD_YEAR);
SetDParam(3, 0);
break;
case WID_HP_HOUSE_POPULATION:
SetDParam(0, HouseSpec::Get(_cur_house)->population);
break;
case WID_HP_HOUSE_ACCEPTANCE:
SetDParamStr(0, "");
break;
case WID_HP_HOUSE_ZONES: {
HouseZones zones = (HouseZones)(HouseSpec::Get(_cur_house)->building_availability & HZ_ZONALL);
for (int i = 0; i < HZB_END; i++) {
/* colour: gold(enabled)/grey(disabled) */
SetDParam(2 * i, HasBit(zones, HZB_END - i - 1) ? STR_HOUSE_BUILD_HOUSE_ZONE_ENABLED : STR_HOUSE_BUILD_HOUSE_ZONE_DISABLED);
/* digit: 1(center)/2/3/4/5(edge) */
SetDParam(2 * i + 1, i + 1);
case WID_HP_HOUSE_SUPPLY:
SetDParam(0, 0);
break;
default:
SetDParam(0, STR_EMPTY);
break;
}
} else {
switch (widget) {
case WID_HP_HOUSE_NAME:
SetDParam(0, GetHouseName(this->display_house));
break;
case WID_HP_HISTORICAL_BUILDING:
SetDParam(0, HouseSpec::Get(this->display_house)->extra_flags & BUILDING_IS_HISTORICAL ? STR_HOUSE_BUILD_HISTORICAL_BUILDING : STR_EMPTY);
break;
case WID_HP_HOUSE_POPULATION:
SetDParam(0, HouseSpec::Get(this->display_house)->population);
break;
case WID_HP_HOUSE_ZONES: {
HouseZones zones = (HouseZones)(HouseSpec::Get(this->display_house)->building_availability & HZ_ZONALL);
for (int i = 0; i < HZB_END; i++) {
/* colour: gold(enabled)/grey(disabled) */
SetDParam(2 * i, HasBit(zones, HZB_END - i - 1) ? STR_HOUSE_BUILD_HOUSE_ZONE_ENABLED : STR_HOUSE_BUILD_HOUSE_ZONE_DISABLED);
/* digit: 1(center)/2/3/4/5(edge) */
SetDParam(2 * i + 1, i + 1);
}
break;
}
break;
}
case WID_HP_HOUSE_LANDSCAPE: {
StringID info = STR_HOUSE_BUILD_LANDSCAPE_ABOVE_OR_BELOW_SNOWLINE;
switch (HouseSpec::Get(_cur_house)->building_availability & (HZ_SUBARTC_ABOVE | HZ_SUBARTC_BELOW)) {
case HZ_SUBARTC_ABOVE: info = STR_HOUSE_BUILD_LANDSCAPE_ONLY_ABOVE_SNOWLINE; break;
case HZ_SUBARTC_BELOW: info = STR_HOUSE_BUILD_LANDSCAPE_ONLY_BELOW_SNOWLINE; break;
default: break;
case WID_HP_HOUSE_LANDSCAPE: {
StringID info = STR_HOUSE_BUILD_LANDSCAPE_ABOVE_OR_BELOW_SNOWLINE;
switch (HouseSpec::Get(this->display_house)->building_availability & (HZ_SUBARTC_ABOVE | HZ_SUBARTC_BELOW)) {
case HZ_SUBARTC_ABOVE: info = STR_HOUSE_BUILD_LANDSCAPE_ONLY_ABOVE_SNOWLINE; break;
case HZ_SUBARTC_BELOW: info = STR_HOUSE_BUILD_LANDSCAPE_ONLY_BELOW_SNOWLINE; break;
default: break;
}
SetDParam(0, info);
break;
}
SetDParam(0, info);
break;
}
case WID_HP_HOUSE_YEARS: {
const HouseSpec *hs = HouseSpec::Get(_cur_house);
SetDParam(0, hs->min_year <= _cur_year ? STR_HOUSE_BUILD_YEARS_GOOD_YEAR : STR_HOUSE_BUILD_YEARS_BAD_YEAR);
SetDParam(1, hs->min_year);
SetDParam(2, hs->max_year >= _cur_year ? STR_HOUSE_BUILD_YEARS_GOOD_YEAR : STR_HOUSE_BUILD_YEARS_BAD_YEAR);
SetDParam(3, hs->max_year);
break;
}
case WID_HP_HOUSE_ACCEPTANCE: {
static char buff[DRAW_STRING_BUFFER] = "";
char *str = buff;
CargoArray cargo;
uint32 dummy = 0;
AddAcceptedHouseCargo(_cur_house, INVALID_TILE, cargo, &dummy);
for (uint i = 0; i < NUM_CARGO; i++) {
if (cargo[i] == 0) continue;
/* If the accepted value is less than 8, show it in 1/8:ths */
SetDParam(0, cargo[i] < 8 ? STR_HOUSE_BUILD_CARGO_VALUE_EIGHTS : STR_HOUSE_BUILD_CARGO_VALUE_JUST_NAME);
SetDParam(1, cargo[i]);
SetDParam(2, CargoSpec::Get(i)->name);
str = GetString(str, str == buff ? STR_HOUSE_BUILD_CARGO_FIRST : STR_HOUSE_BUILD_CARGO_SEPARATED, lastof(buff));
case WID_HP_HOUSE_YEARS: {
const HouseSpec *hs = HouseSpec::Get(this->display_house);
SetDParam(0, hs->min_year <= _cur_year ? STR_HOUSE_BUILD_YEARS_GOOD_YEAR : STR_HOUSE_BUILD_YEARS_BAD_YEAR);
SetDParam(1, hs->min_year);
SetDParam(2, hs->max_year >= _cur_year ? STR_HOUSE_BUILD_YEARS_GOOD_YEAR : STR_HOUSE_BUILD_YEARS_BAD_YEAR);
SetDParam(3, hs->max_year);
break;
}
if (str == buff) GetString(buff, STR_JUST_NOTHING, lastof(buff));
SetDParamStr(0, buff);
break;
}
case WID_HP_HOUSE_SUPPLY: {
CargoArray cargo;
AddProducedHouseCargo(_cur_house, INVALID_TILE, cargo);
uint32 cargo_mask = 0;
for (uint i = 0; i < NUM_CARGO; i++) if (cargo[i] != 0) SetBit(cargo_mask, i);
SetDParam(0, cargo_mask);
break;
}
case WID_HP_HOUSE_ACCEPTANCE: {
static char buff[DRAW_STRING_BUFFER] = "";
char *str = buff;
CargoArray cargo;
uint32 dummy = 0;
AddAcceptedHouseCargo(this->display_house, INVALID_TILE, cargo, &dummy);
for (uint i = 0; i < NUM_CARGO; i++) {
if (cargo[i] == 0) continue;
/* If the accepted value is less than 8, show it in 1/8:ths */
SetDParam(0, cargo[i] < 8 ? STR_HOUSE_BUILD_CARGO_VALUE_EIGHTS : STR_HOUSE_BUILD_CARGO_VALUE_JUST_NAME);
SetDParam(1, cargo[i]);
SetDParam(2, CargoSpec::Get(i)->name);
str = GetString(str, str == buff ? STR_HOUSE_BUILD_CARGO_FIRST : STR_HOUSE_BUILD_CARGO_SEPARATED, lastof(buff));
}
if (str == buff) GetString(buff, STR_JUST_NOTHING, lastof(buff));
SetDParamStr(0, buff);
break;
}
default: break;
case WID_HP_HOUSE_SUPPLY: {
CargoArray cargo;
AddProducedHouseCargo(this->display_house, INVALID_TILE, cargo);
uint32 cargo_mask = 0;
for (uint i = 0; i < NUM_CARGO; i++) if (cargo[i] != 0) SetBit(cargo_mask, i);
SetDParam(0, cargo_mask);
break;
}
default: break;
}
}
}
@@ -1612,7 +1654,9 @@ public:
}
case WID_HP_HOUSE_PREVIEW:
DrawHouseImage(_cur_house, r.left, r.top, r.right, r.bottom);
if (this->display_house != INVALID_HOUSE_ID) {
DrawHouseImage(this->display_house, r.left, r.top, r.right, r.bottom);
}
break;
case WID_HP_HOUSE_SELECT: {
@@ -1645,6 +1689,21 @@ public:
break;
}
}
virtual void OnPlaceObject(Point pt, TileIndex tile) override
{
PlaceProc_House(tile);
}
virtual void OnPlaceObjectAbort() override
{
this->house_offset = -1;
_cur_house = INVALID_HOUSE_ID;
NWidgetMatrix *matrix = this->GetWidget<NWidgetMatrix>(WID_HP_HOUSE_SELECT_MATRIX);
matrix->SetClicked(-1);
this->UpdateSelectSize();
this->SetDirty();
}
};
static const NWidgetPart _nested_house_picker_widgets[] = {
@@ -1715,12 +1774,9 @@ static WindowDesc _house_picker_desc(
* Show our house picker.
* @param parent The toolbar window we're associated with.
*/
void ShowBuildHousePicker(Window *parent)
void ShowBuildHousePicker()
{
if (BringWindowToFrontById(WC_BUILD_HOUSE, 0) != NULL) {
return;
}
new HousePickerWindow(&_house_picker_desc, parent);
AllocateWindowDescFront<HousePickerWindow>(&_house_picker_desc, 0);
}
@@ -1820,8 +1876,7 @@ static void ShowSelectTownWindow(const TownList &towns, const CommandContainer &
new SelectTownWindow(&_select_town_desc, towns, cmd);
}
void PlaceProc_House(TileIndex tile)
static void PlaceProc_House(TileIndex tile)
{
if (_town_pool.items == 0) {
ShowErrorMessage(STR_ERROR_CAN_T_BUILD_HOUSE_HERE, STR_ERROR_MUST_FOUND_TOWN_FIRST, WL_INFO);

View File

@@ -12,11 +12,6 @@
#ifndef TOWN_GUI_H
#define TOWN_GUI_H
#include "tile_type.h"
struct Window;
void ShowBuildHousePicker(Window *parent);
void PlaceProc_House(TileIndex tile);
void ShowBuildHousePicker();
#endif /* TOWN_GUI_H */