Skip to content

Commit

Permalink
Add game module & player initialization
Browse files Browse the repository at this point in the history
  • Loading branch information
JayArrowz committed Feb 5, 2021
1 parent 3e09322 commit a5f4271
Show file tree
Hide file tree
Showing 11 changed files with 143 additions and 8 deletions.
11 changes: 11 additions & 0 deletions NetScape.Abstractions/Interfaces/Game/Interface/ITabManager.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
using System.Threading.Tasks;

namespace NetScape.Abstractions.Interfaces.Game.Interface
{
public interface ITabManager
{
Task SetTabAsync(Model.Game.Player player, int tabId, int interfaceId);

int[] Default { get; }
}
}
17 changes: 17 additions & 0 deletions NetScape.Abstractions/Interfaces/Game/Player/IPlayerInitializer.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
using System.Threading.Tasks;

namespace NetScape.Abstractions.Interfaces.Game.Player
{
/// <summary>
/// Initializes a player after login is complete.
/// </summary>
public interface IPlayerInitializer
{
/// <summary>
/// Initializes a <see cref="Model.Game.Player"/> after <see cref="Login.ILoginProvider"/>
/// authenticates the player successfully.
/// </summary>
/// <param name="player">The player.</param>
Task InitializeAsync(Model.Game.Player player);
}
}
18 changes: 18 additions & 0 deletions NetScape.Modules.Game/GameModule.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
using Autofac;
using NetScape.Abstractions.Interfaces.Game.Interface;
using NetScape.Abstractions.Interfaces.Game.Player;
using NetScape.Modules.Game.Interface;
using NetScape.Modules.Game.Player;

namespace NetScape.Modules.Game
{
public class GameModule : Module
{
protected override void Load(ContainerBuilder builder)
{
builder.RegisterType<TabManager>().As<ITabManager>();
builder.RegisterType<PlayerInitializer>().As<IPlayerInitializer>();
base.Load(builder);
}
}
}
21 changes: 21 additions & 0 deletions NetScape.Modules.Game/Interface/TabManager.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
using NetScape.Abstractions.Interfaces.Game.Interface;
using NetScape.Modules.Messages.Encoders;
using System.Threading.Tasks;

namespace NetScape.Modules.Game.Interface
{
public class TabManager : ITabManager
{
public int[] Default { get; } = new int[] { 2423, 3917, 638, 3213, 1644, 5608, 1151, -1, 5065, 5715, 2449, 904, 147, 962, };

public Task SetTabAsync(Abstractions.Model.Game.Player player, int tabId, int interfaceId)
{
var switchTabMessage = new SwitchTabInterfaceMessage
{
InterfaceId = (short)interfaceId,
TabId = (byte)tabId
};
return player.SendAsync(switchTabMessage);
}
}
}
12 changes: 12 additions & 0 deletions NetScape.Modules.Game/NetScape.Modules.Game.csproj
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
<Project Sdk="Microsoft.NET.Sdk">

<PropertyGroup>
<TargetFramework>netcoreapp5.0</TargetFramework>
</PropertyGroup>

<ItemGroup>
<ProjectReference Include="..\NetScape.Abstractions\NetScape.Abstractions.csproj" />
<ProjectReference Include="..\NetScape.Modules.Messages\NetScape.Modules.Messages.csproj" />
</ItemGroup>

</Project>
31 changes: 31 additions & 0 deletions NetScape.Modules.Game/Player/PlayerInitializer.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,31 @@
using NetScape.Abstractions.Interfaces.Game.Interface;
using NetScape.Abstractions.Interfaces.Game.Player;
using NetScape.Modules.Messages.Encoders;
using System.Threading.Tasks;

