static ItemStack craftToolRepair( const ItemStack &item1, const ItemStack &item2, float additional_wear, IGameDef *gamedef) { IItemDefManager *idef = gamedef->idef(); if (item1.count != 1 || item2.count != 1 || item1.name != item2.name || idef->get(item1.name).type != ITEM_TOOL || itemgroup_get(idef->get(item1.name).groups, "disable_repair") == 1) { // Failure return ItemStack(); } s32 item1_uses = 65536 - (u32) item1.wear; s32 item2_uses = 65536 - (u32) item2.wear; s32 new_uses = item1_uses + item2_uses; s32 new_wear = 65536 - new_uses + floor(additional_wear * 65536 + 0.5); if (new_wear >= 65536) return ItemStack(); if (new_wear < 0) new_wear = 0; ItemStack repaired = item1; repaired.wear = new_wear; return repaired; }
// get_item_def(itemstring) int ModApiClient::l_get_item_def(lua_State *L) { IGameDef *gdef = getGameDef(L); assert(gdef); IItemDefManager *idef = gdef->idef(); assert(idef); if (!lua_isstring(L, 1)) return 0; const std::string &name(lua_tostring(L, 1)); if (!idef->isKnown(name)) return 0; const ItemDefinition &def = idef->get(name); push_item_definition_full(L, def); return 1; }
// get_item_def(itemstring) int ModApiClient::l_get_item_def(lua_State *L) { IGameDef *gdef = getGameDef(L); assert(gdef); IItemDefManager *idef = gdef->idef(); assert(idef); if (getClient(L)->checkCSMFlavourLimit(CSMFlavourLimit::CSM_FL_READ_ITEMDEFS)) return 0; if (!lua_isstring(L, 1)) return 0; const std::string &name(lua_tostring(L, 1)); if (!idef->isKnown(name)) return 0; const ItemDefinition &def = idef->get(name); push_item_definition_full(L, def); return 1; }