forked from mtcontrib/minetest-toolranks
		
	Compare commits
	
		
			5 Commits
		
	
	
		
			8b466b199f
			...
			aac3cded36
		
	
	| Author | SHA1 | Date | |
|---|---|---|---|
| aac3cded36 | |||
|  | 8010feb5bf | ||
|  | 12af618f9b | ||
|  | d000b4b20f | ||
|  | 17994ed8db | 
							
								
								
									
										13
									
								
								.github/workflows/build.yml
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										13
									
								
								.github/workflows/build.yml
									
									
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1,13 @@ | ||||
| name: Build | ||||
| on: [push, pull_request] | ||||
| jobs: | ||||
|   build: | ||||
|     runs-on: ubuntu-latest | ||||
|     steps: | ||||
|     - uses: actions/checkout@v1 | ||||
|     - name: apt | ||||
|       run: sudo apt-get install -y luarocks | ||||
|     - name: luacheck install | ||||
|       run: luarocks install --local luacheck | ||||
|     - name: luacheck run | ||||
|       run: $HOME/.luarocks/bin/luacheck ./ | ||||
							
								
								
									
										18
									
								
								.luacheckrc
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										18
									
								
								.luacheckrc
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,18 @@ | ||||
| unused_args = false | ||||
| allow_defined_top = true | ||||
|  | ||||
| globals = { | ||||
|     "minetest", | ||||
| } | ||||
|  | ||||
| read_globals = { | ||||
|     string = {fields = {"split"}}, | ||||
|     table = {fields = {"copy", "getn"}}, | ||||
|  | ||||
|     -- Builtin | ||||
|     "vector", "ItemStack", | ||||
|     "dump", "DIR_DELIM", "VoxelArea", "Settings", | ||||
|  | ||||
|     -- MTG | ||||
|     "default", "sfinv", "creative", | ||||
| } | ||||
| @@ -13,7 +13,7 @@ If so, to support this mod, add this code to your mod, after your tool's code: | ||||
| if minetest.get_modpath("toolranks") then | ||||
|     minetest.override_item("mymod:mytool", { | ||||
|         original_description = "My Tool", | ||||
|         description = toolranks.create_description("My Tool", 0, 1), | ||||
|         description = toolranks.create_description("My Tool"), | ||||
|         after_use = toolranks.new_afteruse | ||||
|     }) | ||||
|     end | ||||
|   | ||||
							
								
								
									
										74
									
								
								init.lua
									
									
									
									
									
								
							
							
						
						
									
										74
									
								
								init.lua
									
									
									
									
									
								
							| @@ -32,12 +32,19 @@ function toolranks.get_tool_type(description) | ||||
