diff --git a/Barotrauma/BarotraumaShared/Lua/DefaultLib.lua b/Barotrauma/BarotraumaShared/Lua/DefaultLib.lua index d5ee7d550..2afe04c7e 100644 --- a/Barotrauma/BarotraumaShared/Lua/DefaultLib.lua +++ b/Barotrauma/BarotraumaShared/Lua/DefaultLib.lua @@ -16,52 +16,36 @@ local CreateStatic = function (typeName, addCallMethod) return staticUserdata end +local CreateEnum = LuaUserData.CreateEnumTable + defaultLib["Descriptors"] = descriptors defaultLib["Byte"] = CreateStatic("Barotrauma.LuaByte", true) defaultLib["UShort"] = CreateStatic("Barotrauma.LuaUShort", true) defaultLib["Float"] = CreateStatic("Barotrauma.LuaFloat", true) -defaultLib["SpawnType"] = CreateStatic("Barotrauma.SpawnType") -defaultLib["ChatMessageType"] = CreateStatic("Barotrauma.Networking.ChatMessageType") -defaultLib["ServerLog_MessageType"] = CreateStatic("Barotrauma.Networking.ServerLog+MessageType") -defaultLib["ServerLogMessageType"] = CreateStatic("Barotrauma.Networking.ServerLog+MessageType") -defaultLib["PositionType"] = CreateStatic("Barotrauma.Level+PositionType") -defaultLib["InvSlotType"] = CreateStatic("Barotrauma.InvSlotType") -defaultLib["LimbType"] = CreateStatic("Barotrauma.LimbType") -defaultLib["ActionType"] = CreateStatic("Barotrauma.ActionType") -defaultLib["AbilityEffectType"] = CreateStatic("Barotrauma.AbilityEffectType") -defaultLib["StatTypes"] = CreateStatic("Barotrauma.StatTypes") -defaultLib["AbilityFlags"] = CreateStatic("Barotrauma.AbilityFlags") -defaultLib["DeliveryMethod"] = CreateStatic("Barotrauma.Networking.DeliveryMethod") -defaultLib["ClientPacketHeader"] = CreateStatic("Barotrauma.Networking.ClientPacketHeader") -defaultLib["ServerPacketHeader"] = CreateStatic("Barotrauma.Networking.ServerPacketHeader") -defaultLib["RandSync"] = CreateStatic("Barotrauma.Rand+RandSync") -defaultLib["DisconnectReason"] = CreateStatic("Barotrauma.Networking.DisconnectReason") -defaultLib["TraitorMessageType"] = CreateStatic("Barotrauma.Networking.TraitorMessageType") -defaultLib["CombatMode"] = CreateStatic("Barotrauma.AIObjectiveCombat+CombatMode") -defaultLib["CauseOfDeathType"] = CreateStatic("Barotrauma.CauseOfDeathType") -defaultLib["CharacterTeamType"] = CreateStatic("Barotrauma.CharacterTeamType") -defaultLib["InputType"] = { - Select = 0, Use = 1, Aim = 2, Up = 3, Down = 4, Left = 5, Right = 6, Attack = 7, Run = 8, Crouch = 9, InfoTab = 10, Chat = 11, RadioChat = 12, CrewOrders = 13, Ragdoll = 14, Health = 15, Grab = 16, SelectNextCharacter = 17, SelectPreviousCharacter = 18, Voice = 19, LocalVoice = 20, Deselect = 21, Shoot = 22, Command = 23, ToggleInventory = 24, TakeOneFromInventorySlot = 25, TakeHalfFromInventorySlot = 26, NextFireMode = 27, PreviousFireMode = 28 -} - -defaultLib["ClientPermissions"] = { - None = 0x0, - ManageRound = 0x1, - Kick = 0x2, - Ban = 0x4, - Unban = 0x8, - SelectSub = 0x10, - SelectMode = 0x20, - ManageCampaign = 0x40, - ConsoleCommands = 0x80, - ServerLog = 0x100, - ManageSettings = 0x200, - ManagePermissions = 0x400, - KarmaImmunity = 0x800, - All = 0xFFF -} +defaultLib["SpawnType"] = CreateEnum("Barotrauma.SpawnType") +defaultLib["ChatMessageType"] = CreateEnum("Barotrauma.Networking.ChatMessageType") +defaultLib["ServerLog_MessageType"] = CreateEnum("Barotrauma.Networking.ServerLog+MessageType") +defaultLib["ServerLogMessageType"] = CreateEnum("Barotrauma.Networking.ServerLog+MessageType") +defaultLib["PositionType"] = CreateEnum("Barotrauma.Level+PositionType") +defaultLib["InvSlotType"] = CreateEnum("Barotrauma.InvSlotType") +defaultLib["LimbType"] = CreateEnum("Barotrauma.LimbType") +defaultLib["ActionType"] = CreateEnum("Barotrauma.ActionType") +defaultLib["AbilityEffectType"] = CreateEnum("Barotrauma.AbilityEffectType") +defaultLib["StatTypes"] = CreateEnum("Barotrauma.StatTypes") +defaultLib["AbilityFlags"] = CreateEnum("Barotrauma.AbilityFlags") +defaultLib["DeliveryMethod"] = CreateEnum("Barotrauma.Networking.DeliveryMethod") +defaultLib["ClientPacketHeader"] = CreateEnum("Barotrauma.Networking.ClientPacketHeader") +defaultLib["ServerPacketHeader"] = CreateEnum("Barotrauma.Networking.ServerPacketHeader") +defaultLib["RandSync"] = CreateEnum("Barotrauma.Rand+RandSync") +defaultLib["DisconnectReason"] = CreateEnum("Barotrauma.Networking.DisconnectReason") +defaultLib["TraitorMessageType"] = CreateEnum("Barotrauma.Networking.TraitorMessageType") +defaultLib["CombatMode"] = CreateEnum("Barotrauma.AIObjectiveCombat+CombatMode") +defaultLib["CauseOfDeathType"] = CreateEnum("Barotrauma.CauseOfDeathType") +defaultLib["CharacterTeamType"] = CreateEnum("Barotrauma.CharacterTeamType") +defaultLib["InputType"] = CreateEnum("Barotrauma.InputType") +defaultLib["ClientPermissions"] = CreateEnum("Barotrauma.Networking.ClientPermissions") defaultLib["WayPoint"] = CreateStatic("Barotrauma.WayPoint", true) diff --git a/Barotrauma/BarotraumaShared/Lua/DefaultRegister.lua b/Barotrauma/BarotraumaShared/Lua/DefaultRegister.lua index 480c397d3..334388984 100644 --- a/Barotrauma/BarotraumaShared/Lua/DefaultRegister.lua +++ b/Barotrauma/BarotraumaShared/Lua/DefaultRegister.lua @@ -22,17 +22,11 @@ RegisterBarotrauma("LuaByte") RegisterBarotrauma("LuaUShort") RegisterBarotrauma("LuaFloat") -RegisterBarotrauma("CauseOfDeathType") RegisterBarotrauma("Level+InterestingPosition") -RegisterBarotrauma("Level+PositionType") -RegisterBarotrauma("Networking.TraitorMessageType") -RegisterBarotrauma("SpawnType") -RegisterBarotrauma("Networking.ChatMessageType") RegisterBarotrauma("Job") RegisterBarotrauma("JobPrefab") RegisterBarotrauma("Level") -RegisterBarotrauma("Networking.ServerLog+MessageType") RegisterBarotrauma("WayPoint") RegisterBarotrauma("Character") RegisterBarotrauma("Item") @@ -56,15 +50,9 @@ RegisterBarotrauma("EntitySpawner") RegisterBarotrauma("MapEntity") RegisterBarotrauma("MapEntityPrefab") RegisterBarotrauma("CauseOfDeath") -RegisterBarotrauma("CharacterTeamType") RegisterBarotrauma("Hull") RegisterBarotrauma("Gap") RegisterBarotrauma("PhysicsBody") -RegisterBarotrauma("InvSlotType") -RegisterBarotrauma("LimbType") -RegisterBarotrauma("ActionType") -RegisterBarotrauma("AbilityEffectType") -RegisterBarotrauma("StatTypes") RegisterBarotrauma("AbilityFlags") RegisterBarotrauma("ItemPrefab") RegisterBarotrauma("SerializableProperty") @@ -127,7 +115,6 @@ RegisterBarotrauma("AIObjectiveRepairItems") RegisterBarotrauma("AIObjectiveRescue") RegisterBarotrauma("AIObjectiveRescueAll") RegisterBarotrauma("AIObjectiveReturn") -RegisterBarotrauma("AIObjectiveCombat+CombatMode") RegisterBarotrauma("TalentPrefab") RegisterBarotrauma("TalentOption") @@ -175,20 +162,13 @@ end RegisterBarotrauma("Networking.IWriteMessage") RegisterBarotrauma("Networking.IReadMessage") -RegisterBarotrauma("Networking.ServerPacketHeader") -RegisterBarotrauma("Networking.ClientPacketHeader") -RegisterBarotrauma("Networking.DeliveryMethod") -RegisterBarotrauma("Networking.DeliveryMethod") RegisterBarotrauma("Networking.NetEntityEvent") -RegisterBarotrauma("Networking.NetEntityEvent+Type") RegisterBarotrauma("Networking.INetSerializable") -RegisterBarotrauma("Networking.DisconnectReason") Register("Lidgren.Network.NetIncomingMessage") Register("Lidgren.Network.NetConnection") Register("System.Net.IPEndPoint") Register("System.Net.IPAddress") -RegisterBarotrauma("Rand+RandSync") RegisterBarotrauma("Skill") RegisterBarotrauma("SkillPrefab") RegisterBarotrauma("TraitorMissionPrefab") diff --git a/Barotrauma/BarotraumaShared/SharedSource/Lua/LuaClasses/LuaUserData.cs b/Barotrauma/BarotraumaShared/SharedSource/Lua/LuaClasses/LuaUserData.cs index f19771061..177f7723a 100644 --- a/Barotrauma/BarotraumaShared/SharedSource/Lua/LuaClasses/LuaUserData.cs +++ b/Barotrauma/BarotraumaShared/SharedSource/Lua/LuaClasses/LuaUserData.cs @@ -1,4 +1,5 @@ using System; +using System.Collections.Generic; using System.Linq; using System.Reflection; using MoonSharp.Interpreter; @@ -87,6 +88,28 @@ namespace Barotrauma return generic.Invoke(null, null); } + public static object CreateEnumTable(string typeName) + { + Type type = GetType(typeName); + + if (type == null) + { + GameMain.Lua.HandleLuaException(new Exception($"Tried to create an enum table with a type that doesn't exist:: {typeName}.")); + return null; + } + + Dictionary result = new Dictionary(); + + foreach (var value in Enum.GetValues(type)) + { + string name = Enum.GetName(type, value); + + result[name] = value; + } + + return result; + } + public static void MakeFieldAccessible(IUserDataDescriptor IUUD, string fieldName) { if (IUUD == null)