2024-08-08 21:49:24 +02:00 
										
									 
								 
							 
							
								
							 
							
								 
							 
							
							
								## freeftf 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								## Copyright (C) 2024  Patrick_Pluto 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								## 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								## This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								## 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								## This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License for more details. 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								## 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								## You should have received a copy of the GNU General Public License along with this program.  If not, see <https://www.gnu.org/licenses/>. 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								extends  Node 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								const  PORT  =  35000 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								const  MAX_CONNECTIONS  =  256 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								var  game_rooms  =  { } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								var  player_associations  =  { } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								var  name_associations  =  { } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								func  _ready ( ) : 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
									multiplayer . peer_disconnected . connect ( _on_player_disconnected ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
									multiplayer . peer_connected . connect ( _on_player_connected ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								func  create_game ( ) : 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
									var  peer  =  ENetMultiplayerPeer . new ( ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
									var  error  =  peer . create_server ( PORT ,  MAX_CONNECTIONS ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
									if  error : 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
										return  error 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
									multiplayer . multiplayer_peer  =  peer 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								func  _on_player_disconnected ( id ) : 
							 
						 
					
						
							
								
									
										
										
										
											2024-08-11 19:43:03 +02:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
									while  multiplayer . is_server ( ) : 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
										for  i  in  range ( 5000 ) : 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
											if  id  in  multiplayer . get_peers ( ) : 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
												break 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
											await  get_tree ( ) . create_timer ( 0.001 ) . timeout 
							 
						 
					
						
							
								
									
										
										
										
											2024-08-08 21:49:24 +02:00 
										
									 
								 
							 
							
								
							 
							
								 
							 
							
							
										var  room_name  =  player_associations [ id ] 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
										var  player_list  =  create_player_list ( room_name ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
										if  game_rooms . has ( room_name )  and  game_rooms [ room_name ]  ==  id : 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
											for  p  in  player_list : 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
												Client . rpc_id ( p , " room_closed " ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
											game_rooms . erase ( room_name ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
										else : 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
											for  p  in  player_list : 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
												Client . rpc_id ( p , " _on_player_disconnected " , id ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
										player_associations . erase ( id ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
										name_associations . erase ( id ) 
							 
						 
					
						
							
								
									
										
										
										
											2024-08-11 19:43:03 +02:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
										break 
							 
						 
					
						
							
								
									
										
										
										
											2024-08-08 21:49:24 +02:00 
										
									 
								 
							 
							
								
							 
							
								 
							 
							
							
									
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								func  _on_player_connected ( id ) : 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
									if  multiplayer . is_server ( ) : 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
										Client . rpc_id ( id , " send_playerinfo " ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								func  create_player_list ( room_name ) : 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
									var  player_list  =  { } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
									for  player  in  player_associations : 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
										if  player_associations [ player ]  ==  room_name : 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
											player_list [ player ]  =  name_associations [ player ] 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
									return  player_list 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								@ rpc ( " any_peer " , " call_remote " , " reliable " ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								func  recieve_playerinfo ( player_name ,  room_name ) : 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
									var  exists  =  false 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
									var  id  =  multiplayer . get_remote_sender_id ( ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
									for  game_room  in  game_rooms : 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
										if  game_room  ==  room_name : 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
											exists  =  true 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
									player_associations [ id ]  =  room_name 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
									name_associations [ id ]  =  player_name 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
									if  ! exists : 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
										game_rooms [ room_name ]  =  id 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
										Server . rpc_id ( id , " elevate " ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
									var  player_list  =  create_player_list ( room_name ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
									for  p  in  player_list : 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
										Client . rpc_id ( p , " get_player_list " , player_list )