
Este projeto é criado com o objetivo de substituir o steam_api.dll original do Steam por este e, assim, imitar uma conexão para poder jogar jogos no modo LAN. Este não é um invólucro a vapor como Steamworks.Net ou Facepunch . O projeto está em um estágio inicial, por isso ainda não está funcional para alguns jogos.
Algum tempo atrás, não consegui atualizar o repositório devido a problemas pessoais, para que aqueles que desejam colaborar com o desenvolvimento sejam bem -vindos

Ao compilar o projeto, duas pastas são geradas (x64 e x86) que contêm a DLL para diferentes plataformas de destino, no caso de x64, você deve renomear o arquivo para Steam_API64.dll, para imitar a conexão com o vapor de um jogo, você deve substituir a DLL pelo que contém o jogo. Caso o mecanismo do jogo seja o Unity, você pode renomear a DLL para o csteamworks.dll e substituí -lo.
Para usar o cliente, você simplesmente precisa adicionar o jogo e configurar o Appid. O cliente está atualmente em desenvolvimento.
? 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
Implementação do sistema de retorno de chamada.
Steaminternal_contextinit em jogos x86
Quando a opção de log de arquivos SI ativada nas configurações, um arquivo de log será criado dentro da pasta "Raiz Game Pasta/Skynet" com o seguinte nome [SKYNET] steam_api.log
O sistema de plug -in é desenvolvido para estabelecer uma comunicação entre o jogo e o coordenador do jogo, o exemplo a seguir mostra um plug -in básico.
Interface para o plug -in de coordenador de jogo:
namespace SKYNET . Plugin
{
public interface IGameCoordinatorPlugin
{
uint Initialize ( ) ;
void MessageFromGame ( byte [ ] bytes ) ;
EventHandler < Dictionary < uint , byte [ ] > > IsMessageAvailable { get ; set ; }
}
}Exemplo de plug -in do coordenador de jogo:
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 ) ;
}
}
}