Godot Version
4.0
Question
Hey everyone, I simply created a multiplayer game with team selection function. When host selects team it spawns at correct Marker3D and prints correct location. When client selects team it prints correct location but it spawns at position of CharacterBody3D in Player scene. Can you help about it?
extends Node3D
@onready var main_menu: PanelContainer = $CanvasLayer/MainMenu
@onready var team_select_menu: PanelContainer = $CanvasLayer/TeamSelectMenu
@onready var address_entry: LineEdit = $CanvasLayer/MainMenu/MarginContainer/VBoxContainer/AddressEntry
@onready var spawn_1: Marker3D = $Spawn_1
@onready var spawn_2: Marker3D = $Spawn_2
const Player = preload("res://player.tscn")
const PORT = 9999
var enet_peer = ENetMultiplayerPeer.new()
var team_number
var mp_mode
func _unhandled_input(event: InputEvent) -> void:
if Input.is_action_just_pressed("Quit"):
get_tree().quit()
func _on_host_button_pressed() -> void:
main_menu.hide()
enet_peer.create_server(PORT)
multiplayer.multiplayer_peer = enet_peer
multiplayer.peer_connected.connect(add_player)
multiplayer.peer_disconnected.connect(remove_player)
team_select_menu.show()
func _on_join_button_pressed() -> void:
main_menu.hide()
mp_mode = 2
team_select_menu.show()
func _on_ct_button_pressed() -> void:
if mp_mode == 2:
team_select_menu.hide()
team_number = 2
enet_peer.create_client("localhost", PORT)
multiplayer.multiplayer_peer = enet_peer
else:
team_select_menu.hide()
team_number = 2
add_player(multiplayer.get_unique_id())
func _on_t_button_pressed() -> void:
if mp_mode == 2:
team_select_menu.hide()
team_number = 1
enet_peer.create_client("localhost", PORT)
multiplayer.multiplayer_peer = enet_peer
else:
team_select_menu.hide()
team_number = 1
add_player(multiplayer.get_unique_id())
func add_player(peer_id):
var player = Player.instantiate()
player.name = str(peer_id)
add_child(player)
print(team_number)
if(team_number == 2): player.global_transform.origin = spawn_2.global_transform.origin
if(team_number == 1): player.global_transform.origin = spawn_1.global_transform.origin
print(player.global_position)
func remove_player(peer_id):
var player = get_node_or_null(str(peer_id))
if player:
player.queue_free()