forked from unfa/liblast
Updated networking code to new Godot 4 version. Removed unused code in Player.gd and cleaned up commented garbage
parent
b11b83f918
commit
70f24ce4e7
|
@ -88,7 +88,7 @@ var jetpack_was_active = false
|
||||||
var velocity := Vector3.ZERO
|
var velocity := Vector3.ZERO
|
||||||
var gravity_vec := Vector3.ZERO
|
var gravity_vec := Vector3.ZERO
|
||||||
|
|
||||||
@rpc(nosync,unreliable) func update_movement(player_transform, head_rotation, lin_velocity, jetpack):
|
@rpc(auth, nosync,unreliable) func update_movement(player_transform, head_rotation, lin_velocity, jetpack):
|
||||||
global_transform = player_transform
|
global_transform = player_transform
|
||||||
head.set_rotation(head_rotation)
|
head.set_rotation(head_rotation)
|
||||||
jetpack_active = jetpack
|
jetpack_active = jetpack
|
||||||
|
@ -98,23 +98,7 @@ func _ready() -> void:
|
||||||
#Input.set_mouse_mode(Input.MOUSE_MODE_CAPTURED)
|
#Input.set_mouse_mode(Input.MOUSE_MODE_CAPTURED)
|
||||||
view_zoom_target = 1.0
|
view_zoom_target = 1.0
|
||||||
|
|
||||||
# generate_info()
|
if is_multiplayer_authority(): # prevent puppets from attempting to steer the authority - this just causes RPC errors
|
||||||
|
|
||||||
rpc_config(&'move_and_slide', MultiplayerAPI.RPC_MODE_ANY)
|
|
||||||
rpc_config(&"aim", MultiplayerAPI.RPC_MODE_ANY)
|
|
||||||
rpc_config(&"set_global_transform", MultiplayerAPI.RPC_MODE_ANY)
|
|
||||||
rpc_config(&"set_linear_velocity", MultiplayerAPI.RPC_MODE_ANY)
|
|
||||||
head.rpc_config(&"set_rotation", MultiplayerAPI.RPC_MODE_ANY)
|
|
||||||
rpc_config(&"set_info", MultiplayerAPI.RPC_MODE_ANY)
|
|
||||||
|
|
||||||
# rpc_config(&'move_and_slide', MultiplayerAPI.RPC_MODE_PUPPETSYNC)
|
|
||||||
# rpc_config(&"aim", MultiplayerAPI.RPC_MODE_PUPPETSYNC)
|
|
||||||
# rpc_config(&"set_global_transform", MultiplayerAPI.RPC_MODE_PUPPET)
|
|
||||||
# rpc_config(&"set_linear_velocity", MultiplayerAPI.RPC_MODE_PUPPET)
|
|
||||||
# head.rpc_config(&"set_rotation", MultiplayerAPI.RPC_MODE_PUPPETSYNC)
|
|
||||||
# rpc_config(&"set_info", MultiplayerAPI.RPC_MODE_PUPPETSYNC)
|
|
||||||
|
|
||||||
if is_network_authority(): # prevent puppets from attempting to steer the authority - this just causes RPC errors
|
|
||||||
input_active = true
|
input_active = true
|
||||||
$Head/Camera.current = true
|
$Head/Camera.current = true
|
||||||
else:
|
else:
|
||||||
|
@ -143,7 +127,7 @@ func _input(event) -> void:
|
||||||
if not input_active:
|
if not input_active:
|
||||||
return
|
return
|
||||||
|
|
||||||
assert(is_network_authority() == true, "input_active is true, even though the node is not network_authority")
|
assert(is_multiplayer_authority() == true, "input_active is true, even though the node is not multiplayer_authority")
|
||||||
|
|
||||||
if Input.is_action_just_pressed("view_zoom"):
|
if Input.is_action_just_pressed("view_zoom"):
|
||||||
# tween.remove_all()
|
# tween.remove_all()
|
||||||
|
@ -183,7 +167,7 @@ func _process(delta):
|
||||||
if not input_active:
|
if not input_active:
|
||||||
return
|
return
|
||||||
|
|
||||||
assert(is_network_authority() == true, "input_active is true, even though the node is not network_authority")
|
assert(is_multiplayer_authority() == true, "input_active is true, even though the node is not multiplayer_authority")
|
||||||
|
|
||||||
if view_zoom_direction and view_zoom < view_zoom_target:
|
if view_zoom_direction and view_zoom < view_zoom_target:
|
||||||
view_zoom = min(view_zoom_target, view_zoom + delta * 4)
|
view_zoom = min(view_zoom_target, view_zoom + delta * 4)
|
||||||
|
@ -192,41 +176,35 @@ func _process(delta):
|
||||||
|
|
||||||
|
|
||||||
func damage(hp: int):
|
func damage(hp: int):
|
||||||
var target = main.player_list.players[self.get_network_authority()]
|
var target = main.player_list.players[self.get_multiplayer_authority()]
|
||||||
target.health -= hp
|
target.health -= hp
|
||||||
# if target.health <= 0: # int(name) is the player instance node name signifying owner's PID
|
|
||||||
# die()
|
|
||||||
|
|
||||||
func die(killer_pid: int):
|
func die(killer_pid: int):
|
||||||
var gibs = gibs_vfx.instantiate()
|
var gibs = gibs_vfx.instantiate()
|
||||||
get_tree().root.add_child(gibs)
|
get_tree().root.add_child(gibs)
|
||||||
gibs.global_transform = self.global_transform#
|
gibs.global_transform = self.global_transform#
|
||||||
|
|
||||||
#if get_tree().get_rpc_sender_id() != get_network_authority():
|
#if get_tree().get_rpc_sender_id() != get_multiplayer_authority():
|
||||||
# print ("Death requested by a non-master. Ignoring")
|
# print ("Death requested by a non-master. Ignoring")
|
||||||
# return
|
# return
|
||||||
main.rpc(&'destroy_player', self.get_network_authority())
|
main.rpc(&'destroy_player', self.get_multiplayer_authority())
|
||||||
|
|
||||||
|
|
||||||
main.chat.rpc(&'chat_notification', "Player [/i][b][color=" + main.player_list.players[self.get_network_authority()].color.to_html() + "]" + main.player_list.players[self.get_network_authority()].name + "[/color][/b][i] was killed by " + main.player_list.players[killer_pid].name )
|
main.chat.rpc(&'chat_notification', "Player [/i][b][color=" + main.player_list.players[self.get_multiplayer_authority()].color.to_html() + "]" + main.player_list.players[self.get_multiplayer_authority()].name + "[/color][/b][i] was killed by " + main.player_list.players[killer_pid].name )
|
||||||
#queue_free()
|
#queue_free()
|
||||||
|
|
||||||
func update_player(info) -> void:
|
func update_player(info) -> void:
|
||||||
update_color(info.color)
|
update_color(info.color)
|
||||||
|
|
||||||
func update_color(color) -> void: #change player's wolrdmodel color
|
func update_color(color) -> void: #change player's wolrldmodel color
|
||||||
#var pid = self.get_network_authority()
|
|
||||||
var player_material = mesh.mesh.surface_get_material(0).duplicate()
|
var player_material = mesh.mesh.surface_get_material(0).duplicate()
|
||||||
player_material.albedo_color = color
|
player_material.albedo_color = color
|
||||||
mesh.set_surface_override_material(0, player_material)
|
mesh.set_surface_override_material(0, player_material)
|
||||||
|
|
||||||
func _physics_process(delta):
|
func _physics_process(delta):
|
||||||
# rpc_unreliable(&'set_global_transform', global_transform)
|
|
||||||
# head.rpc_unreliable(&'set_rotation', head.get_rotation())
|
|
||||||
#rpc(&'set_global_transform', global_transform)
|
|
||||||
#head.rpc(&'set_rotation', head.get_rotation())
|
|
||||||
|
|
||||||
if not is_network_authority():
|
if not is_multiplayer_authority():
|
||||||
move_and_slide()
|
move_and_slide()
|
||||||
return
|
return
|
||||||
|
|
||||||
|
@ -279,11 +257,6 @@ func _physics_process(delta):
|
||||||
velocity = velocity.lerp(direction * speed, accel * delta)
|
velocity = velocity.lerp(direction * speed, accel * delta)
|
||||||
|
|
||||||
linear_velocity = velocity + gravity_vec
|
linear_velocity = velocity + gravity_vec
|
||||||
#slide = move_and_slide_with_snap(movement, snap, Vector3.UP)
|
|
||||||
# rpc_unreliable(&'set_linear_velocity', linear_velocity)
|
|
||||||
# rpc_unreliable(&"move_and_slide")
|
|
||||||
# rpc(&'set_linear_velocity', linear_velocity)
|
|
||||||
# rpc(&'move_and_slide')
|
|
||||||
move_and_slide()
|
move_and_slide()
|
||||||
|
|
||||||
if not is_on_floor() and not ground_check.is_colliding(): # while in mid-air collisions affect momentum
|
if not is_on_floor() and not ground_check.is_colliding(): # while in mid-air collisions affect momentum
|
||||||
|
@ -291,12 +264,6 @@ func _physics_process(delta):
|
||||||
velocity.z = linear_velocity.z
|
velocity.z = linear_velocity.z
|
||||||
gravity_vec.y = linear_velocity.y
|
gravity_vec.y = linear_velocity.y
|
||||||
|
|
||||||
# update puppets
|
|
||||||
# if get_tree().multiplayer.get_network_unique_id() == 1:
|
|
||||||
# rpc(&'update_movement', global_transform, head.get_rotation())
|
|
||||||
# else:
|
|
||||||
# rpc_id(1, &'update_movement', global_transform, head.get_rotation())
|
|
||||||
#
|
|
||||||
rpc(&'update_movement', global_transform, head.get_rotation(), linear_velocity, jetpack_active)
|
rpc(&'update_movement', global_transform, head.get_rotation(), linear_velocity, jetpack_active)
|
||||||
|
|
||||||
# (stair) climbing
|
# (stair) climbing
|
||||||
|
|
|
@ -35,12 +35,12 @@ func scoretab(show := true):
|
||||||
# Called every frame. 'delta' is the elapsed time since the previous frame.
|
# Called every frame. 'delta' is the elapsed time since the previous frame.
|
||||||
func _process(delta):
|
func _process(delta):
|
||||||
# if main.local_player == null: # player is dead ATM
|
# if main.local_player == null: # player is dead ATM
|
||||||
# print("local_player is null; PID is ", get_tree().multiplayer.get_network_unique_id(),"; respawn queue: ", main.respawn_queue)
|
# print("local_player is null; PID is ", get_tree().multiplayer.get_multiplayer_unique_id(),"; respawn queue: ", main.respawn_queue)
|
||||||
if not get_tree().multiplayer.has_network_peer(): # don't do anything if we're offline
|
if not get_tree().multiplayer.has_multiplayer_peer(): # don't do anything if we're offline
|
||||||
return
|
return
|
||||||
|
|
||||||
if main.spawn_queue.has(get_tree().multiplayer.get_network_unique_id()):
|
if main.spawn_queue.has(get_tree().multiplayer.get_unique_id()):
|
||||||
var countdown = main.spawn_queue[get_tree().multiplayer.get_network_unique_id()] - main.uptime
|
var countdown = main.spawn_queue[get_tree().multiplayer.get_unique_id()] - main.uptime
|
||||||
# countdown = round(countdown * 10) / 10
|
# countdown = round(countdown * 10) / 10
|
||||||
$RespawnCountdown.text = "RESPAWNING IN " + str("%1.2f" % countdown) + " SECONDS..."
|
$RespawnCountdown.text = "RESPAWNING IN " + str("%1.2f" % countdown) + " SECONDS..."
|
||||||
$RespawnCountdown.visible = true
|
$RespawnCountdown.visible = true
|
||||||
|
|
|
@ -20,7 +20,7 @@ var impact_player = preload("res://Assets/Effects/ImpactBlood.tscn")
|
||||||
#enum Trigger {TRIGGER_PRIMARY, TRIGGER_SECONDARY}
|
#enum Trigger {TRIGGER_PRIMARY, TRIGGER_SECONDARY}
|
||||||
|
|
||||||
@rpc(sync) func shoot():
|
@rpc(sync) func shoot():
|
||||||
#print("SHOOT from PID ", get_tree().multiplayer.get_network_unique_id(), " controlled by ", player.get_network_authority())
|
#print("SHOOT from PID ", get_tree().multiplayer.get_multiplayer_unique_id(), " controlled by ", player.get_multiplayer_authority())
|
||||||
var space_state = get_world_3d().direct_space_state
|
var space_state = get_world_3d().direct_space_state
|
||||||
|
|
||||||
var from = camera.get_global_transform().origin
|
var from = camera.get_global_transform().origin
|
||||||
|
@ -35,21 +35,21 @@ var impact_player = preload("res://Assets/Effects/ImpactBlood.tscn")
|
||||||
|
|
||||||
if ray: # did we hit anything?
|
if ray: # did we hit anything?
|
||||||
if ray['collider'].has_method(&'damage'):
|
if ray['collider'].has_method(&'damage'):
|
||||||
if is_network_authority(): #get_tree().multiplayer.get_network_unique_id() == 1: # make sure this can only run on the server
|
if is_multiplayer_authority(): #get_tree().multiplayer.get_multiplayer_unique_id() == 1: # make sure this can only run on the server
|
||||||
#print("SHOT HIT ", ray['collider'])
|
#print("SHOT HIT ", ray['collider'])
|
||||||
ray['collider'].damage(20) # apply damage
|
ray['collider'].damage(20) # apply damage
|
||||||
if main.player_list.get(ray['collider'].get_network_authority()).health <= 0: # if he ded
|
if main.player_list.get(ray['collider'].get_multiplayer_authority()).health <= 0: # if he ded
|
||||||
ray['collider'].die(self.get_network_authority())
|
ray['collider'].die(self.get_multiplayer_authority())
|
||||||
|
|
||||||
main.player_list.players[player.get_network_authority()].score += 1 # give the killer a point
|
main.player_list.players[player.get_multiplayer_authority()].score += 1 # give the killer a point
|
||||||
main.rpc(&'player_list_update', main.player_list.get(player.get_network_authority()).serialize(), player.get_network_authority())
|
main.rpc(&'player_list_update', main.player_list.get(player.get_multiplayer_authority()).serialize(), player.get_multiplayer_authority())
|
||||||
hud.get_node("Crosshair").kill()
|
hud.get_node("Crosshair").kill()
|
||||||
# update local HUD
|
# update local HUD
|
||||||
else:
|
else:
|
||||||
hud.get_node("Crosshair").hit()
|
hud.get_node("Crosshair").hit()
|
||||||
|
|
||||||
# boardcast the new health value to all peers
|
# boardcast the new health value to all peers
|
||||||
main.rpc(&'player_list_update', main.player_list.get(ray['collider'].get_network_authority()).serialize(), ray['collider'].get_network_authority())
|
main.rpc(&'player_list_update', main.player_list.get(ray['collider'].get_multiplayer_authority()).serialize(), ray['collider'].get_multiplayer_authority())
|
||||||
main.update_hud()
|
main.update_hud()
|
||||||
|
|
||||||
impact_vfx = impact_player.instantiate()
|
impact_vfx = impact_player.instantiate()
|
||||||
|
|
86
Game/Main.gd
86
Game/Main.gd
|
@ -1,8 +1,7 @@
|
||||||
extends Node
|
extends Node
|
||||||
|
|
||||||
enum GameFocus {MENU, GAME, CHAT, AWAY}
|
enum GameFocus {MENU, GAME, CHAT, AWAY}
|
||||||
enum NetworkRole {NONE, CLIENT, SERVER, DEDICATED_SERVER, RELAY_SERVER}
|
enum MultiplayerRole {NONE, CLIENT, SERVER, DEDICATED_SERVER, RELAY_SERVER}
|
||||||
|
|
||||||
|
|
||||||
const NET_PORT = 12597
|
const NET_PORT = 12597
|
||||||
|
|
||||||
|
@ -11,10 +10,10 @@ const NET_SERVER = "localhost"
|
||||||
|
|
||||||
var peer = ENetMultiplayerPeer.new()
|
var peer = ENetMultiplayerPeer.new()
|
||||||
|
|
||||||
var role = NetworkRole.NONE:
|
var role = MultiplayerRole.NONE:
|
||||||
set(new_role):
|
set(new_role):
|
||||||
role = new_role
|
role = new_role
|
||||||
print("Network Role changed to ", NetworkRole.keys()[new_role])
|
print("Multiplayer Role changed to ", MultiplayerRole.keys()[new_role])
|
||||||
|
|
||||||
var player_scene = preload("res://Assets/Characters/Player.tscn")
|
var player_scene = preload("res://Assets/Characters/Player.tscn")
|
||||||
|
|
||||||
|
@ -41,11 +40,6 @@ class PlayerInfo:
|
||||||
self.focus = 999
|
self.focus = 999
|
||||||
self.health = 100
|
self.health = 100
|
||||||
self.score = 0
|
self.score = 0
|
||||||
# else:
|
|
||||||
# self.name = name
|
|
||||||
# self.team = team
|
|
||||||
# self.color = color
|
|
||||||
# self.focus = 0
|
|
||||||
|
|
||||||
func serialize():
|
func serialize():
|
||||||
return {
|
return {
|
||||||
|
@ -96,15 +90,12 @@ func _process(delta):
|
||||||
|
|
||||||
for i in spawn_queue.keys():
|
for i in spawn_queue.keys():
|
||||||
if spawn_queue[i] <= uptime:
|
if spawn_queue[i] <= uptime:
|
||||||
var is_local = true if i == get_tree().multiplayer.get_network_unique_id() else false
|
var is_local = true if i == get_tree().multiplayer.get_unique_id() else false
|
||||||
create_player(i, is_local, true)
|
create_player(i, is_local, true)
|
||||||
spawn_queue.erase(i)
|
spawn_queue.erase(i)
|
||||||
|
|
||||||
class PlayerList:
|
class PlayerList:
|
||||||
var players = {}
|
var players = {}
|
||||||
#
|
|
||||||
# func store(pid, item):
|
|
||||||
# items[pid] = item
|
|
||||||
|
|
||||||
func erase(pid):
|
func erase(pid):
|
||||||
players.erase(pid)
|
players.erase(pid)
|
||||||
|
@ -112,21 +103,10 @@ class PlayerList:
|
||||||
func set(pid: int, info: PlayerInfo):
|
func set(pid: int, info: PlayerInfo):
|
||||||
# if info is PlayerInfo:
|
# if info is PlayerInfo:
|
||||||
players[pid] = info
|
players[pid] = info
|
||||||
# else:
|
|
||||||
# var new_info = PlayerInfo.deserialize(info)
|
|
||||||
# players[pid] = new_info
|
|
||||||
|
|
||||||
func get(pid: int) -> PlayerInfo:
|
func get(pid: int) -> PlayerInfo:
|
||||||
return players[pid]
|
return players[pid]
|
||||||
|
|
||||||
# func update():
|
|
||||||
# if get_tree().multiplayer.get_network_unique_id() == 1:
|
|
||||||
# for i in players.keys:
|
|
||||||
# rpc(&'player_list_update', i, players[i].serialize())
|
|
||||||
# else:
|
|
||||||
# rpc_id(1, &'player_list_update', players[get_tree().multiplayer.get_network_unique_id()].serialize())
|
|
||||||
|
|
||||||
|
|
||||||
@onready var player_list = PlayerList.new()
|
@onready var player_list = PlayerList.new()
|
||||||
|
|
||||||
var focus = GameFocus.MENU :
|
var focus = GameFocus.MENU :
|
||||||
|
@ -153,16 +133,6 @@ var focus = GameFocus.MENU :
|
||||||
|
|
||||||
focus = new_focus
|
focus = new_focus
|
||||||
|
|
||||||
#@remote set_info(info) -> void:
|
|
||||||
# player_info = PlayerInfo.new(info['name'], info['team'].to_int(), Color(info['color']))
|
|
||||||
# print("set_info - rpc called from ", get_tree().get_rpc_sender_id())
|
|
||||||
|
|
||||||
#@master func update_info() -> void:
|
|
||||||
# rpc(&'set_info', player_info.serialize())
|
|
||||||
|
|
||||||
#@master func generate_info() -> void:
|
|
||||||
#rpc(&'set_info', PlayerInfo.new(player_name, 0, color).serialize() )
|
|
||||||
|
|
||||||
func _input(_event) -> void:
|
func _input(_event) -> void:
|
||||||
if Input.is_action_just_pressed("ui_cancel"):
|
if Input.is_action_just_pressed("ui_cancel"):
|
||||||
if focus == GameFocus.GAME:
|
if focus == GameFocus.GAME:
|
||||||
|
@ -175,9 +145,6 @@ func _input(_event) -> void:
|
||||||
elif Input.is_action_just_released("show_scoretab"):
|
elif Input.is_action_just_released("show_scoretab"):
|
||||||
hud.scoretab(false)
|
hud.scoretab(false)
|
||||||
|
|
||||||
#@remote func st(player_list):
|
|
||||||
# self.player_list = player_list
|
|
||||||
|
|
||||||
func game_over():
|
func game_over():
|
||||||
pass
|
pass
|
||||||
|
|
||||||
|
@ -185,13 +152,12 @@ func check_game_win_condition():
|
||||||
for i in player_list.players.keys():
|
for i in player_list.players.keys():
|
||||||
if player_list.players[i].score >= game_score_limit:
|
if player_list.players[i].score >= game_score_limit:
|
||||||
chat.rpc(&'chat_notification', "Player " + player_list.players[i].name + " has won this round!")
|
chat.rpc(&'chat_notification', "Player " + player_list.players[i].name + " has won this round!")
|
||||||
#rpc(&'game_over', player_list.players[i].name)
|
|
||||||
game_over()
|
game_over()
|
||||||
|
|
||||||
func update_hud():
|
func update_hud():
|
||||||
hud.get_node("ScoreRank").text = "SCORE: " + str(player_list.get( get_tree().multiplayer.get_network_unique_id() ).score)
|
hud.get_node("ScoreRank").text = "SCORE: " + str(player_list.get( get_tree().multiplayer.get_unique_id() ).score)
|
||||||
|
|
||||||
var score = player_list.get( get_tree().multiplayer.get_network_unique_id() ).score
|
var score = player_list.get( get_tree().multiplayer.get_unique_id() ).score
|
||||||
var scores = []
|
var scores = []
|
||||||
|
|
||||||
for i in player_list.players.values():
|
for i in player_list.players.values():
|
||||||
|
@ -207,8 +173,6 @@ func update_hud():
|
||||||
|
|
||||||
var lead = score - scores[0]
|
var lead = score - scores[0]
|
||||||
|
|
||||||
#var rank =
|
|
||||||
|
|
||||||
hud.get_node("ScoreRank").text = "SCORE: " + str(score) + "\nRANK: "
|
hud.get_node("ScoreRank").text = "SCORE: " + str(score) + "\nRANK: "
|
||||||
|
|
||||||
if lead > 0:
|
if lead > 0:
|
||||||
|
@ -235,9 +199,9 @@ func update_hud():
|
||||||
update_hud()
|
update_hud()
|
||||||
|
|
||||||
func push_local_player_info(): #
|
func push_local_player_info(): #
|
||||||
var id = get_tree().multiplayer.get_network_unique_id()
|
var id = get_tree().multiplayer.get_unique_id()
|
||||||
|
|
||||||
rpc(&'player_list_update', player_list.get(id).serialize(), get_tree().multiplayer.get_network_unique_id())
|
rpc(&'player_list_update', player_list.get(id).serialize(), get_tree().multiplayer.get_unique_id())
|
||||||
|
|
||||||
@rpc(sync,auth,reliable) func destroy_player(pid: int):
|
@rpc(sync,auth,reliable) func destroy_player(pid: int):
|
||||||
|
|
||||||
|
@ -262,7 +226,7 @@ func create_player(pid: int, is_local:= false, respawn:= false) -> void:
|
||||||
var spawnpoint = $Map/SpawnPoints.get_children()[randi() % len($Map/SpawnPoints.get_children())]
|
var spawnpoint = $Map/SpawnPoints.get_children()[randi() % len($Map/SpawnPoints.get_children())]
|
||||||
new_player.name = str(pid)
|
new_player.name = str(pid)
|
||||||
new_player.global_transform = spawnpoint.global_transform
|
new_player.global_transform = spawnpoint.global_transform
|
||||||
new_player.set_network_authority(pid)
|
new_player.set_multiplayer_authority(pid)
|
||||||
$Players.add_child(new_player)
|
$Players.add_child(new_player)
|
||||||
|
|
||||||
var new_info: PlayerInfo
|
var new_info: PlayerInfo
|
||||||
|
@ -277,7 +241,7 @@ func create_player(pid: int, is_local:= false, respawn:= false) -> void:
|
||||||
player_list.set(pid, new_info)
|
player_list.set(pid, new_info)
|
||||||
|
|
||||||
# superfluous and harmful code that messes up player data:
|
# superfluous and harmful code that messes up player data:
|
||||||
# if get_tree().multiplayer.get_network_unique_id() != 1: # if we're not the server - update the server
|
# if get_tree().multiplayer.get_multiplayer_unique_id() != 1: # if we're not the server - update the server
|
||||||
# rpc_id(1, &'player_list_update', new_info.serialize(), pid) # send local player info to the server
|
# rpc_id(1, &'player_list_update', new_info.serialize(), pid) # send local player info to the server
|
||||||
# else: # if we're the server, update the clients
|
# else: # if we're the server, update the clients
|
||||||
# rpc(&'player_list_update', new_info.serialize(), pid)
|
# rpc(&'player_list_update', new_info.serialize(), pid)
|
||||||
|
@ -294,18 +258,18 @@ func create_player(pid: int, is_local:= false, respawn:= false) -> void:
|
||||||
#new_player.rpc(&'set_color', player_list.get(pid).color)
|
#new_player.rpc(&'set_color', player_list.get(pid).color)
|
||||||
|
|
||||||
func start_dedicated_server(): # start server without creating a local player
|
func start_dedicated_server(): # start server without creating a local player
|
||||||
role = NetworkRole.DEDICATED_SERVER
|
role = MultiplayerRole.DEDICATED_SERVER
|
||||||
peer.create_server(NET_PORT, 16)
|
peer.create_server(NET_PORT, 16)
|
||||||
get_tree().network_peer = peer
|
get_tree().multiplayer_peer = peer
|
||||||
#create_player(1, true)
|
#create_player(1, true)
|
||||||
|
|
||||||
func _on_Host_pressed(): # start server and create a local player
|
func _on_Host_pressed(): # start server and create a local player
|
||||||
role = NetworkRole.SERVER
|
role = MultiplayerRole.SERVER
|
||||||
$NetworkTesting/Host.disabled = true
|
$NetworkTesting/Host.disabled = true
|
||||||
$NetworkTesting/Connect.disabled = true
|
$NetworkTesting/Connect.disabled = true
|
||||||
|
|
||||||
peer.create_server(NET_PORT, 16)
|
peer.create_server(NET_PORT, 16)
|
||||||
get_tree().multiplayer.network_peer = peer
|
get_tree().multiplayer.multiplayer_peer = peer
|
||||||
create_player(1, true)
|
create_player(1, true)
|
||||||
focus = GameFocus.GAME
|
focus = GameFocus.GAME
|
||||||
chat.chat_notification("Started server")
|
chat.chat_notification("Started server")
|
||||||
|
@ -315,13 +279,13 @@ func _on_Connect_pressed():
|
||||||
$NetworkTesting/Connect.disabled = true
|
$NetworkTesting/Connect.disabled = true
|
||||||
|
|
||||||
peer.create_client(NET_SERVER, NET_PORT)
|
peer.create_client(NET_SERVER, NET_PORT)
|
||||||
get_tree().multiplayer.network_peer = peer
|
get_tree().multiplayer.multiplayer_peer = peer
|
||||||
|
|
||||||
func _player_connected(pid) -> void:
|
func _player_connected(pid) -> void:
|
||||||
print("player connected, id: ", pid)
|
print("player connected, id: ", pid)
|
||||||
create_player(pid, false)
|
create_player(pid, false)
|
||||||
|
|
||||||
if get_tree().multiplayer.get_network_unique_id() == 1: # if we're the server
|
if get_tree().multiplayer.is_server(): # if we're the server
|
||||||
for i in player_list.players.keys(): # send the player_list to the new client
|
for i in player_list.players.keys(): # send the player_list to the new client
|
||||||
#pass
|
#pass
|
||||||
rpc_id(pid, &'player_list_update', player_list.get(i).serialize(), i) # send local player info to the server
|
rpc_id(pid, &'player_list_update', player_list.get(i).serialize(), i) # send local player info to the server
|
||||||
|
@ -329,22 +293,22 @@ func _player_connected(pid) -> void:
|
||||||
# if local_player:
|
# if local_player:
|
||||||
# local_player.rpc(&"update_info")
|
# local_player.rpc(&"update_info")
|
||||||
#
|
#
|
||||||
# if role in [NetworkRole.SERVER, NetworkRole.DEDICATED_SERVER]:
|
# if role in [MultiplayerRole.SERVER, MultiplayerRole.DEDICATED_SERVER]:
|
||||||
# rpc_id(id, "player_list_update", player_list)
|
# rpc_id(id, "player_list_update", player_list)
|
||||||
|
|
||||||
func _player_disconnected(pid) -> void:
|
func _player_disconnected(pid) -> void:
|
||||||
print("player disconnected, id: ", pid)
|
print("player disconnected, id: ", pid)
|
||||||
|
|
||||||
if get_tree().multiplayer.get_network_unique_id() == 1: # if we're the server, broadcast that a player left
|
if get_tree().multiplayer.is_server(): # if we're the server, broadcast that a player left
|
||||||
chat.rpc(&'chat_notification', "Player [b]" + player_list.get(pid).name + "[/b] left")
|
chat.rpc(&'chat_notification', "Player [b]" + player_list.get(pid).name + "[/b] left")
|
||||||
|
|
||||||
func _connected_ok() -> void:
|
func _connected_ok() -> void:
|
||||||
print("connected to server")
|
print("connected to server")
|
||||||
chat.chat_notification("Connected to server")
|
chat.chat_notification("Connected to server")
|
||||||
var pid = get_tree().multiplayer.get_network_unique_id()
|
var pid = get_tree().multiplayer.get_unique_id()
|
||||||
create_player(pid, true)
|
create_player(pid, true)
|
||||||
focus = GameFocus.GAME
|
focus = GameFocus.GAME
|
||||||
role = NetworkRole.CLIENT
|
role = MultiplayerRole.CLIENT
|
||||||
|
|
||||||
func _connected_fail() -> void:
|
func _connected_fail() -> void:
|
||||||
print("connection to server failed")
|
print("connection to server failed")
|
||||||
|
@ -352,7 +316,7 @@ func _connected_fail() -> void:
|
||||||
|
|
||||||
func _server_disconnected() -> void:
|
func _server_disconnected() -> void:
|
||||||
print("server disconnected")
|
print("server disconnected")
|
||||||
role = NetworkRole.NONE
|
role = MultiplayerRole.NONE
|
||||||
chat.chat_notification("Server disconnected")
|
chat.chat_notification("Server disconnected")
|
||||||
|
|
||||||
|
|
||||||
|
@ -360,8 +324,8 @@ func _ready() -> void:
|
||||||
#peer.compression_mode = NetworkedMultiplayerENet.COMPRESS_ZSTD
|
#peer.compression_mode = NetworkedMultiplayerENet.COMPRESS_ZSTD
|
||||||
print("Commandline arguments: ", OS.get_cmdline_args())
|
print("Commandline arguments: ", OS.get_cmdline_args())
|
||||||
|
|
||||||
get_tree().multiplayer.connect("network_peer_connected", self._player_connected)
|
get_tree().multiplayer.connect("peer_connected", self._player_connected)
|
||||||
get_tree().multiplayer.connect("network_peer_disconnected", self._player_disconnected)
|
get_tree().multiplayer.connect("peer_disconnected", self._player_disconnected)
|
||||||
get_tree().multiplayer.connect("connected_to_server", self._connected_ok)
|
get_tree().multiplayer.connect("connected_to_server", self._connected_ok)
|
||||||
get_tree().multiplayer.connect("connection_failed", self._connected_fail)
|
get_tree().multiplayer.connect("connection_failed", self._connected_fail)
|
||||||
get_tree().multiplayer.connect("server_disconnected", self._server_disconnected)
|
get_tree().multiplayer.connect("server_disconnected", self._server_disconnected)
|
||||||
|
@ -370,12 +334,12 @@ func _ready() -> void:
|
||||||
start_dedicated_server()
|
start_dedicated_server()
|
||||||
|
|
||||||
func _on_TextEdit_text_submitted(new_text):
|
func _on_TextEdit_text_submitted(new_text):
|
||||||
player_list.players[get_tree().multiplayer.get_network_unique_id()].name = new_text
|
player_list.players[get_tree().multiplayer.get_unique_id()].name = new_text
|
||||||
push_local_player_info()
|
push_local_player_info()
|
||||||
#chat_announcement("Player " + old_name + " is now known as " + new_name)
|
#chat_announcement("Player " + old_name + " is now known as " + new_name)
|
||||||
|
|
||||||
func _on_ColorPickerButton_color_changed(color):
|
func _on_ColorPickerButton_color_changed(color):
|
||||||
player_list.players[get_tree().multiplayer.get_network_unique_id()].color = color
|
player_list.players[get_tree().multiplayer.get_unique_id()].color = color
|
||||||
push_local_player_info()
|
push_local_player_info()
|
||||||
#local_player.rpc(&'set_color', color)
|
#local_player.rpc(&'set_color', color)
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue