Attention: Here be dragons

This is the latest (unstable) version of this documentation, which may document features not available in or compatible with released stable versions of Godot.

MultiplayerAPIExtension

Успадковує: MultiplayerAPI < RefCounted < Object

Базовий клас, який використовується для розширення MultiplayerAPI.

Опис

Цей клас можна використовувати для розширення або заміни реалізації MultiplayerAPI за замовчуванням за допомогою скрипта або розширень.

Наступний приклад розширює реалізацію за замовчуванням (SceneMultiplayer) шляхом реєстрування кожного створеного RPC та кожного об'єкта, налаштованого для реплікації.

extends MultiplayerAPIExtension
class_name LogMultiplayer

# Ми хочемо розширити реалізацію SceneMultiplayer за замовчуванням.
var base_multiplayer = SceneMultiplayer.new()

func _init():
# Просто пропускаємо базові сигнали (скопійовані в var, щоб уникнути циклічного посилання)
var cts = connected_to_server
var cf = connection_failed
var sd = server_disconnected
var pc = peer_connected
var pd = peer_disconnected
base_multiplayer.connected_to_server.connect(func(): cts.emit())
base_multiplayer.connection_failed.connect(func(): cf.emit())
base_multiplayer.server_disconnected.connect(func(): sd.emit())
base_multiplayer.peer_connected.connect(func(id): pc.emit(id))
base_multiplayer.peer_disconnected.connect(func(id): pd.emit(id))

func _poll():
return base_multiplayer.poll()

# Записати створення RPC та переслати його до багатокористувацького режиму за замовчуванням.
func _rpc(peer: int, object: Object, method: StringName, args: Array) -> Помилка:
print("Отримано RPC для %d: %s::%s(%s)" % [peer, object, method, args])
return base_multiplayer.rpc(peer, object, method, args)

# Записати конфігурацію додавання. Наприклад, кореневий шлях (nullptr, NodePath), реплікація (Node, Spawner|Synchronizer), custom.
func _object_configuration_add(object, config: Variant) -> Помилка:
if config is MultiplayerSynchronizer:
print("Додавання конфігурації синхронізації для %s. Синхронізатор: %s" % [object, config])
elif config is MultiplayerSpawner:
print("Додавання вузла %s до списку спавнів. Спавнер: %s" % [object, config])
return base_multiplayer.object_configuration_add(object, config)

# Записати видалення конфігурації. Наприклад, кореневий шлях (nullptr, NodePath), реплікація (Node, Spawner|Synchronizer), custom.
func _object_configuration_remove(object, config: Variant) -> Помилка:
if config is MultiplayerSynchronizer:
print("Видалення конфігурації синхронізації для %s. Синхронізатор: %s" % [object, config])
elif config is MultiplayerSpawner:
print("Видалення вузла %s зі списку спавнів. Спавнер: %s" % [object, config])
return base_multiplayer.object_configuration_remove(object, config)

# Ці параметри можуть бути необов'язковими, але в нашому випадку ми хочемо розширити SceneMultiplayer, тому пересилаємо все.
func _set_multiplayer_peer(p_peer: MultiplayerPeer):
base_multiplayer.multiplayer_peer = p_peer

func _get_multiplayer_peer() -> MultiplayerPeer:
return base_multiplayer.multiplayer_peer

func _get_unique_id() -> int:
return base_multiplayer.get_unique_id()

func _get_remote_sender_id() -> int:
return base_multiplayer.get_remote_sender_id()

func _get_peer_ids() -> PackedInt32Array:
return base_multiplayer.get_peers()

Потім у вашій головній сцені або в автозавантаженні викличте SceneTree.set_multiplayer(), щоб почати використовувати ваш власний MultiplayerAPI:

# autoload.gd
func _enter_tree():
# Встановлює наш власний багатокористувацький режим як основний у SceneTree.
get_tree().set_multiplayer(LogMultiplayer.new())

Нативні розширення можуть також використовувати метод MultiplayerAPI.set_default_interface() під час ініціалізації, щоб налаштувати себе як реалізацію за замовчуванням.

Методи

MultiplayerPeer

_get_multiplayer_peer() virtual

PackedInt32Array

_get_peer_ids() virtual const

int

_get_remote_sender_id() virtual const

int

_get_unique_id() virtual const

Error

_object_configuration_add(object: Object, configuration: Variant) virtual

Error

_object_configuration_remove(object: Object, configuration: Variant) virtual

Error

_poll() virtual

Error

_rpc(peer: int, object: Object, method: StringName, args: Array) virtual

void

_set_multiplayer_peer(multiplayer_peer: MultiplayerPeer) virtual


Описи методів

MultiplayerPeer _get_multiplayer_peer() virtual 🔗

Зателефоновано при отриманні MultiplayerAPI.multiplayer_peer.


PackedInt32Array _get_peer_ids() virtual const 🔗

Зворотній зв'язок MultiplayerAPI.get_peers().


int _get_remote_sender_id() virtual const 🔗

Зворотній зв'язок MultiplayerAPI.get_remote_sender_id().


int _get_unique_id() virtual const 🔗

Зворотній зв'язок MultiplayerAPI.get_unique_id().


Error _object_configuration_add(object: Object, configuration: Variant) virtual 🔗

Зворотний дзвінок для MultiplayerAPI.object_configuration_add().


Error _object_configuration_remove(object: Object, configuration: Variant) virtual 🔗

Зворотний дзвінок для MultiplayerAPI.object_configuration_remove().


Error _poll() virtual 🔗

Зворотній зв'язок MultiplayerAPI.poll().


Error _rpc(peer: int, object: Object, method: StringName, args: Array) virtual 🔗

Зворотній зв'язок MultiplayerAPI.rpc().


void _set_multiplayer_peer(multiplayer_peer: MultiplayerPeer) virtual 🔗

Зателефоновано при встановленні MultiplayerAPI.multiplayer_peer.