
Этот проект создан с целью замены оригинального steam_api.dll из STEAM с этим и, таким образом, подражать соединению, чтобы играть в игры в режиме LAN. Это не обертка Steamworks, такая как Steamworks.Net или Facepunch . Проект находится на начальном этапе, поэтому он еще не функционален для некоторых игр.
Некоторое время назад я не смог обновить репозиторий из -за личных проблем, поэтому те, кто хочет сотрудничать с разработкой, приветствуются

При компиляции проекта генерируются две папки (x64 и x86), которые содержат DLL для различной целевой платформы, в случае x64 вы должны переименовать файл в STARE_API64.dll, чтобы подражать соединению с паром игры. Вы должны заменить DLL на тот, который содержит игру. В случае, если игровой двигатель является Unity, вы можете переименовать 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
Реализация системы обратного вызова.
Steaminternal_contextinit в x86 играх
При опции журнала файла Si включена в настройках, в папке «Folder»/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 ) ;
}
}
}