Reduce item creation store queries.
This commit is contained in:
@ -30,7 +30,6 @@ import java.util.stream.Collectors;
|
||||
|
||||
import org.l2jmobius.Config;
|
||||
import org.l2jmobius.commons.database.DatabaseFactory;
|
||||
import org.l2jmobius.gameserver.GameTimeController;
|
||||
import org.l2jmobius.gameserver.datatables.ItemTable;
|
||||
import org.l2jmobius.gameserver.enums.ItemLocation;
|
||||
import org.l2jmobius.gameserver.model.World;
|
||||
@ -210,24 +209,8 @@ public abstract class ItemContainer
|
||||
ItemTable.getInstance().destroyItem(process, item, actor, reference);
|
||||
item.updateDatabase();
|
||||
item = olditem;
|
||||
|
||||
// Updates database
|
||||
final float adenaRate = Config.RATE_DROP_AMOUNT_BY_ID.getOrDefault(Inventory.ADENA_ID, 1f);
|
||||
if ((item.getId() == Inventory.ADENA_ID) && (count < (10000 * adenaRate)))
|
||||
{
|
||||
// Small adena changes won't be saved to database all the time
|
||||
if ((GameTimeController.getInstance().getGameTicks() % 5) == 0)
|
||||
{
|
||||
item.updateDatabase();
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
item.updateDatabase();
|
||||
}
|
||||
}
|
||||
// If item hasn't be found in inventory, create new one
|
||||
else
|
||||
else // If item hasn't be found in inventory, create new one
|
||||
{
|
||||
item.setOwnerId(process, getOwnerId(), actor, reference);
|
||||
item.setItemLocation(getBaseLocation());
|
||||
@ -235,9 +218,6 @@ public abstract class ItemContainer
|
||||
|
||||
// Add item in inventory
|
||||
addItem(item);
|
||||
|
||||
// Updates database
|
||||
item.updateDatabase();
|
||||
}
|
||||
|
||||
refreshWeight();
|
||||
@ -262,24 +242,8 @@ public abstract class ItemContainer
|
||||
{
|
||||
item.changeCount(process, count, actor, reference);
|
||||
item.setLastChange(ItemInstance.MODIFIED);
|
||||
// Updates database
|
||||
// If Adena drop rate is not present it will be x1.
|
||||
final float adenaRate = Config.RATE_DROP_AMOUNT_BY_ID.getOrDefault(Inventory.ADENA_ID, 1f);
|
||||
if ((itemId == Inventory.ADENA_ID) && (count < (10000 * adenaRate)))
|
||||
{
|
||||
// Small adena changes won't be saved to database all the time
|
||||
if ((GameTimeController.getInstance().getGameTicks() % 5) == 0)
|
||||
{
|
||||
item.updateDatabase();
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
item.updateDatabase();
|
||||
}
|
||||
}
|
||||
// If item hasn't be found in inventory, create new one
|
||||
else
|
||||
else // If item hasn't be found in inventory, create new one
|
||||
{
|
||||
for (int i = 0; i < count; i++)
|
||||
{
|
||||
@ -297,8 +261,6 @@ public abstract class ItemContainer
|
||||
|
||||
// Add item in inventory
|
||||
addItem(item);
|
||||
// Updates database
|
||||
item.updateDatabase();
|
||||
|
||||
// If stackable, end loop as entire count is included in 1 instance of item
|
||||
if (template.isStackable() || !Config.MULTIPLE_ITEM_DROP)
|
||||
@ -334,8 +296,8 @@ public abstract class ItemContainer
|
||||
{
|
||||
return null;
|
||||
}
|
||||
ItemInstance targetitem = sourceitem.isStackable() ? target.getItemByItemId(sourceitem.getId()) : null;
|
||||
|
||||
ItemInstance targetitem = sourceitem.isStackable() ? target.getItemByItemId(sourceitem.getId()) : null;
|
||||
synchronized (sourceitem)
|
||||
{
|
||||
// check if this item still present in this container
|
||||
@ -363,8 +325,7 @@ public abstract class ItemContainer
|
||||
{
|
||||
sourceitem.changeCount(process, -count, actor, reference);
|
||||
}
|
||||
else
|
||||
// Otherwise destroy old item
|
||||
else // Otherwise destroy old item
|
||||
{
|
||||
removeItem(sourceitem);
|
||||
ItemTable.getInstance().destroyItem(process, sourceitem, actor, reference);
|
||||
@ -374,8 +335,7 @@ public abstract class ItemContainer
|
||||
{
|
||||
targetitem.changeCount(process, count, actor, reference);
|
||||
}
|
||||
else
|
||||
// Otherwise add new item
|
||||
else // Otherwise add new item
|
||||
{
|
||||
targetitem = target.addItem(process, sourceitem.getId(), count, actor, reference);
|
||||
}
|
||||
@ -437,6 +397,7 @@ public abstract class ItemContainer
|
||||
item = ItemTable.getInstance().createItem(process, item.getId(), count, actor, reference);
|
||||
item.setOwnerId(getOwnerId());
|
||||
}
|
||||
|
||||
item.setItemLocation(newLocation);
|
||||
item.updateDatabase(true);
|
||||
}
|
||||
@ -497,13 +458,6 @@ public abstract class ItemContainer
|
||||
{
|
||||
item.changeCount(process, -count, actor, reference);
|
||||
item.setLastChange(ItemInstance.MODIFIED);
|
||||
|
||||
// don't update often for untraced items
|
||||
if ((process != null) || ((GameTimeController.getInstance().getGameTicks() % 10) == 0))
|
||||
{
|
||||
item.updateDatabase();
|
||||
}
|
||||
|
||||
refreshWeight();
|
||||
}
|
||||
else
|
||||
|
@ -969,6 +969,8 @@ public class ItemInstance extends WorldObject
|
||||
{
|
||||
updateItemOptions();
|
||||
}
|
||||
|
||||
// Notify to scripts.
|
||||
EventDispatcher.getInstance().notifyEventAsync(new OnPlayerAugment(getActingPlayer(), this, augmentation, true), getItem());
|
||||
return true;
|
||||
}
|
||||
|
Reference in New Issue
Block a user