diff --git a/src/resources/common/Forager.java b/src/resources/common/Forager.java index 98911cbc..bbeb532d 100644 --- a/src/resources/common/Forager.java +++ b/src/resources/common/Forager.java @@ -37,6 +37,8 @@ import resources.objects.creature.CreatureObject; import resources.objects.group.GroupObject; import resources.objects.tangible.TangibleObject; import services.ai.AIActor; +import services.ai.states.FollowState; +import tools.DevLog; /** * @author Charon @@ -468,12 +470,31 @@ public class Forager { treasureContainer.setAttachment("radial_filename", "object/treasureContainer"); treasureContainer.setAttachment("TreasureExtractorID", owner.getObjectID()); treasureContainer.setAttachment("TreasureGuards",guardList); - treasureContainer.setAttachment("ChestLevel",new Integer(spawnLevel)); +// treasureContainer.setAttachment("ChestLevel",new Integer(spawnLevel)); configureTreasureLoot(treasureContainer,owner,spawnLevel); NGECore.getInstance().lootService.DropLoot(owner, treasureContainer); owner.sendSystemMessage("@treasure_map/treasure_map:sys_time_limit",(byte)0); + Thread guardsThread = new Thread() { + public void run() { + try { + while (countAliveGuards(treasureContainer)>0){ + Thread.sleep(1000); + if (owner.getPosture()==14) + Thread.currentThread().interrupt(); + } + treasureContainer.setAttachment("radial_filename", "object/treasureContainer"); + owner.sendSystemMessage("@treasure_map/treasure_map:unlock_chest",(byte)0); + Thread.currentThread().interrupt(); + + } catch(InterruptedException va) { + System.out.println(va); + Thread.currentThread().interrupt(); // very important + } + } + }; + guardsThread.start(); // all down: owner.sendSystemMessage("@treasure_map/treasure_map:unlock_chest",(byte)0); } diff --git a/src/services/DevService.java b/src/services/DevService.java index 5eebd4c8..e43ceb89 100644 --- a/src/services/DevService.java +++ b/src/services/DevService.java @@ -33,6 +33,7 @@ import org.apache.mina.core.session.IoSession; import resources.common.Console; import resources.common.FileUtilities; +import resources.common.Forager; import resources.common.Opcodes; import resources.common.SpawnPoint; import resources.datatables.Posture; @@ -51,6 +52,9 @@ import main.NGECore; import engine.clientdata.ClientFileManager; import engine.clientdata.visitors.DatatableVisitor; import engine.clients.Client; +import engine.resources.container.CreatureContainerPermissions; +import engine.resources.container.CreaturePermissions; +import engine.resources.container.NullPermissions; import engine.resources.objects.SWGObject; import engine.resources.scene.Planet; import engine.resources.scene.Point3D; @@ -76,6 +80,8 @@ public class DevService implements INetworkDispatch { suiOptions.put((long) 1, "Character"); suiOptions.put((long) 2, "Items"); suiOptions.put((long) 3, "Locations"); + if (System.getProperty("user.name").equals("Charon")) + suiOptions.put((long) 4, "Treasure chest test"); break; case 1: // Character suiOptions.put((long) 10, "Set combat level to 90"); @@ -188,6 +194,26 @@ public class DevService implements INetworkDispatch { case 3: // Locations sendCharacterBuilderSUI(player, 11); return; + + case 4: // Test + TangibleObject treasureContainer = (TangibleObject) NGECore.getInstance().staticService.spawnObject("object/tangible/container/drum/shared_treasure_drum.iff", + owner.getPlanet().getName(), 0L, owner.getWorldPosition().x, owner.getWorldPosition().y, owner.getWorldPosition().z, 0.70F, 0.71F); + treasureContainer.setAttachment("radial_filename", "object/treasureContainer"); + + //treasureContainer.setContainerPermissions(CreatureContainerPermissions.CREATURE_CONTAINER_PERMISSIONS); + treasureContainer.setAttachment("TreasureExtractorID", owner.getObjectID()); + treasureContainer.add(core.objectService.createObject("object/tangible/inventory/shared_character_inventory.iff", treasureContainer.getPlanet())); + String template = "object/tangible/wearables/bracelet/shared_bracelet_s02_r.iff"; + TangibleObject droppedItem = (TangibleObject) core.objectService.createObject(template, planet); +// SWGObject lootedObjectInventory = treasureContainer.getSlottedObject("inventory"); +// lootedObjectInventory.add(droppedItem); +// + Forager forager = new Forager(); + forager.configureTreasureLoot(treasureContainer,(CreatureObject)owner,(short)90); + NGECore.getInstance().lootService.DropLoot((CreatureObject)owner, treasureContainer); + + //treasureContainer.add(droppedItem); + return; // Character case 10: // Set combat level to 90 diff --git a/src/services/LootService.java b/src/services/LootService.java index 45cebc89..6811ee64 100644 --- a/src/services/LootService.java +++ b/src/services/LootService.java @@ -230,12 +230,13 @@ public class LootService implements INetworkDispatch { // For autoloot //SWGObject requesterInventory = requester.getSlottedObject("inventory"); //System.out.println("lootRollSession.getDroppedItems() " + (lootRollSession.getDroppedItems())); + DevLog.debugout("Charon", "Loot Service", "lootRollSession.getDroppedItems().size() " + lootRollSession.getDroppedItems().size()); for (TangibleObject droppedItem : lootRollSession.getDroppedItems()){ - + DevLog.debugout("Charon", "Loot Service", "droppedItem " + droppedItem.getCustomName()); //droppedItem.setAttachment("radial_filename", "lootitem"); //if (! droppedItem.getTemplate().contains("shared_rare_loot_chest")) lootedObjectInventory.add(droppedItem); - + // RLS chest effect if (droppedItem.getAttachment("LootItemName").toString().contains("Loot Chest")){ @@ -586,7 +587,7 @@ public class LootService implements INetworkDispatch { @Override public FileVisitResult visitFile(Path file, BasicFileAttributes attrs) throws IOException { String actualFileName = file.getFileName().toString(); - actualFileName = actualFileName.substring(0, actualFileName.length()-3); + actualFileName = actualFileName.substring(0, actualFileName.length()-3).toLowerCase(); if (actualFileName.equals(itemName.toLowerCase())){ foundPath.add(file.toString()); } @@ -1065,7 +1066,7 @@ public class LootService implements INetworkDispatch { @Override public FileVisitResult visitFile(Path file, BasicFileAttributes attrs) throws IOException { String actualFileName = file.getFileName().toString(); - actualFileName = actualFileName.substring(0, actualFileName.length()-3); + actualFileName = actualFileName.substring(0, actualFileName.length()-3).toLowerCase(); if (actualFileName.equals(itemName.toLowerCase())){ foundPath.add(file.toString()); } @@ -1491,9 +1492,16 @@ public class LootService implements INetworkDispatch { public void handleCreditDrop(CreatureObject requester,TangibleObject lootedObject,LootRollSession lootRollSession){ int lootedCredits = 0; - AIActor ai = (AIActor) lootedObject.getAttachment("AI"); - String resType = ai.getMobileTemplate().getMeatType(); - if (lootedObject.isCreditRelieved() || resType!=null) + if (lootedObject.getAttachment("AI")!=null){ + AIActor ai = (AIActor) lootedObject.getAttachment("AI"); + String resType = ai.getMobileTemplate().getMeatType(); + if (resType!=null) + return; + } + + if (lootedObject.isCreditRelieved()) + return; + if (lootedObject.getTemplate().contains("shared_treasure_drum")) return; // Credit drop is depending on the CL of the looted CreatureObject @@ -2408,7 +2416,7 @@ public class LootService implements INetworkDispatch { @Override public FileVisitResult visitFile(Path file, BasicFileAttributes attrs) throws IOException { String actualFileName = file.getFileName().toString(); - actualFileName = actualFileName.substring(0, actualFileName.length()-3); + actualFileName = actualFileName.substring(0, actualFileName.length()-3).toLowerCase(); if (actualFileName.equals(itemName.toLowerCase())){ foundPath.add(file.toString()); } diff --git a/src/services/ai/states/DeathState.java b/src/services/ai/states/DeathState.java index 3ecdf65a..ed38449f 100644 --- a/src/services/ai/states/DeathState.java +++ b/src/services/ai/states/DeathState.java @@ -21,6 +21,7 @@ ******************************************************************************/ package services.ai.states; +import engine.resources.container.CreatureContainerPermissions; import main.NGECore; import resources.objects.creature.CreatureObject; import resources.objects.tangible.TangibleObject; @@ -38,6 +39,7 @@ public class DeathState extends AIState { CreatureObject killer = (CreatureObject)actor.getCreature().getKiller(); if (killer==null) killer = actor.getHighestDamageDealer(); + actor.getCreature().setContainerPermissions(CreatureContainerPermissions.CREATURE_CONTAINER_PERMISSIONS); NGECore.getInstance().lootService.DropLoot(killer,(TangibleObject)(actor.getCreature())); actor.destroyActor(); // to prevent standing up right after death diff --git a/src/services/pet/PetService.java b/src/services/pet/PetService.java index 27608cb0..45ee5cd6 100644 --- a/src/services/pet/PetService.java +++ b/src/services/pet/PetService.java @@ -1004,8 +1004,11 @@ public class PetService implements INetworkDispatch { actor.sendSystemMessage(OutOfBand.ProsePackage("@pet/pet_menu:too_hard"), DisplayType.Broadcast); } + Thread.currentThread().interrupt(); + } catch(InterruptedException v) { System.out.println(v); + Thread.currentThread().interrupt(); // very important } } }; diff --git a/src/services/sui/SUIService.java b/src/services/sui/SUIService.java index 8c4e6fc2..164f8ef9 100644 --- a/src/services/sui/SUIService.java +++ b/src/services/sui/SUIService.java @@ -85,6 +85,9 @@ public class SUIService implements INetworkDispatch { if(target == null || owner == null) return; +// if (getRadialFilename(target).equals("noradialoptions")) +// return; + if (target instanceof HarvesterObject){ HarvesterObject harvester = (HarvesterObject) target; Vector admins = harvester.getAdminList(); @@ -206,7 +209,7 @@ public class SUIService implements INetworkDispatch { }); swgOpcodes.put(Opcodes.SuiEventNotification, new INetworkRemoteEvent() { - + @Override public void handlePacket(IoSession session, IoBuffer data) throws Exception { @@ -232,7 +235,7 @@ public class SUIService implements INetworkDispatch { return; PyObject func = window.getFunctionByEventId(suiEvent.getEventType()); - + if(func != null) func.__call__(Py.java2py(owner), Py.java2py(window), Py.java2py(suiEvent.getEventType()), Py.java2py(suiEvent.getReturnList()));