Players Edit this page on GitHub
Introduction
The BasePlayer
class represents a SA-MP player. This class contains the
methods, properties and events related to players.
public class GameMode : BaseMode
{
// ...
protected override void OnPlayerConnected(BasePlayer player, EventArgs e)
{
// Always call the base event invocator so the event can propagate.
base.OnPlayerConnected(player, e);
player.Money = 1000000;
player.SendClientMessage($"Welcome, {player.Name}! You are now a millionaire!");
}
}
Subclassing
In order to allow you to store additional data for the player, SampSharp allows you to create a subclass of the BasePlayer
class. In your subclass you can create properties, fields and methods for storing and consuming your data. Because you're likely to create a subclass of the player class, SampSharp has conveniently called it BasePlayer
instead of Player
to avoid confusion in your code.
public class Player : BasePlayer
{
public bool IsCop { get; set; }
// ...
}
Suggestions for ORM
It is usually a necesity to store your players in a database, so they can register an account, log in etc. For this, you'll most likely opt to use an ORM, such as Entity Framework/EF Core, Dapper, NHibernate etc. to map your local classes to the tables in your database.
Entity Framework Core - Code First
In order to use Entity Framework Core as your ORM, you will have to install it. Follow the steps provided in the official EF Core Documentation in order to install EF Core. After you've installed Entity Framework Core, you will have to add a Context.
Note: We recommend creating a different project inside your solution for database logic, in order to reuse it in things like a UCP Website or a mobile app if needed.
After you've created your context (named ServerDbContext
in the rest of the tutorial), create a class that will represent what information about your player you want stored in the database (named PlayerData
in this tutorial).
Sample PlayerData
:
public class PlayerData
{
public int Id { get; set; }
public string UserName { get; set; }
public string PasswordHash { get; set; }
public int PhoneNumber { get; set; }
//etc.
}
Sample context:
public class ServerDbContext : DbContext
{
public DbSet<PlayerData> Players { get; set; }
protected override void OnConfiguring (DbContextOptionsBuilder optionsBuilder)
{ // Configure your connection
base.OnConfiguring(optionsBuilder);
optionsBuilder.UseSqlServer("Server=(localdb)\\mssqllocaldb;Database=mydatabase;Trusted_Connection=True;");
// This is a sample using Microsoft SQL Server. For MySQL, install a provider and use UseMySql instead of SqlServer.
}
}
Afterwards, in your custom subclass of the BasePlayer
class (named Player
), add a field for a link with an instance of PlayerData
public class Player : BasePlayer
{
public PlayerData PlayerData { get; set; }
// ...
}
Once your user logs in, you can set this value to the PlayerData
instance returned by querying your database for your user's details and then you can proceed to use this in your gamemode.