SKYNET Steam Emulator
1.0.0

このプロジェクトは、Steamの元のsteam_api.dll Steamからこのものに置き換えることを目的として作成され、LANモードでゲームをプレイできるように接続をエミュレートすることを目的としています。これは、 Steamworks.NetやFacepunchのようなSteamWorksラッパーではありません。このプロジェクトは初期段階にあるため、一部のゲームではまだ機能していません。
しばらく前に、個人的な問題のためにリポジトリを更新することができなかったので、開発と協力したい人は大歓迎です

プロジェクトをコンパイルすると、異なるターゲットプラットフォームのDLLを含む2つのフォルダー(x64およびx86)が生成されます。x64の場合、ファイルをSteam_api64.dllに変更する必要があります。ゲームエンジンが統一されている場合は、dllをcsteamworks.dllに変更して置き換えることができます。
クライアントを使用するには、ゲームを追加してAppIDを構成する必要があります。クライアントは現在開発中です。
? Root client folder
├──? x64 // The x64 version of the SteamAPI dll that will be injected
├──? x86 // The x64 version of the SteamAPI dll that will be injected
└──? Data
├──? Assemblies // Contains client libraries (Including cefsharp api or gecko)
├──? Images // Contains app cache and avatar images
├──? Injector // Contains the DLL injectors
├──? www // Contains the web files
├──? Storage // Contains stats and achievements files
| └──? Remote // Contains game files
└──? Games.bin // Stored game list
? Root server folder
└──? Data
├──? Assemblies // Contains server libraries
├──? Images // Contains app cache and avatar images
├──? MongoDB // Contains local MongoDB server
└──? Storage // Contains some server files
User Stats manager Save and Load user stats from local folder.
Achievements manager Save and Load user achievements from local folder.
CSteamworks emulation Rename the emu to CSteamworks.dll to emulate them.
Supported Game Engines Works with multiple game engines like Source 2, Unity 3D etc.
Network communication Network communication between clients through a configurable port.
Overlay External Overlay for steam and game messages.
DLC Unlock all downloaded DLCs.
Avatar support Load avatar from file (Avatar.jpg) inside SKYNET folder and share it through the network.
Plugin system Load external plugin to communicate with the emu.
In game voice Fully functional voice system
コールバックシステムの実装。
X86ゲームのSteamInternal_Contextinit
ファイルログオプションSIが設定で有効になっている場合、次の名前の[ルートゲームフォルダー/Skynet]フォルダー内にログファイルが作成されます[SKYNET] steam_api.log
プラグインシステムは、ゲームとゲームコーディネーターの間の通信を確立するために開発されています。次の例は、基本的なプラグインを示しています。
ゲームコーディネータープラグインのインターフェイス:
namespace SKYNET . Plugin
{
public interface IGameCoordinatorPlugin
{
uint Initialize ( ) ;
void MessageFromGame ( byte [ ] bytes ) ;
EventHandler < Dictionary < uint , byte [ ] > > IsMessageAvailable { get ; set ; }
}
}ゲームコーディネータープラグインの例:
namespace SKYNET . Plugin
{
public class Dota2GameCoordinator : IGameCoordinatorPlugin
{
private uint AppID = 570 ;
public EventHandler < Dictionary < uint , byte [ ] > > IsMessageAvailable { get ; set ; }
public uint Initialize ( )
{
// TODO: Initialize all Game coordinator class
return AppID ;
}
public void MessageFromGame ( byte [ ] bytes )
{
// Process message from game
uint MsgType = MsgUtil . GetGCMsg ( new MemoryStream ( bytes ) . ReadUInt32L ( ) ) ;
IPacketGCMsg packetGCMsg = MsgUtil . GetPacketGcMsg ( MsgType , bytes ) ;
// TODO: Process GC message
}
public void SendPacketToGame ( uint msgType , byte [ ] packet )
{
Dictionary < uint , byte [ ] > message = new Dictionary < uint , byte [ ] > ( ) ;
message . Add ( msgType , packet ) ;
IsMessageAvailable ? . Invoke ( this , message ) ;
}
public void SendPacketToGame ( Dictionary < uint , byte [ ] > messages )
{
IsMessageAvailable ? . Invoke ( this , messages ) ;
}
}
}