forked from luanti-org/minetest_game
		
	Boats: Use driver name string instead of objectref
This commit is contained in:
		| @@ -54,7 +54,7 @@ function boat.on_rightclick(self, clicker) | ||||
| 		return | ||||
| 	end | ||||
| 	local name = clicker:get_player_name() | ||||
| 	if self.driver and clicker == self.driver then | ||||
| 	if self.driver and name == self.driver then | ||||
| 		self.driver = nil | ||||
| 		self.auto = false | ||||
| 		clicker:set_detach() | ||||
| @@ -74,7 +74,7 @@ function boat.on_rightclick(self, clicker) | ||||
| 			end | ||||
| 			clicker:set_detach() | ||||
| 		end | ||||
| 		self.driver = clicker | ||||
| 		self.driver = name | ||||
| 		clicker:set_attach(self.object, "", | ||||
| 			{x = 0.5, y = 1, z = -3}, {x = 0, y = 0, z = 0}) | ||||
| 		player_api.player_attached[name] = true | ||||
| @@ -86,6 +86,13 @@ function boat.on_rightclick(self, clicker) | ||||
| end | ||||
|  | ||||
|  | ||||
| -- If driver leaves server while driving boat | ||||
| function boat.on_detach_child(self, child) | ||||
| 	self.driver = nil | ||||
| 	self.auto = false | ||||
| end | ||||
|  | ||||
|  | ||||
| function boat.on_activate(self, staticdata, dtime_s) | ||||
| 	self.object:set_armor_groups({immortal = 1}) | ||||
| 	if staticdata then | ||||
| @@ -104,16 +111,18 @@ function boat.on_punch(self, puncher) | ||||
| 	if not puncher or not puncher:is_player() or self.removed then | ||||
| 		return | ||||
| 	end | ||||
| 	if self.driver and puncher == self.driver then | ||||
|  | ||||
| 	local name = puncher:get_player_name() | ||||
| 	if self.driver and name == self.driver then | ||||
| 		self.driver = nil | ||||
| 		puncher:set_detach() | ||||
| 		player_api.player_attached[puncher:get_player_name()] = false | ||||
| 		player_api.player_attached[name] = false | ||||
| 	end | ||||
| 	if not self.driver then | ||||
| 		self.removed = true | ||||
| 		local inv = puncher:get_inventory() | ||||
| 		if not (creative and creative.is_enabled_for | ||||
| 				and creative.is_enabled_for(puncher:get_player_name())) | ||||
| 				and creative.is_enabled_for(name)) | ||||
| 				or not inv:contains_item("main", "boats:boat") then | ||||
| 			local leftover = inv:add_item("main", "boats:boat") | ||||
| 			-- if no room in inventory add a replacement boat to the world | ||||
| @@ -132,35 +141,35 @@ end | ||||
| function boat.on_step(self, dtime) | ||||
| 	self.v = get_v(self.object:get_velocity()) * get_sign(self.v) | ||||
| 	if self.driver then | ||||
| 		local driver_name = self.driver:get_player_name() | ||||
| 		local ctrl = self.driver:get_player_control() | ||||
| 		if ctrl.up and ctrl.down then | ||||
| 			if not self.auto then | ||||
| 				self.auto = true | ||||
| 				minetest.chat_send_player(driver_name, | ||||
| 					"[boats] Cruise on") | ||||
| 		local driver_objref = minetest.get_player_by_name(self.driver) | ||||
| 		if driver_objref then | ||||
| 			local ctrl = driver_objref:get_player_control() | ||||
| 			if ctrl.up and ctrl.down then | ||||
| 				if not self.auto then | ||||
| 					self.auto = true | ||||
| 					minetest.chat_send_player(self.driver, "[boats] Cruise on") | ||||
| 				end | ||||
| 			elseif ctrl.down then | ||||
| 				self.v = self.v - dtime * 1.8 | ||||
| 				if self.auto then | ||||
| 					self.auto = false | ||||
| 					minetest.chat_send_player(self.driver, "[boats] Cruise off") | ||||
| 				end | ||||
| 			elseif ctrl.up or self.auto then | ||||
| 				self.v = self.v + dtime * 1.8 | ||||
| 			end | ||||
| 		elseif ctrl.down then | ||||
| 			self.v = self.v - dtime * 1.8 | ||||
| 			if self.auto then | ||||
| 				self.auto = false | ||||
| 				minetest.chat_send_player(driver_name, | ||||
| 					"[boats] Cruise off") | ||||
| 			end | ||||
| 		elseif ctrl.up or self.auto then | ||||
| 			self.v = self.v + dtime * 1.8 | ||||
| 		end | ||||
| 		if ctrl.left then | ||||
| 			if self.v < -0.001 then | ||||
| 				self.object:set_yaw(self.object:get_yaw() - dtime * 0.9) | ||||
| 			else | ||||
| 				self.object:set_yaw(self.object:get_yaw() + dtime * 0.9) | ||||
| 			end | ||||
| 		elseif ctrl.right then | ||||
| 			if self.v < -0.001 then | ||||
| 				self.object:set_yaw(self.object:get_yaw() + dtime * 0.9) | ||||
| 			else | ||||
| 				self.object:set_yaw(self.object:get_yaw() - dtime * 0.9) | ||||
| 			if ctrl.left then | ||||
| 				if self.v < -0.001 then | ||||
| 					self.object:set_yaw(self.object:get_yaw() - dtime * 0.9) | ||||
| 				else | ||||
| 					self.object:set_yaw(self.object:get_yaw() + dtime * 0.9) | ||||
| 				end | ||||
| 			elseif ctrl.right then | ||||
| 				if self.v < -0.001 then | ||||
| 					self.object:set_yaw(self.object:get_yaw() + dtime * 0.9) | ||||
| 				else | ||||
| 					self.object:set_yaw(self.object:get_yaw() - dtime * 0.9) | ||||
| 				end | ||||
| 			end | ||||
| 		end | ||||
| 	end | ||||
|   | ||||
		Reference in New Issue
	
	Block a user