namespace NetScape.Modules.Game.Player
{
public class PlayerInitializer : IPlayerInitializer
{
private readonly ITabManager _tabManager;

public PlayerInitializer(ITabManager tabManager)
{
_tabManager = tabManager;
}

public async Task InitializeAsync(Abstractions.Model.Game.Player player)
{
var initMessage = new IdAssignmentMessage { IsMembers = 1, NewId = 1 };
await player.SendAsync(initMessage);
player.UpdateAppearance();

var defaultTabs = _tabManager.Default;
for (int tab = 0; tab < defaultTabs.Length; tab++)
{
var interfaceId = defaultTabs[tab];
_ = _tabManager.SetTabAsync(player, tab, interfaceId);
}
}
}
}
14 changes: 7 additions & 7 deletions NetScape.Modules.LoginProtocol/Handlers/LoginDecoder.cs
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@
using DotNetty.Transport.Channels;
using NetScape.Abstractions;
using NetScape.Abstractions.Extensions;
using NetScape.Abstractions.Interfaces.Game.Player;
using NetScape.Abstractions.Interfaces.Login;
using NetScape.Abstractions.Interfaces.Messages;
using NetScape.Abstractions.Interfaces.World;
Expand Down Expand Up @@ -52,13 +53,14 @@ public class LoginDecoder : StatefulFrameDecoder<LoginDecoderState>
private readonly ILoginProcessor<Rs2LoginRequest, Rs2LoginResponse> _loginProcessor;
private readonly IMessageProvider _gameMessageProvider;
private readonly IWorld _world;

public LoginDecoder(ILogger logger, ILoginProcessor<Rs2LoginRequest, Rs2LoginResponse> loginProcessor, IMessageProvider gameMessageProvider, IWorld world) : base(LoginDecoderState.LoginHandshake)
private readonly IPlayerInitializer _playerInitializer;
public LoginDecoder(ILogger logger, ILoginProcessor<Rs2LoginRequest, Rs2LoginResponse> loginProcessor, IMessageProvider gameMessageProvider, IWorld world, IPlayerInitializer playerInitializer) : base(LoginDecoderState.LoginHandshake)
{
_logger = logger;
_gameMessageProvider = gameMessageProvider;
_loginProcessor = loginProcessor;
_world = world;
_playerInitializer = playerInitializer;
}

