From 47f963ba720b4eb47eaada44368b01c05159fb41 Mon Sep 17 00:00:00 2001 From: "madmaxoft@gmail.com" Date: Tue, 19 Jun 2012 21:58:22 +0000 Subject: Core: merged in the Fixies plugin code git-svn-id: http://mc-server.googlecode.com/svn/trunk@635 0a769ca7-a7f5-676a-18bf-c427514a06d6 --- Plugins/Core/oncraftingnorecipe.lua | 205 ++++++++++++++++++++++++++++++++++++ 1 file changed, 205 insertions(+) create mode 100644 Plugins/Core/oncraftingnorecipe.lua (limited to 'Plugins/Core/oncraftingnorecipe.lua') diff --git a/Plugins/Core/oncraftingnorecipe.lua b/Plugins/Core/oncraftingnorecipe.lua new file mode 100644 index 000000000..78f2cf65a --- /dev/null +++ b/Plugins/Core/oncraftingnorecipe.lua @@ -0,0 +1,205 @@ + +-- Implements item-repair using the HOOK_CRAFTING_NO_RECIPE hook +-- Based on Fixies plugin v2 by Taugeshtu + + +-- how much "extra" points are healed per a repair operation (fraction) +BONUS = 0.1 + + + + + +function OnCraftingNoRecipe(Player, Grid, Recipe) + local _do_fix = false + local Items = {} + for x = 0, Grid:GetWidth() - 1 do + for y = 0, Grid:GetHeight() - 1 do + local Item = Grid:GetItem(x, y) + if (Item.m_ItemID ~= E_ITEM_EMPTY) then + table.insert(Items, Item) + end + end + end + + if (#Items ~= 2) then + -- Only two items together can be fixed + return false + end + + if (Items[1].m_ItemID ~= Items[2].m_ItemID) then + -- Only same items may be fixed + return false + end + + local _ID = Items[1].m_ItemID + local _least_hp = math.max(Items[1].m_ItemHealth, Items[2].m_ItemHealth) + local _most_hp = math.min(Items[1].m_ItemHealth, Items[2].m_ItemHealth) + local _item_hp = 0 + + -- TODO: This could be refactored into better code, using an _ID-indexed table for _item_hp + + if ( + (_ID == E_ITEM_WOODEN_SHOVEL) or + (_ID == E_ITEM_WOODEN_AXE) or + (_ID == E_ITEM_WOODEN_PICKAXE) or + (_ID == E_ITEM_WOODEN_SWORD) or + (_ID == E_ITEM_WOODEN_HOE) + ) + then + _item_hp = 60 + _do_fix = true + end + + if ( + (_ID == E_ITEM_STONE_SHOVEL) or + (_ID == E_ITEM_STONE_AXE) or + (_ID == E_ITEM_STONE_PICKAXE) or + (_ID == E_ITEM_STONE_SWORD) or + (_ID == E_ITEM_STONE_HOE) + ) + then + _item_hp = 132 + _do_fix = true + end + + if ( + (_ID == E_ITEM_IRON_SHOVEL) or + (_ID == E_ITEM_IRON_AXE) or + (_ID == E_ITEM_IRON_PICKAXE) or + (_ID == E_ITEM_IRON_SWORD) or + (_ID == E_ITEM_IRON_HOE) + ) + then + _item_hp = 251 + _do_fix = true + end + + if ( + (_ID == E_ITEM_GOLD_SHOVEL) or + (_ID == E_ITEM_GOLD_AXE) or + (_ID == E_ITEM_GOLD_PICKAXE) or + (_ID == E_ITEM_GOLD_SWORD) or + (_ID == E_ITEM_GOLD_HOE) + ) + then + _item_hp = 33 + _do_fix = true + end + + if ( + (_ID == E_ITEM_DIAMOND_SHOVEL) or + (_ID == E_ITEM_DIAMOND_AXE) or + (_ID == E_ITEM_DIAMOND_PICKAXE) or + (_ID == E_ITEM_DIAMOND_SWORD) or + (_ID == E_ITEM_DIAMOND_HOE) + ) + then + _item_hp = 1562 + _do_fix = true + end + + if (_ID == E_ITEM_LEATHER_CAP) then + _item_hp = 56 + _do_fix = true + end + if (_ID == E_ITEM_LEATHER_TUNIC) then + _item_hp = 82 + _do_fix = true + end + if (_ID == E_ITEM_LEATHER_PANTS) then + _item_hp = 76 + _do_fix = true + end + if (_ID == E_ITEM_LEATHER_BOOTS) then + _item_hp = 66 + _do_fix = true + end + + + if (_ID == E_ITEM_CHAIN_HELMET) then + _item_hp = 78 + _do_fix = true + end + if (_ID == E_ITEM_CHAIN_CHESTPLATE) then + _item_hp = 114 + _do_fix = true + end + if (_ID == E_ITEM_CHAIN_LEGGINGS) then + _item_hp = 106 + _do_fix = true + end + if (_ID == E_ITEM_CHAIN_BOOTS) then + _item_hp = 92 + _do_fix = true + end + + + if (_ID == E_ITEM_IRON_HELMET) then + _item_hp = 166 + _do_fix = true + end + if (_ID == E_ITEM_IRON_CHESTPLATE) then + _item_hp = 242 + _do_fix = true + end + if (_ID == E_ITEM_IRON_LEGGINGS) then + _item_hp = 226 + _do_fix = true + end + if (_ID == E_ITEM_IRON_BOOTS) then + _item_hp = 196 + _do_fix = true + end + + + if (_ID == E_ITEM_GOLD_HELMET) then + _item_hp = 78 + _do_fix = true + end + if (_ID == E_ITEM_GOLD_CHESTPLATE) then + _item_hp = 114 + _do_fix = true + end + if (_ID == E_ITEM_GOLD_LEGGINGS) then + _item_hp = 106 + _do_fix = true + end + if (_ID == E_ITEM_GOLD_BOOTS) then + _item_hp = 92 + _do_fix = true + end + + + if (_ID == E_ITEM_DIAMOND_HELMET) then + _item_hp = 364 + _do_fix = true + end + if (_ID == E_ITEM_DIAMOND_CHESTPLATE)then + _item_hp = 529 + _do_fix = true + end + if (_ID == E_ITEM_DIAMOND_LEGGINGS) then + _item_hp = 496 + _do_fix = true + end + if (_ID == E_ITEM_DIAMOND_BOOTS) then + _item_hp = 430 + _do_fix = true + end + -- ///////////////////////////////////////////////////// + + if (_do_fix == true) then + local _hp = _most_hp - (_item_hp - _least_hp) - _item_hp * BONUS + _hp = math.max(_hp, 0) + Recipe:SetResult(_ID, 1, _hp) + Recipe:SetIngredient(Items[1].x, Items[1].y, Items[1]); + Recipe:SetIngredient(Items[2].x, Items[2].y, Items[2]); + return true + end + return false +end + + + + -- cgit v1.2.3