}
synchronized(player)
{
if(player.getCurrentMp() < recipeList.getMpCost())
{
player.sendPacket(Msg.NOT_ENOUGH_MP, new RecipeItemMakeInfo(recipeList.getId(), player, 0));
return;
}
if(!player.findRecipe(recipeListId))
{
player.sendPacket(Msg.PLEASE_REGISTER_A_RECIPE, Msg.ActionFail);
return;
}
}
synchronized(player.getInventory())
{
L2RecipeComponent[] recipes = recipeList.getRecipes();
Inventory inventory = player.getInventory();
for(L2RecipeComponent recipe : recipes)
{
if(recipe.getQuantity() == 0)
{
continue;
}
if(Config.ALT_GAME_UNREGISTER_RECIPE && ItemTable.getInstance().getTemplate(recipe.getItemId()).getItemType() == EtcItemType.RECIPE)
{
L2Recipe rp = RecipeController.getInstance().getRecipeByRecipeItem(recipe.getItemId());
if(player.hasRecipe(rp))
{
continue;
}
player.sendPacket(Msg.NOT_ENOUGH_MATERIALS, new RecipeItemMakeInfo(recipeList.getId(), player, 0));
return;
}
L2ItemInstance invItem = inventory.getItemByItemId(recipe.getItemId());
if(invItem == null || recipe.getQuantity() > invItem.getCount())
{
player.sendPacket(Msg.NOT_ENOUGH_MATERIALS, new RecipeItemMakeInfo(recipeList.getId(), player, 0));
return;
}
}
player.reduceCurrentMp(recipeList.getMpCost(), null);
for(L2RecipeComponent recipe : recipes)
{
if(recipe.getQuantity() != 0)
{
L2ItemInstance invItem = inventory.getItemByItemId(recipe.getItemId());
if(Config.ALT_GAME_UNREGISTER_RECIPE && ItemTable.getInstance().getTemplate(recipe.getItemId()).getItemType() == EtcItemType.RECIPE)
{
player.unregisterRecipe(RecipeController.getInstance().getRecipeByRecipeItem(recipe.getItemId()).getId());
}
else
{
inventory.destroyItem(invItem, recipe.getQuantity(), false);
player.sendPacket(SystemMessage.removeItems(invItem.getItemId(), recipe.getQuantity()));
}
}
}
}
int count = 1;
if(rollMW(player, recipeList))
{
count++;
}
int success = 0;
for(int i = 0; i < count; i++)
{
if(Rnd.chance(recipeList.getSuccessRate()))
{
L2ItemInstance createdItem = ItemTable.getInstance().createItem(rollMW(player, recipeList) ? recipeList.getFoundation() : recipeList.getItemId());
createdItem.setCount(recipeList.getCount());
if(Config.CRAFT_COUNTER)
{
player.incrementCraftCounter(createdItem.getItemId(), recipeList.getCount());
}
player.sendPacket(SystemMessage.obtainItems(createdItem));
player.getInventory().addItem(createdItem);
success = 1;
}
}
if(success == 0)
{
player.sendPacket(new SystemMessage(SystemMessage.S1_MANUFACTURING_FAILURE).addItemName(recipeList.getItemId()));
}
if(Config.ALT_GAME_EXP_FOR_CRAFT)
{
player.addExpAndSp((long) (recipeList.getExp() * Config.RATE_XP), (long) (recipeList.getSp() * Config.RATE_SP), true, false);
}
player.sendStatusUpdate(false, StatusUpdate.CUR_LOAD, StatusUpdate.CUR_MP);
player.sendPacket(new RecipeItemMakeInfo(recipeList.getId(), player, success));
}