X-Git-Url: https://git.lizzy.rs/?a=blobdiff_plain;f=src%2Ftool.cpp;h=839b1e387891162ccbd6384959c49ab629440b1d;hb=b7ee608e70f8e031e3e01c9672bedb16efa648b8;hp=c1e268ff11c9ff4f512a3a865924de90e92bba74;hpb=d0ea6f9920d30f46d1f5d44e8823a8d932f9f29d;p=minetest.git diff --git a/src/tool.cpp b/src/tool.cpp index c1e268ff1..839b1e387 100644 --- a/src/tool.cpp +++ b/src/tool.cpp @@ -1,6 +1,6 @@ /* -Minetest-c55 -Copyright (C) 2011 celeron55, Perttu Ahola +Minetest +Copyright (C) 2013 celeron55, Perttu Ahola This program is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by @@ -18,56 +18,70 @@ with this program; if not, write to the Free Software Foundation, Inc., */ #include "tool.h" -#include "itemdef.h" // For itemgroup_get() +#include "itemgroup.h" #include "log.h" #include "inventory.h" +#include "exceptions.h" #include "util/serialize.h" #include "util/numeric.h" -void ToolCapabilities::serialize(std::ostream &os) const +void ToolCapabilities::serialize(std::ostream &os, u16 protocol_version) const { - writeU8(os, 1); // version + writeU8(os, 3); // protocol_version >= 36 writeF1000(os, full_punch_interval); writeS16(os, max_drop_level); writeU32(os, groupcaps.size()); - for(std::map::const_iterator - i = groupcaps.begin(); i != groupcaps.end(); i++){ - const std::string *name = &i->first; - const ToolGroupCap *cap = &i->second; - os<uses); writeS16(os, cap->maxlevel); writeU32(os, cap->times.size()); - for(std::map::const_iterator - i = cap->times.begin(); i != cap->times.end(); i++){ - writeS16(os, i->first); - writeF1000(os, i->second); + for (const auto &time : cap->times) { + writeS16(os, time.first); + writeF1000(os, time.second); } } + + writeU32(os, damageGroups.size()); + + for (const auto &damageGroup : damageGroups) { + os << serializeString(damageGroup.first); + writeS16(os, damageGroup.second); + } } void ToolCapabilities::deSerialize(std::istream &is) { int version = readU8(is); - if(version != 1) throw SerializationError( - "unsupported ToolCapabilities version"); + if (version < 3) + throw SerializationError("unsupported ToolCapabilities version"); + full_punch_interval = readF1000(is); max_drop_level = readS16(is); groupcaps.clear(); u32 groupcaps_size = readU32(is); - for(u32 i=0; iname == "")) + if (do_hit && punchitem) { + if (itemgroup_get(armor_groups, "punch_operable") && + (toolcap == NULL || punchitem->name.empty())) do_hit = false; } - if(do_hit){ + + if (do_hit) { if(itemgroup_get(armor_groups, "immortal")) do_hit = false; } } - + PunchDamageResult result; if(do_hit) { @@ -187,7 +199,6 @@ PunchDamageResult getPunchDamage( result.did_punch = true; result.wear = hitparams.wear; result.damage = hitparams.hp; - result.main_group = hitparams.main_group; } return result;