OK, I am making a free-build game that has upgrades added to it.

I could use some help!

I am working on the first base right now, I have it in a Model called (BaseOne), and in that folder I have an (ObjectValue) named (Owner). I have 2 scripts first named (PurchaseHandler), second named (CoreScript).

I have 3 models, Buttons, PurchasedObjects, and Purchases, there are models in each one.

Ok, back to the top, In the WorkSpace I have a script that RestrictBuild, and ControlSpawning.

I need to get the ObjectValue in the BaseOne Model to Recognize what player has what base.

RestrictBuildScript:

function waitForChild(instance, name)
	while not instance:FindFirstChild(name) do
		instance.ChildAdded:wait()
	end
end

waitForChild(game, "Workspace")
waitForChild(game.Workspace, "BuildingPlates")
waitForChild(game, "Players")

local activeParts
if(game.Workspace:FindFirstChild("ActiveParts")==nil) then
	activeParts = Instance.new("Model")
	activeParts.Name = "ActiveParts"
	activeParts.Parent = game.Workspace
else
	activeParts = game.Workspace.ActiveParts
end

local buildingPlates = game.Workspace.BuildingPlates

local assigning = false

function addPlayer(player)

	print("addPlayer()", "waiting for previous addPlayer...")

	while(assigning) do 
		assigning.Changed:wait()
	end

	assigning = true

	print("addPlayer()", "waiting for playerNumber...")
	waitForChild(player, "playerNumber")
	print("addPlayer()", "assigning...")

	if(player.playerNumber.Value == 0) then
		-- This is an extra player.  He has playerNumber 0, and spawns in a different spawn point on the side.
		-- He doesn't get a stamper tool.
		print("addPlayer() playerNumber:", player.playerNumber, "stamperTool name:", player.Backpack.StamperTool.Name, "Removing stamperTool.")
		-- hint("All building areas are taken. If you want to build, leave and join again.")
		--waitForChild(player.Backpack, "StamperTool")
		--player.Backpack.StamperTool:Remove()
		--[[
		game.Workspace.Message.Text = player.Name .. " joined, and has playerNumber " .. player.playerNumber.Value .. " and doesn't own a baseplate."
		wait(3)
		game.Workspace.Message.Text = ""
		--]]
	else
		-- He has his own plate.  Get him set up.

		-- Give him a model for all his parts
		if(activeParts:FindFirstChild(player.Name .. "'s parts")==nil) then
			local model = Instance.new("Model")
			model.Name = player.Name .. "'s parts"
			model.Parent = activeParts
		end

		-- Assign plate
		print("assignPlate() playerNumber not zero:", player.playerNumber.Value)
		waitForChild(buildingPlates, "Plate"..tostring(player.playerNumber.Value))

		targetPlate = buildingPlates:FindFirstChild("Plate"..tostring(player.playerNumber.Value))

		-- Create "Player" StringValue inside targetPlate if none exists (for some reason, it gets deleted sometimes when playing online.)
		if(targetPlate:FindFirstChild("Player") == nil) then
			local _player = Instance.new("StringValue")
			_player.Name = "Player"
			_player.Parent = targetPlate
		end
		targetPlate.Player.Value = player.Name

		print("assignPlate()", "complete.", targetPlate.Name, "belongs to", player.Name)
		--[[
		game.Workspace.Message.Text = player.Name .. " joined, and has playerNumber " .. player.playerNumber.Value .. " and owns baseplate " .. targetPlate.Name .. "."
		wait(3)
		game.Workspace.Message.Text = ""
		--]]
	end
	assigning = false
end

function removePlayer(player)
	-- Delete his model
	waitForChild(game.Workspace, "ActiveParts")
	waitForChild(game.Workspace.ActiveParts, player.Name .. "'s parts")
	local model = game.Workspace.ActiveParts:FindFirstChild(player.Name .. "'s parts")
	model:remove()

	-- Free his plate
	local takenPlates = buildingPlates:GetChildren()
	for i = 1, #takenPlates do
		if takenPlates[i].Player.Value == player.Name then
			takenPlates[i].Player.Value = ""
		end
	end

end

-- In case we already have players by the time this script initializes
local players = game.Players:GetChildren()
for i = 1, #players do
	addPlayer(players[i])
end

game.Players.PlayerAdded:connect(function(player)
	addPlayer(player)
end)

game.Players.PlayerRemoving:connect(function(player)
	removePlayer(player)
end)

and, purchaseHandler script:

objects ={}
wait(1)


script.parent:WaitForChild("Buttons")
for i,v in pairs(script.Parent.Buttons:GetChildren())do
	if v:FindFirstChild("Head") then
		
		local object = script.Parent.Purchaces:FindFirstChild(v.Object.Value)
	if object ~= nil then
		objects{object.name} = object:Clone()
		object:Destroy()
	else
		print("Button: "..V.Name.." is missing its object and has been removed.")
		v.Head.CanCollide = false
		v.Head.Transparency = 1
		
	end
		v. Head.Touched:connect (function(hit)
			local player = game.players:GetPlayerFromCharacter(hit.Parent)
			if player ~= nil then
				if script.parent.owner.value== player then             --- this is a problem i need to change 
						if hit.parent:FindFirsChild("Humanoid") then   --- it to  the building plates i think
							if hit.Parent.Humanoid.Health > 0  then
								local cashmoney = game.ServerStorage.MoneyStorage:FindFirstChild((player.Name)
									if cashmoney ~= nil then
										if cashmoney.Value >= v.Price.Value then
											cashmoney.Value = cashmoney.Value - v.Price.Value
											objects{v.Objects.Value}.parent = script.Parent.PurchasedObjects
											v.Head.CanCollide = false
											v.Head.Transparency = 1
											
										end
									end
								end
							end
						end 
					
				end
			end
		end)
	end
end

and finally, CoreScript:

Game.Players.PlayerAdded:connect (function (player)
	local cashmoney = Instance.new ("NumberValue",game.ServerStorage.MoneyStorage)
	cashmoney.Name = player.Name
	local isowner = Instance.new("BoolValue",cashmoney)
	isowner.Name = "OwnsTycoon"
	
end)

game.Players.PlayerRemoving:connect (function(player)
	local cashmoney = game.ServerStorage.MoneyStorage:FindFirstChild(player.Name)
		if cashmoney ~= nil then
			cashmoney:Save()
						
		end
	end

I need them all to work together to make one base.

1 comment

0

oops, dont worry about the ) after the end it is fixed..... LoL