As I was writing my code I ran into an issue where one of my modules needs to require a module that already required this module which will cause an error. I’m not entirely sure how I can rewrite my code to get around this problem.
I have my main server script which is in charge of setting things up and handling events from the client
local function playerConnected(player)
print("Player Connected")
local playerObject = Server:addConnection(player)
end
local function playerDisconnected(player)
print("Player Disconnected")
end
local function update(deltaTime)
Combat:update()
end
function Server:addConnection(player)
print("Adding Connections")
local playerObject = Player.new(player)
playerObjects[player] = playerObject
return playerObject
end
function Server:GetPlayerByInstance(player)
return playerObjects[player]
end
function Server.initialize()
local eventHandler = {}
Players.PlayerAdded:Connect(playerConnected)
Players.PlayerRemoving:Connect(playerDisconnected)
RunService.Heartbeat:Connect(update)
ProximityPromptService.PromptTriggered:Connect(onPromptTriggered)
eventHandler[eventType.inputData] = function(event, player)
Combat:handleAction(Server:GetPlayerByInstance(player), action)
end
remoteEvent.OnServerEvent:Connect(function(player, event)
local func = eventHandler[event.t]
if func ~= nil then
func(event, player)
end
end)
end
I then have my combat script which needs to make use of GetPlayerByInstance
for the target/defender, but I can’t use it since I can’t require the server script.
function Combat:checkCollision(hitbox)
local hitboxCFrame = hitbox.cframe
local hitboxSize = hitbox.size
local result = workspace:GetPartBoundsInBox(hitboxCFrame, hitboxSize, overlapParams)
if #result <= 1 then return end
for _, part in ipairs(result) do
local target = part.Parent
local humanoid = target:FindFirstChild("Humanoid")
if target == hitbox.owner.character then continue end
if not humanoid then continue end
if hitbox.hits[humanoid] then continue end
hitbox.hits[humanoid] = true
-- Server:GetPlayerByInstance(Players:GetPlayerFromCharacter(target))
self:onHit(hitbox.owner, target)
end
end