Compilation Error: '=' expected (SOLVED)

function sprint(self)
	local sprint_speed = 2
	local normal_speed = 1
	--this is run in on_input. if the player is already sprinting and they hit LShift, they slow down
	if sprinting then
		self.speed = self.speed * normal speed
		sprinting = true
		--this is same as above, but to start sprinting
	else then
		self.speed = self.speed * sprint_speed
		sprinting = true
	end	
end

Hi folks, when building my game I get


as an error. This is a function called in on_input(), when the player presses LShift. I have no idea of what is going wrong, because as far as I can tell, I am following the Lua on Programming in Lua : 4.3.1 .

My full project is here, and I’d be really grateful if someone could take a look. Thanks

It should just be else

1 Like

Thanks for the quick response. That has fixed the original error, but i also get the same error on sprinting=true, just above. Any suggestions?

Is it really the same error?

Can you post the error here, as well as your full source code?

1 Like
function init(self)
	msg.post(".", "acquire_input_focus")

	self.fire_possible = true
	self.movement_possible = true
	-- these may be changed in testing
	self.ammo_count = 5
	self.default_ammo = 5
	self.total_ammo = 40
	self.speed = 0
	
	--up to here
	self.ai_remaining = 8
	self.kill_count = 0
	self.bandage_count = 2
	self.health_level = 100

	self.velocity = vmath.vector3()
	--raycasting
	self.to = vmath.vector3()

	local rendercam = require "rendercam.rendercam"
	self.sprinting = false
	self.crouched = false
end

--function for changing the speed of the player when shift is pressed
function sprint(self)
	local sprint_speed = 2
	local normal_speed = 1
	--this is run in on_input. if the player is already sprinting and they hit LShift, they slow down
	if sprinting then
		self.speed = self.speed * normal speed
		sprinting = true
		--this is same as above, but to start sprinting
	else 
		self.speed = self.speed * sprint_speed
		sprinting = true
	end	
end

--function for changing height of player, simulating crouching
function crouch(self,crouched)
	local pos = go.get_position() --position of player, because crouching will move the player down
	if crouched == true then
		pos.y = pos.y + 0.5
		crouched = false
	elseif crouched == false then
		pos.y = pos.y - 0.5
		crouched = true
	end
	return crouched
end

function heal(self)
	--checks the player has bandages
	if bandage_count > 0 then
		--prevents the player from firing/moving
		self.fire_possible = false
		self.movement_possible = false
		--starts a timer for 5 seconds
		
		--health is increased by 30, and bandage count is decreased by 1
		self.health_level = health_level + 30
		msg.post("go#hud", healed, health_level) --messages the HUD collection to update the health displayed on the gui
		self.bandage_count = bandage_count - 1
		msg.post("go#hud", bandage_sub, bandage_count)
		--fire_possible and movement_possible are now true
		self.fire_possible = true
		self.movement_possible = true

	else
		--dealt with in gui_script with a popup saying out of bandages
		msg.post("go#hud","no_heal")
	end
end

function fire(self)
	if (self.ammo_count > 0) then
		if (self.fire_possible == TRUE)then
		
			--add fire animation and sound
			self.ammo_count = self.ammo_count - 1
			msg.post("go#hud", "ammo","ammo_count")

			
		
			--raycast
			local from = go.get_position()--players position
			local to = self.to --players viewing co-ords
			local groups = {hash("enemy")} -- collision group to test against
			local result = physics.raycast(from, to, player)

			if result == true then
				msg.post(enemy, dead)
			
				self.kill_count = self.kill_count + 1
				msg.post("go#hud", "kill","kill_count")
			end
		else
			msg.post("go#hud", "no_fire")
		end
	end	
end

function reload(self)
	if self.total_ammo > 5 then
		self.fire_possible = false
		self.total_ammo = self.total_ammo - 5
		self.ammo_count = self.default_ammo
		self.fire_possible = true --allows the player to fire once the time has finished
		local mag = self.total_ammo / 5 --number of magazines left
		msg.post("go#hud", "reload","mag")
	end
end

function update(self, dt)
	local pos = go.get_world_position()
	pos = pos + self.velocity * dt 
	go.set_position(pos)

	self.velocity.x = 0
	self.velocity.z = 0
end


function on_input(self, action_id, action)
	local vel = 100 --originally 20, but it was way too slow
	
	if action_id == hash("forward") then
		self.velocity.z = -vel --it would be positive, but due to the way i oriented the map it needs to be negative. 
	end
	if action_id == hash("back") then
		self.velocity.z = vel
	end
	if action_id == hash("left") then
		self.velocity.x = -vel 
	end
	if action_id == hash("right") then
		self.velocity.x = vel
	end
	if action_id == hash("reload") then --uses the reload() as the callback which starts when the 5 seconds are up
		timer.delay(5, false, reload)
	end
	if action_id == hash("touch") then
		timer.delay(3, false, fire)
	end
	if action_id == hash("crouch") then
		crouch()
	end
	if action_id == hash("sprint") then
		sprint()
	end
	if action_id == hash("heal") then
		timer.delay(5, false, heal)
	end
	if action_id == hash("esc") then
		msg.post("loader:/go#loader", "show_esc")
	end
end

There you go

You have misspelled normal_speed

Also, you are mixing global variables (“sprinting”) with script instance variables (“self.sprinting”). This will lead to confusion, and most likely bugs for you.

Also, I’d put the “require” statement at the top of the file, not in the middle of a function.
It’s easier to read/find later on.

3 Likes

Thank you so much for spotting that. I have done what you said, and it works as expected. I changed sprinting to self.sprinting all round, and will do the same for the crouch function. Thank you for the quick response

3 Likes