protected override void Decode(IChannelHandlerContext context, IByteBuffer input, List<object> output, LoginDecoderState state)
Expand Down Expand Up @@ -246,7 +248,8 @@ private async Task WriteProcessorResponseAsync(Rs2LoginResponse loginResult, ICh
{
await ctx.WriteAndFlushAsync(loginResult);
HandleLoginProcessorResponse(loginResult.Player, loginResult.Status, ctx, randomPair);
} catch(Exception e)
}
catch (Exception e)
{
Log.Logger.Error(e, nameof(WriteProcessorResponseAsync));
await ctx.CloseAsync();
Expand Down Expand Up @@ -300,10 +303,7 @@ private void HandleLoginProcessorResponse(Player player, LoginStatus response, I
ctx.GetAttribute(Constants.PlayerAttributeKey).SetIfAbsent(player);
player.ChannelHandlerContext = ctx;
_world.Add(player);

var initMessage = new IdAssignmentMessage { IsMembers = (byte)1, NewId = 1 };
_ = player.SendAsync(initMessage);
player.UpdateAppearance();
_ = _playerInitializer.InitializeAsync(player);
}
}
}
Expand Down
16 changes: 16 additions & 0 deletions NetScape.Modules.Messages/encoder-messages.json
Original file line number Diff line number Diff line change
Expand Up @@ -106,6 +106,22 @@
"Transform": "Add"
}
]
},
{
"Name": "SwitchTabInterfaceMessage",
"Id": 71,
"FrameType": "Fixed",
"Params": [
{
"Name": "InterfaceId",
"Type": "Short"
},
{
"Name": "TabId",
"Type": "Byte",
"Transform": "Add"
}
]
}
]
}
8 changes: 7 additions & 1 deletion NetScape.sln
Original file line number Diff line number Diff line change
Expand Up @@ -32,7 +32,9 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "NetScape.Modules.World.Upda
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "NetScape.Modules.Region", "NetScape.Modules.Region\NetScape.Modules.Region.csproj", "{C1622972-D92D-41E7-8547-D20BD0D2F6D1}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "NetScape.Modules.Region.Collision", "NetScape.Modules.Region.Collision\NetScape.Modules.Region.Collision.csproj", "{DD128036-A424-4432-8B59-CBDB3E10531D}"
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "NetScape.Modules.Region.Collision", "NetScape.Modules.Region.Collision\NetScape.Modules.Region.Collision.csproj", "{DD128036-A424-4432-8B59-CBDB3E10531D}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "NetScape.Modules.Game", "NetScape.Modules.Game\NetScape.Modules.Game.csproj", "{2F68D1D5-2637-4B34-A2F7-4DCDAC66A74A}"
EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Expand Down Expand Up @@ -96,6 +98,10 @@ Global
{DD128036-A424-4432-8B59-CBDB3E10531D}.Debug|Any CPU.Build.0 = Debug|Any CPU
{DD128036-A424-4432-8B59-CBDB3E10531D}.Release|Any CPU.ActiveCfg = Release|Any CPU
{DD128036-A424-4432-8B59-CBDB3E10531D}.Release|Any CPU.Build.0 = Release|Any CPU
{2F68D1D5-2637-4B34-A2F7-4DCDAC66A74A}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{2F68D1D5-2637-4B34-A2F7-4DCDAC66A74A}.Debug|Any CPU.Build.0 = Debug|Any CPU
{2F68D1D5-2637-4B34-A2F7-4DCDAC66A74A}.Release|Any CPU.ActiveCfg = Release|Any CPU
{2F68D1D5-2637-4B34-A2F7-4DCDAC66A74A}.Release|Any CPU.Build.0 = Release|Any CPU
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
Expand Down
2 changes: 2 additions & 0 deletions NetScape/Kernel.cs
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@
using NetScape.Abstractions.Model.Game.Walking;
using NetScape.Modules.Cache;
using NetScape.Modules.DAL;
using NetScape.Modules.Game;
using NetScape.Modules.Logging.SeriLog;
using NetScape.Modules.LoginProtocol;
using NetScape.Modules.Messages;
Expand Down Expand Up @@ -69,6 +70,7 @@ private static void ConfigureAutofac(ContainerBuilder containerBuilder)
containerBuilder.RegisterModule(new UpdatingModule());
containerBuilder.RegisterModule(new RegionModule());
containerBuilder.RegisterModule(new CollisionModule());
containerBuilder.RegisterModule(new GameModule());
containerBuilder.RegisterType<WalkingQueueHandler>();
containerBuilder.RegisterType<FileSystem>().As<IFileSystem>();
containerBuilder.RegisterType<ContainerProvider>().SingleInstance();
Expand Down
1 change: 1 addition & 0 deletions NetScape/NetScape.csproj
Original file line number Diff line number Diff line change
Expand Up @@ -34,6 +34,7 @@
<ProjectReference Include="..\NetScape.Abstractions\NetScape.Abstractions.csproj" />
<ProjectReference Include="..\NetScape.GameServer\NetScape.Modules.Server.csproj" />
<ProjectReference Include="..\NetScape.Modules.DAL\NetScape.Modules.DAL.csproj" />
<ProjectReference Include="..\NetScape.Modules.Game\NetScape.Modules.Game.csproj" />
<ProjectReference Include="..\NetScape.Modules.Logging.SeriLog\NetScape.Modules.Logging.SeriLog.csproj" />
<ProjectReference Include="..\NetScape.Modules.LoginProtocol\NetScape.Modules.LoginProtocol.csproj" />
<ProjectReference Include="..\NetScape.Modules.Cache\NetScape.Modules.Cache.csproj" />
Expand Down

0 comments on commit a5f4271

Please sign in to comment.