19 |
19 |
20 |
20 |
21 static byte _selected_field; |
21 static byte _selected_field; |
22 char *direct_ip = NULL; |
22 char *direct_ip = NULL; |
23 |
23 |
24 |
|
25 void ConnectToServer(byte* b) |
|
26 { |
|
27 _networking = true; |
|
28 |
|
29 NetworkInitialize(b); |
|
30 DEBUG(misc, 1) ("Connecting to %s %d\n", b, _network_port); |
|
31 NetworkConnect(b, _network_port); |
|
32 } |
|
33 |
|
34 static const StringID _connection_types_dropdown[] = { |
24 static const StringID _connection_types_dropdown[] = { |
35 STR_NETWORK_LAN, |
25 STR_NETWORK_LAN, |
36 STR_NETWORK_INTERNET, |
26 STR_NETWORK_INTERNET, |
37 INVALID_STRING_ID |
27 INVALID_STRING_ID |
38 }; |
28 }; |
63 switch(e->click.widget) { |
53 switch(e->click.widget) { |
64 |
54 |
65 case 0: // close X |
55 case 0: // close X |
66 case 15: // cancel button |
56 case 15: // cancel button |
67 DeleteWindowById(WC_NETWORK_WINDOW, 0); |
57 DeleteWindowById(WC_NETWORK_WINDOW, 0); |
68 break; |
58 NetworkLobbyShutdown(); |
|
59 break; |
|
60 case 3: // find server automaticaly |
|
61 { |
|
62 byte *b = "auto"; |
|
63 NetworkCoreConnectGame(b,_network_server_port); |
|
64 } |
|
65 break; |
|
66 |
69 case 4: // connect via direct ip |
67 case 4: // connect via direct ip |
70 { |
68 { |
71 StringID str; |
69 StringID str; |
72 str = AllocateName((byte*)_decode_parameters, 0); |
70 str = AllocateName((byte*)_decode_parameters, 0); |
73 |
71 |
157 |
155 |
158 void ShowNetworkGameWindow() |
156 void ShowNetworkGameWindow() |
159 { |
157 { |
160 Window *w; |
158 Window *w; |
161 DeleteWindowById(WC_NETWORK_WINDOW, 0); |
159 DeleteWindowById(WC_NETWORK_WINDOW, 0); |
|
160 |
|
161 NetworkLobbyInit(); |
162 |
162 |
163 w = AllocateWindowDesc(&_network_game_window_desc); |
163 w = AllocateWindowDesc(&_network_game_window_desc); |
164 strcpy(_edit_str_buf, "Your name"); |
164 strcpy(_edit_str_buf, "Your name"); |
165 |
165 |
166 |
166 |
167 WP(w,querystr_d).caret = 1; |
167 WP(w,querystr_d).caret = 1; |
168 WP(w,querystr_d).maxlen = MAX_QUERYSTR_LEN; |
168 WP(w,querystr_d).maxlen = MAX_QUERYSTR_LEN; |
169 WP(w,querystr_d).maxwidth = 240; |
169 WP(w,querystr_d).maxwidth = 240; |
170 WP(w,querystr_d).buf = _edit_str_buf; |
170 WP(w,querystr_d).buf = _edit_str_buf; |
171 |
171 // ShowErrorMessage(-1, TEMP_STRING_NO_NETWORK, 0, 0); |
172 |
172 } |
173 ShowErrorMessage(-1, TEMP_STRING_NO_NETWORK, 0, 0); |
|
174 } |
|
175 |
|
176 |
|
177 void StartServer() |
|
178 { |
|
179 _networking = true; |
|
180 NetworkInitialize(NULL); |
|
181 DEBUG(misc, 1) ("Listening on port %d\n", _network_port); |
|
182 NetworkListen(_network_port); |
|
183 _networking_server = true; |
|
184 DoCommandP(0, 0, 0, NULL, CMD_START_NEW_GAME); |
|
185 } |
|
186 |
|
187 |
|
188 |
173 |
189 static const StringID _players_dropdown[] = { |
174 static const StringID _players_dropdown[] = { |
190 STR_NETWORK_2_PLAYERS, |
175 STR_NETWORK_2_PLAYERS, |
191 STR_NETWORK_3_PLAYERS, |
176 STR_NETWORK_3_PLAYERS, |
192 STR_NETWORK_4_PLAYERS, |
177 STR_NETWORK_4_PLAYERS, |
230 break; |
215 break; |
231 case 8: |
216 case 8: |
232 ShowDropDownMenu(w, _players_dropdown, _opt_mod_ptr->currency, e->click.widget, 0); |
217 ShowDropDownMenu(w, _players_dropdown, _opt_mod_ptr->currency, e->click.widget, 0); |
233 return; |
218 return; |
234 case 9: // start game |
219 case 9: // start game |
235 StartServer(); |
220 NetworkCoreStartGame(); |
236 ShowNetworkLobbyWindow(); |
221 ShowNetworkLobbyWindow(); |
|
222 DoCommandP(0, 0, 0, NULL, CMD_START_NEW_GAME); |
237 break; |
223 break; |
238 } |
224 } |
239 |
225 |
240 case WE_MOUSELOOP: |
226 case WE_MOUSELOOP: |
241 if(_selected_field == 3) |
227 if(_selected_field == 3) |
306 WP(w,querystr_d).maxlen = MAX_QUERYSTR_LEN; |
292 WP(w,querystr_d).maxlen = MAX_QUERYSTR_LEN; |
307 WP(w,querystr_d).maxwidth = 240; |
293 WP(w,querystr_d).maxwidth = 240; |
308 WP(w,querystr_d).buf = _edit_str_buf; |
294 WP(w,querystr_d).buf = _edit_str_buf; |
309 } |
295 } |
310 |
296 |
311 |
|
312 |
|
313 |
|
314 |
|
315 static void NetworkLobbyWindowWndProc(Window *w, WindowEvent *e) |
297 static void NetworkLobbyWindowWndProc(Window *w, WindowEvent *e) |
316 { |
298 { |
317 switch(e->event) { |
299 switch(e->event) { |
318 case WE_PAINT: { |
300 case WE_PAINT: { |
319 |
301 |