Invalid get index "0" (on base:'Dictionnary')

:information_source: Attention Topic was automatically imported from the old Question2Answer platform.
:bust_in_silhouette: Asked By ROBOTOO007

HEY! i’ve been trying to make a multiplayer game and i used a tutorial for the networking part here’s the link to that video: https://www.youtube.com/watch?v=Xu3LtVihYoo&t=132s
but when i tried creating a server i would get this error : “Invalid get index “0” (on base:‘Dictionnary’)”.
this is my player script:

extends KinematicBody2D

export var maxTimeBetweenShots: int
export var speed:= Vector2(30,30)

var bullet = load("res://gameObjects/bullet.tscn")

var direction: Vector2
var velocity: Vector2
var old_direction: Vector2

var timeBetweenShots: int
var in_body: bool

var old_speed
var b

signal bullet_hit

slave var slave_position = Vector2()
slave var slave_movement = Vector2.ZERO


func _ready() -> void:
	old_speed = speed


func calculateVelocity() -> void:
	if Input.is_action_pressed("Shift"):
		speed = speed * 2
	velocity = direction * speed


func calculateDirection() -> void:
	if is_network_master():
		direction = Vector2( Input.get_action_strength("right") - Input.get_action_strength("left"), 
		Input.get_action_strength("down") - Input.get_action_strength("up"))
		
		rset_unreliable('slave_position', position)
		rset('slave_movement', direction)
	else:
		position = slave_position
	if get_tree().is_network_server():
		Network.update_position(int(name), position)


func setGlobalPlayerPos() -> void:
	global.player_pos = global_position


func createBulletInstance() -> void:
	if timeBetweenShots <= 0:
		b = bullet.instance()
		get_parent().add_child(b)
		var dir = Vector2(1,0).rotated(get_parent().get_node("gun/gun").global_rotation)
		b.start(global.bullet_spawn_pos, dir)
		timeBetweenShots = maxTimeBetweenShots
	else:
		timeBetweenShots -= get_process_delta_time()


func _physics_process(delta: float) -> void:
	calculateDirection()
	calculateVelocity()
	move_and_slide(velocity)
	if direction != old_direction:
		if direction.x > 0 && $player_sprite.flip_h == true:
			$player_sprite.flip_h = false
		elif direction.x < 0 && $player_sprite.flip_h == false:
			$player_sprite.flip_h = true
	old_direction = direction
	setGlobalPlayerPos()
	speed = old_speed


func _process(delta: float) -> void:
	$Label.text = Network.players[get_tree().get_network_unique_id()]["name"]
	var labelSize = $Label.rect_size
	$Label.rect_global_position = position + Vector2(-labelSize.x/2, -75)
	if Input.is_action_pressed("left_click") && global.holding != "none":
		createBulletInstance()
	if in_body && Input.is_action_pressed("E"):
		global.gun_throwing = false
		global.holding = "pistol"


func _on_detector_body_entered(body: Node) -> void:
	if body.is_in_group("Weapons"):
		in_body = true


func _on_detector_body_exited(body: Node) -> void:
	if body.is_in_group("Weapons"):
		in_body = false


func _on_detector_area_entered(area: Area2D) -> void:
		if area.is_in_group("Bullet"):
			$HealthPlayer.current -= area.damage
			area.queue_free()
		elif area.is_in_group("Food"):
			$HealthPlayer.current += 5
			area.queue_free()


func _on_HealthPlayer_depleted() -> void:
	global.holding = "none"
	queue_free()

and here’s my Network script:

extends Node

var SERVER_PORT = 31899
var MAX_PLAYERS = 2
var SERVER_IP = "127.0.0.1"  #192.168.1.46

var players = { }
var self_data = { name = "", position = Vector2(360, 180) }


func _ready() -> void:
	get_tree().connect("network_peer_disconnected", self, "_player_disconnected")


func CreateServer(player_nickname):
	self_data.name = player_nickname
	players[1] = self_data
	var peer = NetworkedMultiplayerENet.new()
	peer.create_server(SERVER_PORT, MAX_PLAYERS)
	get_tree().set_network_peer(peer)


func JoinServer(player_nickname):
	self_data.name = player_nickname
	get_tree().connect("connected_to_server", self, "_connected_to_server")
	var peer = NetworkedMultiplayerENet.new()
	peer.create_client(SERVER_IP, SERVER_PORT)
	get_tree().set_network_peer(peer)


func _connected_to_server():
	players[get_tree().get_network_unique_id()] = self_data
	rpc("_send_player_info", get_tree().get_network_unique_id(), self_data)


func _player_connected(id):
	print("Player connected" + str(id))


func _player_disconnected(id):
	print("Player disconnected" + str(id))
	players.erase(id)


remote func _send_player_info(id, info):
	if get_tree().is_network_server():
		for peer_id in players:
			rpc_id(id, "_send_player_info", peer_id, players[peer_id])
	players[id] = info

	var new_player = load("res://entity/player.tscn").instance()
	new_player.name = str(id)
	new_player.set_network_master(id)
	get_tree().get_root().add_child(new_player)


func update_position(id, position):
#	players[id].position = position 
	print(players[id].position)
 

PLEASE HELP I’M DESPERATE

:bust_in_silhouette: Reply From: ROBOTOO007

NVM i found out

Really, you should post the actual solution here for anyone facing the same problem in the future…

It’s always frustrating to have a problem, spend time searching for an answer, finally finding a post that seems related, only to have it end with “never mind, I figured it out”…

jgodfrey | 2020-05-08 15:22

you’re right mb i just added this to the _send_player_info() function:

new_player.name = str(id)

ROBOTOO007 | 2020-05-08 16:09

in the network script

ROBOTOO007 | 2020-05-08 16:10