Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- ```lua
- local Players = game:GetService("Players")
- local RunService = game:GetService("RunService")
- local Thing = {}
- Thing.__index = Thing
- function Thing.new(instance)
- return setmetatable({instance = instance}, Thing)
- end
- local fire = Instance.new("Fire")
- fire.Size = 8
- fire.Enabled = false
- local PlayerCharacter = {}
- PlayerCharacter.__index = PlayerCharacter
- setmetatable(PlayerCharacter, Thing)
- PlayerCharacter.EXTINGUISH_TIME = 5
- function PlayerCharacter.new(model)
- local self = setmetatable(Thing.new(model), PlayerCharacter)
- self.isOnFire = false
- self.fire = fire:Clone()
- self.fire.Parent = self.instance.PrimaryPart
- self.extinguishTimer = 0
- return self
- end
- function PlayerCharacter:setOnFire(onFire)
- if onFire ~= self.isOnFire then
- self.isOnFire = onFire
- self.fire.Enabled = onFire
- end
- end
- function PlayerCharacter:update(deltaTime)
- if self.isOnFire then
- self.instance.Humanoid:TakeDamage(5 * deltaTime)
- self.extinguishTimer += deltaTime
- if self.extinguishTimer >= PlayerCharacter.EXTINGUISH_TIME then
- self:setOnFire(false)
- self.extinguishTimer -= PlayerCharacter.EXTINGUISH_TIME
- end
- end
- end
- type PlayerCharacter = typeof(PlayerCharacter.new(Instance.new("Player")))
- local Game = {}
- Game.__index = Game
- function Game.new()
- local self = setmetatable({}, Game)
- self.things = {}
- self.updatingThings = {}
- for _,player in pairs(Players:GetPlayers()) do
- local character = player.Character
- if character then
- self:addPlayerCharacter(character)
- end
- end
- Players.PlayerAdded:Connect(function(player)
- player.CharacterAppearanceLoaded:Connect(function(character)
- self:addPlayerCharacter(character)
- end)
- end)
- RunService.Heartbeat:Connect(function(deltaTime)
- for _, updatingThing in pairs(self.updatingThings) do
- updatingThing:update(deltaTime)
- end
- end)
- return self
- end
- function Game:addPlayerCharacter(character)
- local playerCharacter = PlayerCharacter.new(character)
- self:addThing(playerCharacter, character)
- end
- function Game:addThing(thing, instance)
- self.things[instance] = thing
- if thing["update"] and type(thing["update"]) == "function" then
- self.updatingThings[instance] = thing
- end
- instance:GetPropertyChangedSignal("Parent"):Connect(function()
- if instance.Parent == nil and self.things[instance] then
- self.things[instance] = nil
- self.updatingThings[instance] = nil
- instance:Destroy()
- end
- end)
- end
- function Game:update(deltaTime)
- for thing in pairs(self.things) do
- thing:update(deltaTime)
- end
- end
- local myGame = Game.new()
- task.delay(4, function()
- local me = myGame.things[Players:GetPlayers()[1].Character]
- me:setOnFire(true)
- end)
- ```
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement