Reduce item creation store queries.

This commit is contained in:
MobiusDevelopment
2020-03-31 09:27:44 +00:00
parent bd1fb2afbe
commit 5fe7e70c08
34 changed files with 134 additions and 878 deletions

View File

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

View File

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