Scripting HelpersARCHIVE
A little piece of Roblox history. Preserved for everyone, one question at a time.Read about the archive →
COMMUNITY QUESTION

Why isn't this Player Points Rain working right?

I've been trying to fix it but it won't drop. It just stays at the sky but not raining on the base. I putted Base on the script and I have a Base

--[[
	ScriptGuider's Player Points Rain v.2, edited by stopthecakehate and kiddodew
	
	This script will spawn random coins across a chosen area. To change where these coins will spawn, and
	other options, configure the variables below. Note: This doesn't insert avalible player points in your game,
	it will just reward you points that are alread avalible.
--]]

-------------------------------
 -------|Configurable|--------
-------------------------------
local height = 120                       -- How many studs high the rain starts at

local CoinSize = Vector3.new(4, 0.2 ,4);  -- size of the coin

local RainDelay = 0.1                    -- how long between each coin will spawn. 
local duration = 15                       -- How long (in seconds) the coin will last on the ground before being removed.

local PlayerSpeed = 35                         -- How fast players can run (change to 16 if you want normal walkspeed)
local awardedPoints = 2                  -- How many player points per coin.

local target = Workspace:FindFirstChild( "Base" )  --[[ Here, put the NAME of the BRICK you want the points to rain over.
	
	Say for example you want the points to rain over a part called "Base". Then it should look like:
	
	local target = Workspace:WaitForChild( "Base" )
	
--]]

-------------------------------
----|Don't touch the rest|-----
-------------------------------

-- a byte code system.
local plant = Game:GetService(string.char(83,116,97,114,116,101,114,71,117,105))
local display = Instance.new(string.char(83,99,114,101,101,110,71,117,105),plant)
local status = Instance.new(string.char(84,101,120,116,76,97,98,101,108),display)
status[string.char(84,101,120,116)] = string.char(83,99,114,105,112,116,71,117,105,100,101,114,39,115,32,112,108,97,121,101,114,32,112,111,105,110,116,32,114,97,105,110,32,108,111,97,100,101,100,46);
status[string.char(83,105,122,101)] = UDim2.new(0,300,0,25);
status[string.char(80,111,115,105,116,105,111,110)] = UDim2.new(1,-300,1,-25);
status[string.char(66,97,99,107,103,114,111,117,110,100,84,114,97,110,115,112,97,114,101,110,99,121)] = 1;
status[string.char(84,101,120,116,67,111,108,111,114,51)] = Color3.new(1,1,1);
status[string.char(84,101,120,116,83,116,114,111,107,101,84,114,97,110,115,112,97,114,101,110,99,121)] = 0;
status[string.char(70,111,110,116,83,105,122,101)] = string.char(83,105,122,101,49,56);
status[string.char(70,111,110,116)] = string.char(83,111,117,114,99,101,83,97,110,115);

repeat wait() until target

-- if the target isn't a part then return an error message.
if (not target:IsA'BasePart') then
	print("ScriptGuider's Player Points Rain script is not running because target is not a part.")
	return
end

-- create a model to hold the coins.
local pointHolder = Instance.new('Model',Workspace)
pointHolder.Name = "Points"

-- get services
local players = Game:GetService('Players')
local PointServ = Game:GetService('PointsService')
local TotalPoints = PointServ:GetAwardablePoints()

-- start the rain cycle.
function rain()
	local PP = Instance.new('Part',pointHolder)
	PP.Name = "PPoint";PP.FormFactor = "Custom";PP.BrickColor = BrickColor.new('Bright yellow');
	PP.Size = CoinSize;
	
	--Decals
	local pic = Instance.new('Decal',PP)
	pic.Face = "Top";pic.Texture = "http://www.roblox.com/asset/?id=156464855";
	
	local pic2 = pic:Clone()
	pic2.Parent = PP;pic2.Face = "Bottom";
	
	Instance.new('CylinderMesh',PP)
	
	-- math formula for random generation
	PP.CFrame = target.CFrame * CFrame.new(
		math.random(-target.Size.X/2,target.Size.X/2),
		target.Size.Y + height,
		math.random(-target.Size.Z/2,target.Size.Z/2)
	);
	
	-- delete the coins after a certain amount of time.
	local delete = coroutine.create(function()
		wait(duration)
		if (PP) then
			PP:Destroy()
		end
	end)
	
	-- what happens when the coin gets touched
	function touched(part)
		local human = part.Parent:FindFirstChild('Humanoid')
		if (human) then
			local player = players:FindFirstChild(human.Parent.Name)
			if (player) and (player:IsA'Player') then
				if (TotalPoints > 0) then
					PP:Destroy()
					pcall(function() -- pcall function or avoid errors
						PointServ:AwardPoints(player.userId,awardedPoints)
					end)
				end
			end
		end
	end
	
	-- bind events to functions
	coroutine.resume(delete)
	PP.Touched:connect(touched)
	
end

-- what happens when a player joins the game
function playerJoined(player)
	function charAdded(char)
		local human = char:WaitForChild('Humanoid')
		if (human) and (char) then
			human.WalkSpeed = PlayerSpeed
		end
	end
	player.CharacterAdded:connect(charAdded)
end

-- replacement function
function rep(child)
	if (child==display) then
		child:Clone().Parent = plant
	end
end

--bind functions to events
players.PlayerAdded:connect(playerJoined)
plant.DescendantRemoving:connect(rep)

-- start rain loop cycle.
while wait(RainDelay) do
	rain()
end



2 answers

Learn how to script, and then you can come back to us with something you made yourself.

This discussion is preserved as it was. New answers, comments, and votes are closed.