When player.Name is fired, it gets the name of the player tied to their PlayerObject, which is preloaded as indicated below.
Here's an isolated version of my problem:
- Code: Select all
public override void GameStarted()
{
PreloadPlayerObjects = true;
}
public override bool AllowUserJoin(GamePlayer player)
{
if (player.Name == string.Empty) // Check to see if the player's name is empty. (it is in this case)
{
Console.WriteLine(player.ConnectUserId + " tried to join and failed because they do not have a name!");
return false;
}
}
public class GamePlayer : CommonPlayer
{
public float X, Y = Configuration.Block.Size;
}
public class CommonPlayer : BasePlayer
{
public virtual string Name { get { return PlayerObject.GetString("Name", string.Empty); } set { PlayerObject.Set("Name", value); } }
public virtual Rank Rank { get { return (Rank)PlayerObject.GetInt("Rank", (int)Rank.None); } set { PlayerObject.Set("Rank", (int)value); } }
}
Error Outputted:
- Code: Select all
simpleAccount tried to join and failed because they do not have a name!
>User simpleAccount (1): Left game
>Error: Object reference not set to an instance of an object.
at PlayerIO.ServerCore.GameManager.GameHost.runEvent_(GameEvent evt, BasePlayer player, Message message, Action action)
at PlayerIO.ServerCore.GameManager.GameHost.<>c__DisplayClass3c.<RunEvent>b__3a()
at PlayerIO.ServerCore.GameManager.ExternalCodeManager.RunExternalCode[T](UInt32 gameId, Func`1 externalCode, Nullable`1 maxNaturalTimeOverride, Int64& ticks)
at PlayerIO.ServerCore.GameManager.GameHost.RunEvent(GameEvent evt, BasePlayer player, Message message, Action action)
Please help!
Emalton