[Resolved] OOP Functions Not Inherited?
Asked by
3 years ago Edited 3 years ago
I'm currently writing some OOP code for doors. For some reason, the newly created door objects return nil when they call a function of the LevelDoor class. The functions and constructor are both stored within a module script whilst a function is being called from a serverscript. I've tried calling another function and nil is returned all the same. It appears the functions aren’t being inherited. How can this be resolved and what’s causing the issue?
Error
ServerScriptService.ServerModules.LevelDoorLib Test:16: attempt to call a nil value
Module Script
02 | LevelDoor._index = LevelDoor |
05 | local Players = game:GetService( "Players" ) |
08 | function LevelDoor.new(door) |
09 | local NewLevelDoor = { } |
11 | NewLevelDoor.Door = door.Head |
12 | NewLevelDoor.Config = require(door.LevelDoorConfig) |
13 | NewLevelDoor.AreaName = NewLevelDoor.Config.AreaName or "Realm" |
14 | NewLevelDoor.RequiredLevel = NewLevelDoor.Config.RequiredLevel or 0 |
15 | NewLevelDoor.GUI = door.BillboardGui.TextLabel |
17 | NewLevelDoor.TeleportPositionOnAccessDenied = NewLevelDoor.Config.TeleportPositionOnAccessDenied or workspace:WaitForChild( "ToSpawn" ).CFrame + Vector 3. new( 0 , 2.75 , 0 ) |
18 | NewLevelDoor.OpenedTransparency = NewLevelDoor.Config.OpenedTransparency or 0.3 |
19 | NewLevelDoor.ClosedTransparency = NewLevelDoor.Config.ClosedTransparency or 0.6 |
20 | NewLevelDoor.TimeOpen = NewLevelDoor.Config.TimeOpen or 0.5 |
23 | NewLevelDoor.Cooldown = false |
24 | NewLevelDoor.GUI.Text = NewLevelDoor.AreaName .. " | Level " .. NewLevelDoor.RequiredLevel |
25 | return setmetatable (NewLevelDoor, LevelDoor) |
28 | function LevelDoor:OnTouch(hit) |
29 | local PassPlayerCheck, Player = self:IsAPlayer(hit) |
30 | print (PassPlayerCheck, Player) |
31 | if PassPlayerCheck and not self.Cooldown then |
33 | local PassLevelCheck = self:PassesRequiredLevel(Player) |
35 | if PassLevelCheck then |
37 | elseif not PassLevelCheck then |
38 | local Character = Player.Character or Player.CharacterAdded:Wait() |
39 | Character.PrimaryPart.CFrame = self.TeleportPositionOnAccessDenied |
Serverscript
02 | local ServerScriptService = game:GetService( "ServerScriptService" ) |
05 | local LevelDoorLib = require(ServerScriptService.ServerModules.LevelDoorLib) |
08 | local NewLevelDoor = LevelDoorLib.new(workspace.LevelDoorHolder.LevelDoor 2 ) |
09 | local LevelDoor 2 = workspace.LevelDoorHolder.LevelDoor 2. Head |
15 | LevelDoor 2. Touched:Connect( function (hit) |
16 | NewLevelDoor:OnTouch(hit) |