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.Config;
import org.l2jmobius.commons.database.DatabaseFactory; import org.l2jmobius.commons.database.DatabaseFactory;
import org.l2jmobius.gameserver.GameTimeController;
import org.l2jmobius.gameserver.datatables.ItemTable; import org.l2jmobius.gameserver.datatables.ItemTable;
import org.l2jmobius.gameserver.enums.ItemLocation; import org.l2jmobius.gameserver.enums.ItemLocation;
import org.l2jmobius.gameserver.model.World; import org.l2jmobius.gameserver.model.World;
@@ -210,24 +209,8 @@ public abstract class ItemContainer
ItemTable.getInstance().destroyItem(process, item, actor, reference); ItemTable.getInstance().destroyItem(process, item, actor, reference);
item.updateDatabase(); item.updateDatabase();
item = olditem; 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 // If item hasn't be found in inventory, create new one
else
{ {
item.setOwnerId(process, getOwnerId(), actor, reference); item.setOwnerId(process, getOwnerId(), actor, reference);
item.setItemLocation(getBaseLocation()); item.setItemLocation(getBaseLocation());
@@ -235,9 +218,6 @@ public abstract class ItemContainer
// Add item in inventory // Add item in inventory
addItem(item); addItem(item);
// Updates database
item.updateDatabase();
} }
refreshWeight(); refreshWeight();
@@ -262,24 +242,8 @@ public abstract class ItemContainer
{ {
item.changeCount(process, count, actor, reference); item.changeCount(process, count, actor, reference);
item.setLastChange(ItemInstance.MODIFIED); 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 // If item hasn't be found in inventory, create new one
else
{ {
for (int i = 0; i < count; i++) for (int i = 0; i < count; i++)
{ {
@@ -297,8 +261,6 @@ public abstract class ItemContainer
// Add item in inventory // Add item in inventory
addItem(item); addItem(item);
// Updates database
item.updateDatabase();
// If stackable, end loop as entire count is included in 1 instance of item // If stackable, end loop as entire count is included in 1 instance of item
if (template.isStackable() || !Config.MULTIPLE_ITEM_DROP) if (template.isStackable() || !Config.MULTIPLE_ITEM_DROP)
@@ -334,8 +296,8 @@ public abstract class ItemContainer
{ {
return null; return null;
} }
ItemInstance targetitem = sourceitem.isStackable() ? target.getItemByItemId(sourceitem.getId()) : null;
ItemInstance targetitem = sourceitem.isStackable() ? target.getItemByItemId(sourceitem.getId()) : null;
synchronized (sourceitem) synchronized (sourceitem)
{ {
// check if this item still present in this container // check if this item still present in this container
@@ -363,8 +325,7 @@ public abstract class ItemContainer
{ {
sourceitem.changeCount(process, -count, actor, reference); sourceitem.changeCount(process, -count, actor, reference);
} }
else else // Otherwise destroy old item
// Otherwise destroy old item
{ {
removeItem(sourceitem); removeItem(sourceitem);
ItemTable.getInstance().destroyItem(process, sourceitem, actor, reference); ItemTable.getInstance().destroyItem(process, sourceitem, actor, reference);
@@ -374,8 +335,7 @@ public abstract class ItemContainer
{ {
targetitem.changeCount(process, count, actor, reference); targetitem.changeCount(process, count, actor, reference);
} }
else else // Otherwise add new item
// Otherwise add new item
{ {
targetitem = target.addItem(process, sourceitem.getId(), count, actor, reference); 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 = ItemTable.getInstance().createItem(process, item.getId(), count, actor, reference);
item.setOwnerId(getOwnerId()); item.setOwnerId(getOwnerId());
} }
item.setItemLocation(newLocation); item.setItemLocation(newLocation);
item.updateDatabase(true); item.updateDatabase(true);
} }
@@ -497,13 +458,6 @@ public abstract class ItemContainer
{ {
item.changeCount(process, -count, actor, reference); item.changeCount(process, -count, actor, reference);
item.setLastChange(ItemInstance.MODIFIED); item.setLastChange(ItemInstance.MODIFIED);
// don't update often for untraced items
if ((process != null) || ((GameTimeController.getInstance().getGameTicks() % 10) == 0))
{
item.updateDatabase();
}
refreshWeight(); refreshWeight();
} }
else else

View File

@@ -969,6 +969,8 @@ public class ItemInstance extends WorldObject
{ {
updateItemOptions(); updateItemOptions();
} }
// Notify to scripts.
EventDispatcher.getInstance().notifyEventAsync(new OnPlayerAugment(getActingPlayer(), this, augmentation, true), getItem()); EventDispatcher.getInstance().notifyEventAsync(new OnPlayerAugment(getActingPlayer(), this, augmentation, true), getItem());
return true; return true;
} }

View File

@@ -30,7 +30,6 @@ import java.util.stream.Collectors;
import org.l2jmobius.Config; import org.l2jmobius.Config;
import org.l2jmobius.commons.database.DatabaseFactory; import org.l2jmobius.commons.database.DatabaseFactory;
import org.l2jmobius.gameserver.GameTimeController;
import org.l2jmobius.gameserver.datatables.ItemTable; import org.l2jmobius.gameserver.datatables.ItemTable;
import org.l2jmobius.gameserver.enums.ItemLocation; import org.l2jmobius.gameserver.enums.ItemLocation;
import org.l2jmobius.gameserver.model.World; import org.l2jmobius.gameserver.model.World;
@@ -210,24 +209,8 @@ public abstract class ItemContainer
ItemTable.getInstance().destroyItem(process, item, actor, reference); ItemTable.getInstance().destroyItem(process, item, actor, reference);
item.updateDatabase(); item.updateDatabase();
item = olditem; 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 // If item hasn't be found in inventory, create new one
else
{ {
item.setOwnerId(process, getOwnerId(), actor, reference); item.setOwnerId(process, getOwnerId(), actor, reference);
item.setItemLocation(getBaseLocation()); item.setItemLocation(getBaseLocation());
@@ -235,9 +218,6 @@ public abstract class ItemContainer
// Add item in inventory // Add item in inventory
addItem(item); addItem(item);
// Updates database
item.updateDatabase();
} }
refreshWeight(); refreshWeight();
@@ -262,24 +242,8 @@ public abstract class ItemContainer
{ {
item.changeCount(process, count, actor, reference); item.changeCount(process, count, actor, reference);
item.setLastChange(ItemInstance.MODIFIED); 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 // If item hasn't be found in inventory, create new one
else
{ {
for (int i = 0; i < count; i++) for (int i = 0; i < count; i++)
{ {
@@ -297,8 +261,6 @@ public abstract class ItemContainer
// Add item in inventory // Add item in inventory
addItem(item); addItem(item);
// Updates database
item.updateDatabase();
// If stackable, end loop as entire count is included in 1 instance of item // If stackable, end loop as entire count is included in 1 instance of item
if (template.isStackable() || !Config.MULTIPLE_ITEM_DROP) if (template.isStackable() || !Config.MULTIPLE_ITEM_DROP)
@@ -334,8 +296,8 @@ public abstract class ItemContainer
{ {
return null; return null;
} }
ItemInstance targetitem = sourceitem.isStackable() ? target.getItemByItemId(sourceitem.getId()) : null;
ItemInstance targetitem = sourceitem.isStackable() ? target.getItemByItemId(sourceitem.getId()) : null;
synchronized (sourceitem) synchronized (sourceitem)
{ {
// check if this item still present in this container // check if this item still present in this container
@@ -363,8 +325,7 @@ public abstract class ItemContainer
{ {
sourceitem.changeCount(process, -count, actor, reference); sourceitem.changeCount(process, -count, actor, reference);
} }
else else // Otherwise destroy old item
// Otherwise destroy old item
{ {
removeItem(sourceitem); removeItem(sourceitem);
ItemTable.getInstance().destroyItem(process, sourceitem, actor, reference); ItemTable.getInstance().destroyItem(process, sourceitem, actor, reference);
@@ -374,8 +335,7 @@ public abstract class ItemContainer
{ {
targetitem.changeCount(process, count, actor, reference); targetitem.changeCount(process, count, actor, reference);
} }
else else // Otherwise add new item
// Otherwise add new item
{ {
targetitem = target.addItem(process, sourceitem.getId(), count, actor, reference); 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 = ItemTable.getInstance().createItem(process, item.getId(), count, actor, reference);
item.setOwnerId(getOwnerId()); item.setOwnerId(getOwnerId());
} }
item.setItemLocation(newLocation); item.setItemLocation(newLocation);
item.updateDatabase(true); item.updateDatabase(true);
} }
@@ -497,13 +458,6 @@ public abstract class ItemContainer
{ {
item.changeCount(process, -count, actor, reference); item.changeCount(process, -count, actor, reference);
item.setLastChange(ItemInstance.MODIFIED); item.setLastChange(ItemInstance.MODIFIED);
// don't update often for untraced items
if ((process != null) || ((GameTimeController.getInstance().getGameTicks() % 10) == 0))
{
item.updateDatabase();
}
refreshWeight(); refreshWeight();
} }
else else

View File

@@ -970,6 +970,8 @@ public class ItemInstance extends WorldObject
{ {
updateItemOptions(); updateItemOptions();
} }
// Notify to scripts.
EventDispatcher.getInstance().notifyEventAsync(new OnPlayerAugment(getActingPlayer(), this, augmentation, true), getItem()); EventDispatcher.getInstance().notifyEventAsync(new OnPlayerAugment(getActingPlayer(), this, augmentation, true), getItem());
return true; return true;
} }

View File

@@ -30,7 +30,6 @@ import java.util.stream.Collectors;
import org.l2jmobius.Config; import org.l2jmobius.Config;
import org.l2jmobius.commons.database.DatabaseFactory; import org.l2jmobius.commons.database.DatabaseFactory;
import org.l2jmobius.gameserver.GameTimeController;
import org.l2jmobius.gameserver.datatables.ItemTable; import org.l2jmobius.gameserver.datatables.ItemTable;
import org.l2jmobius.gameserver.enums.ItemLocation; import org.l2jmobius.gameserver.enums.ItemLocation;
import org.l2jmobius.gameserver.model.World; import org.l2jmobius.gameserver.model.World;
@@ -210,24 +209,8 @@ public abstract class ItemContainer
ItemTable.getInstance().destroyItem(process, item, actor, reference); ItemTable.getInstance().destroyItem(process, item, actor, reference);
item.updateDatabase(); item.updateDatabase();
item = olditem; 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 // If item hasn't be found in inventory, create new one
else
{ {
item.setOwnerId(process, getOwnerId(), actor, reference); item.setOwnerId(process, getOwnerId(), actor, reference);
item.setItemLocation(getBaseLocation()); item.setItemLocation(getBaseLocation());
@@ -235,9 +218,6 @@ public abstract class ItemContainer
// Add item in inventory // Add item in inventory
addItem(item); addItem(item);
// Updates database
item.updateDatabase();
} }
refreshWeight(); refreshWeight();
@@ -262,24 +242,8 @@ public abstract class ItemContainer
{ {
item.changeCount(process, count, actor, reference); item.changeCount(process, count, actor, reference);
item.setLastChange(ItemInstance.MODIFIED); 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 // If item hasn't be found in inventory, create new one
else
{ {
for (int i = 0; i < count; i++) for (int i = 0; i < count; i++)
{ {
@@ -297,8 +261,6 @@ public abstract class ItemContainer
// Add item in inventory // Add item in inventory
addItem(item); addItem(item);
// Updates database
item.updateDatabase();
// If stackable, end loop as entire count is included in 1 instance of item // If stackable, end loop as entire count is included in 1 instance of item
if (template.isStackable() || !Config.MULTIPLE_ITEM_DROP) if (template.isStackable() || !Config.MULTIPLE_ITEM_DROP)
@@ -334,8 +296,8 @@ public abstract class ItemContainer
{ {
return null; return null;
} }
ItemInstance targetitem = sourceitem.isStackable() ? target.getItemByItemId(sourceitem.getId()) : null;
ItemInstance targetitem = sourceitem.isStackable() ? target.getItemByItemId(sourceitem.getId()) : null;
synchronized (sourceitem) synchronized (sourceitem)
{ {
// check if this item still present in this container // check if this item still present in this container
@@ -363,8 +325,7 @@ public abstract class ItemContainer
{ {
sourceitem.changeCount(process, -count, actor, reference); sourceitem.changeCount(process, -count, actor, reference);
} }
else else // Otherwise destroy old item
// Otherwise destroy old item
{ {
removeItem(sourceitem); removeItem(sourceitem);
ItemTable.getInstance().destroyItem(process, sourceitem, actor, reference); ItemTable.getInstance().destroyItem(process, sourceitem, actor, reference);
@@ -374,8 +335,7 @@ public abstract class ItemContainer
{ {
targetitem.changeCount(process, count, actor, reference); targetitem.changeCount(process, count, actor, reference);
} }
else else // Otherwise add new item
// Otherwise add new item
{ {
targetitem = target.addItem(process, sourceitem.getId(), count, actor, reference); 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 = ItemTable.getInstance().createItem(process, item.getId(), count, actor, reference);
item.setOwnerId(getOwnerId()); item.setOwnerId(getOwnerId());
} }
item.setItemLocation(newLocation); item.setItemLocation(newLocation);
item.updateDatabase(true); item.updateDatabase(true);
} }
@@ -497,13 +458,6 @@ public abstract class ItemContainer
{ {
item.changeCount(process, -count, actor, reference); item.changeCount(process, -count, actor, reference);
item.setLastChange(ItemInstance.MODIFIED); item.setLastChange(ItemInstance.MODIFIED);
// don't update often for untraced items
if ((process != null) || ((GameTimeController.getInstance().getGameTicks() % 10) == 0))
{
item.updateDatabase();
}
refreshWeight(); refreshWeight();
} }
else else

View File

@@ -970,6 +970,8 @@ public class ItemInstance extends WorldObject
{ {
updateItemOptions(); updateItemOptions();
} }
// Notify to scripts.
EventDispatcher.getInstance().notifyEventAsync(new OnPlayerAugment(getActingPlayer(), this, augmentation, true), getItem()); EventDispatcher.getInstance().notifyEventAsync(new OnPlayerAugment(getActingPlayer(), this, augmentation, true), getItem());
return true; return true;
} }

View File

@@ -30,7 +30,6 @@ import java.util.stream.Collectors;
import org.l2jmobius.Config; import org.l2jmobius.Config;
import org.l2jmobius.commons.database.DatabaseFactory; import org.l2jmobius.commons.database.DatabaseFactory;
import org.l2jmobius.gameserver.GameTimeController;
import org.l2jmobius.gameserver.datatables.ItemTable; import org.l2jmobius.gameserver.datatables.ItemTable;
import org.l2jmobius.gameserver.enums.ItemLocation; import org.l2jmobius.gameserver.enums.ItemLocation;
import org.l2jmobius.gameserver.model.World; import org.l2jmobius.gameserver.model.World;
@@ -210,24 +209,8 @@ public abstract class ItemContainer
ItemTable.getInstance().destroyItem(process, item, actor, reference); ItemTable.getInstance().destroyItem(process, item, actor, reference);
item.updateDatabase(); item.updateDatabase();
item = olditem; 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 // If item hasn't be found in inventory, create new one
else
{ {
item.setOwnerId(process, getOwnerId(), actor, reference); item.setOwnerId(process, getOwnerId(), actor, reference);
item.setItemLocation(getBaseLocation()); item.setItemLocation(getBaseLocation());
@@ -235,9 +218,6 @@ public abstract class ItemContainer
// Add item in inventory // Add item in inventory
addItem(item); addItem(item);
// Updates database
item.updateDatabase();
} }
refreshWeight(); refreshWeight();
@@ -262,24 +242,8 @@ public abstract class ItemContainer
{ {
item.changeCount(process, count, actor, reference); item.changeCount(process, count, actor, reference);
item.setLastChange(ItemInstance.MODIFIED); 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 // If item hasn't be found in inventory, create new one
else
{ {
for (int i = 0; i < count; i++) for (int i = 0; i < count; i++)
{ {
@@ -297,8 +261,6 @@ public abstract class ItemContainer
// Add item in inventory // Add item in inventory
addItem(item); addItem(item);
// Updates database
item.updateDatabase();
// If stackable, end loop as entire count is included in 1 instance of item // If stackable, end loop as entire count is included in 1 instance of item
if (template.isStackable() || !Config.MULTIPLE_ITEM_DROP) if (template.isStackable() || !Config.MULTIPLE_ITEM_DROP)
@@ -334,8 +296,8 @@ public abstract class ItemContainer
{ {
return null; return null;
} }
ItemInstance targetitem = sourceitem.isStackable() ? target.getItemByItemId(sourceitem.getId()) : null;
ItemInstance targetitem = sourceitem.isStackable() ? target.getItemByItemId(sourceitem.getId()) : null;
synchronized (sourceitem) synchronized (sourceitem)
{ {
// check if this item still present in this container // check if this item still present in this container
@@ -363,8 +325,7 @@ public abstract class ItemContainer
{ {
sourceitem.changeCount(process, -count, actor, reference); sourceitem.changeCount(process, -count, actor, reference);
} }
else else // Otherwise destroy old item
// Otherwise destroy old item
{ {
removeItem(sourceitem); removeItem(sourceitem);
ItemTable.getInstance().destroyItem(process, sourceitem, actor, reference); ItemTable.getInstance().destroyItem(process, sourceitem, actor, reference);
@@ -374,8 +335,7 @@ public abstract class ItemContainer
{ {
targetitem.changeCount(process, count, actor, reference); targetitem.changeCount(process, count, actor, reference);
} }
else else // Otherwise add new item
// Otherwise add new item
{ {
targetitem = target.addItem(process, sourceitem.getId(), count, actor, reference); 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 = ItemTable.getInstance().createItem(process, item.getId(), count, actor, reference);
item.setOwnerId(getOwnerId()); item.setOwnerId(getOwnerId());
} }
item.setItemLocation(newLocation); item.setItemLocation(newLocation);
item.updateDatabase(true); item.updateDatabase(true);
} }
@@ -497,13 +458,6 @@ public abstract class ItemContainer
{ {
item.changeCount(process, -count, actor, reference); item.changeCount(process, -count, actor, reference);
item.setLastChange(ItemInstance.MODIFIED); item.setLastChange(ItemInstance.MODIFIED);
// don't update often for untraced items
if ((process != null) || ((GameTimeController.getInstance().getGameTicks() % 10) == 0))
{
item.updateDatabase();
}
refreshWeight(); refreshWeight();
} }
else else

View File

@@ -970,6 +970,8 @@ public class ItemInstance extends WorldObject
{ {
updateItemOptions(); updateItemOptions();
} }
// Notify to scripts.
EventDispatcher.getInstance().notifyEventAsync(new OnPlayerAugment(getActingPlayer(), this, augmentation, true), getItem()); EventDispatcher.getInstance().notifyEventAsync(new OnPlayerAugment(getActingPlayer(), this, augmentation, true), getItem());
return true; return true;
} }

View File

@@ -30,7 +30,6 @@ import java.util.stream.Collectors;
import org.l2jmobius.Config; import org.l2jmobius.Config;
import org.l2jmobius.commons.database.DatabaseFactory; import org.l2jmobius.commons.database.DatabaseFactory;
import org.l2jmobius.gameserver.GameTimeController;
import org.l2jmobius.gameserver.datatables.ItemTable; import org.l2jmobius.gameserver.datatables.ItemTable;
import org.l2jmobius.gameserver.enums.ItemLocation; import org.l2jmobius.gameserver.enums.ItemLocation;
import org.l2jmobius.gameserver.model.World; import org.l2jmobius.gameserver.model.World;
@@ -210,24 +209,8 @@ public abstract class ItemContainer
ItemTable.getInstance().destroyItem(process, item, actor, reference); ItemTable.getInstance().destroyItem(process, item, actor, reference);
item.updateDatabase(); item.updateDatabase();
item = olditem; 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 // If item hasn't be found in inventory, create new one
else
{ {
item.setOwnerId(process, getOwnerId(), actor, reference); item.setOwnerId(process, getOwnerId(), actor, reference);
item.setItemLocation(getBaseLocation()); item.setItemLocation(getBaseLocation());
@@ -235,9 +218,6 @@ public abstract class ItemContainer
// Add item in inventory // Add item in inventory
addItem(item); addItem(item);
// Updates database
item.updateDatabase();
} }
refreshWeight(); refreshWeight();
@@ -262,24 +242,8 @@ public abstract class ItemContainer
{ {
item.changeCount(process, count, actor, reference); item.changeCount(process, count, actor, reference);
item.setLastChange(ItemInstance.MODIFIED); 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 // If item hasn't be found in inventory, create new one
else
{ {
for (int i = 0; i < count; i++) for (int i = 0; i < count; i++)
{ {
@@ -297,8 +261,6 @@ public abstract class ItemContainer
// Add item in inventory // Add item in inventory
addItem(item); addItem(item);
// Updates database
item.updateDatabase();
// If stackable, end loop as entire count is included in 1 instance of item // If stackable, end loop as entire count is included in 1 instance of item
if (template.isStackable() || !Config.MULTIPLE_ITEM_DROP) if (template.isStackable() || !Config.MULTIPLE_ITEM_DROP)
@@ -334,8 +296,8 @@ public abstract class ItemContainer
{ {
return null; return null;
} }
ItemInstance targetitem = sourceitem.isStackable() ? target.getItemByItemId(sourceitem.getId()) : null;
ItemInstance targetitem = sourceitem.isStackable() ? target.getItemByItemId(sourceitem.getId()) : null;
synchronized (sourceitem) synchronized (sourceitem)
{ {
// check if this item still present in this container // check if this item still present in this container
@@ -363,8 +325,7 @@ public abstract class ItemContainer
{ {
sourceitem.changeCount(process, -count, actor, reference); sourceitem.changeCount(process, -count, actor, reference);
} }
else else // Otherwise destroy old item
// Otherwise destroy old item
{ {
removeItem(sourceitem); removeItem(sourceitem);
ItemTable.getInstance().destroyItem(process, sourceitem, actor, reference); ItemTable.getInstance().destroyItem(process, sourceitem, actor, reference);
@@ -374,8 +335,7 @@ public abstract class ItemContainer
{ {
targetitem.changeCount(process, count, actor, reference); targetitem.changeCount(process, count, actor, reference);
} }
else else // Otherwise add new item
// Otherwise add new item
{ {
targetitem = target.addItem(process, sourceitem.getId(), count, actor, reference); 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 = ItemTable.getInstance().createItem(process, item.getId(), count, actor, reference);
item.setOwnerId(getOwnerId()); item.setOwnerId(getOwnerId());
} }
item.setItemLocation(newLocation); item.setItemLocation(newLocation);
item.updateDatabase(true); item.updateDatabase(true);
} }
@@ -497,13 +458,6 @@ public abstract class ItemContainer
{ {
item.changeCount(process, -count, actor, reference); item.changeCount(process, -count, actor, reference);
item.setLastChange(ItemInstance.MODIFIED); item.setLastChange(ItemInstance.MODIFIED);
// don't update often for untraced items
if ((process != null) || ((GameTimeController.getInstance().getGameTicks() % 10) == 0))
{
item.updateDatabase();
}
refreshWeight(); refreshWeight();
} }
else else

View File

@@ -976,6 +976,8 @@ public class ItemInstance extends WorldObject
{ {
updateItemOptions(); updateItemOptions();
} }
// Notify to scripts.
EventDispatcher.getInstance().notifyEventAsync(new OnPlayerAugment(getActingPlayer(), this, augmentation, true), getItem()); EventDispatcher.getInstance().notifyEventAsync(new OnPlayerAugment(getActingPlayer(), this, augmentation, true), getItem());
return true; return true;
} }

View File

@@ -30,7 +30,6 @@ import java.util.stream.Collectors;
import org.l2jmobius.Config; import org.l2jmobius.Config;
import org.l2jmobius.commons.database.DatabaseFactory; import org.l2jmobius.commons.database.DatabaseFactory;
import org.l2jmobius.gameserver.GameTimeController;
import org.l2jmobius.gameserver.datatables.ItemTable; import org.l2jmobius.gameserver.datatables.ItemTable;
import org.l2jmobius.gameserver.enums.ItemLocation; import org.l2jmobius.gameserver.enums.ItemLocation;
import org.l2jmobius.gameserver.model.World; import org.l2jmobius.gameserver.model.World;
@@ -210,24 +209,8 @@ public abstract class ItemContainer
ItemTable.getInstance().destroyItem(process, item, actor, reference); ItemTable.getInstance().destroyItem(process, item, actor, reference);
item.updateDatabase(); item.updateDatabase();
item = olditem; 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 // If item hasn't be found in inventory, create new one
else
{ {
item.setOwnerId(process, getOwnerId(), actor, reference); item.setOwnerId(process, getOwnerId(), actor, reference);
item.setItemLocation(getBaseLocation()); item.setItemLocation(getBaseLocation());
@@ -235,9 +218,6 @@ public abstract class ItemContainer
// Add item in inventory // Add item in inventory
addItem(item); addItem(item);
// Updates database
item.updateDatabase();
} }
refreshWeight(); refreshWeight();
@@ -262,24 +242,8 @@ public abstract class ItemContainer
{ {
item.changeCount(process, count, actor, reference); item.changeCount(process, count, actor, reference);
item.setLastChange(ItemInstance.MODIFIED); 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 // If item hasn't be found in inventory, create new one
else
{ {
for (int i = 0; i < count; i++) for (int i = 0; i < count; i++)
{ {
@@ -297,8 +261,6 @@ public abstract class ItemContainer
// Add item in inventory // Add item in inventory
addItem(item); addItem(item);
// Updates database
item.updateDatabase();
// If stackable, end loop as entire count is included in 1 instance of item // If stackable, end loop as entire count is included in 1 instance of item
if (template.isStackable() || !Config.MULTIPLE_ITEM_DROP) if (template.isStackable() || !Config.MULTIPLE_ITEM_DROP)
@@ -334,8 +296,8 @@ public abstract class ItemContainer
{ {
return null; return null;
} }
ItemInstance targetitem = sourceitem.isStackable() ? target.getItemByItemId(sourceitem.getId()) : null;
ItemInstance targetitem = sourceitem.isStackable() ? target.getItemByItemId(sourceitem.getId()) : null;
synchronized (sourceitem) synchronized (sourceitem)
{ {
// check if this item still present in this container // check if this item still present in this container
@@ -363,8 +325,7 @@ public abstract class ItemContainer
{ {
sourceitem.changeCount(process, -count, actor, reference); sourceitem.changeCount(process, -count, actor, reference);
} }
else else // Otherwise destroy old item
// Otherwise destroy old item
{ {
removeItem(sourceitem); removeItem(sourceitem);
ItemTable.getInstance().destroyItem(process, sourceitem, actor, reference); ItemTable.getInstance().destroyItem(process, sourceitem, actor, reference);
@@ -374,8 +335,7 @@ public abstract class ItemContainer
{ {
targetitem.changeCount(process, count, actor, reference); targetitem.changeCount(process, count, actor, reference);
} }
else else // Otherwise add new item
// Otherwise add new item
{ {
targetitem = target.addItem(process, sourceitem.getId(), count, actor, reference); 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 = ItemTable.getInstance().createItem(process, item.getId(), count, actor, reference);
item.setOwnerId(getOwnerId()); item.setOwnerId(getOwnerId());
} }
item.setItemLocation(newLocation); item.setItemLocation(newLocation);
item.updateDatabase(true); item.updateDatabase(true);
} }
@@ -497,13 +458,6 @@ public abstract class ItemContainer
{ {
item.changeCount(process, -count, actor, reference); item.changeCount(process, -count, actor, reference);
item.setLastChange(ItemInstance.MODIFIED); item.setLastChange(ItemInstance.MODIFIED);
// don't update often for untraced items
if ((process != null) || ((GameTimeController.getInstance().getGameTicks() % 10) == 0))
{
item.updateDatabase();
}
refreshWeight(); refreshWeight();
} }
else else

View File

@@ -976,6 +976,8 @@ public class ItemInstance extends WorldObject
{ {
updateItemOptions(); updateItemOptions();
} }
// Notify to scripts.
EventDispatcher.getInstance().notifyEventAsync(new OnPlayerAugment(getActingPlayer(), this, augmentation, true), getItem()); EventDispatcher.getInstance().notifyEventAsync(new OnPlayerAugment(getActingPlayer(), this, augmentation, true), getItem());
return true; return true;
} }

View File

@@ -30,7 +30,6 @@ import java.util.stream.Collectors;
import org.l2jmobius.Config; import org.l2jmobius.Config;
import org.l2jmobius.commons.database.DatabaseFactory; import org.l2jmobius.commons.database.DatabaseFactory;
import org.l2jmobius.gameserver.GameTimeController;
import org.l2jmobius.gameserver.datatables.ItemTable; import org.l2jmobius.gameserver.datatables.ItemTable;
import org.l2jmobius.gameserver.enums.ItemLocation; import org.l2jmobius.gameserver.enums.ItemLocation;
import org.l2jmobius.gameserver.model.World; import org.l2jmobius.gameserver.model.World;
@@ -210,24 +209,8 @@ public abstract class ItemContainer
ItemTable.getInstance().destroyItem(process, item, actor, reference); ItemTable.getInstance().destroyItem(process, item, actor, reference);
item.updateDatabase(); item.updateDatabase();
item = olditem; 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 // If item hasn't be found in inventory, create new one
else
{ {
item.setOwnerId(process, getOwnerId(), actor, reference); item.setOwnerId(process, getOwnerId(), actor, reference);
item.setItemLocation(getBaseLocation()); item.setItemLocation(getBaseLocation());
@@ -235,9 +218,6 @@ public abstract class ItemContainer
// Add item in inventory // Add item in inventory
addItem(item); addItem(item);
// Updates database
item.updateDatabase();
} }
refreshWeight(); refreshWeight();
@@ -262,24 +242,8 @@ public abstract class ItemContainer
{ {
item.changeCount(process, count, actor, reference); item.changeCount(process, count, actor, reference);
item.setLastChange(ItemInstance.MODIFIED); 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 // If item hasn't be found in inventory, create new one
else
{ {
for (int i = 0; i < count; i++) for (int i = 0; i < count; i++)
{ {
@@ -297,8 +261,6 @@ public abstract class ItemContainer
// Add item in inventory // Add item in inventory
addItem(item); addItem(item);
// Updates database
item.updateDatabase();
// If stackable, end loop as entire count is included in 1 instance of item // If stackable, end loop as entire count is included in 1 instance of item
if (template.isStackable() || !Config.MULTIPLE_ITEM_DROP) if (template.isStackable() || !Config.MULTIPLE_ITEM_DROP)
@@ -334,8 +296,8 @@ public abstract class ItemContainer
{ {
return null; return null;
} }
ItemInstance targetitem = sourceitem.isStackable() ? target.getItemByItemId(sourceitem.getId()) : null;
ItemInstance targetitem = sourceitem.isStackable() ? target.getItemByItemId(sourceitem.getId()) : null;
synchronized (sourceitem) synchronized (sourceitem)
{ {
// check if this item still present in this container // check if this item still present in this container
@@ -363,8 +325,7 @@ public abstract class ItemContainer
{ {
sourceitem.changeCount(process, -count, actor, reference); sourceitem.changeCount(process, -count, actor, reference);
} }
else else // Otherwise destroy old item
// Otherwise destroy old item
{ {
removeItem(sourceitem); removeItem(sourceitem);
ItemTable.getInstance().destroyItem(process, sourceitem, actor, reference); ItemTable.getInstance().destroyItem(process, sourceitem, actor, reference);
@@ -374,8 +335,7 @@ public abstract class ItemContainer
{ {
targetitem.changeCount(process, count, actor, reference); targetitem.changeCount(process, count, actor, reference);
} }
else else // Otherwise add new item
// Otherwise add new item
{ {
targetitem = target.addItem(process, sourceitem.getId(), count, actor, reference); 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 = ItemTable.getInstance().createItem(process, item.getId(), count, actor, reference);
item.setOwnerId(getOwnerId()); item.setOwnerId(getOwnerId());
} }
item.setItemLocation(newLocation); item.setItemLocation(newLocation);
item.updateDatabase(true); item.updateDatabase(true);
} }
@@ -497,13 +458,6 @@ public abstract class ItemContainer
{ {
item.changeCount(process, -count, actor, reference); item.changeCount(process, -count, actor, reference);
item.setLastChange(ItemInstance.MODIFIED); item.setLastChange(ItemInstance.MODIFIED);
// don't update often for untraced items
if ((process != null) || ((GameTimeController.getInstance().getGameTicks() % 10) == 0))
{
item.updateDatabase();
}
refreshWeight(); refreshWeight();
} }
else else

View File

@@ -976,6 +976,8 @@ public class ItemInstance extends WorldObject
{ {
updateItemOptions(); updateItemOptions();
} }
// Notify to scripts.
EventDispatcher.getInstance().notifyEventAsync(new OnPlayerAugment(getActingPlayer(), this, augmentation, true), getItem()); EventDispatcher.getInstance().notifyEventAsync(new OnPlayerAugment(getActingPlayer(), this, augmentation, true), getItem());
return true; return true;
} }

View File

@@ -30,7 +30,6 @@ import java.util.stream.Collectors;
import org.l2jmobius.Config; import org.l2jmobius.Config;
import org.l2jmobius.commons.database.DatabaseFactory; import org.l2jmobius.commons.database.DatabaseFactory;
import org.l2jmobius.gameserver.GameTimeController;
import org.l2jmobius.gameserver.datatables.ItemTable; import org.l2jmobius.gameserver.datatables.ItemTable;
import org.l2jmobius.gameserver.enums.ItemLocation; import org.l2jmobius.gameserver.enums.ItemLocation;
import org.l2jmobius.gameserver.model.World; import org.l2jmobius.gameserver.model.World;
@@ -210,24 +209,8 @@ public abstract class ItemContainer
ItemTable.getInstance().destroyItem(process, item, actor, reference); ItemTable.getInstance().destroyItem(process, item, actor, reference);
item.updateDatabase(); item.updateDatabase();
item = olditem; 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 // If item hasn't be found in inventory, create new one
else
{ {
item.setOwnerId(process, getOwnerId(), actor, reference); item.setOwnerId(process, getOwnerId(), actor, reference);
item.setItemLocation(getBaseLocation()); item.setItemLocation(getBaseLocation());
@@ -235,9 +218,6 @@ public abstract class ItemContainer
// Add item in inventory // Add item in inventory
addItem(item); addItem(item);
// Updates database
item.updateDatabase();
} }
refreshWeight(); refreshWeight();
@@ -262,24 +242,8 @@ public abstract class ItemContainer
{ {
item.changeCount(process, count, actor, reference); item.changeCount(process, count, actor, reference);
item.setLastChange(ItemInstance.MODIFIED); 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 // If item hasn't be found in inventory, create new one
else
{ {
for (int i = 0; i < count; i++) for (int i = 0; i < count; i++)
{ {
@@ -297,8 +261,6 @@ public abstract class ItemContainer
// Add item in inventory // Add item in inventory
addItem(item); addItem(item);
// Updates database
item.updateDatabase();
// If stackable, end loop as entire count is included in 1 instance of item // If stackable, end loop as entire count is included in 1 instance of item
if (template.isStackable() || !Config.MULTIPLE_ITEM_DROP) if (template.isStackable() || !Config.MULTIPLE_ITEM_DROP)
@@ -334,8 +296,8 @@ public abstract class ItemContainer
{ {
return null; return null;
} }
ItemInstance targetitem = sourceitem.isStackable() ? target.getItemByItemId(sourceitem.getId()) : null;
ItemInstance targetitem = sourceitem.isStackable() ? target.getItemByItemId(sourceitem.getId()) : null;
synchronized (sourceitem) synchronized (sourceitem)
{ {
// check if this item still present in this container // check if this item still present in this container
@@ -363,8 +325,7 @@ public abstract class ItemContainer
{ {
sourceitem.changeCount(process, -count, actor, reference); sourceitem.changeCount(process, -count, actor, reference);
} }
else else // Otherwise destroy old item
// Otherwise destroy old item
{ {
removeItem(sourceitem); removeItem(sourceitem);
ItemTable.getInstance().destroyItem(process, sourceitem, actor, reference); ItemTable.getInstance().destroyItem(process, sourceitem, actor, reference);
@@ -374,8 +335,7 @@ public abstract class ItemContainer
{ {
targetitem.changeCount(process, count, actor, reference); targetitem.changeCount(process, count, actor, reference);
} }
else else // Otherwise add new item
// Otherwise add new item
{ {
targetitem = target.addItem(process, sourceitem.getId(), count, actor, reference); 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 = ItemTable.getInstance().createItem(process, item.getId(), count, actor, reference);
item.setOwnerId(getOwnerId()); item.setOwnerId(getOwnerId());
} }
item.setItemLocation(newLocation); item.setItemLocation(newLocation);
item.updateDatabase(true); item.updateDatabase(true);
} }
@@ -497,13 +458,6 @@ public abstract class ItemContainer
{ {
item.changeCount(process, -count, actor, reference); item.changeCount(process, -count, actor, reference);
item.setLastChange(ItemInstance.MODIFIED); item.setLastChange(ItemInstance.MODIFIED);
// don't update often for untraced items
if ((process != null) || ((GameTimeController.getInstance().getGameTicks() % 10) == 0))
{
item.updateDatabase();
}
refreshWeight(); refreshWeight();
} }
else else

View File

@@ -976,6 +976,8 @@ public class ItemInstance extends WorldObject
{ {
updateItemOptions(); updateItemOptions();
} }
// Notify to scripts.
EventDispatcher.getInstance().notifyEventAsync(new OnPlayerAugment(getActingPlayer(), this, augmentation, true), getItem()); EventDispatcher.getInstance().notifyEventAsync(new OnPlayerAugment(getActingPlayer(), this, augmentation, true), getItem());
return true; return true;
} }

View File

@@ -29,7 +29,6 @@ import java.util.logging.Logger;
import org.l2jmobius.Config; import org.l2jmobius.Config;
import org.l2jmobius.commons.database.DatabaseFactory; import org.l2jmobius.commons.database.DatabaseFactory;
import org.l2jmobius.gameserver.GameTimeController;
import org.l2jmobius.gameserver.datatables.ItemTable; import org.l2jmobius.gameserver.datatables.ItemTable;
import org.l2jmobius.gameserver.enums.ItemLocation; import org.l2jmobius.gameserver.enums.ItemLocation;
import org.l2jmobius.gameserver.model.World; import org.l2jmobius.gameserver.model.World;
@@ -251,23 +250,8 @@ public abstract class ItemContainer
ItemTable.getInstance().destroyItem(process, item, actor, reference); ItemTable.getInstance().destroyItem(process, item, actor, reference);
item.updateDatabase(); item.updateDatabase();
item = olditem; item = olditem;
// Updates database
if ((item.getId() == Inventory.ADENA_ID) && (count < (10000 * Config.RATE_DROP_AMOUNT_BY_ID.getOrDefault(Inventory.ADENA_ID, 1f))))
{
// 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 // If item hasn't be found in inventory, create new one
else
{ {
item.setOwnerId(process, getOwnerId(), actor, reference); item.setOwnerId(process, getOwnerId(), actor, reference);
item.setItemLocation(getBaseLocation()); item.setItemLocation(getBaseLocation());
@@ -275,9 +259,6 @@ public abstract class ItemContainer
// Add item in inventory // Add item in inventory
addItem(item); addItem(item);
// Updates database
item.updateDatabase();
} }
refreshWeight(); refreshWeight();
@@ -302,23 +283,8 @@ public abstract class ItemContainer
{ {
item.changeCount(process, count, actor, reference); item.changeCount(process, count, actor, reference);
item.setLastChange(ItemInstance.MODIFIED); item.setLastChange(ItemInstance.MODIFIED);
// Updates database
// If Adena drop rate is not present it will be x1.
if ((itemId == Inventory.ADENA_ID) && (count < (10000 * Config.RATE_DROP_AMOUNT_BY_ID.getOrDefault(Inventory.ADENA_ID, 1f))))
{
// 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 // If item hasn't be found in inventory, create new one
else
{ {
for (int i = 0; i < count; i++) for (int i = 0; i < count; i++)
{ {
@@ -337,8 +303,6 @@ public abstract class ItemContainer
// Add item in inventory // Add item in inventory
addItem(item); addItem(item);
// Updates database
item.updateDatabase();
// If stackable, end loop as entire count is included in 1 instance of item // If stackable, end loop as entire count is included in 1 instance of item
if (template.isStackable() || !Config.MULTIPLE_ITEM_DROP) if (template.isStackable() || !Config.MULTIPLE_ITEM_DROP)
@@ -374,8 +338,8 @@ public abstract class ItemContainer
{ {
return null; return null;
} }
ItemInstance targetitem = sourceitem.isStackable() ? target.getItemByItemId(sourceitem.getId()) : null;
ItemInstance targetitem = sourceitem.isStackable() ? target.getItemByItemId(sourceitem.getId()) : null;
synchronized (sourceitem) synchronized (sourceitem)
{ {
// check if this item still present in this container // check if this item still present in this container
@@ -403,8 +367,7 @@ public abstract class ItemContainer
{ {
sourceitem.changeCount(process, -count, actor, reference); sourceitem.changeCount(process, -count, actor, reference);
} }
else else // Otherwise destroy old item
// Otherwise destroy old item
{ {
removeItem(sourceitem); removeItem(sourceitem);
ItemTable.getInstance().destroyItem(process, sourceitem, actor, reference); ItemTable.getInstance().destroyItem(process, sourceitem, actor, reference);
@@ -414,8 +377,7 @@ public abstract class ItemContainer
{ {
targetitem.changeCount(process, count, actor, reference); targetitem.changeCount(process, count, actor, reference);
} }
else else // Otherwise add new item
// Otherwise add new item
{ {
targetitem = target.addItem(process, sourceitem.getId(), count, actor, reference); targetitem = target.addItem(process, sourceitem.getId(), count, actor, reference);
} }
@@ -468,12 +430,6 @@ public abstract class ItemContainer
{ {
item.changeCount(process, -count, actor, reference); item.changeCount(process, -count, actor, reference);
item.setLastChange(ItemInstance.MODIFIED); item.setLastChange(ItemInstance.MODIFIED);
// don't update often for untraced items
if ((process != null) || ((GameTimeController.getInstance().getGameTicks() % 10) == 0))
{
item.updateDatabase();
}
} }
else else
{ {

View File

@@ -915,6 +915,8 @@ public class ItemInstance extends WorldObject
{ {
LOGGER.log(Level.SEVERE, "Could not update atributes for item: " + this + " from DB:", e); LOGGER.log(Level.SEVERE, "Could not update atributes for item: " + this + " from DB:", e);
} }
// Notify to scripts.
EventDispatcher.getInstance().notifyEventAsync(new OnPlayerAugment(getActingPlayer(), this, augmentation, true), getItem()); EventDispatcher.getInstance().notifyEventAsync(new OnPlayerAugment(getActingPlayer(), this, augmentation, true), getItem());
return true; return true;
} }

View File

@@ -29,7 +29,6 @@ import java.util.logging.Logger;
import org.l2jmobius.Config; import org.l2jmobius.Config;
import org.l2jmobius.commons.database.DatabaseFactory; import org.l2jmobius.commons.database.DatabaseFactory;
import org.l2jmobius.gameserver.GameTimeController;
import org.l2jmobius.gameserver.datatables.ItemTable; import org.l2jmobius.gameserver.datatables.ItemTable;
import org.l2jmobius.gameserver.enums.ItemLocation; import org.l2jmobius.gameserver.enums.ItemLocation;
import org.l2jmobius.gameserver.model.World; import org.l2jmobius.gameserver.model.World;
@@ -251,23 +250,8 @@ public abstract class ItemContainer
ItemTable.getInstance().destroyItem(process, item, actor, reference); ItemTable.getInstance().destroyItem(process, item, actor, reference);
item.updateDatabase(); item.updateDatabase();
item = olditem; item = olditem;
// Updates database
if ((item.getId() == Inventory.ADENA_ID) && (count < (10000 * Config.RATE_DROP_AMOUNT_BY_ID.getOrDefault(Inventory.ADENA_ID, 1f))))
{
// 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 // If item hasn't be found in inventory, create new one
else
{ {
item.setOwnerId(process, getOwnerId(), actor, reference); item.setOwnerId(process, getOwnerId(), actor, reference);
item.setItemLocation(getBaseLocation()); item.setItemLocation(getBaseLocation());
@@ -275,9 +259,6 @@ public abstract class ItemContainer
// Add item in inventory // Add item in inventory
addItem(item); addItem(item);
// Updates database
item.updateDatabase();
} }
refreshWeight(); refreshWeight();
@@ -302,23 +283,8 @@ public abstract class ItemContainer
{ {
item.changeCount(process, count, actor, reference); item.changeCount(process, count, actor, reference);
item.setLastChange(ItemInstance.MODIFIED); item.setLastChange(ItemInstance.MODIFIED);
// Updates database
// If Adena drop rate is not present it will be x1.
if ((itemId == Inventory.ADENA_ID) && (count < (10000 * Config.RATE_DROP_AMOUNT_BY_ID.getOrDefault(Inventory.ADENA_ID, 1f))))
{
// 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 // If item hasn't be found in inventory, create new one
else
{ {
for (int i = 0; i < count; i++) for (int i = 0; i < count; i++)
{ {
@@ -337,8 +303,6 @@ public abstract class ItemContainer
// Add item in inventory // Add item in inventory
addItem(item); addItem(item);
// Updates database
item.updateDatabase();
// If stackable, end loop as entire count is included in 1 instance of item // If stackable, end loop as entire count is included in 1 instance of item
if (template.isStackable() || !Config.MULTIPLE_ITEM_DROP) if (template.isStackable() || !Config.MULTIPLE_ITEM_DROP)
@@ -374,8 +338,8 @@ public abstract class ItemContainer
{ {
return null; return null;
} }
ItemInstance targetitem = sourceitem.isStackable() ? target.getItemByItemId(sourceitem.getId()) : null;
ItemInstance targetitem = sourceitem.isStackable() ? target.getItemByItemId(sourceitem.getId()) : null;
synchronized (sourceitem) synchronized (sourceitem)
{ {
// check if this item still present in this container // check if this item still present in this container
@@ -403,8 +367,7 @@ public abstract class ItemContainer
{ {
sourceitem.changeCount(process, -count, actor, reference); sourceitem.changeCount(process, -count, actor, reference);
} }
else else // Otherwise destroy old item
// Otherwise destroy old item
{ {
removeItem(sourceitem); removeItem(sourceitem);
ItemTable.getInstance().destroyItem(process, sourceitem, actor, reference); ItemTable.getInstance().destroyItem(process, sourceitem, actor, reference);
@@ -414,8 +377,7 @@ public abstract class ItemContainer
{ {
targetitem.changeCount(process, count, actor, reference); targetitem.changeCount(process, count, actor, reference);
} }
else else // Otherwise add new item
// Otherwise add new item
{ {
targetitem = target.addItem(process, sourceitem.getId(), count, actor, reference); targetitem = target.addItem(process, sourceitem.getId(), count, actor, reference);
} }
@@ -468,12 +430,6 @@ public abstract class ItemContainer
{ {
item.changeCount(process, -count, actor, reference); item.changeCount(process, -count, actor, reference);
item.setLastChange(ItemInstance.MODIFIED); item.setLastChange(ItemInstance.MODIFIED);
// don't update often for untraced items
if ((process != null) || ((GameTimeController.getInstance().getGameTicks() % 10) == 0))
{
item.updateDatabase();
}
} }
else else
{ {

View File

@@ -915,6 +915,8 @@ public class ItemInstance extends WorldObject
{ {
LOGGER.log(Level.SEVERE, "Could not update atributes for item: " + this + " from DB:", e); LOGGER.log(Level.SEVERE, "Could not update atributes for item: " + this + " from DB:", e);
} }
// Notify to scripts.
EventDispatcher.getInstance().notifyEventAsync(new OnPlayerAugment(getActingPlayer(), this, augmentation, true), getItem()); EventDispatcher.getInstance().notifyEventAsync(new OnPlayerAugment(getActingPlayer(), this, augmentation, true), getItem());
return true; return true;
} }

View File

@@ -30,7 +30,6 @@ import java.util.stream.Collectors;
import org.l2jmobius.Config; import org.l2jmobius.Config;
import org.l2jmobius.commons.database.DatabaseFactory; import org.l2jmobius.commons.database.DatabaseFactory;
import org.l2jmobius.gameserver.GameTimeController;
import org.l2jmobius.gameserver.datatables.ItemTable; import org.l2jmobius.gameserver.datatables.ItemTable;
import org.l2jmobius.gameserver.enums.ItemLocation; import org.l2jmobius.gameserver.enums.ItemLocation;
import org.l2jmobius.gameserver.model.World; import org.l2jmobius.gameserver.model.World;
@@ -210,24 +209,8 @@ public abstract class ItemContainer
ItemTable.getInstance().destroyItem(process, item, actor, reference); ItemTable.getInstance().destroyItem(process, item, actor, reference);
item.updateDatabase(); item.updateDatabase();
item = olditem; 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 // If item hasn't be found in inventory, create new one
else
{ {
item.setOwnerId(process, getOwnerId(), actor, reference); item.setOwnerId(process, getOwnerId(), actor, reference);
item.setItemLocation(getBaseLocation()); item.setItemLocation(getBaseLocation());
@@ -235,9 +218,6 @@ public abstract class ItemContainer
// Add item in inventory // Add item in inventory
addItem(item); addItem(item);
// Updates database
item.updateDatabase();
} }
refreshWeight(); refreshWeight();
@@ -262,24 +242,8 @@ public abstract class ItemContainer
{ {
item.changeCount(process, count, actor, reference); item.changeCount(process, count, actor, reference);
item.setLastChange(ItemInstance.MODIFIED); 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 // If item hasn't be found in inventory, create new one
else
{ {
for (int i = 0; i < count; i++) for (int i = 0; i < count; i++)
{ {
@@ -297,8 +261,6 @@ public abstract class ItemContainer
// Add item in inventory // Add item in inventory
addItem(item); addItem(item);
// Updates database
item.updateDatabase();
// If stackable, end loop as entire count is included in 1 instance of item // If stackable, end loop as entire count is included in 1 instance of item
if (template.isStackable() || !Config.MULTIPLE_ITEM_DROP) if (template.isStackable() || !Config.MULTIPLE_ITEM_DROP)
@@ -334,8 +296,8 @@ public abstract class ItemContainer
{ {
return null; return null;
} }
ItemInstance targetitem = sourceitem.isStackable() ? target.getItemByItemId(sourceitem.getId()) : null;
ItemInstance targetitem = sourceitem.isStackable() ? target.getItemByItemId(sourceitem.getId()) : null;
synchronized (sourceitem) synchronized (sourceitem)
{ {
// check if this item still present in this container // check if this item still present in this container
@@ -363,8 +325,7 @@ public abstract class ItemContainer
{ {
sourceitem.changeCount(process, -count, actor, reference); sourceitem.changeCount(process, -count, actor, reference);
} }
else else // Otherwise destroy old item
// Otherwise destroy old item
{ {
removeItem(sourceitem); removeItem(sourceitem);
ItemTable.getInstance().destroyItem(process, sourceitem, actor, reference); ItemTable.getInstance().destroyItem(process, sourceitem, actor, reference);
@@ -374,8 +335,7 @@ public abstract class ItemContainer
{ {
targetitem.changeCount(process, count, actor, reference); targetitem.changeCount(process, count, actor, reference);
} }
else else // Otherwise add new item
// Otherwise add new item
{ {
targetitem = target.addItem(process, sourceitem.getId(), count, actor, reference); 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 = ItemTable.getInstance().createItem(process, item.getId(), count, actor, reference);
item.setOwnerId(getOwnerId()); item.setOwnerId(getOwnerId());
} }
item.setItemLocation(newLocation); item.setItemLocation(newLocation);
item.updateDatabase(true); item.updateDatabase(true);
} }
@@ -497,13 +458,6 @@ public abstract class ItemContainer
{ {
item.changeCount(process, -count, actor, reference); item.changeCount(process, -count, actor, reference);
item.setLastChange(ItemInstance.MODIFIED); item.setLastChange(ItemInstance.MODIFIED);
// don't update often for untraced items
if ((process != null) || ((GameTimeController.getInstance().getGameTicks() % 10) == 0))
{
item.updateDatabase();
}
refreshWeight(); refreshWeight();
} }
else else

View File

@@ -970,6 +970,8 @@ public class ItemInstance extends WorldObject
{ {
updateItemOptions(); updateItemOptions();
} }
// Notify to scripts.
EventDispatcher.getInstance().notifyEventAsync(new OnPlayerAugment(getActingPlayer(), this, augmentation, true), getItem()); EventDispatcher.getInstance().notifyEventAsync(new OnPlayerAugment(getActingPlayer(), this, augmentation, true), getItem());
return true; return true;
} }

View File

@@ -30,7 +30,6 @@ import java.util.stream.Collectors;
import org.l2jmobius.Config; import org.l2jmobius.Config;
import org.l2jmobius.commons.database.DatabaseFactory; import org.l2jmobius.commons.database.DatabaseFactory;
import org.l2jmobius.gameserver.GameTimeController;
import org.l2jmobius.gameserver.datatables.ItemTable; import org.l2jmobius.gameserver.datatables.ItemTable;
import org.l2jmobius.gameserver.enums.ItemLocation; import org.l2jmobius.gameserver.enums.ItemLocation;
import org.l2jmobius.gameserver.model.World; import org.l2jmobius.gameserver.model.World;
@@ -210,24 +209,8 @@ public abstract class ItemContainer
ItemTable.getInstance().destroyItem(process, item, actor, reference); ItemTable.getInstance().destroyItem(process, item, actor, reference);
item.updateDatabase(); item.updateDatabase();
item = olditem; 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 // If item hasn't be found in inventory, create new one
else
{ {
item.setOwnerId(process, getOwnerId(), actor, reference); item.setOwnerId(process, getOwnerId(), actor, reference);
item.setItemLocation(getBaseLocation()); item.setItemLocation(getBaseLocation());
@@ -235,9 +218,6 @@ public abstract class ItemContainer
// Add item in inventory // Add item in inventory
addItem(item); addItem(item);
// Updates database
item.updateDatabase();
} }
refreshWeight(); refreshWeight();
@@ -262,24 +242,8 @@ public abstract class ItemContainer
{ {
item.changeCount(process, count, actor, reference); item.changeCount(process, count, actor, reference);
item.setLastChange(ItemInstance.MODIFIED); 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 // If item hasn't be found in inventory, create new one
else
{ {
for (int i = 0; i < count; i++) for (int i = 0; i < count; i++)
{ {
@@ -297,8 +261,6 @@ public abstract class ItemContainer
// Add item in inventory // Add item in inventory
addItem(item); addItem(item);
// Updates database
item.updateDatabase();
// If stackable, end loop as entire count is included in 1 instance of item // If stackable, end loop as entire count is included in 1 instance of item
if (template.isStackable() || !Config.MULTIPLE_ITEM_DROP) if (template.isStackable() || !Config.MULTIPLE_ITEM_DROP)
@@ -334,8 +296,8 @@ public abstract class ItemContainer
{ {
return null; return null;
} }
ItemInstance targetitem = sourceitem.isStackable() ? target.getItemByItemId(sourceitem.getId()) : null;
ItemInstance targetitem = sourceitem.isStackable() ? target.getItemByItemId(sourceitem.getId()) : null;
synchronized (sourceitem) synchronized (sourceitem)
{ {
// check if this item still present in this container // check if this item still present in this container
@@ -363,8 +325,7 @@ public abstract class ItemContainer
{ {
sourceitem.changeCount(process, -count, actor, reference); sourceitem.changeCount(process, -count, actor, reference);
} }
else else // Otherwise destroy old item
// Otherwise destroy old item
{ {
removeItem(sourceitem); removeItem(sourceitem);
ItemTable.getInstance().destroyItem(process, sourceitem, actor, reference); ItemTable.getInstance().destroyItem(process, sourceitem, actor, reference);
@@ -374,8 +335,7 @@ public abstract class ItemContainer
{ {
targetitem.changeCount(process, count, actor, reference); targetitem.changeCount(process, count, actor, reference);
} }
else else // Otherwise add new item
// Otherwise add new item
{ {
targetitem = target.addItem(process, sourceitem.getId(), count, actor, reference); 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 = ItemTable.getInstance().createItem(process, item.getId(), count, actor, reference);
item.setOwnerId(getOwnerId()); item.setOwnerId(getOwnerId());
} }
item.setItemLocation(newLocation); item.setItemLocation(newLocation);
item.updateDatabase(true); item.updateDatabase(true);
} }
@@ -497,13 +458,6 @@ public abstract class ItemContainer
{ {
item.changeCount(process, -count, actor, reference); item.changeCount(process, -count, actor, reference);
item.setLastChange(ItemInstance.MODIFIED); item.setLastChange(ItemInstance.MODIFIED);
// don't update often for untraced items
if ((process != null) || ((GameTimeController.getInstance().getGameTicks() % 10) == 0))
{
item.updateDatabase();
}
refreshWeight(); refreshWeight();
} }
else else

View File

@@ -970,6 +970,8 @@ public class ItemInstance extends WorldObject
{ {
updateItemOptions(); updateItemOptions();
} }
// Notify to scripts.
EventDispatcher.getInstance().notifyEventAsync(new OnPlayerAugment(getActingPlayer(), this, augmentation, true), getItem()); EventDispatcher.getInstance().notifyEventAsync(new OnPlayerAugment(getActingPlayer(), this, augmentation, true), getItem());
return true; return true;
} }

View File

@@ -30,7 +30,6 @@ import java.util.stream.Collectors;
import org.l2jmobius.Config; import org.l2jmobius.Config;
import org.l2jmobius.commons.database.DatabaseFactory; import org.l2jmobius.commons.database.DatabaseFactory;
import org.l2jmobius.gameserver.GameTimeController;
import org.l2jmobius.gameserver.datatables.ItemTable; import org.l2jmobius.gameserver.datatables.ItemTable;
import org.l2jmobius.gameserver.enums.ItemLocation; import org.l2jmobius.gameserver.enums.ItemLocation;
import org.l2jmobius.gameserver.model.World; import org.l2jmobius.gameserver.model.World;
@@ -210,24 +209,8 @@ public abstract class ItemContainer
ItemTable.getInstance().destroyItem(process, item, actor, reference); ItemTable.getInstance().destroyItem(process, item, actor, reference);
item.updateDatabase(); item.updateDatabase();
item = olditem; 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 // If item hasn't be found in inventory, create new one
else
{ {
item.setOwnerId(process, getOwnerId(), actor, reference); item.setOwnerId(process, getOwnerId(), actor, reference);
item.setItemLocation(getBaseLocation()); item.setItemLocation(getBaseLocation());
@@ -235,9 +218,6 @@ public abstract class ItemContainer
// Add item in inventory // Add item in inventory
addItem(item); addItem(item);
// Updates database
item.updateDatabase();
} }
refreshWeight(); refreshWeight();
@@ -262,24 +242,8 @@ public abstract class ItemContainer
{ {
item.changeCount(process, count, actor, reference); item.changeCount(process, count, actor, reference);
item.setLastChange(ItemInstance.MODIFIED); 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 // If item hasn't be found in inventory, create new one
else
{ {
for (int i = 0; i < count; i++) for (int i = 0; i < count; i++)
{ {
@@ -297,8 +261,6 @@ public abstract class ItemContainer
// Add item in inventory // Add item in inventory
addItem(item); addItem(item);
// Updates database
item.updateDatabase();
// If stackable, end loop as entire count is included in 1 instance of item // If stackable, end loop as entire count is included in 1 instance of item
if (template.isStackable() || !Config.MULTIPLE_ITEM_DROP) if (template.isStackable() || !Config.MULTIPLE_ITEM_DROP)
@@ -334,8 +296,8 @@ public abstract class ItemContainer
{ {
return null; return null;
} }
ItemInstance targetitem = sourceitem.isStackable() ? target.getItemByItemId(sourceitem.getId()) : null;
ItemInstance targetitem = sourceitem.isStackable() ? target.getItemByItemId(sourceitem.getId()) : null;
synchronized (sourceitem) synchronized (sourceitem)
{ {
// check if this item still present in this container // check if this item still present in this container
@@ -363,8 +325,7 @@ public abstract class ItemContainer
{ {
sourceitem.changeCount(process, -count, actor, reference); sourceitem.changeCount(process, -count, actor, reference);
} }
else else // Otherwise destroy old item
// Otherwise destroy old item
{ {
removeItem(sourceitem); removeItem(sourceitem);
ItemTable.getInstance().destroyItem(process, sourceitem, actor, reference); ItemTable.getInstance().destroyItem(process, sourceitem, actor, reference);
@@ -374,8 +335,7 @@ public abstract class ItemContainer
{ {
targetitem.changeCount(process, count, actor, reference); targetitem.changeCount(process, count, actor, reference);
} }
else else // Otherwise add new item
// Otherwise add new item
{ {
targetitem = target.addItem(process, sourceitem.getId(), count, actor, reference); 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 = ItemTable.getInstance().createItem(process, item.getId(), count, actor, reference);
item.setOwnerId(getOwnerId()); item.setOwnerId(getOwnerId());
} }
item.setItemLocation(newLocation); item.setItemLocation(newLocation);
item.updateDatabase(true); item.updateDatabase(true);
} }
@@ -497,13 +458,6 @@ public abstract class ItemContainer
{ {
item.changeCount(process, -count, actor, reference); item.changeCount(process, -count, actor, reference);
item.setLastChange(ItemInstance.MODIFIED); item.setLastChange(ItemInstance.MODIFIED);
// don't update often for untraced items
if ((process != null) || ((GameTimeController.getInstance().getGameTicks() % 10) == 0))
{
item.updateDatabase();
}
refreshWeight(); refreshWeight();
} }
else else

View File

@@ -970,6 +970,8 @@ public class ItemInstance extends WorldObject
{ {
updateItemOptions(); updateItemOptions();
} }
// Notify to scripts.
EventDispatcher.getInstance().notifyEventAsync(new OnPlayerAugment(getActingPlayer(), this, augmentation, true), getItem()); EventDispatcher.getInstance().notifyEventAsync(new OnPlayerAugment(getActingPlayer(), this, augmentation, true), getItem());
return true; return true;
} }

View File

@@ -30,7 +30,6 @@ import java.util.stream.Collectors;
import org.l2jmobius.Config; import org.l2jmobius.Config;
import org.l2jmobius.commons.database.DatabaseFactory; import org.l2jmobius.commons.database.DatabaseFactory;
import org.l2jmobius.gameserver.GameTimeController;
import org.l2jmobius.gameserver.datatables.ItemTable; import org.l2jmobius.gameserver.datatables.ItemTable;
import org.l2jmobius.gameserver.enums.ItemLocation; import org.l2jmobius.gameserver.enums.ItemLocation;
import org.l2jmobius.gameserver.model.World; import org.l2jmobius.gameserver.model.World;
@@ -210,24 +209,8 @@ public abstract class ItemContainer
ItemTable.getInstance().destroyItem(process, item, actor, reference); ItemTable.getInstance().destroyItem(process, item, actor, reference);
item.updateDatabase(); item.updateDatabase();
item = olditem; 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 // If item hasn't be found in inventory, create new one
else
{ {
item.setOwnerId(process, getOwnerId(), actor, reference); item.setOwnerId(process, getOwnerId(), actor, reference);
item.setItemLocation(getBaseLocation()); item.setItemLocation(getBaseLocation());
@@ -235,9 +218,6 @@ public abstract class ItemContainer
// Add item in inventory // Add item in inventory
addItem(item); addItem(item);
// Updates database
item.updateDatabase();
} }
refreshWeight(); refreshWeight();
@@ -262,24 +242,8 @@ public abstract class ItemContainer
{ {
item.changeCount(process, count, actor, reference); item.changeCount(process, count, actor, reference);
item.setLastChange(ItemInstance.MODIFIED); 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 // If item hasn't be found in inventory, create new one
else
{ {
for (int i = 0; i < count; i++) for (int i = 0; i < count; i++)
{ {
@@ -297,8 +261,6 @@ public abstract class ItemContainer
// Add item in inventory // Add item in inventory
addItem(item); addItem(item);
// Updates database
item.updateDatabase();
// If stackable, end loop as entire count is included in 1 instance of item // If stackable, end loop as entire count is included in 1 instance of item
if (template.isStackable() || !Config.MULTIPLE_ITEM_DROP) if (template.isStackable() || !Config.MULTIPLE_ITEM_DROP)
@@ -334,8 +296,8 @@ public abstract class ItemContainer
{ {
return null; return null;
} }
ItemInstance targetitem = sourceitem.isStackable() ? target.getItemByItemId(sourceitem.getId()) : null;
ItemInstance targetitem = sourceitem.isStackable() ? target.getItemByItemId(sourceitem.getId()) : null;
synchronized (sourceitem) synchronized (sourceitem)
{ {
// check if this item still present in this container // check if this item still present in this container
@@ -363,8 +325,7 @@ public abstract class ItemContainer
{ {
sourceitem.changeCount(process, -count, actor, reference); sourceitem.changeCount(process, -count, actor, reference);
} }
else else // Otherwise destroy old item
// Otherwise destroy old item
{ {
removeItem(sourceitem); removeItem(sourceitem);
ItemTable.getInstance().destroyItem(process, sourceitem, actor, reference); ItemTable.getInstance().destroyItem(process, sourceitem, actor, reference);
@@ -374,8 +335,7 @@ public abstract class ItemContainer
{ {
targetitem.changeCount(process, count, actor, reference); targetitem.changeCount(process, count, actor, reference);
} }
else else // Otherwise add new item
// Otherwise add new item
{ {
targetitem = target.addItem(process, sourceitem.getId(), count, actor, reference); 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 = ItemTable.getInstance().createItem(process, item.getId(), count, actor, reference);
item.setOwnerId(getOwnerId()); item.setOwnerId(getOwnerId());
} }
item.setItemLocation(newLocation); item.setItemLocation(newLocation);
item.updateDatabase(true); item.updateDatabase(true);
} }
@@ -497,13 +458,6 @@ public abstract class ItemContainer
{ {
item.changeCount(process, -count, actor, reference); item.changeCount(process, -count, actor, reference);
item.setLastChange(ItemInstance.MODIFIED); item.setLastChange(ItemInstance.MODIFIED);
// don't update often for untraced items
if ((process != null) || ((GameTimeController.getInstance().getGameTicks() % 10) == 0))
{
item.updateDatabase();
}
refreshWeight(); refreshWeight();
} }
else else

View File

@@ -970,6 +970,8 @@ public class ItemInstance extends WorldObject
{ {
updateItemOptions(); updateItemOptions();
} }
// Notify to scripts.
EventDispatcher.getInstance().notifyEventAsync(new OnPlayerAugment(getActingPlayer(), this, augmentation, true), getItem()); EventDispatcher.getInstance().notifyEventAsync(new OnPlayerAugment(getActingPlayer(), this, augmentation, true), getItem());
return true; return true;
} }

View File

@@ -30,7 +30,6 @@ import java.util.stream.Collectors;
import org.l2jmobius.Config; import org.l2jmobius.Config;
import org.l2jmobius.commons.database.DatabaseFactory; import org.l2jmobius.commons.database.DatabaseFactory;
import org.l2jmobius.gameserver.GameTimeController;
import org.l2jmobius.gameserver.datatables.ItemTable; import org.l2jmobius.gameserver.datatables.ItemTable;
import org.l2jmobius.gameserver.enums.ItemLocation; import org.l2jmobius.gameserver.enums.ItemLocation;
import org.l2jmobius.gameserver.model.World; import org.l2jmobius.gameserver.model.World;
@@ -210,24 +209,8 @@ public abstract class ItemContainer
ItemTable.getInstance().destroyItem(process, item, actor, reference); ItemTable.getInstance().destroyItem(process, item, actor, reference);
item.updateDatabase(); item.updateDatabase();
item = olditem; 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 // If item hasn't be found in inventory, create new one
else
{ {
item.setOwnerId(process, getOwnerId(), actor, reference); item.setOwnerId(process, getOwnerId(), actor, reference);
item.setItemLocation(getBaseLocation()); item.setItemLocation(getBaseLocation());
@@ -235,9 +218,6 @@ public abstract class ItemContainer
// Add item in inventory // Add item in inventory
addItem(item); addItem(item);
// Updates database
item.updateDatabase();
} }
refreshWeight(); refreshWeight();
@@ -262,24 +242,8 @@ public abstract class ItemContainer
{ {
item.changeCount(process, count, actor, reference); item.changeCount(process, count, actor, reference);
item.setLastChange(ItemInstance.MODIFIED); 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 // If item hasn't be found in inventory, create new one
else
{ {
for (int i = 0; i < count; i++) for (int i = 0; i < count; i++)
{ {
@@ -297,8 +261,6 @@ public abstract class ItemContainer
// Add item in inventory // Add item in inventory
addItem(item); addItem(item);
// Updates database
item.updateDatabase();
// If stackable, end loop as entire count is included in 1 instance of item // If stackable, end loop as entire count is included in 1 instance of item
if (template.isStackable() || !Config.MULTIPLE_ITEM_DROP) if (template.isStackable() || !Config.MULTIPLE_ITEM_DROP)
@@ -334,8 +296,8 @@ public abstract class ItemContainer
{ {
return null; return null;
} }
ItemInstance targetitem = sourceitem.isStackable() ? target.getItemByItemId(sourceitem.getId()) : null;
ItemInstance targetitem = sourceitem.isStackable() ? target.getItemByItemId(sourceitem.getId()) : null;
synchronized (sourceitem) synchronized (sourceitem)
{ {
// check if this item still present in this container // check if this item still present in this container
@@ -363,8 +325,7 @@ public abstract class ItemContainer
{ {
sourceitem.changeCount(process, -count, actor, reference); sourceitem.changeCount(process, -count, actor, reference);
} }
else else // Otherwise destroy old item
// Otherwise destroy old item
{ {
removeItem(sourceitem); removeItem(sourceitem);
ItemTable.getInstance().destroyItem(process, sourceitem, actor, reference); ItemTable.getInstance().destroyItem(process, sourceitem, actor, reference);
@@ -374,8 +335,7 @@ public abstract class ItemContainer
{ {
targetitem.changeCount(process, count, actor, reference); targetitem.changeCount(process, count, actor, reference);
} }
else else // Otherwise add new item
// Otherwise add new item
{ {
targetitem = target.addItem(process, sourceitem.getId(), count, actor, reference); 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 = ItemTable.getInstance().createItem(process, item.getId(), count, actor, reference);
item.setOwnerId(getOwnerId()); item.setOwnerId(getOwnerId());
} }
item.setItemLocation(newLocation); item.setItemLocation(newLocation);
item.updateDatabase(true); item.updateDatabase(true);
} }
@@ -497,13 +458,6 @@ public abstract class ItemContainer
{ {
item.changeCount(process, -count, actor, reference); item.changeCount(process, -count, actor, reference);
item.setLastChange(ItemInstance.MODIFIED); item.setLastChange(ItemInstance.MODIFIED);
// don't update often for untraced items
if ((process != null) || ((GameTimeController.getInstance().getGameTicks() % 10) == 0))
{
item.updateDatabase();
}
refreshWeight(); refreshWeight();
} }
else else

View File

@@ -970,6 +970,8 @@ public class ItemInstance extends WorldObject
{ {
updateItemOptions(); updateItemOptions();
} }
// Notify to scripts.
EventDispatcher.getInstance().notifyEventAsync(new OnPlayerAugment(getActingPlayer(), this, augmentation, true), getItem()); EventDispatcher.getInstance().notifyEventAsync(new OnPlayerAugment(getActingPlayer(), this, augmentation, true), getItem());
return true; return true;
} }

View File

@@ -30,7 +30,6 @@ import java.util.stream.Collectors;
import org.l2jmobius.Config; import org.l2jmobius.Config;
import org.l2jmobius.commons.database.DatabaseFactory; import org.l2jmobius.commons.database.DatabaseFactory;
import org.l2jmobius.gameserver.GameTimeController;
import org.l2jmobius.gameserver.datatables.ItemTable; import org.l2jmobius.gameserver.datatables.ItemTable;
import org.l2jmobius.gameserver.enums.ItemLocation; import org.l2jmobius.gameserver.enums.ItemLocation;
import org.l2jmobius.gameserver.model.World; import org.l2jmobius.gameserver.model.World;
@@ -210,24 +209,8 @@ public abstract class ItemContainer
ItemTable.getInstance().destroyItem(process, item, actor, reference); ItemTable.getInstance().destroyItem(process, item, actor, reference);
item.updateDatabase(); item.updateDatabase();
item = olditem; 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 // If item hasn't be found in inventory, create new one
else
{ {
item.setOwnerId(process, getOwnerId(), actor, reference); item.setOwnerId(process, getOwnerId(), actor, reference);
item.setItemLocation(getBaseLocation()); item.setItemLocation(getBaseLocation());
@@ -235,9 +218,6 @@ public abstract class ItemContainer
// Add item in inventory // Add item in inventory
addItem(item); addItem(item);
// Updates database
item.updateDatabase();
} }
refreshWeight(); refreshWeight();
@@ -262,24 +242,8 @@ public abstract class ItemContainer
{ {
item.changeCount(process, count, actor, reference); item.changeCount(process, count, actor, reference);
item.setLastChange(ItemInstance.MODIFIED); 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 // If item hasn't be found in inventory, create new one
else
{ {
for (int i = 0; i < count; i++) for (int i = 0; i < count; i++)
{ {
@@ -297,8 +261,6 @@ public abstract class ItemContainer
// Add item in inventory // Add item in inventory
addItem(item); addItem(item);
// Updates database
item.updateDatabase();
// If stackable, end loop as entire count is included in 1 instance of item // If stackable, end loop as entire count is included in 1 instance of item
if (template.isStackable() || !Config.MULTIPLE_ITEM_DROP) if (template.isStackable() || !Config.MULTIPLE_ITEM_DROP)
@@ -334,8 +296,8 @@ public abstract class ItemContainer
{ {
return null; return null;
} }
ItemInstance targetitem = sourceitem.isStackable() ? target.getItemByItemId(sourceitem.getId()) : null;
ItemInstance targetitem = sourceitem.isStackable() ? target.getItemByItemId(sourceitem.getId()) : null;
synchronized (sourceitem) synchronized (sourceitem)
{ {
// check if this item still present in this container // check if this item still present in this container
@@ -363,8 +325,7 @@ public abstract class ItemContainer
{ {
sourceitem.changeCount(process, -count, actor, reference); sourceitem.changeCount(process, -count, actor, reference);
} }
else else // Otherwise destroy old item
// Otherwise destroy old item
{ {
removeItem(sourceitem); removeItem(sourceitem);
ItemTable.getInstance().destroyItem(process, sourceitem, actor, reference); ItemTable.getInstance().destroyItem(process, sourceitem, actor, reference);
@@ -374,8 +335,7 @@ public abstract class ItemContainer
{ {
targetitem.changeCount(process, count, actor, reference); targetitem.changeCount(process, count, actor, reference);
} }
else else // Otherwise add new item
// Otherwise add new item
{ {
targetitem = target.addItem(process, sourceitem.getId(), count, actor, reference); 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 = ItemTable.getInstance().createItem(process, item.getId(), count, actor, reference);
item.setOwnerId(getOwnerId()); item.setOwnerId(getOwnerId());
} }
item.setItemLocation(newLocation); item.setItemLocation(newLocation);
item.updateDatabase(true); item.updateDatabase(true);
} }
@@ -497,13 +458,6 @@ public abstract class ItemContainer
{ {
item.changeCount(process, -count, actor, reference); item.changeCount(process, -count, actor, reference);
item.setLastChange(ItemInstance.MODIFIED); item.setLastChange(ItemInstance.MODIFIED);
// don't update often for untraced items
if ((process != null) || ((GameTimeController.getInstance().getGameTicks() % 10) == 0))
{
item.updateDatabase();
}
refreshWeight(); refreshWeight();
} }
else else

View File

@@ -970,6 +970,8 @@ public class ItemInstance extends WorldObject
{ {
updateItemOptions(); updateItemOptions();
} }
// Notify to scripts.
EventDispatcher.getInstance().notifyEventAsync(new OnPlayerAugment(getActingPlayer(), this, augmentation, true), getItem()); EventDispatcher.getInstance().notifyEventAsync(new OnPlayerAugment(getActingPlayer(), this, augmentation, true), getItem());
return true; return true;
} }

View File

@@ -30,7 +30,6 @@ import java.util.stream.Collectors;
import org.l2jmobius.Config; import org.l2jmobius.Config;
import org.l2jmobius.commons.database.DatabaseFactory; import org.l2jmobius.commons.database.DatabaseFactory;
import org.l2jmobius.gameserver.GameTimeController;
import org.l2jmobius.gameserver.datatables.ItemTable; import org.l2jmobius.gameserver.datatables.ItemTable;
import org.l2jmobius.gameserver.enums.ItemLocation; import org.l2jmobius.gameserver.enums.ItemLocation;
import org.l2jmobius.gameserver.model.World; import org.l2jmobius.gameserver.model.World;
@@ -210,24 +209,8 @@ public abstract class ItemContainer
ItemTable.getInstance().destroyItem(process, item, actor, reference); ItemTable.getInstance().destroyItem(process, item, actor, reference);
item.updateDatabase(); item.updateDatabase();
item = olditem; 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 // If item hasn't be found in inventory, create new one
else
{ {
item.setOwnerId(process, getOwnerId(), actor, reference); item.setOwnerId(process, getOwnerId(), actor, reference);
item.setItemLocation(getBaseLocation()); item.setItemLocation(getBaseLocation());
@@ -235,9 +218,6 @@ public abstract class ItemContainer
// Add item in inventory // Add item in inventory
addItem(item); addItem(item);
// Updates database
item.updateDatabase();
} }
refreshWeight(); refreshWeight();
@@ -262,24 +242,8 @@ public abstract class ItemContainer
{ {
item.changeCount(process, count, actor, reference); item.changeCount(process, count, actor, reference);
item.setLastChange(ItemInstance.MODIFIED); 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 // If item hasn't be found in inventory, create new one
else
{ {
for (int i = 0; i < count; i++) for (int i = 0; i < count; i++)
{ {
@@ -297,8 +261,6 @@ public abstract class ItemContainer
// Add item in inventory // Add item in inventory
addItem(item); addItem(item);
// Updates database
item.updateDatabase();
// If stackable, end loop as entire count is included in 1 instance of item // If stackable, end loop as entire count is included in 1 instance of item
if (template.isStackable() || !Config.MULTIPLE_ITEM_DROP) if (template.isStackable() || !Config.MULTIPLE_ITEM_DROP)
@@ -334,8 +296,8 @@ public abstract class ItemContainer
{ {
return null; return null;
} }
ItemInstance targetitem = sourceitem.isStackable() ? target.getItemByItemId(sourceitem.getId()) : null;
ItemInstance targetitem = sourceitem.isStackable() ? target.getItemByItemId(sourceitem.getId()) : null;
synchronized (sourceitem) synchronized (sourceitem)
{ {
// check if this item still present in this container // check if this item still present in this container
@@ -363,8 +325,7 @@ public abstract class ItemContainer
{ {
sourceitem.changeCount(process, -count, actor, reference); sourceitem.changeCount(process, -count, actor, reference);
} }
else else // Otherwise destroy old item
// Otherwise destroy old item
{ {
removeItem(sourceitem); removeItem(sourceitem);
ItemTable.getInstance().destroyItem(process, sourceitem, actor, reference); ItemTable.getInstance().destroyItem(process, sourceitem, actor, reference);
@@ -374,8 +335,7 @@ public abstract class ItemContainer
{ {
targetitem.changeCount(process, count, actor, reference); targetitem.changeCount(process, count, actor, reference);
} }
else else // Otherwise add new item
// Otherwise add new item
{ {
targetitem = target.addItem(process, sourceitem.getId(), count, actor, reference); 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 = ItemTable.getInstance().createItem(process, item.getId(), count, actor, reference);
item.setOwnerId(getOwnerId()); item.setOwnerId(getOwnerId());
} }
item.setItemLocation(newLocation); item.setItemLocation(newLocation);
item.updateDatabase(true); item.updateDatabase(true);
} }
@@ -497,13 +458,6 @@ public abstract class ItemContainer
{ {
item.changeCount(process, -count, actor, reference); item.changeCount(process, -count, actor, reference);
item.setLastChange(ItemInstance.MODIFIED); item.setLastChange(ItemInstance.MODIFIED);
// don't update often for untraced items
if ((process != null) || ((GameTimeController.getInstance().getGameTicks() % 10) == 0))
{
item.updateDatabase();
}
refreshWeight(); refreshWeight();
} }
else else

View File

@@ -970,6 +970,8 @@ public class ItemInstance extends WorldObject
{ {
updateItemOptions(); updateItemOptions();
} }
// Notify to scripts.
EventDispatcher.getInstance().notifyEventAsync(new OnPlayerAugment(getActingPlayer(), this, augmentation, true), getItem()); EventDispatcher.getInstance().notifyEventAsync(new OnPlayerAugment(getActingPlayer(), this, augmentation, true), getItem());
return true; return true;
} }