Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 5 additions & 1 deletion Game.Client/C_BaseEntity.cs
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@

using Source;
using Source.Common;
using Source.Common.GarrysMod;
using Source.Common.Bitbuffers;
using Source.Common.Commands;
using Source.Common.Engine;
Expand Down Expand Up @@ -680,6 +681,9 @@ public C_BaseEntity() {
ReadyToDraw = true;
PredictionContext = null;
Clear();
#if GMOD_DLL
GMOD_DataTable = engine.GMOD_CreateDataTable(Game.Client.GarrysMod.LuaDataTable.GMOD_DataTableRecvProxy);
#endif
}

public virtual bool IsTwoPass() => modelinfo.IsTranslucentTwoPass(GetModel());
Expand Down Expand Up @@ -794,7 +798,7 @@ public C_BaseEntity() {
public InlineArray512<char> GMOD_String3;

[NetworkName("m_GMOD_DataTable")]
public readonly GModTable GMOD_DataTable = new();
public readonly IGMODDataTable GMOD_DataTable;

[NetworkName("m_nSpeed")]
public int Speed;
Expand Down
21 changes: 17 additions & 4 deletions Game.Client/HLClient.cs
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
using CommunityToolkit.HighPerformance;

using Game.Client.GarrysMod;
using Game.Client.HL2;
using Game.Client.HUD;
using Game.Shared;
Expand Down Expand Up @@ -266,16 +267,28 @@ public void View_Render(ViewRects rects) {

public void InstallStringTableCallback(ReadOnlySpan<char> tableName) {
switch (tableName) {
case "networkstring":
case "VguiScreen": Warning("FIXME: VguiScreen string table not being processed yet\n"); break;
case "Materials": Warning("FIXME: Materials string table not being processed yet\n"); break;
case "EffectDispatch": Warning("FIXME: EffectDispatch string table not being processed yet\n"); break;
// I don't think InfoPanel is a thing?
case "Scenes":
g_pStringTableClientSideChoreoScenes = networkstringtable.FindTable(tableName);
break;
case "ParticleEffectNames": Warning("FIXME: ParticleEffectNames string table not being processed yet\n"); break;
#if GMOD_DLL
case Protocol.NETWORKSTRING_TABLENAME:
Game.Client.GarrysMod.NetworkString.Install();
break;
case Protocol.NETWORKVARS_TABLENAME:
Game.Client.GarrysMod.NetworkVarNames.Install();
break;
case Protocol.CLIENT_LUA_FILES_TABLENAME:
Game.Client.GarrysMod.GModDataPack.DataPack().Initialize();
break;
case "Scenes":
g_pStringTableClientSideChoreoScenes = networkstringtable.FindTable(tableName);
break;
#endif
}
// todo: review if this exists. Came from Raphaeli's attempts, may not be present now?
// GarrysMod.GarrysMod.StringTable.Install();

GameRulesRegister.InstallStringTableCallback_GameRules();
}
Expand Down
6 changes: 5 additions & 1 deletion Game.Server/BaseEntity.cs
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@

using Source;
using Source.Common;
using Source.Common.GarrysMod;
using Source.Common.Audio;
using Source.Common.Commands;
using Source.Common.Engine;
Expand Down Expand Up @@ -818,6 +819,9 @@ public BaseEntity(bool serverOnly) {
NetworkProp().MarkPVSInformationDirty();

AddEFlags(EFL.UsePartitionWhenNotSolid);
#if GMOD_DLL
GMOD_DataTable = engine.GMOD_CreateDataTable();
#endif
}

public virtual void StopLoopingSounds() { }
Expand Down Expand Up @@ -1596,7 +1600,7 @@ public bool IsFloating() {
public readonly PredictableId PredictableId = new();

[NetworkName("m_GMOD_DataTable")]
public readonly GModTable GMOD_DataTable = new();
public readonly IGMODDataTable GMOD_DataTable;

public float Speed;

Expand Down
4 changes: 2 additions & 2 deletions Game.Server/GameInterface.cs
Original file line number Diff line number Diff line change
Expand Up @@ -238,7 +238,7 @@ public void CreateNetworkStringTables() {
#if GMOD_DLL
// TODO: GarrysMod::StringTable::Create
Game.Server.GarrysMod.NetworkString.Create();
// TODO: NetworkVarNames::Create
Game.Server.GarrysMod.NetworkVarNames.Create();
Game.Server.GarrysMod.GModDataPack.DataPack().Initialize();

StringTableBits.SV_SetupNetworkStringTableBits();
Expand Down Expand Up @@ -416,7 +416,7 @@ public void GMOD_OnStringTablesRemoved() {
GameRulesRegister.ResetNetworkStringTables_GameRules();
#if GMOD_DLL
Game.Server.GarrysMod.NetworkString.Reset();
// todo: NetworkVarNames::Reset
Game.Server.GarrysMod.NetworkVarNames.Reset();
Game.Server.GarrysMod.GModDataPack.DataPack().Reset();
#endif
}
Expand Down
1 change: 1 addition & 0 deletions Game.Server/GarrysMod/GMOD_Player.cs
Original file line number Diff line number Diff line change
Expand Up @@ -57,6 +57,7 @@ public partial class GMOD_Player : HL2MP_Player

public override void InitialSpawn() {
base.InitialSpawn();
LuaNetworkedVars.g_LuaNetworkedVars!.PlayerInsert(this);
}

public override BaseEntity EntSelectSpawnPoint() {
Expand Down
28 changes: 19 additions & 9 deletions Game.Shared/GarrysMod/GarrysMod.cs
Original file line number Diff line number Diff line change
Expand Up @@ -267,9 +267,15 @@ public void Startup() {
Msg("Clientside Lua startup!\n");
enginevgui.UpdateCustomProgressBar(0.95f, "Starting Lua...");
#endif
// if (g_LuaNetworkedVars != null)
// Error("g_LuaNetworkedVars");
// g_LuaNetworkedVars = new LuaNetworkedVars();
#if CLIENT_DLL
if (LuaNetworkedVars.g_LuaNetworkedVars != null)
Error("g_LuaNetworkedVars");
LuaNetworkedVars.g_LuaNetworkedVars = new LuaNetworkedVars();
#else
if (Game.Server.GarrysMod.LuaNetworkedVars.g_LuaNetworkedVars != null)
Error("g_LuaNetworkedVars");
Game.Server.GarrysMod.LuaNetworkedVars.g_LuaNetworkedVars = new Game.Server.GarrysMod.LuaNetworkedVars();
#endif
if (g_Lua != null)
Error("CLuaManager::Startup Lua already exsits?\n");

Expand Down Expand Up @@ -379,10 +385,15 @@ public void Shutdown() {
#endif
get.LuaShared()!.CloseLuaInterface(g_Lua!);
g_Lua = null;
// if (g_LuaNetworkedVars == null)
// Error("!g_LuaNetworkedVars");
// todo: free every entry of g_LuaNetworkedVars
// g_LuaNetworkedVars = null;
#if CLIENT_DLL
if (LuaNetworkedVars.g_LuaNetworkedVars == null)
Error("!g_LuaNetworkedVars");
LuaNetworkedVars.g_LuaNetworkedVars = null;
#else
if (Game.Server.GarrysMod.LuaNetworkedVars.g_LuaNetworkedVars == null)
Error("!g_LuaNetworkedVars");
Game.Server.GarrysMod.LuaNetworkedVars.g_LuaNetworkedVars = null;
#endif
}
}

Expand Down Expand Up @@ -468,12 +479,11 @@ public void Think() {
if (g_Lua != null) {
// CheckForFilesystemChanges();
g_Lua.Cycle();
// if (g_LuaNetworkedVars != null)
// g_LuaNetworkedVars.Cycle();
#if CLIENT_DLL
LuaTimer.Cycle();
LuaFileLibrary.AsyncCycle();
#else
Game.Server.GarrysMod.LuaNetworkedVars.g_LuaNetworkedVars?.Cycle();
Game.Server.GarrysMod.LuaTimer.Cycle();
Game.Server.GarrysMod.LuaFileLibrary.AsyncCycle();
#endif
Expand Down
Loading