diff --git a/src/resources/commands/callbacks/QaToolCmdCallback.java b/src/resources/commands/callbacks/QaToolCmdCallback.java index b6e738e4c..bab8ffecf 100644 --- a/src/resources/commands/callbacks/QaToolCmdCallback.java +++ b/src/resources/commands/callbacks/QaToolCmdCallback.java @@ -158,6 +158,11 @@ public class QaToolCmdCallback implements ICmdCallback { public void containerFull() { new ChatBroadcastIntent(player, "@system_msg:give_item_failure").broadcast(); } + + @Override + public boolean isIgnoreVolume() { + return false; + } }, itemName).broadcast(); } diff --git a/src/services/experience/SkillTemplateService.java b/src/services/experience/SkillTemplateService.java index e83e2442e..79afe36de 100644 --- a/src/services/experience/SkillTemplateService.java +++ b/src/services/experience/SkillTemplateService.java @@ -38,13 +38,10 @@ import intents.object.CreateStaticItemIntent; import intents.object.ObjectCreatedIntent; import java.util.ArrayList; import java.util.Collection; -import java.util.logging.Level; -import java.util.logging.Logger; import network.packets.swg.zone.PlayClientEffectObjectMessage; import network.packets.swg.zone.PlayMusicMessage; import network.packets.swg.zone.object_controller.ShowFlyText; import network.packets.swg.zone.object_controller.ShowFlyText.Scale; -import network.packets.swg.zone.object_controller.ShowLootBox; import resources.Race; import resources.client_info.ClientFactory; import resources.client_info.visitors.DatatableData; @@ -59,7 +56,7 @@ import resources.player.Player; import resources.rewards.RoadmapReward; import resources.server_info.Log; import services.objects.ObjectCreator; -import services.objects.StaticItemService.ObjectCreationHandler; +import services.objects.StaticItemService; /** * This is a service that listens for {@link LevelChangedIntent} and grants @@ -177,30 +174,10 @@ public final class SkillTemplateService extends Service { staticItems.add(item); } } - - new CreateStaticItemIntent(creatureObject, inventory, new ObjectCreationHandler() { - @Override - public void success(SWGObject[] createdObjects) { - long[] objectIds = new long[createdObjects.length]; - - for (int i = 0; i < objectIds.length; i++) { - objectIds[i] = createdObjects[i].getObjectId(); - } - - try { - Thread.sleep(200); - creatureObject.sendSelf(new ShowLootBox(creatureObject.getObjectId(), objectIds)); - } catch (InterruptedException ex) { - - } - } - - @Override - public void containerFull() { - // Uhh.... Yeah.... - } - - }, staticItems.toArray(new String[staticItems.size()])).broadcast(); + + // No reason to broadcast this intent if we don't need new static items anyways + if (!staticItems.isEmpty()) + new CreateStaticItemIntent(creatureObject, inventory, new StaticItemService.LootBoxHandler(creatureObject), staticItems.toArray(new String[staticItems.size()])).broadcast(); } } diff --git a/src/services/objects/StaticItemService.java b/src/services/objects/StaticItemService.java index e88abcae4..aa2c8f7b6 100644 --- a/src/services/objects/StaticItemService.java +++ b/src/services/objects/StaticItemService.java @@ -36,6 +36,7 @@ import java.sql.ResultSet; import java.sql.SQLException; import java.util.HashMap; import java.util.Map; +import network.packets.swg.zone.object_controller.ShowLootBox; import resources.client_info.ClientFactory; import resources.combat.DamageType; @@ -43,6 +44,7 @@ import resources.config.ConfigFile; import resources.control.Intent; import resources.control.Service; import resources.objects.SWGObject; +import resources.objects.creature.CreatureObject; import resources.objects.weapon.WeaponObject; import resources.objects.weapon.WeaponType; import resources.player.Player; @@ -686,8 +688,38 @@ public final class StaticItemService extends Service { return mods; } - public interface ObjectCreationHandler { - void success(SWGObject[] createdObjects); - void containerFull(); + public static abstract class ObjectCreationHandler { + public abstract void success(SWGObject[] createdObjects); + public abstract boolean isIgnoreVolume(); + + public void containerFull() { + + } + } + + public static final class LootBoxHandler extends ObjectCreationHandler { + + private final CreatureObject receiver; + + public LootBoxHandler(CreatureObject receiver) { + this.receiver = receiver; + } + + @Override + public void success(SWGObject[] createdObjects) { + long[] objectIds = new long[createdObjects.length]; + + for (int i = 0; i < objectIds.length; i++) { + objectIds[i] = createdObjects[i].getObjectId(); + } + + receiver.sendSelf(new ShowLootBox(receiver.getObjectId(), objectIds)); + } + + @Override + public boolean isIgnoreVolume() { + return true; + } + } } diff --git a/src/services/objects/UniformBoxService.java b/src/services/objects/UniformBoxService.java index 73cdf1aa4..cf3fee36d 100644 --- a/src/services/objects/UniformBoxService.java +++ b/src/services/objects/UniformBoxService.java @@ -121,25 +121,7 @@ public class UniformBoxService extends Service { staticItems.add(item); } - new CreateStaticItemIntent(creature, inventory, new ObjectCreationHandler() { - @Override - public void success(SWGObject[] createdObjects) { - int objectCount = createdObjects.length; - long[] objectIds = new long[objectCount]; - - for(int i = 0; i < objectCount; i++) { - objectIds[i] = createdObjects[i].getObjectId(); - } - - creature.sendSelf(new ShowLootBox(creature.getObjectId(), objectIds)); - } - - @Override - public void containerFull() { - - } - - }, staticItems.toArray(new String[staticItems.size()])).broadcast(); + new CreateStaticItemIntent(creature, inventory, new StaticItemService.LootBoxHandler(creature), staticItems.toArray(new String[staticItems.size()])).broadcast(); } }