forked from IHIHabboImpersonate/R36StandardStuff
/
R36StandardStuff.cs
113 lines (95 loc) · 4.77 KB
/
R36StandardStuff.cs
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
using System;
using System.Net;
using IHI.Server.Events;
using IHI.Server.Install;
using IHI.Server.Network;
using IHI.Server.Network.GameSockets;
using IHI.Server.Network.Messages;
using IHI.Server.Plugins.R36StandardStuff.Packets;
using IHI.Server.Plugins.R36StandardStuff.Packets.Senders;
namespace IHI.Server.Plugins.R36StandardStuff
{
public class R36StandardStuff : Plugin
{
public override string Name
{
get
{
return "R36StandardStuff";
}
}
internal static EventFirer EventFirer
{
get;
private set;
}
public R36StandardStuff()
{
CoreManager.ServerCore.Installer
.AddStepIfMissing(new Step("r36:host", typeof(IPAddress), "R36 Bind IP",
"The IP address to listen for R36 connections on", "127.0.0.1")
.AddExample("192.168.1.70")
.AddExample("123.123.123.123")
.AddExample("127.0.0.1"))
.AddStepIfMissing(new Step("r36:port", typeof(ushort), "R36 Bind Port",
"The port to listen for R36 connections on.", "14478")
.AddExample("14478")
.AddExample("30000"));
}
public GameSocketManager GameSocketManager
{
get;
private set;
}
/// <summary>
/// Called when the plugin is started.
/// </summary>
public override void Start(EventFirer eventFirer)
{
EventFirer = eventFirer;
IPAddress ipAddress = CoreManager.ServerCore.Config.GetValue("r36:bindip", IPAddress.Any).Value;
ushort port = CoreManager.ServerCore.Config.GetValue<ushort>("r36:bindport", 14478).Value;
GameSocketProtocol r36Protocol = new GameSocketProtocol(new ClassicGameSocketReader(), 36);
GameSocketManager = CoreManager.ServerCore.NewGameSocketManager("R36", ipAddress, port, r36Protocol);
GameSocketManager.Start();
CoreManager.ServerCore.EventManager.StrongBind<GameSocketEventArgs>("incoming_game_connection:after", AcceptConnection);
CoreManager.ServerCore.EventManager.WeakBind<GameSocketEventArgs>("incoming_game_connection:after", RegisterLoginHandlers);
CoreManager.ServerCore.EventManager.WeakBind<HabboEventArgs>("habbo_login:after", ConfirmLogin);
CoreManager.ServerCore.EventManager.WeakBind<HabboEventArgs>("habbo_login:after", SendFuserights);
}
private void AcceptConnection(GameSocketEventArgs eventArgs)
{
if (eventArgs.Socket.GameSocketManager != GameSocketManager)
return;
new MAcceptConnection().Send(eventArgs.Socket);
}
private void ConfirmLogin(HabboEventArgs eventArgs)
{
new MAuthenticationOkay().Send(eventArgs.Habbo);
}
private void SendFuserights(HabboEventArgs eventArgs)
{
FuserightEventArgs fuserightEventArgsInstance = new FuserightEventArgs(eventArgs.Habbo);
EventFirer.Fire("fuseright_request:before", eventArgs);
EventFirer.Fire("fuseright_request:after", eventArgs);
new MFuseRights
{
FuseRights = fuserightEventArgsInstance.GetFuserights()
}.Send(eventArgs.Habbo);
}
private void RegisterLoginHandlers(GameSocketEventArgs eventArgs)
{
if (eventArgs.Socket.GameSocketManager != GameSocketManager)
return;
eventArgs.Socket.PacketHandlers[196, GameSocketMessageHandlerPriority.DefaultAction] += Handlers.ProcessPong;
eventArgs.Socket.PacketHandlers[206, GameSocketMessageHandlerPriority.DefaultAction] += Handlers.ProcessEncryptionRequest;
eventArgs.Socket.PacketHandlers[204, GameSocketMessageHandlerPriority.DefaultAction] += Handlers.ProcessSSOTicket;
eventArgs.Socket.PacketHandlers[2002, GameSocketMessageHandlerPriority.DefaultAction] += Handlers.ProcessSessionRequest;
eventArgs.Socket.PacketHandlers[7, GameSocketMessageHandlerPriority.DefaultAction] += Handlers.ProcessAccountDetailsRequest;
eventArgs.Socket.PacketHandlers[8, GameSocketMessageHandlerPriority.DefaultAction] += Handlers.ProcessBalanceRequest;
eventArgs.Socket.PacketHandlers[49, GameSocketMessageHandlerPriority.DefaultAction] += Handlers.ProcessCurrentDateRequest;
eventArgs.Socket.PacketHandlers[157, GameSocketMessageHandlerPriority.DefaultAction] += Handlers.ProcessBadgeStatusRequest;
eventArgs.Socket.PacketHandlers[228, GameSocketMessageHandlerPriority.DefaultAction] += Handlers.ProcessGroupStatusInit;
}
}
}