|     elseif string.find(d, "sword") then | ||||
|       return "sword" | ||||
|     else | ||||
|     return "tool" | ||||
|       return "tool" | ||||
|     end | ||||
|   end | ||||
| end | ||||
|  | ||||
| function toolranks.create_description(name, uses, level) | ||||
| function toolranks.get_level(uses) | ||||
|   if type(uses) == "number" and uses > 0 then | ||||
|     return math.min(max_level, math.floor(uses / level_digs)) | ||||
|   end | ||||
|   return 0 | ||||
| end | ||||
|  | ||||
| function toolranks.create_description(name, uses) | ||||
|   local description = name | ||||
|   local tooltype = toolranks.get_tool_type(description) | ||||
|   local newdesc = S( | ||||
| @@ -45,26 +52,24 @@ function toolranks.create_description(name, uses, level) | ||||
|     toolranks.colors.green, | ||||
|     description, | ||||
|     toolranks.colors.gold, | ||||
|     (level or 1), | ||||
|     toolranks.get_level(uses), | ||||
|     S(tooltype), | ||||
|     toolranks.colors.grey, | ||||
|     (uses or 0) | ||||
|     (type(uses) == "number" and uses or 0) | ||||
|   ) | ||||
|   return newdesc | ||||
| end | ||||
|  | ||||
| function toolranks.get_level(uses) | ||||
|   return math.min(max_level, math.floor(uses / level_digs)) | ||||
| end | ||||
|  | ||||
| function toolranks.new_afteruse(itemstack, user, node, digparams) | ||||
|   local itemmeta = itemstack:get_meta() | ||||
|   local itemdef = itemstack:get_definition() | ||||
|   local itemdesc = itemdef.original_description | ||||
|   local itemdesc = itemdef.original_description or "" | ||||
|   local dugnodes = tonumber(itemmeta:get_string("dug")) or 0 | ||||
|   local lastlevel = tonumber(itemmeta:get_string("lastlevel")) or 0 | ||||
|   local most_digs = mod_storage:get_int("most_digs") or 0 | ||||
|   local most_digs_user = mod_storage:get_string("most_digs_user") or 0 | ||||
|   local pname = user:get_player_name() | ||||
|   if not pname then return itemstack end -- player nil check | ||||
|  | ||||
|   if digparams.wear > 0 then -- Only count nodes that spend the tool | ||||
|     dugnodes = dugnodes + 1 | ||||
| @@ -72,24 +77,24 @@ function toolranks.new_afteruse(itemstack, user, node, digparams) | ||||
|   end | ||||
|  | ||||
|   if dugnodes > most_digs then | ||||
|     if most_digs_user ~= user:get_player_name() then -- Avoid spam. | ||||
|     if most_digs_user ~= pname then -- Avoid spam. | ||||
|       minetest.chat_send_all(S( | ||||
|         "Most used tool is now a @1@2@3 owned by @4 with @5 uses.", | ||||
|         toolranks.colors.green, | ||||
|         itemdesc, | ||||
|         toolranks.colors.white, | ||||
|         user:get_player_name(), | ||||
|         pname, | ||||
|         dugnodes | ||||
|       )) | ||||
|     end | ||||
|     mod_storage:set_int("most_digs", dugnodes) | ||||
|     mod_storage:set_string("most_digs_user", user:get_player_name()) | ||||
|     mod_storage:set_string("most_digs_user", pname) | ||||
|   end | ||||
|  | ||||
|   if itemstack:get_wear() > 60135 then | ||||
|     minetest.chat_send_player(user:get_player_name(), S("Your tool is about to break!")) | ||||
|     minetest.sound_play("default_tool_breaks", { | ||||
|       to_player = user:get_player_name(), | ||||
|       to_player = pname, | ||||
|       gain = 2.0, | ||||
|     }) | ||||
|   end | ||||
| @@ -104,29 +109,38 @@ function toolranks.new_afteruse(itemstack, user, node, digparams) | ||||
|     ) | ||||
|     minetest.chat_send_player(user:get_player_name(), levelup_text) | ||||
|     minetest.sound_play("toolranks_levelup", { | ||||
|       to_player = user:get_player_name(), | ||||
|       to_player = pname, | ||||
|       gain = 2.0, | ||||
|     }) | ||||
|     itemmeta:set_string("lastlevel", level) | ||||
| 	-- Make tool better by modifying tool_capabilities (if defined) | ||||
|     if itemdef.tool_capabilities then | ||||
|       local speed_multiplier = 1 + (level * level_multiplier * (max_speed - 1)) | ||||
|       local use_multiplier = 1 + (level * level_multiplier * (max_use - 1)) | ||||
|       local caps = table.copy(itemdef.tool_capabilities) | ||||
|  | ||||
|     local speed_multiplier = 1 + (level * level_multiplier * (max_speed - 1)) | ||||
|     local use_multiplier = 1 + (level * level_multiplier * (max_use - 1)) | ||||
|     local caps = table.copy(itemdef.tool_capabilities) | ||||
|       caps.full_punch_interval = caps.full_punch_interval and (caps.full_punch_interval / speed_multiplier) | ||||
|       caps.punch_attack_uses = caps.punch_attack_uses and (caps.punch_attack_uses * use_multiplier) | ||||
|  | ||||
|     caps.full_punch_interval = caps.full_punch_interval and (caps.full_punch_interval / speed_multiplier) | ||||
|     caps.punch_attack_uses = caps.punch_attack_uses and (caps.punch_attack_uses * use_multiplier) | ||||
|  | ||||
|     for _,c in pairs(caps.groupcaps) do | ||||
|       c.uses = c.uses * use_multiplier | ||||
|       for i,t in ipairs(c.times) do | ||||
|         c.times[i] = t / speed_multiplier | ||||
|       for _,c in pairs(caps.groupcaps) do | ||||
|         c.uses = c.uses * use_multiplier | ||||
|         for i,t in ipairs(c.times) do | ||||
|           c.times[i] = t / speed_multiplier | ||||
|         end | ||||
|       end | ||||
|     end | ||||
|     itemmeta:set_tool_capabilities(caps) | ||||
|       itemmeta:set_tool_capabilities(caps) | ||||
| 	end | ||||
|   end | ||||
|  | ||||
|   itemmeta:set_string("description", toolranks.create_description(itemdesc, dugnodes, level)) | ||||
|   itemstack:add_wear(digparams.wear) | ||||
|   -- Old method for compatibility with tools without tool_capabilities defined | ||||
|   local wear = digparams.wear | ||||
|   if level > 0 and not itemdef.tool_capabilities then | ||||
|     local use_multiplier = 1 + (level * level_multiplier * (max_use - 1)) | ||||
|     wear = wear / use_multiplier | ||||
|   end | ||||
|  | ||||
|   itemmeta:set_string("lastlevel", level) | ||||
|   itemmeta:set_string("description", toolranks.create_description(itemdesc, dugnodes)) | ||||
|   itemstack:add_wear(wear) | ||||
|   return itemstack | ||||
| end | ||||
|  | ||||
| @@ -135,7 +149,7 @@ function toolranks.add_tool(name) | ||||
|   local desc = ItemStack(name):get_definition().description | ||||
|   minetest.override_item(name, { | ||||
|     original_description = desc, | ||||
|     description = toolranks.create_description(desc, 0, 1), | ||||
|     description = toolranks.create_description(desc), | ||||
|     after_use = toolranks.new_afteruse | ||||
|   }) | ||||
| end | ||||
|   | ||||
		Reference in New Issue
	
	Block a user