1
0

Core: merged in the Fixies plugin code

git-svn-id: http://mc-server.googlecode.com/svn/trunk@635 0a769ca7-a7f5-676a-18bf-c427514a06d6
This commit is contained in:
madmaxoft@gmail.com 2012-06-19 21:58:22 +00:00
parent ed5578fd24
commit 47f963ba72
2 changed files with 249 additions and 44 deletions

View File

@ -16,11 +16,12 @@ function Initialize( Plugin )
Plugin:SetVersion( 8 ) Plugin:SetVersion( 8 )
PluginManager = cRoot:Get():GetPluginManager() PluginManager = cRoot:Get():GetPluginManager()
PluginManager:AddHook( Plugin, cPluginManager.E_PLUGIN_PLAYER_JOIN ) PluginManager:AddHook(Plugin, cPluginManager.HOOK_PLAYER_JOIN)
PluginManager:AddHook( Plugin, cPluginManager.E_PLUGIN_LOGIN ) PluginManager:AddHook(Plugin, cPluginManager.HOOK_LOGIN)
PluginManager:AddHook( Plugin, cPluginManager.E_PLUGIN_BLOCK_PLACE ) PluginManager:AddHook(Plugin, cPluginManager.HOOK_BLOCK_PLACE)
PluginManager:AddHook( Plugin, cPluginManager.E_PLUGIN_BLOCK_DIG ) PluginManager:AddHook(Plugin, cPluginManager.HOOK_BLOCK_DIG)
PluginManager:AddHook( Plugin, cPluginManager.E_PLUGIN_KILLED ) PluginManager:AddHook(Plugin, cPluginManager.HOOK_KILLED)
PluginManager:AddHook(Plugin, cPluginManager.HOOK_CRAFTING_NO_RECIPE)
Plugin:AddCommand("/help", " - [Page] Show this message", "core.help") Plugin:AddCommand("/help", " - [Page] Show this message", "core.help")
Plugin:AddCommand("/pluginlist", " - Show list of plugins", "core.pluginlist") Plugin:AddCommand("/pluginlist", " - Show list of plugins", "core.pluginlist")
@ -61,9 +62,8 @@ function Initialize( Plugin )
Plugin:BindCommand( "/gm", "core.changegm", HandleChangeGMCommand ) Plugin:BindCommand( "/gm", "core.changegm", HandleChangeGMCommand )
Plugin:BindCommand( "/gotoworld", "core.gotoworld", HandleGotoWorldCommand ) Plugin:BindCommand( "/gotoworld", "core.gotoworld", HandleGotoWorldCommand )
Plugin:BindCommand( "/coords", "core.coords", HandleCoordsCommand ) Plugin:BindCommand( "/coords", "core.coords", HandleCoordsCommand )
Plugin:BindCommand( "/viewdistance","core.viewdistance", HandleViewDistanceCommand ) Plugin:BindCommand( "/viewdistance", "core.viewdistance", HandleViewDistanceCommand )
Plugin:BindCommand( "/regeneratechunk","core.regeneratechunk", HandleRegenerateChunkCommand ) Plugin:BindCommand( "/regeneratechunk", "core.regeneratechunk", HandleRegenerateChunkCommand )
local IniFile = cIniFile("settings.ini") local IniFile = cIniFile("settings.ini")
if ( IniFile:ReadFile() == true ) then if ( IniFile:ReadFile() == true ) then

View File

@ -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