83 STR_NETWORK_9_PLAYERS, |
83 STR_NETWORK_9_PLAYERS, |
84 STR_NETWORK_10_PLAYERS, |
84 STR_NETWORK_10_PLAYERS, |
85 INVALID_STRING_ID |
85 INVALID_STRING_ID |
86 }; |
86 }; |
87 |
87 |
88 static const StringID _language_dropdown[] = { |
88 static StringID _language_dropdown[NETLANG_COUNT + 1] = {STR_NULL}; |
89 STR_NETWORK_LANG_ANY, |
89 |
90 STR_NETWORK_LANG_ENGLISH, |
90 void SortNetworkLanguages() { |
91 STR_NETWORK_LANG_GERMAN, |
91 /* Init the strings */ |
92 STR_NETWORK_LANG_FRENCH, |
92 if (_language_dropdown[0] == STR_NULL) { |
93 INVALID_STRING_ID |
93 for (int i = 0; i < NETLANG_COUNT; i++) _language_dropdown[i] = STR_NETWORK_LANG_ANY + i; |
94 }; |
94 _language_dropdown[NETLANG_COUNT] = INVALID_STRING_ID; |
|
95 } |
|
96 |
|
97 /* Sort the strings (we don't move 'any' and the 'invalid' one) */ |
|
98 qsort(&_language_dropdown[1], NETLANG_COUNT - 1, sizeof(StringID), &StringIDSorter); |
|
99 } |
95 |
100 |
96 enum { |
101 enum { |
97 NET_PRC__OFFSET_TOP_WIDGET = 54, |
102 NET_PRC__OFFSET_TOP_WIDGET = 54, |
98 NET_PRC__OFFSET_TOP_WIDGET_COMPANY = 52, |
103 NET_PRC__OFFSET_TOP_WIDGET_COMPANY = 52, |
99 NET_PRC__SIZE_OF_ROW = 14, |
104 NET_PRC__SIZE_OF_ROW = 14, |
340 SetDParam(2, sel->info.companies_on); |
345 SetDParam(2, sel->info.companies_on); |
341 SetDParam(3, sel->info.companies_max); |
346 SetDParam(3, sel->info.companies_max); |
342 DrawString(x, y, STR_NETWORK_CLIENTS, 2); |
347 DrawString(x, y, STR_NETWORK_CLIENTS, 2); |
343 y += 10; |
348 y += 10; |
344 |
349 |
345 SetDParam(0, _language_dropdown[sel->info.server_lang]); |
350 SetDParam(0, STR_NETWORK_LANG_ANY + sel->info.server_lang); |
346 DrawString(x, y, STR_NETWORK_LANGUAGE, 2); // server language |
351 DrawString(x, y, STR_NETWORK_LANGUAGE, 2); // server language |
347 y += 10; |
352 y += 10; |
348 |
353 |
349 SetDParam(0, STR_TEMPERATE_LANDSCAPE + sel->info.map_set); |
354 SetDParam(0, STR_TEMPERATE_LANDSCAPE + sel->info.map_set); |
350 DrawString(x, y, STR_NETWORK_TILESET, 2); // tileset |
355 DrawString(x, y, STR_NETWORK_TILESET, 2); // tileset |
607 |
612 |
608 SetDParam( 7, _connection_types_dropdown[_network_advertise]); |
613 SetDParam( 7, _connection_types_dropdown[_network_advertise]); |
609 SetDParam( 9, _players_dropdown[_network_game_info.clients_max]); |
614 SetDParam( 9, _players_dropdown[_network_game_info.clients_max]); |
610 SetDParam(11, _players_dropdown[_network_game_info.companies_max]); |
615 SetDParam(11, _players_dropdown[_network_game_info.companies_max]); |
611 SetDParam(13, _players_dropdown[_network_game_info.spectators_max]); |
616 SetDParam(13, _players_dropdown[_network_game_info.spectators_max]); |
612 SetDParam(15, _language_dropdown[_network_game_info.server_lang]); |
617 SetDParam(15, STR_NETWORK_LANG_ANY + _network_game_info.server_lang); |
613 DrawWindowWidgets(w); |
618 DrawWindowWidgets(w); |
614 |
619 |
615 GfxFillRect(11, 63, 258, 215, 0xD7); |
620 GfxFillRect(11, 63, 258, 215, 0xD7); |
616 DrawEditBox(w, &WP(w, network_ql_d).q, 3); |
621 DrawEditBox(w, &WP(w, network_ql_d).q, 3); |
617 |
622 |
677 ShowDropDownMenu(w, _players_dropdown, _network_game_info.companies_max, 12, 0, 1537); |
682 ShowDropDownMenu(w, _players_dropdown, _network_game_info.companies_max, 12, 0, 1537); |
678 break; |
683 break; |
679 case 13: case 14: /* Number of Spectators */ |
684 case 13: case 14: /* Number of Spectators */ |
680 ShowDropDownMenu(w, _players_dropdown, _network_game_info.spectators_max, 14, 0, 0); |
685 ShowDropDownMenu(w, _players_dropdown, _network_game_info.spectators_max, 14, 0, 0); |
681 break; |
686 break; |
682 case 15: case 16: /* Language */ |
687 case 15: case 16: { /* Language */ |
683 ShowDropDownMenu(w, _language_dropdown, _network_game_info.server_lang, 16, 0, 0); |
688 uint sel = 0; |
684 break; |
689 for (uint i = 0; i < lengthof(_language_dropdown) - 1; i++) { |
|
690 if (_language_dropdown[i] == STR_NETWORK_LANG_ANY + _network_game_info.server_lang) { |
|
691 sel = i; |
|
692 break; |
|
693 } |
|
694 } |
|
695 ShowDropDownMenu(w, _language_dropdown, sel, 16, 0, 0); |
|
696 break; |
|
697 } |
685 case 17: /* Start game */ |
698 case 17: /* Start game */ |
686 _is_network_server = true; |
699 _is_network_server = true; |
687 |
700 |
688 if (nd->map == NULL) { // start random new game |
701 if (nd->map == NULL) { // start random new game |
689 ShowGenerateLandscape(); |
702 ShowGenerateLandscape(); |
713 switch (e->we.dropdown.button) { |
726 switch (e->we.dropdown.button) { |
714 case 8: _network_advertise = (e->we.dropdown.index != 0); break; |
727 case 8: _network_advertise = (e->we.dropdown.index != 0); break; |
715 case 10: _network_game_info.clients_max = e->we.dropdown.index; break; |
728 case 10: _network_game_info.clients_max = e->we.dropdown.index; break; |
716 case 12: _network_game_info.companies_max = e->we.dropdown.index; break; |
729 case 12: _network_game_info.companies_max = e->we.dropdown.index; break; |
717 case 14: _network_game_info.spectators_max = e->we.dropdown.index; break; |
730 case 14: _network_game_info.spectators_max = e->we.dropdown.index; break; |
718 case 16: _network_game_info.server_lang = e->we.dropdown.index; break; |
731 case 16: |
|
732 _network_game_info.server_lang = _language_dropdown[e->we.dropdown.index] - STR_NETWORK_LANG_ANY; |
|
733 break; |
719 } |
734 } |
720 |
735 |
721 SetWindowDirty(w); |
736 SetWindowDirty(w); |
722 break; |
737 break; |
723 |
738 |