Untitled
unknown
lua
2 years ago
6.6 kB
4
Indexable
--Service local TweenService = game:GetService("TweenService") local RunService = game:GetService("RunService") local Players = game:GetService("Players") local ReplicatedStorage = game:GetService("ReplicatedStorage") local UserInputService = game:GetService("UserInputService") --ReplicatedValues local Events = ReplicatedStorage:WaitForChild("Events") local TowerModels = ReplicatedStorage:WaitForChild("TowerModels") local Modules = ReplicatedStorage:WaitForChild("Modules") --Events local TowerPlacingEvent = Events:WaitForChild("TowerPlacing") --Modules local TowerInfoDataBase = require(Modules:WaitForChild("TowerInfoDataBase")) local TowerDataBase = require(Modules:WaitForChild("TowerDataBase")) --WorkspaceValues local Camera = workspace.CurrentCamera --PlayerValues local Player = Players.LocalPlayer local PlayerModels = {} --PlayerUIValues local PlayerUI = Player:WaitForChild("PlayerGui") local MainUI = PlayerUI:WaitForChild("Main") local PlayerUISize = Camera.ViewportSize.Magnitude local CreatorUISize = 2136.795654296875 --IconsUI local IconsUI = MainUI:WaitForChild("Icons") local IconsFrameUI = IconsUI:WaitForChild("Icons") --TooBarUI local ToolBarUI = MainUI:WaitForChild("ToolBar") local ToolBarFrameUI = ToolBarUI:WaitForChild("ToolBar") --UpgradeMenuUI local UIPreference = "Vertical" local UpgradeMenuUI = MainUI:WaitForChild("UpgradeMenu") local NextUpgradeDesc = UpgradeMenuUI:WaitForChild("NextUpgradeDesc") local VerticalMenu = UpgradeMenuUI:WaitForChild("VerticalMenu") local HorizontalMenu = UpgradeMenuUI:WaitForChild("HorizontalMenu") --TowerHelpers local SelectedTower = nil local PlacingTower = nil --FunctionsDefine --TowerFunctions local function MouseRayCast(Blacklist) local MousePosition = UserInputService:GetMouseLocation() local MouseRay = Camera:ViewportPointToRay(MousePosition.X, MousePosition.Y) local RayCastParams = RaycastParams.new() RaycastParams.FilterType = Enum.RaycastFilterType.Exclude RaycastParams.FilterDescendantsInstance = Blacklist local RayCastResult = game.Workspace:Raycast(MouseRay.Origin, MouseRay.Direction * 5000, RayCastParams) return RayCastResult end local function TowerPlaced(Condition) if Condition == true then RunService:UnbindFromRenderStep("TowerPlacing") SelectedTower = PlacingTower PlacingTower.Parent = workspace.Towers.Spawned TowerPlacingEvent:FireServer(TowerDataBase.Placing[1], PlacingTower.PrimaryPart.CFrame) table.insert(TowerDataBase.Placed, TowerDataBase.Placing[1]) PlacingTower.Name = #TowerDataBase.Placed TowerDataBase.Placing[1] = nil PlacingTower = nil warn("Tower Placed!") else RunService:UnbindFromRenderStep("TowerPlacing") PlacingTower:Destroy() TowerDataBase.Placing[1] = nil PlacingTower = nil warn("Tower destroyed") end end TowerPlacingEvent.OnClientEvent:Connect(function(TowerPlacer, TowerData, TowerModelCFrame, TowerNumber) if Player ~= TowerPlacer then table.insert(TowerDataBase.Placing, TowerData) if TowerModels:FindFirstChild(TowerData["RealName"]) then local TowerModel = TowerModels:FindFirstChild(TowerData["RealName"]):Clone() TowerModel.PrimaryPart.CFrame = TowerModelCFrame TowerModel.Parent = workspace.Towers.Spawned TowerModel.Name = TowerNumber end end end) local function TowerPlacing(TowerModel, RayCast) RayCast = MouseRayCast({TowerModel, workspace.Enemies, workspace.Towers, PlayerModels}) if RayCast then TowerModel.PrimaryPart.CFrame = CFrame.new(RayCast.Position + Vector3.new(0,TowerDataBase.Placing[1].YOffset, 0)) * CFrame.Angles(0, math.rad(TowerDataBase.Placing[1].Rotation), 0) end end local function TowerSetup(Tower, ObjectName) local TowerModel = TowerModels[Tower]:Clone() TowerModel.Parent = workspace.Towers.Placing if TowerModel then local RayCast = nil PlacingTower = TowerModel local Table = {} for ItemName, Item in pairs(TowerInfoDataBase[Tower]) do Table[ItemName] = Item end Table["RealName"] = Tower Table["SlotName"] = ObjectName table.insert(TowerDataBase.Placing, Table) RunService:BindToRenderStep("TowerPlacing", 0, function(DeltaTime) TowerPlacing(TowerModel, RayCast) end) else warn(Tower, "is not a model!!!!") end end --IconsInitiate local function IconsInitiate() for Count, Object in pairs(IconsFrameUI:GetChildren()) do if Object:IsA("TextButton") then --TBC end end end --ToolBarInitiate local function ToolBarInitiate() for Count, Object in pairs(ToolBarFrameUI:GetChildren()) do if Object:IsA("TextButton") then Object.Activated:Connect(function() if PlacingTower == nil then TowerSetup(Object.TowerName.Value, Object.Name) elseif TowerDataBase.Placing[1].SlotName == Object.Name then TowerPlaced(false) elseif PlacingTower ~= true then TowerPlaced(false) TowerSetup(Object.TowerName.Value, Object.Name) end end) end end end --UiStrokesAdjust local function UIStrokesAdjust() for objectName, Object in ipairs(PlayerUI:GetDescendants()) do if Object:IsA("UIStroke") then Object.Thickness *= PlayerUISize / CreatorUISize end end end --InputServiceInitiate local function InputServiceInitiate() UserInputService.InputEnded:Connect(function(InputObject, Processed) if Processed then return end if InputObject.UserInputType == Enum.UserInputType.MouseButton1 then if PlacingTower ~= nil then TowerPlaced(true) else warn("Not placing a tower!") end end end) end --InitiatePlayerScan local function PlayerScan() for Name, Player in ipairs(Players:GetPlayers()) do if Player.Character or Player.CharacterAdded:Wait() then table.insert(PlayerModels, Player.Character) end end end Players.PlayerAdded:Connect(function(Player) if Player.Character or Player.CharacterAdded:Wait() then table.insert(PlayerModels, Player.Character) end end) Players.PlayerRemoving:Connect(function(Player) PlayerModels[Player] = nil end) --RenderSteppedLoop RunService.RenderStepped:Connect(function(DeltaTime) if SelectedTower then UpgradeMenuUI.Enabled = true if UIPreference == "Vertical" then VerticalMenu.Visible = true HorizontalMenu.Visible = false else HorizontalMenu.Visible = true VerticalMenu.Visible = false end else UpgradeMenuUI.Enabled = false end end) --Functions Run --Player PlayerScan() --UI ToolBarInitiate() IconsInitiate() UIStrokesAdjust() --Input InputServiceInitiate()
Editor is loading...