This commit is contained in:
Gabriel Tofvesson 2018-04-06 22:22:00 +02:00
commit 1c9c92b43b
454 changed files with 12284 additions and 867 deletions

5
.gitignore vendored
View File

@ -258,4 +258,7 @@ paket-files/
# Python Tools for Visual Studio (PTVS)
__pycache__/
*.pyc
*.pyc
# Docs
docs/LastBuild.log

90
Docs.shfbproj Normal file
View File

@ -0,0 +1,90 @@
<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="14.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<PropertyGroup>
<!-- The configuration and platform will be used to determine which assemblies to include from solution and
project documentation sources -->
<Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
<Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
<SchemaVersion>2.0</SchemaVersion>
<ProjectGuid>{6bae2f52-652d-4268-923d-0e1198bdc825}</ProjectGuid>
<SHFBSchemaVersion>2017.9.26.0</SHFBSchemaVersion>
<!-- AssemblyName, Name, and RootNamespace are not used by SHFB but Visual Studio adds them anyway -->
<AssemblyName>Documentation</AssemblyName>
<RootNamespace>Documentation</RootNamespace>
<Name>Documentation</Name>
<!-- SHFB properties -->
<FrameworkVersion>.NET Framework 3.5</FrameworkVersion>
<OutputPath>Docs\</OutputPath>
<HtmlHelpName>Documentation</HtmlHelpName>
<Language>en-US</Language>
<HelpFileFormat>Website</HelpFileFormat>
<SyntaxFilters>C#</SyntaxFilters>
<PresentationStyle>VS2013</PresentationStyle>
<CleanIntermediates>True</CleanIntermediates>
<KeepLogFile>True</KeepLogFile>
<DisableCodeBlockComponent>False</DisableCodeBlockComponent>
<IndentHtml>False</IndentHtml>
<BuildAssemblerVerbosity>OnlyWarningsAndErrors</BuildAssemblerVerbosity>
<HelpTitle>MLAPI API Reference</HelpTitle>
<HelpFileVersion>1.0.0.0</HelpFileVersion>
<RootNamespaceContainer>False</RootNamespaceContainer>
<NamespaceGrouping>False</NamespaceGrouping>
<Preliminary>True</Preliminary>
<SdkLinkTarget>Blank</SdkLinkTarget>
<NamingMethod>MemberName</NamingMethod>
<ContentPlacement>AboveNamespaces</ContentPlacement>
<SourceCodeBasePath>MLAPI\</SourceCodeBasePath>
<WarnOnMissingSourceContext>False</WarnOnMissingSourceContext>
<DocumentationSources>
<DocumentationSource sourceFile="MLAPI\bin\Debug\MLAPI.dll" />
<DocumentationSource sourceFile="MLAPI\bin\Debug\MLAPI.xml" />
</DocumentationSources>
<MissingTags>Summary, Parameter, Returns, AutoDocumentCtors, TypeParameter, AutoDocumentDispose</MissingTags>
<HeaderText>
</HeaderText>
<FooterText>
</FooterText>
<TransformComponentArguments>
<Argument Key="logoFile" Value="MLAPI_Logo.png" />
<Argument Key="logoHeight" Value="" />
<Argument Key="logoWidth" Value="600" />
<Argument Key="logoAltText" Value="" />
<Argument Key="logoPlacement" Value="right" />
<Argument Key="logoAlignment" Value="right" />
<Argument Key="maxVersionParts" Value="" />
<Argument Key="defaultLanguage" Value="cs" />
<Argument Key="includeEnumValues" Value="true" />
<Argument Key="baseSourceCodeUrl" Value="https://github.com/TwoTenPvP/MLAPI/blob/master/MLAPI/" />
<Argument Key="requestExampleUrl" Value="https://github.com/TwoTenPvP/MLAPI/issues/new" />
</TransformComponentArguments>
</PropertyGroup>
<!-- There are no properties for these groups. AnyCPU needs to appear in order for Visual Studio to perform
the build. The others are optional common platform types that may appear. -->
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|x86' ">
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|x86' ">
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|x64' ">
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|x64' ">
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|Win32' ">
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|Win32' ">
</PropertyGroup>
<!-- Import the SHFB build targets -->
<Import Project="$(SHFBROOT)\SandcastleHelpFileBuilder.targets" />
<!-- The pre-build and post-build event properties must appear *after* the targets file import in order to be
evaluated correctly. -->
<PropertyGroup>
<PreBuildEvent>
</PreBuildEvent>
<PostBuildEvent>
</PostBuildEvent>
<RunPostBuildEvent>OnBuildSuccess</RunPostBuildEvent>
</PropertyGroup>
</Project>

View File

@ -0,0 +1,13 @@
using System;
namespace MLAPI.Attributes
{
/// <summary>
/// The attribute to use for variables that should be automatically. replicated from Server to Client.
/// </summary>
[AttributeUsage(AttributeTargets.Field)]
public class BinaryIgnore : Attribute
{
}
}

View File

@ -2,14 +2,15 @@
namespace MLAPI.Attributes
{
/// <summary>
/// The attribute to use for variables that should be automatically. replicated from Server to Client.
/// </summary>
[AttributeUsage(AttributeTargets.Field)]
public class SyncedVar : Attribute
{
/// <summary>
/// The method name to invoke when the SyncVar get's updated.
/// </summary>
public string hook;
public SyncedVar()
{
}
}
}

28
MLAPI/Data/Channel.cs Normal file
View File

@ -0,0 +1,28 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using UnityEngine.Networking;
namespace MLAPI.Data
{
/// <summary>
/// A data object that represents a NetworkTransport channel
/// </summary>
[Serializable]
public class Channel
{
/// <summary>
/// The name of the channel
/// </summary>
public string Name;
/// <summary>
/// The Transport QOS type
/// </summary>
public QosType Type;
/// <summary>
/// Wheter or not the channel should be encrypted
/// </summary>
public bool Encrypted;
}
}

View File

@ -1,38 +0,0 @@
namespace MLAPI.Data
{
struct ClientIdKey
{
internal readonly int hostId;
internal readonly int connectionId;
internal ClientIdKey (int hostId, int connectionId)
{
this.hostId = hostId;
this.connectionId = connectionId;
}
public override bool Equals (object obj)
{
if (obj == null || GetType() != obj.GetType())
return false;
ClientIdKey key = (ClientIdKey)obj;
return (hostId == key.hostId) && (connectionId == key.hostId);
}
public override int GetHashCode()
{
return hostId ^ connectionId;
}
public static bool operator ==(ClientIdKey x, ClientIdKey y)
{
return x.hostId == y.hostId && x.connectionId == y.connectionId;
}
public static bool operator !=(ClientIdKey x, ClientIdKey y)
{
return !(x == y);
}
}
}

View File

@ -1,5 +1,8 @@
namespace MLAPI.Data
{
/// <summary>
/// The datatype used to classify SyncedVars
/// </summary>
internal enum FieldType
{
Bool,

19
MLAPI/Data/MessageType.cs Normal file
View File

@ -0,0 +1,19 @@
using System;
namespace MLAPI.Data
{
/// <summary>
/// Represents a MLAPI message type
/// </summary>
[Serializable]
public class MessageType
{
/// <summary>
/// The name of the messageType
/// </summary>
public string Name;
/// <summary>
/// Wheter or not the channel should have passthrough support.
/// </summary>
public bool Passthrough;
}
}

145
MLAPI/Data/NetId.cs Normal file
View File

@ -0,0 +1,145 @@
using MLAPI.MonoBehaviours.Core;
using System;
namespace MLAPI.Data
{
/// <summary>
/// Represents a ClientId structure
/// </summary>
public struct NetId
{
/// <summary>
/// The hostId this client is on
/// </summary>
public byte HostId;
/// <summary>
/// The connectionId this client is assigned
/// </summary>
public ushort ConnectionId;
/// <summary>
/// Meta data about hte client
/// </summary>
public byte Meta;
/// <summary>
/// Returns wheter or not the clientId represents a -1
/// </summary>
/// <returns><c>true</c>, if host, <c>false</c> otherwise.</returns>
public bool IsHost()
{
return Meta == 1;
}
/// <summary>
/// Returns if this is a invalid clientId, (-2)
/// </summary>
/// <returns><c>true</c>, if invalid, <c>false</c> otherwise.</returns>
public bool IsInvalid()
{
return Meta == 2;
}
/// <summary>
/// Static ServerNetId for comparison
/// </summary>
/// <value>The server net identifier.</value>
public static NetId ServerNetId
{
get
{
return new NetId((byte)NetworkingManager.singleton.serverHostId, (ushort)NetworkingManager.singleton.serverConnectionId, false, false);
}
}
/// <summary>
/// Initializes a new instance of the netId struct from transport values
/// </summary>
/// <param name="hostId">Host identifier.</param>
/// <param name="connectionId">Connection identifier.</param>
/// <param name="isHost">If set to <c>true</c> is host.</param>
/// <param name="isInvalid">If set to <c>true</c> is invalid.</param>
public NetId(byte hostId, ushort connectionId, bool isHost, bool isInvalid)
{
HostId = hostId;
ConnectionId = connectionId;
if (isHost)
Meta = 1;
else if (isInvalid)
Meta = 2;
else
Meta = 0;
}
private static byte[] tempUIntBytes = new byte[4];
private static byte[] tempUShortBytes = new byte[2];
/// <summary>
/// Initializes a new instance of the netId struct from a clientId
/// </summary>
/// <param name="clientId">Client identifier.</param>
public NetId(uint clientId)
{
tempUIntBytes = BitConverter.GetBytes(clientId);
HostId = tempUIntBytes[0];
ConnectionId = BitConverter.ToUInt16(tempUIntBytes, 1);
Meta = tempUIntBytes[3];
}
/// <summary>
/// Gets the clientId.
/// </summary>
/// <returns>The client identifier.</returns>
public uint GetClientId()
{
tempUShortBytes = BitConverter.GetBytes(ConnectionId);
tempUIntBytes[0] = HostId;
tempUIntBytes[1] = tempUShortBytes[0];
tempUIntBytes[2] = tempUShortBytes[1];
tempUIntBytes[3] = Meta;
return BitConverter.ToUInt32(tempUIntBytes, 0);
}
// Rider generated vvv
/// <summary>
/// Determines whether the specified <see cref="object"/> is equal to the current <see cref="T:MLAPI.Data.NetId"/>.
/// </summary>
/// <param name="obj">The <see cref="object"/> to compare with the current <see cref="T:MLAPI.Data.NetId"/>.</param>
/// <returns><c>true</c> if the specified <see cref="object"/> is equal to the current <see cref="T:MLAPI.Data.NetId"/>;
/// otherwise, <c>false</c>.</returns>
public override bool Equals (object obj)
{
if (obj == null || GetType() != obj.GetType())
return false;
NetId key = (NetId)obj;
return (HostId == key.HostId) && (ConnectionId == key.ConnectionId);
}
// Rider generated vvv
/// <summary>
/// Serves as a hash function for a <see cref="T:MLAPI.Data.NetId"/> object.
/// </summary>
/// <returns>A hash code for this instance that is suitable for use in hashing algorithms and data structures such as a
/// hash table.</returns>
public override int GetHashCode()
{
return (int)GetClientId();
}
// Rider generated vvv
/// <summary>
/// Determines whether a specified instance of <see cref="MLAPI.Data.NetId"/> is equal to another specified <see cref="MLAPI.Data.NetId"/>.
/// </summary>
/// <param name="client1">The first <see cref="MLAPI.Data.NetId"/> to compare.</param>
/// <param name="client2">The second <see cref="MLAPI.Data.NetId"/> to compare.</param>
/// <returns><c>true</c> if <c>client1</c> and <c>client2</c> are equal; otherwise, <c>false</c>.</returns>
public static bool operator ==(NetId client1, NetId client2)
{
return (client1.HostId == client2.HostId && client1.ConnectionId == client2.ConnectionId) || (client1.IsHost() == client2.IsHost());
}
// Rider generated vvv
/// <summary>
/// Determines whether a specified instance of <see cref="MLAPI.Data.NetId"/> is not equal to another specified <see cref="MLAPI.Data.NetId"/>.
/// </summary>
/// <param name="client1">The first <see cref="MLAPI.Data.NetId"/> to compare.</param>
/// <param name="client2">The second <see cref="MLAPI.Data.NetId"/> to compare.</param>
/// <returns><c>true</c> if <c>client1</c> and <c>client2</c> are not equal; otherwise, <c>false</c>.</returns>
public static bool operator !=(NetId client1, NetId client2)
{
return !(client1 == client2);
}
}
}

221
MLAPI/Data/NetworkConfig.cs Normal file
View File

@ -0,0 +1,221 @@
using MLAPI.MonoBehaviours.Core;
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Security.Cryptography;
using System.Text;
using UnityEngine;
using UnityEngine.Networking;
namespace MLAPI.Data
{
/// <summary>
/// The configuration object used to start server, client and hosts
/// </summary>
[Serializable]
public class NetworkConfig
{
/// <summary>
/// The protocol version. Different versions doesn't talk to each other.
/// </summary>
public ushort ProtocolVersion = 0;
/// <summary>
/// The transport hosts the sever uses
/// </summary>
public List<TransportHost> ServerTransports = new List<TransportHost>()
{
new TransportHost()
{
Name = "UDP Socket",
Port = 7777,
Websockets = false
}
};
/// <summary>
/// Channels used by the NetworkedTransport
/// </summary>
public List<Channel> Channels = new List<Channel>();
/// <summary>
/// Registered MessageTypes
/// </summary>
public List<MessageType> MessageTypes = new List<MessageType>();
internal HashSet<ushort> PassthroughMessageHashSet = new HashSet<ushort>();
internal HashSet<string> EncryptedChannelsHashSet = new HashSet<string>();
internal List<string> EncryptedChannels = new List<string>();
/// <summary>
/// A list of SceneNames that can be used during networked games.
/// </summary>
public List<string> RegisteredScenes = new List<string>();
/// <summary>
/// A list of spawnable prefabs
/// </summary>
public List<NetworkedPrefab> NetworkedPrefabs = new List<NetworkedPrefab>();
internal Dictionary<string, int> NetworkPrefabIds;
internal Dictionary<int, string> NetworkPrefabNames;
/// <summary>
/// The default player prefab
/// </summary>
public string PlayerPrefabName;
/// <summary>
/// The size of the receive message buffer. This is the max message size.
/// </summary>
public int MessageBufferSize = 65535;
/// <summary>
/// Amount of times per second the receive queue is emptied and all messages inside are processed.
/// </summary>
public int ReceiveTickrate = 64;
/// <summary>
/// The max amount of messages to process per ReceiveTickrate. This is to prevent flooding.
/// </summary>
public int MaxReceiveEventsPerTickRate = 500;
/// <summary>
/// The amount of times per second every pending message will be sent away.
/// </summary>
public int SendTickrate = 64;
/// <summary>
/// The amount of times per second internal frame events will occur, examples include SyncedVar send checking.
/// </summary>
public int EventTickrate = 64;
/// <summary>
/// The max amount of Clients that can connect.
/// </summary>
public int MaxConnections = 100;
/// <summary>
/// The port for the NetworkTransport to use when connecting
/// </summary>
public int ConnectPort = 7777;
/// <summary>
/// The address to connect to
/// </summary>
public string ConnectAddress = "127.0.0.1";
/// <summary>
/// The amount of seconds to wait for handshake to complete before timing out a client
/// </summary>
public int ClientConnectionBufferTimeout = 10;
/// <summary>
/// Wheter or not to use connection approval
/// </summary>
public bool ConnectionApproval = false;
/// <summary>
/// The data to send during connection which can be used to decide on if a client should get accepted
/// </summary>
public byte[] ConnectionData = new byte[0];
/// <summary>
/// The amount of seconds to keep a lag compensation position history
/// </summary>
public float SecondsHistory = 5;
/// <summary>
/// Wheter or not to make the library handle object spawning
/// </summary>
public bool HandleObjectSpawning = true;
/// <summary>
/// Wheter or not to enable encryption
/// </summary>
public bool EnableEncryption = true;
/// <summary>
/// Wheter or not to enable signed diffie hellman key exchange.
/// </summary>
public bool SignKeyExchange = true;
/// <summary>
/// Private RSA XML key to use for signing key exchange
/// </summary>
[TextArea]
public string RSAPrivateKey = "<RSAKeyValue><Modulus>vBEvOQki/EftWOgwh4G8/nFRvcDJLylc8P7Dhz5m/hpkkNtAMzizNKYUrGbs7sYWlEuMYBOWrzkIDGOMoOsYc9uCi+8EcmNoHDlIhK5yNfZUexYBF551VbvZ625LSBR7kmBxkyo4IPuA09fYCHeUFm3prt4h6aTD0Hjc7ZsJHUU=</Modulus><Exponent>EQ==</Exponent><P>ydgcrq5qLJOdDQibD3m9+o3/dkKoFeCC110dnMgdpEteCruyBdL0zjGKKvjjgy3XTSSp43EN591NiXaBp0JtDw==</P><Q>7obHrUnUCsSHUsIJ7+JOrupcGrQ0XaYcQ+Uwb2v7d2YUzwZ46U4gI9snfD2J0tc3DGEh3v3G0Q8q7bxEe3H4aw==</Q><DP>L34k3c6vkgSdbHp+1nb/hj+HZx6+I0PijQbZyolwYuSOmR0a1DGjA1bzVWe9D86NAxevgM9OkOjG8yrxVIgZqQ==</DP><DQ>OB+2gyBuIKa2bdNNodrlVlVC2RtXnZB/HwjAGjeGdnJfP8VJoE6eJo3rLEq3BG7fxq1xYaUfuLhGVg4uOyngGQ==</DQ><InverseQ>o97PimYu58qH5eFmySRCIsyhBr/tK2GM17Zd9QQPJZRSorrhIJn1m6gwQ/G5aJLIM/3Yl04CoyqmQGsPXMzW2w==</InverseQ><D>CxAR1i22w4vCquB7U0Pd8Nl9R2Wxez6rHTwpnoszPB+rkAzlqKj7e5FMgpykhoQfciKPyWqQZKkAeTMIRbN56JinvpAt5POId/28HDd5xjGymHE81k3RzoHqzQXFIOF1TSYKUWzjPPF/TU4nn7auD4i6lOODATsMqtLr5DRBN/0=</D></RSAKeyValue>"; //CHANGE THESE FOR PRODUCTION!
/// <summary>
/// Public RSA XML key to use for signing key exchange
/// </summary>
[TextArea]
public string RSAPublicKey = "<RSAKeyValue><Modulus>vBEvOQki/EftWOgwh4G8/nFRvcDJLylc8P7Dhz5m/hpkkNtAMzizNKYUrGbs7sYWlEuMYBOWrzkIDGOMoOsYc9uCi+8EcmNoHDlIhK5yNfZUexYBF551VbvZ625LSBR7kmBxkyo4IPuA09fYCHeUFm3prt4h6aTD0Hjc7ZsJHUU=</Modulus><Exponent>EQ==</Exponent></RSAKeyValue>"; //CHANGE THESE FOR PRODUCTION!
/// <summary>
/// Wheter or not to allow any type of passthrough messages
/// </summary>
public bool AllowPassthroughMessages = true;
/// <summary>
/// Wheter or not to enable scene switching
/// </summary>
public bool EnableSceneSwitching = true;
private byte[] ConfigHash = null;
/// <summary>
/// Gets a SHA256 hash of parts of the NetworkingConfiguration instance
/// </summary>
/// <param name="cache"></param>
/// <returns></returns>
public byte[] GetConfig(bool cache = true)
{
if (ConfigHash != null && cache)
return ConfigHash;
using (MemoryStream writeStream = new MemoryStream())
{
using (BinaryWriter writer = new BinaryWriter(writeStream))
{
writer.Write(ProtocolVersion);
for (int i = 0; i < Channels.Count; i++)
{
writer.Write(Channels[i].Name);
writer.Write((byte)Channels[i].Type);
if (EnableEncryption)
writer.Write(Channels[i].Encrypted);
}
for (int i = 0; i < MessageTypes.Count; i++)
{
writer.Write(MessageTypes[i].Name);
if (AllowPassthroughMessages)
writer.Write(MessageTypes[i].Passthrough);
}
if (EnableSceneSwitching)
{
for (int i = 0; i < RegisteredScenes.Count; i++)
{
writer.Write(RegisteredScenes[i]);
}
}
if(HandleObjectSpawning)
{
for (int i = 0; i < NetworkedPrefabs.Count; i++)
{
writer.Write(NetworkedPrefabs[i].name);
}
}
writer.Write(HandleObjectSpawning);
writer.Write(EnableEncryption);
writer.Write(AllowPassthroughMessages);
writer.Write(EnableSceneSwitching);
writer.Write(SignKeyExchange);
}
using (SHA256Managed sha256 = new SHA256Managed())
{
//Returns a 256 bit / 32 byte long checksum of the config
if (cache)
{
ConfigHash = sha256.ComputeHash(writeStream.ToArray());
return ConfigHash;
}
return sha256.ComputeHash(writeStream.ToArray());
}
}
}
/// <summary>
/// Compares a SHA256 hash with the current NetworkingConfiguration instances hash
/// </summary>
/// <param name="hash"></param>
/// <returns></returns>
public bool CompareConfig(byte[] hash)
{
byte[] localConfigHash = GetConfig();
if (hash.Length != localConfigHash.Length)
return false;
for (int i = 0; i < hash.Length; i++)
{
if (hash[i] != localConfigHash[i])
return false;
}
return true;
}
}
}

View File

@ -1,4 +1,5 @@
using UnityEngine;
using MLAPI.MonoBehaviours.Core;
using UnityEngine;
namespace MLAPI.Data
{
@ -7,15 +8,15 @@ namespace MLAPI.Data
internal GameObject[] objects;
internal ushort poolId;
internal NetworkPool(int prefabIndex, uint size, ushort poolIndex)
internal NetworkPool(int prefabId, uint size, ushort poolIndex)
{
objects = new GameObject[size];
poolId = poolIndex;
for (int i = 0; i < size; i++)
{
GameObject go = Object.Instantiate(NetworkingManager.singleton.SpawnablePrefabs[prefabIndex], Vector3.zero, Quaternion.identity);
go.GetComponent<NetworkedObject>().isPooledObject = true;
go.GetComponent<NetworkedObject>().PoolId = poolId;
GameObject go = MonoBehaviour.Instantiate(NetworkingManager.singleton.NetworkConfig.NetworkedPrefabs[prefabId].prefab, Vector3.zero, Quaternion.identity);
go.GetComponent<NetworkedObject>()._isPooledObject = true;
go.GetComponent<NetworkedObject>().poolId = poolId;
go.GetComponent<NetworkedObject>().Spawn();
go.name = "Pool Id: " + poolId + " #" + i;
go.SetActive(false);

View File

@ -1,12 +1,29 @@
using System.Collections.Generic;
using MLAPI.MonoBehaviours.Core;
using System.Collections.Generic;
using UnityEngine;
namespace MLAPI
namespace MLAPI.Data
{
/// <summary>
/// A NetworkedClient
/// </summary>
public class NetworkedClient
{
public int ClientId;
/// <summary>
/// The Id of the NetworkedClient
/// </summary>
public uint ClientId;
/// <summary>
/// The PlayerObject of the Client
/// </summary>
public GameObject PlayerObject;
/// <summary>
/// The NetworkedObject's owned by this Client
/// </summary>
public List<NetworkedObject> OwnedObjects = new List<NetworkedObject>();
/// <summary>
/// The encryption key used for this client
/// </summary>
public byte[] AesKey;
}
}

View File

@ -0,0 +1,12 @@
using System;
using UnityEngine;
namespace MLAPI.Data
{
[Serializable]
public class NetworkedPrefab
{
public string name;
public GameObject prefab;
}
}

View File

@ -1,108 +0,0 @@
using System;
using System.Collections.Generic;
using System.IO;
using System.Security.Cryptography;
using UnityEngine.Networking;
namespace MLAPI
{
public class NetworkingConfiguration
{
public ushort ProtocolVersion = 0;
public SortedDictionary<string, QosType> Channels = new SortedDictionary<string, QosType>();
public List<string> MessageTypes = new List<string>();
public List<string> PassthroughMessageTypes = new List<string>();
internal HashSet<ushort> RegisteredPassthroughMessageTypes = new HashSet<ushort>();
public List<string> RegisteredScenes = new List<string>();
public int MessageBufferSize = 65535;
public int ReceiveTickrate = 64;
public int MaxReceiveEventsPerTickRate = 500;
public int SendTickrate = 64;
public int EventTickrate = 64;
public int MaxConnections = 100;
public int Port = 7777;
public string Address = "127.0.0.1";
public int ClientConnectionBufferTimeout = 10;
public bool ConnectionApproval = false;
public Action<byte[], int, Action<int, bool>> ConnectionApprovalCallback = null;
public byte[] ConnectionData = new byte[0];
public float SecondsHistory = 5;
public bool HandleObjectSpawning = true;
//TODO
public bool CompressMessages = false;
//Should only be used for dedicated servers and will require the servers RSA keypair being hard coded into clients in order to exchange a AES key
//TODO
public bool EncryptMessages = false;
public bool AllowPassthroughMessages = true;
public bool EnableSceneSwitching = false;
//Cached config hash
private byte[] ConfigHash = null;
public byte[] GetConfig(bool cache = true)
{
if (ConfigHash != null && cache)
return ConfigHash;
using(MemoryStream writeStream = new MemoryStream())
{
using(BinaryWriter writer = new BinaryWriter(writeStream))
{
writer.Write(ProtocolVersion);
foreach (KeyValuePair<string, QosType> pair in Channels)
{
writer.Write(pair.Key);
writer.Write((int)pair.Value);
}
for (int i = 0; i < MessageTypes.Count; i++)
{
writer.Write(MessageTypes[i]);
}
if(AllowPassthroughMessages)
{
for (int i = 0; i < PassthroughMessageTypes.Count; i++)
{
writer.Write(PassthroughMessageTypes[i]);
}
}
if(EnableSceneSwitching)
{
for (int i = 0; i < RegisteredScenes.Count; i++)
{
writer.Write(RegisteredScenes[i]);
}
}
writer.Write(HandleObjectSpawning);
writer.Write(CompressMessages);
writer.Write(EncryptMessages);
writer.Write(AllowPassthroughMessages);
writer.Write(EnableSceneSwitching);
}
using(SHA256Managed sha256 = new SHA256Managed())
{
//Returns a 256 bit / 32 byte long checksum of the config
if (cache)
{
ConfigHash = sha256.ComputeHash(writeStream.ToArray());
return ConfigHash;
}
return sha256.ComputeHash(writeStream.ToArray());
}
}
}
public bool CompareConfig(byte[] hash)
{
byte[] localConfigHash = GetConfig();
if (hash.Length != localConfigHash.Length)
return false;
for (int i = 0; i < hash.Length; i++)
{
if (hash[i] != localConfigHash[i])
return false;
}
return true;
}
}
}

View File

@ -0,0 +1,24 @@
using System;
namespace MLAPI.Data
{
/// <summary>
/// Represents a Transport host
/// </summary>
[Serializable]
public class TransportHost
{
/// <summary>
/// The name of the host
/// </summary>
public string Name = Guid.NewGuid().ToString().Replace("-", "");
/// <summary>
/// The port the host should listen to
/// </summary>
public int Port = 7777;
/// <summary>
/// If true, the socket will listen on TCP-Websockets, otherwise UDP
/// </summary>
public bool Websockets = false;
}
}

View File

@ -0,0 +1,20 @@

// This file is used by Code Analysis to maintain SuppressMessage
// attributes that are applied to this project.
// Project-level suppressions either have no target or are given
// a specific target and scoped to a namespace, type, member, etc.
[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Style", "IDE0018:Inline variable declaration", Justification = "Not supported in Unity Mono version", Scope = "member", Target = "~M:MLAPI.MonoBehaviours.Core.NetworkingManager.StartClient")]
[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Style", "IDE0018:Inline variable declaration", Justification = "Not supported in Unity Mono version", Scope = "member", Target = "~M:MLAPI.MonoBehaviours.Core.NetworkingManager.StartClientWebsocket")]
[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Style", "IDE0018:Inline variable declaration", Justification = "Not supported in Unity Mono version", Scope = "member", Target = "~M:MLAPI.MonoBehaviours.Core.NetworkingManager.StopServer")]
[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Style", "IDE0018:Inline variable declaration", Justification = "Not supported in Unity Mono version", Scope = "member", Target = "~M:MLAPI.MonoBehaviours.Core.NetworkingManager.StopClient")]
[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Style", "IDE0018:Inline variable declaration", Justification = "Not supported in Unity Mono version", Scope = "member", Target = "~M:MLAPI.MonoBehaviours.Core.NetworkingManager.Update")]
[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Style", "IDE0018:Inline variable declaration", Justification = "Not supported in Unity Mono version", Scope = "member", Target = "~M:MLAPI.MonoBehaviours.Core.NetworkingManager.HandleIncomingData(System.UInt32,System.Byte[],System.Int32)")]
[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Style", "IDE0018:Inline variable declaration", Justification = "Not supported in Unity Mono version", Scope = "member", Target = "~M:MLAPI.MonoBehaviours.Core.NetworkingManager.PassthroughSend(System.UInt32,System.UInt32,System.UInt16,System.Int32,System.Byte[],System.Nullable{System.UInt32},System.Nullable{System.UInt16})")]
[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Style", "IDE0018:Inline variable declaration", Justification = "Not supported in Unity Mono version", Scope = "member", Target = "~M:MLAPI.MonoBehaviours.Core.NetworkingManager.Send(System.Collections.Generic.List{System.UInt32},System.String,System.String,System.Byte[],System.Nullable{System.UInt32},System.Nullable{System.UInt16})")]
[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Style", "IDE0018:Inline variable declaration", Justification = "Not supported in Unity Mono version", Scope = "member", Target = "~M:MLAPI.MonoBehaviours.Core.NetworkingManager.HandleApproval(System.UInt32,System.Boolean)")]
[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Style", "IDE0018:Inline variable declaration", Justification = "Not supported in Unity Mono version", Scope = "member", Target = "~M:MLAPI.MonoBehaviours.Core.NetworkingManager.DisconnectClient(System.UInt32)")]
[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Style", "IDE0018:Inline variable declaration", Justification = "Not supported in Unity Mono version", Scope = "member", Target = "~M:MLAPI.MonoBehaviours.Core.NetworkingManager.Send(System.String,System.String,System.Byte[],System.UInt32,System.Nullable{System.UInt32},System.Nullable{System.UInt16})")]
[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Style", "IDE0018:Inline variable declaration", Justification = "Not supported in Unity Mono version", Scope = "member", Target = "~M:MLAPI.MonoBehaviours.Core.NetworkingManager.Send(System.String,System.String,System.Byte[],System.Nullable{System.UInt32},System.Nullable{System.UInt16})")]
[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Style", "IDE0018:Inline variable declaration", Justification = "Not supported in Unity Mono version", Scope = "member", Target = "~M:MLAPI.MonoBehaviours.Core.NetworkingManager.Send(System.UInt32[],System.String,System.String,System.Byte[],System.Nullable{System.UInt32},System.Nullable{System.UInt16})")]

View File

@ -24,6 +24,7 @@
<ErrorReport>prompt</ErrorReport>
<WarningLevel>4</WarningLevel>
<GenerateSerializationAssemblies>Auto</GenerateSerializationAssemblies>
<DocumentationFile>bin\Debug\MLAPI.xml</DocumentationFile>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
<DebugType>pdbonly</DebugType>
@ -42,6 +43,12 @@
<ErrorReport>prompt</ErrorReport>
<CodeAnalysisRuleSet>MinimumRecommendedRules.ruleset</CodeAnalysisRuleSet>
<GenerateSerializationAssemblies>Auto</GenerateSerializationAssemblies>
<RunCodeAnalysis>false</RunCodeAnalysis>
<DocumentationFile>
</DocumentationFile>
</PropertyGroup>
<PropertyGroup>
<SignAssembly>false</SignAssembly>
</PropertyGroup>
<ItemGroup>
<Reference Include="IntXLib, Version=1.0.0.0, Culture=neutral, PublicKeyToken=1744b76c74eaee1e, processorArchitecture=MSIL">
@ -59,29 +66,37 @@
</Reference>
</ItemGroup>
<ItemGroup>
<Compile Include="Attributes\BinaryIgnore.cs" />
<Compile Include="Data\Channel.cs" />
<Compile Include="Data\FieldType.cs" />
<Compile Include="Attributes\SyncedVar.cs" />
<Compile Include="Data\NetworkConfig.cs" />
<Compile Include="Data\NetworkedPrefab.cs" />
<Compile Include="Data\NetworkPool.cs" />
<Compile Include="Data\TrackedPointData.cs" />
<Compile Include="Data\TransportHost.cs" />
<Compile Include="GlobalSuppressions.cs" />
<Compile Include="MonoBehaviours\Prototyping\NetworkedAnimator.cs" />
<Compile Include="NetworkingManagerComponents\DiffieHellman.cs" />
<Compile Include="NetworkingManagerComponents\EllipticCurve.cs" />
<Compile Include="NetworkingManagerComponents\LagCompensationManager.cs" />
<Compile Include="MonoBehaviours\Prototyping\NetworkedNavMeshAgent.cs" />
<Compile Include="NetworkingManagerComponents\Binary\BinarySerializer.cs" />
<Compile Include="NetworkingManagerComponents\Cryptography\CryptographyHelper.cs" />
<Compile Include="NetworkingManagerComponents\Cryptography\DiffieHellman.cs" />
<Compile Include="NetworkingManagerComponents\Cryptography\EllipticCurve.cs" />
<Compile Include="NetworkingManagerComponents\Core\LagCompensationManager.cs" />
<Compile Include="MonoBehaviours\Core\NetworkedBehaviour.cs" />
<Compile Include="Data\NetworkedClient.cs" />
<Compile Include="MonoBehaviours\Core\NetworkedObject.cs" />
<Compile Include="Data\NetworkingConfiguration.cs" />
<Compile Include="MonoBehaviours\Core\NetworkingManager.cs" />
<Compile Include="MonoBehaviours\Core\TrackedObject.cs" />
<Compile Include="MonoBehaviours\Prototyping\NetworkedTransform.cs" />
<Compile Include="NetworkingManagerComponents\MessageManager.cs" />
<Compile Include="NetworkingManagerComponents\NetworkPoolManager.cs" />
<Compile Include="NetworkingManagerComponents\NetworkSceneManager.cs" />
<Compile Include="NetworkingManagerComponents\SpawnManager.cs" />
<Compile Include="NetworkingManagerComponents\Core\MessageManager.cs" />
<Compile Include="NetworkingManagerComponents\Core\NetworkPoolManager.cs" />
<Compile Include="NetworkingManagerComponents\Core\NetworkSceneManager.cs" />
<Compile Include="NetworkingManagerComponents\Core\SpawnManager.cs" />
<Compile Include="Properties\AssemblyInfo.cs" />
<Compile Include="NetworkingManagerComponents\ClientIdManager.cs" />
<Compile Include="Data\ClientIdKey.cs" />
<Compile Include="NetworkingManagerComponents\MessageChunker.cs" />
<Compile Include="Data\NetId.cs" />
<Compile Include="NetworkingManagerComponents\Binary\MessageChunker.cs" />
<Compile Include="Data\MessageType.cs" />
</ItemGroup>
<ItemGroup>
<None Include="packages.config" />

View File

@ -1,18 +1,28 @@
using System;
using System.Collections.Generic;
using UnityEngine;
using MLAPI.NetworkingManagerComponents;
using System.Reflection;
using MLAPI.Attributes;
using System.Linq;
using System.IO;
using MLAPI.Data;
using MLAPI.NetworkingManagerComponents.Binary;
using MLAPI.NetworkingManagerComponents.Core;
namespace MLAPI
namespace MLAPI.MonoBehaviours.Core
{
/// <summary>
/// The base class to override to write networked code. Inherits MonoBehaviour
/// </summary>
public abstract class NetworkedBehaviour : MonoBehaviour
{
/// <summary>
/// The minimum delay in seconds between SyncedVar sends
/// </summary>
public float SyncVarSyncDelay = 0.1f;
/// <summary>
/// Gets if the object is the the personal clients player object
/// </summary>
public bool isLocalPlayer
{
get
@ -20,6 +30,9 @@ namespace MLAPI
return networkedObject.isLocalPlayer;
}
}
/// <summary>
/// Gets if the object is owned by the local player
/// </summary>
public bool isOwner
{
get
@ -27,6 +40,9 @@ namespace MLAPI
return networkedObject.isOwner;
}
}
/// <summary>
/// Gets if we are executing as server
/// </summary>
protected bool isServer
{
get
@ -34,6 +50,9 @@ namespace MLAPI
return NetworkingManager.singleton.isServer;
}
}
/// <summary>
/// Gets if we are executing as client
/// </summary>
protected bool isClient
{
get
@ -41,6 +60,9 @@ namespace MLAPI
return NetworkingManager.singleton.isClient;
}
}
/// <summary>
/// Gets if we are executing as Host, I.E Server and Client
/// </summary>
protected bool isHost
{
get
@ -48,6 +70,9 @@ namespace MLAPI
return NetworkingManager.singleton.isHost;
}
}
/// <summary>
/// Gets the NetworkedObject that owns this NetworkedBehaviour instance
/// </summary>
public NetworkedObject networkedObject
{
get
@ -60,6 +85,9 @@ namespace MLAPI
}
}
private NetworkedObject _networkedObject = null;
/// <summary>
/// Gets the NetworkId of the NetworkedObject that owns the NetworkedBehaviour instance
/// </summary>
public uint networkId
{
get
@ -67,8 +95,10 @@ namespace MLAPI
return networkedObject.NetworkId;
}
}
public int ownerClientId
/// <summary>
/// Gets the clientId that owns the NetworkedObject
/// </summary>
public uint ownerClientId
{
get
{
@ -89,31 +119,73 @@ namespace MLAPI
}
internal bool networkedStartInvoked = false;
/// <summary>
/// Gets called when message handlers are ready to be registered and the networking is setup
/// </summary>
public virtual void NetworkStart()
{
}
/// <summary>
/// Gets called when the local client gains ownership of this object
/// </summary>
public virtual void OnGainedOwnership()
{
}
/// <summary>
/// Gets called when we loose ownership of this object
/// </summary>
public virtual void OnLostOwnership()
{
}
protected int RegisterMessageHandler(string name, Action<int, byte[]> action)
/// <summary>
/// Registers a message handler
/// </summary>
/// <param name="name">The MessageType to register</param>
/// <param name="action">The callback to get invoked whenever a message is received</param>
/// <returns>HandlerId for the messageHandler that can be used to deregister the messageHandler</returns>
protected int RegisterMessageHandler(string name, Action<uint, byte[]> action)
{
if (!MessageManager.messageTypes.ContainsKey(name))
{
Debug.LogWarning("MLAPI: The messageType " + name + " is not registered");
return -1;
}
ushort messageType = MessageManager.messageTypes[name];
ushort behaviourOrder = networkedObject.GetOrderIndex(this);
if (!networkedObject.targetMessageActions.ContainsKey(behaviourOrder))
networkedObject.targetMessageActions.Add(behaviourOrder, new Dictionary<ushort, Action<uint, byte[]>>());
if (networkedObject.targetMessageActions[behaviourOrder].ContainsKey(messageType))
{
Debug.LogWarning("MLAPI: Each NetworkedBehaviour can only register one callback per instance per message type");
return -1;
}
networkedObject.targetMessageActions[behaviourOrder].Add(messageType, action);
int counter = MessageManager.AddIncomingMessageHandler(name, action, networkId);
registeredMessageHandlers.Add(name, counter);
return counter;
}
/// <summary>
/// Deregisters a given message handler
/// </summary>
/// <param name="name">The MessageType to deregister</param>
/// <param name="counter">The messageHandlerId to deregister</param>
protected void DeregisterMessageHandler(string name, int counter)
{
MessageManager.RemoveIncomingMessageHandler(name, counter, networkId);
ushort messageType = MessageManager.messageTypes[name];
ushort behaviourOrder = networkedObject.GetOrderIndex(this);
if (networkedObject.targetMessageActions.ContainsKey(behaviourOrder) &&
networkedObject.targetMessageActions[behaviourOrder].ContainsKey(messageType))
{
networkedObject.targetMessageActions[behaviourOrder].Remove(messageType);
}
}
private void OnDisable()
@ -134,10 +206,14 @@ namespace MLAPI
internal List<FieldType> syncedFieldTypes = new List<FieldType>();
private List<object> syncedFieldValues = new List<object>();
private List<MethodInfo> syncedVarHooks = new List<MethodInfo>();
private bool syncVarInit = false;
//A dirty field is a field that's not synced.
public bool[] dirtyFields;
private bool[] dirtyFields;
internal void SyncVarInit()
{
if (syncVarInit)
return;
syncVarInit = true;
FieldInfo[] sortedFields = GetType().GetFields(BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.FlattenHierarchy | BindingFlags.Instance).OrderBy(x => x.Name).ToArray();
for (byte i = 0; i < sortedFields.Length; i++)
{
@ -278,11 +354,11 @@ namespace MLAPI
}
}
}
if(dirtyFields.Length > 255)
dirtyFields = new bool[syncedFields.Count];
if (dirtyFields.Length > 255)
{
Debug.LogError("MLAPI: You can not have more than 255 SyncVar's per NetworkedBehaviour!");
}
dirtyFields = new bool[syncedFields.Count];
}
internal void OnSyncVarUpdate(object value, byte fieldIndex)
@ -292,7 +368,7 @@ namespace MLAPI
syncedVarHooks[fieldIndex].Invoke(this, null);
}
internal void FlushToClient(int clientId)
internal void FlushToClient(uint clientId)
{
//This NetworkedBehaviour has no SyncVars
if (dirtyFields.Length == 0)
@ -381,10 +457,18 @@ namespace MLAPI
private float lastSyncTime = 0f;
internal void SyncVarUpdate()
{
if (!syncVarInit)
SyncVarInit();
SetDirtyness();
if(Time.time - lastSyncTime >= SyncVarSyncDelay)
{
byte dirtyCount = (byte)dirtyFields.Count(x => x == true);
byte dirtyCount = 0;
for (byte i = 0; i < dirtyFields.Length; i++)
{
if (dirtyFields[i])
dirtyCount++;
}
if (dirtyCount == 0)
return; //All up to date!
//It's sync time!
@ -592,6 +676,13 @@ namespace MLAPI
}
#endregion
#region SEND METHODS
/// <summary>
/// Sends a buffer to the server from client
/// </summary>
/// <param name="messageType">User defined messageType</param>
/// <param name="channelName">User defined channelName</param>
/// <param name="data">The binary data to send</param>
protected void SendToServer(string messageType, string channelName, byte[] data)
{
if(MessageManager.messageTypes[messageType] < 32)
@ -604,9 +695,27 @@ namespace MLAPI
Debug.LogWarning("MLAPI: Server can not send messages to server.");
return;
}
NetworkingManager.singleton.Send(NetworkingManager.singleton.serverClientId, messageType, channelName, data);
NetworkingManager.singleton.Send(NetId.ServerNetId.GetClientId(), messageType, channelName, data);
}
/// <summary>
/// Sends a binary serialized class to the server from client
/// </summary>
/// <typeparam name="T">The class type to send</typeparam>
/// <param name="messageType">User defined messageType</param>
/// <param name="channelName">User defined channelName</param>
/// <param name="instance">The instance to send</param>
protected void SendToServer<T>(string messageType, string channelName, T instance)
{
SendToServer(messageType, channelName, BinarySerializer.Serialize<T>(instance));
}
/// <summary>
/// Sends a buffer to the server from client. Only handlers on this NetworkedBehaviour will get invoked
/// </summary>
/// <param name="messageType">User defined messageType</param>
/// <param name="channelName">User defined channelName</param>
/// <param name="data">The binary data to send</param>
protected void SendToServerTarget(string messageType, string channelName, byte[] data)
{
if (MessageManager.messageTypes[messageType] < 32)
@ -619,9 +728,27 @@ namespace MLAPI
Debug.LogWarning("MLAPI: Server can not send messages to server.");
return;
}
NetworkingManager.singleton.Send(NetworkingManager.singleton.serverClientId, messageType, channelName, data, networkId);
NetworkingManager.singleton.Send(NetId.ServerNetId.GetClientId(), messageType, channelName, data, networkId, networkedObject.GetOrderIndex(this));
}
/// <summary>
/// Sends a binary serialized class to the server from client. Only handlers on this NetworkedBehaviour will get invoked
/// </summary>
/// <typeparam name="T">The class type to send</typeparam>
/// <param name="messageType">User defined messageType</param>
/// <param name="channelName">User defined channelName</param>
/// <param name="instance">The instance to send</param>
protected void SendToServerTarget<T>(string messageType, string channelName, T instance)
{
SendToServerTarget(messageType, channelName, BinarySerializer.Serialize<T>(instance));
}
/// <summary>
/// Sends a buffer to the server from client
/// </summary>
/// <param name="messageType">User defined messageType</param>
/// <param name="channelName">User defined channelName</param>
/// <param name="data">The binary data to send</param>
protected void SendToLocalClient(string messageType, string channelName, byte[] data)
{
if (MessageManager.messageTypes[messageType] < 32)
@ -629,7 +756,7 @@ namespace MLAPI
Debug.LogWarning("MLAPI: Sending messages on the internal MLAPI channels is not allowed!");
return;
}
if (!isServer && (!NetworkingManager.singleton.NetworkConfig.AllowPassthroughMessages || !NetworkingManager.singleton.NetworkConfig.PassthroughMessageTypes.Contains(messageType)))
if (!isServer && (!NetworkingManager.singleton.NetworkConfig.AllowPassthroughMessages || !NetworkingManager.singleton.NetworkConfig.PassthroughMessageHashSet.Contains(MessageManager.messageTypes[messageType])))
{
Debug.LogWarning("MLAPI: Invalid Passthrough send. Ensure AllowPassthroughMessages are turned on and that the MessageType " + messageType + " is registered as a passthroughMessageType");
return;
@ -637,6 +764,24 @@ namespace MLAPI
NetworkingManager.singleton.Send(ownerClientId, messageType, channelName, data);
}
/// <summary>
/// Sends a binary serialized class to the server from client
/// </summary>
/// <typeparam name="T">The class type to send</typeparam>
/// <param name="messageType">User defined messageType</param>
/// <param name="channelName">User defined channelName</param>
/// <param name="instance">The instance to send</param>
protected void SendToLocalClient<T>(string messageType, string channelName, T instance)
{
SendToLocalClient(messageType, channelName, BinarySerializer.Serialize<T>(instance));
}
/// <summary>
/// Sends a buffer to the client that owns this object from the server. Only handlers on this NetworkedBehaviour will get invoked
/// </summary>
/// <param name="messageType">User defined messageType</param>
/// <param name="channelName">User defined channelName</param>
/// <param name="data">The binary data to send</param>
protected void SendToLocalClientTarget(string messageType, string channelName, byte[] data)
{
if (MessageManager.messageTypes[messageType] < 32)
@ -644,14 +789,32 @@ namespace MLAPI
Debug.LogWarning("MLAPI: Sending messages on the internal MLAPI channels is not allowed!");
return;
}
if (!isServer && (!NetworkingManager.singleton.NetworkConfig.AllowPassthroughMessages || !NetworkingManager.singleton.NetworkConfig.PassthroughMessageTypes.Contains(messageType)))
if (!isServer && (!NetworkingManager.singleton.NetworkConfig.AllowPassthroughMessages || !NetworkingManager.singleton.NetworkConfig.PassthroughMessageHashSet.Contains(MessageManager.messageTypes[messageType])))
{
Debug.LogWarning("MLAPI: Invalid Passthrough send. Ensure AllowPassthroughMessages are turned on and that the MessageType " + messageType + " is registered as a passthroughMessageType");
return;
}
NetworkingManager.singleton.Send(ownerClientId, messageType, channelName, data, networkId);
NetworkingManager.singleton.Send(ownerClientId, messageType, channelName, data, networkId, networkedObject.GetOrderIndex(this));
}
/// <summary>
/// Sends a buffer to the client that owns this object from the server. Only handlers on this NetworkedBehaviour will get invoked
/// </summary>
/// <typeparam name="T">The class type to send</typeparam>
/// <param name="messageType">User defined messageType</param>
/// <param name="channelName">User defined channelName</param>
/// <param name="instance">The instance to send</param>
protected void SendToLocalClientTarget<T>(string messageType, string channelName, T instance)
{
SendToLocalClientTarget(messageType, channelName, BinarySerializer.Serialize<T>(instance));
}
/// <summary>
/// Sends a buffer to all clients except to the owner object from the server
/// </summary>
/// <param name="messageType">User defined messageType</param>
/// <param name="channelName">User defined channelName</param>
/// <param name="data">The binary data to send</param>
protected void SendToNonLocalClients(string messageType, string channelName, byte[] data)
{
if (MessageManager.messageTypes[messageType] < 32)
@ -664,9 +827,27 @@ namespace MLAPI
Debug.LogWarning("MLAPI: Sending messages from client to other clients is not yet supported");
return;
}
NetworkingManager.singleton.Send(messageType, channelName, data, ownerClientId, null);
NetworkingManager.singleton.Send(messageType, channelName, data, ownerClientId);
}
/// <summary>
/// Sends a binary serialized class to all clients except to the owner object from the server
/// </summary>
/// <typeparam name="T">The class type to send</typeparam>
/// <param name="messageType">User defined messageType</param>
/// <param name="channelName">User defined channelName</param>
/// <param name="instance">The instance to send</param>
protected void SendToNonLocalClients<T>(string messageType, string channelName, T instance)
{
SendToNonLocalClients(messageType, channelName, BinarySerializer.Serialize<T>(instance));
}
/// <summary>
/// Sends a buffer to all clients except to the owner object from the server. Only handlers on this NetworkedBehaviour will get invoked
/// </summary>
/// <param name="messageType">User defined messageType</param>
/// <param name="channelName">User defined channelName</param>
/// <param name="data">The binary data to send</param>
protected void SendToNonLocalClientsTarget(string messageType, string channelName, byte[] data)
{
if (MessageManager.messageTypes[messageType] < 32)
@ -679,17 +860,36 @@ namespace MLAPI
Debug.LogWarning("MLAPI: Sending messages from client to other clients is not yet supported");
return;
}
NetworkingManager.singleton.Send(messageType, channelName, data, ownerClientId, networkId);
NetworkingManager.singleton.Send(messageType, channelName, data, ownerClientId, networkId, networkedObject.GetOrderIndex(this));
}
protected void SendToClient(int clientId, string messageType, string channelName, byte[] data)
/// <summary>
/// Sends a binary serialized class to all clients except to the owner object from the server. Only handlers on this NetworkedBehaviour will get invoked
/// </summary>
/// <typeparam name="T">The class type to send</typeparam>
/// <param name="messageType">User defined messageType</param>
/// <param name="channelName">User defined channelName</param>
/// <param name="instance">The instance to send</param>
protected void SendToNonLocalClientsTarget<T>(string messageType, string channelName, T instance)
{
SendToNonLocalClientsTarget(messageType, channelName, BinarySerializer.Serialize<T>(instance));
}
/// <summary>
/// Sends a buffer to a client with a given clientId from Server
/// </summary>
/// <param name="clientId">The clientId to send the message to</param>
/// <param name="messageType">User defined messageType</param>
/// <param name="channelName">User defined channelName</param>
/// <param name="data">The binary data to send</param>
protected void SendToClient(uint clientId, string messageType, string channelName, byte[] data)
{
if (MessageManager.messageTypes[messageType] < 32)
{
Debug.LogWarning("MLAPI: Sending messages on the internal MLAPI channels is not allowed!");
return;
}
if (!isServer && (!NetworkingManager.singleton.NetworkConfig.AllowPassthroughMessages || !NetworkingManager.singleton.NetworkConfig.PassthroughMessageTypes.Contains(messageType)))
if (!isServer && (!NetworkingManager.singleton.NetworkConfig.AllowPassthroughMessages || !NetworkingManager.singleton.NetworkConfig.PassthroughMessageHashSet.Contains(MessageManager.messageTypes[messageType])))
{
Debug.LogWarning("MLAPI: Invalid Passthrough send. Ensure AllowPassthroughMessages are turned on and that the MessageType " + messageType + " is registered as a passthroughMessageType");
return;
@ -697,22 +897,62 @@ namespace MLAPI
NetworkingManager.singleton.Send(clientId, messageType, channelName, data);
}
protected void SendToClientTarget(int clientId, string messageType, string channelName, byte[] data)
/// <summary>
/// Sends a binary serialized class to a client with a given clientId from Server
/// </summary>
/// <typeparam name="T">The class type to send</typeparam>
/// <param name="clientId">The clientId to send the message to</param>
/// <param name="messageType">User defined messageType</param>
/// <param name="channelName">User defined channelName</param>
/// <param name="instance">The instance to send</param>
protected void SendToClient<T>(int clientId, string messageType, string channelName, T instance)
{
SendToClient(clientId, messageType, channelName, BinarySerializer.Serialize<T>(instance));
}
/// <summary>
/// Sends a buffer to a client with a given clientId from Server. Only handlers on this NetworkedBehaviour gets invoked
/// </summary>
/// <param name="clientId">The clientId to send the message to</param>
/// <param name="messageType">User defined messageType</param>
/// <param name="channelName">User defined channelName</param>
/// <param name="data">The binary data to send</param>
protected void SendToClientTarget(uint clientId, string messageType, string channelName, byte[] data)
{
if (MessageManager.messageTypes[messageType] < 32)
{
Debug.LogWarning("MLAPI: Sending messages on the internal MLAPI channels is not allowed!");
return;
}
if (!isServer && (!NetworkingManager.singleton.NetworkConfig.AllowPassthroughMessages || !NetworkingManager.singleton.NetworkConfig.PassthroughMessageTypes.Contains(messageType)))
if (!isServer && (!NetworkingManager.singleton.NetworkConfig.AllowPassthroughMessages || !NetworkingManager.singleton.NetworkConfig.PassthroughMessageHashSet.Contains(MessageManager.messageTypes[messageType])))
{
Debug.LogWarning("MLAPI: Invalid Passthrough send. Ensure AllowPassthroughMessages are turned on and that the MessageType " + messageType + " is registered as a passthroughMessageType");
return;
}
NetworkingManager.singleton.Send(clientId, messageType, channelName, data, networkId);
NetworkingManager.singleton.Send(clientId, messageType, channelName, data, networkId, networkedObject.GetOrderIndex(this));
}
protected void SendToClients(int[] clientIds, string messageType, string channelName, byte[] data)
/// <summary>
/// Sends a buffer to a client with a given clientId from Server. Only handlers on this NetworkedBehaviour gets invoked
/// </summary>
/// <typeparam name="T">The class type to send</typeparam>
/// <param name="clientId">The clientId to send the message to</param>
/// <param name="messageType">User defined messageType</param>
/// <param name="channelName">User defined channelName</param>
/// <param name="instance">The instance to send</param>
protected void SendToClientTarget<T>(int clientId, string messageType, string channelName, T instance)
{
SendToClientTarget(clientId, messageType, channelName, BinarySerializer.Serialize<T>(instance));
}
/// <summary>
/// Sends a buffer to multiple clients from the server
/// </summary>
/// <param name="clientIds">The clientId's to send to</param>
/// <param name="messageType">User defined messageType</param>
/// <param name="channelName">User defined channelName</param>
/// <param name="data">The binary data to send</param>
protected void SendToClients(uint[] clientIds, string messageType, string channelName, byte[] data)
{
if (MessageManager.messageTypes[messageType] < 32)
{
@ -727,7 +967,27 @@ namespace MLAPI
NetworkingManager.singleton.Send(clientIds, messageType, channelName, data);
}
protected void SendToClientsTarget(int[] clientIds, string messageType, string channelName, byte[] data)
/// <summary>
/// Sends a binary serialized class to multiple clients from the server
/// </summary>
/// <typeparam name="T">The class type to send</typeparam>
/// <param name="clientIds">The clientId's to send to</param>
/// <param name="messageType">User defined messageType</param>
/// <param name="channelName">User defined channelName</param>
/// <param name="instance">The instance to send</param>
protected void SendToClients<T>(int[] clientIds, string messageType, string channelName, T instance)
{
SendToClients(clientIds, messageType, channelName, BinarySerializer.Serialize<T>(instance));
}
/// <summary>
/// Sends a buffer to multiple clients from the server. Only handlers on this NetworkedBehaviour gets invoked
/// </summary>
/// <param name="clientIds">The clientId's to send to</param>
/// <param name="messageType">User defined messageType</param>
/// <param name="channelName">User defined channelName</param>
/// <param name="data">The binary data to send</param>
protected void SendToClientsTarget(uint[] clientIds, string messageType, string channelName, byte[] data)
{
if (MessageManager.messageTypes[messageType] < 32)
{
@ -739,10 +999,30 @@ namespace MLAPI
Debug.LogWarning("MLAPI: Sending messages from client to other clients is not yet supported");
return;
}
NetworkingManager.singleton.Send(clientIds, messageType, channelName, data, networkId);
NetworkingManager.singleton.Send(clientIds, messageType, channelName, data, networkId, networkedObject.GetOrderIndex(this));
}
protected void SendToClients(List<int> clientIds, string messageType, string channelName, byte[] data)
/// <summary>
/// Sends a buffer to multiple clients from the server. Only handlers on this NetworkedBehaviour gets invoked
/// </summary>
/// <typeparam name="T">The class type to send</typeparam>
/// <param name="clientIds">The clientId's to send to</param>
/// <param name="messageType">User defined messageType</param>
/// <param name="channelName">User defined channelName</param>
/// <param name="instance">The instance to send</param>
protected void SendToClientsTarget<T>(int[] clientIds, string messageType, string channelName, T instance)
{
SendToClientsTarget(clientIds, messageType, channelName, BinarySerializer.Serialize<T>(instance));
}
/// <summary>
/// Sends a buffer to multiple clients from the server
/// </summary>
/// <param name="clientIds">The clientId's to send to</param>
/// <param name="messageType">User defined messageType</param>
/// <param name="channelName">User defined channelName</param>
/// <param name="data">The binary data to send</param>
protected void SendToClients(List<uint> clientIds, string messageType, string channelName, byte[] data)
{
if (MessageManager.messageTypes[messageType] < 32)
{
@ -757,7 +1037,27 @@ namespace MLAPI
NetworkingManager.singleton.Send(clientIds, messageType, channelName, data);
}
protected void SendToClientsTarget(List<int> clientIds, string messageType, string channelName, byte[] data)
/// <summary>
/// Sends a binary serialized class to multiple clients from the server
/// </summary>
/// <typeparam name="T">The class type to send</typeparam>
/// <param name="clientIds">The clientId's to send to</param>
/// <param name="messageType">User defined messageType</param>
/// <param name="channelName">User defined channelName</param>
/// <param name="instance">The instance to send</param>
protected void SendToClients<T>(List<int> clientIds, string messageType, string channelName, T instance)
{
SendToClients(clientIds, messageType, channelName, BinarySerializer.Serialize<T>(instance));
}
/// <summary>
/// Sends a buffer to multiple clients from the server. Only handlers on this NetworkedBehaviour gets invoked
/// </summary>
/// <param name="clientIds">The clientId's to send to</param>
/// <param name="messageType">User defined messageType</param>
/// <param name="channelName">User defined channelName</param>
/// <param name="data">The binary data to send</param>
protected void SendToClientsTarget(List<uint> clientIds, string messageType, string channelName, byte[] data)
{
if (MessageManager.messageTypes[messageType] < 32)
{
@ -769,9 +1069,28 @@ namespace MLAPI
Debug.LogWarning("MLAPI: Sending messages from client to other clients is not yet supported");
return;
}
NetworkingManager.singleton.Send(clientIds, messageType, channelName, data, networkId);
NetworkingManager.singleton.Send(clientIds, messageType, channelName, data, networkId, networkedObject.GetOrderIndex(this));
}
/// <summary>
/// Sends a buffer to multiple clients from the server. Only handlers on this NetworkedBehaviour gets invoked
/// </summary>
/// <typeparam name="T">The class type to send</typeparam>
/// <param name="clientIds">The clientId's to send to</param>
/// <param name="messageType">User defined messageType</param>
/// <param name="channelName">User defined channelName</param>
/// <param name="instance">The instance to send</param>
protected void SendToClientsTarget<T>(List<uint> clientIds, string messageType, string channelName, T instance)
{
SendToClientsTarget(clientIds, messageType, channelName, BinarySerializer.Serialize<T>(instance));
}
/// <summary>
/// Sends a buffer to all clients from the server
/// </summary>
/// <param name="messageType">User defined messageType</param>
/// <param name="channelName">User defined channelName</param>
/// <param name="data">The binary data to send</param>
protected void SendToClients(string messageType, string channelName, byte[] data)
{
if (MessageManager.messageTypes[messageType] < 32)
@ -787,6 +1106,24 @@ namespace MLAPI
NetworkingManager.singleton.Send(messageType, channelName, data);
}
/// <summary>
/// Sends a buffer to all clients from the server
/// </summary>
/// <typeparam name="T">The class type to send</typeparam>
/// <param name="messageType">User defined messageType</param>
/// <param name="channelName">User defined channelName</param>
/// <param name="instance">The instance to send</param>
protected void SendToClients<T>(string messageType, string channelName, T instance)
{
SendToClients(messageType, channelName, BinarySerializer.Serialize<T>(instance));
}
/// <summary>
/// Sends a buffer to all clients from the server. Only handlers on this NetworkedBehaviour will get invoked
/// </summary>
/// <param name="messageType">User defined messageType</param>
/// <param name="channelName">User defined channelName</param>
/// <param name="data">The binary data to send</param>
protected void SendToClientsTarget(string messageType, string channelName, byte[] data)
{
if (MessageManager.messageTypes[messageType] < 32)
@ -799,9 +1136,27 @@ namespace MLAPI
Debug.LogWarning("MLAPI: Sending messages from client to other clients is not yet supported");
return;
}
NetworkingManager.singleton.Send(messageType, channelName, data, networkId);
NetworkingManager.singleton.Send(messageType, channelName, data, networkId, networkedObject.GetOrderIndex(this));
}
/// <summary>
/// Sends a buffer to all clients from the server. Only handlers on this NetworkedBehaviour will get invoked
/// </summary>
/// <typeparam name="T">The class type to send</typeparam>
/// <param name="messageType">User defined messageType</param>
/// <param name="channelName">User defined channelName</param>
/// <param name="instance">The instance to send</param>
protected void SendToClientsTarget<T>(string messageType, string channelName, T instance)
{
SendToClientsTarget(messageType, channelName, BinarySerializer.Serialize<T>(instance));
}
#endregion
/// <summary>
/// Gets the local instance of a object with a given NetworkId
/// </summary>
/// <param name="networkId"></param>
/// <returns></returns>
protected NetworkedObject GetNetworkedObject(uint networkId)
{
return SpawnManager.spawnedObjects[networkId];

View File

@ -1,63 +1,154 @@
using MLAPI.NetworkingManagerComponents;
using MLAPI.Data;
using MLAPI.NetworkingManagerComponents.Core;
using System;
using System.Collections.Generic;
using UnityEngine;
namespace MLAPI
namespace MLAPI.MonoBehaviours.Core
{
public class NetworkedObject : MonoBehaviour
/// <summary>
/// A component used to identify that a GameObject is networked
/// </summary>
[AddComponentMenu("MLAPI/NetworkedObject", -99)]
public sealed class NetworkedObject : MonoBehaviour
{
[HideInInspector]
public uint NetworkId;
[HideInInspector]
public int OwnerClientId = -2;
[HideInInspector]
public int SpawnablePrefabIndex;
[HideInInspector]
public bool isPlayerObject = false;
public bool ServerOnly = false;
[HideInInspector]
public bool isPooledObject = false;
[HideInInspector]
public ushort PoolId;
private void OnValidate()
{
if(string.IsNullOrEmpty(NetworkedPrefabName))
{
Debug.LogWarning("MLAPI: The NetworkedObject " + gameObject.name + " does not have a NetworkedPrefabName. It has been set to the gameObject name");
NetworkedPrefabName = gameObject.name;
}
}
/// <summary>
/// Gets the unique ID of this object that is synced across the network
/// </summary>
public uint NetworkId
{
get
{
return networkId;
}
}
internal uint networkId;
/// <summary>
/// Gets the clientId of the owner of this NetworkedObject
/// </summary>
public uint OwnerClientId
{
get
{
return ownerClientId;
}
}
internal uint ownerClientId = new NetId(0, 0, false, true).GetClientId();
/// <summary>
/// The name of the NetworkedPrefab
/// </summary>
public string NetworkedPrefabName = string.Empty;
/// <summary>
/// Gets if this object is a player object
/// </summary>
public bool isPlayerObject
{
get
{
return _isPlayerObject;
}
}
internal bool _isPlayerObject = false;
/// <summary>
/// Gets if this object is part of a pool
/// </summary>
public bool isPooledObject
{
get
{
return _isPooledObject;
}
}
internal bool _isPooledObject = false;
/// <summary>
/// Gets the poolId this object is part of
/// </summary>
public ushort PoolId
{
get
{
return poolId;
}
}
internal ushort poolId;
/// <summary>
/// Gets if the object is the the personal clients player object
/// </summary>
public bool isLocalPlayer
{
get
{
return isPlayerObject && (OwnerClientId == NetworkingManager.singleton.MyClientId || (OwnerClientId == -1 && NetworkingManager.singleton.isHost));
return isPlayerObject && (OwnerClientId == NetworkingManager.singleton.MyClientId || (new NetId(ownerClientId).IsHost() && NetworkingManager.singleton.isHost));
}
}
/// <summary>
/// Gets if the object is owned by the local player
/// </summary>
public bool isOwner
{
get
{
return !isPlayerObject && (OwnerClientId == NetworkingManager.singleton.MyClientId || (OwnerClientId == -1 && NetworkingManager.singleton.isHost));
return !isPlayerObject && (OwnerClientId == NetworkingManager.singleton.MyClientId || (new NetId(ownerClientId).IsHost() && NetworkingManager.singleton.isHost));
}
}
/// <summary>
/// Gets if the object has yet been spawned across the network
/// </summary>
public bool isSpawned
{
get
{
return _isSpawned;
}
}
internal bool _isSpawned = false;
internal bool? sceneObject = null;
private void OnDestroy()
{
SpawnManager.OnDestroyObject(NetworkId, false);
if (NetworkingManager.singleton != null)
SpawnManager.OnDestroyObject(NetworkId, false);
}
internal bool isSpawned = false;
/// <summary>
/// Spawns this GameObject across the network. Can only be called from the Server
/// </summary>
public void Spawn()
{
SpawnManager.OnSpawnObject(this);
if (NetworkingManager.singleton != null)
SpawnManager.SpawnPrefabIndexServer(this);
}
public void SpawnWithOwnership(int clientId)
/// <summary>
/// Spawns an object across the network with a given owner. Can only be called from server
/// </summary>
/// <param name="clientId">The clientId to own the object</param>
public void SpawnWithOwnership(uint clientId)
{
SpawnManager.OnSpawnObject(this, clientId);
if (NetworkingManager.singleton != null)
SpawnManager.SpawnPrefabIndexServer(this, clientId);
}
/// <summary>
/// Removes all ownership of an object from any client. Can only be called from server
/// </summary>
public void RemoveOwnership()
{
SpawnManager.RemoveOwnership(NetworkId);
}
public void ChangeOwnership(int newOwnerClientId)
/// <summary>
/// Changes the owner of the object. Can only be called from server
/// </summary>
/// <param name="newOwnerClientId">The new owner clientId</param>
public void ChangeOwnership(uint newOwnerClientId)
{
SpawnManager.ChangeOwnership(NetworkId, newOwnerClientId);
}
@ -87,6 +178,7 @@ namespace MLAPI
{
childNetworkedBehaviours[i].NetworkStart();
childNetworkedBehaviours[i].SyncVarInit();
childNetworkedBehaviours[i].networkedStartInvoked = true;
}
}
}
@ -120,7 +212,7 @@ namespace MLAPI
}
//Flushes all syncVars to client
internal void FlushToClient(int clientId)
internal void FlushToClient(uint clientId)
{
for (int i = 0; i < childNetworkedBehaviours.Count; i++)
{
@ -143,5 +235,8 @@ namespace MLAPI
//TODO index out of bounds
return childNetworkedBehaviours[index];
}
//Key: behaviourOrderId, value key: messageType, value value callback
internal Dictionary<ushort, Dictionary<ushort, Action<uint, byte[]>>> targetMessageActions = new Dictionary<ushort, Dictionary<ushort, Action<uint, byte[]>>>();
}
}

File diff suppressed because it is too large Load Diff

View File

@ -1,5 +1,5 @@
using MLAPI.Data;
using MLAPI.NetworkingManagerComponents;
using MLAPI.NetworkingManagerComponents.Core;
using System.Collections.Generic;
using UnityEngine;
@ -7,6 +7,11 @@ namespace MLAPI.MonoBehaviours.Core
{
//Based on: https://twotenpvp.github.io/lag-compensation-in-unity.html
//Modified to be used with latency rather than fixed frames and subframes. Thus it will be less accrurate but more modular.
/// <summary>
/// A component used for lag compensation. Each object with this component will get tracked
/// </summary>
[AddComponentMenu("MLAPI/TrackedObject", -98)]
public class TrackedObject : MonoBehaviour
{
internal Dictionary<float, TrackedPointData> FrameData = new Dictionary<float, TrackedPointData>();
@ -14,6 +19,31 @@ namespace MLAPI.MonoBehaviours.Core
private Vector3 savedPosition;
private Quaternion savedRotation;
/// <summary>
/// Gets the total amount of points stored in the component
/// </summary>
public int TotalPoints
{
get
{
return Framekeys.Count;
}
}
/// <summary>
/// Gets the average amount of time between the points in miliseconds
/// </summary>
public float AvgTimeBetweenPointsMs
{
get
{
if (Framekeys.First == null || Framekeys.Last == null)
return 0;
float totalSpan = Framekeys.Last.Value - Framekeys.First.Value;
return (totalSpan / Framekeys.Count) * 1000f;
}
}
internal void ReverseTransform(float secondsAgo)
{
savedPosition = transform.position;
@ -55,14 +85,14 @@ namespace MLAPI.MonoBehaviours.Core
void Start()
{
Framekeys.AddFirst(0);
LagCompensationManager.SimulationObjects.Add(this);
LagCompensationManager.simulationObjects.Add(this);
}
void OnDestroy()
{
Framekeys.Clear();
FrameData.Clear();
LagCompensationManager.SimulationObjects.Remove(this);
LagCompensationManager.simulationObjects.Remove(this);
}
internal void AddFrame()
@ -70,7 +100,7 @@ namespace MLAPI.MonoBehaviours.Core
float currentTime = Time.time;
LinkedListNode<float> node = Framekeys.First;
LinkedListNode<float> nextNode = node.Next;
while (currentTime - node.Value >= NetworkingManager.singleton.NetworkConfig.SecondsHistory)
while (node != null && currentTime - node.Value >= NetworkingManager.singleton.NetworkConfig.SecondsHistory)
{
nextNode = node.Next;
FrameData.Remove(node.Value);

View File

@ -1,22 +1,40 @@
using System.IO;
using MLAPI.Data;
using MLAPI.MonoBehaviours.Core;
using System.Collections.Generic;
using System.IO;
using UnityEngine;
namespace MLAPI.MonoBehaviours.Prototyping
{
/// <summary>
/// A prototype component for syncing animations
/// </summary>
[AddComponentMenu("MLAPI/NetworkedAnimator")]
public class NetworkedAnimator : NetworkedBehaviour
{
/// <summary>
/// Is proximity enabled
/// </summary>
public bool EnableProximity = false;
/// <summary>
/// The proximity range
/// </summary>
public float ProximityRange = 50f;
[SerializeField]
private Animator _animator;
[SerializeField]
private uint parameterSendBits;
[SerializeField]
private float sendRate = 0.1f;
private readonly float sendRate = 0.1f;
private AnimatorControllerParameter[] animatorParameters;
private int animationHash;
private int transitionHash;
private float sendTimer;
#pragma warning disable CS1591 // Missing XML comment for publicly visible type or member
// tracking - these should probably move to a Preview component. -- Comment from HLAPI. Needs clarification
public string param0;
public string param1;
@ -24,7 +42,11 @@ namespace MLAPI.MonoBehaviours.Prototyping
public string param3;
public string param4;
public string param5;
#pragma warning restore CS1591 // Missing XML comment for publicly visible type or member
/// <summary>
/// Gets or sets the animator component used for syncing the animations
/// </summary>
public Animator animator
{
get { return _animator; }
@ -34,7 +56,11 @@ namespace MLAPI.MonoBehaviours.Prototyping
ResetParameterOptions();
}
}
/// <summary>
/// TODO
/// </summary>
/// <param name="index"></param>
/// <param name="value"></param>
public void SetParameterAutoSend(int index, bool value)
{
if (value)
@ -46,7 +72,11 @@ namespace MLAPI.MonoBehaviours.Prototyping
parameterSendBits &= (uint)(~(1 << index));
}
}
/// <summary>
/// TODO
/// </summary>
/// <param name="index"></param>
/// <returns></returns>
public bool GetParameterAutoSend(int index)
{
return (parameterSendBits & (uint)(1 << index)) != 0;
@ -60,6 +90,9 @@ namespace MLAPI.MonoBehaviours.Prototyping
}
}
/// <summary>
/// Registers message handlers
/// </summary>
public override void NetworkStart()
{
RegisterMessageHandler("MLAPI_HandleAnimationMessage", HandleAnimMsg);
@ -67,6 +100,9 @@ namespace MLAPI.MonoBehaviours.Prototyping
RegisterMessageHandler("MLAPI_HandleAnimationTriggerMessage", HandleAnimTriggerMsg);
}
/// <summary>
/// TODO
/// </summary>
public void ResetParameterOptions()
{
Debug.Log("ResetParameterOptions");
@ -81,8 +117,10 @@ namespace MLAPI.MonoBehaviours.Prototyping
CheckSendRate();
#pragma warning disable IDE0018 // Inline variable declaration, Unity's Mono version doesn't support it
int stateHash;
float normalizedTime;
#pragma warning restore IDE0018 // Inline variable declaration, Unity's Mono version doesn't support it
if (!CheckAnimStateChanged(out stateHash, out normalizedTime))
{
return;
@ -98,7 +136,18 @@ namespace MLAPI.MonoBehaviours.Prototyping
}
if(isServer)
{
SendToNonLocalClientsTarget("MLAPI_HandleAnimationMessage", "MLAPI_ANIMATION_UPDATE", stream.ToArray());
if(EnableProximity)
{
List<uint> clientsInProximity = new List<uint>();
foreach (KeyValuePair<uint, NetworkedClient> client in NetworkingManager.singleton.connectedClients)
{
if (Vector3.Distance(transform.position, client.Value.PlayerObject.transform.position) <= ProximityRange)
clientsInProximity.Add(client.Key);
}
SendToClientsTarget(clientsInProximity ,"MLAPI_HandleAnimationMessage", "MLAPI_ANIMATION_UPDATE", stream.ToArray());
}
else
SendToNonLocalClientsTarget("MLAPI_HandleAnimationMessage", "MLAPI_ANIMATION_UPDATE", stream.ToArray());
}
else
{
@ -156,7 +205,18 @@ namespace MLAPI.MonoBehaviours.Prototyping
}
if (isServer)
{
SendToNonLocalClientsTarget("MLAPI_HandleAnimationParameterMessage", "MLAPI_ANIMATION_UPDATE", stream.ToArray());
if (EnableProximity)
{
List<uint> clientsInProximity = new List<uint>();
foreach (KeyValuePair<uint, NetworkedClient> client in NetworkingManager.singleton.connectedClients)
{
if (Vector3.Distance(transform.position, client.Value.PlayerObject.transform.position) <= ProximityRange)
clientsInProximity.Add(client.Key);
}
SendToClientsTarget(clientsInProximity, "MLAPI_HandleAnimationParameterMessage", "MLAPI_ANIMATION_UPDATE", stream.ToArray());
}
else
SendToNonLocalClientsTarget("MLAPI_HandleAnimationParameterMessage", "MLAPI_ANIMATION_UPDATE", stream.ToArray());
}
else
{
@ -188,7 +248,7 @@ namespace MLAPI.MonoBehaviours.Prototyping
if (i == 5) param5 = p;
}
private void HandleAnimMsg(int clientId, byte[] data)
private void HandleAnimMsg(uint clientId, byte[] data)
{
// usually transitions will be triggered by parameters, if not, play anims directly.
// NOTE: this plays "animations", not transitions, so any transitions will be skipped.
@ -196,7 +256,18 @@ namespace MLAPI.MonoBehaviours.Prototyping
if(isServer)
{
SendToNonLocalClientsTarget("MLAPI_HandleAnimationMessage", "MLAPI_ANIMATION_UPDATE", data);
if (EnableProximity)
{
List<uint> clientsInProximity = new List<uint>();
foreach (KeyValuePair<uint, NetworkedClient> client in NetworkingManager.singleton.connectedClients)
{
if (Vector3.Distance(transform.position, client.Value.PlayerObject.transform.position) <= ProximityRange)
clientsInProximity.Add(client.Key);
}
SendToClientsTarget(clientsInProximity, "MLAPI_HandleAnimationMessage", "MLAPI_ANIMATION_UPDATE", data);
}
else
SendToNonLocalClientsTarget("MLAPI_HandleAnimationMessage", "MLAPI_ANIMATION_UPDATE", data);
}
using(MemoryStream stream = new MemoryStream(data))
{
@ -213,11 +284,22 @@ namespace MLAPI.MonoBehaviours.Prototyping
}
}
private void HandleAnimParamsMsg(int clientId, byte[] data)
private void HandleAnimParamsMsg(uint clientId, byte[] data)
{
if (isServer)
{
SendToNonLocalClientsTarget("MLAPI_HandleAnimationParameterMessage", "MLAPI_ANIMATION_UPDATE", data);
if (EnableProximity)
{
List<uint> clientsInProximity = new List<uint>();
foreach (KeyValuePair<uint, NetworkedClient> client in NetworkingManager.singleton.connectedClients)
{
if (Vector3.Distance(transform.position, client.Value.PlayerObject.transform.position) <= ProximityRange)
clientsInProximity.Add(client.Key);
}
SendToClientsTarget(clientsInProximity, "MLAPI_HandleAnimationParameterMessage", "MLAPI_ANIMATION_UPDATE", data);
}
else
SendToNonLocalClientsTarget("MLAPI_HandleAnimationParameterMessage", "MLAPI_ANIMATION_UPDATE", data);
}
using (MemoryStream stream = new MemoryStream(data))
{
@ -228,11 +310,22 @@ namespace MLAPI.MonoBehaviours.Prototyping
}
}
private void HandleAnimTriggerMsg(int clientId, byte[] data)
private void HandleAnimTriggerMsg(uint clientId, byte[] data)
{
if (isServer)
{
SendToNonLocalClientsTarget("MLAPI_HandleAnimationTriggerMessage", "MLAPI_ANIMATION_UPDATE", data);
if (EnableProximity)
{
List<uint> clientsInProximity = new List<uint>();
foreach (KeyValuePair<uint, NetworkedClient> client in NetworkingManager.singleton.connectedClients)
{
if (Vector3.Distance(transform.position, client.Value.PlayerObject.transform.position) <= ProximityRange)
clientsInProximity.Add(client.Key);
}
SendToClientsTarget(clientsInProximity, "MLAPI_HandleAnimationTriggerMessage", "MLAPI_ANIMATION_UPDATE", data);
}
else
SendToNonLocalClientsTarget("MLAPI_HandleAnimationTriggerMessage", "MLAPI_ANIMATION_UPDATE", data);
}
using (MemoryStream stream = new MemoryStream(data))
{
@ -314,11 +407,19 @@ namespace MLAPI.MonoBehaviours.Prototyping
}
}
/// <summary>
/// TODO
/// </summary>
/// <param name="triggerName"></param>
public void SetTrigger(string triggerName)
{
SetTrigger(Animator.StringToHash(triggerName));
}
/// <summary>
/// TODO
/// </summary>
/// <param name="hash"></param>
public void SetTrigger(int hash)
{
if (isLocalPlayer || isOwner)
@ -331,7 +432,18 @@ namespace MLAPI.MonoBehaviours.Prototyping
}
if (isServer)
{
SendToNonLocalClientsTarget("MLAPI_HandleAnimationTriggerMessage", "MLAPI_ANIMATION_UPDATE", stream.ToArray());
if (EnableProximity)
{
List<uint> clientsInProximity = new List<uint>();
foreach (KeyValuePair<uint, NetworkedClient> client in NetworkingManager.singleton.connectedClients)
{
if (Vector3.Distance(transform.position, client.Value.PlayerObject.transform.position) <= ProximityRange)
clientsInProximity.Add(client.Key);
}
SendToClientsTarget(clientsInProximity, "MLAPI_HandleAnimationTriggerMessage", "MLAPI_ANIMATION_UPDATE", stream.ToArray());
}
else
SendToNonLocalClientsTarget("MLAPI_HandleAnimationTriggerMessage", "MLAPI_ANIMATION_UPDATE", stream.ToArray());
}
else
{

View File

@ -1,19 +1,41 @@
using System.Collections.Generic;
using MLAPI.Data;
using MLAPI.MonoBehaviours.Core;
using System.Collections.Generic;
using System.IO;
using UnityEngine;
using UnityEngine.AI;
namespace MLAPI.MonoBehaviours.Prototyping
{
/// <summary>
/// A prototype component for syncing navmeshagents
/// </summary>
[AddComponentMenu("MLAPI/NetworkedNavMeshAgent")]
public class NetworkedNavMeshAgent : NetworkedBehaviour
{
private NavMeshAgent agent;
/// <summary>
/// Is proximity enabled
/// </summary>
public bool EnableProximity = false;
/// <summary>
/// The proximity range
/// </summary>
public float ProximityRange = 50f;
/// <summary>
/// The delay in seconds between corrections
/// </summary>
public float CorrectionDelay = 3f;
//TODO rephrase.
/// <summary>
/// The percentage to lerp on corrections
/// </summary>
[Tooltip("Everytime a correction packet is recieved. This is the percentage (between 0 & 1) that we will move towards the goal.")]
public float DriftCorrectionPercentage = 0.1f;
/// <summary>
/// Should we warp on destination change
/// </summary>
public bool WarpOnDestinationChange = false;
private static byte[] stateUpdateBuffer = new byte[36];
private static byte[] correctionBuffer = new byte[24];
@ -23,6 +45,9 @@ namespace MLAPI.MonoBehaviours.Prototyping
agent = GetComponent<NavMeshAgent>();
}
/// <summary>
/// Registers message handlers
/// </summary>
public override void NetworkStart()
{
if (isClient)
@ -60,17 +85,17 @@ namespace MLAPI.MonoBehaviours.Prototyping
}
if (!EnableProximity)
{
SendToClientsTarget("MLAPI_OnNavMeshStateUpdate", "MLAPI_NAV_AGENT_STATE", stream.GetBuffer());
SendToClientsTarget("MLAPI_OnNavMeshStateUpdate", "MLAPI_NAV_AGENT_STATE", stateUpdateBuffer);
}
else
{
List<int> proximityClients = new List<int>();
foreach (KeyValuePair<int, NetworkedClient> client in NetworkingManager.singleton.connectedClients)
List<uint> proximityClients = new List<uint>();
foreach (KeyValuePair<uint, NetworkedClient> client in NetworkingManager.singleton.connectedClients)
{
if (Vector3.Distance(client.Value.PlayerObject.transform.position, transform.position) <= ProximityRange)
proximityClients.Add(client.Key);
}
SendToClientsTarget(proximityClients, "MLAPI_OnNavMeshStateUpdate", "MLAPI_NAV_AGENT_STATE", stream.GetBuffer());
SendToClientsTarget(proximityClients, "MLAPI_OnNavMeshStateUpdate", "MLAPI_NAV_AGENT_STATE", stateUpdateBuffer);
}
}
}
@ -92,24 +117,24 @@ namespace MLAPI.MonoBehaviours.Prototyping
if (!EnableProximity)
{
SendToClientsTarget("MLAPI_OnNavMeshCorrectionUpdate", "MLAPI_NAV_AGENT_CORRECTION", stream.GetBuffer());
SendToClientsTarget("MLAPI_OnNavMeshCorrectionUpdate", "MLAPI_NAV_AGENT_CORRECTION", correctionBuffer);
}
else
{
List<int> proximityClients = new List<int>();
foreach (KeyValuePair<int, NetworkedClient> client in NetworkingManager.singleton.connectedClients)
List<uint> proximityClients = new List<uint>();
foreach (KeyValuePair<uint, NetworkedClient> client in NetworkingManager.singleton.connectedClients)
{
if (Vector3.Distance(client.Value.PlayerObject.transform.position, transform.position) <= ProximityRange)
proximityClients.Add(client.Key);
}
SendToClientsTarget(proximityClients, "MLAPI_OnNavMeshCorrectionUpdate", "MLAPI_NAV_AGENT_CORRECTION", stream.GetBuffer());
SendToClientsTarget(proximityClients, "MLAPI_OnNavMeshCorrectionUpdate", "MLAPI_NAV_AGENT_CORRECTION", correctionBuffer);
}
}
lastCorrectionTime = Time.time;
}
}
private void OnNavMeshStateUpdate(int clientId, byte[] data)
private void OnNavMeshStateUpdate(uint clientId, byte[] data)
{
using (MemoryStream stream = new MemoryStream(data))
{
@ -133,12 +158,15 @@ namespace MLAPI.MonoBehaviours.Prototyping
agent.SetDestination(destination);
agent.velocity = velocity;
agent.Warp(position);
if (WarpOnDestinationChange)
agent.Warp(position);
else
agent.Warp(Vector3.Lerp(transform.position, position, DriftCorrectionPercentage));
}
}
}
private void OnNavMeshCorrectionUpdate(int clinetId, byte[] data)
private void OnNavMeshCorrectionUpdate(uint clientId, byte[] data)
{
using (MemoryStream stream = new MemoryStream(data))
{

View File

@ -1,20 +1,47 @@
using System.IO;
using MLAPI.Data;
using MLAPI.MonoBehaviours.Core;
using System.IO;
using UnityEngine;
namespace MLAPI.MonoBehaviours.Prototyping
{
/// <summary>
/// A prototype component for syncing transforms
/// </summary>
[AddComponentMenu("MLAPI/NetworkedTransform")]
public class NetworkedTransform : NetworkedBehaviour
{
/// <summary>
/// Sends per second
/// </summary>
[Range(0f, 120f)]
public float SendsPerSecond = 20;
/// <summary>
/// Is the sends per second assumed to be the same across all instances
/// </summary>
[Tooltip("This assumes that the SendsPerSecond is synced across clients")]
public bool AssumeSyncedSends = true;
/// <summary>
/// Enable interpolation
/// </summary>
[Tooltip("This requires AssumeSyncedSends to be true")]
public bool InterpolatePosition = true;
/// <summary>
/// The distance before snaping to the position
/// </summary>
[Tooltip("The transform will snap if the distance is greater than this distance")]
public float SnapDistance = 10f;
/// <summary>
/// Should the server interpolate
/// </summary>
public bool InterpolateServer = true;
/// <summary>
/// The min meters to move before a send is sent
/// </summary>
public float MinMeters = 0.15f;
/// <summary>
/// The min degrees to rotate before a send it sent
/// </summary>
public float MinDegrees = 1.5f;
private float timeForLerp;
private float lerpT;
@ -26,8 +53,13 @@ namespace MLAPI.MonoBehaviours.Prototyping
private float lastSendTime;
private Vector3 lastSentPos;
private Quaternion lastSentRot;
/// <summary>
/// Should proximity be enabled
/// </summary>
public bool EnableProximity = false;
/// <summary>
/// The distance to use for proximity
/// </summary>
[Tooltip("If enable proximity is turned on, on clients within this range will be recieving position updates from the server")]
public float ProximityRange = 50;
@ -44,7 +76,10 @@ namespace MLAPI.MonoBehaviours.Prototyping
if (MinMeters < 0)
MinMeters = 0;
}
/// <summary>
/// Registers message handlers
/// </summary>
public override void NetworkStart()
{
if (isServer)
@ -63,7 +98,7 @@ namespace MLAPI.MonoBehaviours.Prototyping
private void Update()
{
if(isOwner || isLocalPlayer || (ownerClientId == -2 && isServer))
if(isOwner || isLocalPlayer || (new NetId(ownerClientId).IsInvalid() && isServer))
{
//We own the object OR we are server and the object is not owned by anyone OR we are the object.
if(Time.time - lastSendTime >= timeForLerp && (Vector3.Distance(transform.position, lastSentPos) > MinMeters || Quaternion.Angle(transform.rotation, lastSentRot) > MinDegrees))
@ -83,9 +118,9 @@ namespace MLAPI.MonoBehaviours.Prototyping
writer.Write(transform.rotation.eulerAngles.z);
}
if (isServer)
SendToClientsTarget("MLAPI_OnRecieveTransformFromServer", "MLAPI_POSITION_UPDATE", writeStream.GetBuffer());
SendToClientsTarget("MLAPI_OnRecieveTransformFromServer", "MLAPI_POSITION_UPDATE", positionUpdateBuffer);
else
SendToServerTarget("MLAPI_OnRecieveTransformFromClient", "MLAPI_POSITION_UPDATE", writeStream.GetBuffer());
SendToServerTarget("MLAPI_OnRecieveTransformFromClient", "MLAPI_POSITION_UPDATE", positionUpdateBuffer);
}
}
@ -107,7 +142,7 @@ namespace MLAPI.MonoBehaviours.Prototyping
}
}
private void OnRecieveTransformFromServer(int clientId, byte[] data)
private void OnRecieveTransformFromServer(uint clientId, byte[] data)
{
using (MemoryStream stream = new MemoryStream(data))
{
@ -128,9 +163,9 @@ namespace MLAPI.MonoBehaviours.Prototyping
}
}
private void OnRecieveTransformFromClient(int clientId, byte[] data)
private void OnRecieveTransformFromClient(uint clientId, byte[] data)
{
using(MemoryStream readStream = new MemoryStream(data))
using (MemoryStream readStream = new MemoryStream(data))
{
using(BinaryReader reader = new BinaryReader(readStream))
{
@ -166,17 +201,18 @@ namespace MLAPI.MonoBehaviours.Prototyping
}
if(EnableProximity)
{
for (int i = 0; i < NetworkingManager.singleton.connectedClients.Count; i++)
// For instead of Foreach?! TODO!!!
for (uint i = 0; i < NetworkingManager.singleton.connectedClients.Count; i++)
{
if (Vector3.Distance(NetworkingManager.singleton.connectedClients[i].PlayerObject.transform.position, transform.position) <= ProximityRange)
{
SendToClientTarget(NetworkingManager.singleton.connectedClients[i].ClientId, "MLAPI_OnRecieveTransformFromServer", "MLAPI_POSITION_UPDATE", writeStream.GetBuffer());
SendToClientTarget(NetworkingManager.singleton.connectedClients[i].ClientId, "MLAPI_OnRecieveTransformFromServer", "MLAPI_POSITION_UPDATE", positionUpdateBuffer);
}
}
}
else
{
SendToNonLocalClientsTarget("MLAPI_OnRecieveTransformFromServer", "MLAPI_POSITION_UPDATE", writeStream.GetBuffer());
SendToNonLocalClientsTarget("MLAPI_OnRecieveTransformFromServer", "MLAPI_POSITION_UPDATE", positionUpdateBuffer);
}
}
}

View File

@ -0,0 +1,201 @@
using MLAPI.Attributes;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Reflection;
using System.Text;
using UnityEngine;
namespace MLAPI.NetworkingManagerComponents.Binary
{
/// <summary>
/// Helper class for serializing classes to binary
/// </summary>
public static class BinarySerializer
{
private static Dictionary<string, FieldInfo[]> cachedFields = new Dictionary<string, FieldInfo[]>();
/// <summary>
/// Clears the cache of the serializer
/// </summary>
public static void ClearCache()
{
cachedFields.Clear();
}
/// <summary>
/// Serializes a class instance to binary
/// </summary>
/// <typeparam name="T">The class type to serialize</typeparam>
/// <param name="instance">The instance to serialize</param>
/// <returns>Binary serialized version of the instance</returns>
public static byte[] Serialize<T>(T instance)
{
FieldInfo[] sortedFields;
if (cachedFields.ContainsKey(instance.GetType().FullName))
sortedFields = cachedFields[instance.GetType().FullName];
else
{
sortedFields = instance.GetType().GetFields(BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.Instance).OrderBy(x => x.Name).Where(x => !x.IsDefined(typeof(BinaryIgnore), true)).ToArray();
cachedFields.Add(instance.GetType().FullName, sortedFields);
}
int outputSize = 0;
//Calculate output size
for (int i = 0; i < sortedFields.Length; i++)
{
if (sortedFields[i].FieldType == typeof(bool))
outputSize += 1;
else if (sortedFields[i].FieldType == typeof(byte))
outputSize += 1;
else if (sortedFields[i].FieldType == typeof(char))
outputSize += 2;
else if (sortedFields[i].FieldType == typeof(double))
outputSize += 8;
else if (sortedFields[i].FieldType == typeof(float))
outputSize += 4;
else if (sortedFields[i].FieldType == typeof(decimal))
outputSize += 16;
else if (sortedFields[i].FieldType == typeof(int))
outputSize += 4;
else if (sortedFields[i].FieldType == typeof(long))
outputSize += 8;
else if (sortedFields[i].FieldType == typeof(sbyte))
outputSize += 1;
else if (sortedFields[i].FieldType == typeof(short))
outputSize += 2;
else if (sortedFields[i].FieldType == typeof(uint))
outputSize += 4;
else if (sortedFields[i].FieldType == typeof(ulong))
outputSize += 8;
else if (sortedFields[i].FieldType == typeof(ushort))
outputSize += 2;
else if (sortedFields[i].FieldType == typeof(string))
outputSize += Encoding.UTF8.GetByteCount((string)sortedFields[i].GetValue(instance)) + 2;
else if (sortedFields[i].FieldType == typeof(byte[]))
outputSize += ((byte[])sortedFields[i].GetValue(instance)).Length + 2; //Two bytes to specify the size
else
Debug.LogWarning("MLAPI: The type \"" + sortedFields[i].FieldType.Name + "\" is not supported by the Binary Serializer. It will be ignored");
}
//Write data
using (MemoryStream stream = new MemoryStream(outputSize))
{
using (BinaryWriter writer = new BinaryWriter(stream))
{
for (int i = 0; i < sortedFields.Length; i++)
{
if (sortedFields[i].FieldType == typeof(bool))
writer.Write((bool)sortedFields[i].GetValue(instance));
else if (sortedFields[i].FieldType == typeof(byte))
writer.Write((byte)sortedFields[i].GetValue(instance));
else if (sortedFields[i].FieldType == typeof(char))
writer.Write((char)sortedFields[i].GetValue(instance));
else if (sortedFields[i].FieldType == typeof(double))
writer.Write((double)sortedFields[i].GetValue(instance));
else if (sortedFields[i].FieldType == typeof(float))
writer.Write((float)sortedFields[i].GetValue(instance));
else if (sortedFields[i].FieldType == typeof(decimal))
writer.Write((decimal)sortedFields[i].GetValue(instance));
else if (sortedFields[i].FieldType == typeof(int))
writer.Write((int)sortedFields[i].GetValue(instance));
else if (sortedFields[i].FieldType == typeof(long))
writer.Write((long)sortedFields[i].GetValue(instance));
else if (sortedFields[i].FieldType == typeof(sbyte))
writer.Write((sbyte)sortedFields[i].GetValue(instance));
else if (sortedFields[i].FieldType == typeof(short))
writer.Write((short)sortedFields[i].GetValue(instance));
else if (sortedFields[i].FieldType == typeof(uint))
writer.Write((uint)sortedFields[i].GetValue(instance));
else if (sortedFields[i].FieldType == typeof(ulong))
writer.Write((ulong)sortedFields[i].GetValue(instance));
else if (sortedFields[i].FieldType == typeof(ushort))
writer.Write((ushort)sortedFields[i].GetValue(instance));
else if (sortedFields[i].FieldType == typeof(string))
{
writer.Write((ushort)Encoding.UTF8.GetByteCount((string)sortedFields[i].GetValue(instance))); //Size of string in bytes
writer.Write(Encoding.UTF8.GetBytes((string)sortedFields[i].GetValue(instance)));
}
else if (sortedFields[i].FieldType == typeof(byte[]))
{
writer.Write((ushort)((byte[])sortedFields[i].GetValue(instance)).Length); //Size of byte array
writer.Write((byte[])sortedFields[i].GetValue(instance));
}
}
}
return stream.ToArray();
}
}
/// <summary>
/// Deserializes binary and turns it back into the original class
/// </summary>
/// <typeparam name="T">The type to return</typeparam>
/// <param name="binary">The binary to deserialize</param>
/// <returns>An instance of T</returns>
public static T Deserialize<T>(byte[] binary) where T : new()
{
T instance = new T();
FieldInfo[] sortedFields;
if (cachedFields.ContainsKey(instance.GetType().FullName))
sortedFields = cachedFields[instance.GetType().FullName];
else
{
sortedFields = instance.GetType().GetFields(BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.Instance).OrderBy(x => x.Name).Where(x => !x.IsDefined(typeof(BinaryIgnore), true)).ToArray();
cachedFields.Add(instance.GetType().FullName, sortedFields);
}
using (MemoryStream stream = new MemoryStream(binary))
{
using (BinaryReader reader = new BinaryReader(stream))
{
for (int i = 0; i < sortedFields.Length; i++)
{
if (sortedFields[i].FieldType == typeof(bool))
sortedFields[i].SetValue(instance, reader.ReadBoolean());
else if (sortedFields[i].FieldType == typeof(byte))
sortedFields[i].SetValue(instance, reader.ReadByte());
else if (sortedFields[i].FieldType == typeof(char))
sortedFields[i].SetValue(instance, reader.ReadChar());
else if (sortedFields[i].FieldType == typeof(double))
sortedFields[i].SetValue(instance, reader.ReadDouble());
else if (sortedFields[i].FieldType == typeof(float))
sortedFields[i].SetValue(instance, reader.ReadSingle());
else if (sortedFields[i].FieldType == typeof(decimal))
sortedFields[i].SetValue(instance, reader.ReadDecimal());
else if (sortedFields[i].FieldType == typeof(int))
sortedFields[i].SetValue(instance, reader.ReadInt32());
else if (sortedFields[i].FieldType == typeof(long))
sortedFields[i].SetValue(instance, reader.ReadInt64());
else if (sortedFields[i].FieldType == typeof(sbyte))
sortedFields[i].SetValue(instance, reader.ReadSByte());
else if (sortedFields[i].FieldType == typeof(short))
sortedFields[i].SetValue(instance, reader.ReadInt16());
else if (sortedFields[i].FieldType == typeof(uint))
sortedFields[i].SetValue(instance, reader.ReadUInt32());
else if (sortedFields[i].FieldType == typeof(ulong))
sortedFields[i].SetValue(instance, reader.ReadUInt64());
else if (sortedFields[i].FieldType == typeof(ushort))
sortedFields[i].SetValue(instance, reader.ReadUInt64());
else if (sortedFields[i].FieldType == typeof(string))
{
ushort size = reader.ReadUInt16();
sortedFields[i].SetValue(instance, Encoding.UTF8.GetString(reader.ReadBytes(size)));
}
else if (sortedFields[i].FieldType == typeof(byte[]))
{
ushort size = reader.ReadUInt16();
sortedFields[i].SetValue(instance, reader.ReadBytes(size));
}
else
Debug.LogWarning("MLAPI: The type \"" + sortedFields[i].FieldType.Name + "\" is not supported by the Binary Serializer. It will be ignored");
}
}
}
return instance;
}
}
}

View File

@ -1,10 +1,19 @@
using System;
using System.Collections.Generic;
namespace MLAPI.NetworkingManagerComponents
namespace MLAPI.NetworkingManagerComponents.Binary
{
/// <summary>
/// Helper class to chunk messages
/// </summary>
public static class MessageChunker
{
/// <summary>
/// Chunks a large byte array to smaller chunks
/// </summary>
/// <param name="message">The large byte array</param>
/// <param name="chunkSize">The amount of bytes of non header data to use for each chunk</param>
/// <returns>List of chunks</returns>
public static List<byte[]> GetChunkedMessage(ref byte[] message, int chunkSize)
{
List<byte[]> chunks = new List<byte[]>((int)Math.Ceiling((double)message.Length / chunkSize));
@ -36,6 +45,12 @@ namespace MLAPI.NetworkingManagerComponents
return chunks;
}
/// <summary>
/// Checks if a list of chunks has missing parts
/// </summary>
/// <param name="chunks">The list of chunks</param>
/// <param name="expectedChunksCount">The expected amount of chunks</param>
/// <returns>If list of chunks has missing parts</returns>
public static bool HasMissingParts(ref List<byte[]> chunks, uint expectedChunksCount)
{
if (chunks.Count < expectedChunksCount)
@ -54,6 +69,11 @@ namespace MLAPI.NetworkingManagerComponents
return chunks.Count - duplicateCount != expectedChunksCount;
}
/// <summary>
/// Checks if a list of chunks is in correct order
/// </summary>
/// <param name="chunks">The list of chunks</param>
/// <returns>If all chunks are in order</returns>
public static bool IsOrdered(ref List<byte[]> chunks)
{
uint lastChunkIndex = 0;
@ -69,6 +89,12 @@ namespace MLAPI.NetworkingManagerComponents
return true;
}
/// <summary>
/// Checks if a list of chunks have any duplicates inside of it
/// </summary>
/// <param name="chunks">The list of chunks</param>
/// <param name="expectedChunksCount">The expected amount of chunks</param>
/// <returns>If a list of chunks has duplicate chunks in it</returns>
public static bool HasDuplicates(ref List<byte[]> chunks, uint expectedChunksCount)
{
if (chunks.Count > expectedChunksCount)
@ -86,7 +112,12 @@ namespace MLAPI.NetworkingManagerComponents
return false;
}
/// <summary>
/// Converts a list of chunks back into the original buffer, this requires the list to be in correct order and properly verified
/// </summary>
/// <param name="chunks">The list of chunks</param>
/// <param name="chunkSize">The size of each chunk. Optional</param>
/// <returns></returns>
public static byte[] GetMessageOrdered(ref List<byte[]> chunks, int chunkSize = -1)
{
if (chunks.Count == 0)
@ -107,6 +138,12 @@ namespace MLAPI.NetworkingManagerComponents
return message;
}
/// <summary>
/// Converts a list of chunks back into the original buffer, this does not require the list to be in correct order and properly verified
/// </summary>
/// <param name="chunks">The list of chunks</param>
/// <param name="chunkSize">The size of each chunk. Optional</param>
/// <returns></returns>
public static byte[] GetMessageUnordered(ref List<byte[]> chunks, int chunkSize = -1)
{
if (chunks.Count == 0)

View File

@ -1,43 +0,0 @@
using System;
using System.Collections.Generic;
using MLAPI.Data;
namespace MLAPI.NetworkingManagerComponents
{
internal static class ClientIdManager
{
internal static int clientIdCounter;
// Use a queue instead of stack to (hopefully) reduce the chance of a clientId being re taken to quickly.
internal static Queue<int> releasedClientIds;
internal static Dictionary<int, ClientIdKey> clientIdToKey;
internal static Dictionary<ClientIdKey, int> keyToClientId;
internal static int GetClientId(int connectionId, int hostId)
{
int clientId;
if (releasedClientIds.Count > 0)
{
clientId = releasedClientIds.Dequeue();
}
else
{
clientId = clientIdCounter;
clientIdCounter++;
}
clientIdToKey.Add(clientId, new ClientIdKey(hostId, connectionId));
keyToClientId.Add(new ClientIdKey(hostId, connectionId), clientId);
return clientId;
}
internal static void ReleaseClientId(int clientId)
{
ClientIdKey key = clientIdToKey[clientId];
if (clientIdToKey.ContainsKey(clientId))
clientIdToKey.Remove(clientId);
if (keyToClientId.ContainsKey(key))
keyToClientId.Remove(key);
releasedClientIds.Enqueue(clientId);
}
}
}

View File

@ -0,0 +1,78 @@
using MLAPI.Data;
using MLAPI.MonoBehaviours.Core;
using System;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.Networking;
namespace MLAPI.NetworkingManagerComponents.Core
{
/// <summary>
/// The main class for controlling lag compensation
/// </summary>
public static class LagCompensationManager
{
internal static List<TrackedObject> simulationObjects = new List<TrackedObject>();
/// <summary>
/// Simulation objects
/// </summary>
public static List<TrackedObject> SimulationObjects
{
get
{
return simulationObjects;
}
}
/// <summary>
/// Turns time back a given amount of seconds, invokes an action and turns it back
/// </summary>
/// <param name="secondsAgo">The amount of seconds</param>
/// <param name="action">The action to invoke when time is turned back</param>
public static void Simulate(float secondsAgo, Action action)
{
if(!NetworkingManager.singleton.isServer)
{
Debug.LogWarning("MLAPI: Lag compensation simulations are only to be ran on the server.");
return;
}
for (int i = 0; i < simulationObjects.Count; i++)
{
simulationObjects[i].ReverseTransform(secondsAgo);
}
action.Invoke();
for (int i = 0; i < simulationObjects.Count; i++)
{
simulationObjects[i].ResetStateTransform();
}
}
private static byte error = 0;
/// <summary>
/// Turns time back a given amount of seconds, invokes an action and turns it back. The time is based on the estimated RTT of a clientId
/// </summary>
/// <param name="clientId">The clientId's RTT to use</param>
/// <param name="action">The action to invoke when time is turned back</param>
public static void Simulate(uint clientId, Action action)
{
if (!NetworkingManager.singleton.isServer)
{
Debug.LogWarning("MLAPI: Lag compensation simulations are only to be ran on the server.");
return;
}
NetId netId = new NetId(clientId);
float milisecondsDelay = NetworkTransport.GetCurrentRTT(netId.HostId, netId.ConnectionId, out error) / 2f;
Simulate(milisecondsDelay * 1000f, action);
}
internal static void AddFrames()
{
for (int i = 0; i < simulationObjects.Count; i++)
{
simulationObjects[i].AddFrame();
}
}
}
}

View File

@ -1,8 +1,9 @@
using System;
using MLAPI.MonoBehaviours.Core;
using System;
using System.Collections.Generic;
using UnityEngine;
namespace MLAPI.NetworkingManagerComponents
namespace MLAPI.NetworkingManagerComponents.Core
{
internal static class MessageManager
{
@ -10,11 +11,10 @@ namespace MLAPI.NetworkingManagerComponents
internal static Dictionary<int, string> reverseChannels;
internal static Dictionary<string, ushort> messageTypes;
internal static Dictionary<ushort, string> reverseMessageTypes;
internal static Dictionary<ushort, Dictionary<int, Action<int, byte[]>>> messageCallbacks;
internal static Dictionary<ushort, Dictionary<int, Action<uint, byte[]>>> messageCallbacks;
internal static Dictionary<ushort, int> messageHandlerCounter;
internal static Dictionary<ushort, Stack<int>> releasedMessageHandlerCounters;
//Key: messageType, Value key: networkId, value value: handlerId
internal static Dictionary<ushort, Dictionary<uint, List<int>>> targetedMessages;
private static NetworkingManager netManager
{
@ -24,18 +24,11 @@ namespace MLAPI.NetworkingManagerComponents
}
}
internal static int AddIncomingMessageHandler(string name, Action<int, byte[]> action, uint networkId)
internal static int AddIncomingMessageHandler(string name, Action<uint, byte[]> action, uint networkId)
{
if (messageTypes.ContainsKey(name))
{
if(!targetedMessages.ContainsKey(messageTypes[name]))
{
targetedMessages.Add(messageTypes[name], new Dictionary<uint, List<int>>());
}
if(!targetedMessages[messageTypes[name]].ContainsKey(networkId))
{
targetedMessages[messageTypes[name]].Add(networkId, new List<int>());
}
if (messageCallbacks.ContainsKey(messageTypes[name]))
{
int handlerId = 0;
@ -59,15 +52,13 @@ namespace MLAPI.NetworkingManagerComponents
messageHandlerCounter.Add(messageTypes[name], handlerId + 1);
}
messageCallbacks[messageTypes[name]].Add(handlerId, action);
targetedMessages[messageTypes[name]][networkId].Add(handlerId);
return handlerId;
}
else
{
messageCallbacks.Add(messageTypes[name], new Dictionary<int, Action<int, byte[]>>());
messageCallbacks.Add(messageTypes[name], new Dictionary<int, Action<uint, byte[]>>());
messageHandlerCounter.Add(messageTypes[name], 1);
messageCallbacks[messageTypes[name]].Add(0, action);
targetedMessages[messageTypes[name]][networkId].Add(0);
return 0;
}
}
@ -89,8 +80,8 @@ namespace MLAPI.NetworkingManagerComponents
if (!releasedMessageHandlerCounters.ContainsKey(messageTypes[name]))
releasedMessageHandlerCounters.Add(messageTypes[name], new Stack<int>());
releasedMessageHandlerCounters[messageTypes[name]].Push(counter);
targetedMessages[messageTypes[name]][networkId].Remove(counter);
}
}
}
}

View File

@ -1,17 +1,26 @@
using MLAPI.Data;
using MLAPI.MonoBehaviours.Core;
using System.Collections.Generic;
using System.IO;
using UnityEngine;
namespace MLAPI.NetworkingManagerComponents
namespace MLAPI.NetworkingManagerComponents.Core
{
/// <summary>
/// Main class for managing network pools
/// </summary>
public static class NetworkPoolManager
{
internal static Dictionary<ushort, NetworkPool> Pools;
private static ushort PoolIndex = 0;
internal static Dictionary<string, ushort> PoolNamesToIndexes;
//Server only
/// <summary>
/// Creates a networked object pool. Can only be called from the server
/// </summary>
/// <param name="poolName">Name of the pool</param>
/// <param name="spawnablePrefabIndex">The index of the prefab to use in the spawnablePrefabs array</param>
/// <param name="size">The amount of objects in the pool</param>
public static void CreatePool(string poolName, int spawnablePrefabIndex, uint size = 16)
{
if(!NetworkingManager.singleton.isServer)
@ -24,6 +33,10 @@ namespace MLAPI.NetworkingManagerComponents
PoolIndex++;
}
/// <summary>
/// This destroys an object pool and all of it's objects. Can only be called from the server
/// </summary>
/// <param name="poolName">The name of the pool</param>
public static void DestroyPool(string poolName)
{
if (!NetworkingManager.singleton.isServer)
@ -38,6 +51,13 @@ namespace MLAPI.NetworkingManagerComponents
Pools.Remove(PoolNamesToIndexes[poolName]);
}
/// <summary>
/// Spawns a object from the pool at a given position and rotation. Can only be called from server.
/// </summary>
/// <param name="poolName">The name of the pool</param>
/// <param name="position">The position to spawn the object at</param>
/// <param name="rotation">The rotation to spawn the object at</param>
/// <returns></returns>
public static GameObject SpawnPoolObject(string poolName, Vector3 position, Quaternion rotation)
{
if (!NetworkingManager.singleton.isServer)
@ -63,6 +83,10 @@ namespace MLAPI.NetworkingManagerComponents
return go;
}
/// <summary>
/// Destroys a NetworkedObject if it's part of a pool. Use this instead of the MonoBehaviour Destroy method. Can only be called from Server.
/// </summary>
/// <param name="netObject">The NetworkedObject instance to destroy</param>
public static void DestroyPoolObject(NetworkedObject netObject)
{
if (!NetworkingManager.singleton.isServer)

View File

@ -1,11 +1,15 @@
using System.Collections.Generic;
using MLAPI.MonoBehaviours.Core;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using UnityEngine;
using UnityEngine.SceneManagement;
namespace MLAPI.NetworkingManagerComponents
namespace MLAPI.NetworkingManagerComponents.Core
{
/// <summary>
/// Main class for managing network scenes
/// </summary>
public static class NetworkSceneManager
{
internal static HashSet<string> registeredSceneNames;
@ -26,6 +30,10 @@ namespace MLAPI.NetworkingManagerComponents
CurrentSceneIndex = sceneNameToIndex[SceneManager.GetActiveScene().name];
}
/// <summary>
/// Switches to a scene with a given name. Can only be called from Server
/// </summary>
/// <param name="sceneName">The name of the scene to switch to</param>
public static void SwitchScene(string sceneName)
{
if(!NetworkingManager.singleton.NetworkConfig.EnableSceneSwitching)
@ -43,6 +51,7 @@ namespace MLAPI.NetworkingManagerComponents
Debug.LogWarning("MLAPI: The scene " + sceneName + " is not registered as a switchable scene.");
return;
}
SpawnManager.DestroySceneObjects(); //Destroy current scene objects before switching.
CurrentSceneIndex = sceneNameToIndex[sceneName];
isSwitching = true;
lastScene = SceneManager.GetActiveScene();
@ -59,6 +68,10 @@ namespace MLAPI.NetworkingManagerComponents
}
}
/// <summary>
/// Called on client
/// </summary>
/// <param name="sceneIndex"></param>
internal static void OnSceneSwitch(uint sceneIndex)
{
if (!NetworkingManager.singleton.NetworkConfig.EnableSceneSwitching)
@ -66,11 +79,16 @@ namespace MLAPI.NetworkingManagerComponents
Debug.LogWarning("MLAPI: Scene switching is not enabled but was requested by the server");
return;
}
else if (!sceneIndexToString.ContainsKey(sceneIndex) || registeredSceneNames.Contains(sceneIndexToString[sceneIndex]))
else if (!sceneIndexToString.ContainsKey(sceneIndex) || !registeredSceneNames.Contains(sceneIndexToString[sceneIndex]))
{
Debug.LogWarning("MLAPI: Server requested a scene switch to a non registered scene");
return;
}
else if(SceneManager.GetActiveScene().name == sceneIndexToString[sceneIndex])
{
return; //This scene is already loaded. This usually happends at first load
}
SpawnManager.DestroySceneObjects();
lastScene = SceneManager.GetActiveScene();
AsyncOperation sceneLoad = SceneManager.LoadSceneAsync(sceneIndexToString[sceneIndex], LoadSceneMode.Additive);
sceneLoad.completed += OnSceneLoaded;
@ -92,6 +110,16 @@ namespace MLAPI.NetworkingManagerComponents
private static void OnSceneUnload(AsyncOperation operation)
{
isSwitching = false;
if(NetworkingManager.singleton.isServer)
{
SpawnManager.MarkSceneObjects();
SpawnManager.FlushSceneObjects();
}
else
{
Debug.LogError("DESTROING OBJECTS");
SpawnManager.DestroySceneObjects();
}
}
}
}

View File

@ -0,0 +1,281 @@
using MLAPI.Data;
using MLAPI.MonoBehaviours.Core;
using System;
using System.Collections.Generic;
using System.IO;
using UnityEngine;
namespace MLAPI.NetworkingManagerComponents.Core
{
internal static class SpawnManager
{
internal static Dictionary<uint, NetworkedObject> spawnedObjects;
internal static Stack<uint> releasedNetworkObjectIds;
private static uint networkObjectIdCounter;
internal static uint GetNetworkObjectId()
{
if (releasedNetworkObjectIds.Count > 0)
{
return releasedNetworkObjectIds.Pop();
}
else
{
networkObjectIdCounter++;
return networkObjectIdCounter;
}
}
private static NetworkingManager netManager
{
get
{
return NetworkingManager.singleton;
}
}
internal static void RemoveOwnership(uint netId)
{
NetworkedObject netObject = SpawnManager.spawnedObjects[netId];
NetworkingManager.singleton.connectedClients[netObject.OwnerClientId].OwnedObjects.RemoveAll(x => x.NetworkId == netId);
netObject.ownerClientId = new NetId(0, 0, false, true).GetClientId();
using (MemoryStream stream = new MemoryStream(8))
{
using (BinaryWriter writer = new BinaryWriter(stream))
{
writer.Write(netId);
writer.Write(netObject.ownerClientId);
}
netManager.Send("MLAPI_CHANGE_OWNER", "MLAPI_INTERNAL", stream.GetBuffer());
}
}
internal static void ChangeOwnership(uint netId, uint clientId)
{
NetworkedObject netObject = SpawnManager.spawnedObjects[netId];
NetworkingManager.singleton.connectedClients[netObject.OwnerClientId].OwnedObjects.RemoveAll(x => x.NetworkId == netId);
NetworkingManager.singleton.connectedClients[clientId].OwnedObjects.Add(netObject);
netObject.ownerClientId = clientId;
using (MemoryStream stream = new MemoryStream(8))
{
using (BinaryWriter writer = new BinaryWriter(stream))
{
writer.Write(netId);
writer.Write(clientId);
}
netManager.Send("MLAPI_CHANGE_OWNER", "MLAPI_INTERNAL", stream.GetBuffer());
}
}
internal static void DestroyNonSceneObjects()
{
if(spawnedObjects != null)
{
foreach (KeyValuePair<uint, NetworkedObject> netObject in spawnedObjects)
{
if (netObject.Value.sceneObject != null && netObject.Value.sceneObject.Value == false)
MonoBehaviour.Destroy(netObject.Value.gameObject);
}
}
}
internal static void DestroySceneObjects()
{
NetworkedObject[] netObjects = MonoBehaviour.FindObjectsOfType<NetworkedObject>();
for (int i = 0; i < netObjects.Length; i++)
{
if (netObjects[i].sceneObject == null || netObjects[i].sceneObject.Value == true)
MonoBehaviour.Destroy(netObjects[i].gameObject);
}
}
internal static void MarkSceneObjects()
{
NetworkedObject[] netObjects = MonoBehaviour.FindObjectsOfType<NetworkedObject>();
for (int i = 0; i < netObjects.Length; i++)
{
if (netObjects[i].sceneObject == null)
netObjects[i].sceneObject = true;
}
}
internal static void FlushSceneObjects()
{
if (!NetworkingManager.singleton.isServer)
return;
List<NetworkedObject> sceneObjectsToSync = new List<NetworkedObject>();
foreach (KeyValuePair<uint, NetworkedObject> pair in SpawnManager.spawnedObjects)
{
if (pair.Value.sceneObject == null || pair.Value.sceneObject == true)
sceneObjectsToSync.Add(pair.Value);
}
int sizeOfStream = 2 + (38 * sceneObjectsToSync.Count); //The two is the base size, it's a ushort containing the amount of objects. Each object takes 38 bytes
using (MemoryStream stream = new MemoryStream(sizeOfStream))
{
using (BinaryWriter writer = new BinaryWriter(stream))
{
writer.Write((ushort)sceneObjectsToSync.Count);
for (int i = 0; i < sceneObjectsToSync.Count; i++)
{
writer.Write(false); //isLocalPlayer
writer.Write(sceneObjectsToSync[i].NetworkId);
writer.Write(sceneObjectsToSync[i].OwnerClientId);
writer.Write(NetworkingManager.singleton.NetworkConfig.NetworkPrefabIds[sceneObjectsToSync[i].NetworkedPrefabName]);
writer.Write(sceneObjectsToSync[i].transform.position.x);
writer.Write(sceneObjectsToSync[i].transform.position.y);
writer.Write(sceneObjectsToSync[i].transform.position.z);
writer.Write(sceneObjectsToSync[i].transform.rotation.eulerAngles.x);
writer.Write(sceneObjectsToSync[i].transform.rotation.eulerAngles.y);
writer.Write(sceneObjectsToSync[i].transform.rotation.eulerAngles.z);
}
}
NetworkingManager.singleton.Send("MLAPI_ADD_OBJECTS", "MLAPI_INTERNAL", stream.GetBuffer());
}
}
internal static GameObject SpawnPrefabIndexClient(int networkedPrefabId, uint networkId, uint owner, Vector3 position, Quaternion rotation)
{
if (!netManager.NetworkConfig.NetworkPrefabNames.ContainsKey(networkedPrefabId))
{
Debug.LogWarning("MLAPI: Cannot spawn the object, invalid prefabIndex");
return null;
}
GameObject go = MonoBehaviour.Instantiate(netManager.NetworkConfig.NetworkedPrefabs[networkedPrefabId].prefab);
NetworkedObject netObject = go.GetComponent<NetworkedObject>();
if (netObject == null)
{
Debug.LogWarning("MLAPI: Please add a NetworkedObject component to the root of all spawnable objects");
netObject = go.AddComponent<NetworkedObject>();
}
netObject.NetworkedPrefabName = netManager.NetworkConfig.NetworkPrefabNames[networkedPrefabId];
netObject._isSpawned = true;
netObject._isPooledObject = false;
netObject.networkId = networkId;
netObject.ownerClientId = owner;
netObject.transform.position = position;
netObject.transform.rotation = rotation;
spawnedObjects.Add(netObject.NetworkId, netObject);
netObject.InvokeBehaviourNetworkSpawn();
return go;
}
internal static void SpawnPrefabIndexServer(NetworkedObject netObject, uint? clientOwnerId = null)
{
if (netObject.isSpawned)
{
Debug.LogWarning("MLAPI: Object already spawned");
return;
}
else if (!netManager.isServer)
{
Debug.LogWarning("MLAPI: Only server can spawn objects");
return;
}
else if (!netManager.NetworkConfig.NetworkPrefabIds.ContainsKey(netObject.NetworkedPrefabName))
{
Debug.LogWarning("MLAPI: The prefab name " + netObject.NetworkedPrefabName + " does not exist as a networkedPrefab");
return;
}
else if (!netManager.NetworkConfig.HandleObjectSpawning)
{
Debug.LogWarning("MLAPI: NetworkConfig is set to not handle object spawning");
return;
}
uint netId = GetNetworkObjectId();
netObject.networkId = netId;
spawnedObjects.Add(netId, netObject);
netObject._isSpawned = true;
netObject.sceneObject = false;
netObject.InvokeBehaviourNetworkSpawn();
if (clientOwnerId != null)
{
netObject.ownerClientId = clientOwnerId.Value;
NetworkingManager.singleton.connectedClients[clientOwnerId.Value].OwnedObjects.Add(netObject);
}
using (MemoryStream stream = new MemoryStream(37))
{
using (BinaryWriter writer = new BinaryWriter(stream))
{
writer.Write(false);
writer.Write(netObject.NetworkId);
writer.Write(netObject.OwnerClientId);
writer.Write(netManager.NetworkConfig.NetworkPrefabIds[netObject.NetworkedPrefabName]);
writer.Write(netObject.transform.position.x);
writer.Write(netObject.transform.position.y);
writer.Write(netObject.transform.position.z);
writer.Write(netObject.transform.rotation.eulerAngles.x);
writer.Write(netObject.transform.rotation.eulerAngles.y);
writer.Write(netObject.transform.rotation.eulerAngles.z);
}
netManager.Send("MLAPI_ADD_OBJECT", "MLAPI_INTERNAL", stream.GetBuffer());
}
}
internal static GameObject SpawnPlayerObject(uint clientId, uint networkId)
{
if (string.IsNullOrEmpty(netManager.NetworkConfig.PlayerPrefabName) || !netManager.NetworkConfig.NetworkPrefabIds.ContainsKey(netManager.NetworkConfig.PlayerPrefabName))
{
Debug.LogWarning("MLAPI: There is no player prefab in the NetworkConfig, or it's not registered at as a spawnable prefab");
return null;
}
GameObject go = MonoBehaviour.Instantiate(netManager.NetworkConfig.NetworkedPrefabs[netManager.NetworkConfig.NetworkPrefabIds[netManager.NetworkConfig.PlayerPrefabName]].prefab);
NetworkedObject netObject = go.GetComponent<NetworkedObject>();
if (netObject == null)
{
Debug.LogWarning("MLAPI: Please add a NetworkedObject component to the root of the player prefab");
netObject = go.AddComponent<NetworkedObject>();
}
if (NetworkingManager.singleton.isServer)
netObject.networkId = GetNetworkObjectId();
else
netObject.networkId = networkId;
netObject._isPooledObject = false;
netObject.ownerClientId = clientId;
netObject._isPlayerObject = true;
netObject._isSpawned = true;
netObject.sceneObject = false;
netManager.connectedClients[clientId].PlayerObject = go;
spawnedObjects.Add(netObject.NetworkId, netObject);
netObject.InvokeBehaviourNetworkSpawn();
return go;
}
internal static void OnDestroyObject(uint networkId, bool destroyGameObject)
{
if (!spawnedObjects.ContainsKey(networkId) || (netManager != null && !netManager.NetworkConfig.HandleObjectSpawning))
return;
if (!new NetId(spawnedObjects[networkId].OwnerClientId).IsInvalid() && !spawnedObjects[networkId].isPlayerObject)
{
//Someone owns it.
NetworkingManager.singleton.connectedClients[spawnedObjects[networkId].OwnerClientId].OwnedObjects.RemoveAll(x => x.NetworkId == networkId);
}
GameObject go = spawnedObjects[networkId].gameObject;
if (netManager != null && netManager.isServer)
{
releasedNetworkObjectIds.Push(networkId);
if (spawnedObjects[networkId] != null)
{
using (MemoryStream stream = new MemoryStream(4))
{
using (BinaryWriter writer = new BinaryWriter(stream))
{
writer.Write(networkId);
}
netManager.Send("MLAPI_DESTROY_OBJECT", "MLAPI_INTERNAL", stream.GetBuffer());
}
}
}
if (destroyGameObject && go != null)
MonoBehaviour.Destroy(go);
spawnedObjects.Remove(networkId);
}
}
}

View File

@ -0,0 +1,65 @@
using System;
using System.Security.Cryptography;
using System.IO;
namespace MLAPI.NetworkingManagerComponents.Cryptography
{
/// <summary>
/// Helper class for encryption purposes
/// </summary>
public static class CryptographyHelper
{
/// <summary>
/// Decrypts a message with AES with a given key and a salt that is encoded as the first 16 bytes of the buffer
/// </summary>
/// <param name="encryptedBuffer">The buffer with the salt</param>
/// <param name="key">The key to use</param>
/// <returns>The decrypted byte array</returns>
public static byte[] Decrypt(byte[] encryptedBuffer, byte[] key)
{
byte[] iv = new byte[16];
Array.Copy(encryptedBuffer, 0, iv, 0, 16);
using (MemoryStream stream = new MemoryStream())
{
using (RijndaelManaged aes = new RijndaelManaged())
{
aes.IV = iv;
aes.Key = key;
using (CryptoStream cs = new CryptoStream(stream, aes.CreateDecryptor(), CryptoStreamMode.Write))
{
cs.Write(encryptedBuffer, 16, encryptedBuffer.Length - 16);
}
return stream.ToArray();
}
}
}
/// <summary>
/// Encrypts a message with AES with a given key and a random salt that gets encoded as the first 16 bytes of the encrypted buffer
/// </summary>
/// <param name="clearBuffer">The buffer to be encrypted</param>
/// <param name="key">The key to use</param>
/// <returns>The encrypted byte array with encoded salt</returns>
public static byte[] Encrypt(byte[] clearBuffer, byte[] key)
{
using (MemoryStream stream = new MemoryStream())
{
using (RijndaelManaged aes = new RijndaelManaged())
{
aes.Key = key;
aes.GenerateIV();
using (CryptoStream cs = new CryptoStream(stream, aes.CreateEncryptor(), CryptoStreamMode.Write))
{
cs.Write(clearBuffer, 0, clearBuffer.Length);
}
byte[] encrypted = stream.ToArray();
byte[] final = new byte[encrypted.Length + 16];
Array.Copy(aes.IV, final, 16);
Array.Copy(encrypted, 0, final, 16, encrypted.Length);
return final;
}
}
}
}
}

View File

@ -3,9 +3,9 @@ using IntXLib;
using System.Text;
using System.Security.Cryptography;
namespace ECDH
namespace MLAPI.NetworkingManagerComponents.Cryptography
{
public class EllipticDiffieHellman
internal class EllipticDiffieHellman
{
protected static readonly RNGCryptoServiceProvider rand = new RNGCryptoServiceProvider();
public static readonly IntX DEFAULT_PRIME = (new IntX(1) << 255) - 19;
@ -79,18 +79,18 @@ namespace ECDH
}
}
public static class DHHelper
internal static class DHHelper
{
public static byte[] ToArray(this IntX v)
internal static byte[] ToArray(this IntX v)
{
v.GetInternalState(out uint[] digits, out bool negative);
byte[] b = DigitConverter.ToBytes(digits);
byte[] b1 = new byte[b.Length];
byte[] b1 = new byte[b.Length + 1];
Array.Copy(b, b1, b.Length);
b1[b.Length] = (byte)(negative ? 1 : 0);
return b1;
}
public static IntX FromArray(byte[] b)
internal static IntX FromArray(byte[] b)
{
if (b.Length == 0) return new IntX();
byte[] b1 = new byte[b.Length - 1];
@ -98,7 +98,7 @@ namespace ECDH
uint[] u = DigitConverter.FromBytes(b1);
return new IntX(u, b[b.Length - 1]==1);
}
public static bool BitAt(this uint[] data, long index) => (data[index/8]&(1<<(int)(index%8)))!=0;
public static IntX Abs(this IntX i) => i < 0 ? -i : i;
internal static bool BitAt(this uint[] data, long index) => (data[index / 32] & (1 << (int)(index % 32))) != 0;
internal static IntX Abs(this IntX i) => i < 0 ? -i : i;
}
}

View File

@ -2,9 +2,9 @@
using System.Collections.Generic;
using IntXLib;
namespace ECDH
namespace MLAPI.NetworkingManagerComponents.Cryptography
{
public class CurvePoint
internal class CurvePoint
{
public static readonly CurvePoint POINT_AT_INFINITY = new CurvePoint();
public IntX X { get; private set; }
@ -22,7 +22,7 @@ namespace ECDH
}
}
public class EllipticCurve
internal class EllipticCurve
{
public enum CurveType { Weierstrass, Montgomery }

View File

@ -1,53 +0,0 @@
using MLAPI.MonoBehaviours.Core;
using System;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.Networking;
namespace MLAPI.NetworkingManagerComponents
{
public static class LagCompensationManager
{
public static List<TrackedObject> SimulationObjects = new List<TrackedObject>();
public static void Simulate(float secondsAgo, Action action)
{
if(!NetworkingManager.singleton.isServer)
{
Debug.LogWarning("MLAPI: Lag compensation simulations are only to be ran on the server.");
return;
}
for (int i = 0; i < SimulationObjects.Count; i++)
{
SimulationObjects[i].ReverseTransform(secondsAgo);
}
action.Invoke();
for (int i = 0; i < SimulationObjects.Count; i++)
{
SimulationObjects[i].ResetStateTransform();
}
}
private static byte error = 0;
public static void Simulate(int clientId, Action action)
{
if (!NetworkingManager.singleton.isServer)
{
Debug.LogWarning("MLAPI: Lag compensation simulations are only to be ran on the server.");
return;
}
float milisecondsDelay = NetworkTransport.GetCurrentRTT(NetworkingManager.singleton.hostId, clientId, out error) / 2f;
Simulate(milisecondsDelay * 1000f, action);
}
internal static void AddFrames()
{
for (int i = 0; i < SimulationObjects.Count; i++)
{
SimulationObjects[i].AddFrame();
}
}
}
}

View File

@ -1,202 +0,0 @@
using System.Collections.Generic;
using System.IO;
using UnityEngine;
namespace MLAPI.NetworkingManagerComponents
{
internal static class SpawnManager
{
internal static Dictionary<uint, NetworkedObject> spawnedObjects;
internal static Stack<uint> releasedNetworkObjectIds;
private static uint networkObjectIdCounter;
internal static uint GetNetworkObjectId()
{
if (releasedNetworkObjectIds.Count > 0)
{
return releasedNetworkObjectIds.Pop();
}
else
{
networkObjectIdCounter++;
return networkObjectIdCounter;
}
}
private static NetworkingManager netManager
{
get
{
return NetworkingManager.singleton;
}
}
internal static void RemoveOwnership(uint netId)
{
NetworkedObject netObject = SpawnManager.spawnedObjects[netId];
NetworkingManager.singleton.connectedClients[netObject.OwnerClientId].OwnedObjects.RemoveAll(x => x.NetworkId == netId);
netObject.OwnerClientId = -2;
using (MemoryStream stream = new MemoryStream(8))
{
using (BinaryWriter writer = new BinaryWriter(stream))
{
writer.Write(netId);
writer.Write(-2);
}
netManager.Send("MLAPI_CHANGE_OWNER", "MLAPI_INTERNAL", stream.GetBuffer());
}
}
internal static void ChangeOwnership(uint netId, int clientId)
{
NetworkedObject netObject = SpawnManager.spawnedObjects[netId];
NetworkingManager.singleton.connectedClients[netObject.OwnerClientId].OwnedObjects.RemoveAll(x => x.NetworkId == netId);
NetworkingManager.singleton.connectedClients[clientId].OwnedObjects.Add(netObject);
netObject.OwnerClientId = clientId;
using (MemoryStream stream = new MemoryStream(8))
{
using (BinaryWriter writer = new BinaryWriter(stream))
{
writer.Write(netId);
writer.Write(clientId);
}
netManager.Send("MLAPI_CHANGE_OWNER", "MLAPI_INTERNAL", stream.GetBuffer());
}
}
internal static GameObject SpawnObject(int spawnablePrefabIndex, uint networkId, int ownerId)
{
GameObject go = MonoBehaviour.Instantiate(netManager.SpawnablePrefabs[spawnablePrefabIndex]);
NetworkedObject netObject = go.GetComponent<NetworkedObject>();
if (netObject == null)
{
Debug.LogWarning("MLAPI: Please add a NetworkedObject component to the root of all spawnable objects");
netObject = go.AddComponent<NetworkedObject>();
}
netObject.SpawnablePrefabIndex = spawnablePrefabIndex;
if (netManager.isServer)
{
netObject.NetworkId = GetNetworkObjectId();
}
else
{
netObject.NetworkId = networkId;
}
netObject.OwnerClientId = ownerId;
spawnedObjects.Add(netObject.NetworkId, netObject);
netObject.InvokeBehaviourNetworkSpawn();
return go;
}
internal static GameObject SpawnPlayerObject(int clientId, uint networkId)
{
GameObject go = MonoBehaviour.Instantiate(netManager.DefaultPlayerPrefab);
NetworkedObject netObject = go.GetComponent<NetworkedObject>();
if (netObject == null)
{
Debug.LogWarning("MLAPI: Please add a NetworkedObject component to the root of the player prefab");
netObject = go.AddComponent<NetworkedObject>();
}
netObject.OwnerClientId = clientId;
if (NetworkingManager.singleton.isServer)
{
netObject.NetworkId = GetNetworkObjectId();
}
else
{
netObject.NetworkId = networkId;
}
netObject.isPlayerObject = true;
netManager.connectedClients[clientId].PlayerObject = go;
spawnedObjects.Add(netObject.NetworkId, netObject);
netObject.InvokeBehaviourNetworkSpawn();
return go;
}
internal static void OnDestroyObject(uint networkId, bool destroyGameObject)
{
if (!spawnedObjects.ContainsKey(networkId) || (netManager != null && !netManager.NetworkConfig.HandleObjectSpawning))
return;
if (spawnedObjects[networkId].OwnerClientId > -2 && !spawnedObjects[networkId].isPlayerObject)
{
//Someone owns it.
NetworkingManager.singleton.connectedClients[spawnedObjects[networkId].OwnerClientId].OwnedObjects.RemoveAll(x => x.NetworkId == networkId);
}
GameObject go = spawnedObjects[networkId].gameObject;
if (netManager != null && netManager.isServer)
{
releasedNetworkObjectIds.Push(networkId);
if (spawnedObjects[networkId] != null && !spawnedObjects[networkId].ServerOnly)
{
using (MemoryStream stream = new MemoryStream(4))
{
using (BinaryWriter writer = new BinaryWriter(stream))
{
writer.Write(networkId);
}
//If we are host, send to everyone except ourselves. Otherwise, send to all
if (netManager != null && netManager.isHost)
netManager.Send("MLAPI_DESTROY_OBJECT", "MLAPI_INTERNAL", stream.GetBuffer(), -1);
else
netManager.Send("MLAPI_DESTROY_OBJECT", "MLAPI_INTERNAL", stream.GetBuffer());
}
}
}
if (destroyGameObject && go != null)
MonoBehaviour.Destroy(go);
spawnedObjects.Remove(networkId);
}
internal static void OnSpawnObject(NetworkedObject netObject, int? clientOwnerId = null)
{
if (netObject.isSpawned)
{
Debug.LogWarning("MLAPI: Object already spawned");
return;
}
else if (!netManager.isServer)
{
Debug.LogWarning("MLAPI: Only server can spawn objects");
return;
}
else if (netObject.SpawnablePrefabIndex == -1)
{
Debug.LogWarning("MLAPI: Invalid prefab index");
return;
}
else if (netObject.ServerOnly)
{
Debug.LogWarning("MLAPI: Server only objects does not have to be spawned");
return;
}
else if (netManager.NetworkConfig.HandleObjectSpawning)
{
Debug.LogWarning("MLAPI: NetworkingConfiguration is set to not handle object spawning");
return;
}
uint netId = GetNetworkObjectId();
spawnedObjects.Add(netId, netObject);
netObject.isSpawned = true;
if (clientOwnerId != null)
{
netObject.OwnerClientId = clientOwnerId.Value;
NetworkingManager.singleton.connectedClients[clientOwnerId.Value].OwnedObjects.Add(netObject);
}
using (MemoryStream stream = new MemoryStream(13))
{
using (BinaryWriter writer = new BinaryWriter(stream))
{
writer.Write(false);
writer.Write(netObject.NetworkId);
writer.Write(netObject.OwnerClientId);
writer.Write(netObject.SpawnablePrefabIndex);
}
//If we are host, send to everyone except ourselves. Otherwise, send to all
if (netManager.isHost)
netManager.Send("MLAPI_ADD_OBJECT", "MLAPI_INTERNAL", stream.GetBuffer(), -1);
else
netManager.Send("MLAPI_ADD_OBJECT", "MLAPI_INTERNAL", stream.GetBuffer());
}
}
}
}

View File

@ -1,16 +1,15 @@
using System.Reflection;
using System.Runtime.CompilerServices;
using System.Runtime.InteropServices;
// General Information about an assembly is controlled through the following
// set of attributes. Change these attribute values to modify the information
// associated with an assembly.
[assembly: AssemblyTitle("MLAPI")]
[assembly: AssemblyDescription("")]
[assembly: AssemblyDescription("Game networking stack")]
[assembly: AssemblyConfiguration("")]
[assembly: AssemblyCompany("")]
[assembly: AssemblyProduct("MLAPI")]
[assembly: AssemblyCopyright("Copyright © 2018")]
[assembly: AssemblyCopyright("Copyright © Albin Corén 2018")]
[assembly: AssemblyTrademark("")]
[assembly: AssemblyCulture("")]

View File

@ -1,11 +1,16 @@
![](https://i.imgur.com/d0amtqs.png)
MLAPI (Mid level API) is a framework that hopefully simplifies building networked games in Unity. It is built on the LLAPI and is similar to the HLAPI in many ways. It does not however integrate into the compiler and it's meant to offer much greater flexibility than the HLAPI while keeping some of it's simplicity. It offers greater performance over the HLAPI.
### Documentation
To get started, check the [Wiki](https://github.com/TwoTenPvP/MLAPI/wiki).
This is also where most documentation lies.
There is also a autogenerated Sandcastle [API reference](https://twotenpvp.github.io/MLAPI/docs/index.html).
### Requirements
* Unity 2017 or newer
## Features
## Feature highlights
* Host support (Client hosts the server)
* Object and player spawning \[[Wiki page](https://github.com/TwoTenPvP/MLAPI/wiki/Object-Spawning)\]
* Connection approval \[[Wiki page](https://github.com/TwoTenPvP/MLAPI/wiki/Connection-Approval)\]
@ -22,14 +27,15 @@ MLAPI (Mid level API) is a framework that hopefully simplifies building networke
* NetworkTransform replacement \[[Wiki page](https://github.com/TwoTenPvP/MLAPI/wiki/NetworkedTransform)\]
* Targeted messages \[[Wiki page](https://github.com/TwoTenPvP/MLAPI/wiki/Targeted-Messages)\]
* Port of NetworkedAnimator \[[Wiki page](https://github.com/TwoTenPvP/MLAPI/wiki/NetworkedAnimator)\]
* Networked NavMeshAgent \[[Wiki page](https://github.com/TwoTenPvP/MLAPI/wiki/NetworkedNavMeshAgent)\]
* Networked Object Pooling \[[Wiki page](https://github.com/TwoTenPvP/MLAPI/wiki/Networked-Object-Pooling)\]
* Synced Vars \[[Wiki page](https://github.com/TwoTenPvP/MLAPI/wiki/SyncedVars)\]
* Encryption \[[Wiki page](https://github.com/TwoTenPvP/MLAPI/wiki/Message-Encryption)\]
## Planned features
* Area of interest
* Encrypted messages / full encryption for all messages. Diffie Hellman key exchange with the option to sign the transaction using RSA.
* Serializer (both for the library to speed up and to allow structs to be sent easily)
* BinaryWriter & BinaryReader replacement
* Message compression
## Example
@ -40,6 +46,4 @@ The example project has a much lower priority compared to the library itself. If
## Issues and missing features
If there are any issues, bugs or features that are missing. Please open an issue on GitHub!
## Testing
The project is not extensivley tested. I am however very active on answering and fixing issues. If you are using the library and you find something doesn't work or throws an exception. Open an issue or submit a PR.
If there are any issues, bugs or features that are missing. Please open an issue on the GitHub [issues page](https://github.com/TwoTenPvP/MLAPI/issues)

1
_config.yml Normal file
View File

@ -0,0 +1 @@
theme: jekyll-theme-slate

233
docs/SearchHelp.aspx Normal file
View File

@ -0,0 +1,233 @@
<%@ Page Language="C#" EnableViewState="False" %>
<script runat="server">
//===============================================================================================================
// System : Sandcastle Help File Builder
// File : SearchHelp.aspx
// Author : Eric Woodruff (Eric@EWoodruff.us)
// Updated : 05/15/2014
// Note : Copyright 2007-2015, Eric Woodruff, All rights reserved
// Compiler: Microsoft C#
//
// This file contains the code used to search for keywords within the help topics using the full-text index
// files created by the help file builder.
//
// This code is published under the Microsoft Public License (Ms-PL). A copy of the license should be
// distributed with the code. It can also be found at the project website: https://GitHub.com/EWSoftware/SHFB. This
// notice, the author's name, and all copyright notices must remain intact in all applications, documentation,
// and source files.
//
// Date Who Comments
// ==============================================================================================================
// 06/24/2007 EFW Created the code
// 02/17/2012 EFW Switched to JSON serialization to support websites that use something other than ASP.NET
// such as PHP.
// 05/15/2014 EFW Updated for use with the lightweight website presentation styles
//===============================================================================================================
/// <summary>
/// This class is used to track the results and their rankings
/// </summary>
private class Ranking
{
public string Filename, PageTitle;
public int Rank;
public Ranking(string file, string title, int rank)
{
Filename = file;
PageTitle = title;
Rank = rank;
}
}
/// <summary>
/// Render the search results
/// </summary>
/// <param name="writer">The writer to which the results are written</param>
protected override void Render(HtmlTextWriter writer)
{
JavaScriptSerializer jss = new JavaScriptSerializer();
string searchText, ftiFile;
char letter;
bool sortByTitle = false;
jss.MaxJsonLength = Int32.MaxValue;
// The keywords for which to search should be passed in the query string
searchText = this.Request.QueryString["Keywords"];
if(String.IsNullOrEmpty(searchText))
{
writer.Write("<strong>Nothing found</strong>");
return;
}
// An optional SortByTitle option can also be specified
if(this.Request.QueryString["SortByTitle"] != null)
sortByTitle = Convert.ToBoolean(this.Request.QueryString["SortByTitle"]);
List<string> keywords = this.ParseKeywords(searchText);
List<char> letters = new List<char>();
List<string> fileList;
Dictionary<string, List<long>> ftiWords, wordDictionary = new Dictionary<string,List<long>>();
// Load the file index
using(StreamReader sr = new StreamReader(Server.MapPath("fti/FTI_Files.json")))
{
fileList = jss.Deserialize<List<string>>(sr.ReadToEnd());
}
// Load the required word index files
foreach(string word in keywords)
{
letter = word[0];
if(!letters.Contains(letter))
{
letters.Add(letter);
ftiFile = Server.MapPath(String.Format(CultureInfo.InvariantCulture, "fti/FTI_{0}.json", (int)letter));
if(File.Exists(ftiFile))
{
using(StreamReader sr = new StreamReader(ftiFile))
{
ftiWords = jss.Deserialize<Dictionary<string, List<long>>>(sr.ReadToEnd());
}
foreach(string ftiWord in ftiWords.Keys)
wordDictionary.Add(ftiWord, ftiWords[ftiWord]);
}
}
}
// Perform the search and return the results as a block of HTML
writer.Write(this.Search(keywords, fileList, wordDictionary, sortByTitle));
}
/// <summary>
/// Split the search text up into keywords
/// </summary>
/// <param name="keywords">The keywords to parse</param>
/// <returns>A list containing the words for which to search</returns>
private List<string> ParseKeywords(string keywords)
{
List<string> keywordList = new List<string>();
string checkWord;
string[] words = Regex.Split(keywords, @"\W+");
foreach(string word in words)
{
checkWord = word.ToLower(CultureInfo.InvariantCulture);
if(checkWord.Length > 2 && !Char.IsDigit(checkWord[0]) && !keywordList.Contains(checkWord))
keywordList.Add(checkWord);
}
return keywordList;
}
/// <summary>
/// Search for the specified keywords and return the results as a block of HTML
/// </summary>
/// <param name="keywords">The keywords for which to search</param>
/// <param name="fileInfo">The file list</param>
/// <param name="wordDictionary">The dictionary used to find the words</param>
/// <param name="sortByTitle">True to sort by title, false to sort by ranking</param>
/// <returns>A block of HTML representing the search results</returns>
private string Search(List<string> keywords, List<string> fileInfo,
Dictionary<string, List<long>> wordDictionary, bool sortByTitle)
{
StringBuilder sb = new StringBuilder(10240);
Dictionary<string, List<long>> matches = new Dictionary<string, List<long>>();
List<long> occurrences;
List<int> matchingFileIndices = new List<int>(), occurrenceIndices = new List<int>();
List<Ranking> rankings = new List<Ranking>();
string filename, title;
string[] fileIndex;
bool isFirst = true;
int idx, wordCount, matchCount;
foreach(string word in keywords)
{
if(!wordDictionary.TryGetValue(word, out occurrences))
return "<strong>Nothing found</strong>";
matches.Add(word, occurrences);
occurrenceIndices.Clear();
// Get a list of the file indices for this match
foreach(long entry in occurrences)
occurrenceIndices.Add((int)(entry >> 16));
if(isFirst)
{
isFirst = false;
matchingFileIndices.AddRange(occurrenceIndices);
}
else
{
// After the first match, remove files that do not appear for
// all found keywords.
for(idx = 0; idx < matchingFileIndices.Count; idx++)
if(!occurrenceIndices.Contains(matchingFileIndices[idx]))
{
matchingFileIndices.RemoveAt(idx);
idx--;
}
}
}
if(matchingFileIndices.Count == 0)
return "<strong>Nothing found</strong>";
// Rank the files based on the number of times the words occurs
foreach(int index in matchingFileIndices)
{
// Split out the title, filename, and word count
fileIndex = fileInfo[index].Split('\x0');
title = fileIndex[0];
filename = fileIndex[1];
wordCount = Convert.ToInt32(fileIndex[2]);
matchCount = 0;
foreach(string word in keywords)
{
occurrences = matches[word];
foreach(long entry in occurrences)
if((int)(entry >> 16) == index)
matchCount += (int)(entry & 0xFFFF);
}
rankings.Add(new Ranking(filename, title, matchCount * 1000 / wordCount));
if(rankings.Count > 99)
break;
}
// Sort by rank in descending order or by page title in ascending order
rankings.Sort(delegate (Ranking x, Ranking y)
{
if(!sortByTitle)
return y.Rank - x.Rank;
return x.PageTitle.CompareTo(y.PageTitle);
});
// Format the file list and return the results
sb.Append("<ol>");
foreach(Ranking r in rankings)
sb.AppendFormat("<li><a href=\"{0}\" target=\"_blank\">{1}</a></li>", r.Filename, r.PageTitle);
sb.Append("</ol>");
if(rankings.Count < matchingFileIndices.Count)
sb.AppendFormat("<p>Omitted {0} more results</p>", matchingFileIndices.Count - rankings.Count);
return sb.ToString();
}
</script>

173
docs/SearchHelp.inc.php Normal file
View File

@ -0,0 +1,173 @@
<?
// Contributed to the Sandcastle Help File Builder project by Thomas Levesque
class Ranking
{
public $filename;
public $pageTitle;
public $rank;
function __construct($file, $title, $rank)
{
$this->filename = $file;
$this->pageTitle = $title;
$this->rank = $rank;
}
}
/// <summary>
/// Split the search text up into keywords
/// </summary>
/// <param name="keywords">The keywords to parse</param>
/// <returns>A list containing the words for which to search</returns>
function ParseKeywords($keywords)
{
$keywordList = array();
$words = preg_split("/[^\w]+/", $keywords);
foreach($words as $word)
{
$checkWord = strtolower($word);
$first = substr($checkWord, 0, 1);
if(strlen($checkWord) > 2 && !ctype_digit($first) && !in_array($checkWord, $keywordList))
{
array_push($keywordList, $checkWord);
}
}
return $keywordList;
}
/// <summary>
/// Search for the specified keywords and return the results as a block of
/// HTML.
/// </summary>
/// <param name="keywords">The keywords for which to search</param>
/// <param name="fileInfo">The file list</param>
/// <param name="wordDictionary">The dictionary used to find the words</param>
/// <param name="sortByTitle">True to sort by title, false to sort by
/// ranking</param>
/// <returns>A block of HTML representing the search results.</returns>
function Search($keywords, $fileInfo, $wordDictionary, $sortByTitle)
{
$sb = "<ol>";
$matches = array();
$matchingFileIndices = array();
$rankings = array();
$isFirst = true;
foreach($keywords as $word)
{
if (!array_key_exists($word, $wordDictionary))
{
return "<strong>Nothing found</strong>";
}
$occurrences = $wordDictionary[$word];
$matches[$word] = $occurrences;
$occurrenceIndices = array();
// Get a list of the file indices for this match
foreach($occurrences as $entry)
array_push($occurrenceIndices, ($entry >> 16));
if($isFirst)
{
$isFirst = false;
foreach($occurrenceIndices as $i)
{
array_push($matchingFileIndices, $i);
}
}
else
{
// After the first match, remove files that do not appear for
// all found keywords.
for($idx = 0; $idx < count($matchingFileIndices); $idx++)
{
if (!in_array($matchingFileIndices[$idx], $occurrenceIndices))
{
array_splice($matchingFileIndices, $idx, 1);
$idx--;
}
}
}
}
if(count($matchingFileIndices) == 0)
{
return "<strong>Nothing found</strong>";
}
// Rank the files based on the number of times the words occurs
foreach($matchingFileIndices as $index)
{
// Split out the title, filename, and word count
$fileIndex = explode("\x00", $fileInfo[$index]);
$title = $fileIndex[0];
$filename = $fileIndex[1];
$wordCount = intval($fileIndex[2]);
$matchCount = 0;
foreach($keywords as $words)
{
$occurrences = $matches[$word];
foreach($occurrences as $entry)
{
if(($entry >> 16) == $index)
$matchCount += $entry & 0xFFFF;
}
}
$r = new Ranking($filename, $title, $matchCount * 1000 / $wordCount);
array_push($rankings, $r);
if(count($rankings) > 99)
break;
}
// Sort by rank in descending order or by page title in ascending order
if($sortByTitle)
{
usort($rankings, "cmprankbytitle");
}
else
{
usort($rankings, "cmprank");
}
// Format the file list and return the results
foreach($rankings as $r)
{
$f = $r->filename;
$t = $r->pageTitle;
$sb .= "<li><a href=\"$f\" target=\"_blank\">$t</a></li>";
}
$sb .= "</ol";
if(count($rankings) < count($matchingFileIndices))
{
$c = count(matchingFileIndices) - count(rankings);
$sb .= "<p>Omitted $c more results</p>";
}
return $sb;
}
function cmprank($x, $y)
{
return $y->rank - $x->rank;
}
function cmprankbytitle($x, $y)
{
return strcmp($x->pageTitle, $y->pageTitle);
}
?>

58
docs/SearchHelp.php Normal file
View File

@ -0,0 +1,58 @@
<?
// Contributed to the Sandcastle Help File Builder project by Thomas Levesque
include("SearchHelp.inc.php");
$sortByTitle = false;
// The keywords for which to search should be passed in the query string
$searchText = $_GET["Keywords"];
if(empty($searchText))
{
?>
<strong>Nothing found</strong>
<?
return;
}
// An optional SortByTitle option can also be specified
if($_GET["SortByTitle"] == "true")
$sortByTitle = true;
$keywords = ParseKeywords($searchText);
$letters = array();
$wordDictionary = array();
// Load the file index
$json = file_get_contents("fti/FTI_Files.json");
$fileList = json_decode($json);
// Load the required word index files
foreach($keywords as $word)
{
$letter = substr($word, 0, 1);
if(!in_array($letter, $letters))
{
array_push($letters, $letter);
$ascii = ord($letter);
$ftiFile = "fti/FTI_$ascii.json";
if(file_exists($ftiFile))
{
$json = file_get_contents($ftiFile);
$ftiWords = json_decode($json, true);
foreach($ftiWords as $ftiWord => $val)
{
$wordDictionary[$ftiWord] = $val;
}
}
}
}
// Perform the search and return the results as a block of HTML
$results = Search($keywords, $fileList, $wordDictionary, $sortByTitle);
echo $results;
?>

34
docs/Web.Config Normal file
View File

@ -0,0 +1,34 @@
<?xml version="1.0"?>
<configuration xmlns="http://schemas.microsoft.com/.NetConfiguration/v2.0">
<system.web>
<customErrors mode="On" defaultRedirect="~/html/GeneralError.htm">
<error statusCode="404" redirect="~/html/PageNotFound.htm" />
</customErrors>
<compilation debug="false">
<assemblies>
<add assembly="System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" />
</assemblies>
</compilation>
<pages>
<namespaces>
<add namespace="System"/>
<add namespace="System.Collections.Generic"/>
<add namespace="System.Globalization"/>
<add namespace="System.IO"/>
<add namespace="System.Text"/>
<add namespace="System.Text.RegularExpressions"/>
<add namespace="System.Web"/>
<add namespace="System.Web.Script.Serialization"/>
<add namespace="System.Web.UI"/>
<add namespace="System.Xml"/>
<add namespace="System.Xml.Serialization" />
<add namespace="System.Xml.XPath"/>
</namespaces>
</pages>
</system.web>
<appSettings>
<!-- Increase this value if you get an "Operation is not valid due to the current state of the object" error
when using the search page. -->
<add key="aspnet:MaxJsonDeserializerMembers" value="100000" />
</appSettings>
</configuration>

440
docs/WebKI.xml Normal file
View File

@ -0,0 +1,440 @@
<?xml version="1.0" encoding="utf-8"?>
<HelpKI>
<HelpKINode Title="Address field" Url="html/F_MLAPI_Data_NetworkingConfiguration_Address.htm" />
<HelpKINode Title="AesKey field" Url="html/F_MLAPI_Data_NetworkedClient_AesKey.htm" />
<HelpKINode Title="AllowPassthroughMessages field" Url="html/F_MLAPI_Data_NetworkingConfiguration_AllowPassthroughMessages.htm" />
<HelpKINode Title="animator property" Url="html/P_MLAPI_MonoBehaviours_Prototyping_NetworkedAnimator_animator.htm" />
<HelpKINode Title="AssumeSyncedSends field" Url="html/F_MLAPI_MonoBehaviours_Prototyping_NetworkedTransform_AssumeSyncedSends.htm" />
<HelpKINode Title="BinaryIgnore class">
<HelpKINode Title="BinaryIgnore Class" Url="html/T_MLAPI_Attributes_BinaryIgnore.htm" />
<HelpKINode Title="constructor" Url="html/M_MLAPI_Attributes_BinaryIgnore__ctor.htm" />
<HelpKINode Title="methods" Url="html/Methods_T_MLAPI_Attributes_BinaryIgnore.htm" />
<HelpKINode Title="properties" Url="html/Properties_T_MLAPI_Attributes_BinaryIgnore.htm" />
</HelpKINode>
<HelpKINode Title="BinaryIgnore.BinaryIgnore constructor" Url="html/M_MLAPI_Attributes_BinaryIgnore__ctor.htm" />
<HelpKINode Title="BinarySerializer class">
<HelpKINode Title="BinarySerializer Class" Url="html/T_MLAPI_NetworkingManagerComponents_Binary_BinarySerializer.htm" />
<HelpKINode Title="methods" Url="html/Methods_T_MLAPI_NetworkingManagerComponents_Binary_BinarySerializer.htm" />
</HelpKINode>
<HelpKINode Title="BinarySerializer.ClearCache method" Url="html/M_MLAPI_NetworkingManagerComponents_Binary_BinarySerializer_ClearCache.htm" />
<HelpKINode Title="BinarySerializer.Deserialize(Of T) method" Url="html/M_MLAPI_NetworkingManagerComponents_Binary_BinarySerializer_Deserialize__1.htm" />
<HelpKINode Title="BinarySerializer.Deserialize&lt;T&gt; method" Url="html/M_MLAPI_NetworkingManagerComponents_Binary_BinarySerializer_Deserialize__1.htm" />
<HelpKINode Title="BinarySerializer.Serialize(Of T) method" Url="html/M_MLAPI_NetworkingManagerComponents_Binary_BinarySerializer_Serialize__1.htm" />
<HelpKINode Title="BinarySerializer.Serialize&lt;T&gt; method" Url="html/M_MLAPI_NetworkingManagerComponents_Binary_BinarySerializer_Serialize__1.htm" />
<HelpKINode Title="ChangeOwnership method" Url="html/M_MLAPI_MonoBehaviours_Core_NetworkedObject_ChangeOwnership.htm" />
<HelpKINode Title="Channels field" Url="html/F_MLAPI_Data_NetworkingConfiguration_Channels.htm" />
<HelpKINode Title="ClearCache method" Url="html/M_MLAPI_NetworkingManagerComponents_Binary_BinarySerializer_ClearCache.htm" />
<HelpKINode Title="ClientConnectionBufferTimeout field" Url="html/F_MLAPI_Data_NetworkingConfiguration_ClientConnectionBufferTimeout.htm" />
<HelpKINode Title="ClientId field" Url="html/F_MLAPI_Data_NetworkedClient_ClientId.htm" />
<HelpKINode Title="CompareConfig method" Url="html/M_MLAPI_Data_NetworkingConfiguration_CompareConfig.htm" />
<HelpKINode Title="ConnectedClients property" Url="html/P_MLAPI_MonoBehaviours_Core_NetworkingManager_ConnectedClients.htm" />
<HelpKINode Title="ConnectionApproval field" Url="html/F_MLAPI_Data_NetworkingConfiguration_ConnectionApproval.htm" />
<HelpKINode Title="ConnectionApprovalCallback field" Url="html/F_MLAPI_Data_NetworkingConfiguration_ConnectionApprovalCallback.htm" />
<HelpKINode Title="ConnectionData field" Url="html/F_MLAPI_Data_NetworkingConfiguration_ConnectionData.htm" />
<HelpKINode Title="CorrectionDelay field" Url="html/F_MLAPI_MonoBehaviours_Prototyping_NetworkedNavMeshAgent_CorrectionDelay.htm" />
<HelpKINode Title="CreatePool method" Url="html/M_MLAPI_NetworkingManagerComponents_Core_NetworkPoolManager_CreatePool.htm" />
<HelpKINode Title="CryptographyHelper class">
<HelpKINode Title="CryptographyHelper Class" Url="html/T_MLAPI_NetworkingManagerComponents_Cryptography_CryptographyHelper.htm" />
<HelpKINode Title="methods" Url="html/Methods_T_MLAPI_NetworkingManagerComponents_Cryptography_CryptographyHelper.htm" />
</HelpKINode>
<HelpKINode Title="CryptographyHelper.Decrypt method" Url="html/M_MLAPI_NetworkingManagerComponents_Cryptography_CryptographyHelper_Decrypt.htm" />
<HelpKINode Title="CryptographyHelper.Encrypt method" Url="html/M_MLAPI_NetworkingManagerComponents_Cryptography_CryptographyHelper_Encrypt.htm" />
<HelpKINode Title="Decrypt method" Url="html/M_MLAPI_NetworkingManagerComponents_Cryptography_CryptographyHelper_Decrypt.htm" />
<HelpKINode Title="DefaultPlayerPrefab field" Url="html/F_MLAPI_MonoBehaviours_Core_NetworkingManager_DefaultPlayerPrefab.htm" />
<HelpKINode Title="DeregisterMessageHandler method" Url="html/M_MLAPI_MonoBehaviours_Core_NetworkedBehaviour_DeregisterMessageHandler.htm" />
<HelpKINode Title="Deserialize(Of T) method" Url="html/M_MLAPI_NetworkingManagerComponents_Binary_BinarySerializer_Deserialize__1.htm" />
<HelpKINode Title="Deserialize&lt;T&gt; method" Url="html/M_MLAPI_NetworkingManagerComponents_Binary_BinarySerializer_Deserialize__1.htm" />
<HelpKINode Title="DestroyPool method" Url="html/M_MLAPI_NetworkingManagerComponents_Core_NetworkPoolManager_DestroyPool.htm" />
<HelpKINode Title="DestroyPoolObject method" Url="html/M_MLAPI_NetworkingManagerComponents_Core_NetworkPoolManager_DestroyPoolObject.htm" />
<HelpKINode Title="DontDestroy field" Url="html/F_MLAPI_MonoBehaviours_Core_NetworkingManager_DontDestroy.htm" />
<HelpKINode Title="DriftCorrectionPercentage field" Url="html/F_MLAPI_MonoBehaviours_Prototyping_NetworkedNavMeshAgent_DriftCorrectionPercentage.htm" />
<HelpKINode Title="EnableEncryption field" Url="html/F_MLAPI_Data_NetworkingConfiguration_EnableEncryption.htm" />
<HelpKINode Title="EnableProximity field">
<HelpKINode Title="NetworkedAnimator.EnableProximity Field" Url="html/F_MLAPI_MonoBehaviours_Prototyping_NetworkedAnimator_EnableProximity.htm" />
<HelpKINode Title="NetworkedNavMeshAgent.EnableProximity Field" Url="html/F_MLAPI_MonoBehaviours_Prototyping_NetworkedNavMeshAgent_EnableProximity.htm" />
<HelpKINode Title="NetworkedTransform.EnableProximity Field" Url="html/F_MLAPI_MonoBehaviours_Prototyping_NetworkedTransform_EnableProximity.htm" />
</HelpKINode>
<HelpKINode Title="EnableSceneSwitching field" Url="html/F_MLAPI_Data_NetworkingConfiguration_EnableSceneSwitching.htm" />
<HelpKINode Title="Encrypt method" Url="html/M_MLAPI_NetworkingManagerComponents_Cryptography_CryptographyHelper_Encrypt.htm" />
<HelpKINode Title="EncryptedChannels field" Url="html/F_MLAPI_Data_NetworkingConfiguration_EncryptedChannels.htm" />
<HelpKINode Title="EventTickrate field" Url="html/F_MLAPI_Data_NetworkingConfiguration_EventTickrate.htm" />
<HelpKINode Title="GetChunkedMessage method" Url="html/M_MLAPI_NetworkingManagerComponents_Binary_MessageChunker_GetChunkedMessage.htm" />
<HelpKINode Title="GetConfig method" Url="html/M_MLAPI_Data_NetworkingConfiguration_GetConfig.htm" />
<HelpKINode Title="GetMessageOrdered method" Url="html/M_MLAPI_NetworkingManagerComponents_Binary_MessageChunker_GetMessageOrdered.htm" />
<HelpKINode Title="GetMessageUnordered method" Url="html/M_MLAPI_NetworkingManagerComponents_Binary_MessageChunker_GetMessageUnordered.htm" />
<HelpKINode Title="GetNetworkedObject method" Url="html/M_MLAPI_MonoBehaviours_Core_NetworkedBehaviour_GetNetworkedObject.htm" />
<HelpKINode Title="GetParameterAutoSend method" Url="html/M_MLAPI_MonoBehaviours_Prototyping_NetworkedAnimator_GetParameterAutoSend.htm" />
<HelpKINode Title="HandleObjectSpawning field" Url="html/F_MLAPI_Data_NetworkingConfiguration_HandleObjectSpawning.htm" />
<HelpKINode Title="HasDuplicates method" Url="html/M_MLAPI_NetworkingManagerComponents_Binary_MessageChunker_HasDuplicates.htm" />
<HelpKINode Title="HasMissingParts method" Url="html/M_MLAPI_NetworkingManagerComponents_Binary_MessageChunker_HasMissingParts.htm" />
<HelpKINode Title="hook field" Url="html/F_MLAPI_Attributes_SyncedVar_hook.htm" />
<HelpKINode Title="InterpolatePosition field" Url="html/F_MLAPI_MonoBehaviours_Prototyping_NetworkedTransform_InterpolatePosition.htm" />
<HelpKINode Title="InterpolateServer field" Url="html/F_MLAPI_MonoBehaviours_Prototyping_NetworkedTransform_InterpolateServer.htm" />
<HelpKINode Title="isClient property">
<HelpKINode Title="NetworkedBehaviour.isClient Property " Url="html/P_MLAPI_MonoBehaviours_Core_NetworkedBehaviour_isClient.htm" />
<HelpKINode Title="NetworkingManager.isClient Property " Url="html/P_MLAPI_MonoBehaviours_Core_NetworkingManager_isClient.htm" />
</HelpKINode>
<HelpKINode Title="IsClientConnected property" Url="html/P_MLAPI_MonoBehaviours_Core_NetworkingManager_IsClientConnected.htm" />
<HelpKINode Title="isHost property">
<HelpKINode Title="NetworkedBehaviour.isHost Property " Url="html/P_MLAPI_MonoBehaviours_Core_NetworkedBehaviour_isHost.htm" />
<HelpKINode Title="NetworkingManager.isHost Property " Url="html/P_MLAPI_MonoBehaviours_Core_NetworkingManager_isHost.htm" />
</HelpKINode>
<HelpKINode Title="isLocalPlayer property">
<HelpKINode Title="NetworkedBehaviour.isLocalPlayer Property " Url="html/P_MLAPI_MonoBehaviours_Core_NetworkedBehaviour_isLocalPlayer.htm" />
<HelpKINode Title="NetworkedObject.isLocalPlayer Property " Url="html/P_MLAPI_MonoBehaviours_Core_NetworkedObject_isLocalPlayer.htm" />
</HelpKINode>
<HelpKINode Title="IsOrdered method" Url="html/M_MLAPI_NetworkingManagerComponents_Binary_MessageChunker_IsOrdered.htm" />
<HelpKINode Title="isOwner property">
<HelpKINode Title="NetworkedBehaviour.isOwner Property " Url="html/P_MLAPI_MonoBehaviours_Core_NetworkedBehaviour_isOwner.htm" />
<HelpKINode Title="NetworkedObject.isOwner Property " Url="html/P_MLAPI_MonoBehaviours_Core_NetworkedObject_isOwner.htm" />
</HelpKINode>
<HelpKINode Title="isPlayerObject property" Url="html/P_MLAPI_MonoBehaviours_Core_NetworkedObject_isPlayerObject.htm" />
<HelpKINode Title="isPooledObject property" Url="html/P_MLAPI_MonoBehaviours_Core_NetworkedObject_isPooledObject.htm" />
<HelpKINode Title="isServer property">
<HelpKINode Title="NetworkedBehaviour.isServer Property " Url="html/P_MLAPI_MonoBehaviours_Core_NetworkedBehaviour_isServer.htm" />
<HelpKINode Title="NetworkingManager.isServer Property " Url="html/P_MLAPI_MonoBehaviours_Core_NetworkingManager_isServer.htm" />
</HelpKINode>
<HelpKINode Title="isSpawned property" Url="html/P_MLAPI_MonoBehaviours_Core_NetworkedObject_isSpawned.htm" />
<HelpKINode Title="LagCompensationManager class">
<HelpKINode Title="LagCompensationManager Class" Url="html/T_MLAPI_NetworkingManagerComponents_Core_LagCompensationManager.htm" />
<HelpKINode Title="methods" Url="html/Methods_T_MLAPI_NetworkingManagerComponents_Core_LagCompensationManager.htm" />
<HelpKINode Title="properties" Url="html/Properties_T_MLAPI_NetworkingManagerComponents_Core_LagCompensationManager.htm" />
</HelpKINode>
<HelpKINode Title="LagCompensationManager.Simulate method" Url="html/Overload_MLAPI_NetworkingManagerComponents_Core_LagCompensationManager_Simulate.htm" />
<HelpKINode Title="LagCompensationManager.SimulationObjects property" Url="html/P_MLAPI_NetworkingManagerComponents_Core_LagCompensationManager_SimulationObjects.htm" />
<HelpKINode Title="MaxConnections field" Url="html/F_MLAPI_Data_NetworkingConfiguration_MaxConnections.htm" />
<HelpKINode Title="MaxReceiveEventsPerTickRate field" Url="html/F_MLAPI_Data_NetworkingConfiguration_MaxReceiveEventsPerTickRate.htm" />
<HelpKINode Title="MessageBufferSize field" Url="html/F_MLAPI_Data_NetworkingConfiguration_MessageBufferSize.htm" />
<HelpKINode Title="MessageChunker class">
<HelpKINode Title="MessageChunker Class" Url="html/T_MLAPI_NetworkingManagerComponents_Binary_MessageChunker.htm" />
<HelpKINode Title="methods" Url="html/Methods_T_MLAPI_NetworkingManagerComponents_Binary_MessageChunker.htm" />
</HelpKINode>
<HelpKINode Title="MessageChunker.GetChunkedMessage method" Url="html/M_MLAPI_NetworkingManagerComponents_Binary_MessageChunker_GetChunkedMessage.htm" />
<HelpKINode Title="MessageChunker.GetMessageOrdered method" Url="html/M_MLAPI_NetworkingManagerComponents_Binary_MessageChunker_GetMessageOrdered.htm" />
<HelpKINode Title="MessageChunker.GetMessageUnordered method" Url="html/M_MLAPI_NetworkingManagerComponents_Binary_MessageChunker_GetMessageUnordered.htm" />
<HelpKINode Title="MessageChunker.HasDuplicates method" Url="html/M_MLAPI_NetworkingManagerComponents_Binary_MessageChunker_HasDuplicates.htm" />
<HelpKINode Title="MessageChunker.HasMissingParts method" Url="html/M_MLAPI_NetworkingManagerComponents_Binary_MessageChunker_HasMissingParts.htm" />
<HelpKINode Title="MessageChunker.IsOrdered method" Url="html/M_MLAPI_NetworkingManagerComponents_Binary_MessageChunker_IsOrdered.htm" />
<HelpKINode Title="MessageTypes field" Url="html/F_MLAPI_Data_NetworkingConfiguration_MessageTypes.htm" />
<HelpKINode Title="MinDegrees field" Url="html/F_MLAPI_MonoBehaviours_Prototyping_NetworkedTransform_MinDegrees.htm" />
<HelpKINode Title="MinMeters field" Url="html/F_MLAPI_MonoBehaviours_Prototyping_NetworkedTransform_MinMeters.htm" />
<HelpKINode Title="MLAPI.Attributes namespace" Url="html/N_MLAPI_Attributes.htm" />
<HelpKINode Title="MLAPI.Attributes.BinaryIgnore class" Url="html/T_MLAPI_Attributes_BinaryIgnore.htm" />
<HelpKINode Title="MLAPI.Attributes.SyncedVar class" Url="html/T_MLAPI_Attributes_SyncedVar.htm" />
<HelpKINode Title="MLAPI.Data namespace" Url="html/N_MLAPI_Data.htm" />
<HelpKINode Title="MLAPI.Data.NetworkedClient class" Url="html/T_MLAPI_Data_NetworkedClient.htm" />
<HelpKINode Title="MLAPI.Data.NetworkingConfiguration class" Url="html/T_MLAPI_Data_NetworkingConfiguration.htm" />
<HelpKINode Title="MLAPI.MonoBehaviours.Core namespace" Url="html/N_MLAPI_MonoBehaviours_Core.htm" />
<HelpKINode Title="MLAPI.MonoBehaviours.Core.NetworkedBehaviour class" Url="html/T_MLAPI_MonoBehaviours_Core_NetworkedBehaviour.htm" />
<HelpKINode Title="MLAPI.MonoBehaviours.Core.NetworkedObject class" Url="html/T_MLAPI_MonoBehaviours_Core_NetworkedObject.htm" />
<HelpKINode Title="MLAPI.MonoBehaviours.Core.NetworkingManager class" Url="html/T_MLAPI_MonoBehaviours_Core_NetworkingManager.htm" />
<HelpKINode Title="MLAPI.MonoBehaviours.Core.TrackedObject class" Url="html/T_MLAPI_MonoBehaviours_Core_TrackedObject.htm" />
<HelpKINode Title="MLAPI.MonoBehaviours.Prototyping namespace" Url="html/N_MLAPI_MonoBehaviours_Prototyping.htm" />
<HelpKINode Title="MLAPI.MonoBehaviours.Prototyping.NetworkedAnimator class" Url="html/T_MLAPI_MonoBehaviours_Prototyping_NetworkedAnimator.htm" />
<HelpKINode Title="MLAPI.MonoBehaviours.Prototyping.NetworkedNavMeshAgent class" Url="html/T_MLAPI_MonoBehaviours_Prototyping_NetworkedNavMeshAgent.htm" />
<HelpKINode Title="MLAPI.MonoBehaviours.Prototyping.NetworkedTransform class" Url="html/T_MLAPI_MonoBehaviours_Prototyping_NetworkedTransform.htm" />
<HelpKINode Title="MLAPI.NetworkingManagerComponents.Binary namespace" Url="html/N_MLAPI_NetworkingManagerComponents_Binary.htm" />
<HelpKINode Title="MLAPI.NetworkingManagerComponents.Binary.BinarySerializer class" Url="html/T_MLAPI_NetworkingManagerComponents_Binary_BinarySerializer.htm" />
<HelpKINode Title="MLAPI.NetworkingManagerComponents.Binary.MessageChunker class" Url="html/T_MLAPI_NetworkingManagerComponents_Binary_MessageChunker.htm" />
<HelpKINode Title="MLAPI.NetworkingManagerComponents.Core namespace" Url="html/N_MLAPI_NetworkingManagerComponents_Core.htm" />
<HelpKINode Title="MLAPI.NetworkingManagerComponents.Core.LagCompensationManager class" Url="html/T_MLAPI_NetworkingManagerComponents_Core_LagCompensationManager.htm" />
<HelpKINode Title="MLAPI.NetworkingManagerComponents.Core.NetworkPoolManager class" Url="html/T_MLAPI_NetworkingManagerComponents_Core_NetworkPoolManager.htm" />
<HelpKINode Title="MLAPI.NetworkingManagerComponents.Core.NetworkSceneManager class" Url="html/T_MLAPI_NetworkingManagerComponents_Core_NetworkSceneManager.htm" />
<HelpKINode Title="MLAPI.NetworkingManagerComponents.Cryptography namespace" Url="html/N_MLAPI_NetworkingManagerComponents_Cryptography.htm" />
<HelpKINode Title="MLAPI.NetworkingManagerComponents.Cryptography.CryptographyHelper class" Url="html/T_MLAPI_NetworkingManagerComponents_Cryptography_CryptographyHelper.htm" />
<HelpKINode Title="MyClientId property" Url="html/P_MLAPI_MonoBehaviours_Core_NetworkingManager_MyClientId.htm" />
<HelpKINode Title="NetworkConfig field" Url="html/F_MLAPI_MonoBehaviours_Core_NetworkingManager_NetworkConfig.htm" />
<HelpKINode Title="NetworkedAnimator class">
<HelpKINode Title="NetworkedAnimator Class" Url="html/T_MLAPI_MonoBehaviours_Prototyping_NetworkedAnimator.htm" />
<HelpKINode Title="constructor" Url="html/M_MLAPI_MonoBehaviours_Prototyping_NetworkedAnimator__ctor.htm" />
<HelpKINode Title="fields" Url="html/Fields_T_MLAPI_MonoBehaviours_Prototyping_NetworkedAnimator.htm" />
<HelpKINode Title="methods" Url="html/Methods_T_MLAPI_MonoBehaviours_Prototyping_NetworkedAnimator.htm" />
<HelpKINode Title="properties" Url="html/Properties_T_MLAPI_MonoBehaviours_Prototyping_NetworkedAnimator.htm" />
</HelpKINode>
<HelpKINode Title="NetworkedAnimator.animator property" Url="html/P_MLAPI_MonoBehaviours_Prototyping_NetworkedAnimator_animator.htm" />
<HelpKINode Title="NetworkedAnimator.EnableProximity field" Url="html/F_MLAPI_MonoBehaviours_Prototyping_NetworkedAnimator_EnableProximity.htm" />
<HelpKINode Title="NetworkedAnimator.GetParameterAutoSend method" Url="html/M_MLAPI_MonoBehaviours_Prototyping_NetworkedAnimator_GetParameterAutoSend.htm" />
<HelpKINode Title="NetworkedAnimator.NetworkedAnimator constructor" Url="html/M_MLAPI_MonoBehaviours_Prototyping_NetworkedAnimator__ctor.htm" />
<HelpKINode Title="NetworkedAnimator.NetworkStart method" Url="html/M_MLAPI_MonoBehaviours_Prototyping_NetworkedAnimator_NetworkStart.htm" />
<HelpKINode Title="NetworkedAnimator.param0 field" Url="html/F_MLAPI_MonoBehaviours_Prototyping_NetworkedAnimator_param0.htm" />
<HelpKINode Title="NetworkedAnimator.param1 field" Url="html/F_MLAPI_MonoBehaviours_Prototyping_NetworkedAnimator_param1.htm" />
<HelpKINode Title="NetworkedAnimator.param2 field" Url="html/F_MLAPI_MonoBehaviours_Prototyping_NetworkedAnimator_param2.htm" />
<HelpKINode Title="NetworkedAnimator.param3 field" Url="html/F_MLAPI_MonoBehaviours_Prototyping_NetworkedAnimator_param3.htm" />
<HelpKINode Title="NetworkedAnimator.param4 field" Url="html/F_MLAPI_MonoBehaviours_Prototyping_NetworkedAnimator_param4.htm" />
<HelpKINode Title="NetworkedAnimator.param5 field" Url="html/F_MLAPI_MonoBehaviours_Prototyping_NetworkedAnimator_param5.htm" />
<HelpKINode Title="NetworkedAnimator.ProximityRange field" Url="html/F_MLAPI_MonoBehaviours_Prototyping_NetworkedAnimator_ProximityRange.htm" />
<HelpKINode Title="NetworkedAnimator.ResetParameterOptions method" Url="html/M_MLAPI_MonoBehaviours_Prototyping_NetworkedAnimator_ResetParameterOptions.htm" />
<HelpKINode Title="NetworkedAnimator.SetParameterAutoSend method" Url="html/M_MLAPI_MonoBehaviours_Prototyping_NetworkedAnimator_SetParameterAutoSend.htm" />
<HelpKINode Title="NetworkedAnimator.SetTrigger method" Url="html/Overload_MLAPI_MonoBehaviours_Prototyping_NetworkedAnimator_SetTrigger.htm" />
<HelpKINode Title="NetworkedBehaviour class">
<HelpKINode Title="NetworkedBehaviour Class" Url="html/T_MLAPI_MonoBehaviours_Core_NetworkedBehaviour.htm" />
<HelpKINode Title="constructor" Url="html/M_MLAPI_MonoBehaviours_Core_NetworkedBehaviour__ctor.htm" />
<HelpKINode Title="fields" Url="html/Fields_T_MLAPI_MonoBehaviours_Core_NetworkedBehaviour.htm" />
<HelpKINode Title="methods" Url="html/Methods_T_MLAPI_MonoBehaviours_Core_NetworkedBehaviour.htm" />
<HelpKINode Title="properties" Url="html/Properties_T_MLAPI_MonoBehaviours_Core_NetworkedBehaviour.htm" />
</HelpKINode>
<HelpKINode Title="NetworkedBehaviour.DeregisterMessageHandler method" Url="html/M_MLAPI_MonoBehaviours_Core_NetworkedBehaviour_DeregisterMessageHandler.htm" />
<HelpKINode Title="NetworkedBehaviour.GetNetworkedObject method" Url="html/M_MLAPI_MonoBehaviours_Core_NetworkedBehaviour_GetNetworkedObject.htm" />
<HelpKINode Title="NetworkedBehaviour.isClient property" Url="html/P_MLAPI_MonoBehaviours_Core_NetworkedBehaviour_isClient.htm" />
<HelpKINode Title="NetworkedBehaviour.isHost property" Url="html/P_MLAPI_MonoBehaviours_Core_NetworkedBehaviour_isHost.htm" />
<HelpKINode Title="NetworkedBehaviour.isLocalPlayer property" Url="html/P_MLAPI_MonoBehaviours_Core_NetworkedBehaviour_isLocalPlayer.htm" />
<HelpKINode Title="NetworkedBehaviour.isOwner property" Url="html/P_MLAPI_MonoBehaviours_Core_NetworkedBehaviour_isOwner.htm" />
<HelpKINode Title="NetworkedBehaviour.isServer property" Url="html/P_MLAPI_MonoBehaviours_Core_NetworkedBehaviour_isServer.htm" />
<HelpKINode Title="NetworkedBehaviour.NetworkedBehaviour constructor" Url="html/M_MLAPI_MonoBehaviours_Core_NetworkedBehaviour__ctor.htm" />
<HelpKINode Title="NetworkedBehaviour.networkedObject property" Url="html/P_MLAPI_MonoBehaviours_Core_NetworkedBehaviour_networkedObject.htm" />
<HelpKINode Title="NetworkedBehaviour.networkId property" Url="html/P_MLAPI_MonoBehaviours_Core_NetworkedBehaviour_networkId.htm" />
<HelpKINode Title="NetworkedBehaviour.NetworkStart method" Url="html/M_MLAPI_MonoBehaviours_Core_NetworkedBehaviour_NetworkStart.htm" />
<HelpKINode Title="NetworkedBehaviour.OnGainedOwnership method" Url="html/M_MLAPI_MonoBehaviours_Core_NetworkedBehaviour_OnGainedOwnership.htm" />
<HelpKINode Title="NetworkedBehaviour.OnLostOwnership method" Url="html/M_MLAPI_MonoBehaviours_Core_NetworkedBehaviour_OnLostOwnership.htm" />
<HelpKINode Title="NetworkedBehaviour.ownerClientId property" Url="html/P_MLAPI_MonoBehaviours_Core_NetworkedBehaviour_ownerClientId.htm" />
<HelpKINode Title="NetworkedBehaviour.RegisterMessageHandler method" Url="html/M_MLAPI_MonoBehaviours_Core_NetworkedBehaviour_RegisterMessageHandler.htm" />
<HelpKINode Title="NetworkedBehaviour.SendToClient method" Url="html/Overload_MLAPI_MonoBehaviours_Core_NetworkedBehaviour_SendToClient.htm" />
<HelpKINode Title="NetworkedBehaviour.SendToClients method" Url="html/Overload_MLAPI_MonoBehaviours_Core_NetworkedBehaviour_SendToClients.htm" />
<HelpKINode Title="NetworkedBehaviour.SendToClientsTarget method" Url="html/Overload_MLAPI_MonoBehaviours_Core_NetworkedBehaviour_SendToClientsTarget.htm" />
<HelpKINode Title="NetworkedBehaviour.SendToClientTarget method" Url="html/Overload_MLAPI_MonoBehaviours_Core_NetworkedBehaviour_SendToClientTarget.htm" />
<HelpKINode Title="NetworkedBehaviour.SendToLocalClient method" Url="html/Overload_MLAPI_MonoBehaviours_Core_NetworkedBehaviour_SendToLocalClient.htm" />
<HelpKINode Title="NetworkedBehaviour.SendToLocalClientTarget method" Url="html/Overload_MLAPI_MonoBehaviours_Core_NetworkedBehaviour_SendToLocalClientTarget.htm" />
<HelpKINode Title="NetworkedBehaviour.SendToNonLocalClients method" Url="html/Overload_MLAPI_MonoBehaviours_Core_NetworkedBehaviour_SendToNonLocalClients.htm" />
<HelpKINode Title="NetworkedBehaviour.SendToNonLocalClientsTarget method" Url="html/Overload_MLAPI_MonoBehaviours_Core_NetworkedBehaviour_SendToNonLocalClientsTarget.htm" />
<HelpKINode Title="NetworkedBehaviour.SendToServer method" Url="html/Overload_MLAPI_MonoBehaviours_Core_NetworkedBehaviour_SendToServer.htm" />
<HelpKINode Title="NetworkedBehaviour.SendToServerTarget method" Url="html/Overload_MLAPI_MonoBehaviours_Core_NetworkedBehaviour_SendToServerTarget.htm" />
<HelpKINode Title="NetworkedBehaviour.SyncVarSyncDelay field" Url="html/F_MLAPI_MonoBehaviours_Core_NetworkedBehaviour_SyncVarSyncDelay.htm" />
<HelpKINode Title="NetworkedClient class">
<HelpKINode Title="NetworkedClient Class" Url="html/T_MLAPI_Data_NetworkedClient.htm" />
<HelpKINode Title="constructor" Url="html/M_MLAPI_Data_NetworkedClient__ctor.htm" />
<HelpKINode Title="fields" Url="html/Fields_T_MLAPI_Data_NetworkedClient.htm" />
<HelpKINode Title="methods" Url="html/Methods_T_MLAPI_Data_NetworkedClient.htm" />
</HelpKINode>
<HelpKINode Title="NetworkedClient.AesKey field" Url="html/F_MLAPI_Data_NetworkedClient_AesKey.htm" />
<HelpKINode Title="NetworkedClient.ClientId field" Url="html/F_MLAPI_Data_NetworkedClient_ClientId.htm" />
<HelpKINode Title="NetworkedClient.NetworkedClient constructor" Url="html/M_MLAPI_Data_NetworkedClient__ctor.htm" />
<HelpKINode Title="NetworkedClient.OwnedObjects field" Url="html/F_MLAPI_Data_NetworkedClient_OwnedObjects.htm" />
<HelpKINode Title="NetworkedClient.PlayerObject field" Url="html/F_MLAPI_Data_NetworkedClient_PlayerObject.htm" />
<HelpKINode Title="NetworkedNavMeshAgent class">
<HelpKINode Title="NetworkedNavMeshAgent Class" Url="html/T_MLAPI_MonoBehaviours_Prototyping_NetworkedNavMeshAgent.htm" />
<HelpKINode Title="constructor" Url="html/M_MLAPI_MonoBehaviours_Prototyping_NetworkedNavMeshAgent__ctor.htm" />
<HelpKINode Title="fields" Url="html/Fields_T_MLAPI_MonoBehaviours_Prototyping_NetworkedNavMeshAgent.htm" />
<HelpKINode Title="methods" Url="html/Methods_T_MLAPI_MonoBehaviours_Prototyping_NetworkedNavMeshAgent.htm" />
<HelpKINode Title="properties" Url="html/Properties_T_MLAPI_MonoBehaviours_Prototyping_NetworkedNavMeshAgent.htm" />
</HelpKINode>
<HelpKINode Title="NetworkedNavMeshAgent.CorrectionDelay field" Url="html/F_MLAPI_MonoBehaviours_Prototyping_NetworkedNavMeshAgent_CorrectionDelay.htm" />
<HelpKINode Title="NetworkedNavMeshAgent.DriftCorrectionPercentage field" Url="html/F_MLAPI_MonoBehaviours_Prototyping_NetworkedNavMeshAgent_DriftCorrectionPercentage.htm" />
<HelpKINode Title="NetworkedNavMeshAgent.EnableProximity field" Url="html/F_MLAPI_MonoBehaviours_Prototyping_NetworkedNavMeshAgent_EnableProximity.htm" />
<HelpKINode Title="NetworkedNavMeshAgent.NetworkedNavMeshAgent constructor" Url="html/M_MLAPI_MonoBehaviours_Prototyping_NetworkedNavMeshAgent__ctor.htm" />
<HelpKINode Title="NetworkedNavMeshAgent.NetworkStart method" Url="html/M_MLAPI_MonoBehaviours_Prototyping_NetworkedNavMeshAgent_NetworkStart.htm" />
<HelpKINode Title="NetworkedNavMeshAgent.ProximityRange field" Url="html/F_MLAPI_MonoBehaviours_Prototyping_NetworkedNavMeshAgent_ProximityRange.htm" />
<HelpKINode Title="NetworkedNavMeshAgent.WarpOnDestinationChange field" Url="html/F_MLAPI_MonoBehaviours_Prototyping_NetworkedNavMeshAgent_WarpOnDestinationChange.htm" />
<HelpKINode Title="NetworkedObject class">
<HelpKINode Title="NetworkedObject Class" Url="html/T_MLAPI_MonoBehaviours_Core_NetworkedObject.htm" />
<HelpKINode Title="constructor" Url="html/M_MLAPI_MonoBehaviours_Core_NetworkedObject__ctor.htm" />
<HelpKINode Title="fields" Url="html/Fields_T_MLAPI_MonoBehaviours_Core_NetworkedObject.htm" />
<HelpKINode Title="methods" Url="html/Methods_T_MLAPI_MonoBehaviours_Core_NetworkedObject.htm" />
<HelpKINode Title="properties" Url="html/Properties_T_MLAPI_MonoBehaviours_Core_NetworkedObject.htm" />
</HelpKINode>
<HelpKINode Title="networkedObject property" Url="html/P_MLAPI_MonoBehaviours_Core_NetworkedBehaviour_networkedObject.htm" />
<HelpKINode Title="NetworkedObject.ChangeOwnership method" Url="html/M_MLAPI_MonoBehaviours_Core_NetworkedObject_ChangeOwnership.htm" />
<HelpKINode Title="NetworkedObject.isLocalPlayer property" Url="html/P_MLAPI_MonoBehaviours_Core_NetworkedObject_isLocalPlayer.htm" />
<HelpKINode Title="NetworkedObject.isOwner property" Url="html/P_MLAPI_MonoBehaviours_Core_NetworkedObject_isOwner.htm" />
<HelpKINode Title="NetworkedObject.isPlayerObject property" Url="html/P_MLAPI_MonoBehaviours_Core_NetworkedObject_isPlayerObject.htm" />
<HelpKINode Title="NetworkedObject.isPooledObject property" Url="html/P_MLAPI_MonoBehaviours_Core_NetworkedObject_isPooledObject.htm" />
<HelpKINode Title="NetworkedObject.isSpawned property" Url="html/P_MLAPI_MonoBehaviours_Core_NetworkedObject_isSpawned.htm" />
<HelpKINode Title="NetworkedObject.NetworkedObject constructor" Url="html/M_MLAPI_MonoBehaviours_Core_NetworkedObject__ctor.htm" />
<HelpKINode Title="NetworkedObject.NetworkId property" Url="html/P_MLAPI_MonoBehaviours_Core_NetworkedObject_NetworkId.htm" />
<HelpKINode Title="NetworkedObject.OwnerClientId property" Url="html/P_MLAPI_MonoBehaviours_Core_NetworkedObject_OwnerClientId.htm" />
<HelpKINode Title="NetworkedObject.PoolId property" Url="html/P_MLAPI_MonoBehaviours_Core_NetworkedObject_PoolId.htm" />
<HelpKINode Title="NetworkedObject.RemoveOwnership method" Url="html/M_MLAPI_MonoBehaviours_Core_NetworkedObject_RemoveOwnership.htm" />
<HelpKINode Title="NetworkedObject.ServerOnly field" Url="html/F_MLAPI_MonoBehaviours_Core_NetworkedObject_ServerOnly.htm" />
<HelpKINode Title="NetworkedObject.Spawn method" Url="html/M_MLAPI_MonoBehaviours_Core_NetworkedObject_Spawn.htm" />
<HelpKINode Title="NetworkedObject.SpawnablePrefabIndex property" Url="html/P_MLAPI_MonoBehaviours_Core_NetworkedObject_SpawnablePrefabIndex.htm" />
<HelpKINode Title="NetworkedObject.SpawnWithOwnership method" Url="html/M_MLAPI_MonoBehaviours_Core_NetworkedObject_SpawnWithOwnership.htm" />
<HelpKINode Title="NetworkedTransform class">
<HelpKINode Title="NetworkedTransform Class" Url="html/T_MLAPI_MonoBehaviours_Prototyping_NetworkedTransform.htm" />
<HelpKINode Title="constructor" Url="html/M_MLAPI_MonoBehaviours_Prototyping_NetworkedTransform__ctor.htm" />
<HelpKINode Title="fields" Url="html/Fields_T_MLAPI_MonoBehaviours_Prototyping_NetworkedTransform.htm" />
<HelpKINode Title="methods" Url="html/Methods_T_MLAPI_MonoBehaviours_Prototyping_NetworkedTransform.htm" />
<HelpKINode Title="properties" Url="html/Properties_T_MLAPI_MonoBehaviours_Prototyping_NetworkedTransform.htm" />
</HelpKINode>
<HelpKINode Title="NetworkedTransform.AssumeSyncedSends field" Url="html/F_MLAPI_MonoBehaviours_Prototyping_NetworkedTransform_AssumeSyncedSends.htm" />
<HelpKINode Title="NetworkedTransform.EnableProximity field" Url="html/F_MLAPI_MonoBehaviours_Prototyping_NetworkedTransform_EnableProximity.htm" />
<HelpKINode Title="NetworkedTransform.InterpolatePosition field" Url="html/F_MLAPI_MonoBehaviours_Prototyping_NetworkedTransform_InterpolatePosition.htm" />
<HelpKINode Title="NetworkedTransform.InterpolateServer field" Url="html/F_MLAPI_MonoBehaviours_Prototyping_NetworkedTransform_InterpolateServer.htm" />
<HelpKINode Title="NetworkedTransform.MinDegrees field" Url="html/F_MLAPI_MonoBehaviours_Prototyping_NetworkedTransform_MinDegrees.htm" />
<HelpKINode Title="NetworkedTransform.MinMeters field" Url="html/F_MLAPI_MonoBehaviours_Prototyping_NetworkedTransform_MinMeters.htm" />
<HelpKINode Title="NetworkedTransform.NetworkedTransform constructor" Url="html/M_MLAPI_MonoBehaviours_Prototyping_NetworkedTransform__ctor.htm" />
<HelpKINode Title="NetworkedTransform.NetworkStart method" Url="html/M_MLAPI_MonoBehaviours_Prototyping_NetworkedTransform_NetworkStart.htm" />
<HelpKINode Title="NetworkedTransform.ProximityRange field" Url="html/F_MLAPI_MonoBehaviours_Prototyping_NetworkedTransform_ProximityRange.htm" />
<HelpKINode Title="NetworkedTransform.SendsPerSecond field" Url="html/F_MLAPI_MonoBehaviours_Prototyping_NetworkedTransform_SendsPerSecond.htm" />
<HelpKINode Title="NetworkedTransform.SnapDistance field" Url="html/F_MLAPI_MonoBehaviours_Prototyping_NetworkedTransform_SnapDistance.htm" />
<HelpKINode Title="networkId property" Url="html/P_MLAPI_MonoBehaviours_Core_NetworkedBehaviour_networkId.htm" />
<HelpKINode Title="NetworkId property" Url="html/P_MLAPI_MonoBehaviours_Core_NetworkedObject_NetworkId.htm" />
<HelpKINode Title="NetworkingConfiguration class">
<HelpKINode Title="NetworkingConfiguration Class" Url="html/T_MLAPI_Data_NetworkingConfiguration.htm" />
<HelpKINode Title="constructor" Url="html/M_MLAPI_Data_NetworkingConfiguration__ctor.htm" />
<HelpKINode Title="fields" Url="html/Fields_T_MLAPI_Data_NetworkingConfiguration.htm" />
<HelpKINode Title="methods" Url="html/Methods_T_MLAPI_Data_NetworkingConfiguration.htm" />
</HelpKINode>
<HelpKINode Title="NetworkingConfiguration.Address field" Url="html/F_MLAPI_Data_NetworkingConfiguration_Address.htm" />
<HelpKINode Title="NetworkingConfiguration.AllowPassthroughMessages field" Url="html/F_MLAPI_Data_NetworkingConfiguration_AllowPassthroughMessages.htm" />
<HelpKINode Title="NetworkingConfiguration.Channels field" Url="html/F_MLAPI_Data_NetworkingConfiguration_Channels.htm" />
<HelpKINode Title="NetworkingConfiguration.ClientConnectionBufferTimeout field" Url="html/F_MLAPI_Data_NetworkingConfiguration_ClientConnectionBufferTimeout.htm" />
<HelpKINode Title="NetworkingConfiguration.CompareConfig method" Url="html/M_MLAPI_Data_NetworkingConfiguration_CompareConfig.htm" />
<HelpKINode Title="NetworkingConfiguration.ConnectionApproval field" Url="html/F_MLAPI_Data_NetworkingConfiguration_ConnectionApproval.htm" />
<HelpKINode Title="NetworkingConfiguration.ConnectionApprovalCallback field" Url="html/F_MLAPI_Data_NetworkingConfiguration_ConnectionApprovalCallback.htm" />
<HelpKINode Title="NetworkingConfiguration.ConnectionData field" Url="html/F_MLAPI_Data_NetworkingConfiguration_ConnectionData.htm" />
<HelpKINode Title="NetworkingConfiguration.EnableEncryption field" Url="html/F_MLAPI_Data_NetworkingConfiguration_EnableEncryption.htm" />
<HelpKINode Title="NetworkingConfiguration.EnableSceneSwitching field" Url="html/F_MLAPI_Data_NetworkingConfiguration_EnableSceneSwitching.htm" />
<HelpKINode Title="NetworkingConfiguration.EncryptedChannels field" Url="html/F_MLAPI_Data_NetworkingConfiguration_EncryptedChannels.htm" />
<HelpKINode Title="NetworkingConfiguration.EventTickrate field" Url="html/F_MLAPI_Data_NetworkingConfiguration_EventTickrate.htm" />
<HelpKINode Title="NetworkingConfiguration.GetConfig method" Url="html/M_MLAPI_Data_NetworkingConfiguration_GetConfig.htm" />
<HelpKINode Title="NetworkingConfiguration.HandleObjectSpawning field" Url="html/F_MLAPI_Data_NetworkingConfiguration_HandleObjectSpawning.htm" />
<HelpKINode Title="NetworkingConfiguration.MaxConnections field" Url="html/F_MLAPI_Data_NetworkingConfiguration_MaxConnections.htm" />
<HelpKINode Title="NetworkingConfiguration.MaxReceiveEventsPerTickRate field" Url="html/F_MLAPI_Data_NetworkingConfiguration_MaxReceiveEventsPerTickRate.htm" />
<HelpKINode Title="NetworkingConfiguration.MessageBufferSize field" Url="html/F_MLAPI_Data_NetworkingConfiguration_MessageBufferSize.htm" />
<HelpKINode Title="NetworkingConfiguration.MessageTypes field" Url="html/F_MLAPI_Data_NetworkingConfiguration_MessageTypes.htm" />
<HelpKINode Title="NetworkingConfiguration.NetworkingConfiguration constructor" Url="html/M_MLAPI_Data_NetworkingConfiguration__ctor.htm" />
<HelpKINode Title="NetworkingConfiguration.PassthroughMessageTypes field" Url="html/F_MLAPI_Data_NetworkingConfiguration_PassthroughMessageTypes.htm" />
<HelpKINode Title="NetworkingConfiguration.Port field" Url="html/F_MLAPI_Data_NetworkingConfiguration_Port.htm" />
<HelpKINode Title="NetworkingConfiguration.ProtocolVersion field" Url="html/F_MLAPI_Data_NetworkingConfiguration_ProtocolVersion.htm" />
<HelpKINode Title="NetworkingConfiguration.ReceiveTickrate field" Url="html/F_MLAPI_Data_NetworkingConfiguration_ReceiveTickrate.htm" />
<HelpKINode Title="NetworkingConfiguration.RegisteredScenes field" Url="html/F_MLAPI_Data_NetworkingConfiguration_RegisteredScenes.htm" />
<HelpKINode Title="NetworkingConfiguration.RSAPrivateKey field" Url="html/F_MLAPI_Data_NetworkingConfiguration_RSAPrivateKey.htm" />
<HelpKINode Title="NetworkingConfiguration.RSAPublicKey field" Url="html/F_MLAPI_Data_NetworkingConfiguration_RSAPublicKey.htm" />
<HelpKINode Title="NetworkingConfiguration.SecondsHistory field" Url="html/F_MLAPI_Data_NetworkingConfiguration_SecondsHistory.htm" />
<HelpKINode Title="NetworkingConfiguration.SendTickrate field" Url="html/F_MLAPI_Data_NetworkingConfiguration_SendTickrate.htm" />
<HelpKINode Title="NetworkingConfiguration.SignKeyExchange field" Url="html/F_MLAPI_Data_NetworkingConfiguration_SignKeyExchange.htm" />
<HelpKINode Title="NetworkingManager class">
<HelpKINode Title="NetworkingManager Class" Url="html/T_MLAPI_MonoBehaviours_Core_NetworkingManager.htm" />
<HelpKINode Title="constructor" Url="html/M_MLAPI_MonoBehaviours_Core_NetworkingManager__ctor.htm" />
<HelpKINode Title="fields" Url="html/Fields_T_MLAPI_MonoBehaviours_Core_NetworkingManager.htm" />
<HelpKINode Title="methods" Url="html/Methods_T_MLAPI_MonoBehaviours_Core_NetworkingManager.htm" />
<HelpKINode Title="properties" Url="html/Properties_T_MLAPI_MonoBehaviours_Core_NetworkingManager.htm" />
</HelpKINode>
<HelpKINode Title="NetworkingManager.ConnectedClients property" Url="html/P_MLAPI_MonoBehaviours_Core_NetworkingManager_ConnectedClients.htm" />
<HelpKINode Title="NetworkingManager.DefaultPlayerPrefab field" Url="html/F_MLAPI_MonoBehaviours_Core_NetworkingManager_DefaultPlayerPrefab.htm" />
<HelpKINode Title="NetworkingManager.DontDestroy field" Url="html/F_MLAPI_MonoBehaviours_Core_NetworkingManager_DontDestroy.htm" />
<HelpKINode Title="NetworkingManager.isClient property" Url="html/P_MLAPI_MonoBehaviours_Core_NetworkingManager_isClient.htm" />
<HelpKINode Title="NetworkingManager.IsClientConnected property" Url="html/P_MLAPI_MonoBehaviours_Core_NetworkingManager_IsClientConnected.htm" />
<HelpKINode Title="NetworkingManager.isHost property" Url="html/P_MLAPI_MonoBehaviours_Core_NetworkingManager_isHost.htm" />
<HelpKINode Title="NetworkingManager.isServer property" Url="html/P_MLAPI_MonoBehaviours_Core_NetworkingManager_isServer.htm" />
<HelpKINode Title="NetworkingManager.MyClientId property" Url="html/P_MLAPI_MonoBehaviours_Core_NetworkingManager_MyClientId.htm" />
<HelpKINode Title="NetworkingManager.NetworkConfig field" Url="html/F_MLAPI_MonoBehaviours_Core_NetworkingManager_NetworkConfig.htm" />
<HelpKINode Title="NetworkingManager.NetworkingManager constructor" Url="html/M_MLAPI_MonoBehaviours_Core_NetworkingManager__ctor.htm" />
<HelpKINode Title="NetworkingManager.NetworkTime property" Url="html/P_MLAPI_MonoBehaviours_Core_NetworkingManager_NetworkTime.htm" />
<HelpKINode Title="NetworkingManager.OnClientConnectedCallback field" Url="html/F_MLAPI_MonoBehaviours_Core_NetworkingManager_OnClientConnectedCallback.htm" />
<HelpKINode Title="NetworkingManager.OnClientDisconnectCallback field" Url="html/F_MLAPI_MonoBehaviours_Core_NetworkingManager_OnClientDisconnectCallback.htm" />
<HelpKINode Title="NetworkingManager.OnServerStarted field" Url="html/F_MLAPI_MonoBehaviours_Core_NetworkingManager_OnServerStarted.htm" />
<HelpKINode Title="NetworkingManager.RunInBackground field" Url="html/F_MLAPI_MonoBehaviours_Core_NetworkingManager_RunInBackground.htm" />
<HelpKINode Title="NetworkingManager.singleton property" Url="html/P_MLAPI_MonoBehaviours_Core_NetworkingManager_singleton.htm" />
<HelpKINode Title="NetworkingManager.SpawnablePrefabs field" Url="html/F_MLAPI_MonoBehaviours_Core_NetworkingManager_SpawnablePrefabs.htm" />
<HelpKINode Title="NetworkingManager.StartClient method" Url="html/M_MLAPI_MonoBehaviours_Core_NetworkingManager_StartClient.htm" />
<HelpKINode Title="NetworkingManager.StartHost method" Url="html/M_MLAPI_MonoBehaviours_Core_NetworkingManager_StartHost.htm" />
<HelpKINode Title="NetworkingManager.StartServer method" Url="html/M_MLAPI_MonoBehaviours_Core_NetworkingManager_StartServer.htm" />
<HelpKINode Title="NetworkingManager.StopClient method" Url="html/M_MLAPI_MonoBehaviours_Core_NetworkingManager_StopClient.htm" />
<HelpKINode Title="NetworkingManager.StopHost method" Url="html/M_MLAPI_MonoBehaviours_Core_NetworkingManager_StopHost.htm" />
<HelpKINode Title="NetworkingManager.StopServer method" Url="html/M_MLAPI_MonoBehaviours_Core_NetworkingManager_StopServer.htm" />
<HelpKINode Title="NetworkPoolManager class">
<HelpKINode Title="NetworkPoolManager Class" Url="html/T_MLAPI_NetworkingManagerComponents_Core_NetworkPoolManager.htm" />
<HelpKINode Title="methods" Url="html/Methods_T_MLAPI_NetworkingManagerComponents_Core_NetworkPoolManager.htm" />
</HelpKINode>
<HelpKINode Title="NetworkPoolManager.CreatePool method" Url="html/M_MLAPI_NetworkingManagerComponents_Core_NetworkPoolManager_CreatePool.htm" />
<HelpKINode Title="NetworkPoolManager.DestroyPool method" Url="html/M_MLAPI_NetworkingManagerComponents_Core_NetworkPoolManager_DestroyPool.htm" />
<HelpKINode Title="NetworkPoolManager.DestroyPoolObject method" Url="html/M_MLAPI_NetworkingManagerComponents_Core_NetworkPoolManager_DestroyPoolObject.htm" />
<HelpKINode Title="NetworkPoolManager.SpawnPoolObject method" Url="html/M_MLAPI_NetworkingManagerComponents_Core_NetworkPoolManager_SpawnPoolObject.htm" />
<HelpKINode Title="NetworkSceneManager class">
<HelpKINode Title="NetworkSceneManager Class" Url="html/T_MLAPI_NetworkingManagerComponents_Core_NetworkSceneManager.htm" />
<HelpKINode Title="methods" Url="html/Methods_T_MLAPI_NetworkingManagerComponents_Core_NetworkSceneManager.htm" />
</HelpKINode>
<HelpKINode Title="NetworkSceneManager.SwitchScene method" Url="html/M_MLAPI_NetworkingManagerComponents_Core_NetworkSceneManager_SwitchScene.htm" />
<HelpKINode Title="NetworkStart method">
<HelpKINode Title="NetworkedAnimator.NetworkStart Method " Url="html/M_MLAPI_MonoBehaviours_Prototyping_NetworkedAnimator_NetworkStart.htm" />
<HelpKINode Title="NetworkedBehaviour.NetworkStart Method " Url="html/M_MLAPI_MonoBehaviours_Core_NetworkedBehaviour_NetworkStart.htm" />
<HelpKINode Title="NetworkedNavMeshAgent.NetworkStart Method " Url="html/M_MLAPI_MonoBehaviours_Prototyping_NetworkedNavMeshAgent_NetworkStart.htm" />
<HelpKINode Title="NetworkedTransform.NetworkStart Method " Url="html/M_MLAPI_MonoBehaviours_Prototyping_NetworkedTransform_NetworkStart.htm" />
</HelpKINode>
<HelpKINode Title="NetworkTime property" Url="html/P_MLAPI_MonoBehaviours_Core_NetworkingManager_NetworkTime.htm" />
<HelpKINode Title="OnClientConnectedCallback field" Url="html/F_MLAPI_MonoBehaviours_Core_NetworkingManager_OnClientConnectedCallback.htm" />
<HelpKINode Title="OnClientDisconnectCallback field" Url="html/F_MLAPI_MonoBehaviours_Core_NetworkingManager_OnClientDisconnectCallback.htm" />
<HelpKINode Title="OnGainedOwnership method" Url="html/M_MLAPI_MonoBehaviours_Core_NetworkedBehaviour_OnGainedOwnership.htm" />
<HelpKINode Title="OnLostOwnership method" Url="html/M_MLAPI_MonoBehaviours_Core_NetworkedBehaviour_OnLostOwnership.htm" />
<HelpKINode Title="OnServerStarted field" Url="html/F_MLAPI_MonoBehaviours_Core_NetworkingManager_OnServerStarted.htm" />
<HelpKINode Title="OwnedObjects field" Url="html/F_MLAPI_Data_NetworkedClient_OwnedObjects.htm" />
<HelpKINode Title="OwnerClientId property" Url="html/P_MLAPI_MonoBehaviours_Core_NetworkedObject_OwnerClientId.htm" />
<HelpKINode Title="ownerClientId property" Url="html/P_MLAPI_MonoBehaviours_Core_NetworkedBehaviour_ownerClientId.htm" />
<HelpKINode Title="param0 field" Url="html/F_MLAPI_MonoBehaviours_Prototyping_NetworkedAnimator_param0.htm" />
<HelpKINode Title="param1 field" Url="html/F_MLAPI_MonoBehaviours_Prototyping_NetworkedAnimator_param1.htm" />
<HelpKINode Title="param2 field" Url="html/F_MLAPI_MonoBehaviours_Prototyping_NetworkedAnimator_param2.htm" />
<HelpKINode Title="param3 field" Url="html/F_MLAPI_MonoBehaviours_Prototyping_NetworkedAnimator_param3.htm" />
<HelpKINode Title="param4 field" Url="html/F_MLAPI_MonoBehaviours_Prototyping_NetworkedAnimator_param4.htm" />
<HelpKINode Title="param5 field" Url="html/F_MLAPI_MonoBehaviours_Prototyping_NetworkedAnimator_param5.htm" />
<HelpKINode Title="PassthroughMessageTypes field" Url="html/F_MLAPI_Data_NetworkingConfiguration_PassthroughMessageTypes.htm" />
<HelpKINode Title="PlayerObject field" Url="html/F_MLAPI_Data_NetworkedClient_PlayerObject.htm" />
<HelpKINode Title="PoolId property" Url="html/P_MLAPI_MonoBehaviours_Core_NetworkedObject_PoolId.htm" />
<HelpKINode Title="Port field" Url="html/F_MLAPI_Data_NetworkingConfiguration_Port.htm" />
<HelpKINode Title="ProtocolVersion field" Url="html/F_MLAPI_Data_NetworkingConfiguration_ProtocolVersion.htm" />
<HelpKINode Title="ProximityRange field">
<HelpKINode Title="NetworkedAnimator.ProximityRange Field" Url="html/F_MLAPI_MonoBehaviours_Prototyping_NetworkedAnimator_ProximityRange.htm" />
<HelpKINode Title="NetworkedNavMeshAgent.ProximityRange Field" Url="html/F_MLAPI_MonoBehaviours_Prototyping_NetworkedNavMeshAgent_ProximityRange.htm" />
<HelpKINode Title="NetworkedTransform.ProximityRange Field" Url="html/F_MLAPI_MonoBehaviours_Prototyping_NetworkedTransform_ProximityRange.htm" />
</HelpKINode>
<HelpKINode Title="ReceiveTickrate field" Url="html/F_MLAPI_Data_NetworkingConfiguration_ReceiveTickrate.htm" />
<HelpKINode Title="RegisteredScenes field" Url="html/F_MLAPI_Data_NetworkingConfiguration_RegisteredScenes.htm" />
<HelpKINode Title="RegisterMessageHandler method" Url="html/M_MLAPI_MonoBehaviours_Core_NetworkedBehaviour_RegisterMessageHandler.htm" />
<HelpKINode Title="RemoveOwnership method" Url="html/M_MLAPI_MonoBehaviours_Core_NetworkedObject_RemoveOwnership.htm" />
<HelpKINode Title="ResetParameterOptions method" Url="html/M_MLAPI_MonoBehaviours_Prototyping_NetworkedAnimator_ResetParameterOptions.htm" />
<HelpKINode Title="RSAPrivateKey field" Url="html/F_MLAPI_Data_NetworkingConfiguration_RSAPrivateKey.htm" />
<HelpKINode Title="RSAPublicKey field" Url="html/F_MLAPI_Data_NetworkingConfiguration_RSAPublicKey.htm" />
<HelpKINode Title="RunInBackground field" Url="html/F_MLAPI_MonoBehaviours_Core_NetworkingManager_RunInBackground.htm" />
<HelpKINode Title="SecondsHistory field" Url="html/F_MLAPI_Data_NetworkingConfiguration_SecondsHistory.htm" />
<HelpKINode Title="SendsPerSecond field" Url="html/F_MLAPI_MonoBehaviours_Prototyping_NetworkedTransform_SendsPerSecond.htm" />
<HelpKINode Title="SendTickrate field" Url="html/F_MLAPI_Data_NetworkingConfiguration_SendTickrate.htm" />
<HelpKINode Title="SendToClient method" Url="html/Overload_MLAPI_MonoBehaviours_Core_NetworkedBehaviour_SendToClient.htm" />
<HelpKINode Title="SendToClients method" Url="html/Overload_MLAPI_MonoBehaviours_Core_NetworkedBehaviour_SendToClients.htm" />
<HelpKINode Title="SendToClientsTarget method" Url="html/Overload_MLAPI_MonoBehaviours_Core_NetworkedBehaviour_SendToClientsTarget.htm" />
<HelpKINode Title="SendToClientTarget method" Url="html/Overload_MLAPI_MonoBehaviours_Core_NetworkedBehaviour_SendToClientTarget.htm" />
<HelpKINode Title="SendToLocalClient method" Url="html/Overload_MLAPI_MonoBehaviours_Core_NetworkedBehaviour_SendToLocalClient.htm" />
<HelpKINode Title="SendToLocalClientTarget method" Url="html/Overload_MLAPI_MonoBehaviours_Core_NetworkedBehaviour_SendToLocalClientTarget.htm" />
<HelpKINode Title="SendToNonLocalClients method" Url="html/Overload_MLAPI_MonoBehaviours_Core_NetworkedBehaviour_SendToNonLocalClients.htm" />
<HelpKINode Title="SendToNonLocalClientsTarget method" Url="html/Overload_MLAPI_MonoBehaviours_Core_NetworkedBehaviour_SendToNonLocalClientsTarget.htm" />
<HelpKINode Title="SendToServer method" Url="html/Overload_MLAPI_MonoBehaviours_Core_NetworkedBehaviour_SendToServer.htm" />
<HelpKINode Title="SendToServerTarget method" Url="html/Overload_MLAPI_MonoBehaviours_Core_NetworkedBehaviour_SendToServerTarget.htm" />
<HelpKINode Title="Serialize(Of T) method" Url="html/M_MLAPI_NetworkingManagerComponents_Binary_BinarySerializer_Serialize__1.htm" />
<HelpKINode Title="Serialize&lt;T&gt; method" Url="html/M_MLAPI_NetworkingManagerComponents_Binary_BinarySerializer_Serialize__1.htm" />
<HelpKINode Title="ServerOnly field" Url="html/F_MLAPI_MonoBehaviours_Core_NetworkedObject_ServerOnly.htm" />
<HelpKINode Title="SetParameterAutoSend method" Url="html/M_MLAPI_MonoBehaviours_Prototyping_NetworkedAnimator_SetParameterAutoSend.htm" />
<HelpKINode Title="SetTrigger method" Url="html/Overload_MLAPI_MonoBehaviours_Prototyping_NetworkedAnimator_SetTrigger.htm" />
<HelpKINode Title="SignKeyExchange field" Url="html/F_MLAPI_Data_NetworkingConfiguration_SignKeyExchange.htm" />
<HelpKINode Title="Simulate method" Url="html/Overload_MLAPI_NetworkingManagerComponents_Core_LagCompensationManager_Simulate.htm" />
<HelpKINode Title="SimulationObjects property" Url="html/P_MLAPI_NetworkingManagerComponents_Core_LagCompensationManager_SimulationObjects.htm" />
<HelpKINode Title="singleton property" Url="html/P_MLAPI_MonoBehaviours_Core_NetworkingManager_singleton.htm" />
<HelpKINode Title="SnapDistance field" Url="html/F_MLAPI_MonoBehaviours_Prototyping_NetworkedTransform_SnapDistance.htm" />
<HelpKINode Title="Spawn method" Url="html/M_MLAPI_MonoBehaviours_Core_NetworkedObject_Spawn.htm" />
<HelpKINode Title="SpawnablePrefabIndex property" Url="html/P_MLAPI_MonoBehaviours_Core_NetworkedObject_SpawnablePrefabIndex.htm" />
<HelpKINode Title="SpawnablePrefabs field" Url="html/F_MLAPI_MonoBehaviours_Core_NetworkingManager_SpawnablePrefabs.htm" />
<HelpKINode Title="SpawnPoolObject method" Url="html/M_MLAPI_NetworkingManagerComponents_Core_NetworkPoolManager_SpawnPoolObject.htm" />
<HelpKINode Title="SpawnWithOwnership method" Url="html/M_MLAPI_MonoBehaviours_Core_NetworkedObject_SpawnWithOwnership.htm" />
<HelpKINode Title="StartClient method" Url="html/M_MLAPI_MonoBehaviours_Core_NetworkingManager_StartClient.htm" />
<HelpKINode Title="StartHost method" Url="html/M_MLAPI_MonoBehaviours_Core_NetworkingManager_StartHost.htm" />
<HelpKINode Title="StartServer method" Url="html/M_MLAPI_MonoBehaviours_Core_NetworkingManager_StartServer.htm" />
<HelpKINode Title="StopClient method" Url="html/M_MLAPI_MonoBehaviours_Core_NetworkingManager_StopClient.htm" />
<HelpKINode Title="StopHost method" Url="html/M_MLAPI_MonoBehaviours_Core_NetworkingManager_StopHost.htm" />
<HelpKINode Title="StopServer method" Url="html/M_MLAPI_MonoBehaviours_Core_NetworkingManager_StopServer.htm" />
<HelpKINode Title="SwitchScene method" Url="html/M_MLAPI_NetworkingManagerComponents_Core_NetworkSceneManager_SwitchScene.htm" />
<HelpKINode Title="SyncedVar class">
<HelpKINode Title="SyncedVar Class" Url="html/T_MLAPI_Attributes_SyncedVar.htm" />
<HelpKINode Title="constructor" Url="html/M_MLAPI_Attributes_SyncedVar__ctor.htm" />
<HelpKINode Title="fields" Url="html/Fields_T_MLAPI_Attributes_SyncedVar.htm" />
<HelpKINode Title="methods" Url="html/Methods_T_MLAPI_Attributes_SyncedVar.htm" />
<HelpKINode Title="properties" Url="html/Properties_T_MLAPI_Attributes_SyncedVar.htm" />
</HelpKINode>
<HelpKINode Title="SyncedVar.hook field" Url="html/F_MLAPI_Attributes_SyncedVar_hook.htm" />
<HelpKINode Title="SyncedVar.SyncedVar constructor" Url="html/M_MLAPI_Attributes_SyncedVar__ctor.htm" />
<HelpKINode Title="SyncVarSyncDelay field" Url="html/F_MLAPI_MonoBehaviours_Core_NetworkedBehaviour_SyncVarSyncDelay.htm" />
<HelpKINode Title="TrackedObject class">
<HelpKINode Title="TrackedObject Class" Url="html/T_MLAPI_MonoBehaviours_Core_TrackedObject.htm" />
<HelpKINode Title="constructor" Url="html/M_MLAPI_MonoBehaviours_Core_TrackedObject__ctor.htm" />
<HelpKINode Title="methods" Url="html/Methods_T_MLAPI_MonoBehaviours_Core_TrackedObject.htm" />
<HelpKINode Title="properties" Url="html/Properties_T_MLAPI_MonoBehaviours_Core_TrackedObject.htm" />
</HelpKINode>
<HelpKINode Title="TrackedObject.TrackedObject constructor" Url="html/M_MLAPI_MonoBehaviours_Core_TrackedObject__ctor.htm" />
<HelpKINode Title="WarpOnDestinationChange field" Url="html/F_MLAPI_MonoBehaviours_Prototyping_NetworkedNavMeshAgent_WarpOnDestinationChange.htm" />
</HelpKI>

312
docs/WebTOC.xml Normal file
View File

@ -0,0 +1,312 @@
<?xml version="1.0" encoding="utf-8"?>
<HelpTOC>
<HelpTOCNode Id="7c620544-924a-43f4-97d0-8d8a81e066e7" Title="MLAPI.Attributes" Url="html/N_MLAPI_Attributes.htm">
<HelpTOCNode Id="ddf7d6e9-e0b2-4402-8111-bea30a63b850" Title="BinaryIgnore Class" Url="html/T_MLAPI_Attributes_BinaryIgnore.htm">
<HelpTOCNode Title="BinaryIgnore Constructor " Url="html/M_MLAPI_Attributes_BinaryIgnore__ctor.htm" />
<HelpTOCNode Title="BinaryIgnore Properties" Url="html/Properties_T_MLAPI_Attributes_BinaryIgnore.htm" />
<HelpTOCNode Title="BinaryIgnore Methods" Url="html/Methods_T_MLAPI_Attributes_BinaryIgnore.htm" />
</HelpTOCNode>
<HelpTOCNode Id="6591a837-2ee9-4ce1-937f-5d98ea233268" Title="SyncedVar Class" Url="html/T_MLAPI_Attributes_SyncedVar.htm">
<HelpTOCNode Title="SyncedVar Constructor " Url="html/M_MLAPI_Attributes_SyncedVar__ctor.htm" />
<HelpTOCNode Title="SyncedVar Properties" Url="html/Properties_T_MLAPI_Attributes_SyncedVar.htm" />
<HelpTOCNode Title="SyncedVar Methods" Url="html/Methods_T_MLAPI_Attributes_SyncedVar.htm" />
<HelpTOCNode Id="6795530b-5ba8-4eb9-9469-9b2d1b3ad7a4" Title="SyncedVar Fields" Url="html/Fields_T_MLAPI_Attributes_SyncedVar.htm">
<HelpTOCNode Title="hook Field" Url="html/F_MLAPI_Attributes_SyncedVar_hook.htm" />
</HelpTOCNode>
</HelpTOCNode>
</HelpTOCNode>
<HelpTOCNode Id="e839f92a-eac1-46a0-80ac-a59cb45c2560" Title="MLAPI.Data" Url="html/N_MLAPI_Data.htm">
<HelpTOCNode Id="30a70937-ca46-44c5-aa2d-69ad3a29874e" Title="NetworkedClient Class" Url="html/T_MLAPI_Data_NetworkedClient.htm">
<HelpTOCNode Title="NetworkedClient Constructor " Url="html/M_MLAPI_Data_NetworkedClient__ctor.htm" />
<HelpTOCNode Title="NetworkedClient Methods" Url="html/Methods_T_MLAPI_Data_NetworkedClient.htm" />
<HelpTOCNode Id="99cea467-056d-43c5-85ff-f771f14ba209" Title="NetworkedClient Fields" Url="html/Fields_T_MLAPI_Data_NetworkedClient.htm">
<HelpTOCNode Title="AesKey Field" Url="html/F_MLAPI_Data_NetworkedClient_AesKey.htm" />
<HelpTOCNode Title="ClientId Field" Url="html/F_MLAPI_Data_NetworkedClient_ClientId.htm" />
<HelpTOCNode Title="OwnedObjects Field" Url="html/F_MLAPI_Data_NetworkedClient_OwnedObjects.htm" />
<HelpTOCNode Title="PlayerObject Field" Url="html/F_MLAPI_Data_NetworkedClient_PlayerObject.htm" />
</HelpTOCNode>
</HelpTOCNode>
<HelpTOCNode Id="62674246-107d-4c3c-9488-9417ef5c3f98" Title="NetworkingConfiguration Class" Url="html/T_MLAPI_Data_NetworkingConfiguration.htm">
<HelpTOCNode Title="NetworkingConfiguration Constructor " Url="html/M_MLAPI_Data_NetworkingConfiguration__ctor.htm" />
<HelpTOCNode Id="eac18f7b-b8a7-4176-a22c-b42a21cc0cd9" Title="NetworkingConfiguration Methods" Url="html/Methods_T_MLAPI_Data_NetworkingConfiguration.htm">
<HelpTOCNode Title="CompareConfig Method " Url="html/M_MLAPI_Data_NetworkingConfiguration_CompareConfig.htm" />
<HelpTOCNode Title="GetConfig Method " Url="html/M_MLAPI_Data_NetworkingConfiguration_GetConfig.htm" />
</HelpTOCNode>
<HelpTOCNode Id="569b276c-6667-491a-a3b3-36275735d419" Title="NetworkingConfiguration Fields" Url="html/Fields_T_MLAPI_Data_NetworkingConfiguration.htm">
<HelpTOCNode Title="Address Field" Url="html/F_MLAPI_Data_NetworkingConfiguration_Address.htm" />
<HelpTOCNode Title="AllowPassthroughMessages Field" Url="html/F_MLAPI_Data_NetworkingConfiguration_AllowPassthroughMessages.htm" />
<HelpTOCNode Title="Channels Field" Url="html/F_MLAPI_Data_NetworkingConfiguration_Channels.htm" />
<HelpTOCNode Title="ClientConnectionBufferTimeout Field" Url="html/F_MLAPI_Data_NetworkingConfiguration_ClientConnectionBufferTimeout.htm" />
<HelpTOCNode Title="ConnectionApproval Field" Url="html/F_MLAPI_Data_NetworkingConfiguration_ConnectionApproval.htm" />
<HelpTOCNode Title="ConnectionApprovalCallback Field" Url="html/F_MLAPI_Data_NetworkingConfiguration_ConnectionApprovalCallback.htm" />
<HelpTOCNode Title="ConnectionData Field" Url="html/F_MLAPI_Data_NetworkingConfiguration_ConnectionData.htm" />
<HelpTOCNode Title="EnableEncryption Field" Url="html/F_MLAPI_Data_NetworkingConfiguration_EnableEncryption.htm" />
<HelpTOCNode Title="EnableSceneSwitching Field" Url="html/F_MLAPI_Data_NetworkingConfiguration_EnableSceneSwitching.htm" />
<HelpTOCNode Title="EncryptedChannels Field" Url="html/F_MLAPI_Data_NetworkingConfiguration_EncryptedChannels.htm" />
<HelpTOCNode Title="EventTickrate Field" Url="html/F_MLAPI_Data_NetworkingConfiguration_EventTickrate.htm" />
<HelpTOCNode Title="HandleObjectSpawning Field" Url="html/F_MLAPI_Data_NetworkingConfiguration_HandleObjectSpawning.htm" />
<HelpTOCNode Title="MaxConnections Field" Url="html/F_MLAPI_Data_NetworkingConfiguration_MaxConnections.htm" />
<HelpTOCNode Title="MaxReceiveEventsPerTickRate Field" Url="html/F_MLAPI_Data_NetworkingConfiguration_MaxReceiveEventsPerTickRate.htm" />
<HelpTOCNode Title="MessageBufferSize Field" Url="html/F_MLAPI_Data_NetworkingConfiguration_MessageBufferSize.htm" />
<HelpTOCNode Title="MessageTypes Field" Url="html/F_MLAPI_Data_NetworkingConfiguration_MessageTypes.htm" />
<HelpTOCNode Title="PassthroughMessageTypes Field" Url="html/F_MLAPI_Data_NetworkingConfiguration_PassthroughMessageTypes.htm" />
<HelpTOCNode Title="Port Field" Url="html/F_MLAPI_Data_NetworkingConfiguration_Port.htm" />
<HelpTOCNode Title="ProtocolVersion Field" Url="html/F_MLAPI_Data_NetworkingConfiguration_ProtocolVersion.htm" />
<HelpTOCNode Title="ReceiveTickrate Field" Url="html/F_MLAPI_Data_NetworkingConfiguration_ReceiveTickrate.htm" />
<HelpTOCNode Title="RegisteredScenes Field" Url="html/F_MLAPI_Data_NetworkingConfiguration_RegisteredScenes.htm" />
<HelpTOCNode Title="RSAPrivateKey Field" Url="html/F_MLAPI_Data_NetworkingConfiguration_RSAPrivateKey.htm" />
<HelpTOCNode Title="RSAPublicKey Field" Url="html/F_MLAPI_Data_NetworkingConfiguration_RSAPublicKey.htm" />
<HelpTOCNode Title="SecondsHistory Field" Url="html/F_MLAPI_Data_NetworkingConfiguration_SecondsHistory.htm" />
<HelpTOCNode Title="SendTickrate Field" Url="html/F_MLAPI_Data_NetworkingConfiguration_SendTickrate.htm" />
<HelpTOCNode Title="SignKeyExchange Field" Url="html/F_MLAPI_Data_NetworkingConfiguration_SignKeyExchange.htm" />
</HelpTOCNode>
</HelpTOCNode>
</HelpTOCNode>
<HelpTOCNode Id="da9cc9bb-85b1-4ca3-b0e2-37c2b5cd02d1" Title="MLAPI.MonoBehaviours.Core" Url="html/N_MLAPI_MonoBehaviours_Core.htm">
<HelpTOCNode Id="37a1f473-7977-4b27-b216-f7f6908aa06e" Title="NetworkedBehaviour Class" Url="html/T_MLAPI_MonoBehaviours_Core_NetworkedBehaviour.htm">
<HelpTOCNode Title="NetworkedBehaviour Constructor " Url="html/M_MLAPI_MonoBehaviours_Core_NetworkedBehaviour__ctor.htm" />
<HelpTOCNode Id="1c17b74e-1733-4950-8a55-122c0fd84a91" Title="NetworkedBehaviour Properties" Url="html/Properties_T_MLAPI_MonoBehaviours_Core_NetworkedBehaviour.htm">
<HelpTOCNode Title="isClient Property " Url="html/P_MLAPI_MonoBehaviours_Core_NetworkedBehaviour_isClient.htm" />
<HelpTOCNode Title="isHost Property " Url="html/P_MLAPI_MonoBehaviours_Core_NetworkedBehaviour_isHost.htm" />
<HelpTOCNode Title="isLocalPlayer Property " Url="html/P_MLAPI_MonoBehaviours_Core_NetworkedBehaviour_isLocalPlayer.htm" />
<HelpTOCNode Title="isOwner Property " Url="html/P_MLAPI_MonoBehaviours_Core_NetworkedBehaviour_isOwner.htm" />
<HelpTOCNode Title="isServer Property " Url="html/P_MLAPI_MonoBehaviours_Core_NetworkedBehaviour_isServer.htm" />
<HelpTOCNode Title="networkedObject Property " Url="html/P_MLAPI_MonoBehaviours_Core_NetworkedBehaviour_networkedObject.htm" />
<HelpTOCNode Title="networkId Property " Url="html/P_MLAPI_MonoBehaviours_Core_NetworkedBehaviour_networkId.htm" />
<HelpTOCNode Title="ownerClientId Property " Url="html/P_MLAPI_MonoBehaviours_Core_NetworkedBehaviour_ownerClientId.htm" />
</HelpTOCNode>
<HelpTOCNode Id="ec5ba87b-94b4-4faa-ba86-ce8541472b77" Title="NetworkedBehaviour Methods" Url="html/Methods_T_MLAPI_MonoBehaviours_Core_NetworkedBehaviour.htm">
<HelpTOCNode Title="DeregisterMessageHandler Method " Url="html/M_MLAPI_MonoBehaviours_Core_NetworkedBehaviour_DeregisterMessageHandler.htm" />
<HelpTOCNode Title="GetNetworkedObject Method " Url="html/M_MLAPI_MonoBehaviours_Core_NetworkedBehaviour_GetNetworkedObject.htm" />
<HelpTOCNode Title="NetworkStart Method " Url="html/M_MLAPI_MonoBehaviours_Core_NetworkedBehaviour_NetworkStart.htm" />
<HelpTOCNode Title="OnGainedOwnership Method " Url="html/M_MLAPI_MonoBehaviours_Core_NetworkedBehaviour_OnGainedOwnership.htm" />
<HelpTOCNode Title="OnLostOwnership Method " Url="html/M_MLAPI_MonoBehaviours_Core_NetworkedBehaviour_OnLostOwnership.htm" />
<HelpTOCNode Title="RegisterMessageHandler Method " Url="html/M_MLAPI_MonoBehaviours_Core_NetworkedBehaviour_RegisterMessageHandler.htm" />
<HelpTOCNode Id="e10c87cd-d0ae-496d-bb9a-f011ab6e1a8f" Title="SendToClient Method " Url="html/Overload_MLAPI_MonoBehaviours_Core_NetworkedBehaviour_SendToClient.htm">
<HelpTOCNode Title="SendToClient Method (Int32, String, String, Byte[])" Url="html/M_MLAPI_MonoBehaviours_Core_NetworkedBehaviour_SendToClient.htm" />
<HelpTOCNode Title="SendToClient(T) Method (Int32, String, String, T)" Url="html/M_MLAPI_MonoBehaviours_Core_NetworkedBehaviour_SendToClient__1.htm" />
</HelpTOCNode>
<HelpTOCNode Id="e0cb6da5-1f42-44de-84dc-4415ef190bd3" Title="SendToClients Method " Url="html/Overload_MLAPI_MonoBehaviours_Core_NetworkedBehaviour_SendToClients.htm">
<HelpTOCNode Title="SendToClients Method (String, String, Byte[])" Url="html/M_MLAPI_MonoBehaviours_Core_NetworkedBehaviour_SendToClients_2.htm" />
<HelpTOCNode Title="SendToClients(T) Method (String, String, T)" Url="html/M_MLAPI_MonoBehaviours_Core_NetworkedBehaviour_SendToClients__1_2.htm" />
<HelpTOCNode Title="SendToClients Method (List(Int32), String, String, Byte[])" Url="html/M_MLAPI_MonoBehaviours_Core_NetworkedBehaviour_SendToClients.htm" />
<HelpTOCNode Title="SendToClients(T) Method (List(Int32), String, String, T)" Url="html/M_MLAPI_MonoBehaviours_Core_NetworkedBehaviour_SendToClients__1.htm" />
<HelpTOCNode Title="SendToClients Method (Int32[], String, String, Byte[])" Url="html/M_MLAPI_MonoBehaviours_Core_NetworkedBehaviour_SendToClients_1.htm" />
<HelpTOCNode Title="SendToClients(T) Method (Int32[], String, String, T)" Url="html/M_MLAPI_MonoBehaviours_Core_NetworkedBehaviour_SendToClients__1_1.htm" />
</HelpTOCNode>
<HelpTOCNode Id="4b047b2a-104c-408c-8e6a-0e2a7894bd0a" Title="SendToClientsTarget Method " Url="html/Overload_MLAPI_MonoBehaviours_Core_NetworkedBehaviour_SendToClientsTarget.htm">
<HelpTOCNode Title="SendToClientsTarget Method (String, String, Byte[])" Url="html/M_MLAPI_MonoBehaviours_Core_NetworkedBehaviour_SendToClientsTarget_2.htm" />
<HelpTOCNode Title="SendToClientsTarget(T) Method (String, String, T)" Url="html/M_MLAPI_MonoBehaviours_Core_NetworkedBehaviour_SendToClientsTarget__1_2.htm" />
<HelpTOCNode Title="SendToClientsTarget Method (List(Int32), String, String, Byte[])" Url="html/M_MLAPI_MonoBehaviours_Core_NetworkedBehaviour_SendToClientsTarget.htm" />
<HelpTOCNode Title="SendToClientsTarget(T) Method (List(Int32), String, String, T)" Url="html/M_MLAPI_MonoBehaviours_Core_NetworkedBehaviour_SendToClientsTarget__1.htm" />
<HelpTOCNode Title="SendToClientsTarget Method (Int32[], String, String, Byte[])" Url="html/M_MLAPI_MonoBehaviours_Core_NetworkedBehaviour_SendToClientsTarget_1.htm" />
<HelpTOCNode Title="SendToClientsTarget(T) Method (Int32[], String, String, T)" Url="html/M_MLAPI_MonoBehaviours_Core_NetworkedBehaviour_SendToClientsTarget__1_1.htm" />
</HelpTOCNode>
<HelpTOCNode Id="1a68086f-f987-4a6b-af2b-77d0826ef55b" Title="SendToClientTarget Method " Url="html/Overload_MLAPI_MonoBehaviours_Core_NetworkedBehaviour_SendToClientTarget.htm">
<HelpTOCNode Title="SendToClientTarget Method (Int32, String, String, Byte[])" Url="html/M_MLAPI_MonoBehaviours_Core_NetworkedBehaviour_SendToClientTarget.htm" />
<HelpTOCNode Title="SendToClientTarget(T) Method (Int32, String, String, T)" Url="html/M_MLAPI_MonoBehaviours_Core_NetworkedBehaviour_SendToClientTarget__1.htm" />
</HelpTOCNode>
<HelpTOCNode Id="8205cbbe-c0a3-4c5a-9b2f-23249fafca0c" Title="SendToLocalClient Method " Url="html/Overload_MLAPI_MonoBehaviours_Core_NetworkedBehaviour_SendToLocalClient.htm">
<HelpTOCNode Title="SendToLocalClient Method (String, String, Byte[])" Url="html/M_MLAPI_MonoBehaviours_Core_NetworkedBehaviour_SendToLocalClient.htm" />
<HelpTOCNode Title="SendToLocalClient(T) Method (String, String, T)" Url="html/M_MLAPI_MonoBehaviours_Core_NetworkedBehaviour_SendToLocalClient__1.htm" />
</HelpTOCNode>
<HelpTOCNode Id="2fc1660f-f382-4427-9aa9-219462a9bc70" Title="SendToLocalClientTarget Method " Url="html/Overload_MLAPI_MonoBehaviours_Core_NetworkedBehaviour_SendToLocalClientTarget.htm">
<HelpTOCNode Title="SendToLocalClientTarget Method (String, String, Byte[])" Url="html/M_MLAPI_MonoBehaviours_Core_NetworkedBehaviour_SendToLocalClientTarget.htm" />
<HelpTOCNode Title="SendToLocalClientTarget(T) Method (String, String, T)" Url="html/M_MLAPI_MonoBehaviours_Core_NetworkedBehaviour_SendToLocalClientTarget__1.htm" />
</HelpTOCNode>
<HelpTOCNode Id="acfca73e-811e-4009-b5c0-c1526b0a2ab1" Title="SendToNonLocalClients Method " Url="html/Overload_MLAPI_MonoBehaviours_Core_NetworkedBehaviour_SendToNonLocalClients.htm">
<HelpTOCNode Title="SendToNonLocalClients Method (String, String, Byte[])" Url="html/M_MLAPI_MonoBehaviours_Core_NetworkedBehaviour_SendToNonLocalClients.htm" />
<HelpTOCNode Title="SendToNonLocalClients(T) Method (String, String, T)" Url="html/M_MLAPI_MonoBehaviours_Core_NetworkedBehaviour_SendToNonLocalClients__1.htm" />
</HelpTOCNode>
<HelpTOCNode Id="d695b184-a442-4fd4-8507-bfbaabfc662c" Title="SendToNonLocalClientsTarget Method " Url="html/Overload_MLAPI_MonoBehaviours_Core_NetworkedBehaviour_SendToNonLocalClientsTarget.htm">
<HelpTOCNode Title="SendToNonLocalClientsTarget Method (String, String, Byte[])" Url="html/M_MLAPI_MonoBehaviours_Core_NetworkedBehaviour_SendToNonLocalClientsTarget.htm" />
<HelpTOCNode Title="SendToNonLocalClientsTarget(T) Method (String, String, T)" Url="html/M_MLAPI_MonoBehaviours_Core_NetworkedBehaviour_SendToNonLocalClientsTarget__1.htm" />
</HelpTOCNode>
<HelpTOCNode Id="f4438b07-52ca-41d9-aca7-b1937e9d960c" Title="SendToServer Method " Url="html/Overload_MLAPI_MonoBehaviours_Core_NetworkedBehaviour_SendToServer.htm">
<HelpTOCNode Title="SendToServer Method (String, String, Byte[])" Url="html/M_MLAPI_MonoBehaviours_Core_NetworkedBehaviour_SendToServer.htm" />
<HelpTOCNode Title="SendToServer(T) Method (String, String, T)" Url="html/M_MLAPI_MonoBehaviours_Core_NetworkedBehaviour_SendToServer__1.htm" />
</HelpTOCNode>
<HelpTOCNode Id="1d44bc9c-07a0-4320-86ad-ebc7170caf4f" Title="SendToServerTarget Method " Url="html/Overload_MLAPI_MonoBehaviours_Core_NetworkedBehaviour_SendToServerTarget.htm">
<HelpTOCNode Title="SendToServerTarget Method (String, String, Byte[])" Url="html/M_MLAPI_MonoBehaviours_Core_NetworkedBehaviour_SendToServerTarget.htm" />
<HelpTOCNode Title="SendToServerTarget(T) Method (String, String, T)" Url="html/M_MLAPI_MonoBehaviours_Core_NetworkedBehaviour_SendToServerTarget__1.htm" />
</HelpTOCNode>
</HelpTOCNode>
<HelpTOCNode Id="8b3e5c15-da39-4dca-8d53-fc80062d9552" Title="NetworkedBehaviour Fields" Url="html/Fields_T_MLAPI_MonoBehaviours_Core_NetworkedBehaviour.htm">
<HelpTOCNode Title="SyncVarSyncDelay Field" Url="html/F_MLAPI_MonoBehaviours_Core_NetworkedBehaviour_SyncVarSyncDelay.htm" />
</HelpTOCNode>
</HelpTOCNode>
<HelpTOCNode Id="a63ac209-202e-4565-ae0e-5f0edea4a879" Title="NetworkedObject Class" Url="html/T_MLAPI_MonoBehaviours_Core_NetworkedObject.htm">
<HelpTOCNode Title="NetworkedObject Constructor " Url="html/M_MLAPI_MonoBehaviours_Core_NetworkedObject__ctor.htm" />
<HelpTOCNode Id="bdc19fc5-829a-4ab8-9720-be4db9972b5a" Title="NetworkedObject Properties" Url="html/Properties_T_MLAPI_MonoBehaviours_Core_NetworkedObject.htm">
<HelpTOCNode Title="isLocalPlayer Property " Url="html/P_MLAPI_MonoBehaviours_Core_NetworkedObject_isLocalPlayer.htm" />
<HelpTOCNode Title="isOwner Property " Url="html/P_MLAPI_MonoBehaviours_Core_NetworkedObject_isOwner.htm" />
<HelpTOCNode Title="isPlayerObject Property " Url="html/P_MLAPI_MonoBehaviours_Core_NetworkedObject_isPlayerObject.htm" />
<HelpTOCNode Title="isPooledObject Property " Url="html/P_MLAPI_MonoBehaviours_Core_NetworkedObject_isPooledObject.htm" />
<HelpTOCNode Title="isSpawned Property " Url="html/P_MLAPI_MonoBehaviours_Core_NetworkedObject_isSpawned.htm" />
<HelpTOCNode Title="NetworkId Property " Url="html/P_MLAPI_MonoBehaviours_Core_NetworkedObject_NetworkId.htm" />
<HelpTOCNode Title="OwnerClientId Property " Url="html/P_MLAPI_MonoBehaviours_Core_NetworkedObject_OwnerClientId.htm" />
<HelpTOCNode Title="PoolId Property " Url="html/P_MLAPI_MonoBehaviours_Core_NetworkedObject_PoolId.htm" />
<HelpTOCNode Title="SpawnablePrefabIndex Property " Url="html/P_MLAPI_MonoBehaviours_Core_NetworkedObject_SpawnablePrefabIndex.htm" />
</HelpTOCNode>
<HelpTOCNode Id="e5bfca6f-74a9-4135-ae0e-119a79f35a19" Title="NetworkedObject Methods" Url="html/Methods_T_MLAPI_MonoBehaviours_Core_NetworkedObject.htm">
<HelpTOCNode Title="ChangeOwnership Method " Url="html/M_MLAPI_MonoBehaviours_Core_NetworkedObject_ChangeOwnership.htm" />
<HelpTOCNode Title="RemoveOwnership Method " Url="html/M_MLAPI_MonoBehaviours_Core_NetworkedObject_RemoveOwnership.htm" />
<HelpTOCNode Title="Spawn Method " Url="html/M_MLAPI_MonoBehaviours_Core_NetworkedObject_Spawn.htm" />
<HelpTOCNode Title="SpawnWithOwnership Method " Url="html/M_MLAPI_MonoBehaviours_Core_NetworkedObject_SpawnWithOwnership.htm" />
</HelpTOCNode>
<HelpTOCNode Id="58947793-826e-4d67-b8ed-481863b8fd39" Title="NetworkedObject Fields" Url="html/Fields_T_MLAPI_MonoBehaviours_Core_NetworkedObject.htm">
<HelpTOCNode Title="ServerOnly Field" Url="html/F_MLAPI_MonoBehaviours_Core_NetworkedObject_ServerOnly.htm" />
</HelpTOCNode>
</HelpTOCNode>
<HelpTOCNode Id="915f79e6-2d78-4e16-9acd-7f41e2d50a1a" Title="NetworkingManager Class" Url="html/T_MLAPI_MonoBehaviours_Core_NetworkingManager.htm">
<HelpTOCNode Title="NetworkingManager Constructor " Url="html/M_MLAPI_MonoBehaviours_Core_NetworkingManager__ctor.htm" />
<HelpTOCNode Id="83bee0fa-4463-475e-8117-e04e2a75d0e6" Title="NetworkingManager Properties" Url="html/Properties_T_MLAPI_MonoBehaviours_Core_NetworkingManager.htm">
<HelpTOCNode Title="ConnectedClients Property " Url="html/P_MLAPI_MonoBehaviours_Core_NetworkingManager_ConnectedClients.htm" />
<HelpTOCNode Title="isClient Property " Url="html/P_MLAPI_MonoBehaviours_Core_NetworkingManager_isClient.htm" />
<HelpTOCNode Title="IsClientConnected Property " Url="html/P_MLAPI_MonoBehaviours_Core_NetworkingManager_IsClientConnected.htm" />
<HelpTOCNode Title="isHost Property " Url="html/P_MLAPI_MonoBehaviours_Core_NetworkingManager_isHost.htm" />
<HelpTOCNode Title="isServer Property " Url="html/P_MLAPI_MonoBehaviours_Core_NetworkingManager_isServer.htm" />
<HelpTOCNode Title="MyClientId Property " Url="html/P_MLAPI_MonoBehaviours_Core_NetworkingManager_MyClientId.htm" />
<HelpTOCNode Title="NetworkTime Property " Url="html/P_MLAPI_MonoBehaviours_Core_NetworkingManager_NetworkTime.htm" />
<HelpTOCNode Title="singleton Property " Url="html/P_MLAPI_MonoBehaviours_Core_NetworkingManager_singleton.htm" />
</HelpTOCNode>
<HelpTOCNode Id="f1c9b535-86db-4155-b24a-5a3a340fe83d" Title="NetworkingManager Methods" Url="html/Methods_T_MLAPI_MonoBehaviours_Core_NetworkingManager.htm">
<HelpTOCNode Title="StartClient Method " Url="html/M_MLAPI_MonoBehaviours_Core_NetworkingManager_StartClient.htm" />
<HelpTOCNode Title="StartHost Method " Url="html/M_MLAPI_MonoBehaviours_Core_NetworkingManager_StartHost.htm" />
<HelpTOCNode Title="StartServer Method " Url="html/M_MLAPI_MonoBehaviours_Core_NetworkingManager_StartServer.htm" />
<HelpTOCNode Title="StopClient Method " Url="html/M_MLAPI_MonoBehaviours_Core_NetworkingManager_StopClient.htm" />
<HelpTOCNode Title="StopHost Method " Url="html/M_MLAPI_MonoBehaviours_Core_NetworkingManager_StopHost.htm" />
<HelpTOCNode Title="StopServer Method " Url="html/M_MLAPI_MonoBehaviours_Core_NetworkingManager_StopServer.htm" />
</HelpTOCNode>
<HelpTOCNode Id="26b6709a-4d11-4fc4-9a82-3c432b4cd913" Title="NetworkingManager Fields" Url="html/Fields_T_MLAPI_MonoBehaviours_Core_NetworkingManager.htm">
<HelpTOCNode Title="DefaultPlayerPrefab Field" Url="html/F_MLAPI_MonoBehaviours_Core_NetworkingManager_DefaultPlayerPrefab.htm" />
<HelpTOCNode Title="DontDestroy Field" Url="html/F_MLAPI_MonoBehaviours_Core_NetworkingManager_DontDestroy.htm" />
<HelpTOCNode Title="NetworkConfig Field" Url="html/F_MLAPI_MonoBehaviours_Core_NetworkingManager_NetworkConfig.htm" />
<HelpTOCNode Title="OnClientConnectedCallback Field" Url="html/F_MLAPI_MonoBehaviours_Core_NetworkingManager_OnClientConnectedCallback.htm" />
<HelpTOCNode Title="OnClientDisconnectCallback Field" Url="html/F_MLAPI_MonoBehaviours_Core_NetworkingManager_OnClientDisconnectCallback.htm" />
<HelpTOCNode Title="OnServerStarted Field" Url="html/F_MLAPI_MonoBehaviours_Core_NetworkingManager_OnServerStarted.htm" />
<HelpTOCNode Title="RunInBackground Field" Url="html/F_MLAPI_MonoBehaviours_Core_NetworkingManager_RunInBackground.htm" />
<HelpTOCNode Title="SpawnablePrefabs Field" Url="html/F_MLAPI_MonoBehaviours_Core_NetworkingManager_SpawnablePrefabs.htm" />
</HelpTOCNode>
</HelpTOCNode>
<HelpTOCNode Id="8f47dbe5-66ac-48e5-9233-779522790943" Title="TrackedObject Class" Url="html/T_MLAPI_MonoBehaviours_Core_TrackedObject.htm">
<HelpTOCNode Title="TrackedObject Constructor " Url="html/M_MLAPI_MonoBehaviours_Core_TrackedObject__ctor.htm" />
<HelpTOCNode Title="TrackedObject Properties" Url="html/Properties_T_MLAPI_MonoBehaviours_Core_TrackedObject.htm" />
<HelpTOCNode Title="TrackedObject Methods" Url="html/Methods_T_MLAPI_MonoBehaviours_Core_TrackedObject.htm" />
</HelpTOCNode>
</HelpTOCNode>
<HelpTOCNode Id="e5db78aa-0a53-44ba-b991-e4e5e6ee6d82" Title="MLAPI.MonoBehaviours.Prototyping" Url="html/N_MLAPI_MonoBehaviours_Prototyping.htm">
<HelpTOCNode Id="7ae94f17-f384-4058-90e0-86a2be98970d" Title="NetworkedAnimator Class" Url="html/T_MLAPI_MonoBehaviours_Prototyping_NetworkedAnimator.htm">
<HelpTOCNode Title="NetworkedAnimator Constructor " Url="html/M_MLAPI_MonoBehaviours_Prototyping_NetworkedAnimator__ctor.htm" />
<HelpTOCNode Id="1f672e2f-08c2-413c-88ec-8e1ec296d843" Title="NetworkedAnimator Properties" Url="html/Properties_T_MLAPI_MonoBehaviours_Prototyping_NetworkedAnimator.htm">
<HelpTOCNode Title="animator Property " Url="html/P_MLAPI_MonoBehaviours_Prototyping_NetworkedAnimator_animator.htm" />
</HelpTOCNode>
<HelpTOCNode Id="81589993-6f59-4191-ad0f-84ff316124d5" Title="NetworkedAnimator Methods" Url="html/Methods_T_MLAPI_MonoBehaviours_Prototyping_NetworkedAnimator.htm">
<HelpTOCNode Title="GetParameterAutoSend Method " Url="html/M_MLAPI_MonoBehaviours_Prototyping_NetworkedAnimator_GetParameterAutoSend.htm" />
<HelpTOCNode Title="NetworkStart Method " Url="html/M_MLAPI_MonoBehaviours_Prototyping_NetworkedAnimator_NetworkStart.htm" />
<HelpTOCNode Title="ResetParameterOptions Method " Url="html/M_MLAPI_MonoBehaviours_Prototyping_NetworkedAnimator_ResetParameterOptions.htm" />
<HelpTOCNode Title="SetParameterAutoSend Method " Url="html/M_MLAPI_MonoBehaviours_Prototyping_NetworkedAnimator_SetParameterAutoSend.htm" />
<HelpTOCNode Id="714708b0-71a0-4040-82ac-e2699037beb6" Title="SetTrigger Method " Url="html/Overload_MLAPI_MonoBehaviours_Prototyping_NetworkedAnimator_SetTrigger.htm">
<HelpTOCNode Title="SetTrigger Method (Int32)" Url="html/M_MLAPI_MonoBehaviours_Prototyping_NetworkedAnimator_SetTrigger.htm" />
<HelpTOCNode Title="SetTrigger Method (String)" Url="html/M_MLAPI_MonoBehaviours_Prototyping_NetworkedAnimator_SetTrigger_1.htm" />
</HelpTOCNode>
</HelpTOCNode>
<HelpTOCNode Id="2a2c1e11-a252-4763-8358-fefbba63217f" Title="NetworkedAnimator Fields" Url="html/Fields_T_MLAPI_MonoBehaviours_Prototyping_NetworkedAnimator.htm">
<HelpTOCNode Title="EnableProximity Field" Url="html/F_MLAPI_MonoBehaviours_Prototyping_NetworkedAnimator_EnableProximity.htm" />
<HelpTOCNode Title="param0 Field" Url="html/F_MLAPI_MonoBehaviours_Prototyping_NetworkedAnimator_param0.htm" />
<HelpTOCNode Title="param1 Field" Url="html/F_MLAPI_MonoBehaviours_Prototyping_NetworkedAnimator_param1.htm" />
<HelpTOCNode Title="param2 Field" Url="html/F_MLAPI_MonoBehaviours_Prototyping_NetworkedAnimator_param2.htm" />
<HelpTOCNode Title="param3 Field" Url="html/F_MLAPI_MonoBehaviours_Prototyping_NetworkedAnimator_param3.htm" />
<HelpTOCNode Title="param4 Field" Url="html/F_MLAPI_MonoBehaviours_Prototyping_NetworkedAnimator_param4.htm" />
<HelpTOCNode Title="param5 Field" Url="html/F_MLAPI_MonoBehaviours_Prototyping_NetworkedAnimator_param5.htm" />
<HelpTOCNode Title="ProximityRange Field" Url="html/F_MLAPI_MonoBehaviours_Prototyping_NetworkedAnimator_ProximityRange.htm" />
</HelpTOCNode>
</HelpTOCNode>
<HelpTOCNode Id="64c45f02-a247-4d89-ac41-2ac2c89d814c" Title="NetworkedNavMeshAgent Class" Url="html/T_MLAPI_MonoBehaviours_Prototyping_NetworkedNavMeshAgent.htm">
<HelpTOCNode Title="NetworkedNavMeshAgent Constructor " Url="html/M_MLAPI_MonoBehaviours_Prototyping_NetworkedNavMeshAgent__ctor.htm" />
<HelpTOCNode Title="NetworkedNavMeshAgent Properties" Url="html/Properties_T_MLAPI_MonoBehaviours_Prototyping_NetworkedNavMeshAgent.htm" />
<HelpTOCNode Id="0a57ad5b-6eb4-4143-971d-bf0cddfe0066" Title="NetworkedNavMeshAgent Methods" Url="html/Methods_T_MLAPI_MonoBehaviours_Prototyping_NetworkedNavMeshAgent.htm">
<HelpTOCNode Title="NetworkStart Method " Url="html/M_MLAPI_MonoBehaviours_Prototyping_NetworkedNavMeshAgent_NetworkStart.htm" />
</HelpTOCNode>
<HelpTOCNode Id="52c0b6c8-b31a-4512-8e04-a683ab909f7d" Title="NetworkedNavMeshAgent Fields" Url="html/Fields_T_MLAPI_MonoBehaviours_Prototyping_NetworkedNavMeshAgent.htm">
<HelpTOCNode Title="CorrectionDelay Field" Url="html/F_MLAPI_MonoBehaviours_Prototyping_NetworkedNavMeshAgent_CorrectionDelay.htm" />
<HelpTOCNode Title="DriftCorrectionPercentage Field" Url="html/F_MLAPI_MonoBehaviours_Prototyping_NetworkedNavMeshAgent_DriftCorrectionPercentage.htm" />
<HelpTOCNode Title="EnableProximity Field" Url="html/F_MLAPI_MonoBehaviours_Prototyping_NetworkedNavMeshAgent_EnableProximity.htm" />
<HelpTOCNode Title="ProximityRange Field" Url="html/F_MLAPI_MonoBehaviours_Prototyping_NetworkedNavMeshAgent_ProximityRange.htm" />
<HelpTOCNode Title="WarpOnDestinationChange Field" Url="html/F_MLAPI_MonoBehaviours_Prototyping_NetworkedNavMeshAgent_WarpOnDestinationChange.htm" />
</HelpTOCNode>
</HelpTOCNode>
<HelpTOCNode Id="69e42996-135d-4eaa-89ea-b3d5906bb02d" Title="NetworkedTransform Class" Url="html/T_MLAPI_MonoBehaviours_Prototyping_NetworkedTransform.htm">
<HelpTOCNode Title="NetworkedTransform Constructor " Url="html/M_MLAPI_MonoBehaviours_Prototyping_NetworkedTransform__ctor.htm" />
<HelpTOCNode Title="NetworkedTransform Properties" Url="html/Properties_T_MLAPI_MonoBehaviours_Prototyping_NetworkedTransform.htm" />
<HelpTOCNode Id="4d76b8be-a5ce-4b66-80d4-c845c5d250dc" Title="NetworkedTransform Methods" Url="html/Methods_T_MLAPI_MonoBehaviours_Prototyping_NetworkedTransform.htm">
<HelpTOCNode Title="NetworkStart Method " Url="html/M_MLAPI_MonoBehaviours_Prototyping_NetworkedTransform_NetworkStart.htm" />
</HelpTOCNode>
<HelpTOCNode Id="a5c6724b-ba1f-4c73-9adb-63ea93fb817e" Title="NetworkedTransform Fields" Url="html/Fields_T_MLAPI_MonoBehaviours_Prototyping_NetworkedTransform.htm">
<HelpTOCNode Title="AssumeSyncedSends Field" Url="html/F_MLAPI_MonoBehaviours_Prototyping_NetworkedTransform_AssumeSyncedSends.htm" />
<HelpTOCNode Title="EnableProximity Field" Url="html/F_MLAPI_MonoBehaviours_Prototyping_NetworkedTransform_EnableProximity.htm" />
<HelpTOCNode Title="InterpolatePosition Field" Url="html/F_MLAPI_MonoBehaviours_Prototyping_NetworkedTransform_InterpolatePosition.htm" />
<HelpTOCNode Title="InterpolateServer Field" Url="html/F_MLAPI_MonoBehaviours_Prototyping_NetworkedTransform_InterpolateServer.htm" />
<HelpTOCNode Title="MinDegrees Field" Url="html/F_MLAPI_MonoBehaviours_Prototyping_NetworkedTransform_MinDegrees.htm" />
<HelpTOCNode Title="MinMeters Field" Url="html/F_MLAPI_MonoBehaviours_Prototyping_NetworkedTransform_MinMeters.htm" />
<HelpTOCNode Title="ProximityRange Field" Url="html/F_MLAPI_MonoBehaviours_Prototyping_NetworkedTransform_ProximityRange.htm" />
<HelpTOCNode Title="SendsPerSecond Field" Url="html/F_MLAPI_MonoBehaviours_Prototyping_NetworkedTransform_SendsPerSecond.htm" />
<HelpTOCNode Title="SnapDistance Field" Url="html/F_MLAPI_MonoBehaviours_Prototyping_NetworkedTransform_SnapDistance.htm" />
</HelpTOCNode>
</HelpTOCNode>
</HelpTOCNode>
<HelpTOCNode Id="b7dc15f1-ac0a-440d-92de-851c7e4ccec0" Title="MLAPI.NetworkingManagerComponents.Binary" Url="html/N_MLAPI_NetworkingManagerComponents_Binary.htm">
<HelpTOCNode Id="1cd34ea5-cf58-4bbc-abd3-740aac7f1769" Title="BinarySerializer Class" Url="html/T_MLAPI_NetworkingManagerComponents_Binary_BinarySerializer.htm">
<HelpTOCNode Id="7ddaf4cd-af73-45bb-b769-26d0e1f21c0c" Title="BinarySerializer Methods" Url="html/Methods_T_MLAPI_NetworkingManagerComponents_Binary_BinarySerializer.htm">
<HelpTOCNode Title="ClearCache Method " Url="html/M_MLAPI_NetworkingManagerComponents_Binary_BinarySerializer_ClearCache.htm" />
<HelpTOCNode Title="Deserialize(T) Method " Url="html/M_MLAPI_NetworkingManagerComponents_Binary_BinarySerializer_Deserialize__1.htm" />
<HelpTOCNode Title="Serialize(T) Method " Url="html/M_MLAPI_NetworkingManagerComponents_Binary_BinarySerializer_Serialize__1.htm" />
</HelpTOCNode>
</HelpTOCNode>
<HelpTOCNode Id="0b939441-3f2c-4cca-bdc9-d6a78e0586d2" Title="MessageChunker Class" Url="html/T_MLAPI_NetworkingManagerComponents_Binary_MessageChunker.htm">
<HelpTOCNode Id="00f73ea8-126b-4c9e-b916-e86344074cd3" Title="MessageChunker Methods" Url="html/Methods_T_MLAPI_NetworkingManagerComponents_Binary_MessageChunker.htm">
<HelpTOCNode Title="GetChunkedMessage Method " Url="html/M_MLAPI_NetworkingManagerComponents_Binary_MessageChunker_GetChunkedMessage.htm" />
<HelpTOCNode Title="GetMessageOrdered Method " Url="html/M_MLAPI_NetworkingManagerComponents_Binary_MessageChunker_GetMessageOrdered.htm" />
<HelpTOCNode Title="GetMessageUnordered Method " Url="html/M_MLAPI_NetworkingManagerComponents_Binary_MessageChunker_GetMessageUnordered.htm" />
<HelpTOCNode Title="HasDuplicates Method " Url="html/M_MLAPI_NetworkingManagerComponents_Binary_MessageChunker_HasDuplicates.htm" />
<HelpTOCNode Title="HasMissingParts Method " Url="html/M_MLAPI_NetworkingManagerComponents_Binary_MessageChunker_HasMissingParts.htm" />
<HelpTOCNode Title="IsOrdered Method " Url="html/M_MLAPI_NetworkingManagerComponents_Binary_MessageChunker_IsOrdered.htm" />
</HelpTOCNode>
</HelpTOCNode>
</HelpTOCNode>
<HelpTOCNode Id="be7f225a-d039-48b5-b037-c67df836e7e5" Title="MLAPI.NetworkingManagerComponents.Core" Url="html/N_MLAPI_NetworkingManagerComponents_Core.htm">
<HelpTOCNode Id="78f77132-ff90-4f73-961a-97c6842cb76e" Title="LagCompensationManager Class" Url="html/T_MLAPI_NetworkingManagerComponents_Core_LagCompensationManager.htm">
<HelpTOCNode Id="4c4fe0dd-463a-4316-90a3-2728fc048e00" Title="LagCompensationManager Properties" Url="html/Properties_T_MLAPI_NetworkingManagerComponents_Core_LagCompensationManager.htm">
<HelpTOCNode Title="SimulationObjects Property " Url="html/P_MLAPI_NetworkingManagerComponents_Core_LagCompensationManager_SimulationObjects.htm" />
</HelpTOCNode>
<HelpTOCNode Id="90899fc4-bf79-4083-92cd-17aadac05cbf" Title="LagCompensationManager Methods" Url="html/Methods_T_MLAPI_NetworkingManagerComponents_Core_LagCompensationManager.htm">
<HelpTOCNode Id="6894eb7d-b292-4d9d-849d-42eb9a14992d" Title="Simulate Method " Url="html/Overload_MLAPI_NetworkingManagerComponents_Core_LagCompensationManager_Simulate.htm">
<HelpTOCNode Title="Simulate Method (Int32, Action)" Url="html/M_MLAPI_NetworkingManagerComponents_Core_LagCompensationManager_Simulate.htm" />
<HelpTOCNode Title="Simulate Method (Single, Action)" Url="html/M_MLAPI_NetworkingManagerComponents_Core_LagCompensationManager_Simulate_1.htm" />
</HelpTOCNode>
</HelpTOCNode>
</HelpTOCNode>
<HelpTOCNode Id="32a722ed-6329-4367-a80c-cadb18af32c5" Title="NetworkPoolManager Class" Url="html/T_MLAPI_NetworkingManagerComponents_Core_NetworkPoolManager.htm">
<HelpTOCNode Id="560b4766-cf58-404b-a3a8-a1e11a5df9c4" Title="NetworkPoolManager Methods" Url="html/Methods_T_MLAPI_NetworkingManagerComponents_Core_NetworkPoolManager.htm">
<HelpTOCNode Title="CreatePool Method " Url="html/M_MLAPI_NetworkingManagerComponents_Core_NetworkPoolManager_CreatePool.htm" />
<HelpTOCNode Title="DestroyPool Method " Url="html/M_MLAPI_NetworkingManagerComponents_Core_NetworkPoolManager_DestroyPool.htm" />
<HelpTOCNode Title="DestroyPoolObject Method " Url="html/M_MLAPI_NetworkingManagerComponents_Core_NetworkPoolManager_DestroyPoolObject.htm" />
<HelpTOCNode Title="SpawnPoolObject Method " Url="html/M_MLAPI_NetworkingManagerComponents_Core_NetworkPoolManager_SpawnPoolObject.htm" />
</HelpTOCNode>
</HelpTOCNode>
<HelpTOCNode Id="e3f8826a-a4c7-422a-8659-1c6e94981ecb" Title="NetworkSceneManager Class" Url="html/T_MLAPI_NetworkingManagerComponents_Core_NetworkSceneManager.htm">
<HelpTOCNode Id="037e49e4-0839-4039-8824-71ac412d046a" Title="NetworkSceneManager Methods" Url="html/Methods_T_MLAPI_NetworkingManagerComponents_Core_NetworkSceneManager.htm">
<HelpTOCNode Title="SwitchScene Method " Url="html/M_MLAPI_NetworkingManagerComponents_Core_NetworkSceneManager_SwitchScene.htm" />
</HelpTOCNode>
</HelpTOCNode>
</HelpTOCNode>
<HelpTOCNode Id="6f8aa334-964e-4118-9ae8-ef9670fa52de" Title="MLAPI.NetworkingManagerComponents.Cryptography" Url="html/N_MLAPI_NetworkingManagerComponents_Cryptography.htm">
<HelpTOCNode Id="e557204e-914d-4248-9fd2-97255fb9c879" Title="CryptographyHelper Class" Url="html/T_MLAPI_NetworkingManagerComponents_Cryptography_CryptographyHelper.htm">
<HelpTOCNode Id="64e9a882-2131-4717-a1c8-c2b7ba57487f" Title="CryptographyHelper Methods" Url="html/Methods_T_MLAPI_NetworkingManagerComponents_Cryptography_CryptographyHelper.htm">
<HelpTOCNode Title="Decrypt Method " Url="html/M_MLAPI_NetworkingManagerComponents_Cryptography_CryptographyHelper_Decrypt.htm" />
<HelpTOCNode Title="Encrypt Method " Url="html/M_MLAPI_NetworkingManagerComponents_Cryptography_CryptographyHelper_Encrypt.htm" />
</HelpTOCNode>
</HelpTOCNode>
</HelpTOCNode>
</HelpTOC>

1
docs/fti/FTI_100.json Normal file

File diff suppressed because one or more lines are too long

1
docs/fti/FTI_101.json Normal file
View File

@ -0,0 +1 @@
{"exposes":[65537,196609,262145,327681,393217,458753,524289,589825,720897,4325377,4718593,5046273,5111809,5373953,5505025,5570561,6029313,6619137,7405569,8650753,8847361,11337729,11468801,11599873,11730945,11796481,11993089,12189697,12255233,12648449,12910593,14221313,14352385,14417921,14680065,14811137,14942209,15204353,15335425,15466497,15532033,15597569,15663105,15728641,15794177,15859713,15925249,15990785,16056321,16121857,16187393,16252929],"entered":[13828097],"estimated":[4784129,10551297,13762561,16121857],"encryptedbuffer":[10092546],"exchange":[327683,2228225,2424833,3014657,15466499],"examples":[327681,2097153,15466497],"encrypted":[327681,1703937,5570561,10813443,14221313,15466497],"events":[327681,2097153,15466497],"expected":[9633793,12124161],"enabled":[458753,589825,720897,2883585,3670017,3866625,11599873,11730945,11993089,12189697,12255233,12648449,12910593,15532033,15597570,15663105,15728641,15794177,15859714,15925250],"executing":[11599875,12255235,12320769,12648451,12779521,12845057,12910595,15532035,15597571,15859715,15925251],"extent":[327681,1966081,15466497],"equals":[4325377,4718593,5046273,5505025,6029313,6619137,7405569,8650753,8847361,11468801,14352385,14942209,15204353,15335425,15466497,15532033,15597569,15663105,15728641,15794177,15859713,15925249],"encryptedchannels":[327681,1703938,15466497],"error":[5308418],"enableproximity":[458753,589825,720897,2883586,3670018,3866626,15597569,15859713,15925249],"enable":[327683,589825,1179649,1441793,3014657,4521985,15466499,15925249],"enablesceneswitching":[327681,1441794,15466497],"emptied":[327681,2162689,15466497],"example":[655361,786433,851969,917505,983041,1048577,1114113,1179649,1245185,1310721,1376257,1441793,1507329,1572865,1638401,1703937,1769473,1835009,1900545,1966081,2031617,2097153,2162689,2228225,2293761,2359297,2424833,2490369,2555905,2621441,2686977,2752513,2818049,2883585,2949121,3014657,3080193,3145729,3211265,3276801,3342337,3407873,3473409,3538945,3604481,3670017,3735553,3801089,3866625,3932161,3997697,4063233,4128769,4194305,4259841,4390913,4456449,4521985,4587521,4653057,4849665,4915201,4980737,5177345,5242881,5439489,5636097,5701633,5767169,5832705,5898241,5963777,6094849,6160385,6225921,6291457,6356993,6422529,6488065,6553601,6684673,6750209,6815745,6881281,6946817,7012353,7077889,7143425,7208961,7274497,7340033,7471105,7536641,7602177,7667713,7733249,7798785,7864321,7929857,7995393,8060929,8126465,8192001,8257537,8323073,8388609,8454145,8519681,8585217,8716289,8781825,8912897,8978433,9043969,9109505,9175041,9240577,9306113,9371649,9437185,9502721,9568257,9633793,9699329,9764865,9830401,10027009,10092545,10223617,10289153,10354689,10420225,10485761,10551297,10616833,10682369,10747905,10813441,10944513,11075585,11141121,11206657,12058625,12124161,12320769,12386305,12451841,12517377,12779521,12845057,12976129,13041665,13172737,13303809,13369345,13500417,13565953,13697025,13893633,13959169,14024705,14090241,14221313,14286849,14483457,14548993,14614529,14745601,14876673,14942209,15007745,15073281,15138817,15204353,15269889,15335425,15400961,15466497,15532033,15597569,15663105,15728641,15794177,15859713,15925249,15990785,16056321,16121857,16187393,16252929],"encrypts":[5570561,10813441,14221313],"eventtickrate":[327681,2097154,15466497],"expectedchunkscount":[9633794,12124162],"encryption":[262145,327681,851969,1179649,9961473,14221313,15335425,15466497],"enableencryption":[327681,1179650,15466497],"encoded":[5570562,10092545,10813442,14221314],"encrypt":[5570561,10813442,14221313]}

1
docs/fti/FTI_102.json Normal file
View File

@ -0,0 +1 @@
{"following":[65537,196609,262145,327681,393217,458753,524289,589825,720897,4325377,4718593,5046273,5111809,5373953,5505025,5570561,6029313,6619137,7405569,8650753,8847361,11337729,11468801,11599873,11730945,11796481,11993089,12189697,12255233,12648449,12910593,14221313,14352385,14417921,14680065,14811137,14942209,15204353,15335425,15466497,15532033,15597569,15663105,15728641,15794177,15859713,15925249,15990785,16056321,16121857,16187393,16252929],"frame":[327681,2097153,15466497],"flooding":[327681,2359297,15466497],"follow":[1],"fields":[65538,196610,262146,327682,393218,458754,524290,589826,720898,15204353,15335425,15466497,15532033,15597569,15663105,15728641,15859713,15925249],"field":[655362,786434,851970,917506,983042,1048578,1114114,1179650,1245186,1310722,1376258,1441794,1507330,1572866,1638402,1703938,1769474,1835010,1900546,1966082,2031618,2097154,2162690,2228226,2293762,2359298,2424834,2490370,2555906,2621442,2686978,2752514,2818050,2883586,2949122,3014658,3080194,3145730,3211266,3276802,3342338,3407874,3473410,3538946,3604482,3670018,3735554,3801090,3866626,3932162,3997698,4063234,4128770,4194306,4259842,4390914,4456450,4521986,4587522,4653058,4915202,4980738,5242882],"first":[5570562,10092545,10813441,14221314],"finalize":[4325377,4718593,5046273,5505025,6619137,7405569,8650753,8847361,11468801,14352385,14942209,15204353,15335425,15466497,15532033,15597569,15728641,15794177,15859713,15925249],"float":[2818049,2949121,3735553,4128769,4259841,4390913,4456449,4653057,4915201,4980737,5242881,10682369,13565953]}

1
docs/fti/FTI_103.json Normal file
View File

@ -0,0 +1 @@
{"getcomponent":[6029315,6619139,7405571,8650755,8847363,11468803,14352387,15532035,15597571,15663107,15728643,15794179,15859715,15925251],"getmessageunordered":[11075587,14811137,16056321],"getmessageordered":[10485763,14811137,16056321],"getcomponentsinparent":[6029317,6619141,7405573,8650757,8847365,11468805,14352389,15532037,15597573,15663109,15728645,15794181,15859717,15925253],"getcomponentinchildren":[6029316,6619140,7405572,8650756,8847364,11468804,14352388,15532036,15597572,15663108,15728644,15794180,15859716,15925252],"great":[327681,1966081,15466497],"gethashcode":[4325377,4718593,5046273,5505025,6029313,6619137,7405569,8650753,8847361,11468801,14352385,14942209,15204353,15335425,15466497,15532033,15597569,15663105,15728641,15794177,15859713,15925249],"general":[5308417],"generic":[6488065,6684673,7143425,7274497,9633793,10354689,10485762,11075586,12124161],"getcomponentinparent":[6029314,6619138,7405570,8650754,8847362,11468802,14352386,15532034,15597570,15663106,15728642,15794178,15859714,15925250],"getinstanceid":[6029313,6619137,7405569,8650753,8847361,11468801,14352385,15532033,15597569,15663105,15728641,15794177,15859713,15925249],"gains":[5767169,8650753,8847361,11468801,14352385,15532033,15597569,15859713,15925249],"gameobject":[655362,2555906,3342338,6029313,8519681,11534337,11599873,11730945,11993089,12189697,12255233,12648449,12910593,13041666,15532033,15597569,15663107,15728641,15794177,15859713,15925249],"getparameterautosend":[9306116,11468801,15597569],"getcomponentsinchildren":[6029318,6619142,7405574,8650758,8847366,11468806,14352390,15532038,15597574,15663110,15728646,15794182,15859718,15925254],"guitext":[11599873,11730945,11993089,12189697,12255233,12648449,12910593,15532033,15597569,15663105,15728641,15794177,15859713,15925249],"given":[4784130,5111809,5373953,5570562,6029313,6094849,6225921,6356993,6619139,6881281,7077889,7471105,7864321,8126465,8323073,8585217,8650758,8847366,9437185,10092545,10158082,10551297,10682369,10813441,11468806,13041665,13107202,13762562,14221314,14352390,15532038,15597574,15663105,15728643,15859718,15925254,16121858,16187393,16252929],"getconfig":[5046273,5701636,15466497],"guielement":[11599873,11730945,11993089,12189697,12255233,12648449,12910593,15532033,15597569,15663105,15728641,15794177,15859713,15925249],"games":[327681,1900545,15466497],"guitexture":[11599873,11730945,11993089,12189697,12255233,12648449,12910593,15532033,15597569,15663105,15728641,15794177,15859713,15925249],"gettype":[4325377,4718593,5046273,5505025,6029313,6619137,7405569,8650753,8847361,11468801,14352385,14942209,15204353,15335425,15466497,15532033,15597569,15663105,15728641,15794177,15859713,15925249],"getnetworkedobject":[6356996,8650753,8847361,11468801,14352385,15532033,15597569,15859713,15925249],"getchunkedmessage":[9568258,14811137,16056321],"gets":[196610,524289,2686977,3080193,3276801,5046273,5439489,5570561,5701633,5767169,5898241,6356993,6488065,6881281,6946817,7077889,7143425,7536641,8650761,8847370,10813441,11468809,11599880,11730952,11993093,12255241,12320769,12386305,12517377,12582916,12648456,12779521,12845057,12910600,12976129,13107202,13172737,13303809,13369345,13500417,13697025,13893633,14090241,14221313,14286849,14352393,14483457,14548993,14745601,14876673,15007745,15073281,15138817,15269889,15466497,15532050,15597586,15663113,15728647,15859729,15925265],"getcomponents":[6029316,6619140,7405572,8650756,8847364,11468804,14352388,15532036,15597572,15663108,15728644,15794180,15859716,15925252]}

1
docs/fti/FTI_104.json Normal file
View File

@ -0,0 +1 @@
{"hingejoint":[11599873,11730945,11993089,12189697,12255233,12648449,12910593,15532033,15597569,15663105,15728641,15794177,15859713,15925249],"header":[9568257],"history":[327681,2949121,15466497],"handleobjectspawning":[327681,1835010,15466497],"hosts":[11272193,15466497],"handlerid":[6291457],"hierarchy":[14221313,14942209,15204353,15335425,15466497,15532033,15597569,15663105,15728641,15794177,15859713,15925249,15990785,16056321,16121857,16187393,16252929],"hashset":[1703938],"hideflags":[11599873,11730945,11993089,12189697,12255233,12648449,12910593,15532033,15597569,15663105,15728641,15794177,15859713,15925249],"hellman":[327681,3014657,15466497],"handshake":[327681,1245185,15466497],"handler":[6225921,6291457,8650754,8847362,11468802,14352386,15532034,15597570,15859714,15925250],"hasmissingparts":[9633794,14811137,16056321],"hasduplicates":[12124162,14811137,16056321],"handle":[327681,1835009,15466497],"hook":[65537,786434,15204353],"hash":[5046275,5701633,5963781,10616835,15466499],"handlers":[5439489,6160385,6488065,6881281,6946817,7012353,7077889,7143425,7208961,7340033,7536641,8257537,8454145,8650767,8716289,8847375,9175041,9371649,9502721,10027009,11468815,11927554,12582918,13107202,13238274,14155778,14352399,15532047,15597583,15859727,15925263],"helper":[9961473,11862018,14221313,15990785,16056321],"host":[6619138,8585217,8781825,11599873,11993089,12255233,12648449,12845057,12910593,15138817,15532033,15597569,15728643,15859713,15925249]}

1
docs/fti/FTI_105.json Normal file
View File

@ -0,0 +1 @@
{"inheritance":[14221313,14942209,15204353,15335425,15466497,15532033,15597569,15663105,15728641,15794177,15859713,15925249,15990785,16056321,16121857,16187393,16252929],"include":[327681,2097153,15466497],"isactiveandenabled":[11599873,11730945,11993089,12189697,12255233,12648449,12910593,15532033,15597569,15663105,15728641,15794177,15859713,15925249],"index":[9306115,10289155,11141121,11730945,13959169,15663105],"ienumerator":[6029314,6619138,7405570,8650754,8847362,11468802,14352386,15532034,15597570,15663106,15728642,15794178,15859714,15925250],"isdefaultattribute":[4325377,5505025,14942209,15204353],"isclient":[11599873,11993089,12255233,12320770,12648449,12910593,14876674,15532033,15597569,15728641,15859713,15925249],"isowner":[11599873,11730945,12255233,12386306,12648449,12910593,14745602,15532033,15597569,15663105,15859713,15925249],"invokes":[4784130,10551297,10682369,13762562,16121858],"invoked":[6160385,6291457,6488065,6881281,6946817,7012353,7077889,7143425,7208961,7340033,7536641,8257537,8454145,8650766,8716289,8847374,9175041,11468814,11927554,12582918,13107202,13238274,14155778,14352398,15532046,15597582,15859726,15925262],"isserver":[11599873,11993089,12255233,12648449,12779522,12910593,15269890,15532033,15597569,15728641,15859713,15925249],"identify":[11534337,15663105],"inside":[327681,2162689,12124161,14811137,15466497,16056321],"interpolateserver":[589825,4194306,15925249],"isplayerobject":[11730945,15007746,15663105],"instance":[4849665,5046273,5177345,5636097,5701633,5832705,6356993,6488067,6553603,6946819,7077891,7208963,7274499,7340035,7471107,7667715,7733249,7798787,8060929,8650753,8716291,8847361,8912897,9043969,9109505,9175043,9240579,9699331,9764865,10223617,10747905,11206661,11468801,11599874,11993089,12255234,12451841,12648450,12910594,13369345,13697025,14024705,14352385,14680065,14942209,15204353,15335425,15466498,15532036,15597572,15663105,15728642,15794177,15859716,15925252,15990785],"initializes":[4849665,5177345,5636097,5832705,7733249,8060929,8912897,9043969,9109505,9764865,10223617,14942209,15204353,15335425,15466497,15532033,15597569,15663105,15728641,15794177,15859713,15925249],"isspawned":[11730945,12976130,15663105],"int":[917505,1245185,1572865,1638401,1703937,2097153,2162689,2293761,2359297,2490370,2621441,3145729,3407873,6094849,6225921,6291458,6422529,6488065,6684673,6881281,6946817,7077889,7143425,7274497,7471105,7536641,7798785,7864321,7995393,9306113,9568257,10289153,10485761,10551297,10616833,11075585,11141121,13893633,13959169,14090241,14548993,15400961],"int32":[917505,1245185,1572865,1638401,1703937,2097153,2162689,2293761,2359297,2490370,2621441,3145729,3407873,4784129,6094850,6225921,6291458,6422530,6488066,6684674,6881282,6946818,7077890,7143426,7274498,7471106,7536642,7798786,7864321,7995393,8650764,8847372,9306115,9568257,10158082,10289155,10485762,10551298,10616835,10878980,11075586,11141121,11468813,12582916,13107202,13434881,13762561,13893633,13959169,14090241,14352396,14548993,15400961,15532044,15597581,15859724,15925260,16121857],"invokerepeating":[6029313,6619137,7405569,8650753,8847361,11468801,14352385,15532033,15597569,15663105,15728641,15794177,15859713,15925249],"interpolate":[589825,4194305,15925249],"isinvoking":[6029314,6619138,7405570,8650754,8847362,11468802,14352386,15532034,15597570,15663106,15728642,15794178,15859714,15925250],"internal":[327681,2097153,15466497],"invoke":[65537,196611,327681,786433,2490369,3145729,3407873,3604481,6029313,6619137,7405569,8650753,8847361,10551297,10682369,11468801,14352385,15204353,15466497,15532033,15597569,15663105,15728644,15794177,15859713,15925249],"isordered":[10354690,14811137,16056321],"interpolation":[589825,4521985,15925249],"interpolateposition":[589825,4521986,15925249],"islocalplayer":[11599873,11730945,12255233,12648449,12910593,13172738,14483458,15532033,15597569,15663105,15859713,15925249],"isclientconnected":[11993089,15073282,15728641],"instances":[589825,4587521,5046273,5963777,15466497,15925249],"inherits":[11534337,15532033],"inherited":[458753,589825,720897,4325384,4718598,5046278,5505032,6029368,6619194,7405626,8650843,8847418,11337729,11468891,11599898,11730970,11993114,12189722,12255266,12648482,12910626,14352475,14417921,14942217,15204361,15335430,15466502,15532116,15597694,15663186,15728724,15794260,15859838,15925374],"ispooledobject":[11730945,12517378,15663105],"ishost":[11599873,11993089,12255233,12648449,12845058,12910593,15138818,15532033,15597569,15728641,15859713,15925249],"instead":[5111809,12451841,16187393]}

1
docs/fti/FTI_107.json Normal file
View File

@ -0,0 +1 @@
{"key":[262145,327685,851969,2228226,2424834,3014657,5570562,10092548,10813444,14221314,15335425,15466501]}

1
docs/fti/FTI_108.json Normal file
View File

@ -0,0 +1 @@
{"large":[9568258,14811137,16056321],"local":[5767169,6356993,8650754,8847362,11468802,11599873,11730945,11993089,12255233,12386305,12648449,12910593,14352386,14745601,15400961,15532035,15597571,15663105,15728641,15859715,15925251],"loose":[5898241,8650753,8847361,11468801,14352385,15532033,15597569,15859713,15925249],"library":[327681,1835009,11534337,15466497,15728641],"list":[196609,327683,1114114,1900547,1966084,2031618,3342339,6029317,6488067,6619141,6684675,7143427,7274499,7405573,8650761,8847369,9568259,9633797,10158081,10354692,10485766,10878979,11075590,11403265,11468809,11730945,11927553,12124165,12582915,12713985,13107201,13238273,13434881,13631489,13762561,13959169,14155777,14352393,14614530,14811143,15466499,15532041,15597577,15663110,15728646,15794181,15859721,15925257,16056327],"longer":[13828097],"locate":[13828097],"looking":[13828097],"link":[1],"lerp":[720897,4128769,15859713],"lag":[327681,2949121,9895937,11534337,15466497,15794177,16121857],"light":[11599873,11730945,11993089,12189697,12255233,12648449,12910593,15532033,15597569,15663105,15728641,15794177,15859713,15925249],"load":[5308417],"lagcompensationmanager":[4784130,9895937,10551298,10682370,11796483,13762562,14614530,16121860]}

1
docs/fti/FTI_109.json Normal file

File diff suppressed because one or more lines are too long

1
docs/fti/FTI_110.json Normal file

File diff suppressed because one or more lines are too long

1
docs/fti/FTI_111.json Normal file
View File

@ -0,0 +1 @@
{"ownerclientid":[11599873,11730945,12255233,12648449,12910593,13893634,14090242,15532033,15597569,15663105,15859713,15925249],"ongainedownership":[5767170,8650753,8847361,11468801,14352385,15532033,15597569,15859713,15925249],"optional":[5701633,10485762,11075586,11141121],"ownedobjects":[262145,1114114,15335425],"onserverstarted":[196609,3604482,15728641],"objects":[5111809,11141121,11796481,12058625,14614529,16121857,16187393],"onlostownership":[5898242,8650753,8847361,11468801,14352385,15532033,15597569,15859713,15925249],"ownership":[5767169,5898241,6029313,8192001,8650754,8847362,11468802,14352386,15532034,15597570,15663105,15859714,15925250],"onclientdisconnectcallback":[196609,3145730,15728641],"overrides":[8650753,11468801,14352385,15597569,15859713,15925249],"owns":[7012353,7340033,8650754,8847362,11468802,11599875,12255235,12648451,12910595,13369345,13697025,14090241,14155778,14352386,15532037,15597573,15859717,15925253],"override":[9371649,9502721,10027009,11534337,15532033],"object":[327681,524290,1835009,3080194,4325380,4718598,5046278,5111811,5505028,5767169,5898241,6029327,6356993,6619150,7012353,7340033,7405582,7602177,7864322,7995393,8192001,8257537,8650775,8716289,8847383,9240577,11141121,11272193,11403266,11468823,11534337,11599877,11730955,11927554,11993090,12058625,12189698,12255237,12386305,12517377,12648453,12910597,12976129,13041667,13172738,13303809,13500417,14155778,14221313,14352407,14483458,14745601,14942213,15007746,15204357,15335431,15466505,15532062,15597598,15663134,15728658,15794195,15859742,15925278,15990785,16056321,16121857,16187396,16252929],"order":[10354690,10485761,11075585,14811139,16056323],"original":[10485761,10747905,11075585,14680065,14811138,15990785,16056322],"obsolete":[6029313,6619137,7405569,8650753,8847361,11468801,11599889,11730961,11993105,12189713,12255249,12648465,12910609,14352385,15532050,15597586,15663122,15728658,15794194,15859730,15925266],"owned":[262145,1114113,11599873,11730945,12255233,12386305,12648449,12910593,14745601,15335425,15532033,15597569,15663105,15859713,15925249],"owner":[6029314,7602177,7864321,7995394,8257537,8650756,8716289,8847364,9240577,11403266,11468804,11730945,11927554,13893633,14352388,15532036,15597572,15663107,15859716,15925252],"overload":[6094849,6160385,6422529,6488065,6553601,6684673,6750209,6815745,6881281,6946817,7012353,7077889,7143425,7208961,7274497,7340033,7471105,7536641,7602177,7667713,7798785,7929857,8257537,8454145,8716289,9175041,9240577,9699329,10158081,10551297,10616833,10682369,10878977,10944513,11403265,11927553,12582913,12713985,13107201,13238273,13434881,13631489,13762561,14155777],"onclientconnectedcallback":[196609,3407874,15728641],"occur":[327681,2097153,15466497],"occurred":[5308417]}

1
docs/fti/FTI_112.json Normal file

File diff suppressed because one or more lines are too long

1
docs/fti/FTI_113.json Normal file
View File

@ -0,0 +1 @@
{"qostype":[1310722],"queue":[327681,2162689,15466497],"quaternion":[13041667]}

1
docs/fti/FTI_114.json Normal file

File diff suppressed because one or more lines are too long

1
docs/fti/FTI_115.json Normal file

File diff suppressed because one or more lines are too long

1
docs/fti/FTI_116.json Normal file
View File

@ -0,0 +1 @@
{"tostring":[4325377,4718593,5046273,5505025,6029313,6619137,7405569,8650753,8847361,11468801,14352385,14942209,15204353,15335425,15466497,15532033,15597569,15663105,15728641,15794177,15859713,15925249],"try":[5308417,13828097],"tracked":[11534337,15794177],"trackedobject":[7405571,9043972,11534337,12189699,14614530,15794182],"talk":[327681,1769473,15466497],"title":[131073],"transforms":[11665409,15925249],"typeid":[11337729,14417921,14942209,15204353],"top":[65537,196609,262145,327681,393217,458753,524289,589825,720897,4325377,4718593,4784129,5046273,5111809,5373953,5505025,5570561,6029313,6619137,7405569,8650753,8847361,10158081,10878977,11337729,11403265,11468801,11599873,11796481,11730945,11927553,11993089,12189697,12255233,12582913,12648449,12713985,12910593,13107201,13238273,13434881,13631489,13762561,13828097,14155777,14221313,14352385,14417921,14680065,14811137,14942211,15204356,15335427,15466499,15532036,15597572,15663108,15728644,15794179,15859716,15925252,15990785,16056321,16121858,16187393,16252929],"timing":[327681,1245185,15466497],"transform":[11599873,11730945,11993089,12189697,12255233,12648449,12910593,15532033,15597569,15663105,15728641,15794177,15859713,15925249],"todo":[9306113,9830401,10289153,10616833,10944513,11468805,13434882,15597573],"turns":[4784132,10551298,10682370,10747905,13762564,14680065,15990785,16121860],"triggername":[10944515],"typo":[13828097],"time":[4784131,10551299,10682370,11993090,13565954,13762563,15728642,16121859],"true":[5701633],"trusted":[327681,1966081,15466497],"topic":[1],"tag":[11599873,11730945,11993089,12189697,12255233,12648449,12910593,15532033,15597569,15663105,15728641,15794177,15859713,15925249],"times":[327683,2097153,2162689,2621441,15466499],"type":[65537,196609,262145,327682,393217,458753,524289,589825,655361,720897,786433,851969,917505,983041,1048578,1114113,1179649,1245185,1310721,1376257,1441793,1507329,1572865,1638401,1703937,1769473,1835009,1900545,1966081,2031617,2097153,2162689,2228225,2293761,2359297,2424833,2490369,2555905,2621441,2686977,2752513,2818049,2883585,2949121,3014657,3080193,3145729,3211265,3276801,3342337,3407873,3473409,3538945,3604481,3670017,3735553,3801089,3866625,3932161,3997697,4063233,4128769,4194305,4259841,4325377,4390913,4456449,4521985,4587521,4653057,4718593,4915201,4980737,5046273,5111809,5242881,5373953,5505025,5570561,5701634,5963778,6029323,6094852,6160387,6225922,6291459,6356994,6422532,6488070,6553605,6619147,6684676,6750211,6815747,6881284,6946822,7012355,7077894,7143428,7208965,7274502,7340037,7405579,7471110,7536644,7602179,7667717,7798790,7864321,7929859,7995393,8126465,8257539,8323073,8454147,8585217,8650763,8716293,8847371,9175045,9240581,9306114,9437185,9568259,9633795,9699333,10092547,10289154,10354690,10485763,10551298,10616833,10682370,10747908,10813443,10944513,11075587,11141123,11206660,11337729,11468811,11599873,11730945,11796481,11993089,12058625,12124163,12189697,12255233,12320769,12386305,12451841,12517377,12648449,12779521,12845057,12910593,12976129,13041668,13172737,13303809,13369345,13500417,13565953,13697025,13893633,13959169,14024705,14090241,14221313,14286849,14352395,14417921,14483457,14548993,14614529,14680065,14745601,14811137,14876673,14942209,15007745,15073281,15138817,15204353,15269889,15335425,15400961,15466498,15532043,15597579,15663115,15728651,15794187,15859723,15925259,15990785,16056321,16121857,16187393,16252929],"turned":[10551297,10682369]}

1
docs/fti/FTI_117.json Normal file
View File

@ -0,0 +1 @@
{"useguilayout":[11599873,11730945,11993089,12189697,12255233,12648449,12910593,15532033,15597569,15663105,15728641,15794177,15859713,15925249],"url":[13828097],"unique":[11730945,13303809,15663105],"uint":[6356993,9633793,11141121,12124161,13303809,13697025],"unityengine":[13041666],"ump":[6029316,6619140,7405572,8650756,8847364,11468804,14352388,15532036,15597572,15663108,15728644,15794180,15859716,15925252],"uint32":[6356995,9633793,11141121,12124161,13303809,13697025],"updated":[65537,786433,15204353],"user":[6094850,6160386,6422530,6488066,6553602,6684674,6750210,6815746,6881282,6946818,7012354,7077890,7143426,7208962,7274498,7340034,7471106,7536642,7602178,7667714,7798786,7929858,8257538,8454146,8716290,9175042,9240578,9699330],"used":[262145,327684,851969,1310721,1376257,1703937,1900545,6291457,11272193,11534338,11730945,12255233,13959169,14286849,15335425,15466501,15597569,15663106,15794177],"uint16":[1769473,13500417],"ushort":[1769473,13500417]}

1
docs/fti/FTI_118.json Normal file
View File

@ -0,0 +1 @@
{"verified":[10485761,11075585,14811138,16056322],"valid":[11993089,15400961,15728641],"virtual":[5439489,5767169,5898241],"view":[655361,786433,851969,917505,983041,1048577,1114113,1179649,1245185,1310721,1376257,1441793,1507329,1572865,1638401,1703937,1769473,1835009,1900545,1966081,2031617,2097153,2162689,2228225,2293761,2359297,2424833,2490369,2555905,2621441,2686977,2752513,2818049,2883585,2949121,3014657,3080193,3145729,3211265,3276801,3342337,3407873,3473409,3538945,3604481,3670017,3735553,3801089,3866625,3932161,3997697,4063233,4128769,4194305,4259841,4390913,4456449,4521985,4587521,4653057,4849665,4915201,4980737,5177345,5242881,5439489,5636097,5701633,5767169,5832705,5898241,5963777,6094849,6160385,6225921,6291457,6356993,6422529,6488065,6553601,6684673,6750209,6815745,6881281,6946817,7012353,7077889,7143425,7208961,7274497,7340033,7471105,7536641,7602177,7667713,7733249,7798785,7864321,7929857,7995393,8060929,8126465,8192001,8257537,8323073,8388609,8454145,8519681,8585217,8716289,8781825,8912897,8978433,9043969,9109505,9175041,9240577,9306113,9371649,9437185,9502721,9568257,9633793,9699329,9764865,9830401,10027009,10092545,10223617,10289153,10354689,10420225,10485761,10551297,10616833,10682369,10747905,10813441,10944513,11075585,11141121,11206657,12058625,12124161,12320769,12386305,12451841,12517377,12779521,12845057,12976129,13041665,13172737,13303809,13369345,13500417,13565953,13697025,13893633,13959169,14024705,14090241,14221313,14286849,14483457,14548993,14614529,14745601,14876673,14942209,15007745,15073281,15138817,15204353,15269889,15335425,15400961,15466497,15532033,15597569,15663105,15728641,15794177,15859713,15925249,15990785,16056321,16121857,16187393,16252929],"versions":[327681,1769473,15466497],"vector3":[13041667],"value":[655361,786433,851969,917505,983041,1048577,1114113,1179649,1245185,1310721,1376257,1441793,1507329,1572865,1638401,1703937,1769473,1835009,1900545,1966081,2031617,2097153,2162689,2228225,2293761,2359297,2424833,2490369,2555905,2621441,2686977,2752513,2818049,2883585,2949121,3014657,3080193,3145729,3211265,3276801,3342337,3407873,3473409,3538945,3604481,3670017,3735553,3801089,3866625,3932161,3997697,4063233,4128769,4194305,4259841,4390913,4456449,4521985,4587521,4653057,4915201,4980737,5242881,5701633,5963777,6291457,6356993,9306113,9568257,9633793,10092545,10289155,10354689,10485761,10747905,10813441,11075585,11206657,12124161,12320769,12386305,12517377,12779521,12845057,12976129,13041665,13172737,13303809,13369345,13500417,13565953,13697025,13893633,13959169,14024705,14090241,14286849,14483457,14548993,14614529,14745601,14876673,15007745,15073281,15138817,15269889,15400961],"variables":[11010050,14942209,15204353],"version":[327681,655361,786433,851969,917505,983041,1048577,1114113,1179649,1245185,1310721,1376257,1441793,1507329,1572865,1638401,1703937,1769474,1835009,1900545,1966081,2031617,2097153,2162689,2228225,2293761,2359297,2424833,2490369,2555905,2621441,2686977,2752513,2818049,2883585,2949121,3014657,3080193,3145729,3211265,3276801,3342337,3407873,3473409,3538945,3604481,3670017,3735553,3801089,3866625,3932161,3997697,4063233,4128769,4194305,4259841,4390913,4456449,4521985,4587521,4653057,4849665,4915201,4980737,5177345,5242881,5439489,5636097,5701633,5767169,5832705,5898241,5963777,6094849,6160385,6225921,6291457,6356993,6422529,6488065,6553601,6684673,6750209,6815745,6881281,6946817,7012353,7077889,7143425,7208961,7274497,7340033,7471105,7536641,7602177,7667713,7733249,7798785,7864321,7929857,7995393,8060929,8126465,8192001,8257537,8323073,8388609,8454145,8519681,8585217,8716289,8781825,8912897,8978433,9043969,9109505,9175041,9240577,9306113,9371649,9437185,9502721,9568257,9633793,9699329,9764865,9830401,10027009,10092545,10223617,10289153,10354689,10420225,10485761,10551297,10616833,10682369,10747905,10813441,10944513,11075585,11141121,11206658,12058625,12124161,12320769,12386305,12451841,12517377,12779521,12845057,12976129,13041665,13172737,13303809,13369345,13500417,13565953,13697025,13893633,13959169,14024705,14090241,14221313,14286849,14483457,14548993,14614529,14745601,14876673,14942209,15007745,15073281,15138817,15204353,15269889,15335425,15400961,15466498,15532033,15597569,15663105,15728641,15794177,15859713,15925249,15990785,16056321,16121857,16187393,16252929],"void":[5439489,5767169,5898241,6094849,6160385,6225921,6422529,6488065,6553601,6684673,6750209,6815745,6881281,6946817,7012353,7077889,7143425,7208961,7274497,7340033,7471105,7536641,7602177,7667713,7798785,7864321,7929857,7995393,8126465,8192001,8257537,8323073,8388609,8454145,8519681,8585217,8716289,8781825,8978433,9175041,9240577,9371649,9437185,9502721,9699329,9830401,10027009,10289153,10420225,10551297,10616833,10682369,10944513,11141121,12058625,12451841]}

1
docs/fti/FTI_119.json Normal file
View File

@ -0,0 +1 @@
{"warp":[720897,3997697,15859713],"web":[13828097],"wait":[327681,1245185,15466497],"write":[11534337,15532033],"warpondestinationchange":[720897,3997698,15859713],"wheter":[327686,1048577,1179649,1441793,1507329,1835009,3014657,11993090,14876673,15269889,15466502,15728642]}

1
docs/fti/FTI_120.json Normal file
View File

@ -0,0 +1 @@
{"xml":[327682,2228225,2424833,15466498]}

1
docs/fti/FTI_97.json Normal file
View File

@ -0,0 +1 @@
{"audio":[11599873,11730945,11993089,12189697,12255233,12648449,12910593,15532033,15597569,15663105,15728641,15794177,15859713,15925249],"allow":[327681,1048577,15466497],"assembly":[655361,786433,851969,917505,983041,1048577,1114113,1179649,1245185,1310721,1376257,1441793,1507329,1572865,1638401,1703937,1769473,1835009,1900545,1966081,2031617,2097153,2162689,2228225,2293761,2359297,2424833,2490369,2555905,2621441,2686977,2752513,2818049,2883585,2949121,3014657,3080193,3145729,3211265,3276801,3342337,3407873,3473409,3538945,3604481,3670017,3735553,3801089,3866625,3932161,3997697,4063233,4128769,4194305,4259841,4390913,4456449,4521985,4587521,4653057,4849665,4915201,4980737,5177345,5242881,5439489,5636097,5701633,5767169,5832705,5898241,5963777,6094849,6160385,6225921,6291457,6356993,6422529,6488065,6553601,6684673,6750209,6815745,6881281,6946817,7012353,7077889,7143425,7208961,7274497,7340033,7471105,7536641,7602177,7667713,7733249,7798785,7864321,7929857,7995393,8060929,8126465,8192001,8257537,8323073,8388609,8454145,8519681,8585217,8716289,8781825,8912897,8978433,9043969,9109505,9175041,9240577,9306113,9371649,9437185,9502721,9568257,9633793,9699329,9764865,9830401,10027009,10092545,10223617,10289153,10354689,10420225,10485761,10551297,10616833,10682369,10747905,10813441,10944513,11075585,11141121,11206657,12058625,12124161,12320769,12386305,12451841,12517377,12779521,12845057,12976129,13041665,13172737,13303809,13369345,13500417,13565953,13697025,13893633,13959169,14024705,14090241,14221313,14286849,14483457,14548993,14614529,14745601,14876673,14942209,15007745,15073281,15138817,15204353,15269889,15335425,15400961,15466497,15532033,15597569,15663105,15728641,15794177,15859713,15925249,15990785,16056321,16121857,16187393,16252929],"attribute":[4325380,5505028,11010050,11337729,14417921,14942216,15204360],"away":[327681,2621441,15466497],"animator":[12255234,14286853,15597570],"aes":[5570562,10092545,10813441,14221314],"assumed":[589825,4587521,15925249],"api":[65537,131073,196609,262145,327681,393217,458753,524289,589825,655361,720897,786433,851969,917505,983041,1048577,1114113,1179649,1245185,1310721,1376257,1441793,1507329,1572865,1638401,1703937,1769473,1835009,1900545,1966081,2031617,2097153,2162689,2228225,2293761,2359297,2424833,2490369,2555905,2621441,2686977,2752513,2818049,2883585,2949121,3014657,3080193,3145729,3211265,3276801,3342337,3407873,3473409,3538945,3604481,3670017,3735553,3801089,3866625,3932161,3997697,4063233,4128769,4194305,4259841,4325377,4390913,4456449,4521985,4587521,4653057,4718593,4784129,4849665,4915201,4980737,5046273,5111809,5177345,5242881,5308417,5373953,5439489,5505025,5570561,5636097,5701633,5767169,5832705,5898241,5963777,6029313,6094849,6160385,6225921,6291457,6356993,6422529,6488065,6553601,6619137,6684673,6750209,6815745,6881281,6946817,7012353,7077889,7143425,7208961,7274497,7340033,7405569,7471105,7536641,7602177,7667713,7733249,7798785,7864321,7929857,7995393,8060929,8126465,8192001,8257537,8323073,8388609,8454145,8519681,8585217,8650753,8716289,8781825,8847361,8912897,8978433,9043969,9109505,9175041,9240577,9306113,9371649,9437185,9502721,9568257,9633793,9699329,9764865,9830401,9895937,9961473,10027009,10092545,10158081,10223617,10289153,10354689,10420225,10485761,10551297,10616833,10682369,10747905,10813441,10878977,10944513,11010049,11075585,11141121,11206657,11272193,11337729,11403265,11468801,11534337,11599873,11665409,11730945,11796481,11862017,11927553,11993089,12058625,12124161,12189697,12255233,12320769,12386305,12451841,12517377,12582913,12648449,12713985,12779521,12845057,12910593,12976129,13041665,13107201,13172737,13238273,13303809,13369345,13434881,13500417,13565953,13631489,13697025,13762561,13828097,13893633,13959169,14024705,14090241,14155777,14221313,14286849,14352385,14417921,14483457,14548993,14614529,14680065,14745601,14811137,14876673,14942209,15007745,15073281,15138817,15204353,15269889,15335425,15400961,15466497,15532033,15597569,15663105,15728641,15794177,15859713,15925249,15990785,16056321,16121857,16187393,16252929],"animations":[11665409,12255233,14286849,15597570],"accepted":[327681,1376257,15466497],"administrator":[5308417],"approved":[327681,2490369,15466497],"approval":[327681,1507329,15466497],"assumesyncedsends":[589825,4587522,15925249],"available":[13828097],"animation":[11599873,11730945,11993089,12189697,12255233,12648449,12910593,15532033,15597569,15663105,15728641,15794177,15859713,15925249],"address":[327682,983043,13828097,15466498],"array":[9568258,10092545,10813441,11141121,14811137,16056321],"allowpassthroughmessages":[327681,1048578,15466497],"action":[2490372,3145730,3407874,3604482,4784132,6291460,10551303,10682375,13762564,16121860],"aeskey":[262145,851970,15335425],"attributes":[65537,786434,4325377,4849666,5177346,5505025,11010049,11337729,14417921,14942211,15204355],"abstract":[15532033],"application":[196609,2686977,11993089,13565953,15728642],"automatically":[1,11010050,14942209,15204353]}

1
docs/fti/FTI_98.json Normal file
View File

@ -0,0 +1 @@
{"binary":[6094849,6160385,6422529,6684673,6750209,6815745,6881281,7012353,7143425,7274497,7471105,7536641,7602177,7667713,7798785,7929857,8257537,8454145,8650760,8716289,8847368,9175041,9240577,9568258,9633794,9699329,10158081,10354690,10420226,10485763,10747910,10878978,11075587,11206660,11403265,11468808,11862018,11927553,12124162,12713985,13238273,13631489,14352392,14680067,14811137,15532040,15597576,15859720,15925256,15990790,16056323],"box":[13828097],"broadcastmessage":[6029316,6619140,7405572,8650756,8847364,11468804,14352388,15532036,15597572,15663108,15728644,15794180,15859716,15925252],"behaviour":[11599874,11730946,11993090,12189698,12255234,12648450,12910594,15532035,15597571,15663107,15728643,15794179,15859715,15925251],"buffer":[327681,1572865,5570562,6094849,6160385,6422529,6488065,6553601,6684673,6750209,6815745,6881281,6946817,7012353,7077889,7143425,7208961,7340033,7536641,7602177,7929857,8257537,8454145,8650772,8847380,10092546,10158081,10485761,10813442,10878980,11075585,11403265,11468820,11927553,12582918,12713985,13107202,13238273,13631489,14155778,14221314,14352404,14811138,15466497,15532052,15597588,15859732,15925268,16056322],"binaryserializer":[10420226,10747906,11206658,11862017,14680067,15990788],"binaryignore":[4849668,5505027,11010049,14417923,14942214],"based":[4784129,10551297,13762561,16121857],"bool":[1048577,1179649,1441793,1507329,1835009,2490369,2686977,2883585,3014657,3080193,3276801,3670017,3866625,3997697,4194305,4521985,4587521,5701633,5963777,9306113,9633793,10289153,10354689,12124161,12320769,12386305,12517377,12779521,12845057,12976129,13172737,14483457,14745601,14876673,15007745,15073281,15138817,15269889],"base":[11534337,15532033],"bytes":[5570562,9568257,10092545,10813441,14221314],"byte":[851970,1376258,2490370,5701634,5963780,6094851,6160387,6291458,6422531,6684675,6750211,6815747,6881283,7012355,7143427,7536643,7602179,7929859,8257539,8454147,8650766,8847374,9568262,9633794,10092551,10158081,10354690,10485765,10747906,10813447,10878979,11075589,11206658,11403265,11468814,11927553,12124162,12582915,12713985,13107201,13238273,13631489,14155777,14352398,14811137,15532046,15597582,15859726,15925262,16056321],"background":[196609,2686977,15728641],"boolean":[1048577,1179649,1441793,1507329,1835009,2490369,2686977,2883585,3014657,3080193,3276801,3670017,3866625,3997697,4194305,4521985,4587521,5701635,5963777,6029320,6619144,7405576,8650760,8847368,9306113,9633793,10289155,10354689,11468808,12124161,12320769,12386305,12517377,12779521,12845057,12976129,13172737,14352392,14483457,14745601,14876673,15007745,15073281,15138817,15269889,15532040,15597576,15663112,15728648,15794184,15859720,15925256]}

1
docs/fti/FTI_99.json Normal file

File diff suppressed because one or more lines are too long

1
docs/fti/FTI_Files.json Normal file

File diff suppressed because one or more lines are too long

View File

@ -0,0 +1,21 @@
<html><head><meta http-equiv="X-UA-Compatible" content="IE=edge" /><link rel="shortcut icon" href="../icons/favicon.ico" /><link rel="stylesheet" type="text/css" href="../styles/branding.css" /><link rel="stylesheet" type="text/css" href="../styles/branding-en-US.css" /><script type="text/javascript" src="../scripts/branding.js"> </script><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>SyncedVar.hook Field</title><meta name="Language" content="en-us" /><meta name="System.Keywords" content="hook field" /><meta name="System.Keywords" content="SyncedVar.hook field" /><meta name="Microsoft.Help.F1" content="MLAPI.Attributes.SyncedVar.hook" /><meta name="Microsoft.Help.Id" content="F:MLAPI.Attributes.SyncedVar.hook" /><meta name="Description" content="The method name to invoke when the SyncVar get's updated." /><meta name="Microsoft.Help.ContentType" content="Reference" /><meta name="BrandingAware" content="true" /><meta name="container" content="MLAPI.Attributes" /><meta name="file" content="F_MLAPI_Attributes_SyncedVar_hook" /><meta name="guid" content="F_MLAPI_Attributes_SyncedVar_hook" /><link rel="stylesheet" type="text/css" href="../styles/branding-Website.css" /><script type="text/javascript" src="../scripts/jquery-1.11.0.min.js"></script><script type="text/javascript" src="../scripts/branding-Website.js"></script><script type="text/javascript" src="../scripts/clipboard.min.js"></script></head><body onload="OnLoad('cs')"><input type="hidden" id="userDataCache" class="userDataStyle" /><div class="pageHeader" id="PageHeader">MLAPI API Reference<form id="SearchForm" method="get" action="#" onsubmit="javascript:TransferToSearchPage(); return false;"><input id="SearchTextBox" type="text" maxlength="200" /><button id="SearchButton" type="submit"></button></form></div><div class="pageBody"><div class="leftNav" id="leftNav"><div id="tocNav"><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="../html\N_MLAPI_Attributes.htm" title="MLAPI API Reference" tocid="roottoc">MLAPI API Reference</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="../html/N_MLAPI_Attributes.htm" title="MLAPI.Attributes" tocid="N_MLAPI_Attributes">MLAPI.Attributes</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="../html/T_MLAPI_Attributes_SyncedVar.htm" title="SyncedVar Class" tocid="T_MLAPI_Attributes_SyncedVar">SyncedVar Class</a></div><div class="toclevel1" data-toclevel="1" data-childrenloaded="true"><a class="tocExpanded" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="../html/Fields_T_MLAPI_Attributes_SyncedVar.htm" title="SyncedVar Fields" tocid="Fields_T_MLAPI_Attributes_SyncedVar">SyncedVar Fields</a></div><div class="toclevel2 current" data-toclevel="2"><a data-tochassubtree="false" href="../html/F_MLAPI_Attributes_SyncedVar_hook.htm" title="hook Field" tocid="F_MLAPI_Attributes_SyncedVar_hook">hook Field</a></div></div><div id="tocResizableEW" onmousedown="OnMouseDown(event);"></div><div id="TocResize" class="tocResize"><img id="ResizeImageIncrease" src="../icons/TocOpen.gif" onclick="OnIncreaseToc()" alt="Click or drag to resize" title="Click or drag to resize" /><img id="ResizeImageReset" src="../icons/TocClose.gif" style="display:none" onclick="OnResetToc()" alt="Click or drag to resize" title="Click or drag to resize" /></div></div><div class="topicContent" id="TopicContent"><table class="titleTable"><tr><td class="titleColumn"><h1>SyncedVar<span id="LST43A2DB5A_0"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST43A2DB5A_0?cpp=::|nu=.");</script>hook Field</h1></td><td class="logoColumn"><img width="600" src="../icons/MLAPI_Logo.png" /></td></tr></table><span class="introStyle"></span> <p style="color: #dc143c; font-size: 8.5pt; font-weight: bold;">[This is preliminary documentation and is subject to change.]</p><div class="summary">
The method name to invoke when the SyncVar get's updated.
</div><p> </p>
<strong>Namespace:</strong>
 <a href="N_MLAPI_Attributes.htm">MLAPI.Attributes</a><br />
<strong>Assembly:</strong>
 MLAPI (in MLAPI.dll) Version: 1.0.0.0 (1.0.0.0)<div class="collapsibleAreaRegion"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID1RB')" onkeypress="SectionExpandCollapse_CheckKey('ID1RB', event)" tabindex="0"><img id="ID1RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />Syntax</span></div><div id="ID1RBSection" class="collapsibleSection"><div class="codeSnippetContainer"><div class="codeSnippetContainerTabs"><div id="ID0EACA_tab1" class="codeSnippetContainerTabSingle">C#</div></div><div class="codeSnippetContainerCodeContainer"><div class="codeSnippetToolBar"><div class="codeSnippetToolBarText"><a id="ID0EACA_copyCode" href="#" class="copyCodeSnippet" onclick="javascript:CopyToClipboard('ID0EACA');return false;" title="Copy">Copy</a></div></div><div id="ID0EACA_code_Div1" class="codeSnippetContainerCode" style="display: block"><pre xml:space="preserve"><span class="keyword">public</span> <span class="identifier">string</span> <span class="identifier">hook</span></pre></div></div></div><script type="text/javascript">AddLanguageTabSet("ID0EACA");</script><a id="HT_RequestExampleLink" href="https://github.com/TwoTenPvP/MLAPI/issues/new" target="_blank" class="button" title="Request an example for this topic">Request Example</a>
<script type="text/javascript">
var HT_requestExampleLink = document.getElementById("HT_RequestExampleLink");
var HT_requestExampleLinkText = HT_requestExampleLink.innerHTML;
if(HT_requestExampleLink.href.substring(0, 4).toLowerCase() == "http")
HT_requestExampleLink.href += "?title=";
else
HT_requestExampleLink.href += "?subject=MLAPI API Reference: ";
HT_requestExampleLink.href += "Add an Example for " + encodeURIComponent(document.title) + "&amp;body=" +
encodeURIComponent("Please add an example for " + document.title + ".%0D%0DTODO (optional): Describe a specific " +
"scenario you would like to see addressed.%0D%0DHelp Topic: " + window.location.href).replace(/%250D/g, "%0D");
HT_requestExampleLink.innerHTML = HT_requestExampleLinkText;
</script><a target="_blank" class="button" href="https://github.com/TwoTenPvP/MLAPI/blob/master/MLAPI/Attributes/SyncedVar.cs" title="View the source code">View Source</a><h4 class="subHeading">Field Value</h4>Type: <a href="http://msdn2.microsoft.com/en-us/library/s1wwdcbf" target="_blank">String</a></div><div class="collapsibleAreaRegion" id="seeAlsoSection"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID2RB')" onkeypress="SectionExpandCollapse_CheckKey('ID2RB', event)" tabindex="0"><img id="ID2RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />See Also</span></div><div id="ID2RBSection" class="collapsibleSection"><h4 class="subHeading">Reference</h4><div class="seeAlsoStyle"><a href="T_MLAPI_Attributes_SyncedVar.htm">SyncedVar Class</a></div><div class="seeAlsoStyle"><a href="N_MLAPI_Attributes.htm">MLAPI.Attributes Namespace</a></div></div></div></div><div id="pageFooter" class="pageFooter"> </div></body></html>

View File

@ -0,0 +1,21 @@
<html><head><meta http-equiv="X-UA-Compatible" content="IE=edge" /><link rel="shortcut icon" href="../icons/favicon.ico" /><link rel="stylesheet" type="text/css" href="../styles/branding.css" /><link rel="stylesheet" type="text/css" href="../styles/branding-en-US.css" /><script type="text/javascript" src="../scripts/branding.js"> </script><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>NetworkedClient.AesKey Field</title><meta name="Language" content="en-us" /><meta name="System.Keywords" content="AesKey field" /><meta name="System.Keywords" content="NetworkedClient.AesKey field" /><meta name="Microsoft.Help.F1" content="MLAPI.Data.NetworkedClient.AesKey" /><meta name="Microsoft.Help.Id" content="F:MLAPI.Data.NetworkedClient.AesKey" /><meta name="Description" content="The encryption key used for this client" /><meta name="Microsoft.Help.ContentType" content="Reference" /><meta name="BrandingAware" content="true" /><meta name="container" content="MLAPI.Data" /><meta name="file" content="F_MLAPI_Data_NetworkedClient_AesKey" /><meta name="guid" content="F_MLAPI_Data_NetworkedClient_AesKey" /><link rel="stylesheet" type="text/css" href="../styles/branding-Website.css" /><script type="text/javascript" src="../scripts/jquery-1.11.0.min.js"></script><script type="text/javascript" src="../scripts/branding-Website.js"></script><script type="text/javascript" src="../scripts/clipboard.min.js"></script></head><body onload="OnLoad('cs')"><input type="hidden" id="userDataCache" class="userDataStyle" /><div class="pageHeader" id="PageHeader">MLAPI API Reference<form id="SearchForm" method="get" action="#" onsubmit="javascript:TransferToSearchPage(); return false;"><input id="SearchTextBox" type="text" maxlength="200" /><button id="SearchButton" type="submit"></button></form></div><div class="pageBody"><div class="leftNav" id="leftNav"><div id="tocNav"><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="../html\N_MLAPI_Attributes.htm" title="MLAPI API Reference" tocid="roottoc">MLAPI API Reference</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="../html/N_MLAPI_Data.htm" title="MLAPI.Data" tocid="N_MLAPI_Data">MLAPI.Data</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="../html/T_MLAPI_Data_NetworkedClient.htm" title="NetworkedClient Class" tocid="T_MLAPI_Data_NetworkedClient">NetworkedClient Class</a></div><div class="toclevel1" data-toclevel="1" data-childrenloaded="true"><a class="tocExpanded" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="../html/Fields_T_MLAPI_Data_NetworkedClient.htm" title="NetworkedClient Fields" tocid="Fields_T_MLAPI_Data_NetworkedClient">NetworkedClient Fields</a></div><div class="toclevel2 current" data-toclevel="2"><a data-tochassubtree="false" href="../html/F_MLAPI_Data_NetworkedClient_AesKey.htm" title="AesKey Field" tocid="F_MLAPI_Data_NetworkedClient_AesKey">AesKey Field</a></div><div class="toclevel2" data-toclevel="2"><a data-tochassubtree="false" href="../html/F_MLAPI_Data_NetworkedClient_ClientId.htm" title="ClientId Field" tocid="F_MLAPI_Data_NetworkedClient_ClientId">ClientId Field</a></div><div class="toclevel2" data-toclevel="2"><a data-tochassubtree="false" href="../html/F_MLAPI_Data_NetworkedClient_OwnedObjects.htm" title="OwnedObjects Field" tocid="F_MLAPI_Data_NetworkedClient_OwnedObjects">OwnedObjects Field</a></div><div class="toclevel2" data-toclevel="2"><a data-tochassubtree="false" href="../html/F_MLAPI_Data_NetworkedClient_PlayerObject.htm" title="PlayerObject Field" tocid="F_MLAPI_Data_NetworkedClient_PlayerObject">PlayerObject Field</a></div></div><div id="tocResizableEW" onmousedown="OnMouseDown(event);"></div><div id="TocResize" class="tocResize"><img id="ResizeImageIncrease" src="../icons/TocOpen.gif" onclick="OnIncreaseToc()" alt="Click or drag to resize" title="Click or drag to resize" /><img id="ResizeImageReset" src="../icons/TocClose.gif" style="display:none" onclick="OnResetToc()" alt="Click or drag to resize" title="Click or drag to resize" /></div></div><div class="topicContent" id="TopicContent"><table class="titleTable"><tr><td class="titleColumn"><h1>NetworkedClient<span id="LST4ACB2D1_0"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST4ACB2D1_0?cpp=::|nu=.");</script>AesKey Field</h1></td><td class="logoColumn"><img width="600" src="../icons/MLAPI_Logo.png" /></td></tr></table><span class="introStyle"></span> <p style="color: #dc143c; font-size: 8.5pt; font-weight: bold;">[This is preliminary documentation and is subject to change.]</p><div class="summary">
The encryption key used for this client
</div><p> </p>
<strong>Namespace:</strong>
 <a href="N_MLAPI_Data.htm">MLAPI.Data</a><br />
<strong>Assembly:</strong>
 MLAPI (in MLAPI.dll) Version: 1.0.0.0 (1.0.0.0)<div class="collapsibleAreaRegion"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID1RB')" onkeypress="SectionExpandCollapse_CheckKey('ID1RB', event)" tabindex="0"><img id="ID1RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />Syntax</span></div><div id="ID1RBSection" class="collapsibleSection"><div class="codeSnippetContainer"><div class="codeSnippetContainerTabs"><div id="ID0EACA_tab1" class="codeSnippetContainerTabSingle">C#</div></div><div class="codeSnippetContainerCodeContainer"><div class="codeSnippetToolBar"><div class="codeSnippetToolBarText"><a id="ID0EACA_copyCode" href="#" class="copyCodeSnippet" onclick="javascript:CopyToClipboard('ID0EACA');return false;" title="Copy">Copy</a></div></div><div id="ID0EACA_code_Div1" class="codeSnippetContainerCode" style="display: block"><pre xml:space="preserve"><span class="keyword">public</span> <span class="identifier">byte</span>[] <span class="identifier">AesKey</span></pre></div></div></div><script type="text/javascript">AddLanguageTabSet("ID0EACA");</script><a id="HT_RequestExampleLink" href="https://github.com/TwoTenPvP/MLAPI/issues/new" target="_blank" class="button" title="Request an example for this topic">Request Example</a>
<script type="text/javascript">
var HT_requestExampleLink = document.getElementById("HT_RequestExampleLink");
var HT_requestExampleLinkText = HT_requestExampleLink.innerHTML;
if(HT_requestExampleLink.href.substring(0, 4).toLowerCase() == "http")
HT_requestExampleLink.href += "?title=";
else
HT_requestExampleLink.href += "?subject=MLAPI API Reference: ";
HT_requestExampleLink.href += "Add an Example for " + encodeURIComponent(document.title) + "&amp;body=" +
encodeURIComponent("Please add an example for " + document.title + ".%0D%0DTODO (optional): Describe a specific " +
"scenario you would like to see addressed.%0D%0DHelp Topic: " + window.location.href).replace(/%250D/g, "%0D");
HT_requestExampleLink.innerHTML = HT_requestExampleLinkText;
</script><a target="_blank" class="button" href="https://github.com/TwoTenPvP/MLAPI/blob/master/MLAPI/Data/NetworkedClient.cs" title="View the source code">View Source</a><h4 class="subHeading">Field Value</h4>Type: <span id="LST4ACB2D1_1"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST4ACB2D1_1?cpp=array&lt;");</script><a href="http://msdn2.microsoft.com/en-us/library/yyb1w04y" target="_blank">Byte</a><span id="LST4ACB2D1_2"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST4ACB2D1_2?cpp=&gt;|vb=()|nu=[]");</script></div><div class="collapsibleAreaRegion" id="seeAlsoSection"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID2RB')" onkeypress="SectionExpandCollapse_CheckKey('ID2RB', event)" tabindex="0"><img id="ID2RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />See Also</span></div><div id="ID2RBSection" class="collapsibleSection"><h4 class="subHeading">Reference</h4><div class="seeAlsoStyle"><a href="T_MLAPI_Data_NetworkedClient.htm">NetworkedClient Class</a></div><div class="seeAlsoStyle"><a href="N_MLAPI_Data.htm">MLAPI.Data Namespace</a></div></div></div></div><div id="pageFooter" class="pageFooter"> </div></body></html>

View File

@ -0,0 +1,21 @@
<html><head><meta http-equiv="X-UA-Compatible" content="IE=edge" /><link rel="shortcut icon" href="../icons/favicon.ico" /><link rel="stylesheet" type="text/css" href="../styles/branding.css" /><link rel="stylesheet" type="text/css" href="../styles/branding-en-US.css" /><script type="text/javascript" src="../scripts/branding.js"> </script><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>NetworkedClient.ClientId Field</title><meta name="Language" content="en-us" /><meta name="System.Keywords" content="ClientId field" /><meta name="System.Keywords" content="NetworkedClient.ClientId field" /><meta name="Microsoft.Help.F1" content="MLAPI.Data.NetworkedClient.ClientId" /><meta name="Microsoft.Help.Id" content="F:MLAPI.Data.NetworkedClient.ClientId" /><meta name="Description" content="The Id of the NetworkedClient" /><meta name="Microsoft.Help.ContentType" content="Reference" /><meta name="BrandingAware" content="true" /><meta name="container" content="MLAPI.Data" /><meta name="file" content="F_MLAPI_Data_NetworkedClient_ClientId" /><meta name="guid" content="F_MLAPI_Data_NetworkedClient_ClientId" /><link rel="stylesheet" type="text/css" href="../styles/branding-Website.css" /><script type="text/javascript" src="../scripts/jquery-1.11.0.min.js"></script><script type="text/javascript" src="../scripts/branding-Website.js"></script><script type="text/javascript" src="../scripts/clipboard.min.js"></script></head><body onload="OnLoad('cs')"><input type="hidden" id="userDataCache" class="userDataStyle" /><div class="pageHeader" id="PageHeader">MLAPI API Reference<form id="SearchForm" method="get" action="#" onsubmit="javascript:TransferToSearchPage(); return false;"><input id="SearchTextBox" type="text" maxlength="200" /><button id="SearchButton" type="submit"></button></form></div><div class="pageBody"><div class="leftNav" id="leftNav"><div id="tocNav"><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="../html\N_MLAPI_Attributes.htm" title="MLAPI API Reference" tocid="roottoc">MLAPI API Reference</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="../html/N_MLAPI_Data.htm" title="MLAPI.Data" tocid="N_MLAPI_Data">MLAPI.Data</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="../html/T_MLAPI_Data_NetworkedClient.htm" title="NetworkedClient Class" tocid="T_MLAPI_Data_NetworkedClient">NetworkedClient Class</a></div><div class="toclevel1" data-toclevel="1" data-childrenloaded="true"><a class="tocExpanded" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="../html/Fields_T_MLAPI_Data_NetworkedClient.htm" title="NetworkedClient Fields" tocid="Fields_T_MLAPI_Data_NetworkedClient">NetworkedClient Fields</a></div><div class="toclevel2" data-toclevel="2"><a data-tochassubtree="false" href="../html/F_MLAPI_Data_NetworkedClient_AesKey.htm" title="AesKey Field" tocid="F_MLAPI_Data_NetworkedClient_AesKey">AesKey Field</a></div><div class="toclevel2 current" data-toclevel="2"><a data-tochassubtree="false" href="../html/F_MLAPI_Data_NetworkedClient_ClientId.htm" title="ClientId Field" tocid="F_MLAPI_Data_NetworkedClient_ClientId">ClientId Field</a></div><div class="toclevel2" data-toclevel="2"><a data-tochassubtree="false" href="../html/F_MLAPI_Data_NetworkedClient_OwnedObjects.htm" title="OwnedObjects Field" tocid="F_MLAPI_Data_NetworkedClient_OwnedObjects">OwnedObjects Field</a></div><div class="toclevel2" data-toclevel="2"><a data-tochassubtree="false" href="../html/F_MLAPI_Data_NetworkedClient_PlayerObject.htm" title="PlayerObject Field" tocid="F_MLAPI_Data_NetworkedClient_PlayerObject">PlayerObject Field</a></div></div><div id="tocResizableEW" onmousedown="OnMouseDown(event);"></div><div id="TocResize" class="tocResize"><img id="ResizeImageIncrease" src="../icons/TocOpen.gif" onclick="OnIncreaseToc()" alt="Click or drag to resize" title="Click or drag to resize" /><img id="ResizeImageReset" src="../icons/TocClose.gif" style="display:none" onclick="OnResetToc()" alt="Click or drag to resize" title="Click or drag to resize" /></div></div><div class="topicContent" id="TopicContent"><table class="titleTable"><tr><td class="titleColumn"><h1>NetworkedClient<span id="LST2FDD6331_0"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST2FDD6331_0?cpp=::|nu=.");</script>ClientId Field</h1></td><td class="logoColumn"><img width="600" src="../icons/MLAPI_Logo.png" /></td></tr></table><span class="introStyle"></span> <p style="color: #dc143c; font-size: 8.5pt; font-weight: bold;">[This is preliminary documentation and is subject to change.]</p><div class="summary">
The Id of the NetworkedClient
</div><p> </p>
<strong>Namespace:</strong>
 <a href="N_MLAPI_Data.htm">MLAPI.Data</a><br />
<strong>Assembly:</strong>
 MLAPI (in MLAPI.dll) Version: 1.0.0.0 (1.0.0.0)<div class="collapsibleAreaRegion"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID1RB')" onkeypress="SectionExpandCollapse_CheckKey('ID1RB', event)" tabindex="0"><img id="ID1RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />Syntax</span></div><div id="ID1RBSection" class="collapsibleSection"><div class="codeSnippetContainer"><div class="codeSnippetContainerTabs"><div id="ID0EACA_tab1" class="codeSnippetContainerTabSingle">C#</div></div><div class="codeSnippetContainerCodeContainer"><div class="codeSnippetToolBar"><div class="codeSnippetToolBarText"><a id="ID0EACA_copyCode" href="#" class="copyCodeSnippet" onclick="javascript:CopyToClipboard('ID0EACA');return false;" title="Copy">Copy</a></div></div><div id="ID0EACA_code_Div1" class="codeSnippetContainerCode" style="display: block"><pre xml:space="preserve"><span class="keyword">public</span> <span class="identifier">int</span> <span class="identifier">ClientId</span></pre></div></div></div><script type="text/javascript">AddLanguageTabSet("ID0EACA");</script><a id="HT_RequestExampleLink" href="https://github.com/TwoTenPvP/MLAPI/issues/new" target="_blank" class="button" title="Request an example for this topic">Request Example</a>
<script type="text/javascript">
var HT_requestExampleLink = document.getElementById("HT_RequestExampleLink");
var HT_requestExampleLinkText = HT_requestExampleLink.innerHTML;
if(HT_requestExampleLink.href.substring(0, 4).toLowerCase() == "http")
HT_requestExampleLink.href += "?title=";
else
HT_requestExampleLink.href += "?subject=MLAPI API Reference: ";
HT_requestExampleLink.href += "Add an Example for " + encodeURIComponent(document.title) + "&amp;body=" +
encodeURIComponent("Please add an example for " + document.title + ".%0D%0DTODO (optional): Describe a specific " +
"scenario you would like to see addressed.%0D%0DHelp Topic: " + window.location.href).replace(/%250D/g, "%0D");
HT_requestExampleLink.innerHTML = HT_requestExampleLinkText;
</script><a target="_blank" class="button" href="https://github.com/TwoTenPvP/MLAPI/blob/master/MLAPI/Data/NetworkedClient.cs" title="View the source code">View Source</a><h4 class="subHeading">Field Value</h4>Type: <a href="http://msdn2.microsoft.com/en-us/library/td2s409d" target="_blank">Int32</a></div><div class="collapsibleAreaRegion" id="seeAlsoSection"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID2RB')" onkeypress="SectionExpandCollapse_CheckKey('ID2RB', event)" tabindex="0"><img id="ID2RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />See Also</span></div><div id="ID2RBSection" class="collapsibleSection"><h4 class="subHeading">Reference</h4><div class="seeAlsoStyle"><a href="T_MLAPI_Data_NetworkedClient.htm">NetworkedClient Class</a></div><div class="seeAlsoStyle"><a href="N_MLAPI_Data.htm">MLAPI.Data Namespace</a></div></div></div></div><div id="pageFooter" class="pageFooter"> </div></body></html>

View File

@ -0,0 +1,21 @@
<html><head><meta http-equiv="X-UA-Compatible" content="IE=edge" /><link rel="shortcut icon" href="../icons/favicon.ico" /><link rel="stylesheet" type="text/css" href="../styles/branding.css" /><link rel="stylesheet" type="text/css" href="../styles/branding-en-US.css" /><script type="text/javascript" src="../scripts/branding.js"> </script><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>NetworkedClient.OwnedObjects Field</title><meta name="Language" content="en-us" /><meta name="System.Keywords" content="OwnedObjects field" /><meta name="System.Keywords" content="NetworkedClient.OwnedObjects field" /><meta name="Microsoft.Help.F1" content="MLAPI.Data.NetworkedClient.OwnedObjects" /><meta name="Microsoft.Help.Id" content="F:MLAPI.Data.NetworkedClient.OwnedObjects" /><meta name="Description" content="The NetworkedObject's owned by this Client" /><meta name="Microsoft.Help.ContentType" content="Reference" /><meta name="BrandingAware" content="true" /><meta name="container" content="MLAPI.Data" /><meta name="file" content="F_MLAPI_Data_NetworkedClient_OwnedObjects" /><meta name="guid" content="F_MLAPI_Data_NetworkedClient_OwnedObjects" /><link rel="stylesheet" type="text/css" href="../styles/branding-Website.css" /><script type="text/javascript" src="../scripts/jquery-1.11.0.min.js"></script><script type="text/javascript" src="../scripts/branding-Website.js"></script><script type="text/javascript" src="../scripts/clipboard.min.js"></script></head><body onload="OnLoad('cs')"><input type="hidden" id="userDataCache" class="userDataStyle" /><div class="pageHeader" id="PageHeader">MLAPI API Reference<form id="SearchForm" method="get" action="#" onsubmit="javascript:TransferToSearchPage(); return false;"><input id="SearchTextBox" type="text" maxlength="200" /><button id="SearchButton" type="submit"></button></form></div><div class="pageBody"><div class="leftNav" id="leftNav"><div id="tocNav"><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="../html\N_MLAPI_Attributes.htm" title="MLAPI API Reference" tocid="roottoc">MLAPI API Reference</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="../html/N_MLAPI_Data.htm" title="MLAPI.Data" tocid="N_MLAPI_Data">MLAPI.Data</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="../html/T_MLAPI_Data_NetworkedClient.htm" title="NetworkedClient Class" tocid="T_MLAPI_Data_NetworkedClient">NetworkedClient Class</a></div><div class="toclevel1" data-toclevel="1" data-childrenloaded="true"><a class="tocExpanded" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="../html/Fields_T_MLAPI_Data_NetworkedClient.htm" title="NetworkedClient Fields" tocid="Fields_T_MLAPI_Data_NetworkedClient">NetworkedClient Fields</a></div><div class="toclevel2" data-toclevel="2"><a data-tochassubtree="false" href="../html/F_MLAPI_Data_NetworkedClient_AesKey.htm" title="AesKey Field" tocid="F_MLAPI_Data_NetworkedClient_AesKey">AesKey Field</a></div><div class="toclevel2" data-toclevel="2"><a data-tochassubtree="false" href="../html/F_MLAPI_Data_NetworkedClient_ClientId.htm" title="ClientId Field" tocid="F_MLAPI_Data_NetworkedClient_ClientId">ClientId Field</a></div><div class="toclevel2 current" data-toclevel="2"><a data-tochassubtree="false" href="../html/F_MLAPI_Data_NetworkedClient_OwnedObjects.htm" title="OwnedObjects Field" tocid="F_MLAPI_Data_NetworkedClient_OwnedObjects">OwnedObjects Field</a></div><div class="toclevel2" data-toclevel="2"><a data-tochassubtree="false" href="../html/F_MLAPI_Data_NetworkedClient_PlayerObject.htm" title="PlayerObject Field" tocid="F_MLAPI_Data_NetworkedClient_PlayerObject">PlayerObject Field</a></div></div><div id="tocResizableEW" onmousedown="OnMouseDown(event);"></div><div id="TocResize" class="tocResize"><img id="ResizeImageIncrease" src="../icons/TocOpen.gif" onclick="OnIncreaseToc()" alt="Click or drag to resize" title="Click or drag to resize" /><img id="ResizeImageReset" src="../icons/TocClose.gif" style="display:none" onclick="OnResetToc()" alt="Click or drag to resize" title="Click or drag to resize" /></div></div><div class="topicContent" id="TopicContent"><table class="titleTable"><tr><td class="titleColumn"><h1>NetworkedClient<span id="LST4A1780BC_0"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST4A1780BC_0?cpp=::|nu=.");</script>OwnedObjects Field</h1></td><td class="logoColumn"><img width="600" src="../icons/MLAPI_Logo.png" /></td></tr></table><span class="introStyle"></span> <p style="color: #dc143c; font-size: 8.5pt; font-weight: bold;">[This is preliminary documentation and is subject to change.]</p><div class="summary">
The NetworkedObject's owned by this Client
</div><p> </p>
<strong>Namespace:</strong>
 <a href="N_MLAPI_Data.htm">MLAPI.Data</a><br />
<strong>Assembly:</strong>
 MLAPI (in MLAPI.dll) Version: 1.0.0.0 (1.0.0.0)<div class="collapsibleAreaRegion"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID1RB')" onkeypress="SectionExpandCollapse_CheckKey('ID1RB', event)" tabindex="0"><img id="ID1RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />Syntax</span></div><div id="ID1RBSection" class="collapsibleSection"><div class="codeSnippetContainer"><div class="codeSnippetContainerTabs"><div id="ID0EACA_tab1" class="codeSnippetContainerTabSingle">C#</div></div><div class="codeSnippetContainerCodeContainer"><div class="codeSnippetToolBar"><div class="codeSnippetToolBarText"><a id="ID0EACA_copyCode" href="#" class="copyCodeSnippet" onclick="javascript:CopyToClipboard('ID0EACA');return false;" title="Copy">Copy</a></div></div><div id="ID0EACA_code_Div1" class="codeSnippetContainerCode" style="display: block"><pre xml:space="preserve"><span class="keyword">public</span> <span class="identifier">List</span>&lt;<span class="identifier">NetworkedObject</span>&gt; <span class="identifier">OwnedObjects</span></pre></div></div></div><script type="text/javascript">AddLanguageTabSet("ID0EACA");</script><a id="HT_RequestExampleLink" href="https://github.com/TwoTenPvP/MLAPI/issues/new" target="_blank" class="button" title="Request an example for this topic">Request Example</a>
<script type="text/javascript">
var HT_requestExampleLink = document.getElementById("HT_RequestExampleLink");
var HT_requestExampleLinkText = HT_requestExampleLink.innerHTML;
if(HT_requestExampleLink.href.substring(0, 4).toLowerCase() == "http")
HT_requestExampleLink.href += "?title=";
else
HT_requestExampleLink.href += "?subject=MLAPI API Reference: ";
HT_requestExampleLink.href += "Add an Example for " + encodeURIComponent(document.title) + "&amp;body=" +
encodeURIComponent("Please add an example for " + document.title + ".%0D%0DTODO (optional): Describe a specific " +
"scenario you would like to see addressed.%0D%0DHelp Topic: " + window.location.href).replace(/%250D/g, "%0D");
HT_requestExampleLink.innerHTML = HT_requestExampleLinkText;
</script><a target="_blank" class="button" href="https://github.com/TwoTenPvP/MLAPI/blob/master/MLAPI/Data/NetworkedClient.cs" title="View the source code">View Source</a><h4 class="subHeading">Field Value</h4>Type: <a href="http://msdn2.microsoft.com/en-us/library/6sh2ey19" target="_blank">List</a><span id="LST4A1780BC_1"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST4A1780BC_1?cs=&lt;|vb=(Of |cpp=&lt;|fs=&lt;'|nu=(");</script><a href="T_MLAPI_MonoBehaviours_Core_NetworkedObject.htm">NetworkedObject</a><span id="LST4A1780BC_2"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST4A1780BC_2?cs=&gt;|vb=)|cpp=&gt;|fs=&gt;|nu=)");</script></div><div class="collapsibleAreaRegion" id="seeAlsoSection"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID2RB')" onkeypress="SectionExpandCollapse_CheckKey('ID2RB', event)" tabindex="0"><img id="ID2RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />See Also</span></div><div id="ID2RBSection" class="collapsibleSection"><h4 class="subHeading">Reference</h4><div class="seeAlsoStyle"><a href="T_MLAPI_Data_NetworkedClient.htm">NetworkedClient Class</a></div><div class="seeAlsoStyle"><a href="N_MLAPI_Data.htm">MLAPI.Data Namespace</a></div></div></div></div><div id="pageFooter" class="pageFooter"> </div></body></html>

View File

@ -0,0 +1,21 @@
<html><head><meta http-equiv="X-UA-Compatible" content="IE=edge" /><link rel="shortcut icon" href="../icons/favicon.ico" /><link rel="stylesheet" type="text/css" href="../styles/branding.css" /><link rel="stylesheet" type="text/css" href="../styles/branding-en-US.css" /><script type="text/javascript" src="../scripts/branding.js"> </script><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>NetworkedClient.PlayerObject Field</title><meta name="Language" content="en-us" /><meta name="System.Keywords" content="PlayerObject field" /><meta name="System.Keywords" content="NetworkedClient.PlayerObject field" /><meta name="Microsoft.Help.F1" content="MLAPI.Data.NetworkedClient.PlayerObject" /><meta name="Microsoft.Help.Id" content="F:MLAPI.Data.NetworkedClient.PlayerObject" /><meta name="Description" content="The PlayerObject of the Client" /><meta name="Microsoft.Help.ContentType" content="Reference" /><meta name="BrandingAware" content="true" /><meta name="container" content="MLAPI.Data" /><meta name="file" content="F_MLAPI_Data_NetworkedClient_PlayerObject" /><meta name="guid" content="F_MLAPI_Data_NetworkedClient_PlayerObject" /><link rel="stylesheet" type="text/css" href="../styles/branding-Website.css" /><script type="text/javascript" src="../scripts/jquery-1.11.0.min.js"></script><script type="text/javascript" src="../scripts/branding-Website.js"></script><script type="text/javascript" src="../scripts/clipboard.min.js"></script></head><body onload="OnLoad('cs')"><input type="hidden" id="userDataCache" class="userDataStyle" /><div class="pageHeader" id="PageHeader">MLAPI API Reference<form id="SearchForm" method="get" action="#" onsubmit="javascript:TransferToSearchPage(); return false;"><input id="SearchTextBox" type="text" maxlength="200" /><button id="SearchButton" type="submit"></button></form></div><div class="pageBody"><div class="leftNav" id="leftNav"><div id="tocNav"><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="../html\N_MLAPI_Attributes.htm" title="MLAPI API Reference" tocid="roottoc">MLAPI API Reference</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="../html/N_MLAPI_Data.htm" title="MLAPI.Data" tocid="N_MLAPI_Data">MLAPI.Data</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="../html/T_MLAPI_Data_NetworkedClient.htm" title="NetworkedClient Class" tocid="T_MLAPI_Data_NetworkedClient">NetworkedClient Class</a></div><div class="toclevel1" data-toclevel="1" data-childrenloaded="true"><a class="tocExpanded" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="../html/Fields_T_MLAPI_Data_NetworkedClient.htm" title="NetworkedClient Fields" tocid="Fields_T_MLAPI_Data_NetworkedClient">NetworkedClient Fields</a></div><div class="toclevel2" data-toclevel="2"><a data-tochassubtree="false" href="../html/F_MLAPI_Data_NetworkedClient_AesKey.htm" title="AesKey Field" tocid="F_MLAPI_Data_NetworkedClient_AesKey">AesKey Field</a></div><div class="toclevel2" data-toclevel="2"><a data-tochassubtree="false" href="../html/F_MLAPI_Data_NetworkedClient_ClientId.htm" title="ClientId Field" tocid="F_MLAPI_Data_NetworkedClient_ClientId">ClientId Field</a></div><div class="toclevel2" data-toclevel="2"><a data-tochassubtree="false" href="../html/F_MLAPI_Data_NetworkedClient_OwnedObjects.htm" title="OwnedObjects Field" tocid="F_MLAPI_Data_NetworkedClient_OwnedObjects">OwnedObjects Field</a></div><div class="toclevel2 current" data-toclevel="2"><a data-tochassubtree="false" href="../html/F_MLAPI_Data_NetworkedClient_PlayerObject.htm" title="PlayerObject Field" tocid="F_MLAPI_Data_NetworkedClient_PlayerObject">PlayerObject Field</a></div></div><div id="tocResizableEW" onmousedown="OnMouseDown(event);"></div><div id="TocResize" class="tocResize"><img id="ResizeImageIncrease" src="../icons/TocOpen.gif" onclick="OnIncreaseToc()" alt="Click or drag to resize" title="Click or drag to resize" /><img id="ResizeImageReset" src="../icons/TocClose.gif" style="display:none" onclick="OnResetToc()" alt="Click or drag to resize" title="Click or drag to resize" /></div></div><div class="topicContent" id="TopicContent"><table class="titleTable"><tr><td class="titleColumn"><h1>NetworkedClient<span id="LST340E2CFB_0"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST340E2CFB_0?cpp=::|nu=.");</script>PlayerObject Field</h1></td><td class="logoColumn"><img width="600" src="../icons/MLAPI_Logo.png" /></td></tr></table><span class="introStyle"></span> <p style="color: #dc143c; font-size: 8.5pt; font-weight: bold;">[This is preliminary documentation and is subject to change.]</p><div class="summary">
The PlayerObject of the Client
</div><p> </p>
<strong>Namespace:</strong>
 <a href="N_MLAPI_Data.htm">MLAPI.Data</a><br />
<strong>Assembly:</strong>
 MLAPI (in MLAPI.dll) Version: 1.0.0.0 (1.0.0.0)<div class="collapsibleAreaRegion"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID1RB')" onkeypress="SectionExpandCollapse_CheckKey('ID1RB', event)" tabindex="0"><img id="ID1RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />Syntax</span></div><div id="ID1RBSection" class="collapsibleSection"><div class="codeSnippetContainer"><div class="codeSnippetContainerTabs"><div id="ID0EACA_tab1" class="codeSnippetContainerTabSingle">C#</div></div><div class="codeSnippetContainerCodeContainer"><div class="codeSnippetToolBar"><div class="codeSnippetToolBarText"><a id="ID0EACA_copyCode" href="#" class="copyCodeSnippet" onclick="javascript:CopyToClipboard('ID0EACA');return false;" title="Copy">Copy</a></div></div><div id="ID0EACA_code_Div1" class="codeSnippetContainerCode" style="display: block"><pre xml:space="preserve"><span class="keyword">public</span> <span class="identifier">GameObject</span> <span class="identifier">PlayerObject</span></pre></div></div></div><script type="text/javascript">AddLanguageTabSet("ID0EACA");</script><a id="HT_RequestExampleLink" href="https://github.com/TwoTenPvP/MLAPI/issues/new" target="_blank" class="button" title="Request an example for this topic">Request Example</a>
<script type="text/javascript">
var HT_requestExampleLink = document.getElementById("HT_RequestExampleLink");
var HT_requestExampleLinkText = HT_requestExampleLink.innerHTML;
if(HT_requestExampleLink.href.substring(0, 4).toLowerCase() == "http")
HT_requestExampleLink.href += "?title=";
else
HT_requestExampleLink.href += "?subject=MLAPI API Reference: ";
HT_requestExampleLink.href += "Add an Example for " + encodeURIComponent(document.title) + "&amp;body=" +
encodeURIComponent("Please add an example for " + document.title + ".%0D%0DTODO (optional): Describe a specific " +
"scenario you would like to see addressed.%0D%0DHelp Topic: " + window.location.href).replace(/%250D/g, "%0D");
HT_requestExampleLink.innerHTML = HT_requestExampleLinkText;
</script><a target="_blank" class="button" href="https://github.com/TwoTenPvP/MLAPI/blob/master/MLAPI/Data/NetworkedClient.cs" title="View the source code">View Source</a><h4 class="subHeading">Field Value</h4>Type: <span class="nolink">GameObject</span></div><div class="collapsibleAreaRegion" id="seeAlsoSection"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID2RB')" onkeypress="SectionExpandCollapse_CheckKey('ID2RB', event)" tabindex="0"><img id="ID2RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />See Also</span></div><div id="ID2RBSection" class="collapsibleSection"><h4 class="subHeading">Reference</h4><div class="seeAlsoStyle"><a href="T_MLAPI_Data_NetworkedClient.htm">NetworkedClient Class</a></div><div class="seeAlsoStyle"><a href="N_MLAPI_Data.htm">MLAPI.Data Namespace</a></div></div></div></div><div id="pageFooter" class="pageFooter"> </div></body></html>

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

Some files were not shown because too many files have changed in this diff Show More