RustTip

CanClientLogin

OxideCarbonPlayer

Called to determine whether to client login.

Return true to allow the action and false to block it.

void CanClientLogin(Network.Connection connection)
Работает — метод игры в этой сборке тот же, под который написан хук.

Параметры

connection
Network.Connection

Возвращаемое значение

voidПоведение не описано.

Пример

private void CanClientLogin(Network.Connection connection)
{
    Puts("CanClientLogin");
}

Работает и в Oxide, и в Carbon: Carbon загружает плагины Oxide без изменений.

Где вызывается

ядро Oxide (Oxide.Rust)
RustCore::IOnUserApprove(Connection connection)

Код ядра Oxide — отсюда вызывается хук

// …
        permission.AddUserGroup(connectionId, defaultGroups.Administrators);
    }
}

// Let covalence know
Covalence.PlayerManager.PlayerJoin(connection.userid, playerName);

// Call hooks for plugins
object loginSpecific = Interface.CallHook("CanClientLogin", connection);
object loginCovalence = Interface.CallHook("CanUserLogin", playerName, connectionId, connectionIp);
object canLogin = loginSpecific is null ? loginCovalence : loginSpecific;
if (canLogin is string || canLogin is bool loginBlocked && !loginBlocked)
{
    ConnectionAuth.Reject(connection, canLogin is string ? canLogin.ToString() : lang.GetMessage("ConnectionRejected", this, connectionId));
    return true;
}

// …

Место встраивания

Rust.opj (Oxide)
void ConnectionAuth.OnNewConnection(Network.Connection)

Встроен служебный хук IOnUserApprove — этот хук вызывает его обработчик в ядре Oxide/Carbon

РаботаетReturnBehavior: ExitWhenValidTypeArgumentBehavior: UseArgumentString (a0)Assembly-CSharp.dll

Где вызывается (код игры этой ветки)

// …
		DebugEx.Log(connection.ToString() + " has auth level 2");
		connection.authLevel = 2u;
	}
	if (DeveloperList.Contains(connection.userid))
	{
		DebugEx.Log(connection.ToString() + " is a developer");
		connection.authLevel = 3u;
	}
	if (Interface.CallHook("IOnUserApprove", connection) != null)
	{
		return;
	}
	m_AuthConnection.Add(connection);
	StartCoroutine(AuthorisationRoutine(connection));
}

Источники: Rust.opj из OxideMod/Oxide.Rust (MIT) и метаданные хуков документации Carbon (MIT). Код методов — декомпиляция сервера этой ветки.